linux-omap.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tarun Kanti DebBarma <tarun.kanti@ti.com>
To: linux-omap@vger.kernel.org
Cc: khilman@ti.com, tony@atomide.com,
	linux-arm-kernel@lists.infradead.org,
	Tarun Kanti DebBarma <tarun.kanti@ti.com>,
	Charulatha V <charu@ti.com>
Subject: [PATCH v9 11/31] gpio/omap: cleanup omap_gpio_mod_init function
Date: Wed, 14 Dec 2011 01:50:13 +0530	[thread overview]
Message-ID: <1323807633-23713-12-git-send-email-tarun.kanti@ti.com> (raw)
In-Reply-To: <1323807633-23713-1-git-send-email-tarun.kanti@ti.com>

With register offsets now defined for respective OMAP versions we can get rid
of cpu_class_* checks. This function now has common initialization code for
all OMAP versions. Initialization specific to OMAP16xx has been moved within
omap16xx_gpio_init().

Signed-off-by: Tarun Kanti DebBarma <tarun.kanti@ti.com>
Signed-off-by: Charulatha V <charu@ti.com>
Reviewed-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Acked-by: Tony Lindgren <tony@atomide.com>
---
 arch/arm/mach-omap1/gpio16xx.c |   35 +++++++++++++++++-
 drivers/gpio/gpio-omap.c       |   77 ++++++++++++----------------------------
 2 files changed, 57 insertions(+), 55 deletions(-)

diff --git a/arch/arm/mach-omap1/gpio16xx.c b/arch/arm/mach-omap1/gpio16xx.c
index 46bb57a..86ac415 100644
--- a/arch/arm/mach-omap1/gpio16xx.c
+++ b/arch/arm/mach-omap1/gpio16xx.c
@@ -24,6 +24,9 @@
 #define OMAP1610_GPIO4_BASE		0xfffbbc00
 #define OMAP1_MPUIO_VBASE		OMAP1_MPUIO_BASE
 
+/* smart idle, enable wakeup */
+#define SYSCONFIG_WORD			0x14
+
 /* mpu gpio */
 static struct __initdata resource omap16xx_mpu_gpio_resources[] = {
 	{
@@ -218,12 +221,42 @@ static struct __initdata platform_device * omap16xx_gpio_dev[] = {
 static int __init omap16xx_gpio_init(void)
 {
 	int i;
+	void __iomem *base;
+	struct resource *res;
+	struct platform_device *pdev;
+	struct omap_gpio_platform_data *pdata;
 
 	if (!cpu_is_omap16xx())
 		return -EINVAL;
 
-	for (i = 0; i < ARRAY_SIZE(omap16xx_gpio_dev); i++)
+	for (i = 0; i < ARRAY_SIZE(omap16xx_gpio_dev); i++) {
+		pdev = omap16xx_gpio_dev[i];
+		pdata = pdev->dev.platform_data;
+
+		res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+		if (unlikely(!res)) {
+			dev_err(&pdev->dev, "Invalid mem resource.\n");
+			return -ENODEV;
+		}
+
+		base = ioremap(res->start, resource_size(res));
+		if (unlikely(!base)) {
+			dev_err(&pdev->dev, "ioremap failed.\n");
+			return -ENOMEM;
+		}
+
+		__raw_writel(SYSCONFIG_WORD, base + OMAP1610_GPIO_SYSCONFIG);
+		iounmap(base);
+
+		/*
+		 * Enable system clock for GPIO module.
+		 * The CAM_CLK_CTRL *is* really the right place.
+		 */
+		omap_writel(omap_readl(ULPD_CAM_CLK_CTRL) | 0x04,
+					ULPD_CAM_CLK_CTRL);
+
 		platform_device_register(omap16xx_gpio_dev[i]);
+	}
 
 	return 0;
 }
diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
index c5bb2e2..b9d50cc 100644
--- a/drivers/gpio/gpio-omap.c
+++ b/drivers/gpio/gpio-omap.c
@@ -611,7 +611,6 @@ static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
 			if (!(isr & 1))
 				continue;
 
-#ifdef CONFIG_ARCH_OMAP1
 			/*
 			 * Some chips can't respond to both rising and falling
 			 * at the same time.  If this irq was requested with
@@ -621,7 +620,6 @@ static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
 			 */
 			if (bank->toggle_mask & (1 << gpio_index))
 				_toggle_gpio_edge_triggering(bank, gpio_index);
-#endif
 
 			generic_handle_irq(gpio_irq);
 		}
@@ -899,62 +897,30 @@ static void __init omap_gpio_show_rev(struct gpio_bank *bank)
  */
 static struct lock_class_key gpio_lock_class;
 
-/* TODO: Cleanup cpu_is_* checks */
 static void omap_gpio_mod_init(struct gpio_bank *bank)
 {
-	if (cpu_class_is_omap2()) {
-		if (cpu_is_omap44xx()) {
-			__raw_writel(0xffffffff, bank->base +
-					OMAP4_GPIO_IRQSTATUSCLR0);
-			__raw_writel(0x00000000, bank->base +
-					 OMAP4_GPIO_DEBOUNCENABLE);
-			/* Initialize interface clk ungated, module enabled */
-			__raw_writel(0, bank->base + OMAP4_GPIO_CTRL);
-		} else if (cpu_is_omap34xx()) {
-			__raw_writel(0x00000000, bank->base +
-					OMAP24XX_GPIO_IRQENABLE1);
-			__raw_writel(0xffffffff, bank->base +
-					OMAP24XX_GPIO_IRQSTATUS1);
-			__raw_writel(0x00000000, bank->base +
-					OMAP24XX_GPIO_DEBOUNCE_EN);
-
-			/* Initialize interface clk ungated, module enabled */
-			__raw_writel(0, bank->base + OMAP24XX_GPIO_CTRL);
-		}
-	} else if (cpu_class_is_omap1()) {
-		if (bank_is_mpuio(bank)) {
-			__raw_writew(0xffff, bank->base +
-				OMAP_MPUIO_GPIO_MASKIT / bank->stride);
-			mpuio_init(bank);
-		}
-		if (cpu_is_omap15xx() && bank->method == METHOD_GPIO_1510) {
-			__raw_writew(0xffff, bank->base
-						+ OMAP1510_GPIO_INT_MASK);
-			__raw_writew(0x0000, bank->base
-						+ OMAP1510_GPIO_INT_STATUS);
-		}
-		if (cpu_is_omap16xx() && bank->method == METHOD_GPIO_1610) {
-			__raw_writew(0x0000, bank->base
-						+ OMAP1610_GPIO_IRQENABLE1);
-			__raw_writew(0xffff, bank->base
-						+ OMAP1610_GPIO_IRQSTATUS1);
-			__raw_writew(0x0014, bank->base
-						+ OMAP1610_GPIO_SYSCONFIG);
+	void __iomem *base = bank->base;
+	u32 l = 0xffffffff;
 
-			/*
-			 * Enable system clock for GPIO module.
-			 * The CAM_CLK_CTRL *is* really the right place.
-			 */
-			omap_writel(omap_readl(ULPD_CAM_CLK_CTRL) | 0x04,
-						ULPD_CAM_CLK_CTRL);
-		}
-		if (cpu_is_omap7xx() && bank->method == METHOD_GPIO_7XX) {
-			__raw_writel(0xffffffff, bank->base
-						+ OMAP7XX_GPIO_INT_MASK);
-			__raw_writel(0x00000000, bank->base
-						+ OMAP7XX_GPIO_INT_STATUS);
-		}
+	if (bank->width == 16)
+		l = 0xffff;
+
+	if (bank_is_mpuio(bank)) {
+		__raw_writel(l, bank->base + bank->regs->irqenable);
+		return;
 	}
+
+	_gpio_rmw(base, bank->regs->irqenable, l, bank->regs->irqenable_inv);
+	_gpio_rmw(base, bank->regs->irqstatus, l,
+					bank->regs->irqenable_inv == false);
+	_gpio_rmw(base, bank->regs->irqenable, l, bank->regs->debounce_en != 0);
+	_gpio_rmw(base, bank->regs->irqenable, l, bank->regs->ctrl != 0);
+	if (bank->regs->debounce_en)
+		_gpio_rmw(base, bank->regs->debounce_en, 0, 1);
+
+	 /* Initialize interface clk ungated, module enabled */
+	if (bank->regs->ctrl)
+		_gpio_rmw(base, bank->regs->ctrl, 0, 1);
 }
 
 static __init void
@@ -1105,6 +1071,9 @@ static int __devinit omap_gpio_probe(struct platform_device *pdev)
 	pm_runtime_enable(bank->dev);
 	pm_runtime_get_sync(bank->dev);
 
+	if (bank_is_mpuio(bank))
+		mpuio_init(bank);
+
 	omap_gpio_mod_init(bank);
 	omap_gpio_chip_init(bank);
 	omap_gpio_show_rev(bank);
-- 
1.7.0.4


  parent reply	other threads:[~2011-12-13 20:21 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-12-13 20:20 [PATCH v9 00/31] gpio/omap: driver cleanup and fixes Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 01/31] gpio/omap: remove dependency on gpio_bank_count Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 02/31] gpio/omap: use flag to identify wakeup domain Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 03/31] gpio/omap: make gpio_context part of gpio_bank structure Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 04/31] gpio/omap: handle save/restore context in GPIO driver Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 05/31] gpio/omap: make non-wakeup GPIO part of pdata Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 06/31] gpio/omap: avoid cpu checks during module ena/disable Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 07/31] gpio/omap: further cleanup using wkup_en register Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 08/31] gpio/omap: use level/edge detect reg offsets Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 09/31] gpio/omap: remove hardcoded offsets in context save/restore Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 10/31] gpio/omap: cleanup set_gpio_triggering function Tarun Kanti DebBarma
2011-12-13 20:20 ` Tarun Kanti DebBarma [this message]
2011-12-13 20:20 ` [PATCH v9 12/31] gpio/omap: use pinctrl offset instead of macro Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 13/31] gpio/omap: remove unnecessary bit-masking for read access Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 14/31] gpio/omap: remove bank->method & METHOD_* macros Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 15/31] gpio/omap: fix bankwidth for OMAP7xx MPUIO Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 16/31] gpio/omap: use pm-runtime framework Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 17/31] gpio/omap: optimize suspend and resume functions Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 18/31] gpio/omap: cleanup prepare_for_idle and resume_after_idle Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 19/31] gpio/omap: fix debounce clock handling Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 20/31] gpio/omap: fix incorrect access of debounce module Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 21/31] gpio/omap: remove omap_gpio_save_context overhead Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 22/31] gpio/omap: save and restore debounce registers Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 23/31] gpio/omap: enable irq at the end of all configuration in restore Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 24/31] gpio/omap: restore OE only after setting the output level Tarun Kanti DebBarma
2011-12-13 20:20 ` [PATCH v9 25/31] gpio/omap: handle set_dataout reg capable IP on restore Tarun Kanti DebBarma
2011-12-16  7:28 ` [PATCH v9 00/31] gpio/omap: driver cleanup and fixes Shilimkar, Santosh
2011-12-16  8:24   ` DebBarma, Tarun Kanti

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1323807633-23713-12-git-send-email-tarun.kanti@ti.com \
    --to=tarun.kanti@ti.com \
    --cc=charu@ti.com \
    --cc=khilman@ti.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=tony@atomide.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).