* [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, ®map); 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
* 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, ®map); 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, ®map); 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
* [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
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 a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).