diff mbox series

gpio: pca953x_gpio: Add support for 24 bit IO expander

Message ID 20200127174900.9875-1-vigneshr@ti.com
State Accepted, archived
Commit dd6638a01888871306860136203e26c80d948550
Delegated to: Lokesh Vutla
Headers show
Series gpio: pca953x_gpio: Add support for 24 bit IO expander | expand

Commit Message

Raghavendra, Vignesh Jan. 27, 2020, 5:49 p.m. UTC
J721e EVM has a TCA6424 IO expander that has 24 GPIOs. Add support for
the same

Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
---
 drivers/gpio/pca953x_gpio.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

Comments

Lokesh Vutla Feb. 4, 2020, 4:03 a.m. UTC | #1
On 27/01/20 11:19 PM, Vignesh Raghavendra wrote:
> J721e EVM has a TCA6424 IO expander that has 24 GPIOs. Add support for
> the same
> 
> Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>

pulled into u-boot-ti tree.

Thanks and regards,
Lokesh
diff mbox series

Patch

diff --git a/drivers/gpio/pca953x_gpio.c b/drivers/gpio/pca953x_gpio.c
index 07a3356b3c87..5c2944067bc1 100644
--- a/drivers/gpio/pca953x_gpio.c
+++ b/drivers/gpio/pca953x_gpio.c
@@ -15,8 +15,7 @@ 
  *
  * TODO:
  * 1. Support PCA957X_TYPE
- * 2. Support 24 gpio pins
- * 3. Support Polarity Inversion
+ * 2. Support Polarity Inversion
  */
 
 #include <common.h>
@@ -118,6 +117,10 @@  static int pca953x_read_regs(struct udevice *dev, int reg, u8 *val)
 		ret = dm_i2c_read(dev, reg, val, 1);
 	} else if (info->gpio_count <= 16) {
 		ret = dm_i2c_read(dev, reg << 1, val, info->bank_count);
+	} else if (info->gpio_count <= 24) {
+		/* Auto increment */
+		ret = dm_i2c_read(dev, (reg << 2) | 0x80, val,
+				  info->bank_count);
 	} else if (info->gpio_count == 40) {
 		/* Auto increment */
 		ret = dm_i2c_read(dev, (reg << 3) | 0x80, val,
@@ -139,6 +142,10 @@  static int pca953x_write_regs(struct udevice *dev, int reg, u8 *val)
 		ret = dm_i2c_write(dev, reg, val, 1);
 	} else if (info->gpio_count <= 16) {
 		ret = dm_i2c_write(dev, reg << 1, val, info->bank_count);
+	} else if (info->gpio_count <= 24) {
+		/* Auto increment */
+		ret = dm_i2c_write(dev, (reg << 2) | 0x80, val,
+				   info->bank_count);
 	} else if (info->gpio_count == 40) {
 		/* Auto increment */
 		ret = dm_i2c_write(dev, (reg << 3) | 0x80, val, info->bank_count);