diff options
author | Roger Quadros <rogerq@ti.com> | 2013-10-11 12:13:16 -0400 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2013-11-14 13:43:17 -0500 |
commit | c9b3a7d227068ccf25f435b1b0720ccc73ee5178 (patch) | |
tree | 167c5b361856f28c323c284659e6535ba3efe0cd /drivers/pinctrl | |
parent | 30e3488cbfe6e8af0832be715081c49b08299b73 (diff) |
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@ti.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
[tony@atomide.com: removed wrong comment, updated description]
Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'drivers/pinctrl')
-rw-r--r-- | drivers/pinctrl/pinctrl-single.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c index 0846922b2316..829b98c5c66f 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, | |||
1604 | pcs->write(mask, pcswi->reg); | 1604 | pcs->write(mask, pcswi->reg); |
1605 | raw_spin_unlock(&pcs->lock); | 1605 | raw_spin_unlock(&pcs->lock); |
1606 | } | 1606 | } |
1607 | |||
1608 | if (pcs_soc->rearm) | ||
1609 | pcs_soc->rearm(); | ||
1607 | } | 1610 | } |
1608 | 1611 | ||
1609 | /** | 1612 | /** |
@@ -1626,8 +1629,6 @@ static void pcs_irq_unmask(struct irq_data *d) | |||
1626 | struct pcs_soc_data *pcs_soc = irq_data_get_irq_chip_data(d); | 1629 | struct pcs_soc_data *pcs_soc = irq_data_get_irq_chip_data(d); |
1627 | 1630 | ||
1628 | pcs_irq_set(pcs_soc, d->irq, true); | 1631 | pcs_irq_set(pcs_soc, d->irq, true); |
1629 | if (pcs_soc->rearm) | ||
1630 | pcs_soc->rearm(); | ||
1631 | } | 1632 | } |
1632 | 1633 | ||
1633 | /** | 1634 | /** |
@@ -1678,11 +1679,6 @@ static int pcs_irq_handle(struct pcs_soc_data *pcs_soc) | |||
1678 | } | 1679 | } |
1679 | } | 1680 | } |
1680 | 1681 | ||
1681 | /* | ||
1682 | * For debugging on omaps, you may want to call pcs_soc->rearm() | ||
1683 | * here to see wake-up interrupts during runtime also. | ||
1684 | */ | ||
1685 | |||
1686 | return count; | 1682 | return count; |
1687 | } | 1683 | } |
1688 | 1684 | ||