From patchwork Fri Sep 22 06:07:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 13394972 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A3A8CE7D0CE for ; Fri, 22 Sep 2023 06:08:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References:Message-Id :MIME-Version:Subject:Date:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ZaRPSgkc3jy5+zdNlns7EtziPt6YWKGCKROj5B3C9uM=; b=K1rnlcDNdP429z D3BYHM0aF/83L+ejzZlD/LtrUciiuOEOb/hzn5Qqix9e6sMz7BX0O2Aiq3F10ovYlF3ejT2JOT5AW sD8zRUSm3khZbX6F42zIDmlUYvnA7ZNo22qBlITB/FpBEMZro11CPwA9Pep9+T8gPpdtKC8W+IELy I70GrX9bnnX4nLZ2poLMtInZuXuaezQTaWbIWyyer4Pt7Ur1wYynTeEX90VxGtzE+5AH/4YyUMqma G1zZhzcWVvjVgs0y0U3XGj/u9hwUN9rzULXCV/AQxMFyqY+REAi63XBk8sQk4N8nbl5/lmvSLgL+h 0Jzvnjkoc8HJE4Hw46Sw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qjZKt-0080uS-1K; Fri, 22 Sep 2023 06:08:19 +0000 Received: from mail-lj1-x22b.google.com ([2a00:1450:4864:20::22b]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qjZKg-0080oN-17 for linux-arm-kernel@lists.infradead.org; Fri, 22 Sep 2023 06:08:07 +0000 Received: by mail-lj1-x22b.google.com with SMTP id 38308e7fff4ca-2c01d22f332so37140661fa.0 for ; Thu, 21 Sep 2023 23:08:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1695362882; x=1695967682; darn=lists.infradead.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=++yx9IJ8E+PZjoxMl1CLd/MzC41autPKHycVRiUyVKQ=; b=tglvNJz3Z6PdOLtTl1HGDEDq2o4gXr5Ocb+ILuTFLC4pKtAEbwk+M0Ps5AEMLafJ4D NjE8wjiJ2JrnyqUQ4cRDqei8tQLx91CCB+WWs5baBcfNezJsPiwwr7q65DYTOMqW0OAM rEiCcfQ9YCZ0C6TlSjqfW2LhurBk2FN0djo3XKoK+qBEpCQGg4q14eQuokpovRf+QKzW YvoiMLTkzZL3Cx7McvsmaNx6E6i/y9PkI3BbQTxUR+WubU8zyVci0wRPncwOgOs+vGi1 F7gezmp5ENwqOVhGwqexEKUqfUMd/JkTQXWDoZVGbBlSZwoSiXiX3z4mRMmAjz9INMJr DCXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695362882; x=1695967682; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=++yx9IJ8E+PZjoxMl1CLd/MzC41autPKHycVRiUyVKQ=; b=vYMDdMZqe8xbunWvAjGlZ3fPd0Z90zLEXxR63vItg8GFporqrbPfTI2rG/aNVeH3GQ YpvO2z8X8rHNn8yHAC1IRKk2dZF2TO5i7XoUsXwKINaeqzpj+4TJYlVWDa7Y2IoBU/5X evN703Tiqpb5uAnMiPD7cI1RtxBAN98KHRV+WWd7pNxVlD2DV3klNFx2j3+y6c3IZ/9p gr3sUnggKLiEbTwjcDHa2+7KjejOvQnCcs2kDZ9Vpnw+F8ToYIfNZIguXb5QPt8+YHlO R05Dsbn2WfX3a7MB8Qpi3vVssJQnPEgsnPufFOe+2sgVDuRpgrg+T4EBBna4YqpfYC0L bR9Q== X-Gm-Message-State: AOJu0YyfnRGg7deuSBPIUxVs4ixp+SXbZ1A4CdMG6N3jZhFPqxl+83ul WIHduhgAFvB2xl0kBVqn5SnY8A== X-Google-Smtp-Source: AGHT+IGIsqnuMfAIqMdMUTMmXDu3vinQVWFl2mp4U9dRuQ5seLKSfpjjpbAD6W2oee/G5+2a7XRujQ== X-Received: by 2002:a2e:a4c4:0:b0:2bd:7bd:1a45 with SMTP id p4-20020a2ea4c4000000b002bd07bd1a45mr705519ljm.13.1695362882365; Thu, 21 Sep 2023 23:08:02 -0700 (PDT) Received: from [192.168.1.2] (c-05d8225c.014-348-6c756e10.bbcust.telenor.se. [92.34.216.5]) by smtp.gmail.com with ESMTPSA id w22-20020a05651c103600b002b9f4841913sm754329ljm.1.2023.09.21.23.08.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Sep 2023 23:08:01 -0700 (PDT) From: Linus Walleij Date: Fri, 22 Sep 2023 08:07:57 +0200 Subject: [PATCH v2 2/2] gpio: ixp4xx: Handle clock output on pin 14 and 15 MIME-Version: 1.0 Message-Id: <20230922-ixp4xx-gpio-clocks-v2-2-0215ee10976d@linaro.org> References: <20230922-ixp4xx-gpio-clocks-v2-0-0215ee10976d@linaro.org> In-Reply-To: <20230922-ixp4xx-gpio-clocks-v2-0-0215ee10976d@linaro.org> To: Linus Walleij , Imre Kaloz , Krzysztof Halasa , Bartosz Golaszewski , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-arm-kernel@lists.infradead.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, Linus Walleij X-Mailer: b4 0.12.3 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230921_230806_384345_2D6DB36C X-CRM114-Status: GOOD ( 18.63 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org This makes it possible to provide basic clock output on pins 14 and 15. The clocks are typically used by random electronics, not modeled in the device tree, so they just need to be provided on request. Signed-off-by: Linus Walleij --- drivers/gpio/gpio-ixp4xx.c | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/drivers/gpio/gpio-ixp4xx.c b/drivers/gpio/gpio-ixp4xx.c index dde6cf3a5779..d69954d19144 100644 --- a/drivers/gpio/gpio-ixp4xx.c +++ b/drivers/gpio/gpio-ixp4xx.c @@ -38,6 +38,18 @@ #define IXP4XX_GPIO_STYLE_MASK GENMASK(2, 0) #define IXP4XX_GPIO_STYLE_SIZE 3 +/* + * Clock output control register defines. + */ +#define IXP4XX_GPCLK_CLK0DC_SHIFT 0 +#define IXP4XX_GPCLK_CLK0TC_SHIFT 4 +#define IXP4XX_GPCLK_CLK0_MASK GENMASK(7, 0) +#define IXP4XX_GPCLK_MUX14 BIT(8) +#define IXP4XX_GPCLK_CLK1DC_SHIFT 16 +#define IXP4XX_GPCLK_CLK1TC_SHIFT 20 +#define IXP4XX_GPCLK_CLK1_MASK GENMASK(23, 16) +#define IXP4XX_GPCLK_MUX15 BIT(24) + /** * struct ixp4xx_gpio - IXP4 GPIO state container * @dev: containing device for this instance @@ -202,6 +214,7 @@ static int ixp4xx_gpio_probe(struct platform_device *pdev) struct ixp4xx_gpio *g; struct gpio_irq_chip *girq; struct device_node *irq_parent; + u32 val; int ret; g = devm_kzalloc(dev, sizeof(*g), GFP_KERNEL); @@ -227,11 +240,34 @@ static int ixp4xx_gpio_probe(struct platform_device *pdev) /* * Make sure GPIO 14 and 15 are NOT used as clocks but GPIO on - * specific machines. + * specific machines. For others, use the boot defaults as + * starting point. */ if (of_machine_is_compatible("dlink,dsm-g600-a") || of_machine_is_compatible("iom,nas-100d")) - __raw_writel(0x0, g->base + IXP4XX_REG_GPCLK); + val = 0; + else + val = __raw_readl(g->base + IXP4XX_REG_GPCLK); + + /* + * Enable clock outputs with default timings of requested clock. + * If you need control over TC and DC, add these to the device + * tree bindings and use them here. + */ + if (of_property_read_bool(np, "intel,ixp4xx-gpio14-clkout")) { + val &= ~IXP4XX_GPCLK_CLK0_MASK; + val |= (0 << IXP4XX_GPCLK_CLK0DC_SHIFT); + val |= (1 << IXP4XX_GPCLK_CLK0TC_SHIFT); + val |= IXP4XX_GPCLK_MUX14; + } + + if (of_property_read_bool(np, "intel,ixp4xx-gpio15-clkout")) { + val &= ~IXP4XX_GPCLK_CLK1_MASK; + val |= (0 << IXP4XX_GPCLK_CLK1DC_SHIFT); + val |= (1 << IXP4XX_GPCLK_CLK1TC_SHIFT); + val |= IXP4XX_GPCLK_MUX15; + } + __raw_writel(val, g->base + IXP4XX_REG_GPCLK); /* * This is a very special big-endian ARM issue: when the IXP4xx is