diff options
author | Yong Li <sdliyong@gmail.com> | 2016-03-30 02:49:14 -0400 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2016-04-08 05:49:47 -0400 |
commit | 9b8e3ec34318663affced3c14d960e78d760dd9a (patch) | |
tree | 9e1d0ad6cfdf81d6cba2432dc1e475e0c34b7a84 | |
parent | 159f3cd92f17c61a4e2a47456de5865b114ef88e (diff) |
gpio: pca953x: Use correct u16 value for register word write
The current implementation only uses the first byte in val,
the second byte is always 0. Change it to use cpu_to_le16
to write the two bytes into the register
Cc: stable@vger.kernel.org
Signed-off-by: Yong Li <sdliyong@gmail.com>
Reviewed-by: Phil Reid <preid@electromag.com.au>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
-rw-r--r-- | drivers/gpio/gpio-pca953x.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c index d0d3065a7557..e66084c295fb 100644 --- a/drivers/gpio/gpio-pca953x.c +++ b/drivers/gpio/gpio-pca953x.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/i2c.h> | 18 | #include <linux/i2c.h> |
19 | #include <linux/platform_data/pca953x.h> | 19 | #include <linux/platform_data/pca953x.h> |
20 | #include <linux/slab.h> | 20 | #include <linux/slab.h> |
21 | #include <asm/unaligned.h> | ||
21 | #include <linux/of_platform.h> | 22 | #include <linux/of_platform.h> |
22 | #include <linux/acpi.h> | 23 | #include <linux/acpi.h> |
23 | 24 | ||
@@ -159,7 +160,7 @@ static int pca953x_write_regs(struct pca953x_chip *chip, int reg, u8 *val) | |||
159 | switch (chip->chip_type) { | 160 | switch (chip->chip_type) { |
160 | case PCA953X_TYPE: | 161 | case PCA953X_TYPE: |
161 | ret = i2c_smbus_write_word_data(chip->client, | 162 | ret = i2c_smbus_write_word_data(chip->client, |
162 | reg << 1, (u16) *val); | 163 | reg << 1, cpu_to_le16(get_unaligned((u16 *)val))); |
163 | break; | 164 | break; |
164 | case PCA957X_TYPE: | 165 | case PCA957X_TYPE: |
165 | ret = i2c_smbus_write_byte_data(chip->client, reg << 1, | 166 | ret = i2c_smbus_write_byte_data(chip->client, reg << 1, |