All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] gpio: fxl6408: add optional reset and suspend/resume
@ 2025-11-02 10:05 Jisheng Zhang
  2025-11-02 10:05 ` [PATCH 1/2] gpio: fxl6408: Add optional reset gpio control Jisheng Zhang
  2025-11-02 10:05 ` [PATCH 2/2] gpio: fxl6408: Add suspend/resume support Jisheng Zhang
  0 siblings, 2 replies; 5+ messages in thread
From: Jisheng Zhang @ 2025-11-02 10:05 UTC (permalink / raw)
  To: Linus Walleij, Bartosz Golaszewski; +Cc: linux-gpio, linux-kernel

Two improvements to the fxl6408 gpio driver:
Add opitonal reset gpio control.
Add suspend/resume support.

Jisheng Zhang (2):
  gpio: fxl6408: Add optional reset gpio control
  gpio: fxl6408: Add suspend/resume support

 drivers/gpio/gpio-fxl6408.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

-- 
2.51.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/2] gpio: fxl6408: Add optional reset gpio control
  2025-11-02 10:05 [PATCH 0/2] gpio: fxl6408: add optional reset and suspend/resume Jisheng Zhang
@ 2025-11-02 10:05 ` Jisheng Zhang
  2025-11-02 22:25   ` kernel test robot
  2025-11-02 22:35   ` kernel test robot
  2025-11-02 10:05 ` [PATCH 2/2] gpio: fxl6408: Add suspend/resume support Jisheng Zhang
  1 sibling, 2 replies; 5+ messages in thread
From: Jisheng Zhang @ 2025-11-02 10:05 UTC (permalink / raw)
  To: Linus Walleij, Bartosz Golaszewski; +Cc: linux-gpio, linux-kernel

Add optional active low reset-gpios pin control. If present, de-assert
the specified reset gpio pin to bring the chip out of reset.

Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
---
 drivers/gpio/gpio-fxl6408.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/gpio/gpio-fxl6408.c b/drivers/gpio/gpio-fxl6408.c
index 86ebc66b1104..ae520305f7a9 100644
--- a/drivers/gpio/gpio-fxl6408.c
+++ b/drivers/gpio/gpio-fxl6408.c
@@ -104,6 +104,7 @@ static int fxl6408_identify(struct device *dev, struct regmap *regmap)
 static int fxl6408_probe(struct i2c_client *client)
 {
 	struct device *dev = &client->dev;
+	struct gpio_desc *reset_gpio;
 	int ret;
 	struct gpio_regmap_config gpio_config = {
 		.parent = dev,
@@ -114,6 +115,10 @@ static int fxl6408_probe(struct i2c_client *client)
 		.ngpio_per_reg = FXL6408_NGPIO,
 	};
 
+	reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
+	if (IS_ERR(reset_gpio))
+		return dev_err_probe(dev, PTR_ERR(reset_gpio), "Failed to get reset gpio\n");
+
 	gpio_config.regmap = devm_regmap_init_i2c(client, &regmap);
 	if (IS_ERR(gpio_config.regmap))
 		return dev_err_probe(dev, PTR_ERR(gpio_config.regmap),
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/2] gpio: fxl6408: Add suspend/resume support
  2025-11-02 10:05 [PATCH 0/2] gpio: fxl6408: add optional reset and suspend/resume Jisheng Zhang
  2025-11-02 10:05 ` [PATCH 1/2] gpio: fxl6408: Add optional reset gpio control Jisheng Zhang
@ 2025-11-02 10:05 ` Jisheng Zhang
  1 sibling, 0 replies; 5+ messages in thread
From: Jisheng Zhang @ 2025-11-02 10:05 UTC (permalink / raw)
  To: Linus Walleij, Bartosz Golaszewski; +Cc: linux-gpio, linux-kernel

Currently, during suspend, do nothing; during resume, just sync the
regmap cache to hw regs.

Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
---
 drivers/gpio/gpio-fxl6408.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/drivers/gpio/gpio-fxl6408.c b/drivers/gpio/gpio-fxl6408.c
index ae520305f7a9..805a623ef89c 100644
--- a/drivers/gpio/gpio-fxl6408.c
+++ b/drivers/gpio/gpio-fxl6408.c
@@ -43,6 +43,10 @@
 
 #define FXL6408_NGPIO			8
 
+struct fxl6408_chip {
+	struct regmap *regmap;
+};
+
 static const struct regmap_range rd_range[] = {
 	{ FXL6408_REG_DEVICE_ID, FXL6408_REG_DEVICE_ID },
 	{ FXL6408_REG_IO_DIR, FXL6408_REG_OUTPUT },
@@ -105,6 +109,7 @@ static int fxl6408_probe(struct i2c_client *client)
 {
 	struct device *dev = &client->dev;
 	struct gpio_desc *reset_gpio;
+	struct fxl6408_chip *chip;
 	int ret;
 	struct gpio_regmap_config gpio_config = {
 		.parent = dev,
@@ -115,6 +120,10 @@ static int fxl6408_probe(struct i2c_client *client)
 		.ngpio_per_reg = FXL6408_NGPIO,
 	};
 
+	chip = devm_kzalloc(dev, sizeof(*chip), GFP_KERNEL);
+	if (!chip)
+		return -ENOMEM;
+
 	reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
 	if (IS_ERR(reset_gpio))
 		return dev_err_probe(dev, PTR_ERR(reset_gpio), "Failed to get reset gpio\n");
@@ -128,6 +137,9 @@ static int fxl6408_probe(struct i2c_client *client)
 	if (ret)
 		return ret;
 
+	chip->regmap = gpio_config.regmap;
+	i2c_set_clientdata(client, chip);
+
 	/* Disable High-Z of outputs, so that our OUTPUT updates actually take effect. */
 	ret = regmap_write(gpio_config.regmap, FXL6408_REG_OUTPUT_HIGH_Z, 0);
 	if (ret)
@@ -136,6 +148,16 @@ static int fxl6408_probe(struct i2c_client *client)
 	return PTR_ERR_OR_ZERO(devm_gpio_regmap_register(dev, &gpio_config));
 }
 
+static int fxl6408_resume(struct device *dev)
+{
+	struct fxl6408_chip *chip = dev_get_drvdata(dev);
+
+	regcache_mark_dirty(chip->regmap);
+	return regcache_sync(chip->regmap);
+}
+
+static DEFINE_SIMPLE_DEV_PM_OPS(fxl6408_pm_ops, NULL, fxl6408_resume);
+
 static const __maybe_unused struct of_device_id fxl6408_dt_ids[] = {
 	{ .compatible = "fcs,fxl6408" },
 	{ }
@@ -151,6 +173,7 @@ MODULE_DEVICE_TABLE(i2c, fxl6408_id);
 static struct i2c_driver fxl6408_driver = {
 	.driver = {
 		.name	= "fxl6408",
+		.pm	= pm_sleep_ptr(&fxl6408_pm_ops),
 		.of_match_table = fxl6408_dt_ids,
 	},
 	.probe		= fxl6408_probe,
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] gpio: fxl6408: Add optional reset gpio control
  2025-11-02 10:05 ` [PATCH 1/2] gpio: fxl6408: Add optional reset gpio control Jisheng Zhang
@ 2025-11-02 22:25   ` kernel test robot
  2025-11-02 22:35   ` kernel test robot
  1 sibling, 0 replies; 5+ messages in thread
From: kernel test robot @ 2025-11-02 22:25 UTC (permalink / raw)
  To: Jisheng Zhang, Linus Walleij, Bartosz Golaszewski
  Cc: oe-kbuild-all, linux-gpio, linux-kernel

Hi Jisheng,

kernel test robot noticed the following build errors:

[auto build test ERROR on brgl/gpio/for-next]
[also build test ERROR on linus/master v6.18-rc4 next-20251031]
[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/Jisheng-Zhang/gpio-fxl6408-Add-optional-reset-gpio-control/20251102-182544
base:   https://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux.git gpio/for-next
patch link:    https://lore.kernel.org/r/20251102100515.9506-2-jszhang%40kernel.org
patch subject: [PATCH 1/2] gpio: fxl6408: Add optional reset gpio control
config: nios2-randconfig-r073-20251103 (https://download.01.org/0day-ci/archive/20251103/202511030610.aGFTnmCc-lkp@intel.com/config)
compiler: nios2-linux-gcc (GCC) 8.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251103/202511030610.aGFTnmCc-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/202511030610.aGFTnmCc-lkp@intel.com/

All errors (new ones prefixed by >>):

   drivers/gpio/gpio-fxl6408.c: In function 'fxl6408_probe':
>> drivers/gpio/gpio-fxl6408.c:118:15: error: implicit declaration of function 'devm_gpiod_get_optional'; did you mean 'devm_regulator_get_optional'? [-Werror=implicit-function-declaration]
     reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
                  ^~~~~~~~~~~~~~~~~~~~~~~
                  devm_regulator_get_optional
>> drivers/gpio/gpio-fxl6408.c:118:53: error: 'GPIOD_OUT_LOW' undeclared (first use in this function)
     reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
                                                        ^~~~~~~~~~~~~
   drivers/gpio/gpio-fxl6408.c:118:53: note: each undeclared identifier is reported only once for each function it appears in
   cc1: some warnings being treated as errors


vim +118 drivers/gpio/gpio-fxl6408.c

   103	
   104	static int fxl6408_probe(struct i2c_client *client)
   105	{
   106		struct device *dev = &client->dev;
   107		struct gpio_desc *reset_gpio;
   108		int ret;
   109		struct gpio_regmap_config gpio_config = {
   110			.parent = dev,
   111			.ngpio = FXL6408_NGPIO,
   112			.reg_dat_base = GPIO_REGMAP_ADDR(FXL6408_REG_INPUT_STATUS),
   113			.reg_set_base = GPIO_REGMAP_ADDR(FXL6408_REG_OUTPUT),
   114			.reg_dir_out_base = GPIO_REGMAP_ADDR(FXL6408_REG_IO_DIR),
   115			.ngpio_per_reg = FXL6408_NGPIO,
   116		};
   117	
 > 118		reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
   119		if (IS_ERR(reset_gpio))
   120			return dev_err_probe(dev, PTR_ERR(reset_gpio), "Failed to get reset gpio\n");
   121	
   122		gpio_config.regmap = devm_regmap_init_i2c(client, &regmap);
   123		if (IS_ERR(gpio_config.regmap))
   124			return dev_err_probe(dev, PTR_ERR(gpio_config.regmap),
   125					     "failed to allocate register map\n");
   126	
   127		ret = fxl6408_identify(dev, gpio_config.regmap);
   128		if (ret)
   129			return ret;
   130	
   131		/* Disable High-Z of outputs, so that our OUTPUT updates actually take effect. */
   132		ret = regmap_write(gpio_config.regmap, FXL6408_REG_OUTPUT_HIGH_Z, 0);
   133		if (ret)
   134			return dev_err_probe(dev, ret, "failed to write 'output high Z' register\n");
   135	
   136		return PTR_ERR_OR_ZERO(devm_gpio_regmap_register(dev, &gpio_config));
   137	}
   138	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] gpio: fxl6408: Add optional reset gpio control
  2025-11-02 10:05 ` [PATCH 1/2] gpio: fxl6408: Add optional reset gpio control Jisheng Zhang
  2025-11-02 22:25   ` kernel test robot
@ 2025-11-02 22:35   ` kernel test robot
  1 sibling, 0 replies; 5+ messages in thread
From: kernel test robot @ 2025-11-02 22:35 UTC (permalink / raw)
  To: Jisheng Zhang, Linus Walleij, Bartosz Golaszewski
  Cc: llvm, oe-kbuild-all, linux-gpio, linux-kernel

Hi Jisheng,

kernel test robot noticed the following build errors:

[auto build test ERROR on brgl/gpio/for-next]
[also build test ERROR on linus/master v6.18-rc4 next-20251031]
[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/Jisheng-Zhang/gpio-fxl6408-Add-optional-reset-gpio-control/20251102-182544
base:   https://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux.git gpio/for-next
patch link:    https://lore.kernel.org/r/20251102100515.9506-2-jszhang%40kernel.org
patch subject: [PATCH 1/2] gpio: fxl6408: Add optional reset gpio control
config: arm-randconfig-001-20251103 (https://download.01.org/0day-ci/archive/20251103/202511030655.OCHXbHnE-lkp@intel.com/config)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project d2625a438020ad35330cda29c3def102c1687b1b)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251103/202511030655.OCHXbHnE-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/202511030655.OCHXbHnE-lkp@intel.com/

All errors (new ones prefixed by >>):

>> drivers/gpio/gpio-fxl6408.c:118:15: error: call to undeclared function 'devm_gpiod_get_optional'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
     118 |         reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
         |                      ^
   drivers/gpio/gpio-fxl6408.c:118:15: note: did you mean 'devm_regulator_get_optional'?
   include/linux/regulator/consumer.h:163:32: note: 'devm_regulator_get_optional' declared here
     163 | struct regulator *__must_check devm_regulator_get_optional(struct device *dev,
         |                                ^
>> drivers/gpio/gpio-fxl6408.c:118:53: error: use of undeclared identifier 'GPIOD_OUT_LOW'
     118 |         reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
         |                                                            ^~~~~~~~~~~~~
   2 errors generated.


vim +/devm_gpiod_get_optional +118 drivers/gpio/gpio-fxl6408.c

   103	
   104	static int fxl6408_probe(struct i2c_client *client)
   105	{
   106		struct device *dev = &client->dev;
   107		struct gpio_desc *reset_gpio;
   108		int ret;
   109		struct gpio_regmap_config gpio_config = {
   110			.parent = dev,
   111			.ngpio = FXL6408_NGPIO,
   112			.reg_dat_base = GPIO_REGMAP_ADDR(FXL6408_REG_INPUT_STATUS),
   113			.reg_set_base = GPIO_REGMAP_ADDR(FXL6408_REG_OUTPUT),
   114			.reg_dir_out_base = GPIO_REGMAP_ADDR(FXL6408_REG_IO_DIR),
   115			.ngpio_per_reg = FXL6408_NGPIO,
   116		};
   117	
 > 118		reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
   119		if (IS_ERR(reset_gpio))
   120			return dev_err_probe(dev, PTR_ERR(reset_gpio), "Failed to get reset gpio\n");
   121	
   122		gpio_config.regmap = devm_regmap_init_i2c(client, &regmap);
   123		if (IS_ERR(gpio_config.regmap))
   124			return dev_err_probe(dev, PTR_ERR(gpio_config.regmap),
   125					     "failed to allocate register map\n");
   126	
   127		ret = fxl6408_identify(dev, gpio_config.regmap);
   128		if (ret)
   129			return ret;
   130	
   131		/* Disable High-Z of outputs, so that our OUTPUT updates actually take effect. */
   132		ret = regmap_write(gpio_config.regmap, FXL6408_REG_OUTPUT_HIGH_Z, 0);
   133		if (ret)
   134			return dev_err_probe(dev, ret, "failed to write 'output high Z' register\n");
   135	
   136		return PTR_ERR_OR_ZERO(devm_gpio_regmap_register(dev, &gpio_config));
   137	}
   138	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2025-11-02 22:36 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-02 10:05 [PATCH 0/2] gpio: fxl6408: add optional reset and suspend/resume Jisheng Zhang
2025-11-02 10:05 ` [PATCH 1/2] gpio: fxl6408: Add optional reset gpio control Jisheng Zhang
2025-11-02 22:25   ` kernel test robot
2025-11-02 22:35   ` kernel test robot
2025-11-02 10:05 ` [PATCH 2/2] gpio: fxl6408: Add suspend/resume support Jisheng Zhang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.