]> git.sur5r.net Git - u-boot/commitdiff
dm: gpio: pca953x: Support PCA953X with 40 GPIOs
authormario.six@gdsys.cc <mario.six@gdsys.cc>
Mon, 25 Apr 2016 13:25:37 +0000 (15:25 +0200)
committerTom Rini <trini@konsulko.com>
Fri, 27 May 2016 13:56:20 +0000 (09:56 -0400)
A DM driver for PCA953x was recently introduced by Peng Fan, which lacked
support for the 40 GPIO versions.

This patch adds support for these chips.

Signed-off-by: Mario Six <mario.six@gdsys.cc>
Reviewed-by: Peng Fan <van.freenix@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/gpio/pca953x_gpio.c

index 987d10e967e4f8475d690292bb66205a61922855..065b181bd237d0c3c259d961ad44fa2a5444bd96 100644 (file)
@@ -16,8 +16,8 @@
  *
  * TODO:
  * 1. Support PCA957X_TYPE
- * 2. Support max 40 gpio pins
- * 3. Support Plolarity Inversion
+ * 2. Support 24 gpio pins
+ * 3. Support Polarity Inversion
  */
 
 #include <common.h>
@@ -47,7 +47,7 @@ enum {
        PCA953X_DIRECTION_OUT,
 };
 
-#define MAX_BANK 3
+#define MAX_BANK 5
 #define BANK_SZ 8
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -121,6 +121,9 @@ 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 == 40) {
+               /* Auto increment */
+               ret = dm_i2c_read(dev, (reg << 3) | 0x80, val, info->bank_count);
        } else {
                dev_err(dev, "Unsupported now\n");
                return -EINVAL;