platform/x86: i2c-multi-instantiate: Distinguish IRQ resource type
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Wed, 28 Nov 2018 11:45:31 +0000 (13:45 +0200)
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 3 Dec 2018 19:40:02 +0000 (21:40 +0200)
As a preparatory patch switch the driver to distinguish IRQ resource type.
For now, only GpioInt() is supported.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
drivers/platform/x86/i2c-multi-instantiate.c

index d99bbae..99db3e3 100644 (file)
@@ -7,6 +7,7 @@
  */
 
 #include <linux/acpi.h>
+#include <linux/bits.h>
 #include <linux/i2c.h>
 #include <linux/interrupt.h>
 #include <linux/kernel.h>
 #include <linux/platform_device.h>
 #include <linux/types.h>
 
+#define IRQ_RESOURCE_TYPE      GENMASK(1, 0)
+#define IRQ_RESOURCE_NONE      0
+#define IRQ_RESOURCE_GPIO      1
+
 struct i2c_inst_data {
        const char *type;
-       int gpio_irq_idx;
+       unsigned int flags;
+       int irq_idx;
 };
 
 struct i2c_multi_inst_data {
@@ -88,16 +94,19 @@ static int i2c_multi_inst_probe(struct platform_device *pdev)
                snprintf(name, sizeof(name), "%s-%s", match->id,
                         inst_data[i].type);
                board_info.dev_name = name;
-               board_info.irq = 0;
-               if (inst_data[i].gpio_irq_idx != -1) {
-                       ret = acpi_dev_gpio_irq_get(adev,
-                                                   inst_data[i].gpio_irq_idx);
+               switch (inst_data[i].flags & IRQ_RESOURCE_TYPE) {
+               case IRQ_RESOURCE_GPIO:
+                       ret = acpi_dev_gpio_irq_get(adev, inst_data[i].irq_idx);
                        if (ret < 0) {
                                dev_err(dev, "Error requesting irq at index %d: %d\n",
-                                       inst_data[i].gpio_irq_idx, ret);
+                                       inst_data[i].irq_idx, ret);
                                goto error;
                        }
                        board_info.irq = ret;
+                       break;
+               default:
+                       board_info.irq = 0;
+                       break;
                }
                multi->clients[i] = i2c_acpi_new_device(dev, i, &board_info);
                if (IS_ERR(multi->clients[i])) {
@@ -135,9 +144,9 @@ static int i2c_multi_inst_remove(struct platform_device *pdev)
 }
 
 static const struct i2c_inst_data bsg1160_data[]  = {
-       { "bmc150_accel", 0 },
-       { "bmc150_magn", -1 },
-       { "bmg160", -1 },
+       { "bmc150_accel", IRQ_RESOURCE_GPIO, 0 },
+       { "bmc150_magn" },
+       { "bmg160" },
        {}
 };