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: Wei Chen <Wei.Chen@csr.com>
Signed-off-by: Barry Song <Baohua.Song@csr.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
Wei Chen 2015-01-15 08:16:10 +08:00 committed by Linus Walleij
parent 73c4ceda09
commit 04d2264c3b
3 changed files with 57 additions and 1 deletions

View File

@ -0,0 +1,40 @@
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;
};

View File

@ -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

View File

@ -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[] = {
}; };
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,
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)
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,