Skip to content

Commit

Permalink
platform/x86: i2c-multi-instantiate: Distinguish IRQ resource type
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Andy Shevchenko committed Dec 3, 2018
1 parent a729656 commit 870ab9a
Showing 1 changed file with 18 additions and 9 deletions.
27 changes: 18 additions & 9 deletions drivers/platform/x86/i2c-multi-instantiate.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,22 @@
*/

#include <linux/acpi.h>
#include <linux/bits.h>
#include <linux/i2c.h>
#include <linux/interrupt.h>
#include <linux/kernel.h>
#include <linux/module.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 {
Expand Down Expand Up @@ -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])) {
Expand Down Expand Up @@ -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" },
{}
};

Expand Down

0 comments on commit 870ab9a

Please sign in to comment.