Initialize input regulator and gpios to proper values to have things
basically working as well as in the case when these things are
hardwired.
Signed-off-by: Andreas Kemnade <akemnade@kernel.org>
---
drivers/regulator/sy7636a-regulator.c | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/drivers/regulator/sy7636a-regulator.c b/drivers/regulator/sy7636a-regulator.c
index 27e3d939b7bb9..bd8739624c727 100644
--- a/drivers/regulator/sy7636a-regulator.c
+++ b/drivers/regulator/sy7636a-regulator.c
@@ -12,6 +12,7 @@
#include <linux/mfd/sy7636a.h>
#include <linux/module.h>
#include <linux/platform_device.h>
+#include <linux/regulator/consumer.h>
#include <linux/regulator/driver.h>
#include <linux/regulator/machine.h>
#include <linux/regmap.h>
@@ -19,6 +20,8 @@
struct sy7636a_data {
struct regmap *regmap;
struct gpio_desc *pgood_gpio;
+ struct gpio_desc *en_gpio;
+ struct gpio_desc *vcom_en_gpio;
};
static int sy7636a_get_vcom_voltage_op(struct regulator_dev *rdev)
@@ -98,6 +101,29 @@ static int sy7636a_regulator_probe(struct platform_device *pdev)
data->regmap = regmap;
data->pgood_gpio = gdp;
+ ret = devm_regulator_get_enable_optional(&pdev->dev, "vin");
+ if (ret)
+ return dev_err_probe(&pdev->dev, ret,
+ "failed to get vin regulator\n");
+
+ data->en_gpio = devm_gpiod_get_optional(&pdev->dev, "en",
+ GPIOD_OUT_HIGH);
+ if (IS_ERR(data->en_gpio))
+ return dev_err_probe(&pdev->dev,
+ PTR_ERR(data->en_gpio),
+ "failed to get en gpio\n");
+
+ /* Let VCOM just follow the default power on sequence */
+ data->vcom_en_gpio = devm_gpiod_get_optional(&pdev->dev,
+ "vcom-en", GPIOD_OUT_LOW);
+ if (IS_ERR(data->vcom_en_gpio))
+ return dev_err_probe(&pdev->dev,
+ PTR_ERR(data->en_gpio),
+ "failed to get en gpio\n");
+
+ if (data->en_gpio)
+ usleep_range(2500, 4000);
+
platform_set_drvdata(pdev, data);
ret = regmap_write(regmap, SY7636A_REG_POWER_ON_DELAY_TIME, 0x0);
--
2.39.5
Hi Andreas, kernel test robot noticed the following build warnings: url: https://github.com/intel-lab-lkp/linux/commits/Andreas-Kemnade/dt-bindings-mfd-sy7636a-Add-missing-gpio-pins-and-supply/20250906-171133 base: 1b237f190eb3d36f52dffe07a40b5eb210280e00 patch link: https://lore.kernel.org/r/20250906-sy7636-rsrc-v1-3-e2886a9763a7%40kernel.org patch subject: [PATCH 3/4] regulator: sy7636a: add gpios and input regulator config: x86_64-randconfig-161-20250907 (https://download.01.org/0day-ci/archive/20250907/202509071141.TSai6ltk-lkp@intel.com/config) compiler: gcc-13 (Debian 13.3.0-16) 13.3.0 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> | Reported-by: Dan Carpenter <dan.carpenter@linaro.org> | Closes: https://lore.kernel.org/r/202509071141.TSai6ltk-lkp@intel.com/ smatch warnings: drivers/regulator/sy7636a-regulator.c:121 sy7636a_regulator_probe() warn: passing zero to 'PTR_ERR' vim +/PTR_ERR +121 drivers/regulator/sy7636a-regulator.c 8c485bedfb7852 Alistair Francis 2021-06-15 77 static int sy7636a_regulator_probe(struct platform_device *pdev) 8c485bedfb7852 Alistair Francis 2021-06-15 78 { cb17820ef71ed7 Alistair Francis 2021-10-15 79 struct regmap *regmap = dev_get_regmap(pdev->dev.parent, NULL); 8c485bedfb7852 Alistair Francis 2021-06-15 80 struct regulator_config config = { }; 8c485bedfb7852 Alistair Francis 2021-06-15 81 struct regulator_dev *rdev; 8c485bedfb7852 Alistair Francis 2021-06-15 82 struct gpio_desc *gdp; d38d49b140043b Alistair Francis 2021-08-03 83 struct sy7636a_data *data; 8c485bedfb7852 Alistair Francis 2021-06-15 84 int ret; 8c485bedfb7852 Alistair Francis 2021-06-15 85 27fdd3bbb7a138 Alistair Francis 2021-08-06 86 if (!regmap) 8c485bedfb7852 Alistair Francis 2021-06-15 87 return -EPROBE_DEFER; 8c485bedfb7852 Alistair Francis 2021-06-15 88 07678e530d8eab Andreas Kemnade 2025-09-06 89 device_set_of_node_from_dev(&pdev->dev, pdev->dev.parent); 07678e530d8eab Andreas Kemnade 2025-09-06 90 07678e530d8eab Andreas Kemnade 2025-09-06 91 gdp = devm_gpiod_get(&pdev->dev, "epd-pwr-good", GPIOD_IN); 8c485bedfb7852 Alistair Francis 2021-06-15 92 if (IS_ERR(gdp)) { 07678e530d8eab Andreas Kemnade 2025-09-06 93 dev_err(&pdev->dev, "Power good GPIO fault %ld\n", PTR_ERR(gdp)); 8c485bedfb7852 Alistair Francis 2021-06-15 94 return PTR_ERR(gdp); 8c485bedfb7852 Alistair Francis 2021-06-15 95 } 8c485bedfb7852 Alistair Francis 2021-06-15 96 d38d49b140043b Alistair Francis 2021-08-03 97 data = devm_kzalloc(&pdev->dev, sizeof(struct sy7636a_data), GFP_KERNEL); d38d49b140043b Alistair Francis 2021-08-03 98 if (!data) d38d49b140043b Alistair Francis 2021-08-03 99 return -ENOMEM; d38d49b140043b Alistair Francis 2021-08-03 100 27fdd3bbb7a138 Alistair Francis 2021-08-06 101 data->regmap = regmap; d38d49b140043b Alistair Francis 2021-08-03 102 data->pgood_gpio = gdp; d38d49b140043b Alistair Francis 2021-08-03 103 327603c2e83590 Andreas Kemnade 2025-09-06 104 ret = devm_regulator_get_enable_optional(&pdev->dev, "vin"); 327603c2e83590 Andreas Kemnade 2025-09-06 105 if (ret) 327603c2e83590 Andreas Kemnade 2025-09-06 106 return dev_err_probe(&pdev->dev, ret, 327603c2e83590 Andreas Kemnade 2025-09-06 107 "failed to get vin regulator\n"); 327603c2e83590 Andreas Kemnade 2025-09-06 108 327603c2e83590 Andreas Kemnade 2025-09-06 109 data->en_gpio = devm_gpiod_get_optional(&pdev->dev, "en", 327603c2e83590 Andreas Kemnade 2025-09-06 110 GPIOD_OUT_HIGH); 327603c2e83590 Andreas Kemnade 2025-09-06 111 if (IS_ERR(data->en_gpio)) 327603c2e83590 Andreas Kemnade 2025-09-06 112 return dev_err_probe(&pdev->dev, 327603c2e83590 Andreas Kemnade 2025-09-06 113 PTR_ERR(data->en_gpio), 327603c2e83590 Andreas Kemnade 2025-09-06 114 "failed to get en gpio\n"); 327603c2e83590 Andreas Kemnade 2025-09-06 115 327603c2e83590 Andreas Kemnade 2025-09-06 116 /* Let VCOM just follow the default power on sequence */ 327603c2e83590 Andreas Kemnade 2025-09-06 117 data->vcom_en_gpio = devm_gpiod_get_optional(&pdev->dev, 327603c2e83590 Andreas Kemnade 2025-09-06 118 "vcom-en", GPIOD_OUT_LOW); 327603c2e83590 Andreas Kemnade 2025-09-06 119 if (IS_ERR(data->vcom_en_gpio)) 327603c2e83590 Andreas Kemnade 2025-09-06 120 return dev_err_probe(&pdev->dev, 327603c2e83590 Andreas Kemnade 2025-09-06 @121 PTR_ERR(data->en_gpio), ^^^^^^^^^^^^^ s/data->en_gpio/data->vcom_en_gpio/ 327603c2e83590 Andreas Kemnade 2025-09-06 122 "failed to get en gpio\n"); 327603c2e83590 Andreas Kemnade 2025-09-06 123 327603c2e83590 Andreas Kemnade 2025-09-06 124 if (data->en_gpio) 327603c2e83590 Andreas Kemnade 2025-09-06 125 usleep_range(2500, 4000); 327603c2e83590 Andreas Kemnade 2025-09-06 126 d38d49b140043b Alistair Francis 2021-08-03 127 platform_set_drvdata(pdev, data); 8c485bedfb7852 Alistair Francis 2021-06-15 128 27fdd3bbb7a138 Alistair Francis 2021-08-06 129 ret = regmap_write(regmap, SY7636A_REG_POWER_ON_DELAY_TIME, 0x0); 8c485bedfb7852 Alistair Francis 2021-06-15 130 if (ret) { 4cafe1aeb5fb4e Alistair Francis 2021-08-03 131 dev_err(pdev->dev.parent, "Failed to initialize regulator: %d\n", ret); 8c485bedfb7852 Alistair Francis 2021-06-15 132 return ret; 8c485bedfb7852 Alistair Francis 2021-06-15 133 } 8c485bedfb7852 Alistair Francis 2021-06-15 134 8c485bedfb7852 Alistair Francis 2021-06-15 135 config.dev = &pdev->dev; 27fdd3bbb7a138 Alistair Francis 2021-08-06 136 config.regmap = regmap; 8c485bedfb7852 Alistair Francis 2021-06-15 137 8c485bedfb7852 Alistair Francis 2021-06-15 138 rdev = devm_regulator_register(&pdev->dev, &desc, &config); 8c485bedfb7852 Alistair Francis 2021-06-15 139 if (IS_ERR(rdev)) { 4cafe1aeb5fb4e Alistair Francis 2021-08-03 140 dev_err(pdev->dev.parent, "Failed to register %s regulator\n", 8c485bedfb7852 Alistair Francis 2021-06-15 141 pdev->name); 8c485bedfb7852 Alistair Francis 2021-06-15 142 return PTR_ERR(rdev); 8c485bedfb7852 Alistair Francis 2021-06-15 143 } 8c485bedfb7852 Alistair Francis 2021-06-15 144 8c485bedfb7852 Alistair Francis 2021-06-15 145 return 0; 8c485bedfb7852 Alistair Francis 2021-06-15 146 } -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
On Sat, Sep 06, 2025 at 11:09:14AM +0200, Andreas Kemnade wrote: >Initialize input regulator and gpios to proper values to have things >basically working as well as in the case when these things are >hardwired. > >Signed-off-by: Andreas Kemnade <akemnade@kernel.org> >--- > drivers/regulator/sy7636a-regulator.c | 26 ++++++++++++++++++++++++++ > 1 file changed, 26 insertions(+) > >diff --git a/drivers/regulator/sy7636a-regulator.c b/drivers/regulator/sy7636a-regulator.c >index 27e3d939b7bb9..bd8739624c727 100644 >--- a/drivers/regulator/sy7636a-regulator.c >+++ b/drivers/regulator/sy7636a-regulator.c >@@ -12,6 +12,7 @@ > #include <linux/mfd/sy7636a.h> > #include <linux/module.h> > #include <linux/platform_device.h> >+#include <linux/regulator/consumer.h> > #include <linux/regulator/driver.h> > #include <linux/regulator/machine.h> > #include <linux/regmap.h> >@@ -19,6 +20,8 @@ > struct sy7636a_data { > struct regmap *regmap; > struct gpio_desc *pgood_gpio; >+ struct gpio_desc *en_gpio; >+ struct gpio_desc *vcom_en_gpio; > }; > > static int sy7636a_get_vcom_voltage_op(struct regulator_dev *rdev) >@@ -98,6 +101,29 @@ static int sy7636a_regulator_probe(struct platform_device *pdev) > data->regmap = regmap; > data->pgood_gpio = gdp; > >+ ret = devm_regulator_get_enable_optional(&pdev->dev, "vin"); >+ if (ret) >+ return dev_err_probe(&pdev->dev, ret, >+ "failed to get vin regulator\n"); >+ >+ data->en_gpio = devm_gpiod_get_optional(&pdev->dev, "en", >+ GPIOD_OUT_HIGH); >+ if (IS_ERR(data->en_gpio)) >+ return dev_err_probe(&pdev->dev, >+ PTR_ERR(data->en_gpio), >+ "failed to get en gpio\n"); >+ >+ /* Let VCOM just follow the default power on sequence */ >+ data->vcom_en_gpio = devm_gpiod_get_optional(&pdev->dev, >+ "vcom-en", GPIOD_OUT_LOW); >+ if (IS_ERR(data->vcom_en_gpio)) >+ return dev_err_probe(&pdev->dev, >+ PTR_ERR(data->en_gpio), >+ "failed to get en gpio\n"); Nit: s/en/vcom en/ >+ >+ if (data->en_gpio) >+ usleep_range(2500, 4000); It would be better to add a comment on this delay. Regards Peng
© 2016 - 2025 Red Hat, Inc.