* Re: [PATCH v7 2/2] hwmon: (isl28022) new driver for ISL28022 power monitor
2024-09-25 3:11 ` [PATCH v7 2/2] hwmon: (isl28022) new driver for ISL28022 power monitor Yikai Tsai
@ 2024-09-25 7:18 ` Geert Uytterhoeven
2024-09-25 14:24 ` kernel test robot
` (4 subsequent siblings)
5 siblings, 0 replies; 13+ messages in thread
From: Geert Uytterhoeven @ 2024-09-25 7:18 UTC (permalink / raw)
To: Yikai Tsai
Cc: patrick, Jean Delvare, Guenter Roeck, Jonathan Corbet,
Carsten Spieß, Geert Uytterhoeven, Magnus Damm, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, linux-hwmon, devicetree,
linux-kernel, linux-doc, linux-renesas-soc
Hi Yikai,
On Wed, Sep 25, 2024 at 5:11 AM Yikai Tsai <yikai.tsai.wiwynn@gmail.com> wrote:
> Driver for Renesas ISL28022 power monitor with I2C interface.
> The device monitors voltage, current via shunt resistor
> and calculated power.
>
> Signed-off-by: Carsten Spieß <mail@carsten-spiess.de>
> Signed-off-by: Yikai Tsai <yikai.tsai.wiwynn@gmail.com>
Thanks for your patch!
> --- /dev/null
> +++ b/drivers/hwmon/isl28022.c
> +static int isl28022_read_properties(struct device *dev, struct isl28022_data *data)
> +{
> + u32 val;
> + int err;
> +
> + err = device_property_read_u32(dev, "shunt-resistor-micro-ohms", &val);
> + if (err == -EINVAL)
> + val = 10000;
> + else if (err < 0)
> + return err;
> + data->shunt = val;
> +
> + err = device_property_read_u32(dev, "renesas,shunt-range-microvolt", &val);
> + if (err == -EINVAL)
> + val = 320000;
> + else if (err < 0)
> + return err;
> +
> + switch (val) {
> + case 40000:
> + data->gain = 1;
> + if (data->shunt < 800)
> + goto shunt_invalid;
> + break;
> + case 80000:
> + data->gain = 2;
> + if (data->shunt < 1600)
> + goto shunt_invalid;
> + break;
> + case 160000:
> + data->gain = 4;
> + if (data->shunt < 3200)
> + goto shunt_invalid;
> + break;
> + case 320000:
> + data->gain = 8;
> + if (data->shunt < 6400)
> + goto shunt_invalid;
> + break;
> + default:
> + dev_err_probe(dev, "renesas,shunt-range-microvolt invalid value %d\n", val);
I doubt this compiles well?
> + return -EINVAL;
return dev_err_probe(dev, -EINVAL, "renesas,shunt-range-microvolt
invalid value %d\n", val);
> + }
> +
> + err = device_property_read_u32(dev, "renesas,average-samples", &val);
> + if (err == -EINVAL)
> + val = 1;
> + else if (err < 0)
> + return err;
> + if (val > 128 || hweight32(val) != 1) {
> + dev_err_probe(dev, "renesas,average-samples invalid value %d\n", val);
> + return -EINVAL;
Likewise.
> + }
> + data->average = val;
> +
> + return 0;
> +
> +shunt_invalid:
> + dev_err_probe(dev, "renesas,shunt-resistor-microvolt invalid value %d\n", data->shunt);
> + return -EINVAL;
One more.
> +}
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH v7 2/2] hwmon: (isl28022) new driver for ISL28022 power monitor
2024-09-25 3:11 ` [PATCH v7 2/2] hwmon: (isl28022) new driver for ISL28022 power monitor Yikai Tsai
2024-09-25 7:18 ` Geert Uytterhoeven
@ 2024-09-25 14:24 ` kernel test robot
2024-09-25 14:35 ` kernel test robot
` (3 subsequent siblings)
5 siblings, 0 replies; 13+ messages in thread
From: kernel test robot @ 2024-09-25 14:24 UTC (permalink / raw)
To: Yikai Tsai, patrick, Jean Delvare, Guenter Roeck, Jonathan Corbet,
Carsten Spieß, Geert Uytterhoeven, Magnus Damm
Cc: oe-kbuild-all, Yikai Tsai, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, linux-hwmon, devicetree, linux-kernel, linux-doc,
linux-renesas-soc
Hi Yikai,
kernel test robot noticed the following build warnings:
[auto build test WARNING on groeck-staging/hwmon-next]
[also build test WARNING on linus/master v6.11 next-20240925]
[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/Yikai-Tsai/dt-bindings-hwmon-add-renesas-isl28022/20240925-111332
base: https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-next
patch link: https://lore.kernel.org/r/20240925031131.14645-3-yikai.tsai.wiwynn%40gmail.com
patch subject: [PATCH v7 2/2] hwmon: (isl28022) new driver for ISL28022 power monitor
config: arc-allyesconfig (https://download.01.org/0day-ci/archive/20240925/202409252223.s09tP6IL-lkp@intel.com/config)
compiler: arceb-elf-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240925/202409252223.s09tP6IL-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/202409252223.s09tP6IL-lkp@intel.com/
All warnings (new ones prefixed by >>):
drivers/hwmon/isl28022.c: In function 'isl28022_read_properties':
>> drivers/hwmon/isl28022.c:396:36: warning: passing argument 2 of 'dev_err_probe' makes integer from pointer without a cast [-Wint-conversion]
396 | dev_err_probe(dev, "renesas,shunt-range-microvolt invalid value %d\n", val);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| char *
In file included from include/linux/device.h:15,
from include/linux/acpi.h:14,
from include/linux/i2c.h:13,
from drivers/hwmon/isl28022.c:11:
include/linux/dev_printk.h:278:64: note: expected 'int' but argument is of type 'char *'
278 | __printf(3, 4) int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
| ~~~~^~~
>> drivers/hwmon/isl28022.c:396:88: warning: passing argument 3 of 'dev_err_probe' makes pointer from integer without a cast [-Wint-conversion]
396 | dev_err_probe(dev, "renesas,shunt-range-microvolt invalid value %d\n", val);
| ^~~
| |
| u32 {aka unsigned int}
include/linux/dev_printk.h:278:81: note: expected 'const char *' but argument is of type 'u32' {aka 'unsigned int'}
278 | __printf(3, 4) int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
| ~~~~~~~~~~~~^~~
drivers/hwmon/isl28022.c:406:36: warning: passing argument 2 of 'dev_err_probe' makes integer from pointer without a cast [-Wint-conversion]
406 | dev_err_probe(dev, "renesas,average-samples invalid value %d\n", val);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| char *
include/linux/dev_printk.h:278:64: note: expected 'int' but argument is of type 'char *'
278 | __printf(3, 4) int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
| ~~~~^~~
drivers/hwmon/isl28022.c:406:82: warning: passing argument 3 of 'dev_err_probe' makes pointer from integer without a cast [-Wint-conversion]
406 | dev_err_probe(dev, "renesas,average-samples invalid value %d\n", val);
| ^~~
| |
| u32 {aka unsigned int}
include/linux/dev_printk.h:278:81: note: expected 'const char *' but argument is of type 'u32' {aka 'unsigned int'}
278 | __printf(3, 4) int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
| ~~~~~~~~~~~~^~~
drivers/hwmon/isl28022.c:414:28: warning: passing argument 2 of 'dev_err_probe' makes integer from pointer without a cast [-Wint-conversion]
414 | dev_err_probe(dev, "renesas,shunt-resistor-microvolt invalid value %d\n", data->shunt);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| char *
include/linux/dev_printk.h:278:64: note: expected 'int' but argument is of type 'char *'
278 | __printf(3, 4) int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
| ~~~~^~~
drivers/hwmon/isl28022.c:414:87: warning: passing argument 3 of 'dev_err_probe' makes pointer from integer without a cast [-Wint-conversion]
414 | dev_err_probe(dev, "renesas,shunt-resistor-microvolt invalid value %d\n", data->shunt);
| ~~~~^~~~~~~
| |
| u32 {aka unsigned int}
include/linux/dev_printk.h:278:81: note: expected 'const char *' but argument is of type 'u32' {aka 'unsigned int'}
278 | __printf(3, 4) int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
| ~~~~~~~~~~~~^~~
vim +/dev_err_probe +396 drivers/hwmon/isl28022.c
346
347 /*
348 * read property values and make consistency checks.
349 *
350 * following values for shunt range and resistor are allowed:
351 * 40 mV -> gain 1, shunt min. 800 micro ohms
352 * 80 mV -> gain 2, shunt min. 1600 micro ohms
353 * 160 mV -> gain 4, shunt min. 3200 micro ohms
354 * 320 mV -> gain 8, shunt min. 6400 micro ohms
355 */
356 static int isl28022_read_properties(struct device *dev, struct isl28022_data *data)
357 {
358 u32 val;
359 int err;
360
361 err = device_property_read_u32(dev, "shunt-resistor-micro-ohms", &val);
362 if (err == -EINVAL)
363 val = 10000;
364 else if (err < 0)
365 return err;
366 data->shunt = val;
367
368 err = device_property_read_u32(dev, "renesas,shunt-range-microvolt", &val);
369 if (err == -EINVAL)
370 val = 320000;
371 else if (err < 0)
372 return err;
373
374 switch (val) {
375 case 40000:
376 data->gain = 1;
377 if (data->shunt < 800)
378 goto shunt_invalid;
379 break;
380 case 80000:
381 data->gain = 2;
382 if (data->shunt < 1600)
383 goto shunt_invalid;
384 break;
385 case 160000:
386 data->gain = 4;
387 if (data->shunt < 3200)
388 goto shunt_invalid;
389 break;
390 case 320000:
391 data->gain = 8;
392 if (data->shunt < 6400)
393 goto shunt_invalid;
394 break;
395 default:
> 396 dev_err_probe(dev, "renesas,shunt-range-microvolt invalid value %d\n", val);
397 return -EINVAL;
398 }
399
400 err = device_property_read_u32(dev, "renesas,average-samples", &val);
401 if (err == -EINVAL)
402 val = 1;
403 else if (err < 0)
404 return err;
405 if (val > 128 || hweight32(val) != 1) {
406 dev_err_probe(dev, "renesas,average-samples invalid value %d\n", val);
407 return -EINVAL;
408 }
409 data->average = val;
410
411 return 0;
412
413 shunt_invalid:
414 dev_err_probe(dev, "renesas,shunt-resistor-microvolt invalid value %d\n", data->shunt);
415 return -EINVAL;
416 }
417
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH v7 2/2] hwmon: (isl28022) new driver for ISL28022 power monitor
2024-09-25 3:11 ` [PATCH v7 2/2] hwmon: (isl28022) new driver for ISL28022 power monitor Yikai Tsai
2024-09-25 7:18 ` Geert Uytterhoeven
2024-09-25 14:24 ` kernel test robot
@ 2024-09-25 14:35 ` kernel test robot
2024-09-26 0:50 ` kernel test robot
` (2 subsequent siblings)
5 siblings, 0 replies; 13+ messages in thread
From: kernel test robot @ 2024-09-25 14:35 UTC (permalink / raw)
To: Yikai Tsai, patrick, Jean Delvare, Guenter Roeck, Jonathan Corbet,
Carsten Spieß, Geert Uytterhoeven, Magnus Damm
Cc: oe-kbuild-all, Yikai Tsai, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, linux-hwmon, devicetree, linux-kernel, linux-doc,
linux-renesas-soc
Hi Yikai,
kernel test robot noticed the following build errors:
[auto build test ERROR on groeck-staging/hwmon-next]
[also build test ERROR on linus/master v6.11 next-20240925]
[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/Yikai-Tsai/dt-bindings-hwmon-add-renesas-isl28022/20240925-111332
base: https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-next
patch link: https://lore.kernel.org/r/20240925031131.14645-3-yikai.tsai.wiwynn%40gmail.com
patch subject: [PATCH v7 2/2] hwmon: (isl28022) new driver for ISL28022 power monitor
config: openrisc-allyesconfig (https://download.01.org/0day-ci/archive/20240925/202409252244.3ZXLJlyK-lkp@intel.com/config)
compiler: or1k-linux-gcc (GCC) 14.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240925/202409252244.3ZXLJlyK-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/202409252244.3ZXLJlyK-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/hwmon/isl28022.c: In function 'isl28022_read_properties':
>> drivers/hwmon/isl28022.c:396:36: error: passing argument 2 of 'dev_err_probe' makes integer from pointer without a cast [-Wint-conversion]
396 | dev_err_probe(dev, "renesas,shunt-range-microvolt invalid value %d\n", val);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| char *
In file included from include/linux/device.h:15,
from include/linux/acpi.h:14,
from include/linux/i2c.h:13,
from drivers/hwmon/isl28022.c:11:
include/linux/dev_printk.h:278:64: note: expected 'int' but argument is of type 'char *'
278 | __printf(3, 4) int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
| ~~~~^~~
>> drivers/hwmon/isl28022.c:396:88: error: passing argument 3 of 'dev_err_probe' makes pointer from integer without a cast [-Wint-conversion]
396 | dev_err_probe(dev, "renesas,shunt-range-microvolt invalid value %d\n", val);
| ^~~
| |
| u32 {aka unsigned int}
include/linux/dev_printk.h:278:81: note: expected 'const char *' but argument is of type 'u32' {aka 'unsigned int'}
278 | __printf(3, 4) int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
| ~~~~~~~~~~~~^~~
drivers/hwmon/isl28022.c:406:36: error: passing argument 2 of 'dev_err_probe' makes integer from pointer without a cast [-Wint-conversion]
406 | dev_err_probe(dev, "renesas,average-samples invalid value %d\n", val);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| char *
include/linux/dev_printk.h:278:64: note: expected 'int' but argument is of type 'char *'
278 | __printf(3, 4) int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
| ~~~~^~~
drivers/hwmon/isl28022.c:406:82: error: passing argument 3 of 'dev_err_probe' makes pointer from integer without a cast [-Wint-conversion]
406 | dev_err_probe(dev, "renesas,average-samples invalid value %d\n", val);
| ^~~
| |
| u32 {aka unsigned int}
include/linux/dev_printk.h:278:81: note: expected 'const char *' but argument is of type 'u32' {aka 'unsigned int'}
278 | __printf(3, 4) int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
| ~~~~~~~~~~~~^~~
drivers/hwmon/isl28022.c:414:28: error: passing argument 2 of 'dev_err_probe' makes integer from pointer without a cast [-Wint-conversion]
414 | dev_err_probe(dev, "renesas,shunt-resistor-microvolt invalid value %d\n", data->shunt);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| char *
include/linux/dev_printk.h:278:64: note: expected 'int' but argument is of type 'char *'
278 | __printf(3, 4) int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
| ~~~~^~~
drivers/hwmon/isl28022.c:414:87: error: passing argument 3 of 'dev_err_probe' makes pointer from integer without a cast [-Wint-conversion]
414 | dev_err_probe(dev, "renesas,shunt-resistor-microvolt invalid value %d\n", data->shunt);
| ~~~~^~~~~~~
| |
| u32 {aka unsigned int}
include/linux/dev_printk.h:278:81: note: expected 'const char *' but argument is of type 'u32' {aka 'unsigned int'}
278 | __printf(3, 4) int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
| ~~~~~~~~~~~~^~~
vim +/dev_err_probe +396 drivers/hwmon/isl28022.c
346
347 /*
348 * read property values and make consistency checks.
349 *
350 * following values for shunt range and resistor are allowed:
351 * 40 mV -> gain 1, shunt min. 800 micro ohms
352 * 80 mV -> gain 2, shunt min. 1600 micro ohms
353 * 160 mV -> gain 4, shunt min. 3200 micro ohms
354 * 320 mV -> gain 8, shunt min. 6400 micro ohms
355 */
356 static int isl28022_read_properties(struct device *dev, struct isl28022_data *data)
357 {
358 u32 val;
359 int err;
360
361 err = device_property_read_u32(dev, "shunt-resistor-micro-ohms", &val);
362 if (err == -EINVAL)
363 val = 10000;
364 else if (err < 0)
365 return err;
366 data->shunt = val;
367
368 err = device_property_read_u32(dev, "renesas,shunt-range-microvolt", &val);
369 if (err == -EINVAL)
370 val = 320000;
371 else if (err < 0)
372 return err;
373
374 switch (val) {
375 case 40000:
376 data->gain = 1;
377 if (data->shunt < 800)
378 goto shunt_invalid;
379 break;
380 case 80000:
381 data->gain = 2;
382 if (data->shunt < 1600)
383 goto shunt_invalid;
384 break;
385 case 160000:
386 data->gain = 4;
387 if (data->shunt < 3200)
388 goto shunt_invalid;
389 break;
390 case 320000:
391 data->gain = 8;
392 if (data->shunt < 6400)
393 goto shunt_invalid;
394 break;
395 default:
> 396 dev_err_probe(dev, "renesas,shunt-range-microvolt invalid value %d\n", val);
397 return -EINVAL;
398 }
399
400 err = device_property_read_u32(dev, "renesas,average-samples", &val);
401 if (err == -EINVAL)
402 val = 1;
403 else if (err < 0)
404 return err;
405 if (val > 128 || hweight32(val) != 1) {
406 dev_err_probe(dev, "renesas,average-samples invalid value %d\n", val);
407 return -EINVAL;
408 }
409 data->average = val;
410
411 return 0;
412
413 shunt_invalid:
414 dev_err_probe(dev, "renesas,shunt-resistor-microvolt invalid value %d\n", data->shunt);
415 return -EINVAL;
416 }
417
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH v7 2/2] hwmon: (isl28022) new driver for ISL28022 power monitor
2024-09-25 3:11 ` [PATCH v7 2/2] hwmon: (isl28022) new driver for ISL28022 power monitor Yikai Tsai
` (2 preceding siblings ...)
2024-09-25 14:35 ` kernel test robot
@ 2024-09-26 0:50 ` kernel test robot
2024-09-27 4:47 ` kernel test robot
2024-09-27 22:08 ` kernel test robot
5 siblings, 0 replies; 13+ messages in thread
From: kernel test robot @ 2024-09-26 0:50 UTC (permalink / raw)
To: Yikai Tsai, patrick, Jean Delvare, Guenter Roeck, Jonathan Corbet,
Carsten Spieß, Geert Uytterhoeven, Magnus Damm
Cc: llvm, oe-kbuild-all, Yikai Tsai, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, linux-hwmon, devicetree, linux-kernel, linux-doc,
linux-renesas-soc
Hi Yikai,
kernel test robot noticed the following build errors:
[auto build test ERROR on groeck-staging/hwmon-next]
[also build test ERROR on linus/master v6.11 next-20240925]
[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/Yikai-Tsai/dt-bindings-hwmon-add-renesas-isl28022/20240925-111332
base: https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-next
patch link: https://lore.kernel.org/r/20240925031131.14645-3-yikai.tsai.wiwynn%40gmail.com
patch subject: [PATCH v7 2/2] hwmon: (isl28022) new driver for ISL28022 power monitor
config: hexagon-allmodconfig (https://download.01.org/0day-ci/archive/20240926/202409260859.DetsBmBQ-lkp@intel.com/config)
compiler: clang version 20.0.0git (https://github.com/llvm/llvm-project 7773243d9916f98ba0ffce0c3a960e4aa9f03e81)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240926/202409260859.DetsBmBQ-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/202409260859.DetsBmBQ-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from drivers/hwmon/isl28022.c:11:
In file included from include/linux/i2c.h:19:
In file included from include/linux/regulator/consumer.h:35:
In file included from include/linux/suspend.h:5:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:13:
In file included from include/linux/cgroup.h:25:
In file included from include/linux/kernel_stat.h:8:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:11:
In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:14:
In file included from arch/hexagon/include/asm/io.h:328:
include/asm-generic/io.h:548:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
548 | val = __raw_readb(PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:561:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
561 | val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
| ~~~~~~~~~~ ^
include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu'
37 | #define __le16_to_cpu(x) ((__force __u16)(__le16)(x))
| ^
In file included from drivers/hwmon/isl28022.c:11:
In file included from include/linux/i2c.h:19:
In file included from include/linux/regulator/consumer.h:35:
In file included from include/linux/suspend.h:5:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:13:
In file included from include/linux/cgroup.h:25:
In file included from include/linux/kernel_stat.h:8:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:11:
In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:14:
In file included from arch/hexagon/include/asm/io.h:328:
include/asm-generic/io.h:574:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
574 | val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
| ~~~~~~~~~~ ^
include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu'
35 | #define __le32_to_cpu(x) ((__force __u32)(__le32)(x))
| ^
In file included from drivers/hwmon/isl28022.c:11:
In file included from include/linux/i2c.h:19:
In file included from include/linux/regulator/consumer.h:35:
In file included from include/linux/suspend.h:5:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:13:
In file included from include/linux/cgroup.h:25:
In file included from include/linux/kernel_stat.h:8:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:11:
In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:14:
In file included from arch/hexagon/include/asm/io.h:328:
include/asm-generic/io.h:585:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
585 | __raw_writeb(value, PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:595:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
595 | __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:605:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
605 | __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
In file included from drivers/hwmon/isl28022.c:11:
In file included from include/linux/i2c.h:19:
In file included from include/linux/regulator/consumer.h:35:
In file included from include/linux/suspend.h:5:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:21:
In file included from include/linux/mm.h:2228:
include/linux/vmstat.h:514:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
514 | return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
| ~~~~~~~~~~~ ^ ~~~
>> drivers/hwmon/isl28022.c:396:22: error: incompatible pointer to integer conversion passing 'char[48]' to parameter of type 'int' [-Wint-conversion]
396 | dev_err_probe(dev, "renesas,shunt-range-microvolt invalid value %d\n", val);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/dev_printk.h:278:64: note: passing argument to parameter 'err' here
278 | __printf(3, 4) int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
| ^
>> drivers/hwmon/isl28022.c:396:74: error: incompatible integer to pointer conversion passing 'u32' (aka 'unsigned int') to parameter of type 'const char *' [-Wint-conversion]
396 | dev_err_probe(dev, "renesas,shunt-range-microvolt invalid value %d\n", val);
| ^~~
include/linux/dev_printk.h:278:81: note: passing argument to parameter 'fmt' here
278 | __printf(3, 4) int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
| ^
drivers/hwmon/isl28022.c:406:22: error: incompatible pointer to integer conversion passing 'char[42]' to parameter of type 'int' [-Wint-conversion]
406 | dev_err_probe(dev, "renesas,average-samples invalid value %d\n", val);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/dev_printk.h:278:64: note: passing argument to parameter 'err' here
278 | __printf(3, 4) int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
| ^
drivers/hwmon/isl28022.c:406:68: error: incompatible integer to pointer conversion passing 'u32' (aka 'unsigned int') to parameter of type 'const char *' [-Wint-conversion]
406 | dev_err_probe(dev, "renesas,average-samples invalid value %d\n", val);
| ^~~
include/linux/dev_printk.h:278:81: note: passing argument to parameter 'fmt' here
278 | __printf(3, 4) int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
| ^
drivers/hwmon/isl28022.c:414:21: error: incompatible pointer to integer conversion passing 'char[51]' to parameter of type 'int' [-Wint-conversion]
414 | dev_err_probe(dev, "renesas,shunt-resistor-microvolt invalid value %d\n", data->shunt);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/dev_printk.h:278:64: note: passing argument to parameter 'err' here
278 | __printf(3, 4) int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
| ^
drivers/hwmon/isl28022.c:414:76: error: incompatible integer to pointer conversion passing 'u32' (aka 'unsigned int') to parameter of type 'const char *' [-Wint-conversion]
414 | dev_err_probe(dev, "renesas,shunt-resistor-microvolt invalid value %d\n", data->shunt);
| ^~~~~~~~~~~
include/linux/dev_printk.h:278:81: note: passing argument to parameter 'fmt' here
278 | __printf(3, 4) int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
| ^
7 warnings and 6 errors generated.
vim +396 drivers/hwmon/isl28022.c
346
347 /*
348 * read property values and make consistency checks.
349 *
350 * following values for shunt range and resistor are allowed:
351 * 40 mV -> gain 1, shunt min. 800 micro ohms
352 * 80 mV -> gain 2, shunt min. 1600 micro ohms
353 * 160 mV -> gain 4, shunt min. 3200 micro ohms
354 * 320 mV -> gain 8, shunt min. 6400 micro ohms
355 */
356 static int isl28022_read_properties(struct device *dev, struct isl28022_data *data)
357 {
358 u32 val;
359 int err;
360
361 err = device_property_read_u32(dev, "shunt-resistor-micro-ohms", &val);
362 if (err == -EINVAL)
363 val = 10000;
364 else if (err < 0)
365 return err;
366 data->shunt = val;
367
368 err = device_property_read_u32(dev, "renesas,shunt-range-microvolt", &val);
369 if (err == -EINVAL)
370 val = 320000;
371 else if (err < 0)
372 return err;
373
374 switch (val) {
375 case 40000:
376 data->gain = 1;
377 if (data->shunt < 800)
378 goto shunt_invalid;
379 break;
380 case 80000:
381 data->gain = 2;
382 if (data->shunt < 1600)
383 goto shunt_invalid;
384 break;
385 case 160000:
386 data->gain = 4;
387 if (data->shunt < 3200)
388 goto shunt_invalid;
389 break;
390 case 320000:
391 data->gain = 8;
392 if (data->shunt < 6400)
393 goto shunt_invalid;
394 break;
395 default:
> 396 dev_err_probe(dev, "renesas,shunt-range-microvolt invalid value %d\n", val);
397 return -EINVAL;
398 }
399
400 err = device_property_read_u32(dev, "renesas,average-samples", &val);
401 if (err == -EINVAL)
402 val = 1;
403 else if (err < 0)
404 return err;
405 if (val > 128 || hweight32(val) != 1) {
406 dev_err_probe(dev, "renesas,average-samples invalid value %d\n", val);
407 return -EINVAL;
408 }
409 data->average = val;
410
411 return 0;
412
413 shunt_invalid:
414 dev_err_probe(dev, "renesas,shunt-resistor-microvolt invalid value %d\n", data->shunt);
415 return -EINVAL;
416 }
417
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH v7 2/2] hwmon: (isl28022) new driver for ISL28022 power monitor
2024-09-25 3:11 ` [PATCH v7 2/2] hwmon: (isl28022) new driver for ISL28022 power monitor Yikai Tsai
` (3 preceding siblings ...)
2024-09-26 0:50 ` kernel test robot
@ 2024-09-27 4:47 ` kernel test robot
2024-09-27 22:08 ` kernel test robot
5 siblings, 0 replies; 13+ messages in thread
From: kernel test robot @ 2024-09-27 4:47 UTC (permalink / raw)
To: Yikai Tsai, patrick, Jean Delvare, Guenter Roeck, Jonathan Corbet,
Carsten Spieß, Geert Uytterhoeven, Magnus Damm
Cc: oe-kbuild-all, Yikai Tsai, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, linux-hwmon, devicetree, linux-kernel, linux-doc,
linux-renesas-soc
Hi Yikai,
kernel test robot noticed the following build warnings:
[auto build test WARNING on groeck-staging/hwmon-next]
[also build test WARNING on linus/master v6.11 next-20240926]
[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/Yikai-Tsai/dt-bindings-hwmon-add-renesas-isl28022/20240925-111332
base: https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-next
patch link: https://lore.kernel.org/r/20240925031131.14645-3-yikai.tsai.wiwynn%40gmail.com
patch subject: [PATCH v7 2/2] hwmon: (isl28022) new driver for ISL28022 power monitor
config: i386-randconfig-r133-20240927 (https://download.01.org/0day-ci/archive/20240927/202409271235.PtMXq9Kx-lkp@intel.com/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/20240927/202409271235.PtMXq9Kx-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/202409271235.PtMXq9Kx-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
>> drivers/hwmon/isl28022.c:396:36: sparse: sparse: incorrect type in argument 2 (different base types) @@ expected int err @@ got char * @@
drivers/hwmon/isl28022.c:396:36: sparse: expected int err
drivers/hwmon/isl28022.c:396:36: sparse: got char *
>> drivers/hwmon/isl28022.c:396:88: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected char const *fmt @@ got unsigned int [addressable] [assigned] [usertype] val @@
drivers/hwmon/isl28022.c:396:88: sparse: expected char const *fmt
drivers/hwmon/isl28022.c:396:88: sparse: got unsigned int [addressable] [assigned] [usertype] val
drivers/hwmon/isl28022.c:406:36: sparse: sparse: incorrect type in argument 2 (different base types) @@ expected int err @@ got char * @@
drivers/hwmon/isl28022.c:406:36: sparse: expected int err
drivers/hwmon/isl28022.c:406:36: sparse: got char *
drivers/hwmon/isl28022.c:406:82: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected char const *fmt @@ got unsigned int [addressable] [assigned] [usertype] val @@
drivers/hwmon/isl28022.c:406:82: sparse: expected char const *fmt
drivers/hwmon/isl28022.c:406:82: sparse: got unsigned int [addressable] [assigned] [usertype] val
drivers/hwmon/isl28022.c:414:28: sparse: sparse: incorrect type in argument 2 (different base types) @@ expected int err @@ got char * @@
drivers/hwmon/isl28022.c:414:28: sparse: expected int err
drivers/hwmon/isl28022.c:414:28: sparse: got char *
>> drivers/hwmon/isl28022.c:414:87: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected char const *fmt @@ got unsigned int [usertype] shunt @@
drivers/hwmon/isl28022.c:414:87: sparse: expected char const *fmt
drivers/hwmon/isl28022.c:414:87: sparse: got unsigned int [usertype] shunt
drivers/hwmon/isl28022.c: note: in included file (through include/linux/mmzone.h, include/linux/gfp.h, include/linux/xarray.h, ...):
include/linux/page-flags.h:235:46: sparse: sparse: self-comparison always evaluates to false
include/linux/page-flags.h:235:46: sparse: sparse: self-comparison always evaluates to false
vim +396 drivers/hwmon/isl28022.c
346
347 /*
348 * read property values and make consistency checks.
349 *
350 * following values for shunt range and resistor are allowed:
351 * 40 mV -> gain 1, shunt min. 800 micro ohms
352 * 80 mV -> gain 2, shunt min. 1600 micro ohms
353 * 160 mV -> gain 4, shunt min. 3200 micro ohms
354 * 320 mV -> gain 8, shunt min. 6400 micro ohms
355 */
356 static int isl28022_read_properties(struct device *dev, struct isl28022_data *data)
357 {
358 u32 val;
359 int err;
360
361 err = device_property_read_u32(dev, "shunt-resistor-micro-ohms", &val);
362 if (err == -EINVAL)
363 val = 10000;
364 else if (err < 0)
365 return err;
366 data->shunt = val;
367
368 err = device_property_read_u32(dev, "renesas,shunt-range-microvolt", &val);
369 if (err == -EINVAL)
370 val = 320000;
371 else if (err < 0)
372 return err;
373
374 switch (val) {
375 case 40000:
376 data->gain = 1;
377 if (data->shunt < 800)
378 goto shunt_invalid;
379 break;
380 case 80000:
381 data->gain = 2;
382 if (data->shunt < 1600)
383 goto shunt_invalid;
384 break;
385 case 160000:
386 data->gain = 4;
387 if (data->shunt < 3200)
388 goto shunt_invalid;
389 break;
390 case 320000:
391 data->gain = 8;
392 if (data->shunt < 6400)
393 goto shunt_invalid;
394 break;
395 default:
> 396 dev_err_probe(dev, "renesas,shunt-range-microvolt invalid value %d\n", val);
397 return -EINVAL;
398 }
399
400 err = device_property_read_u32(dev, "renesas,average-samples", &val);
401 if (err == -EINVAL)
402 val = 1;
403 else if (err < 0)
404 return err;
405 if (val > 128 || hweight32(val) != 1) {
> 406 dev_err_probe(dev, "renesas,average-samples invalid value %d\n", val);
407 return -EINVAL;
408 }
409 data->average = val;
410
411 return 0;
412
413 shunt_invalid:
> 414 dev_err_probe(dev, "renesas,shunt-resistor-microvolt invalid value %d\n", data->shunt);
415 return -EINVAL;
416 }
417
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH v7 2/2] hwmon: (isl28022) new driver for ISL28022 power monitor
2024-09-25 3:11 ` [PATCH v7 2/2] hwmon: (isl28022) new driver for ISL28022 power monitor Yikai Tsai
` (4 preceding siblings ...)
2024-09-27 4:47 ` kernel test robot
@ 2024-09-27 22:08 ` kernel test robot
5 siblings, 0 replies; 13+ messages in thread
From: kernel test robot @ 2024-09-27 22:08 UTC (permalink / raw)
To: Yikai Tsai, patrick, Jean Delvare, Guenter Roeck, Jonathan Corbet,
Carsten Spieß, Geert Uytterhoeven, Magnus Damm
Cc: oe-kbuild-all, Yikai Tsai, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, linux-hwmon, devicetree, linux-kernel, linux-doc,
linux-renesas-soc
Hi Yikai,
kernel test robot noticed the following build warnings:
[auto build test WARNING on groeck-staging/hwmon-next]
[also build test WARNING on linus/master v6.11 next-20240927]
[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/Yikai-Tsai/dt-bindings-hwmon-add-renesas-isl28022/20240925-111332
base: https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-next
patch link: https://lore.kernel.org/r/20240925031131.14645-3-yikai.tsai.wiwynn%40gmail.com
patch subject: [PATCH v7 2/2] hwmon: (isl28022) new driver for ISL28022 power monitor
config: x86_64-randconfig-121-20240928 (https://download.01.org/0day-ci/archive/20240928/202409280806.yxX1K5ey-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240928/202409280806.yxX1K5ey-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/202409280806.yxX1K5ey-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
drivers/hwmon/isl28022.c:396:36: sparse: sparse: incorrect type in argument 2 (different base types) @@ expected int err @@ got char * @@
drivers/hwmon/isl28022.c:396:36: sparse: expected int err
drivers/hwmon/isl28022.c:396:36: sparse: got char *
drivers/hwmon/isl28022.c:396:88: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected char const *fmt @@ got unsigned int [addressable] [assigned] [usertype] val @@
drivers/hwmon/isl28022.c:396:88: sparse: expected char const *fmt
drivers/hwmon/isl28022.c:396:88: sparse: got unsigned int [addressable] [assigned] [usertype] val
drivers/hwmon/isl28022.c:406:36: sparse: sparse: incorrect type in argument 2 (different base types) @@ expected int err @@ got char * @@
drivers/hwmon/isl28022.c:406:36: sparse: expected int err
drivers/hwmon/isl28022.c:406:36: sparse: got char *
drivers/hwmon/isl28022.c:406:82: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected char const *fmt @@ got unsigned int [addressable] [assigned] [usertype] val @@
drivers/hwmon/isl28022.c:406:82: sparse: expected char const *fmt
drivers/hwmon/isl28022.c:406:82: sparse: got unsigned int [addressable] [assigned] [usertype] val
drivers/hwmon/isl28022.c:414:28: sparse: sparse: incorrect type in argument 2 (different base types) @@ expected int err @@ got char * @@
drivers/hwmon/isl28022.c:414:28: sparse: expected int err
drivers/hwmon/isl28022.c:414:28: sparse: got char *
drivers/hwmon/isl28022.c:414:87: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected char const *fmt @@ got unsigned int [usertype] shunt @@
drivers/hwmon/isl28022.c:414:87: sparse: expected char const *fmt
drivers/hwmon/isl28022.c:414:87: sparse: got unsigned int [usertype] shunt
>> drivers/hwmon/isl28022.c:396:36: sparse: sparse: non size-preserving pointer to integer cast
>> drivers/hwmon/isl28022.c:396:88: sparse: sparse: non size-preserving integer to pointer cast
drivers/hwmon/isl28022.c:406:36: sparse: sparse: non size-preserving pointer to integer cast
drivers/hwmon/isl28022.c:406:82: sparse: sparse: non size-preserving integer to pointer cast
drivers/hwmon/isl28022.c:414:28: sparse: sparse: non size-preserving pointer to integer cast
drivers/hwmon/isl28022.c:414:83: sparse: sparse: non size-preserving integer to pointer cast
vim +396 drivers/hwmon/isl28022.c
346
347 /*
348 * read property values and make consistency checks.
349 *
350 * following values for shunt range and resistor are allowed:
351 * 40 mV -> gain 1, shunt min. 800 micro ohms
352 * 80 mV -> gain 2, shunt min. 1600 micro ohms
353 * 160 mV -> gain 4, shunt min. 3200 micro ohms
354 * 320 mV -> gain 8, shunt min. 6400 micro ohms
355 */
356 static int isl28022_read_properties(struct device *dev, struct isl28022_data *data)
357 {
358 u32 val;
359 int err;
360
361 err = device_property_read_u32(dev, "shunt-resistor-micro-ohms", &val);
362 if (err == -EINVAL)
363 val = 10000;
364 else if (err < 0)
365 return err;
366 data->shunt = val;
367
368 err = device_property_read_u32(dev, "renesas,shunt-range-microvolt", &val);
369 if (err == -EINVAL)
370 val = 320000;
371 else if (err < 0)
372 return err;
373
374 switch (val) {
375 case 40000:
376 data->gain = 1;
377 if (data->shunt < 800)
378 goto shunt_invalid;
379 break;
380 case 80000:
381 data->gain = 2;
382 if (data->shunt < 1600)
383 goto shunt_invalid;
384 break;
385 case 160000:
386 data->gain = 4;
387 if (data->shunt < 3200)
388 goto shunt_invalid;
389 break;
390 case 320000:
391 data->gain = 8;
392 if (data->shunt < 6400)
393 goto shunt_invalid;
394 break;
395 default:
> 396 dev_err_probe(dev, "renesas,shunt-range-microvolt invalid value %d\n", val);
397 return -EINVAL;
398 }
399
400 err = device_property_read_u32(dev, "renesas,average-samples", &val);
401 if (err == -EINVAL)
402 val = 1;
403 else if (err < 0)
404 return err;
405 if (val > 128 || hweight32(val) != 1) {
406 dev_err_probe(dev, "renesas,average-samples invalid value %d\n", val);
407 return -EINVAL;
408 }
409 data->average = val;
410
411 return 0;
412
413 shunt_invalid:
414 dev_err_probe(dev, "renesas,shunt-resistor-microvolt invalid value %d\n", data->shunt);
415 return -EINVAL;
416 }
417
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 13+ messages in thread