* [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 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.