aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pinctrl
diff options
context:
space:
mode:
authorRoger Quadros <rogerq@ti.com>2013-10-11 12:13:16 -0400
committerTony Lindgren <tony@atomide.com>2013-11-14 13:43:17 -0500
commitc9b3a7d227068ccf25f435b1b0720ccc73ee5178 (patch)
tree167c5b361856f28c323c284659e6535ba3efe0cd /drivers/pinctrl
parent30e3488cbfe6e8af0832be715081c49b08299b73 (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.c10
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