Commit b61d8e63 authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Jonathan Cameron

iio: proximity: sx9500: Add GPIO ACPI mapping table

In order to satisfy GPIO ACPI library requirements convert users of
gpiod_get_index() to correctly behave when there no mapping is provided
by firmware.

Here we add explicit mapping between _CRS GpioIo() resources and
their names used in the driver.
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent c0879ed6
...@@ -32,9 +32,6 @@ ...@@ -32,9 +32,6 @@
#define SX9500_DRIVER_NAME "sx9500" #define SX9500_DRIVER_NAME "sx9500"
#define SX9500_IRQ_NAME "sx9500_event" #define SX9500_IRQ_NAME "sx9500_event"
#define SX9500_GPIO_INT "interrupt"
#define SX9500_GPIO_RESET "reset"
/* Register definitions. */ /* Register definitions. */
#define SX9500_REG_IRQ_SRC 0x00 #define SX9500_REG_IRQ_SRC 0x00
#define SX9500_REG_STAT 0x01 #define SX9500_REG_STAT 0x01
...@@ -866,26 +863,44 @@ static int sx9500_init_device(struct iio_dev *indio_dev) ...@@ -866,26 +863,44 @@ static int sx9500_init_device(struct iio_dev *indio_dev)
return sx9500_init_compensation(indio_dev); return sx9500_init_compensation(indio_dev);
} }
static const struct acpi_gpio_params reset_gpios = { 0, 0, false };
static const struct acpi_gpio_params interrupt_gpios = { 2, 0, false };
static const struct acpi_gpio_mapping acpi_sx9500_gpios[] = {
{ "reset-gpios", &reset_gpios, 1 },
/*
* Some platforms have a bug in ACPI GPIO description making IRQ
* GPIO to be output only. Ask the GPIO core to ignore this limit.
*/
{ "interrupt-gpios", &interrupt_gpios, 1, ACPI_GPIO_QUIRK_NO_IO_RESTRICTION },
{ },
};
static void sx9500_gpio_probe(struct i2c_client *client, static void sx9500_gpio_probe(struct i2c_client *client,
struct sx9500_data *data) struct sx9500_data *data)
{ {
struct gpio_desc *gpiod_int; struct gpio_desc *gpiod_int;
struct device *dev; struct device *dev;
int ret;
if (!client) if (!client)
return; return;
dev = &client->dev; dev = &client->dev;
ret = devm_acpi_dev_add_driver_gpios(dev, acpi_sx9500_gpios);
if (ret)
dev_dbg(dev, "Unable to add GPIO mapping table\n");
if (client->irq <= 0) { if (client->irq <= 0) {
gpiod_int = devm_gpiod_get(dev, SX9500_GPIO_INT, GPIOD_IN); gpiod_int = devm_gpiod_get(dev, "interrupt", GPIOD_IN);
if (IS_ERR(gpiod_int)) if (IS_ERR(gpiod_int))
dev_err(dev, "gpio get irq failed\n"); dev_err(dev, "gpio get irq failed\n");
else else
client->irq = gpiod_to_irq(gpiod_int); client->irq = gpiod_to_irq(gpiod_int);
} }
data->gpiod_rst = devm_gpiod_get(dev, SX9500_GPIO_RESET, GPIOD_OUT_HIGH); data->gpiod_rst = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
if (IS_ERR(data->gpiod_rst)) { if (IS_ERR(data->gpiod_rst)) {
dev_warn(dev, "gpio get reset pin failed\n"); dev_warn(dev, "gpio get reset pin failed\n");
data->gpiod_rst = NULL; data->gpiod_rst = NULL;
......
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