Re: [patch 1/2 rc8-omap-git] twl4030 subdriver irq tweaks

2008-10-07 Thread Tony Lindgren
* David Brownell [EMAIL PROTECTED] [081007 06:43]:
 From: David Brownell [EMAIL PROTECTED]
 
 Bugfixes to TWL subdriver irq handler setup ... lockdep
 workarounds, remove IRQF_DISABLED.  NOPs with current code.
 
 These changes are specific to the drivers which register
 directly with the PIH irq_chip (in twl4030-core), and are 
 prerequsites to a cleanup patch for that PIH infrastructure.
 (Unless you don't use these drivers.)

Pushed.

Tony

 Signed-off-by: David Brownell [EMAIL PROTECTED]
 ---
 I can't test any of these, but what could go wrong ...
 
  drivers/i2c/chips/twl4030-madc.c|   10 +-
  drivers/input/keyboard/omap-twl4030keypad.c |   11 +--
  drivers/power/twl4030_bci_battery.c |   18 +-
  3 files changed, 35 insertions(+), 4 deletions(-)
 
 --- a/drivers/i2c/chips/twl4030-madc.c
 +++ b/drivers/i2c/chips/twl4030-madc.c
 @@ -148,6 +148,14 @@ static irqreturn_t twl4030_madc_irq_hand
   u8 isr_val, imr_val;
   int i;
  
 +#ifdef CONFIG_LOCKDEP
 + /* WORKAROUND for lockdep forcing IRQF_DISABLED on us, which
 +  * we don't want and can't tolerate.  Although it might be
 +  * friendlier not to borrow this thread context...
 +  */
 + local_irq_enable();
 +#endif
 +
   /* Use COR to ack interrupts since we have no shared IRQs in ISRx */
   isr_val = twl4030_madc_read(madc, madc-isr);
   imr_val = twl4030_madc_read(madc, madc-imr);
 @@ -451,7 +459,7 @@ static int __init twl4030_madc_probe(str
  regval, TWL4030_BCI_BCICTL1);
  
   ret = request_irq(TWL4030_MODIRQ_MADC, twl4030_madc_irq_handler,
 -   IRQF_DISABLED, twl4030_madc, madc);
 +   0, twl4030_madc, madc);
   if (ret) {
   dev_dbg(pdev-dev, could not request irq\n);
   goto err_irq;
 --- a/drivers/input/keyboard/omap-twl4030keypad.c
 +++ b/drivers/input/keyboard/omap-twl4030keypad.c
 @@ -208,6 +208,14 @@ static irqreturn_t do_kp_irq(int irq, vo
   u8 reg;
   int ret;
  
 +#ifdef CONFIG_LOCKDEP
 + /* WORKAROUND for lockdep forcing IRQF_DISABLED on us, which
 +  * we don't want and can't tolerate.  Although it might be
 +  * friendlier not to borrow this thread context...
 +  */
 + local_irq_enable();
 +#endif
 +
   /* Read  Clear TWL4030 pending interrupt */
   ret = twl4030_kpread(kp, TWL4030_MODULE_KEYPAD, reg, KEYP_ISR1, 1);
  
 @@ -340,8 +348,7 @@ static int __init omap_kp_probe(struct p
* This ISR will always execute in kernel thread context because of
* the need to access the TWL4030 over the I2C bus.
*/
 - ret = request_irq(kp-irq, do_kp_irq, IRQF_DISABLED,
 - TWL4030 Keypad, kp);
 + ret = request_irq(kp-irq, do_kp_irq, 0, pdev-name, kp);
   if (ret  0) {
   dev_info(kp-dbg_dev, request_irq failed for irq no=%d\n,
   kp-irq);
 --- a/drivers/power/twl4030_bci_battery.c
 +++ b/drivers/power/twl4030_bci_battery.c
 @@ -210,6 +210,14 @@ static irqreturn_t twl4030charger_interr
  {
   struct twl4030_bci_device_info *di = _di;
  
 +#ifdef CONFIG_LOCKDEP
 + /* WORKAROUND for lockdep forcing IRQF_DISABLED on us, which
 +  * we don't want and can't tolerate.  Although it might be
 +  * friendlier not to borrow this thread context...
 +  */
 + local_irq_enable();
 +#endif
 +
   twl4030charger_presence_evt();
   power_supply_changed(di-bat);
  
 @@ -310,6 +318,14 @@ static irqreturn_t twl4030battery_interr
   u8 isr1a_val, isr2a_val, clear_2a, clear_1a;
   int ret;
  
 +#ifdef CONFIG_LOCKDEP
 + /* WORKAROUND for lockdep forcing IRQF_DISABLED on us, which
 +  * we don't want and can't tolerate.  Although it might be
 +  * friendlier not to borrow this thread context...
 +  */
 + local_irq_enable();
 +#endif
 +
   ret = twl4030_i2c_read_u8(TWL4030_MODULE_INTERRUPTS, isr1a_val,
   REG_BCIISR1A);
   if (ret)
 @@ -943,7 +959,7 @@ static int __init twl4030_bci_battery_pr
  
   /* request BCI interruption */
   ret = request_irq(TWL4030_MODIRQ_BCI, twl4030battery_interrupt,
 - IRQF_DISABLED, pdev-name, NULL);
 + 0, pdev-name, NULL);
   if (ret) {
   dev_dbg(pdev-dev, could not request irq %d, status %d\n,
   TWL4030_MODIRQ_BCI, ret);
 --
 To unsubscribe from this list: send the line unsubscribe linux-omap in
 the body of a message to [EMAIL PROTECTED]
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[patch 1/2 rc8-omap-git] twl4030 subdriver irq tweaks

2008-10-06 Thread David Brownell
From: David Brownell [EMAIL PROTECTED]

Bugfixes to TWL subdriver irq handler setup ... lockdep
workarounds, remove IRQF_DISABLED.  NOPs with current code.

These changes are specific to the drivers which register
directly with the PIH irq_chip (in twl4030-core), and are 
prerequsites to a cleanup patch for that PIH infrastructure.
(Unless you don't use these drivers.)

Signed-off-by: David Brownell [EMAIL PROTECTED]
---
I can't test any of these, but what could go wrong ...

 drivers/i2c/chips/twl4030-madc.c|   10 +-
 drivers/input/keyboard/omap-twl4030keypad.c |   11 +--
 drivers/power/twl4030_bci_battery.c |   18 +-
 3 files changed, 35 insertions(+), 4 deletions(-)

--- a/drivers/i2c/chips/twl4030-madc.c
+++ b/drivers/i2c/chips/twl4030-madc.c
@@ -148,6 +148,14 @@ static irqreturn_t twl4030_madc_irq_hand
u8 isr_val, imr_val;
int i;
 
+#ifdef CONFIG_LOCKDEP
+   /* WORKAROUND for lockdep forcing IRQF_DISABLED on us, which
+* we don't want and can't tolerate.  Although it might be
+* friendlier not to borrow this thread context...
+*/
+   local_irq_enable();
+#endif
+
/* Use COR to ack interrupts since we have no shared IRQs in ISRx */
isr_val = twl4030_madc_read(madc, madc-isr);
imr_val = twl4030_madc_read(madc, madc-imr);
@@ -451,7 +459,7 @@ static int __init twl4030_madc_probe(str
   regval, TWL4030_BCI_BCICTL1);
 
ret = request_irq(TWL4030_MODIRQ_MADC, twl4030_madc_irq_handler,
- IRQF_DISABLED, twl4030_madc, madc);
+ 0, twl4030_madc, madc);
if (ret) {
dev_dbg(pdev-dev, could not request irq\n);
goto err_irq;
--- a/drivers/input/keyboard/omap-twl4030keypad.c
+++ b/drivers/input/keyboard/omap-twl4030keypad.c
@@ -208,6 +208,14 @@ static irqreturn_t do_kp_irq(int irq, vo
u8 reg;
int ret;
 
+#ifdef CONFIG_LOCKDEP
+   /* WORKAROUND for lockdep forcing IRQF_DISABLED on us, which
+* we don't want and can't tolerate.  Although it might be
+* friendlier not to borrow this thread context...
+*/
+   local_irq_enable();
+#endif
+
/* Read  Clear TWL4030 pending interrupt */
ret = twl4030_kpread(kp, TWL4030_MODULE_KEYPAD, reg, KEYP_ISR1, 1);
 
@@ -340,8 +348,7 @@ static int __init omap_kp_probe(struct p
 * This ISR will always execute in kernel thread context because of
 * the need to access the TWL4030 over the I2C bus.
 */
-   ret = request_irq(kp-irq, do_kp_irq, IRQF_DISABLED,
-   TWL4030 Keypad, kp);
+   ret = request_irq(kp-irq, do_kp_irq, 0, pdev-name, kp);
if (ret  0) {
dev_info(kp-dbg_dev, request_irq failed for irq no=%d\n,
kp-irq);
--- a/drivers/power/twl4030_bci_battery.c
+++ b/drivers/power/twl4030_bci_battery.c
@@ -210,6 +210,14 @@ static irqreturn_t twl4030charger_interr
 {
struct twl4030_bci_device_info *di = _di;
 
+#ifdef CONFIG_LOCKDEP
+   /* WORKAROUND for lockdep forcing IRQF_DISABLED on us, which
+* we don't want and can't tolerate.  Although it might be
+* friendlier not to borrow this thread context...
+*/
+   local_irq_enable();
+#endif
+
twl4030charger_presence_evt();
power_supply_changed(di-bat);
 
@@ -310,6 +318,14 @@ static irqreturn_t twl4030battery_interr
u8 isr1a_val, isr2a_val, clear_2a, clear_1a;
int ret;
 
+#ifdef CONFIG_LOCKDEP
+   /* WORKAROUND for lockdep forcing IRQF_DISABLED on us, which
+* we don't want and can't tolerate.  Although it might be
+* friendlier not to borrow this thread context...
+*/
+   local_irq_enable();
+#endif
+
ret = twl4030_i2c_read_u8(TWL4030_MODULE_INTERRUPTS, isr1a_val,
REG_BCIISR1A);
if (ret)
@@ -943,7 +959,7 @@ static int __init twl4030_bci_battery_pr
 
/* request BCI interruption */
ret = request_irq(TWL4030_MODIRQ_BCI, twl4030battery_interrupt,
-   IRQF_DISABLED, pdev-name, NULL);
+   0, pdev-name, NULL);
if (ret) {
dev_dbg(pdev-dev, could not request irq %d, status %d\n,
TWL4030_MODIRQ_BCI, ret);
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html