2023-09-19 18:55:23

by Naresh Solanki

[permalink] [raw]
Subject: [PATCH] regulator: userspace-consumer: Retrieve supplies from DT

From: Naresh Solanki <[email protected]>

Instead of hardcoding a single supply, retrieve supplies from DT.

Signed-off-by: Naresh Solanki <[email protected]>
---
drivers/regulator/userspace-consumer.c | 43 ++++++++++++++++++++++++--
1 file changed, 40 insertions(+), 3 deletions(-)

diff --git a/drivers/regulator/userspace-consumer.c b/drivers/regulator/userspace-consumer.c
index 97f075ed68c9..a3d3e1e6ca74 100644
--- a/drivers/regulator/userspace-consumer.c
+++ b/drivers/regulator/userspace-consumer.c
@@ -115,11 +115,32 @@ static const struct attribute_group attr_group = {
.is_visible = attr_visible,
};

+#define SUPPLY_SUFFIX "-supply"
+#define SUPPLY_SUFFIX_LEN 7
+
+static int get_num_supplies(struct platform_device *pdev)
+{
+ struct property *prop;
+ int num_supplies = 0;
+
+ for_each_property_of_node(pdev->dev.of_node, prop) {
+ const char *prop_name = prop->name;
+ int len = strlen(prop_name);
+
+ if (len > SUPPLY_SUFFIX_LEN &&
+ strcmp(prop_name + len - SUPPLY_SUFFIX_LEN, SUPPLY_SUFFIX) == 0) {
+ num_supplies++;
+ }
+ }
+ return num_supplies;
+}
+
static int regulator_userspace_consumer_probe(struct platform_device *pdev)
{
struct regulator_userspace_consumer_data tmpdata;
struct regulator_userspace_consumer_data *pdata;
struct userspace_consumer_data *drvdata;
+ struct property *prop;
int ret;

pdata = dev_get_platdata(&pdev->dev);
@@ -131,11 +152,27 @@ static int regulator_userspace_consumer_probe(struct platform_device *pdev)
memset(pdata, 0, sizeof(*pdata));

pdata->no_autoswitch = true;
- pdata->num_supplies = 1;
- pdata->supplies = devm_kzalloc(&pdev->dev, sizeof(*pdata->supplies), GFP_KERNEL);
+ pdata->num_supplies = get_num_supplies(pdev);
+
+ pdata->supplies = devm_kzalloc(&pdev->dev, pdata->num_supplies *
+ sizeof(*pdata->supplies), GFP_KERNEL);
if (!pdata->supplies)
return -ENOMEM;
- pdata->supplies[0].supply = "vout";
+
+ for_each_property_of_node(pdev->dev.of_node, prop) {
+ const char *prop_name = prop->name;
+ int len = strlen(prop_name);
+
+ if (len > SUPPLY_SUFFIX_LEN &&
+ strcmp(prop_name + len - SUPPLY_SUFFIX_LEN, SUPPLY_SUFFIX) == 0) {
+ char *supply_name = devm_kzalloc(&pdev->dev,
+ len - SUPPLY_SUFFIX_LEN + 1,
+ GFP_KERNEL);
+ strscpy(supply_name, prop_name, len - SUPPLY_SUFFIX_LEN);
+ supply_name[len - SUPPLY_SUFFIX_LEN] = '\0';
+ pdata->supplies[0].supply = supply_name;
+ }
+ }
}

if (pdata->num_supplies < 1) {

base-commit: 451e85e29c9d6f20639d4cfcff4b9dea280178cc
--
2.41.0


2023-09-19 23:01:28

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH] regulator: userspace-consumer: Retrieve supplies from DT

Hi Naresh,

kernel test robot noticed the following build warnings:

[auto build test WARNING on 451e85e29c9d6f20639d4cfcff4b9dea280178cc]

url: https://github.com/intel-lab-lkp/linux/commits/Naresh-Solanki/regulator-userspace-consumer-Retrieve-supplies-from-DT/20230919-141840
base: 451e85e29c9d6f20639d4cfcff4b9dea280178cc
patch link: https://lore.kernel.org/r/20230919061755.3412016-1-naresh.solanki%409elements.com
patch subject: [PATCH] regulator: userspace-consumer: Retrieve supplies from DT
config: i386-randconfig-014-20230919 (https://download.01.org/0day-ci/archive/20230919/[email protected]/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230919/[email protected]/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 <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All warnings (new ones prefixed by >>):

drivers/regulator/userspace-consumer.c: In function 'get_num_supplies':
drivers/regulator/userspace-consumer.c:126:9: error: implicit declaration of function 'for_each_property_of_node'; did you mean 'for_each_child_of_node'? [-Werror=implicit-function-declaration]
126 | for_each_property_of_node(pdev->dev.of_node, prop) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~
| for_each_child_of_node
drivers/regulator/userspace-consumer.c:126:59: error: expected ';' before '{' token
126 | for_each_property_of_node(pdev->dev.of_node, prop) {
| ^~
| ;
>> drivers/regulator/userspace-consumer.c:124:13: warning: unused variable 'num_supplies' [-Wunused-variable]
124 | int num_supplies = 0;
| ^~~~~~~~~~~~
drivers/regulator/userspace-consumer.c:136:1: error: no return statement in function returning non-void [-Werror=return-type]
136 | }
| ^
drivers/regulator/userspace-consumer.c: In function 'regulator_userspace_consumer_probe':
drivers/regulator/userspace-consumer.c:162:67: error: expected ';' before '{' token
162 | for_each_property_of_node(pdev->dev.of_node, prop) {
| ^~
| ;
cc1: some warnings being treated as errors


vim +/num_supplies +124 drivers/regulator/userspace-consumer.c

120
121 static int get_num_supplies(struct platform_device *pdev)
122 {
123 struct property *prop;
> 124 int num_supplies = 0;
125
126 for_each_property_of_node(pdev->dev.of_node, prop) {
127 const char *prop_name = prop->name;
128 int len = strlen(prop_name);
129
130 if (len > SUPPLY_SUFFIX_LEN &&
131 strcmp(prop_name + len - SUPPLY_SUFFIX_LEN, SUPPLY_SUFFIX) == 0) {
132 num_supplies++;
133 }
134 }
135 return num_supplies;
136 }
137

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

2023-09-20 04:41:52

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH] regulator: userspace-consumer: Retrieve supplies from DT

Hi Naresh,

kernel test robot noticed the following build errors:

[auto build test ERROR on 451e85e29c9d6f20639d4cfcff4b9dea280178cc]

url: https://github.com/intel-lab-lkp/linux/commits/Naresh-Solanki/regulator-userspace-consumer-Retrieve-supplies-from-DT/20230919-141840
base: 451e85e29c9d6f20639d4cfcff4b9dea280178cc
patch link: https://lore.kernel.org/r/20230919061755.3412016-1-naresh.solanki%409elements.com
patch subject: [PATCH] regulator: userspace-consumer: Retrieve supplies from DT
config: i386-randconfig-014-20230919 (https://download.01.org/0day-ci/archive/20230920/[email protected]/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230920/[email protected]/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 <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All errors (new ones prefixed by >>):

drivers/regulator/userspace-consumer.c: In function 'get_num_supplies':
>> drivers/regulator/userspace-consumer.c:126:9: error: implicit declaration of function 'for_each_property_of_node'; did you mean 'for_each_child_of_node'? [-Werror=implicit-function-declaration]
126 | for_each_property_of_node(pdev->dev.of_node, prop) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~
| for_each_child_of_node
>> drivers/regulator/userspace-consumer.c:126:59: error: expected ';' before '{' token
126 | for_each_property_of_node(pdev->dev.of_node, prop) {
| ^~
| ;
drivers/regulator/userspace-consumer.c:124:13: warning: unused variable 'num_supplies' [-Wunused-variable]
124 | int num_supplies = 0;
| ^~~~~~~~~~~~
drivers/regulator/userspace-consumer.c:136:1: error: no return statement in function returning non-void [-Werror=return-type]
136 | }
| ^
drivers/regulator/userspace-consumer.c: In function 'regulator_userspace_consumer_probe':
drivers/regulator/userspace-consumer.c:162:67: error: expected ';' before '{' token
162 | for_each_property_of_node(pdev->dev.of_node, prop) {
| ^~
| ;
cc1: some warnings being treated as errors


vim +126 drivers/regulator/userspace-consumer.c

120
121 static int get_num_supplies(struct platform_device *pdev)
122 {
123 struct property *prop;
124 int num_supplies = 0;
125
> 126 for_each_property_of_node(pdev->dev.of_node, prop) {
127 const char *prop_name = prop->name;
128 int len = strlen(prop_name);
129
130 if (len > SUPPLY_SUFFIX_LEN &&
131 strcmp(prop_name + len - SUPPLY_SUFFIX_LEN, SUPPLY_SUFFIX) == 0) {
132 num_supplies++;
133 }
134 }
135 return num_supplies;
136 }
137

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