From 608ea3a78a354b39c9462cf182fa1271089e1649 Mon Sep 17 00:00:00 2001 From: Peter Ujfalusi Date: Wed, 16 May 2012 14:11:56 +0300 Subject: [PATCH] --- yaml --- r: 308771 b: refs/heads/master c: 6712419d697851c4472cdfd2111c844d777472e8 h: refs/heads/master i: 308769: d29ee5e34a325410a06400c9be6038ade17d45bf 308767: 950624bcb1acd4d36a73977be26945b09646945d v: v3 --- [refs] | 2 +- trunk/drivers/mfd/twl6040-core.c | 3 +-- trunk/drivers/mfd/twl6040-irq.c | 13 +++++++++++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 6d367ab849c3..9facaef826f0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 68029c6cf9750ff0d4ed5c812a3755cbd855862a +refs/heads/master: 6712419d697851c4472cdfd2111c844d777472e8 diff --git a/trunk/drivers/mfd/twl6040-core.c b/trunk/drivers/mfd/twl6040-core.c index 7a92d95bfb60..c50fba7be778 100644 --- a/trunk/drivers/mfd/twl6040-core.c +++ b/trunk/drivers/mfd/twl6040-core.c @@ -515,7 +515,7 @@ static int __devinit twl6040_probe(struct i2c_client *client, } /* In order to operate correctly we need valid interrupt config */ - if (!client->irq || !pdata->irq_base) { + if (!client->irq) { dev_err(&client->dev, "Invalid IRQ configuration\n"); return -EINVAL; } @@ -552,7 +552,6 @@ static int __devinit twl6040_probe(struct i2c_client *client, twl6040->dev = &client->dev; twl6040->irq = client->irq; - twl6040->irq_base = pdata->irq_base; mutex_init(&twl6040->mutex); mutex_init(&twl6040->io_mutex); diff --git a/trunk/drivers/mfd/twl6040-irq.c b/trunk/drivers/mfd/twl6040-irq.c index 008022cdb06d..914978e1b62e 100644 --- a/trunk/drivers/mfd/twl6040-irq.c +++ b/trunk/drivers/mfd/twl6040-irq.c @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -138,7 +139,7 @@ static irqreturn_t twl6040_irq_thread(int irq, void *data) int twl6040_irq_init(struct twl6040 *twl6040) { - int i, nr_irqs, ret; + int i, nr_irqs, irq_base, ret; u8 val; mutex_init(&twl6040->irq_mutex); @@ -149,8 +150,16 @@ int twl6040_irq_init(struct twl6040 *twl6040) twl6040_reg_write(twl6040, TWL6040_REG_INTMR, TWL6040_ALLINT_MSK); nr_irqs = ARRAY_SIZE(twl6040_irqs); + + irq_base = irq_alloc_descs(-1, 0, nr_irqs, 0); + if (IS_ERR_VALUE(irq_base)) { + dev_err(twl6040->dev, "Fail to allocate IRQ descs\n"); + return irq_base; + } + twl6040->irq_base = irq_base; + /* Register them with genirq */ - for (i = twl6040->irq_base; i < twl6040->irq_base + nr_irqs; i++) { + for (i = irq_base; i < irq_base + nr_irqs; i++) { irq_set_chip_data(i, twl6040); irq_set_chip_and_handler(i, &twl6040_irq_chip, handle_level_irq);