2012-05-13 18:04:51

by Mark Brown

[permalink] [raw]
Subject: [PATCH] mfd: da9052: Fix genirq abuse

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 <[email protected]>
---
drivers/mfd/da9052-core.c | 8 +++-----
include/linux/mfd/da9052/da9052.h | 1 +
2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/mfd/da9052-core.c b/drivers/mfd/da9052-core.c
index 7ff313f..7776aff 100644
--- a/drivers/mfd/da9052-core.c
+++ b/drivers/mfd/da9052-core.c
@@ -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);
}

diff --git a/include/linux/mfd/da9052/da9052.h b/include/linux/mfd/da9052/da9052.h
index 7ffbd6e..8313cd9 100644
--- a/include/linux/mfd/da9052/da9052.h
+++ b/include/linux/mfd/da9052/da9052.h
@@ -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;
--
1.7.10


2012-05-13 18:17:26

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH] mfd: da9052: Fix genirq abuse

On Sun, May 13, 2012 at 07:04:42PM +0100, Mark Brown wrote:
> 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.

Sorry, I also meant to say that since this fix seems fairly obvious and
blocks some other regmap work I've gone ahead and dropped this into my
regmap tree immediately at

git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap.git topic/irq

Hopefully this should be OK - please let me know if there's any issue.


Attachments:
(No filename) (642.00 B)
signature.asc (836.00 B)
Digital signature
Download all attachments

2012-05-14 20:56:28

by Samuel Ortiz

[permalink] [raw]
Subject: Re: [PATCH] mfd: da9052: Fix genirq abuse

Hi Mark,

On Sun, May 13, 2012 at 07:04:42PM +0100, Mark Brown wrote:
> 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 <[email protected]>
Acked-by: Samuel Ortiz <[email protected]>

I'm fine with you merging this one through your regmap tree.

Cheers,
Samuel.

--
Intel Open Source Technology Centre
http://oss.intel.com/