From: "Varadarajan, Charulatha" <charu@ti.com> To: linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: tony@atomide.com, khilman@deeprootsystems.com, paul@pwsan.com, Charulatha V <charu@ti.com> Subject: [PATCH 4/7] OMAP: GPIO: handle save/restore ctx in GPIO driver Date: Mon, 18 Apr 2011 20:36:54 +0530 [thread overview] Message-ID: <1303139217-10285-5-git-send-email-charu@ti.com> (raw) In-Reply-To: <no> From: Charulatha V <charu@ti.com> Modify omap_gpio_prepare_for_idle() & omap_gpio_resume_after_idle() functions to handle save context & restore context respectively in the OMAP GPIO driver itself instead of calling these functions from pm specific files. For this, in gpio_prepare_for_idle(), use omap_device_get_context_loss_count() and in gpio_resume_after_idle() call it again. If the count is different, do restore context. context lost count is modified in omap_sram_idle() path when pwrdm_post_transition() is called. But pwrdm_post_transition() is called only after omap_gpio_resume_after_idle() is called. Hence correct this so that context lost count is modified before calling omap_gpio_resume_after_idle(). omap_gpio_prepare_for_idle() & omap_gpio_resume_after_idle() do nothing if none of the GPIOs in a bank is being used. Also remove usage of cpu_is_* checks from the above mentioned functions and fix the multi-line comment style Signed-off-by: Charulatha V <charu@ti.com> --- Note that the usage of bank->method checks would be re-addressed during OMAP GPIO cleanup series which would follow this patch series arch/arm/mach-omap2/pm34xx.c | 22 +--- arch/arm/plat-omap/gpio.c | 226 ++++++++++++++++--------------- arch/arm/plat-omap/include/plat/gpio.h | 2 - 3 files changed, 122 insertions(+), 128 deletions(-) diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index 0c5e3a4..682d147 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c @@ -91,16 +91,6 @@ static struct powerdomain *mpu_pwrdm, *neon_pwrdm; static struct powerdomain *core_pwrdm, *per_pwrdm; static struct powerdomain *cam_pwrdm; -static inline void omap3_per_save_context(void) -{ - omap_gpio_save_context(); -} - -static inline void omap3_per_restore_context(void) -{ - omap_gpio_restore_context(); -} - static void omap3_enable_io_chain(void) { int timeout = 0; @@ -395,8 +385,10 @@ void omap_sram_idle(void) if (!is_suspending()) if (per_next_state < PWRDM_POWER_ON || core_next_state < PWRDM_POWER_ON) - if (!console_trylock()) + if (!console_trylock()) { + pwrdm_post_transition(); goto console_still_active; + } /* PER */ if (per_next_state < PWRDM_POWER_ON) { @@ -404,8 +396,6 @@ void omap_sram_idle(void) omap_uart_prepare_idle(2); omap_uart_prepare_idle(3); omap2_gpio_prepare_for_idle(per_going_off); - if (per_next_state == PWRDM_POWER_OFF) - omap3_per_save_context(); } /* CORE */ @@ -467,12 +457,12 @@ void omap_sram_idle(void) } omap3_intc_resume_idle(); + pwrdm_post_transition(); + /* PER */ if (per_next_state < PWRDM_POWER_ON) { per_prev_state = pwrdm_read_prev_pwrst(per_pwrdm); omap2_gpio_resume_after_idle(); - if (per_prev_state == PWRDM_POWER_OFF) - omap3_per_restore_context(); omap_uart_resume_idle(2); omap_uart_resume_idle(3); } @@ -490,8 +480,6 @@ console_still_active: omap3_disable_io_chain(); } - pwrdm_post_transition(); - clkdm_allow_idle(mpu_pwrdm->pwrdm_clkdms[0]); } diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c index e68da08..5d4ed6c 100644 --- a/arch/arm/plat-omap/gpio.c +++ b/arch/arm/plat-omap/gpio.c @@ -24,6 +24,8 @@ #include <linux/slab.h> #include <linux/pm_runtime.h> +#include <plat/omap_device.h> + #include <mach/hardware.h> #include <asm/irq.h> #include <mach/irqs.h> @@ -173,6 +175,7 @@ struct gpio_bank { bool dbck_flag; int stride; bool looses_context; + u32 ctx_lost_cnt_before; }; /* @@ -1852,6 +1855,8 @@ static struct sys_device omap_gpio_device = { #endif #ifdef CONFIG_ARCH_OMAP2PLUS +static void omap_gpio_save_context(struct gpio_bank *bank); +static void omap_gpio_restore_context(struct gpio_bank *bank); static int workaround_enabled; @@ -1861,9 +1866,14 @@ void omap2_gpio_prepare_for_idle(int off_mode) for (i = 0; i < gpio_bank_count; i++) { struct gpio_bank *bank = &gpio_bank[i]; + struct platform_device *pdev; u32 l1 = 0, l2 = 0; int j; + /* If the gpio bank is not used, do nothing */ + if (!bank->mod_usage) + continue; + if (!bank->looses_context) continue; @@ -1873,22 +1883,22 @@ void omap2_gpio_prepare_for_idle(int off_mode) if (!off_mode) continue; - /* If going to OFF, remove triggering for all + /* + * If going to OFF, remove triggering for all * non-wakeup GPIOs. Otherwise spurious IRQs will be - * generated. See OMAP2420 Errata item 1.101. */ + * generated. See OMAP2420 Errata item 1.101. + */ if (!(bank->enabled_non_wakeup_gpios)) - continue; + goto save_gpio_ctx; - if (cpu_is_omap24xx() || cpu_is_omap34xx()) { + if (bank->method == METHOD_GPIO_24XX) { bank->saved_datain = __raw_readl(bank->base + OMAP24XX_GPIO_DATAIN); l1 = __raw_readl(bank->base + OMAP24XX_GPIO_FALLINGDETECT); l2 = __raw_readl(bank->base + OMAP24XX_GPIO_RISINGDETECT); - } - - if (cpu_is_omap44xx()) { + } else if (bank->method == METHOD_GPIO_44XX) { bank->saved_datain = __raw_readl(bank->base + OMAP4_GPIO_DATAIN); l1 = __raw_readl(bank->base + @@ -1902,19 +1912,23 @@ void omap2_gpio_prepare_for_idle(int off_mode) l1 &= ~bank->enabled_non_wakeup_gpios; l2 &= ~bank->enabled_non_wakeup_gpios; - if (cpu_is_omap24xx() || cpu_is_omap34xx()) { + if (bank->method == METHOD_GPIO_24XX) { __raw_writel(l1, bank->base + OMAP24XX_GPIO_FALLINGDETECT); __raw_writel(l2, bank->base + OMAP24XX_GPIO_RISINGDETECT); - } - - if (cpu_is_omap44xx()) { + } else if (bank->method == METHOD_GPIO_44XX) { __raw_writel(l1, bank->base + OMAP4_GPIO_FALLINGDETECT); __raw_writel(l2, bank->base + OMAP4_GPIO_RISINGDETECT); } c++; + +save_gpio_ctx: + pdev = to_platform_device(bank->dev); + bank->ctx_lost_cnt_before = + omap_device_get_context_loss_count(pdev); + omap_gpio_save_context(bank); } if (!c) { workaround_enabled = 0; @@ -1926,33 +1940,43 @@ void omap2_gpio_prepare_for_idle(int off_mode) void omap2_gpio_resume_after_idle(void) { int i; + u32 ctx_lost_cnt_after; for (i = 0; i < gpio_bank_count; i++) { struct gpio_bank *bank = &gpio_bank[i]; + struct platform_device *pdev; u32 l = 0, gen, gen0, gen1; int j; + /* If the gpio bank is not used, do nothing */ + if (!bank->mod_usage) + continue; + if (!bank->looses_context) continue; for (j = 0; j < hweight_long(bank->dbck_enable_mask); j++) clk_enable(bank->dbck); - if (!workaround_enabled) + pdev = to_platform_device(bank->dev); + ctx_lost_cnt_after = omap_device_get_context_loss_count(pdev); + + if (ctx_lost_cnt_after == bank->ctx_lost_cnt_before) continue; + if (!workaround_enabled) + goto restore_gpio_ctx; + if (!(bank->enabled_non_wakeup_gpios)) - continue; + goto restore_gpio_ctx; - if (cpu_is_omap24xx() || cpu_is_omap34xx()) { + if (bank->method == METHOD_GPIO_24XX) { __raw_writel(bank->saved_fallingdetect, bank->base + OMAP24XX_GPIO_FALLINGDETECT); __raw_writel(bank->saved_risingdetect, bank->base + OMAP24XX_GPIO_RISINGDETECT); l = __raw_readl(bank->base + OMAP24XX_GPIO_DATAIN); - } - - if (cpu_is_omap44xx()) { + } else if (bank->method == METHOD_GPIO_44XX) { __raw_writel(bank->saved_fallingdetect, bank->base + OMAP4_GPIO_FALLINGDETECT); __raw_writel(bank->saved_risingdetect, @@ -1960,10 +1984,12 @@ void omap2_gpio_resume_after_idle(void) l = __raw_readl(bank->base + OMAP4_GPIO_DATAIN); } - /* Check if any of the non-wakeup interrupt GPIOs have changed + /* + * Check if any of the non-wakeup interrupt GPIOs have changed * state. If so, generate an IRQ by software. This is * horribly racy, but it's the best we can do to work around - * this silicon bug. */ + * this silicon bug. + */ l ^= bank->saved_datain; l &= bank->enabled_non_wakeup_gpios; @@ -1986,7 +2012,7 @@ void omap2_gpio_resume_after_idle(void) if (gen) { u32 old0, old1; - if (cpu_is_omap24xx() || cpu_is_omap34xx()) { + if (bank->method == METHOD_GPIO_24XX) { old0 = __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT0); old1 = __raw_readl(bank->base + @@ -1999,9 +2025,7 @@ void omap2_gpio_resume_after_idle(void) OMAP24XX_GPIO_LEVELDETECT0); __raw_writel(old1, bank->base + OMAP24XX_GPIO_LEVELDETECT1); - } - - if (cpu_is_omap44xx()) { + } else if (bank->method == METHOD_GPIO_44XX) { old0 = __raw_readl(bank->base + OMAP4_GPIO_LEVELDETECT0); old1 = __raw_readl(bank->base + @@ -2016,123 +2040,107 @@ void omap2_gpio_resume_after_idle(void) OMAP4_GPIO_LEVELDETECT1); } } + +restore_gpio_ctx: + omap_gpio_restore_context(bank); } } -#endif - -void omap_gpio_save_context(void) +void omap_gpio_save_context(struct gpio_bank *bank) { - int i; - - for (i = 0; i < gpio_bank_count; i++) { - struct gpio_bank *bank = &gpio_bank[i]; - - if (!bank->looses_context) - continue; - - if (bank->method == METHOD_GPIO_24XX) { - bank->context.irqenable1 = __raw_readl( + if (bank->method == METHOD_GPIO_24XX) { + bank->context.irqenable1 = __raw_readl( bank->base + OMAP24XX_GPIO_IRQENABLE1); - bank->context.irqenable2 = __raw_readl( + bank->context.irqenable2 = __raw_readl( bank->base + OMAP24XX_GPIO_IRQENABLE2); - bank->context.wake_en = __raw_readl( + bank->context.wake_en = __raw_readl( bank->base + OMAP24XX_GPIO_WAKE_EN); - bank->context.ctrl = __raw_readl( + bank->context.ctrl = __raw_readl( bank->base + OMAP24XX_GPIO_CTRL); - bank->context.oe = __raw_readl( + bank->context.oe = __raw_readl( bank->base + OMAP24XX_GPIO_OE); - bank->context.leveldetect0 = __raw_readl(bank->base + + bank->context.leveldetect0 = __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT0); - bank->context.leveldetect1 = __raw_readl(bank->base + + bank->context.leveldetect1 = __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT1); - bank->context.risingdetect = __raw_readl(bank->base + + bank->context.risingdetect = __raw_readl(bank->base + OMAP24XX_GPIO_RISINGDETECT); - bank->context.fallingdetect = __raw_readl(bank->base + + bank->context.fallingdetect = __raw_readl(bank->base + OMAP24XX_GPIO_FALLINGDETECT); - bank->context.dataout = __raw_readl( + bank->context.dataout = __raw_readl( bank->base + OMAP24XX_GPIO_DATAOUT); - } else if (bank->method == METHOD_GPIO_44XX) { - bank->context.irqenable1 = __raw_readl( + } else if (bank->method == METHOD_GPIO_44XX) { + bank->context.irqenable1 = __raw_readl( bank->base + OMAP4_GPIO_IRQSTATUSSET0); - bank->context.irqenable2 = __raw_readl( + bank->context.irqenable2 = __raw_readl( bank->base + OMAP4_GPIO_IRQSTATUSSET1); - bank->context.wake_en = __raw_readl( + bank->context.wake_en = __raw_readl( bank->base + OMAP4_GPIO_IRQWAKEN0); - bank->context.ctrl = __raw_readl( + bank->context.ctrl = __raw_readl( bank->base + OMAP4_GPIO_CTRL); - bank->context.oe = __raw_readl( + bank->context.oe = __raw_readl( bank->base + OMAP24XX_GPIO_OE); - bank->context.leveldetect0 = __raw_readl(bank->base + + bank->context.leveldetect0 = __raw_readl(bank->base + OMAP4_GPIO_LEVELDETECT0); - bank->context.leveldetect1 = __raw_readl(bank->base + + bank->context.leveldetect1 = __raw_readl(bank->base + OMAP4_GPIO_LEVELDETECT1); - bank->context.risingdetect = __raw_readl(bank->base + + bank->context.risingdetect = __raw_readl(bank->base + OMAP4_GPIO_RISINGDETECT); - bank->context.fallingdetect = __raw_readl(bank->base + + bank->context.fallingdetect = __raw_readl(bank->base + OMAP4_GPIO_FALLINGDETECT); - bank->context.dataout = __raw_readl( + bank->context.dataout = __raw_readl( bank->base + OMAP4_GPIO_DATAOUT); - } } } -void omap_gpio_restore_context(void) +void omap_gpio_restore_context(struct gpio_bank *bank) { - int i; - - for (i = 0; i < gpio_bank_count; i++) { - struct gpio_bank *bank = &gpio_bank[i]; - - if (!bank->looses_context) - continue; - - if (bank->method == METHOD_GPIO_24XX) { - __raw_writel(bank->context.irqenable1, bank->base + - OMAP24XX_GPIO_IRQENABLE1); - __raw_writel(bank->context.irqenable2, bank->base + - OMAP24XX_GPIO_IRQENABLE2); - __raw_writel(bank->context.wake_en, bank->base + - OMAP24XX_GPIO_WAKE_EN); - __raw_writel(bank->context.ctrl, bank->base + - OMAP24XX_GPIO_CTRL); - __raw_writel(bank->context.oe, bank->base + - OMAP24XX_GPIO_OE); - __raw_writel(bank->context.leveldetect0, bank->base + - OMAP24XX_GPIO_LEVELDETECT0); - __raw_writel(bank->context.leveldetect1, bank->base + - OMAP24XX_GPIO_LEVELDETECT1); - __raw_writel(bank->context.risingdetect, bank->base + - OMAP24XX_GPIO_RISINGDETECT); - __raw_writel(bank->context.fallingdetect, bank->base + - OMAP24XX_GPIO_FALLINGDETECT); - __raw_writel(bank->context.dataout, bank->base + - OMAP24XX_GPIO_DATAOUT); - } else if (bank->method == METHOD_GPIO_44XX) { - __raw_writel(bank->context.irqenable1, bank->base + - OMAP4_GPIO_IRQSTATUSSET0); - __raw_writel(bank->context.irqenable2, bank->base + - OMAP4_GPIO_IRQSTATUSSET1); - __raw_writel(bank->context.wake_en, bank->base + - OMAP4_GPIO_IRQWAKEN0); - __raw_writel(bank->context.ctrl, bank->base + - OMAP4_GPIO_CTRL); - __raw_writel(bank->context.oe, bank->base + - OMAP24XX_GPIO_OE); - __raw_writel(bank->context.leveldetect0, bank->base + - OMAP4_GPIO_LEVELDETECT0); - __raw_writel(bank->context.leveldetect1, bank->base + - OMAP4_GPIO_LEVELDETECT1); - __raw_writel(bank->context.risingdetect, bank->base + - OMAP4_GPIO_RISINGDETECT); - __raw_writel(bank->context.fallingdetect, bank->base + - OMAP4_GPIO_FALLINGDETECT); - __raw_writel(bank->context.dataout, bank->base + - OMAP4_GPIO_DATAOUT); - } + if (bank->method == METHOD_GPIO_24XX) { + __raw_writel(bank->context.irqenable1, bank->base + + OMAP24XX_GPIO_IRQENABLE1); + __raw_writel(bank->context.irqenable2, bank->base + + OMAP24XX_GPIO_IRQENABLE2); + __raw_writel(bank->context.wake_en, bank->base + + OMAP24XX_GPIO_WAKE_EN); + __raw_writel(bank->context.ctrl, bank->base + + OMAP24XX_GPIO_CTRL); + __raw_writel(bank->context.oe, bank->base + + OMAP24XX_GPIO_OE); + __raw_writel(bank->context.leveldetect0, bank->base + + OMAP24XX_GPIO_LEVELDETECT0); + __raw_writel(bank->context.leveldetect1, bank->base + + OMAP24XX_GPIO_LEVELDETECT1); + __raw_writel(bank->context.risingdetect, bank->base + + OMAP24XX_GPIO_RISINGDETECT); + __raw_writel(bank->context.fallingdetect, bank->base + + OMAP24XX_GPIO_FALLINGDETECT); + __raw_writel(bank->context.dataout, bank->base + + OMAP24XX_GPIO_DATAOUT); + } else if (bank->method == METHOD_GPIO_44XX) { + __raw_writel(bank->context.irqenable1, bank->base + + OMAP4_GPIO_IRQSTATUSSET0); + __raw_writel(bank->context.irqenable2, bank->base + + OMAP4_GPIO_IRQSTATUSSET1); + __raw_writel(bank->context.wake_en, bank->base + + OMAP4_GPIO_IRQWAKEN0); + __raw_writel(bank->context.ctrl, bank->base + + OMAP4_GPIO_CTRL); + __raw_writel(bank->context.oe, bank->base + + OMAP24XX_GPIO_OE); + __raw_writel(bank->context.leveldetect0, bank->base + + OMAP4_GPIO_LEVELDETECT0); + __raw_writel(bank->context.leveldetect1, bank->base + + OMAP4_GPIO_LEVELDETECT1); + __raw_writel(bank->context.risingdetect, bank->base + + OMAP4_GPIO_RISINGDETECT); + __raw_writel(bank->context.fallingdetect, bank->base + + OMAP4_GPIO_FALLINGDETECT); + __raw_writel(bank->context.dataout, bank->base + + OMAP4_GPIO_DATAOUT); } } +#endif static struct platform_driver omap_gpio_driver = { .probe = omap_gpio_probe, diff --git a/arch/arm/plat-omap/include/plat/gpio.h b/arch/arm/plat-omap/include/plat/gpio.h index 15aeb71..84b9106 100644 --- a/arch/arm/plat-omap/include/plat/gpio.h +++ b/arch/arm/plat-omap/include/plat/gpio.h @@ -87,8 +87,6 @@ extern void omap2_gpio_prepare_for_idle(int off_mode); extern void omap2_gpio_resume_after_idle(void); extern void omap_set_gpio_debounce(int gpio, int enable); extern void omap_set_gpio_debounce_time(int gpio, int enable); -extern void omap_gpio_save_context(void); -extern void omap_gpio_restore_context(void); /*-------------------------------------------------------------------------*/ /* Wrappers for "new style" GPIO calls, using the new infrastructure -- 1.7.1
WARNING: multiple messages have this Message-ID (diff)
From: charu@ti.com (Varadarajan, Charulatha) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 4/7] OMAP: GPIO: handle save/restore ctx in GPIO driver Date: Mon, 18 Apr 2011 20:36:54 +0530 [thread overview] Message-ID: <1303139217-10285-5-git-send-email-charu@ti.com> (raw) In-Reply-To: <no> From: Charulatha V <charu@ti.com> Modify omap_gpio_prepare_for_idle() & omap_gpio_resume_after_idle() functions to handle save context & restore context respectively in the OMAP GPIO driver itself instead of calling these functions from pm specific files. For this, in gpio_prepare_for_idle(), use omap_device_get_context_loss_count() and in gpio_resume_after_idle() call it again. If the count is different, do restore context. context lost count is modified in omap_sram_idle() path when pwrdm_post_transition() is called. But pwrdm_post_transition() is called only after omap_gpio_resume_after_idle() is called. Hence correct this so that context lost count is modified before calling omap_gpio_resume_after_idle(). omap_gpio_prepare_for_idle() & omap_gpio_resume_after_idle() do nothing if none of the GPIOs in a bank is being used. Also remove usage of cpu_is_* checks from the above mentioned functions and fix the multi-line comment style Signed-off-by: Charulatha V <charu@ti.com> --- Note that the usage of bank->method checks would be re-addressed during OMAP GPIO cleanup series which would follow this patch series arch/arm/mach-omap2/pm34xx.c | 22 +--- arch/arm/plat-omap/gpio.c | 226 ++++++++++++++++--------------- arch/arm/plat-omap/include/plat/gpio.h | 2 - 3 files changed, 122 insertions(+), 128 deletions(-) diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index 0c5e3a4..682d147 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c @@ -91,16 +91,6 @@ static struct powerdomain *mpu_pwrdm, *neon_pwrdm; static struct powerdomain *core_pwrdm, *per_pwrdm; static struct powerdomain *cam_pwrdm; -static inline void omap3_per_save_context(void) -{ - omap_gpio_save_context(); -} - -static inline void omap3_per_restore_context(void) -{ - omap_gpio_restore_context(); -} - static void omap3_enable_io_chain(void) { int timeout = 0; @@ -395,8 +385,10 @@ void omap_sram_idle(void) if (!is_suspending()) if (per_next_state < PWRDM_POWER_ON || core_next_state < PWRDM_POWER_ON) - if (!console_trylock()) + if (!console_trylock()) { + pwrdm_post_transition(); goto console_still_active; + } /* PER */ if (per_next_state < PWRDM_POWER_ON) { @@ -404,8 +396,6 @@ void omap_sram_idle(void) omap_uart_prepare_idle(2); omap_uart_prepare_idle(3); omap2_gpio_prepare_for_idle(per_going_off); - if (per_next_state == PWRDM_POWER_OFF) - omap3_per_save_context(); } /* CORE */ @@ -467,12 +457,12 @@ void omap_sram_idle(void) } omap3_intc_resume_idle(); + pwrdm_post_transition(); + /* PER */ if (per_next_state < PWRDM_POWER_ON) { per_prev_state = pwrdm_read_prev_pwrst(per_pwrdm); omap2_gpio_resume_after_idle(); - if (per_prev_state == PWRDM_POWER_OFF) - omap3_per_restore_context(); omap_uart_resume_idle(2); omap_uart_resume_idle(3); } @@ -490,8 +480,6 @@ console_still_active: omap3_disable_io_chain(); } - pwrdm_post_transition(); - clkdm_allow_idle(mpu_pwrdm->pwrdm_clkdms[0]); } diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c index e68da08..5d4ed6c 100644 --- a/arch/arm/plat-omap/gpio.c +++ b/arch/arm/plat-omap/gpio.c @@ -24,6 +24,8 @@ #include <linux/slab.h> #include <linux/pm_runtime.h> +#include <plat/omap_device.h> + #include <mach/hardware.h> #include <asm/irq.h> #include <mach/irqs.h> @@ -173,6 +175,7 @@ struct gpio_bank { bool dbck_flag; int stride; bool looses_context; + u32 ctx_lost_cnt_before; }; /* @@ -1852,6 +1855,8 @@ static struct sys_device omap_gpio_device = { #endif #ifdef CONFIG_ARCH_OMAP2PLUS +static void omap_gpio_save_context(struct gpio_bank *bank); +static void omap_gpio_restore_context(struct gpio_bank *bank); static int workaround_enabled; @@ -1861,9 +1866,14 @@ void omap2_gpio_prepare_for_idle(int off_mode) for (i = 0; i < gpio_bank_count; i++) { struct gpio_bank *bank = &gpio_bank[i]; + struct platform_device *pdev; u32 l1 = 0, l2 = 0; int j; + /* If the gpio bank is not used, do nothing */ + if (!bank->mod_usage) + continue; + if (!bank->looses_context) continue; @@ -1873,22 +1883,22 @@ void omap2_gpio_prepare_for_idle(int off_mode) if (!off_mode) continue; - /* If going to OFF, remove triggering for all + /* + * If going to OFF, remove triggering for all * non-wakeup GPIOs. Otherwise spurious IRQs will be - * generated. See OMAP2420 Errata item 1.101. */ + * generated. See OMAP2420 Errata item 1.101. + */ if (!(bank->enabled_non_wakeup_gpios)) - continue; + goto save_gpio_ctx; - if (cpu_is_omap24xx() || cpu_is_omap34xx()) { + if (bank->method == METHOD_GPIO_24XX) { bank->saved_datain = __raw_readl(bank->base + OMAP24XX_GPIO_DATAIN); l1 = __raw_readl(bank->base + OMAP24XX_GPIO_FALLINGDETECT); l2 = __raw_readl(bank->base + OMAP24XX_GPIO_RISINGDETECT); - } - - if (cpu_is_omap44xx()) { + } else if (bank->method == METHOD_GPIO_44XX) { bank->saved_datain = __raw_readl(bank->base + OMAP4_GPIO_DATAIN); l1 = __raw_readl(bank->base + @@ -1902,19 +1912,23 @@ void omap2_gpio_prepare_for_idle(int off_mode) l1 &= ~bank->enabled_non_wakeup_gpios; l2 &= ~bank->enabled_non_wakeup_gpios; - if (cpu_is_omap24xx() || cpu_is_omap34xx()) { + if (bank->method == METHOD_GPIO_24XX) { __raw_writel(l1, bank->base + OMAP24XX_GPIO_FALLINGDETECT); __raw_writel(l2, bank->base + OMAP24XX_GPIO_RISINGDETECT); - } - - if (cpu_is_omap44xx()) { + } else if (bank->method == METHOD_GPIO_44XX) { __raw_writel(l1, bank->base + OMAP4_GPIO_FALLINGDETECT); __raw_writel(l2, bank->base + OMAP4_GPIO_RISINGDETECT); } c++; + +save_gpio_ctx: + pdev = to_platform_device(bank->dev); + bank->ctx_lost_cnt_before = + omap_device_get_context_loss_count(pdev); + omap_gpio_save_context(bank); } if (!c) { workaround_enabled = 0; @@ -1926,33 +1940,43 @@ void omap2_gpio_prepare_for_idle(int off_mode) void omap2_gpio_resume_after_idle(void) { int i; + u32 ctx_lost_cnt_after; for (i = 0; i < gpio_bank_count; i++) { struct gpio_bank *bank = &gpio_bank[i]; + struct platform_device *pdev; u32 l = 0, gen, gen0, gen1; int j; + /* If the gpio bank is not used, do nothing */ + if (!bank->mod_usage) + continue; + if (!bank->looses_context) continue; for (j = 0; j < hweight_long(bank->dbck_enable_mask); j++) clk_enable(bank->dbck); - if (!workaround_enabled) + pdev = to_platform_device(bank->dev); + ctx_lost_cnt_after = omap_device_get_context_loss_count(pdev); + + if (ctx_lost_cnt_after == bank->ctx_lost_cnt_before) continue; + if (!workaround_enabled) + goto restore_gpio_ctx; + if (!(bank->enabled_non_wakeup_gpios)) - continue; + goto restore_gpio_ctx; - if (cpu_is_omap24xx() || cpu_is_omap34xx()) { + if (bank->method == METHOD_GPIO_24XX) { __raw_writel(bank->saved_fallingdetect, bank->base + OMAP24XX_GPIO_FALLINGDETECT); __raw_writel(bank->saved_risingdetect, bank->base + OMAP24XX_GPIO_RISINGDETECT); l = __raw_readl(bank->base + OMAP24XX_GPIO_DATAIN); - } - - if (cpu_is_omap44xx()) { + } else if (bank->method == METHOD_GPIO_44XX) { __raw_writel(bank->saved_fallingdetect, bank->base + OMAP4_GPIO_FALLINGDETECT); __raw_writel(bank->saved_risingdetect, @@ -1960,10 +1984,12 @@ void omap2_gpio_resume_after_idle(void) l = __raw_readl(bank->base + OMAP4_GPIO_DATAIN); } - /* Check if any of the non-wakeup interrupt GPIOs have changed + /* + * Check if any of the non-wakeup interrupt GPIOs have changed * state. If so, generate an IRQ by software. This is * horribly racy, but it's the best we can do to work around - * this silicon bug. */ + * this silicon bug. + */ l ^= bank->saved_datain; l &= bank->enabled_non_wakeup_gpios; @@ -1986,7 +2012,7 @@ void omap2_gpio_resume_after_idle(void) if (gen) { u32 old0, old1; - if (cpu_is_omap24xx() || cpu_is_omap34xx()) { + if (bank->method == METHOD_GPIO_24XX) { old0 = __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT0); old1 = __raw_readl(bank->base + @@ -1999,9 +2025,7 @@ void omap2_gpio_resume_after_idle(void) OMAP24XX_GPIO_LEVELDETECT0); __raw_writel(old1, bank->base + OMAP24XX_GPIO_LEVELDETECT1); - } - - if (cpu_is_omap44xx()) { + } else if (bank->method == METHOD_GPIO_44XX) { old0 = __raw_readl(bank->base + OMAP4_GPIO_LEVELDETECT0); old1 = __raw_readl(bank->base + @@ -2016,123 +2040,107 @@ void omap2_gpio_resume_after_idle(void) OMAP4_GPIO_LEVELDETECT1); } } + +restore_gpio_ctx: + omap_gpio_restore_context(bank); } } -#endif - -void omap_gpio_save_context(void) +void omap_gpio_save_context(struct gpio_bank *bank) { - int i; - - for (i = 0; i < gpio_bank_count; i++) { - struct gpio_bank *bank = &gpio_bank[i]; - - if (!bank->looses_context) - continue; - - if (bank->method == METHOD_GPIO_24XX) { - bank->context.irqenable1 = __raw_readl( + if (bank->method == METHOD_GPIO_24XX) { + bank->context.irqenable1 = __raw_readl( bank->base + OMAP24XX_GPIO_IRQENABLE1); - bank->context.irqenable2 = __raw_readl( + bank->context.irqenable2 = __raw_readl( bank->base + OMAP24XX_GPIO_IRQENABLE2); - bank->context.wake_en = __raw_readl( + bank->context.wake_en = __raw_readl( bank->base + OMAP24XX_GPIO_WAKE_EN); - bank->context.ctrl = __raw_readl( + bank->context.ctrl = __raw_readl( bank->base + OMAP24XX_GPIO_CTRL); - bank->context.oe = __raw_readl( + bank->context.oe = __raw_readl( bank->base + OMAP24XX_GPIO_OE); - bank->context.leveldetect0 = __raw_readl(bank->base + + bank->context.leveldetect0 = __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT0); - bank->context.leveldetect1 = __raw_readl(bank->base + + bank->context.leveldetect1 = __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT1); - bank->context.risingdetect = __raw_readl(bank->base + + bank->context.risingdetect = __raw_readl(bank->base + OMAP24XX_GPIO_RISINGDETECT); - bank->context.fallingdetect = __raw_readl(bank->base + + bank->context.fallingdetect = __raw_readl(bank->base + OMAP24XX_GPIO_FALLINGDETECT); - bank->context.dataout = __raw_readl( + bank->context.dataout = __raw_readl( bank->base + OMAP24XX_GPIO_DATAOUT); - } else if (bank->method == METHOD_GPIO_44XX) { - bank->context.irqenable1 = __raw_readl( + } else if (bank->method == METHOD_GPIO_44XX) { + bank->context.irqenable1 = __raw_readl( bank->base + OMAP4_GPIO_IRQSTATUSSET0); - bank->context.irqenable2 = __raw_readl( + bank->context.irqenable2 = __raw_readl( bank->base + OMAP4_GPIO_IRQSTATUSSET1); - bank->context.wake_en = __raw_readl( + bank->context.wake_en = __raw_readl( bank->base + OMAP4_GPIO_IRQWAKEN0); - bank->context.ctrl = __raw_readl( + bank->context.ctrl = __raw_readl( bank->base + OMAP4_GPIO_CTRL); - bank->context.oe = __raw_readl( + bank->context.oe = __raw_readl( bank->base + OMAP24XX_GPIO_OE); - bank->context.leveldetect0 = __raw_readl(bank->base + + bank->context.leveldetect0 = __raw_readl(bank->base + OMAP4_GPIO_LEVELDETECT0); - bank->context.leveldetect1 = __raw_readl(bank->base + + bank->context.leveldetect1 = __raw_readl(bank->base + OMAP4_GPIO_LEVELDETECT1); - bank->context.risingdetect = __raw_readl(bank->base + + bank->context.risingdetect = __raw_readl(bank->base + OMAP4_GPIO_RISINGDETECT); - bank->context.fallingdetect = __raw_readl(bank->base + + bank->context.fallingdetect = __raw_readl(bank->base + OMAP4_GPIO_FALLINGDETECT); - bank->context.dataout = __raw_readl( + bank->context.dataout = __raw_readl( bank->base + OMAP4_GPIO_DATAOUT); - } } } -void omap_gpio_restore_context(void) +void omap_gpio_restore_context(struct gpio_bank *bank) { - int i; - - for (i = 0; i < gpio_bank_count; i++) { - struct gpio_bank *bank = &gpio_bank[i]; - - if (!bank->looses_context) - continue; - - if (bank->method == METHOD_GPIO_24XX) { - __raw_writel(bank->context.irqenable1, bank->base + - OMAP24XX_GPIO_IRQENABLE1); - __raw_writel(bank->context.irqenable2, bank->base + - OMAP24XX_GPIO_IRQENABLE2); - __raw_writel(bank->context.wake_en, bank->base + - OMAP24XX_GPIO_WAKE_EN); - __raw_writel(bank->context.ctrl, bank->base + - OMAP24XX_GPIO_CTRL); - __raw_writel(bank->context.oe, bank->base + - OMAP24XX_GPIO_OE); - __raw_writel(bank->context.leveldetect0, bank->base + - OMAP24XX_GPIO_LEVELDETECT0); - __raw_writel(bank->context.leveldetect1, bank->base + - OMAP24XX_GPIO_LEVELDETECT1); - __raw_writel(bank->context.risingdetect, bank->base + - OMAP24XX_GPIO_RISINGDETECT); - __raw_writel(bank->context.fallingdetect, bank->base + - OMAP24XX_GPIO_FALLINGDETECT); - __raw_writel(bank->context.dataout, bank->base + - OMAP24XX_GPIO_DATAOUT); - } else if (bank->method == METHOD_GPIO_44XX) { - __raw_writel(bank->context.irqenable1, bank->base + - OMAP4_GPIO_IRQSTATUSSET0); - __raw_writel(bank->context.irqenable2, bank->base + - OMAP4_GPIO_IRQSTATUSSET1); - __raw_writel(bank->context.wake_en, bank->base + - OMAP4_GPIO_IRQWAKEN0); - __raw_writel(bank->context.ctrl, bank->base + - OMAP4_GPIO_CTRL); - __raw_writel(bank->context.oe, bank->base + - OMAP24XX_GPIO_OE); - __raw_writel(bank->context.leveldetect0, bank->base + - OMAP4_GPIO_LEVELDETECT0); - __raw_writel(bank->context.leveldetect1, bank->base + - OMAP4_GPIO_LEVELDETECT1); - __raw_writel(bank->context.risingdetect, bank->base + - OMAP4_GPIO_RISINGDETECT); - __raw_writel(bank->context.fallingdetect, bank->base + - OMAP4_GPIO_FALLINGDETECT); - __raw_writel(bank->context.dataout, bank->base + - OMAP4_GPIO_DATAOUT); - } + if (bank->method == METHOD_GPIO_24XX) { + __raw_writel(bank->context.irqenable1, bank->base + + OMAP24XX_GPIO_IRQENABLE1); + __raw_writel(bank->context.irqenable2, bank->base + + OMAP24XX_GPIO_IRQENABLE2); + __raw_writel(bank->context.wake_en, bank->base + + OMAP24XX_GPIO_WAKE_EN); + __raw_writel(bank->context.ctrl, bank->base + + OMAP24XX_GPIO_CTRL); + __raw_writel(bank->context.oe, bank->base + + OMAP24XX_GPIO_OE); + __raw_writel(bank->context.leveldetect0, bank->base + + OMAP24XX_GPIO_LEVELDETECT0); + __raw_writel(bank->context.leveldetect1, bank->base + + OMAP24XX_GPIO_LEVELDETECT1); + __raw_writel(bank->context.risingdetect, bank->base + + OMAP24XX_GPIO_RISINGDETECT); + __raw_writel(bank->context.fallingdetect, bank->base + + OMAP24XX_GPIO_FALLINGDETECT); + __raw_writel(bank->context.dataout, bank->base + + OMAP24XX_GPIO_DATAOUT); + } else if (bank->method == METHOD_GPIO_44XX) { + __raw_writel(bank->context.irqenable1, bank->base + + OMAP4_GPIO_IRQSTATUSSET0); + __raw_writel(bank->context.irqenable2, bank->base + + OMAP4_GPIO_IRQSTATUSSET1); + __raw_writel(bank->context.wake_en, bank->base + + OMAP4_GPIO_IRQWAKEN0); + __raw_writel(bank->context.ctrl, bank->base + + OMAP4_GPIO_CTRL); + __raw_writel(bank->context.oe, bank->base + + OMAP24XX_GPIO_OE); + __raw_writel(bank->context.leveldetect0, bank->base + + OMAP4_GPIO_LEVELDETECT0); + __raw_writel(bank->context.leveldetect1, bank->base + + OMAP4_GPIO_LEVELDETECT1); + __raw_writel(bank->context.risingdetect, bank->base + + OMAP4_GPIO_RISINGDETECT); + __raw_writel(bank->context.fallingdetect, bank->base + + OMAP4_GPIO_FALLINGDETECT); + __raw_writel(bank->context.dataout, bank->base + + OMAP4_GPIO_DATAOUT); } } +#endif static struct platform_driver omap_gpio_driver = { .probe = omap_gpio_probe, diff --git a/arch/arm/plat-omap/include/plat/gpio.h b/arch/arm/plat-omap/include/plat/gpio.h index 15aeb71..84b9106 100644 --- a/arch/arm/plat-omap/include/plat/gpio.h +++ b/arch/arm/plat-omap/include/plat/gpio.h @@ -87,8 +87,6 @@ extern void omap2_gpio_prepare_for_idle(int off_mode); extern void omap2_gpio_resume_after_idle(void); extern void omap_set_gpio_debounce(int gpio, int enable); extern void omap_set_gpio_debounce_time(int gpio, int enable); -extern void omap_gpio_save_context(void); -extern void omap_gpio_restore_context(void); /*-------------------------------------------------------------------------*/ /* Wrappers for "new style" GPIO calls, using the new infrastructure -- 1.7.1
next prev parent reply other threads:[~2011-04-18 15:03 UTC|newest] Thread overview: 206+ messages / expand[flat|nested] mbox.gz Atom feed top [not found] <no> 2008-08-15 2:20 ` [PATCH 00/07] dyn_array/nr_irqs/sparse_irq support v10 - fix Yinghai Lu 2008-08-15 2:20 ` [PATCH 1/7] x86: some debug info for 32bit sparse_irq Yinghai Lu 2008-08-15 2:20 ` [PATCH 2/7] x86: remove union about dest for log/phy Yinghai Lu 2008-08-15 2:20 ` [PATCH 3/7] x86: make 32bit support per_cpu vector fix #1 Yinghai Lu 2008-08-15 2:20 ` [PATCH 4/7] x86_64: rename irq_desc/irq_desc_with_new - fix Yinghai Lu 2008-08-15 2:20 ` [PATCH 5/7] x86: make 32bit support per_cpu vector fix #2 Yinghai Lu 2008-08-15 2:20 ` [PATCH 6/7] x86: ordering functions in io_apic_32.c Yinghai Lu 2008-08-15 2:20 ` [PATCH 7/7] x86: ordering functions in io_apic_64.c Yinghai Lu 2008-08-15 8:21 ` [PATCH 3/7] x86: make 32bit support per_cpu vector fix #1 Ingo Molnar 2008-08-15 8:29 ` Yinghai Lu 2008-08-15 8:51 ` Ingo Molnar 2008-08-15 8:27 ` [PATCH 00/07] dyn_array/nr_irqs/sparse_irq support v10 - fix Ingo Molnar 2008-08-15 8:34 ` Yinghai Lu 2008-08-15 8:51 ` Ingo Molnar 2008-08-15 9:35 ` Ingo Molnar 2008-08-15 10:00 ` Peter Zijlstra 2008-08-15 10:19 ` Ingo Molnar 2008-08-15 10:28 ` Peter Zijlstra 2008-08-15 17:07 ` Yinghai Lu 2008-08-15 23:42 ` [PATCH 0/7] merge io_apic_xx.c Yinghai Lu 2008-08-15 23:42 ` [PATCH 1/7] x86: ordering functions in io_apic_32.c - fix Yinghai Lu 2008-08-15 23:42 ` [PATCH 2/7] x86: make headers files the smae in io_apic_xx.c Yinghai Lu 2008-08-15 23:42 ` [PATCH 3/7] x86: make 64 handle sis_apic_bug like the 32 bit Yinghai Lu 2008-08-15 23:42 ` [PATCH 4/7] x86: remve ioapic_force Yinghai Lu 2008-08-15 23:42 ` [PATCH 5/7] x86: make io_apic_64.c and io_apic_32.c the same Yinghai Lu 2008-08-15 23:42 ` [PATCH 6/7] rename io_apic_64.c to io_apic.c Yinghai Lu 2008-08-15 23:42 ` [PATCH 7/7] make 32 bit have io_apic resource in /proc/iomem Yinghai Lu 2008-08-16 8:02 ` [PATCH 6/7] rename io_apic_64.c to io_apic.c Ingo Molnar 2008-08-16 8:22 ` [PATCH] x86: io_apic.c, build fix Ingo Molnar 2008-08-16 8:26 ` Yinghai Lu 2008-08-18 4:12 ` [PATCH] x86: apic - unify lapic_resume - fix Yinghai Lu 2008-08-18 4:12 ` [PATCH 1/2] x86: make HAVE_SPARSE_IRQ support selectable Yinghai Lu 2008-08-18 4:12 ` [PATCH 2/2] irq: rename irq_desc() to to_irq_desc() Yinghai Lu 2008-08-18 7:37 ` Ingo Molnar 2008-08-18 18:14 ` Yinghai Lu 2008-08-18 7:25 ` [PATCH] x86: apic - unify lapic_resume - fix Ingo Molnar 2008-08-18 20:44 ` [PATCH] irq: rename irq_desc() to to_irq_desc() " Yinghai Lu 2008-08-18 20:44 ` [PATCH] irq: rename irq_desc() to to_irq_desc() - fix #2 Yinghai Lu 2008-08-18 20:44 ` [PATCH] irq: rename irq_desc() to to_irq_desc() - fix #3 Yinghai Lu 2008-08-19 0:11 ` Ingo Molnar 2008-08-19 0:38 ` Ingo Molnar 2008-08-19 0:48 ` Yinghai Lu 2008-08-19 1:16 ` Ingo Molnar 2010-04-15 9:02 ` [U-Boot] [PATCH] OpenRD: Bring PCIe endpoint out of reset Tanmay Upadhyay 2010-04-20 5:51 ` Tanmay Upadhyay 2010-04-30 6:49 ` Prafulla Wadaskar 2010-04-22 13:16 ` [PATCH] OpenRD: Enable SD/UART selection for serial port 1 Tanmay Upadhyay 2010-05-04 12:48 ` [U-Boot] [PATCH] OpenRD: Reset PCIe endpoint while boot-up through PERST# Tanmay Upadhyay 2010-06-10 9:12 ` [U-Boot] [PATCH] ARM: Kirkwood: Add support for OpenRD-Client & OpenRD-Ultimate Tanmay Upadhyay 2010-06-10 9:16 ` Simon Kagstrom 2010-06-10 9:38 ` Tanmay Upadhyay 2010-06-10 10:25 ` Simon Kagstrom 2010-06-10 19:03 ` Prafulla Wadaskar 2010-06-14 11:02 ` Tanmay Upadhyay 2010-06-13 11:53 ` Albert ARIBAUD 2010-06-13 12:41 ` Wolfgang Denk 2010-06-13 12:51 ` Wolfgang Denk 2010-06-13 13:39 ` Albert ARIBAUD 2010-08-10 8:29 ` [PATCH v2] OpenRD: Enable SD/UART selection for serial port 1 Tanmay Upadhyay 2010-08-10 8:56 ` Alexander Clouter 2010-08-10 8:58 ` Alexander Clouter 2010-08-10 10:27 ` Tanmay Upadhyay 2010-08-10 10:28 ` Alexander Clouter 2010-08-10 10:49 ` Tanmay Upadhyay 2010-08-10 11:53 ` Alexander Clouter 2010-08-11 5:21 ` Tanmay Upadhyay 2010-08-10 8:40 ` [PATCH] ARM: Fix broken Kconfig in arch/arm Tanmay Upadhyay 2011-03-02 8:38 ` [RFC PATCH 1/5] x86/Kconfig: Add Page Cache Accounting entry Liu Yuan 2011-03-02 8:38 ` Liu Yuan 2011-03-02 16:24 ` Randy Dunlap 2011-03-02 16:24 ` Randy Dunlap 2011-03-03 3:11 ` Liu Yuan 2011-03-02 8:38 ` [RFC PATCH 2/5] block: Add functions and data types for Page Cache Accounting Liu Yuan 2011-03-02 8:38 ` Liu Yuan 2011-03-02 8:38 ` [RFC PATCH 3/5] block: Make Page Cache counters work with sysfs Liu Yuan 2011-03-02 8:38 ` Liu Yuan 2011-03-02 8:38 ` [RFC PATCH 4/5] mm: Add hit/miss accounting for Page Cache Liu Yuan 2011-03-02 8:38 ` Liu Yuan 2011-03-02 8:45 ` Ingo Molnar 2011-03-02 8:45 ` Ingo Molnar 2011-03-02 17:02 ` Dave Hansen 2011-03-02 17:02 ` Dave Hansen 2011-03-02 18:49 ` Ingo Molnar 2011-03-02 18:49 ` Ingo Molnar 2011-03-03 0:33 ` Wu Fengguang 2011-03-03 0:33 ` Wu Fengguang 2011-03-03 2:01 ` KOSAKI Motohiro 2011-03-03 2:01 ` KOSAKI Motohiro 2011-03-03 3:14 ` Tao Ma 2011-03-03 3:14 ` Tao Ma 2011-03-03 9:34 ` Ingo Molnar 2011-03-03 9:34 ` Ingo Molnar 2011-03-03 15:08 ` Tao Ma 2011-03-03 15:08 ` Tao Ma 2011-03-02 8:38 ` [RFC PATCH 5/5] mm: Add readpages accounting Liu Yuan 2011-03-02 8:38 ` Liu Yuan 2011-04-18 15:06 ` [v2 0/7] OMAP: GPIO: Use PM runtime framework Varadarajan, Charulatha 2011-04-18 15:06 ` Varadarajan, Charulatha 2011-04-19 6:26 ` Tony Lindgren 2011-04-19 6:26 ` Tony Lindgren 2011-04-20 23:59 ` Kevin Hilman 2011-04-20 23:59 ` Kevin Hilman 2011-04-21 5:42 ` Tony Lindgren 2011-04-21 5:42 ` Tony Lindgren 2011-04-21 15:15 ` Kevin Hilman 2011-04-21 15:15 ` Kevin Hilman 2011-04-22 6:11 ` Tony Lindgren 2011-04-22 6:11 ` Tony Lindgren 2011-04-23 8:35 ` Linus Walleij 2011-04-23 8:35 ` Linus Walleij 2011-04-26 7:29 ` Tony Lindgren 2011-04-26 7:29 ` Tony Lindgren 2011-04-27 13:18 ` Linus Walleij 2011-04-27 13:18 ` Linus Walleij 2011-05-03 16:22 ` Kevin Hilman 2011-05-03 16:22 ` Kevin Hilman 2011-05-03 21:41 ` Linus Walleij 2011-05-03 21:41 ` Linus Walleij 2011-05-04 6:19 ` Tony Lindgren 2011-05-04 6:19 ` Tony Lindgren 2011-05-12 0:57 ` Linus Walleij 2011-05-12 0:57 ` Linus Walleij 2011-05-12 9:42 ` Kevin Hilman 2011-05-12 9:42 ` Kevin Hilman 2011-05-19 19:08 ` Grant Likely 2011-05-19 19:08 ` Grant Likely 2011-05-20 3:34 ` Shawn Guo 2011-05-20 3:34 ` Shawn Guo 2011-05-19 19:05 ` Grant Likely 2011-05-19 19:05 ` Grant Likely 2011-04-18 15:06 ` [PATCH 1/7] OMAP: GPIO: Make gpio_context part of gpio_bank structure Varadarajan, Charulatha 2011-04-18 15:06 ` Varadarajan, Charulatha 2011-04-18 15:06 ` [PATCH 2/7] OMAP: GPIO: Use flag to identify wkup dmn GPIO Varadarajan, Charulatha 2011-04-18 15:06 ` Varadarajan, Charulatha 2011-04-18 15:06 ` [PATCH 3/7] OMAP4: GPIO: Save/restore context Varadarajan, Charulatha 2011-04-18 15:06 ` Varadarajan, Charulatha 2011-04-21 0:26 ` Kevin Hilman 2011-04-21 0:26 ` Kevin Hilman 2011-04-18 15:06 ` Varadarajan, Charulatha [this message] 2011-04-18 15:06 ` [PATCH 4/7] OMAP: GPIO: handle save/restore ctx in GPIO driver Varadarajan, Charulatha 2011-04-18 15:06 ` [PATCH 5/7] OMAP2+: GPIO: make workaround_enabled bank specific Varadarajan, Charulatha 2011-04-18 15:06 ` Varadarajan, Charulatha 2011-04-18 15:06 ` [PATCH 6/7] OMAP: GPIO: Cleanup prepare_for_idle/resume Varadarajan, Charulatha 2011-04-18 15:06 ` Varadarajan, Charulatha 2011-04-18 15:06 ` [PATCH 7/7] OMAP: GPIO: use PM runtime framework Varadarajan, Charulatha 2011-04-18 15:06 ` Varadarajan, Charulatha 2011-07-05 7:17 ` [U-Boot] [PATCH v2] Armada100: Add Board Support for Marvell GuruPlug-Display Ajay Bhargav 2011-07-06 5:49 ` Prafulla Wadaskar 2011-07-14 9:37 ` [PATCH 1/2] ARM: pxa168: gplugD: Get rid of mfp-gplugd.h Tanmay Upadhyay 2011-07-18 6:00 ` Eric Miao 2011-07-14 9:37 ` [PATCH 2/2] ARM: pxa168: gplugD: bug-fix: Free correct GPIO Tanmay Upadhyay 2011-07-18 5:59 ` Eric Miao 2011-09-14 5:59 ` [PATCH] mmc: sdhci-pxa: Check pdata before using its members Tanmay Upadhyay 2011-09-14 6:15 ` zhangfei gao 2011-09-21 18:12 ` Chris Ball 2011-11-14 9:43 ` [U-Boot] [Patch V2] mmc: mv_sdhci: Fix host version read for Armada100 Ajay Bhargav 2011-11-25 23:44 ` Andy Fleming 2011-12-06 11:07 ` [PATCH] USB: pxa168: Fix compilation error Tanmay Upadhyay 2011-12-06 11:25 ` Sergei Shtylyov 2011-12-08 4:33 ` [PATCH v2] " Tanmay Upadhyay 2011-12-07 19:57 ` [PATCH] " Alan Stern 2012-02-07 22:58 ` [PATCH v2] add support for AR6003 2048 byte board file Prasanna Kumar 2012-02-08 9:41 ` Kalle Valo 2012-07-10 13:46 ` [Qemu-devel] [PATCH] pseries iommu: h_put_tce split to support more IOMMUs Alexey Kardashevskiy 2012-07-10 13:46 ` [Qemu-devel] [PATCH] pseries pci: removed cached qemu_irq from PCI host bus Alexey Kardashevskiy 2012-07-10 13:46 ` [Qemu-devel] [PATCH] pseries: added allocator for a block of IRQs Alexey Kardashevskiy 2012-07-10 13:46 ` [Qemu-devel] [PATCH] pseries pci: enable debugging with disabled emulated PCI bus Alexey Kardashevskiy 2012-07-10 13:46 ` [Qemu-devel] [PATCH] xics: added end-of-interrupt (EOI) handlers Alexey Kardashevskiy 2012-07-13 8:04 ` Alexey Kardashevskiy 2012-07-10 13:46 ` [Qemu-devel] [PATCH] pseries dma: DMA window params added to PHB and DT population changed Alexey Kardashevskiy 2012-07-25 5:20 ` [PATCH] fixed a macro coding style issue Baodong Chen 2012-07-25 5:27 ` Venu Byravarasu 2012-07-25 5:37 ` Dmitry Torokhov 2012-07-25 6:09 ` Baodong Chen 2012-07-25 6:15 ` Al Viro 2012-07-25 6:36 ` Dmitry Torokhov 2012-07-31 7:27 ` Dmitry Torokhov 2012-09-27 12:51 ` [PATCH 1/8] fs/namespace.c: introduce helper function path_unmounted() Yan Hong 2012-09-27 12:51 ` [PATCH 2/8] fs/namespace.c: remove unused macro MNT_WRITER_UNDERFLOW_LIMIT Yan Hong 2012-09-27 12:51 ` [PATCH 3/8] fs/namespace.c: trivial code clean Yan Hong 2012-09-27 12:51 ` [PATCH 4/8] fs/namespace.c: check permission early in sys_[u]mount Yan Hong 2012-09-27 12:51 ` [PATCH 5/8] fs/namei.c: introduce macro AT_FDINV Yan Hong 2012-09-27 12:51 ` [PATCH 6/8] fs/inode.c: call alloc_inode() in new_inode() directly Yan Hong 2012-09-27 12:51 ` [PATCH 7/8] fs/inode.c: remove outstanding spin lock prefetch Yan Hong 2012-09-27 12:51 ` [PATCH 8/8] vfs: misc comment clean Yan Hong 2013-01-07 18:11 ` [PATCH] Staging: android: fixed const coding style issue in binder.c Patrik Karlin 2013-01-07 23:01 ` Greg KH 2013-11-11 9:27 ` [PATCH 1/2] mklibs: add dependency on dpkg-native Lei Liu 2013-11-11 9:27 ` [PATCH 2/2] Fix grep pattern when mklibs collects executables in rootfs Lei Liu 2013-11-12 10:23 ` Richard Purdie 2013-11-13 3:05 ` Lei Liu 2013-11-22 22:33 ` Nicolas Dechesne [not found] ` <52955AAB.6000801@gmail.com> 2013-11-27 13:00 ` Nicolas Dechesne 2014-02-08 2:29 ` [PATCH v2] SUNRPC: Allow one callback request to be received from two sk_buff shaobingqing 2014-02-08 19:14 ` Sergei Shtylyov 2014-02-08 19:14 ` Sergei Shtylyov 2014-02-10 17:46 ` Trond Myklebust 2014-02-10 17:46 ` Trond Myklebust 2014-02-11 19:42 ` [PATCH v2] SUNRPC: RPC callbacks may be split across several TCP segments Trond Myklebust 2019-02-18 11:59 ` [PATCH] net/bonding: fix reset active slave Hari Kumar Vemula 2019-02-18 15:58 ` Radu Nicolau 2019-02-20 12:33 ` [dpdk-stable] " Ferruh Yigit 2019-02-20 14:56 ` Radu Nicolau 2019-02-20 15:16 ` Hyong Youb Kim 2019-02-22 1:52 ` Chas Williams 2019-02-22 13:57 ` Ferruh Yigit
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=1303139217-10285-5-git-send-email-charu@ti.com \ --to=charu@ti.com \ --cc=khilman@deeprootsystems.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-omap@vger.kernel.org \ --cc=paul@pwsan.com \ --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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.