gpio: pca953x handles more chips, i2c fault codes
PATCH 1/1 gpio: pca953x handles more chips, i2c fault codes
From: David Brownell <[email protected]>
Minor updates to the pca953x GPIO expander driver: handle several more compatible parts, and stop assuming that the I2C layer's return codes are garbage (that's now been fixed).
Signed-off-by David Brownell <[email protected]>
Cc Eric Miao <[email protected]>
--- drivers/gpio/Kconfig | 7 ++++--- drivers/gpio/pca953x.c | 12 +++++++----- 2 files changed, 11 insertions(+), 8 deletions(-)
drivers/gpio/Kconfig +4 -3
@@ -95,7 +95,7 @@ config GPIO_MAX732X number for these GPIOs. config GPIO_PCA953X - tristate "PCA953x, PCA955x, and MAX7310 I/O ports" + tristate "PCA953x, PCA955x, TCA64xx, and MAX7310 I/O ports" depends on I2C help Say yes here to provide access to several register-oriented
@@ -104,9 +104,10 @@ config GPIO_PCA953X 4 bits: pca9536, pca9537 - 8 bits: max7310, pca9534, pca9538, pca9554, pca9557 + 8 bits: max7310, pca9534, pca9538, pca9554, pca9557, + tca6408 - 16 bits: pca9535, pca9539, pca9555 + 16 bits: pca9535, pca9539, pca9555, tca6416 This driver can also be built as a module. If so, the module will be called pca953x.
drivers/gpio/pca953x.c +7 -5
@@ -33,7 +33,12 @@ static const struct i2c_device_id pca953 { "pca9554", 8, }, { "pca9555", 16, }, { "pca9557", 8, }, + { "max7310", 8, }, + { "pca6107", 8, }, + { "tca6408", 8, }, + { "tca6416", 16, }, + /* NYET: { "tca6424", 24, }, */ { } };MODULE_DEVICE_TABLE (i2c, pca953x_id);
@@ -47,9 +52,6 @@ struct pca953x_chip {struct gpio_chip gpio_chip; }; -/* NOTE: we can't currently rely on fault codes to come from SMBus -* calls, so we map all errors to EIO here and return zero otherwise. -*/ static int pca953x_write_reg (struct pca953x_chip *chip,int reg,uint16_t val) {int ret;
@@ -61,7 +63,7 @@ static int pca953x_write_reg(struct pca9if (ret <0 ) {dev_err (&chip->client->dev,"failed writing register\n" ); -return -EIO ; +return ret; }return 0 ;
@@ -78,7 +80,7 @@ static int pca953x_read_reg(struct pca95if (ret <0 ) {dev_err (&chip->client->dev,"failed reading register\n" ); -return -EIO ; +return ret; } *val = (uint16_t )ret;