On Thu, May 26, 2011 at 03:04, Kevin Hilman <khilman@xxxxxx> wrote: > Tarun Kanti DebBarma <tarun.kanti@xxxxxx> writes: > >> From: Charulatha V <charu@xxxxxx> >> >> Non-wakeup GPIOs are available only in OMAP2420 and OMAP3430. But >> the GPIO driver initializes the non-wakeup GPIO bits for OMAP24xx >> (bothe OMAP 2420 and 2430) & not for OMAP3 which is incorrect. > > Can you cite the documentation you're using for the OMAP3 non-wakeup > GPIOs? I am referring to Table 25-5. GPIO Channel Description at page no 3354 OMAP3430 public TRM Version P. > > This is a change of functionality from current code, where all OMAP3 > GPIOs are considered wakeup capable. > > I'd like this to be tackled in two patches. One for the > cleanup/consolidation, and one for change in behavior. Okay. > > For this cleanup/consolidation (this series), please keep existing > functionality and focus on the cleanup. Then, in an additional patch > (on top of the cleanup/conslidation), change the functionality with a > detailed changelog. Okay. > > Thanks, > > Kevin > >> Fix the above by providing non-wakeup GPIO information through pdata >> specific to the SoC. >> >> The GPIO rev id provided in the hwmod database is the same for OMAP2420 >> and OMAP2430. Change the GPIO rev ids in hwmod database as given below >> so that it can be used to identify OMAP2420 and OMAP2430. >> OMAP2420 - 0 >> OMAP2430 - 1 >> OMAP3 - 2 >> OMAP4 - 3 >> >> Signed-off-by: Charulatha V <charu@xxxxxx> >> Cc: Cousson, Benoit <b-cousson@xxxxxx> >> Cc: Paul Walmsley <paul@xxxxxxxxx> >> --- >> arch/arm/mach-omap2/gpio.c | 26 ++++++++++++++++++++++++-- >> arch/arm/mach-omap2/omap_hwmod_2430_data.c | 2 +- >> arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 2 +- >> arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 2 +- >> arch/arm/plat-omap/include/plat/gpio.h | 1 + >> drivers/gpio/gpio_omap.c | 11 +++-------- >> 6 files changed, 31 insertions(+), 13 deletions(-) >> >> diff --git a/arch/arm/mach-omap2/gpio.c b/arch/arm/mach-omap2/gpio.c >> index 0446bd1..6cd26b4 100644 >> --- a/arch/arm/mach-omap2/gpio.c >> +++ b/arch/arm/mach-omap2/gpio.c >> @@ -56,6 +56,28 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) >> return -ENOMEM; >> } >> >> + switch (oh->class->rev) { >> + case 0: >> + if (id == 1) >> + /* non-wakeup GPIO pins for OMAP2420 Bank1 */ >> + pdata->non_wakeup_gpios = 0xe203ffc0; >> + else if (id == 2) >> + /* non-wakeup GPIO pins for OMAP2420 Bank2 */ >> + pdata->non_wakeup_gpios = 0x08700040; >> + break; >> + case 2: >> + if (id == 2) >> + /* non-wakeup GPIO pins for OMAP3 Bank2 */ >> + pdata->non_wakeup_gpios = 0x00000001; >> + else if (id == 6) >> + /* non-wakeup GPIO pins for OMAP3 Bank6 */ >> + pdata->non_wakeup_gpios = 0x08000000; >> + break; >> + default: >> + /* No non-wakeup GPIO pins for other SoCs */ >> + break; >> + } >> + >> dev_attr = (struct omap_gpio_dev_attr *)oh->dev_attr; >> pdata->bank_width = dev_attr->bank_width; >> pdata->dbck_flag = dev_attr->dbck_flag; >> @@ -70,6 +92,7 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) >> switch (oh->class->rev) { >> case 0: >> case 1: >> + case 2: >> pdata->bank_type = METHOD_GPIO_24XX; >> pdata->regs->revision = OMAP24XX_GPIO_REVISION; >> pdata->regs->direction = OMAP24XX_GPIO_OE; >> @@ -86,7 +109,7 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) >> pdata->regs->debounce_en = OMAP24XX_GPIO_DEBOUNCE_EN; >> pdata->regs->ctrl = OMAP24XX_GPIO_CTRL; >> break; >> - case 2: >> + case 3: >> pdata->bank_type = METHOD_GPIO_44XX; >> pdata->regs->revision = OMAP4_GPIO_REVISION; >> pdata->regs->direction = OMAP4_GPIO_OE; >> @@ -108,7 +131,6 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) >> kfree(pdata); >> return -EINVAL; >> } >> - >> od = omap_device_build(name, id - 1, oh, pdata, >> sizeof(*pdata), omap_gpio_latency, >> ARRAY_SIZE(omap_gpio_latency), >> diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c >> index 9682dd5..ae702b5 100644 >> --- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c >> +++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c >> @@ -1728,7 +1728,7 @@ static struct omap_hwmod_class_sysconfig omap243x_gpio_sysc = { >> static struct omap_hwmod_class omap243x_gpio_hwmod_class = { >> .name = "gpio", >> .sysc = &omap243x_gpio_sysc, >> - .rev = 0, >> + .rev = 1, >> }; >> >> /* gpio1 */ >> diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c >> index 909a84d..05e7005 100644 >> --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c >> +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c >> @@ -2117,7 +2117,7 @@ static struct omap_hwmod_class_sysconfig omap3xxx_gpio_sysc = { >> static struct omap_hwmod_class omap3xxx_gpio_hwmod_class = { >> .name = "gpio", >> .sysc = &omap3xxx_gpio_sysc, >> - .rev = 1, >> + .rev = 2, >> }; >> >> /* gpio_dev_attr*/ >> diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c >> index abc548a..ea30752 100644 >> --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c >> +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c >> @@ -1703,7 +1703,7 @@ static struct omap_hwmod_class_sysconfig omap44xx_gpio_sysc = { >> static struct omap_hwmod_class omap44xx_gpio_hwmod_class = { >> .name = "gpio", >> .sysc = &omap44xx_gpio_sysc, >> - .rev = 2, >> + .rev = 3, >> }; >> >> /* gpio dev_attr */ >> diff --git a/arch/arm/plat-omap/include/plat/gpio.h b/arch/arm/plat-omap/include/plat/gpio.h >> index caf432c..8014a8a 100644 >> --- a/arch/arm/plat-omap/include/plat/gpio.h >> +++ b/arch/arm/plat-omap/include/plat/gpio.h >> @@ -199,6 +199,7 @@ struct omap_gpio_platform_data { >> int bank_width; /* GPIO bank width */ >> int bank_stride; /* Only needed for omap1 MPUIO */ >> bool dbck_flag; /* dbck required or not - True for OMAP3&4 */ >> + u32 non_wakeup_gpios; >> >> struct omap_gpio_reg_offs *regs; >> }; >> diff --git a/drivers/gpio/gpio_omap.c b/drivers/gpio/gpio_omap.c >> index dfdc45e..0ba4cdb 100644 >> --- a/drivers/gpio/gpio_omap.c >> +++ b/drivers/gpio/gpio_omap.c >> @@ -1008,7 +1008,7 @@ static inline int init_gpio_info(struct platform_device *pdev) >> } >> >> /* TODO: Cleanup cpu_is_* checks */ >> -static void omap_gpio_mod_init(struct gpio_bank *bank, int id) >> +static void omap_gpio_mod_init(struct gpio_bank *bank) >> { >> if (cpu_class_is_omap2()) { >> if (cpu_is_omap44xx()) { >> @@ -1028,12 +1028,6 @@ static void omap_gpio_mod_init(struct gpio_bank *bank, int id) >> >> /* Initialize interface clk ungated, module enabled */ >> __raw_writel(0, bank->base + OMAP24XX_GPIO_CTRL); >> - } else if (cpu_is_omap24xx()) { >> - static const u32 non_wakeup_gpios[] = { >> - 0xe203ffc0, 0x08700040 >> - }; >> - if (id < ARRAY_SIZE(non_wakeup_gpios)) >> - bank->non_wakeup_gpios = non_wakeup_gpios[id]; >> } >> } else if (cpu_class_is_omap1()) { >> if (bank_is_mpuio(bank)) >> @@ -1179,6 +1173,7 @@ static int __devinit omap_gpio_probe(struct platform_device *pdev) >> bank->dbck_flag = pdata->dbck_flag; >> bank->stride = pdata->bank_stride; >> bank->width = pdata->bank_width; >> + bank->non_wakeup_gpios = pdata->non_wakeup_gpios; >> >> bank->regs = pdata->regs; >> >> @@ -1205,7 +1200,7 @@ static int __devinit omap_gpio_probe(struct platform_device *pdev) >> pm_runtime_enable(bank->dev); >> pm_runtime_get_sync(bank->dev); >> >> - omap_gpio_mod_init(bank, id); >> + omap_gpio_mod_init(bank); >> omap_gpio_chip_init(bank); >> omap_gpio_show_rev(bank); > -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html