From: Peter 'p2' De Schrijver Date: Thu, 3 Apr 2008 13:44:24 +0000 (+0300) Subject: I2C: TWL4030: Adapt existing drivers to power IRQ X-Git-Tag: v2.6.25-omap1~65 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=ff038038241c20db534046539f44036cf1b4d933;p=linux-2.6-omap-h63xx.git I2C: TWL4030: Adapt existing drivers to power IRQ 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 Signed-off-by: Felipe Balbi Signed-off-by: Tony Lindgren --- diff --git a/drivers/i2c/chips/twl4030-usb.c b/drivers/i2c/chips/twl4030-usb.c index 2db1c634a8c..a23890447cd 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 929a788eb01..ca026b1f092 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 7f9b90d2aad..fc11fd0070a 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 */