From patchwork Fri Aug 2 10:38:21 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Markus Pargmann X-Patchwork-Id: 2837801 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 5093BBF535 for ; Fri, 2 Aug 2013 10:41:41 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 5A7482057F for ; Fri, 2 Aug 2013 10:41:40 +0000 (UTC) Received: from casper.infradead.org (casper.infradead.org [85.118.1.10]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 43A412057C for ; Fri, 2 Aug 2013 10:41:39 +0000 (UTC) Received: from merlin.infradead.org ([2001:4978:20e::2]) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1V5Cmm-0006Qi-9w; Fri, 02 Aug 2013 10:40:41 +0000 Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1V5CmI-00063g-KD; Fri, 02 Aug 2013 10:40:10 +0000 Received: from metis.ext.pengutronix.de ([2001:6f8:1178:4:290:27ff:fe1d:cc33]) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1V5Clz-0005xl-2v for linux-arm-kernel@lists.infradead.org; Fri, 02 Aug 2013 10:39:57 +0000 Received: from dude.hi.pengutronix.de ([2001:6f8:1178:2:21e:67ff:fe11:9c5c]) by metis.ext.pengutronix.de with esmtp (Exim 4.72) (envelope-from ) id 1V5Cl7-0005Su-Ed; Fri, 02 Aug 2013 12:38:57 +0200 Received: from mpa by dude.hi.pengutronix.de with local (Exim 4.80) (envelope-from ) id 1V5Cl6-0000UQ-UB; Fri, 02 Aug 2013 12:38:56 +0200 From: Markus Pargmann To: Sascha Hauer Subject: [PATCH 1/7] gpio: mxc: Support initialization as subdevice Date: Fri, 2 Aug 2013 12:38:21 +0200 Message-Id: <1375439907-10462-2-git-send-email-mpa@pengutronix.de> X-Mailer: git-send-email 1.8.4.rc0 In-Reply-To: <1375439907-10462-1-git-send-email-mpa@pengutronix.de> References: <1375439907-10462-1-git-send-email-mpa@pengutronix.de> X-SA-Exim-Connect-IP: 2001:6f8:1178:2:21e:67ff:fe11:9c5c X-SA-Exim-Mail-From: mpa@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-arm-kernel@lists.infradead.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20130802_063951_725374_9FCA9D8A X-CRM114-Status: GOOD ( 19.62 ) X-Spam-Score: -3.4 (---) Cc: devicetree@vger.kernel.org, Linus Walleij , Rob Herring , Markus Pargmann , Grant Likely , Shawn Guo , linux-arm-kernel@lists.infradead.org X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-5.7 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP On imx27 and imx21, there is no clear seperation between iomux control registers and GPIO data registers. For easier pingroup definitions, the gpio drivers will be initialized as subnodes of the iomux controller. It is necessary to share the registers between iomux and gpio. This patch adds support to pass a register memory region via platform data. Signed-off-by: Markus Pargmann --- drivers/gpio/gpio-mxc.c | 18 ++++++++++++++---- include/linux/platform_data/gpio-mxc.h | 17 +++++++++++++++++ 2 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 include/linux/platform_data/gpio-mxc.h diff --git a/drivers/gpio/gpio-mxc.c b/drivers/gpio/gpio-mxc.c index 875a7c5..41922e8 100644 --- a/drivers/gpio/gpio-mxc.c +++ b/drivers/gpio/gpio-mxc.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -401,6 +402,7 @@ static int mxc_gpio_probe(struct platform_device *pdev) struct device_node *np = pdev->dev.of_node; struct mxc_gpio_port *port; struct resource *iores; + struct mxc_gpio_platform_data *pdata = pdev->dev.platform_data; int irq_base; int err; @@ -410,10 +412,18 @@ static int mxc_gpio_probe(struct platform_device *pdev) if (!port) return -ENOMEM; - iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); - port->base = devm_ioremap_resource(&pdev->dev, iores); - if (IS_ERR(port->base)) - return PTR_ERR(port->base); + if (pdata) { + port->base = pdata->base; + if (!pdata->base) { + dev_err(&pdev->dev, "No mapped memory in platform_data\n"); + return -EINVAL; + } + } else { + iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); + port->base = devm_ioremap_resource(&pdev->dev, iores); + if (IS_ERR(port->base)) + return PTR_ERR(port->base); + } port->irq_high = platform_get_irq(pdev, 1); port->irq = platform_get_irq(pdev, 0); diff --git a/include/linux/platform_data/gpio-mxc.h b/include/linux/platform_data/gpio-mxc.h new file mode 100644 index 0000000..fb3e06b --- /dev/null +++ b/include/linux/platform_data/gpio-mxc.h @@ -0,0 +1,17 @@ +#ifndef _LINUX_GPIO_MXC_H +#define _LINUX_GPIO_MXC_H + +#include + +/* + * MXC GPIO driver platform data. If this platform data is passed to the + * driver, it will use the memory base defined in the struct. This is used for + * iomuxc drivers on imx1/imx21/imx27, where the GPIO data register is embedded + * between iomuxc registers. + */ + +struct mxc_gpio_platform_data { + void __iomem *base; +}; + +#endif /* _LINUX_GPIO_MXC_H */