]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/gpio/gpio-sx150x.c
gpio: sx150x: add dts support for sx150x driver
[karo-tx-linux.git] / drivers / gpio / gpio-sx150x.c
index 20573ac714fc1dfe0620025046050520428379f4..88012e2b5b15532ae0230846a46125f5ec9622ca 100644 (file)
 #include <linux/mutex.h>
 #include <linux/slab.h>
 #include <linux/i2c/sx150x.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/of_irq.h>
+#include <linux/of_gpio.h>
+#include <linux/of_device.h>
 
 #define NO_UPDATE_PENDING      -1
 
@@ -147,6 +152,13 @@ static const struct i2c_device_id sx150x_id[] = {
 };
 MODULE_DEVICE_TABLE(i2c, sx150x_id);
 
+static const struct of_device_id sx150x_dt_id[] = {
+       { .compatible = "semtech,sx1508q" },
+       { .compatible = "semtech,sx1509q" },
+       { .compatible = "semtech,sx1506q" },
+       {},
+};
+
 static s32 sx150x_i2c_write(struct i2c_client *client, u8 reg, u8 val)
 {
        s32 err = i2c_smbus_write_byte_data(client, reg, val);
@@ -472,6 +484,8 @@ static void sx150x_init_chip(struct sx150x_chip *chip,
        chip->gpio_chip.base             = pdata->gpio_base;
        chip->gpio_chip.can_sleep        = true;
        chip->gpio_chip.ngpio            = chip->dev_cfg->ngpios;
+       chip->gpio_chip.of_node          = client->dev.of_node;
+       chip->gpio_chip.of_gpio_n_cells  = 2;
        if (pdata->oscio_is_gpo)
                ++chip->gpio_chip.ngpio;
 
@@ -666,7 +680,8 @@ static int sx150x_remove(struct i2c_client *client)
 static struct i2c_driver sx150x_driver = {
        .driver = {
                .name = "sx150x",
-               .owner = THIS_MODULE
+               .owner = THIS_MODULE,
+               .of_match_table = of_match_ptr(sx150x_dt_id),
        },
        .probe    = sx150x_probe,
        .remove   = sx150x_remove,