On Tuesday 05 July 2011 13:22:46 Balbi, Felipe wrote:
Hi,
On Tue, Jul 05, 2011 at 12:14:22PM +0300, Peter Ujfalusi wrote:
Add new variable to pass the irq number for the slaves devices of twl6040. The irq number configuration is done in the twl6040-core at probe time, so machine drivers do not need to be modified.
Signed-off-by: Peter Ujfalusi peter.ujfalusi@ti.com
drivers/mfd/twl6040-core.c | 2 ++ include/linux/i2c/twl.h | 2 ++ 2 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/drivers/mfd/twl6040-core.c b/drivers/mfd/twl6040-core.c index cfaedb5..8607793 100644 --- a/drivers/mfd/twl6040-core.c +++ b/drivers/mfd/twl6040-core.c @@ -501,6 +501,7 @@ static int __devinit twl6040_probe(struct platform_device *pdev)
if (pdata->codec) {
cell = &twl6040->cells[children]; cell->name = "twl6040-codec";
pdata->codec->plug_irq = twl6040->irq_base + TWL6040_IRQ_PLUG;
are the slave devices platform_devices ?? If so, you could use struct resource to pass IRQs as that's the "approved" way to do so. Then, on child driver, you could either rely on a particular order of the resources or assign them names and use platform_get_irq_byname() to fetch the correct one (if you have more than one, that is).
You mean something like this:
static struct resource twl6040_codec_rsrc[] = { { .flags = IORESOURCE_IRQ, }, };
...
@@ -501,6 +501,7 @@ static int __devinit twl6040_probe(struct platform_device *pdev) if (pdata->codec) { cell = &twl6040->cells[children]; cell->name = "twl6040-codec"; + twl6040_codec_rsrc[0].start = twl6040->irq_base + TWL6040_IRQ_PLUG; + twl6040_codec_rsrc[0].end = twl6040->irq_base + TWL6040_IRQ_PLUG; + cell->resource = twl6040_codec_rsrc; + cell->num_resources = ARRAY_SIZE(twl6040_codec_rsrc); cell->platform_data = pdata->codec; cell->pdata_size = sizeof(*pdata->codec); children++;