On Thu, Sep 10, 2009 at 8:53 AM, Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx> wrote: > Currently, only GPIOs in the wakeup domain (GPIOs in bank 0) are > enabled as wakups. This patch also enables GPIOs in the PER > powerdomain (banks 2-6) to be used as possible wakeup sources. > > In addition, this patch ensures that all GPIO wakeups can wakeup > the MPU using the PM_MPUGRPSEL_<pwrdm> registers. > > NOTE: this doesn't enable the individual GPIOs as wakeups, this simply > enables the per-bank wakeups at the powerdomain level. > > This problem was discovered by Mike Chan when preventing the CORE > powerdomain from going into retention/off. When CORE was allowed to > hit retention, GPIO wakeups via IO pad were working fine, but when > CORE remained on, GPIO module-level wakeups were not working properly. > > To test, prevent CORE from going inactive/retention/off, thus > preventing the IO chain from being armed: > > # echo 3 > /debug/pm_debug/core_pwrdm/suspend > > This ensures that GPIO wakeups happen via module-level wakeups and > not via IO pad. > > Tested on 3430SDP using the touchscreen GPIO (gpio 2, in WKUP) > Tested on Zoom2 using the QUART interrup GPIO (gpio 102, in PER) > > Also, c.f. OMAP PM wiki for troubleshooting GPIO wakeup issues: > http://elinux.org/OMAP_Power_Management > > Reported-by: Mike Chan <mikechan@xxxxxxxxxx> > Signed-off-by: Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx> Pushing to PM branch and queeing for 2.6.32 fixes. Kevin > --- > arch/arm/mach-omap2/pm34xx.c | 10 ++++++++++ > 1 files changed, 10 insertions(+), 0 deletions(-) > > diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c > index 3d62b06..8166118 100644 > --- a/arch/arm/mach-omap2/pm34xx.c > +++ b/arch/arm/mach-omap2/pm34xx.c > @@ -918,6 +918,16 @@ static void __init prcm_setup_regs(void) > prm_write_mod_reg(OMAP3430_IO_EN | OMAP3430_WKUP_EN, > OCP_MOD, OMAP3_PRM_IRQENABLE_MPU_OFFSET); > > + /* Enable GPIO wakeups in PER */ > + prm_write_mod_reg(OMAP3430_EN_GPIO2 | OMAP3430_EN_GPIO3 | > + OMAP3430_EN_GPIO4 | OMAP3430_EN_GPIO5 | > + OMAP3430_EN_GPIO6, OMAP3430_PER_MOD, PM_WKEN); > + /* and allow them to wake up MPU */ > + prm_write_mod_reg(OMAP3430_GRPSEL_GPIO2 | OMAP3430_EN_GPIO3 | > + OMAP3430_GRPSEL_GPIO4 | OMAP3430_EN_GPIO5 | > + OMAP3430_GRPSEL_GPIO6, > + OMAP3430_PER_MOD, OMAP3430_PM_MPUGRPSEL); > + > /* Don't attach IVA interrupts */ > prm_write_mod_reg(0, WKUP_MOD, OMAP3430_PM_IVAGRPSEL); > prm_write_mod_reg(0, CORE_MOD, OMAP3430_PM_IVAGRPSEL1); > -- > 1.6.4 > > -- 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