From: Peter 'p2' De Schrijver <peter.de-schrijver@xxxxxxxxx> This patch adapts the existing driver to use the power IRQ handler. This patch superseeds any previous version. Signed-off-by: Peter 'p2' De Schrijver <peter.de-schrijver@xxxxxxxxx> Signed-off-by: Felipe Balbi <felipe.balbi@xxxxxxxxx> --- drivers/i2c/chips/twl4030-usb.c | 18 ++---------------- drivers/rtc/rtc-twl4030.c | 17 ++--------------- include/linux/i2c/twl4030.h | 10 ++++++++++ 3 files changed, 14 insertions(+), 31 deletions(-) diff --git a/drivers/i2c/chips/twl4030-usb.c b/drivers/i2c/chips/twl4030-usb.c index 2db1c63..a238904 100644 --- a/drivers/i2c/chips/twl4030-usb.c +++ b/drivers/i2c/chips/twl4030-usb.c @@ -593,19 +593,6 @@ static irqreturn_t twl4030_usb_irq(int irq, void *_twl) int ret = IRQ_NONE; u8 val; - if (twl4030_i2c_read_u8(TWL4030_MODULE_INT, &val, REG_PWR_ISR1) < 0) { - printk(KERN_ERR "twl4030_usb: i2c read failed," - " line %d\n", __LINE__); - goto done; - } - - /* this interrupt line may be shared */ - if (!(val & USB_PRES)) - goto done; - - /* clear the interrupt */ - twl4030_i2c_write_u8(TWL4030_MODULE_INT, USB_PRES, REG_PWR_ISR1); - /* action based on cable attach or detach */ if (twl4030_i2c_read_u8(TWL4030_MODULE_INT, &val, REG_PWR_EDR1) < 0) { printk(KERN_ERR "twl4030_usb: i2c read failed," @@ -708,14 +695,13 @@ static int __init twl4030_usb_init(void) the_transceiver = twl; - twl->irq = TWL4030_MODIRQ_PWR; + twl->irq = TWL4030_PWRIRQ_USB_PRES; twl->otg.set_host = twl4030_set_host; twl->otg.set_peripheral = twl4030_set_peripheral; twl->otg.set_suspend = twl4030_set_suspend; usb_irq_disable(); - status = request_irq(twl->irq, twl4030_usb_irq, - IRQF_DISABLED | IRQF_SHARED, "twl4030_usb", twl); + status = request_irq(twl->irq, twl4030_usb_irq, 0, "twl4030_usb", twl); if (status < 0) { printk(KERN_DEBUG "can't get IRQ %d, err %d\n", twl->irq, status); diff --git a/drivers/rtc/rtc-twl4030.c b/drivers/rtc/rtc-twl4030.c index 929a788..ca026b1 100644 --- a/drivers/rtc/rtc-twl4030.c +++ b/drivers/rtc/rtc-twl4030.c @@ -426,19 +426,6 @@ static irqreturn_t twl4030_rtc_interrupt(int irq, void *rtc) int res; u8 rd_reg; - /* clear the RTC interrupt in TWL4030 power module */ - res = twl4030_i2c_read_u8(TWL4030_MODULE_INT, &rd_reg, REG_PWR_ISR1); - if (res) - goto out; - - /* Check if interrupt is sourced by RTC */ - if (!(rd_reg & PWR_RTC_INT_CLR)) - goto out; - - res = twl4030_i2c_write_u8(TWL4030_MODULE_INT, PWR_RTC_INT_CLR, REG_PWR_ISR1); - if (res) - goto out; - res = twl4030_rtc_read_u8(&rd_reg, REG_RTC_STATUS_REG); if (res) goto out; @@ -528,8 +515,8 @@ static int __devinit twl4030_rtc_probe(struct platform_device *pdev) if (ret < 0) goto out1; - ret = request_irq(TWL4030_MODIRQ_PWR, twl4030_rtc_interrupt, - IRQF_DISABLED | IRQF_SHARED, rtc->dev.bus_id, rtc); + ret = request_irq(TWL4030_PWRIRQ_RTC, twl4030_rtc_interrupt, + 0, rtc->dev.bus_id, rtc); if (ret < 0) { dev_err(&pdev->dev, "IRQ is not free.\n"); goto out1; diff --git a/include/linux/i2c/twl4030.h b/include/linux/i2c/twl4030.h index 7f9b90d..fc11fd0 100644 --- a/include/linux/i2c/twl4030.h +++ b/include/linux/i2c/twl4030.h @@ -62,6 +62,16 @@ #define TWL4030_MODIRQ_MADC (IH_TWL4030_BASE + 3) #define TWL4030_MODIRQ_USB (IH_TWL4030_BASE + 4) #define TWL4030_MODIRQ_PWR (IH_TWL4030_BASE + 5) + +#define TWL4030_PWRIRQ_PWRBTN (IH_TWL4030_PWRBASE + 0) +#define TWL4030_PWRIRQ_CHG_PRES (IH_TWL4030_PWRBASE + 1) +#define TWL4030_PWRIRQ_USB_PRES (IH_TWL4030_PWRBASE + 2) +#define TWL4030_PWRIRQ_RTC (IH_TWL4030_PWRBASE + 3) +#define TWL4030_PWRIRQ_HOT_DIE (IH_TWL4030_PWRBASE + 4) +#define TWL4030_PWRIRQ_PWROK_TIMEOUT (IH_TWL4030_PWRBASE + 5) +#define TWL4030_PWRIRQ_MBCHG (IH_TWL4030_PWRBASE + 6) +#define TWL4030_PWRIRQ_SC_DETECT (IH_TWL4030_PWRBASE + 7) + /* Rest are unsued currently*/ /* Offsets to Power Registers */ -- 1.5.5.rc2.25.g5fbd -- 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