aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mfd/max77686-irq.c
diff options
context:
space:
mode:
authorYadwinder Singh Brar <yadi.brar01@gmail.com>2012-07-09 07:21:45 -0400
committerSamuel Ortiz <sameo@linux.intel.com>2012-07-09 09:13:42 -0400
commit2b40459b7ee502c970d9f1dcf94dfa4d58ec1d85 (patch)
treec17a8614a3fd213063221c13510ae885e89291cb /drivers/mfd/max77686-irq.c
parent9bdf9b4ec7c8b707cd0d9109d576c4eb69cd84bb (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.c33
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 */