aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpio')
-rw-r--r--drivers/gpio/tps65910-gpio.c29
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
49static int tps65910_gpio_output(struct gpio_chip *gc, unsigned offset, 49static 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
60static int tps65910_gpio_input(struct gpio_chip *gc, unsigned offset) 61static 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
68void tps65910_gpio_init(struct tps65910 *tps65910, int gpio_base) 69void 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;