Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'gpio-fixes-for-v5.19-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux

Pull gpio fixes from Bartosz Golaszewski:

- fix several regmap usage issues in gpio-pca953x

- fix out-of-tree build for GPIO selftests

- fix integer overflow in gpio-xilinx

* tag 'gpio-fixes-for-v5.19-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux:
gpio: gpio-xilinx: Fix integer overflow
selftests: gpio: fix include path to kernel headers for out of tree builds
gpio: pca953x: use the correct register address when regcache sync during init
gpio: pca953x: use the correct range when do regmap sync
gpio: pca953x: only use single read/write for No AI mode

+16 -10
+14 -8
drivers/gpio/gpio-pca953x.c
··· 351 351 .reg_bits = 8, 352 352 .val_bits = 8, 353 353 354 + .use_single_read = true, 355 + .use_single_write = true, 356 + 354 357 .readable_reg = pca953x_readable_register, 355 358 .writeable_reg = pca953x_writeable_register, 356 359 .volatile_reg = pca953x_volatile_register, ··· 909 906 static int device_pca95xx_init(struct pca953x_chip *chip, u32 invert) 910 907 { 911 908 DECLARE_BITMAP(val, MAX_LINE); 909 + u8 regaddr; 912 910 int ret; 913 911 914 - ret = regcache_sync_region(chip->regmap, chip->regs->output, 915 - chip->regs->output + NBANK(chip)); 912 + regaddr = pca953x_recalc_addr(chip, chip->regs->output, 0); 913 + ret = regcache_sync_region(chip->regmap, regaddr, 914 + regaddr + NBANK(chip) - 1); 916 915 if (ret) 917 916 goto out; 918 917 919 - ret = regcache_sync_region(chip->regmap, chip->regs->direction, 920 - chip->regs->direction + NBANK(chip)); 918 + regaddr = pca953x_recalc_addr(chip, chip->regs->direction, 0); 919 + ret = regcache_sync_region(chip->regmap, regaddr, 920 + regaddr + NBANK(chip) - 1); 921 921 if (ret) 922 922 goto out; 923 923 ··· 1133 1127 * sync these registers first and only then sync the rest. 1134 1128 */ 1135 1129 regaddr = pca953x_recalc_addr(chip, chip->regs->direction, 0); 1136 - ret = regcache_sync_region(chip->regmap, regaddr, regaddr + NBANK(chip)); 1130 + ret = regcache_sync_region(chip->regmap, regaddr, regaddr + NBANK(chip) - 1); 1137 1131 if (ret) { 1138 1132 dev_err(dev, "Failed to sync GPIO dir registers: %d\n", ret); 1139 1133 return ret; 1140 1134 } 1141 1135 1142 1136 regaddr = pca953x_recalc_addr(chip, chip->regs->output, 0); 1143 - ret = regcache_sync_region(chip->regmap, regaddr, regaddr + NBANK(chip)); 1137 + ret = regcache_sync_region(chip->regmap, regaddr, regaddr + NBANK(chip) - 1); 1144 1138 if (ret) { 1145 1139 dev_err(dev, "Failed to sync GPIO out registers: %d\n", ret); 1146 1140 return ret; ··· 1150 1144 if (chip->driver_data & PCA_PCAL) { 1151 1145 regaddr = pca953x_recalc_addr(chip, PCAL953X_IN_LATCH, 0); 1152 1146 ret = regcache_sync_region(chip->regmap, regaddr, 1153 - regaddr + NBANK(chip)); 1147 + regaddr + NBANK(chip) - 1); 1154 1148 if (ret) { 1155 1149 dev_err(dev, "Failed to sync INT latch registers: %d\n", 1156 1150 ret); ··· 1159 1153 1160 1154 regaddr = pca953x_recalc_addr(chip, PCAL953X_INT_MASK, 0); 1161 1155 ret = regcache_sync_region(chip->regmap, regaddr, 1162 - regaddr + NBANK(chip)); 1156 + regaddr + NBANK(chip) - 1); 1163 1157 if (ret) { 1164 1158 dev_err(dev, "Failed to sync INT mask registers: %d\n", 1165 1159 ret);
+1 -1
drivers/gpio/gpio-xilinx.c
··· 99 99 const unsigned long offset = (bit % BITS_PER_LONG) & BIT(5); 100 100 101 101 map[index] &= ~(0xFFFFFFFFul << offset); 102 - map[index] |= v << offset; 102 + map[index] |= (unsigned long)v << offset; 103 103 } 104 104 105 105 static inline int xgpio_regoffset(struct xgpio_instance *chip, int ch)
+1 -1
tools/testing/selftests/gpio/Makefile
··· 3 3 TEST_PROGS := gpio-mockup.sh gpio-sim.sh 4 4 TEST_FILES := gpio-mockup-sysfs.sh 5 5 TEST_GEN_PROGS_EXTENDED := gpio-mockup-cdev gpio-chip-info gpio-line-name 6 - CFLAGS += -O2 -g -Wall -I../../../../usr/include/ 6 + CFLAGS += -O2 -g -Wall -I../../../../usr/include/ $(KHDR_INCLUDES) 7 7 8 8 include ../lib.mk