* Roger Quadros <rogerq@xxxxxx> [131011 09:21]: > On OMAPs the IO ring must be rearmed each time the pad wakeup > configuration is changed. So call pcs_soc->rearm() from > pcs_irq_set(). > > Signed-off-by: Roger Quadros <rogerq@xxxxxx> > --- > drivers/pinctrl/pinctrl-single.c | 5 +++-- > 1 files changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c > index c2aada7..1800e47 100644 > --- a/drivers/pinctrl/pinctrl-single.c > +++ b/drivers/pinctrl/pinctrl-single.c > @@ -1604,6 +1604,9 @@ static inline void pcs_irq_set(struct pcs_soc_data *pcs_soc, > pcs->write(mask, pcswi->reg); > raw_spin_unlock(&pcs->lock); > } > + > + if (pcs_soc->rearm) > + pcs_soc->rearm(); > } > > /** > @@ -1626,8 +1629,6 @@ static void pcs_irq_unmask(struct irq_data *d) > struct pcs_soc_data *pcs_soc = irq_data_get_irq_chip_data(d); > > pcs_irq_set(pcs_soc, d->irq, true); > - if (pcs_soc->rearm) > - pcs_soc->rearm(); > } This seems to cause the wake-up interrupts to happen also during runtime for me, which makes the omap3 behave the same way as omap4 already does. However, the concern I have is that we only want the io chain wake-up happen during idle and not during runtime.. So counting on the io chain in your EHCI driver during runtime would require also additional tracking of idle wake up events vs runtime wake-up events somewhere once we have the automatic solution for runtime PM. That is to avoid spurious interrupts during runtime. In any case, since this is an interrupt controller now, we should just follow the Linux standard for interrupt controllers, so if you do a request_irq() on it, you really should get interrupts. I've updated the patch a litte below to also remove the now bogus comment, and to update the description. So considering all that, I suggest that Linus applies the updated fix below into the pinctrl tree after pulling in the the tag I posted for "pinctrl-single-for-linus-for-v3.13-signed". 8< ----------------------- From: Roger Quadros <rogerq@xxxxxx> Date: Fri, 11 Oct 2013 19:13:16 +0300 Subject: [PATCH] pinctrl: single: call pcs_soc->rearm() whenever IRQ mask is changed On OMAPs the IO ring must be rearmed each time the pad wakeup configuration is changed. So call pcs_soc->rearm() from pcs_irq_set(). As pinctrl-single is now an interrupt controller in some cases, we should follow the standards and keep the interrupts enabled constantly, and not just for wake-up events. The tracking of runtime vs wake-up interrupts can be handled separately for the automated runtime PM solution when we have it in the future. Signed-off-by: Roger Quadros <rogerq@xxxxxx> [tony@xxxxxxxxxxx: removed wrong comment, updated description] Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx> --- a/drivers/pinctrl/pinctrl-single.c +++ b/drivers/pinctrl/pinctrl-single.c @@ -1604,6 +1604,9 @@ static inline void pcs_irq_set(struct pcs_soc_data *pcs_soc, pcs->write(mask, pcswi->reg); raw_spin_unlock(&pcs->lock); } + + if (pcs_soc->rearm) + pcs_soc->rearm(); } /** @@ -1626,8 +1629,6 @@ static void pcs_irq_unmask(struct irq_data *d) struct pcs_soc_data *pcs_soc = irq_data_get_irq_chip_data(d); pcs_irq_set(pcs_soc, d->irq, true); - if (pcs_soc->rearm) - pcs_soc->rearm(); } /** @@ -1678,11 +1679,6 @@ static int pcs_irq_handle(struct pcs_soc_data *pcs_soc) } } - /* - * For debugging on omaps, you may want to call pcs_soc->rearm() - * here to see wake-up interrupts during runtime also. - */ - return count; } -- 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