diff options
author | Yadwinder Singh Brar <yadi.brar01@gmail.com> | 2012-07-09 07:21:45 -0400 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2012-07-09 09:13:42 -0400 |
commit | 2b40459b7ee502c970d9f1dcf94dfa4d58ec1d85 (patch) | |
tree | c17a8614a3fd213063221c13510ae885e89291cb /drivers/mfd/max77686-irq.c | |
parent | 9bdf9b4ec7c8b707cd0d9109d576c4eb69cd84bb (diff) |
mfd: Allow to specify max77686 interrupt through DT or platform file also
Presently driver expects irq_gpio pin in platform data and maps it to irq
itself. But we can also directly specify the interrupt in DT or platform file.
Signed-off-by: Yadwinder Singh Brar <yadi.brar@samsung.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/mfd/max77686-irq.c')
-rw-r--r-- | drivers/mfd/max77686-irq.c | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/drivers/mfd/max77686-irq.c b/drivers/mfd/max77686-irq.c index 0758fac0c447..cdc3280e2ec7 100644 --- a/drivers/mfd/max77686-irq.c +++ b/drivers/mfd/max77686-irq.c | |||
@@ -252,21 +252,28 @@ int max77686_irq_init(struct max77686_dev *max77686) | |||
252 | 252 | ||
253 | mutex_init(&max77686->irqlock); | 253 | mutex_init(&max77686->irqlock); |
254 | 254 | ||
255 | max77686->irq = gpio_to_irq(max77686->irq_gpio); | 255 | if (max77686->irq_gpio && !max77686->irq) { |
256 | 256 | max77686->irq = gpio_to_irq(max77686->irq_gpio); | |
257 | if (debug_mask & MAX77686_DEBUG_IRQ_INT) { | 257 | |
258 | ret = gpio_request(max77686->irq_gpio, "pmic_irq"); | 258 | if (debug_mask & MAX77686_DEBUG_IRQ_INT) { |
259 | if (ret < 0) { | 259 | ret = gpio_request(max77686->irq_gpio, "pmic_irq"); |
260 | dev_err(max77686->dev, | 260 | if (ret < 0) { |
261 | "Failed to request gpio %d with ret: %d\n", | 261 | dev_err(max77686->dev, |
262 | max77686->irq_gpio, ret); | 262 | "Failed to request gpio %d with ret:" |
263 | return IRQ_NONE; | 263 | "%d\n", max77686->irq_gpio, ret); |
264 | return IRQ_NONE; | ||
265 | } | ||
266 | |||
267 | gpio_direction_input(max77686->irq_gpio); | ||
268 | val = gpio_get_value(max77686->irq_gpio); | ||
269 | gpio_free(max77686->irq_gpio); | ||
270 | pr_info("%s: gpio_irq=%x\n", __func__, val); | ||
264 | } | 271 | } |
272 | } | ||
265 | 273 | ||
266 | gpio_direction_input(max77686->irq_gpio); | 274 | if (!max77686->irq) { |
267 | val = gpio_get_value(max77686->irq_gpio); | 275 | dev_err(max77686->dev, "irq is not specified\n"); |
268 | gpio_free(max77686->irq_gpio); | 276 | return -ENODEV; |
269 | pr_info("%s: gpio_irq=%x\n", __func__, val); | ||
270 | } | 277 | } |
271 | 278 | ||
272 | /* Mask individual interrupt sources */ | 279 | /* Mask individual interrupt sources */ |