Commit 04d2264c authored by Wei Chen's avatar Wei Chen Committed by Linus Walleij

gpio: sx150x: add dts support for sx150x driver

Current sx150x gpio expander driver doesn't support
DTS. Now we added dts support for this driver.
Signed-off-by: default avatarWei Chen <Wei.Chen@csr.com>
Signed-off-by: default avatarBarry Song <Baohua.Song@csr.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 73c4ceda
SEMTECH SX150x GPIO expander bindings
Required properties:
- compatible: should be "semtech,sx1506q",
"semtech,sx1508q",
"semtech,sx1509q".
- reg: The I2C slave address for this device.
- interrupt-parent: phandle of the parent interrupt controller.
- interrupts: Interrupt specifier for the controllers interrupt.
- #gpio-cells: Should be 2. The first cell is the GPIO number and the
second cell is used to specify optional parameters:
bit 0: polarity (0: normal, 1: inverted)
- gpio-controller: Marks the device as a GPIO controller.
- interrupt-controller: Marks the device as a interrupt controller.
The GPIO expander can optionally be used as an interrupt controller, in
which case it uses the default two cell specifier as described in
Documentation/devicetree/bindings/interrupt-controller/interrupts.txt.
Example:
i2c_gpio_expander@20{
#gpio-cells = <2>;
#interrupt-cells = <2>;
compatible = "semtech,sx1506q";
reg = <0x20>;
interrupt-parent = <&gpio_1>;
interrupts = <16 0>;
gpio-controller;
interrupt-controller;
};
...@@ -141,6 +141,7 @@ sandisk Sandisk Corporation ...@@ -141,6 +141,7 @@ sandisk Sandisk Corporation
sbs Smart Battery System sbs Smart Battery System
schindler Schindler schindler Schindler
seagate Seagate Technology PLC seagate Seagate Technology PLC
semtech Semtech Corporation
sil Silicon Image sil Silicon Image
silabs Silicon Laboratories silabs Silicon Laboratories
simtek simtek
......
...@@ -23,6 +23,11 @@ ...@@ -23,6 +23,11 @@
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/i2c/sx150x.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 #define NO_UPDATE_PENDING -1
...@@ -147,6 +152,13 @@ static const struct i2c_device_id sx150x_id[] = { ...@@ -147,6 +152,13 @@ static const struct i2c_device_id sx150x_id[] = {
}; };
MODULE_DEVICE_TABLE(i2c, 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) static s32 sx150x_i2c_write(struct i2c_client *client, u8 reg, u8 val)
{ {
s32 err = i2c_smbus_write_byte_data(client, reg, val); s32 err = i2c_smbus_write_byte_data(client, reg, val);
...@@ -472,6 +484,8 @@ static void sx150x_init_chip(struct sx150x_chip *chip, ...@@ -472,6 +484,8 @@ static void sx150x_init_chip(struct sx150x_chip *chip,
chip->gpio_chip.base = pdata->gpio_base; chip->gpio_chip.base = pdata->gpio_base;
chip->gpio_chip.can_sleep = true; chip->gpio_chip.can_sleep = true;
chip->gpio_chip.ngpio = chip->dev_cfg->ngpios; 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) if (pdata->oscio_is_gpo)
++chip->gpio_chip.ngpio; ++chip->gpio_chip.ngpio;
...@@ -666,7 +680,8 @@ static int sx150x_remove(struct i2c_client *client) ...@@ -666,7 +680,8 @@ static int sx150x_remove(struct i2c_client *client)
static struct i2c_driver sx150x_driver = { static struct i2c_driver sx150x_driver = {
.driver = { .driver = {
.name = "sx150x", .name = "sx150x",
.owner = THIS_MODULE .owner = THIS_MODULE,
.of_match_table = of_match_ptr(sx150x_dt_id),
}, },
.probe = sx150x_probe, .probe = sx150x_probe,
.remove = sx150x_remove, .remove = sx150x_remove,
......
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