Commit 870ab9a3 authored by Andy Shevchenko's avatar Andy Shevchenko

platform/x86: i2c-multi-instantiate: Distinguish IRQ resource type

As a preparatory patch switch the driver to distinguish IRQ resource type.
For now, only GpioInt() is supported.
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
parent a7296566
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
*/ */
#include <linux/acpi.h> #include <linux/acpi.h>
#include <linux/bits.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -14,9 +15,14 @@ ...@@ -14,9 +15,14 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/types.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 { struct i2c_inst_data {
const char *type; const char *type;
int gpio_irq_idx; unsigned int flags;
int irq_idx;
}; };
struct i2c_multi_inst_data { struct i2c_multi_inst_data {
...@@ -88,16 +94,19 @@ static int i2c_multi_inst_probe(struct platform_device *pdev) ...@@ -88,16 +94,19 @@ static int i2c_multi_inst_probe(struct platform_device *pdev)
snprintf(name, sizeof(name), "%s-%s", match->id, snprintf(name, sizeof(name), "%s-%s", match->id,
inst_data[i].type); inst_data[i].type);
board_info.dev_name = name; board_info.dev_name = name;
board_info.irq = 0; switch (inst_data[i].flags & IRQ_RESOURCE_TYPE) {
if (inst_data[i].gpio_irq_idx != -1) { case IRQ_RESOURCE_GPIO:
ret = acpi_dev_gpio_irq_get(adev, ret = acpi_dev_gpio_irq_get(adev, inst_data[i].irq_idx);
inst_data[i].gpio_irq_idx);
if (ret < 0) { if (ret < 0) {
dev_err(dev, "Error requesting irq at index %d: %d\n", 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; goto error;
} }
board_info.irq = ret; board_info.irq = ret;
break;
default:
board_info.irq = 0;
break;
} }
multi->clients[i] = i2c_acpi_new_device(dev, i, &board_info); multi->clients[i] = i2c_acpi_new_device(dev, i, &board_info);
if (IS_ERR(multi->clients[i])) { if (IS_ERR(multi->clients[i])) {
...@@ -135,9 +144,9 @@ static int i2c_multi_inst_remove(struct platform_device *pdev) ...@@ -135,9 +144,9 @@ static int i2c_multi_inst_remove(struct platform_device *pdev)
} }
static const struct i2c_inst_data bsg1160_data[] = { static const struct i2c_inst_data bsg1160_data[] = {
{ "bmc150_accel", 0 }, { "bmc150_accel", IRQ_RESOURCE_GPIO, 0 },
{ "bmc150_magn", -1 }, { "bmc150_magn" },
{ "bmg160", -1 }, { "bmg160" },
{} {}
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment