diff options
Diffstat (limited to 'drivers/gpio')
-rw-r--r-- | drivers/gpio/tps65910-gpio.c | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/drivers/gpio/tps65910-gpio.c b/drivers/gpio/tps65910-gpio.c index f3ae37652446..8d1ddfdd63eb 100644 --- a/drivers/gpio/tps65910-gpio.c +++ b/drivers/gpio/tps65910-gpio.c | |||
@@ -25,9 +25,9 @@ static int tps65910_gpio_get(struct gpio_chip *gc, unsigned offset) | |||
25 | struct tps65910 *tps65910 = container_of(gc, struct tps65910, gpio); | 25 | struct tps65910 *tps65910 = container_of(gc, struct tps65910, gpio); |
26 | uint8_t val; | 26 | uint8_t val; |
27 | 27 | ||
28 | tps65910->read(tps65910, TPS65910_GPIO0, 1, &val); | 28 | tps65910->read(tps65910, TPS65910_GPIO0 + offset, 1, &val); |
29 | 29 | ||
30 | if (val & GPIO0_GPIO_STS_MASK) | 30 | if (val & GPIO_STS_MASK) |
31 | return 1; | 31 | return 1; |
32 | 32 | ||
33 | return 0; | 33 | return 0; |
@@ -39,11 +39,11 @@ static void tps65910_gpio_set(struct gpio_chip *gc, unsigned offset, | |||
39 | struct tps65910 *tps65910 = container_of(gc, struct tps65910, gpio); | 39 | struct tps65910 *tps65910 = container_of(gc, struct tps65910, gpio); |
40 | 40 | ||
41 | if (value) | 41 | if (value) |
42 | tps65910_set_bits(tps65910, TPS65910_GPIO0, | 42 | tps65910_set_bits(tps65910, TPS65910_GPIO0 + offset, |
43 | GPIO0_GPIO_SET_MASK); | 43 | GPIO_SET_MASK); |
44 | else | 44 | else |
45 | tps65910_clear_bits(tps65910, TPS65910_GPIO0, | 45 | tps65910_clear_bits(tps65910, TPS65910_GPIO0 + offset, |
46 | GPIO0_GPIO_SET_MASK); | 46 | GPIO_SET_MASK); |
47 | } | 47 | } |
48 | 48 | ||
49 | static int tps65910_gpio_output(struct gpio_chip *gc, unsigned offset, | 49 | static int tps65910_gpio_output(struct gpio_chip *gc, unsigned offset, |
@@ -54,15 +54,16 @@ static int tps65910_gpio_output(struct gpio_chip *gc, unsigned offset, | |||
54 | /* Set the initial value */ | 54 | /* Set the initial value */ |
55 | tps65910_gpio_set(gc, 0, value); | 55 | tps65910_gpio_set(gc, 0, value); |
56 | 56 | ||
57 | return tps65910_set_bits(tps65910, TPS65910_GPIO0, GPIO0_GPIO_CFG_MASK); | 57 | return tps65910_set_bits(tps65910, TPS65910_GPIO0 + offset, |
58 | GPIO_CFG_MASK); | ||
58 | } | 59 | } |
59 | 60 | ||
60 | static int tps65910_gpio_input(struct gpio_chip *gc, unsigned offset) | 61 | static int tps65910_gpio_input(struct gpio_chip *gc, unsigned offset) |
61 | { | 62 | { |
62 | struct tps65910 *tps65910 = container_of(gc, struct tps65910, gpio); | 63 | struct tps65910 *tps65910 = container_of(gc, struct tps65910, gpio); |
63 | 64 | ||
64 | return tps65910_clear_bits(tps65910, TPS65910_GPIO0, | 65 | return tps65910_clear_bits(tps65910, TPS65910_GPIO0 + offset, |
65 | GPIO0_GPIO_CFG_MASK); | 66 | GPIO_CFG_MASK); |
66 | } | 67 | } |
67 | 68 | ||
68 | void tps65910_gpio_init(struct tps65910 *tps65910, int gpio_base) | 69 | void tps65910_gpio_init(struct tps65910 *tps65910, int gpio_base) |
@@ -76,7 +77,15 @@ void tps65910_gpio_init(struct tps65910 *tps65910, int gpio_base) | |||
76 | tps65910->gpio.label = tps65910->i2c_client->name; | 77 | tps65910->gpio.label = tps65910->i2c_client->name; |
77 | tps65910->gpio.dev = tps65910->dev; | 78 | tps65910->gpio.dev = tps65910->dev; |
78 | tps65910->gpio.base = gpio_base; | 79 | tps65910->gpio.base = gpio_base; |
79 | tps65910->gpio.ngpio = 1; | 80 | |
81 | switch(tps65910_chip_id(tps65910)) { | ||
82 | case TPS65910: | ||
83 | tps65910->gpio.ngpio = 6; | ||
84 | case TPS65911: | ||
85 | tps65910->gpio.ngpio = 9; | ||
86 | default: | ||
87 | return; | ||
88 | } | ||
80 | tps65910->gpio.can_sleep = 1; | 89 | tps65910->gpio.can_sleep = 1; |
81 | 90 | ||
82 | tps65910->gpio.direction_input = tps65910_gpio_input; | 91 | tps65910->gpio.direction_input = tps65910_gpio_input; |