Create new irq handler for thermal events in order to be able to handle the
event and clean up the code regarding to interrupt handling:
Use proper function names for the irq handlers
No need to read the INTD register anymore.

Signed-off-by: Peter Ujfalusi <peter.ujfal...@ti.com>
---
 drivers/mfd/twl6040-core.c | 52 +++++++++++++++++++++++++++-------------------
 1 file changed, 31 insertions(+), 21 deletions(-)

diff --git a/drivers/mfd/twl6040-core.c b/drivers/mfd/twl6040-core.c
index 6d9db27..5817bc6 100644
--- a/drivers/mfd/twl6040-core.c
+++ b/drivers/mfd/twl6040-core.c
@@ -193,27 +193,27 @@ static void twl6040_power_down_manual(struct twl6040 
*twl6040)
        twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl);
 }
 
-static irqreturn_t twl6040_naudint_handler(int irq, void *data)
+static irqreturn_t twl6040_readyint_handler(int irq, void *data)
 {
        struct twl6040 *twl6040 = data;
-       u8 intid, status;
 
-       intid = twl6040_reg_read(twl6040, TWL6040_REG_INTID);
+       complete(&twl6040->ready);
 
-       if (intid & TWL6040_READYINT)
-               complete(&twl6040->ready);
+       return IRQ_HANDLED;
+}
 
-       if (intid & TWL6040_THINT) {
-               status = twl6040_reg_read(twl6040, TWL6040_REG_STATUS);
-               if (status & TWL6040_TSHUTDET) {
-                       dev_warn(twl6040->dev,
-                                "Thermal shutdown, powering-off");
-                       twl6040_power(twl6040, 0);
-               } else {
-                       dev_warn(twl6040->dev,
-                                "Leaving thermal shutdown, powering-on");
-                       twl6040_power(twl6040, 1);
-               }
+static irqreturn_t twl6040_thint_handler(int irq, void *data)
+{
+       struct twl6040 *twl6040 = data;
+       u8 status;
+
+       status = twl6040_reg_read(twl6040, TWL6040_REG_STATUS);
+       if (status & TWL6040_TSHUTDET) {
+               dev_warn(twl6040->dev, "Thermal shutdown, powering-off");
+               twl6040_power(twl6040, 0);
+       } else {
+               dev_warn(twl6040->dev, "Leaving thermal shutdown, powering-on");
+               twl6040_power(twl6040, 1);
        }
 
        return IRQ_HANDLED;
@@ -580,12 +580,19 @@ static int __devinit twl6040_probe(struct i2c_client 
*client,
                goto irq_init_err;
 
        ret = request_threaded_irq(twl6040->irq_base + TWL6040_IRQ_READY,
-                                  NULL, twl6040_naudint_handler, IRQF_ONESHOT,
+                                  NULL, twl6040_readyint_handler, IRQF_ONESHOT,
                                   "twl6040_irq_ready", twl6040);
        if (ret) {
-               dev_err(twl6040->dev, "READY IRQ request failed: %d\n",
-                       ret);
-               goto irq_err;
+               dev_err(twl6040->dev, "READY IRQ request failed: %d\n", ret);
+               goto readyirq_err;
+       }
+
+       ret = request_threaded_irq(twl6040->irq_base + TWL6040_IRQ_TH,
+                                  NULL, twl6040_thint_handler, IRQF_ONESHOT,
+                                  "twl6040_irq_th", twl6040);
+       if (ret) {
+               dev_err(twl6040->dev, "Thermal IRQ request failed: %d\n", ret);
+               goto thirq_err;
        }
 
        /* dual-access registers controlled by I2C only */
@@ -650,8 +657,10 @@ static int __devinit twl6040_probe(struct i2c_client 
*client,
        return 0;
 
 mfd_err:
+       free_irq(twl6040->irq_base + TWL6040_IRQ_TH, twl6040);
+thirq_err:
        free_irq(twl6040->irq_base + TWL6040_IRQ_READY, twl6040);
-irq_err:
+readyirq_err:
        twl6040_irq_exit(twl6040);
 irq_init_err:
        if (gpio_is_valid(twl6040->audpwron))
@@ -677,6 +686,7 @@ static int __devexit twl6040_remove(struct i2c_client 
*client)
                gpio_free(twl6040->audpwron);
 
        free_irq(twl6040->irq_base + TWL6040_IRQ_READY, twl6040);
+       free_irq(twl6040->irq_base + TWL6040_IRQ_TH, twl6040);
        twl6040_irq_exit(twl6040);
 
        mfd_remove_devices(&client->dev);
-- 
1.7.12

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to