* David Brownell <david-b@xxxxxxxxxxx> [081007 06:43]: > From: David Brownell <dbrownell@xxxxxxxxxxxxxxxxxxxxx> > > 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 <dbrownell@xxxxxxxxxxxxxxxxxxxxx> > --- > 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, ®, 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 majordomo@xxxxxxxxxxxxxxx > 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html