aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMika Westerberg <mika.westerberg@linux.intel.com>2015-05-06 13:29:08 +0300
committerMihai Serban <mihai.serban@intel.com>2016-01-07 17:55:06 +0200
commit2a95ad8bff70063cfcb81ea3f23147985457fa07 (patch)
tree5164c7e33a28fab7f2a226d67ef52da3c78d9b06
parentcb5719283224c67ce4f3702f1065abae56f4f757 (diff)
downloadminnowboard-v3.14-2a95ad8bff70063cfcb81ea3f23147985457fa07.tar.gz
BACKPORT: i2c / ACPI: Assign IRQ for devices that have GpioInt automatically
Following what DT already does. If the device does not have ACPI Interrupt resource but instead it has one or more GpioInt resources listed below it, we take the first GpioInt resource, convert it to suitable Linux IRQ number and pass it to the driver instead. This makes drivers simpler because the don't need to care about GPIOs at all if only thing they need is interrupt. Change-Id: I2c72cd5512c161ed44a27c92882c961fede6183f Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> Acked-by: Wolfram Sang <wsa@the-dreams.de> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Bogdan Davidoaia <bogdan.m.davidoaia@intel.com> Signed-off-by: Robert Dolca <robert.dolca@intel.com>
-rw-r--r--drivers/i2c/i2c-core.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index d543fc96560..ac5caf915ef 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -253,6 +253,21 @@ static int i2c_device_probe(struct device *dev)
if (!client)
return 0;
+ if (!client->irq) {
+ int irq = -ENOENT;
+
+ if (ACPI_COMPANION(dev))
+ irq = acpi_dev_gpio_irq_get(ACPI_COMPANION(dev), 0);
+
+ if (irq == -EPROBE_DEFER)
+ return irq;
+
+ if (irq < 0)
+ irq = 0;
+
+ client->irq = irq;
+ }
+
driver = to_i2c_driver(dev->driver);
if (!driver->probe || !driver->id_table)
return -ENODEV;