diff options
-rw-r--r-- | drivers/gpio/gpio-tps65910.c | 20 | ||||
-rw-r--r-- | include/linux/mfd/tps65910.h | 8 |
2 files changed, 26 insertions, 2 deletions
diff --git a/drivers/gpio/gpio-tps65910.c b/drivers/gpio/gpio-tps65910.c index 91f45b965d1e..7eef648a3351 100644 --- a/drivers/gpio/gpio-tps65910.c +++ b/drivers/gpio/gpio-tps65910.c | |||
@@ -69,6 +69,7 @@ static int tps65910_gpio_input(struct gpio_chip *gc, unsigned offset) | |||
69 | void tps65910_gpio_init(struct tps65910 *tps65910, int gpio_base) | 69 | void tps65910_gpio_init(struct tps65910 *tps65910, int gpio_base) |
70 | { | 70 | { |
71 | int ret; | 71 | int ret; |
72 | struct tps65910_board *board_data; | ||
72 | 73 | ||
73 | if (!gpio_base) | 74 | if (!gpio_base) |
74 | return; | 75 | return; |
@@ -80,10 +81,10 @@ void tps65910_gpio_init(struct tps65910 *tps65910, int gpio_base) | |||
80 | 81 | ||
81 | switch(tps65910_chip_id(tps65910)) { | 82 | switch(tps65910_chip_id(tps65910)) { |
82 | case TPS65910: | 83 | case TPS65910: |
83 | tps65910->gpio.ngpio = 6; | 84 | tps65910->gpio.ngpio = TPS65910_NUM_GPIO; |
84 | break; | 85 | break; |
85 | case TPS65911: | 86 | case TPS65911: |
86 | tps65910->gpio.ngpio = 9; | 87 | tps65910->gpio.ngpio = TPS65911_NUM_GPIO; |
87 | break; | 88 | break; |
88 | default: | 89 | default: |
89 | return; | 90 | return; |
@@ -95,6 +96,21 @@ void tps65910_gpio_init(struct tps65910 *tps65910, int gpio_base) | |||
95 | tps65910->gpio.set = tps65910_gpio_set; | 96 | tps65910->gpio.set = tps65910_gpio_set; |
96 | tps65910->gpio.get = tps65910_gpio_get; | 97 | tps65910->gpio.get = tps65910_gpio_get; |
97 | 98 | ||
99 | /* Configure sleep control for gpios */ | ||
100 | board_data = dev_get_platdata(tps65910->dev); | ||
101 | if (board_data) { | ||
102 | int i; | ||
103 | for (i = 0; i < tps65910->gpio.ngpio; ++i) { | ||
104 | if (board_data->en_gpio_sleep[i]) { | ||
105 | ret = tps65910_set_bits(tps65910, | ||
106 | TPS65910_GPIO0 + i, GPIO_SLEEP_MASK); | ||
107 | if (ret < 0) | ||
108 | dev_warn(tps65910->dev, | ||
109 | "GPIO Sleep setting failed\n"); | ||
110 | } | ||
111 | } | ||
112 | } | ||
113 | |||
98 | ret = gpiochip_add(&tps65910->gpio); | 114 | ret = gpiochip_add(&tps65910->gpio); |
99 | 115 | ||
100 | if (ret) | 116 | if (ret) |
diff --git a/include/linux/mfd/tps65910.h b/include/linux/mfd/tps65910.h index d0cb12eba402..9071902bd222 100644 --- a/include/linux/mfd/tps65910.h +++ b/include/linux/mfd/tps65910.h | |||
@@ -657,6 +657,8 @@ | |||
657 | 657 | ||
658 | 658 | ||
659 | /*Register GPIO (0x80) register.RegisterDescription */ | 659 | /*Register GPIO (0x80) register.RegisterDescription */ |
660 | #define GPIO_SLEEP_MASK 0x80 | ||
661 | #define GPIO_SLEEP_SHIFT 7 | ||
660 | #define GPIO_DEB_MASK 0x10 | 662 | #define GPIO_DEB_MASK 0x10 |
661 | #define GPIO_DEB_SHIFT 4 | 663 | #define GPIO_DEB_SHIFT 4 |
662 | #define GPIO_PUEN_MASK 0x08 | 664 | #define GPIO_PUEN_MASK 0x08 |
@@ -740,6 +742,11 @@ | |||
740 | #define TPS65910_GPIO_STS BIT(1) | 742 | #define TPS65910_GPIO_STS BIT(1) |
741 | #define TPS65910_GPIO_SET BIT(0) | 743 | #define TPS65910_GPIO_SET BIT(0) |
742 | 744 | ||
745 | /* Max number of TPS65910/11 GPIOs */ | ||
746 | #define TPS65910_NUM_GPIO 6 | ||
747 | #define TPS65911_NUM_GPIO 9 | ||
748 | #define TPS6591X_MAX_NUM_GPIO 9 | ||
749 | |||
743 | /* Regulator Index Definitions */ | 750 | /* Regulator Index Definitions */ |
744 | #define TPS65910_REG_VRTC 0 | 751 | #define TPS65910_REG_VRTC 0 |
745 | #define TPS65910_REG_VIO 1 | 752 | #define TPS65910_REG_VIO 1 |
@@ -779,6 +786,7 @@ struct tps65910_board { | |||
779 | int irq_base; | 786 | int irq_base; |
780 | int vmbch_threshold; | 787 | int vmbch_threshold; |
781 | int vmbch2_threshold; | 788 | int vmbch2_threshold; |
789 | bool en_gpio_sleep[TPS6591X_MAX_NUM_GPIO]; | ||
782 | struct regulator_init_data *tps65910_pmic_init_data[TPS65910_NUM_REGS]; | 790 | struct regulator_init_data *tps65910_pmic_init_data[TPS65910_NUM_REGS]; |
783 | }; | 791 | }; |
784 | 792 | ||