Message ID | 20250113225530.124213-4-s-ramamoorthy@ti.com |
---|---|
State | New |
Headers | show |
Series | Add TI TPS65215 PMIC GPIO Support | expand |
Hi Shree, kernel test robot noticed the following build errors: [auto build test ERROR on next-20250113] [cannot apply to tmlind-omap/for-next v6.13-rc7 v6.13-rc6 v6.13-rc5 linus/master v6.13-rc7] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Shree-Ramamoorthy/gpio-tps65215-Add-TPS65215-to-platform_device_id-table/20250114-065813 base: next-20250113 patch link: https://lore.kernel.org/r/20250113225530.124213-4-s-ramamoorthy%40ti.com patch subject: [PATCH v3 3/3] gpio tps65215: Add support for varying gpio/offset values config: i386-randconfig-004-20250117 (https://download.01.org/0day-ci/archive/20250118/202501180331.d5V1SdDH-lkp@intel.com/config) compiler: clang version 19.1.3 (https://github.com/llvm/llvm-project ab51eccf88f5321e7c60591c5546b254b6afab99) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250118/202501180331.d5V1SdDH-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202501180331.d5V1SdDH-lkp@intel.com/ All errors (new ones prefixed by >>): drivers/gpio/gpio-tps65219.c:159:3: error: use of undeclared identifier 'TPS65215' 159 | [TPS65215] = { | ^ >> drivers/gpio/gpio-tps65219.c:175:15: error: variable has incomplete type 'enum pmic_id' 175 | enum pmic_id chip = platform_get_device_id(pdev)->driver_data; | ^ drivers/gpio/gpio-tps65219.c:175:7: note: forward declaration of 'enum pmic_id' 175 | enum pmic_id chip = platform_get_device_id(pdev)->driver_data; | ^ drivers/gpio/gpio-tps65219.c:193:21: error: use of undeclared identifier 'TPS65215' 193 | { "tps65215-gpio", TPS65215 }, | ^ drivers/gpio/gpio-tps65219.c:197:1: error: definition of variable with array type needs an explicit size or an initializer 197 | MODULE_DEVICE_TABLE(platform, tps6521x_gpio_id_table); | ^ include/linux/module.h:250:21: note: expanded from macro 'MODULE_DEVICE_TABLE' 250 | extern typeof(name) __mod_device_table__##type##__##name \ | ^ <scratch space>:249:1: note: expanded from here 249 | __mod_device_table__platform__tps6521x_gpio_id_table | ^ 4 errors generated. vim +175 drivers/gpio/gpio-tps65219.c 168 169 static int tps65219_gpio_probe(struct platform_device *pdev) 170 { 171 struct tps65219_gpio *gpio; 172 const struct tps65219_chip_data *pmic; 173 174 struct tps65219 *tps = dev_get_drvdata(pdev->dev.parent); > 175 enum pmic_id chip = platform_get_device_id(pdev)->driver_data; 176 pmic = &chip_info_table[chip]; 177 178 gpio = devm_kzalloc(&pdev->dev, sizeof(*gpio), GFP_KERNEL); 179 if (!gpio) 180 return -ENOMEM; 181 182 gpio->tps = tps; 183 gpio->gpio_chip = tps65219_template_chip; 184 gpio->gpio_chip.label = dev_name(&pdev->dev); 185 gpio->gpio_chip.ngpio = pmic->ngpio; 186 gpio->gpio_chip.offset = pmic->offset; 187 gpio->gpio_chip.parent = tps->dev; 188 189 return devm_gpiochip_add_data(&pdev->dev, &gpio->gpio_chip, gpio); 190 } 191
diff --git a/drivers/gpio/gpio-tps65219.c b/drivers/gpio/gpio-tps65219.c index 70a4410c473a..f2d8fd65d422 100644 --- a/drivers/gpio/gpio-tps65219.c +++ b/drivers/gpio/gpio-tps65219.c @@ -13,7 +13,6 @@ #include <linux/regmap.h> #define TPS65219_GPIO0_DIR_MASK BIT(3) -#define TPS65219_GPIO0_OFFSET 2 #define TPS6521X_GPIO0_IDX 0 struct tps65219_gpio { @@ -21,6 +20,11 @@ struct tps65219_gpio { struct tps65219 *tps; }; +struct tps65219_chip_data { + int ngpio; + int offset; +}; + static int tps65219_gpio_get_direction(struct gpio_chip *gc, unsigned int offset) { struct tps65219_gpio *gpio = gpiochip_get_data(gc); @@ -71,7 +75,7 @@ static void tps65219_gpio_set(struct gpio_chip *gc, unsigned int offset, int val struct device *dev = gpio->tps->dev; int v, mask, bit; - bit = (offset == TPS6521X_GPIO0_IDX) ? TPS65219_GPIO0_OFFSET : offset - 1; + bit = (offset == TPS6521X_GPIO0_IDX) ? (gpio->gpio_chip.offset - 1) : offset - 1; mask = BIT(bit); v = value ? mask : 0; @@ -148,14 +152,28 @@ static const struct gpio_chip tps65219_template_chip = { .get = tps65219_gpio_get, .set = tps65219_gpio_set, .base = -1, - .ngpio = 3, .can_sleep = true, }; +static const struct tps65219_chip_data chip_info_table[] = { + [TPS65215] = { + .ngpio = 2, + .offset = 1, + }, + [TPS65219] = { + .ngpio = 3, + .offset = 2, + }, +}; + static int tps65219_gpio_probe(struct platform_device *pdev) { - struct tps65219 *tps = dev_get_drvdata(pdev->dev.parent); struct tps65219_gpio *gpio; + const struct tps65219_chip_data *pmic; + + struct tps65219 *tps = dev_get_drvdata(pdev->dev.parent); + enum pmic_id chip = platform_get_device_id(pdev)->driver_data; + pmic = &chip_info_table[chip]; gpio = devm_kzalloc(&pdev->dev, sizeof(*gpio), GFP_KERNEL); if (!gpio) @@ -164,6 +182,8 @@ static int tps65219_gpio_probe(struct platform_device *pdev) gpio->tps = tps; gpio->gpio_chip = tps65219_template_chip; gpio->gpio_chip.label = dev_name(&pdev->dev); + gpio->gpio_chip.ngpio = pmic->ngpio; + gpio->gpio_chip.offset = pmic->offset; gpio->gpio_chip.parent = tps->dev; return devm_gpiochip_add_data(&pdev->dev, &gpio->gpio_chip, gpio);
Add device-specific structs to select the different PMIC .npgio and .offset values. With the chip_data struct values selected based on the match data, having a separate GPIO0_OFFSET macro is no longer needed. Signed-off-by: Shree Ramamoorthy <s-ramamoorthy@ti.com> --- drivers/gpio/gpio-tps65219.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-)