mfd: da9052: Fix genirq abuse
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Sun, 13 May 2012 17:53:23 +0000 (18:53 +0100)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Sun, 13 May 2012 18:14:02 +0000 (19:14 +0100)
Rather than using the pointer passed back by the regmap API (or complaining
because that wasn't actually being set) the da9052 driver was having some
fun and games peering through genirq and regmap internals. Fix the driver
to use the API as expected.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
drivers/mfd/da9052-core.c
include/linux/mfd/da9052/da9052.h

index 7ff313fe9fb112afd5175dc9b091d224ea936f7e..7776aff46269c38134bc4ca67d81d703989545b1 100644 (file)
@@ -659,12 +659,11 @@ int __devinit da9052_device_init(struct da9052 *da9052, u8 chip_id)
        ret = regmap_add_irq_chip(da9052->regmap, da9052->chip_irq,
                                  IRQF_TRIGGER_LOW | IRQF_ONESHOT,
                                  da9052->irq_base, &da9052_regmap_irq_chip,
-                                 NULL);
+                                 &da9052->irq_data);
        if (ret < 0)
                goto regmap_err;
 
-       desc = irq_to_desc(da9052->chip_irq);
-       da9052->irq_base = regmap_irq_chip_get_base(desc->action->dev_id);
+       da9052->irq_base = regmap_irq_chip_get_base(da9052->irq_data);
 
        ret = mfd_add_devices(da9052->dev, -1, da9052_subdev_info,
                              ARRAY_SIZE(da9052_subdev_info), NULL, 0);
@@ -681,8 +680,7 @@ regmap_err:
 
 void da9052_device_exit(struct da9052 *da9052)
 {
-       regmap_del_irq_chip(da9052->chip_irq,
-                           irq_get_irq_data(da9052->irq_base)->chip_data);
+       regmap_del_irq_chip(da9052->chip_irq, da9052->irq_data);
        mfd_remove_devices(da9052->dev);
 }
 
index 7ffbd6e9e7fc00f428c4c036fe53443cbcc3e80f..8313cd9658e391487ee07d085ad585071184da63 100644 (file)
@@ -80,6 +80,7 @@ struct da9052 {
        struct regmap *regmap;
 
        int irq_base;
+       struct regmap_irq_chip_data *irq_data;
        u8 chip_id;
 
        int chip_irq;