diff mbox series

[v3,3/3] gpio tps65215: Add support for varying gpio/offset values

Message ID 20250113225530.124213-4-s-ramamoorthy@ti.com
State New
Headers show
Series Add TI TPS65215 PMIC GPIO Support | expand

Commit Message

Shree Ramamoorthy Jan. 13, 2025, 10:55 p.m. UTC
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(-)

Comments

kernel test robot Jan. 17, 2025, 7:34 p.m. UTC | #1
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 mbox series

Patch

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);