> -----Original Message----- > From: Varadarajan, Charulatha > Sent: Tuesday, August 10, 2010 10:49 AM > To: Kevin Hilman > Cc: linux-omap@xxxxxxxxxxxxxxx; paul@xxxxxxxxx; Cousson, Benoit; Nayak, > Rajendra; Basak, Partha > Subject: RE: [PATCH 01/13 v5] OMAP: GPIO: Modify init() in preparation for > platform device implementation > > > > > -----Original Message----- > > From: Kevin Hilman [mailto:khilman@xxxxxxxxxxxxxxxxxxx] > > Sent: Tuesday, August 10, 2010 3:51 AM > > To: Varadarajan, Charulatha > > Cc: linux-omap@xxxxxxxxxxxxxxx; paul@xxxxxxxxx; Cousson, Benoit; Nayak, > > Rajendra; Basak, Partha > > Subject: Re: [PATCH 01/13 v5] OMAP: GPIO: Modify init() in preparation > for > > platform device implementation > > > > Charulatha V <charu@xxxxxx> writes: > > > > > This is in prepartion for implementing GPIO as a platform device. > > > gpio bank's base addresses are moved from gpio.c to plat/gpio.h. > > > > > > This patch also modifies omap_gpio_init() to make use of > > > omap_gpio_chip_init() and omap_gpio_mod_init(). omap_gpio_mod_init() > > does > > > the module init by clearing the status register and initializing the > > > GPIO control register. omap_gpio_chip_init() initializes the chip > > request, > > > free, get, set and other function pointers and sets the gpio irq > handler. > > > > > > Signed-off-by: Charulatha V <charu@xxxxxx> > > > Signed-off-by: Basak, Partha <p-basak2@xxxxxx> > > > > [...] > > > > > +static void omap_gpio_mod_init(struct gpio_bank *bank, int id) > > > +{ > > > + 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); > > > + /* Enable autoidle for the OCP interface */ > > > + omap_writel(1 << 0, 0x48306814); > > > > This autoidle stuff should be removed in this series as setting this is > > handled by the hwmod layer. > > Okay. This code is incorrectly setting the PRCM_SYSCONFIG(0x48306814) register inside GPIO module which is incorrect. Ideally it should be moved to generic code like prcm_setup_regs() inside PM44xx.c/PM34xx.c. Having said that, the reset value of PRCM_SYSCONFIG is 0x01, so it would be safe just to remove this. Now, coming to setting of AutoIdle (in CM_AUTOIDLE_XXX registers), even though prcm_reg_ids are being populated, hwmod framework is not setting these anywhere, all CM_AutoIdle settings are being done one-time in side prcm_setup_regs(). Kevin, as you pointed out this needs to be done in the framework. Can we do it as part of enabling the slave clocks? How does the following look? static int _enable_clocks(struct omap_hwmod *oh) { int i; pr_debug("omap_hwmod: %s: enabling clocks\n", oh->name); if (oh->_clk) clk_enable(oh->_clk); if (oh->slaves_cnt > 0) { for (i = 0; i < oh->slaves_cnt; i++) { struct omap_hwmod_ocp_if *os = oh->slaves[i]; struct clk *c = os->_clk; if (c && (os->flags & OCPIF_SWSUP_IDLE)) clk_enable(c); else /*TODO: Set CM_AutoIdle here*/ } } /* The opt clocks are controlled by the device driver. */ return 0; } > > > > > > + } 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]; > > > + > > > + /* Enable autoidle for the OCP interface */ > > > + omap_writel(1 << 0, 0x48019010); > > > > ditto > > Okay. > > > > > > + } > > > > Kevin -- 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