From: kernel test robot <lkp@intel.com>
To: Sebastian Josue Alba Vives <sebasjosue84@gmail.com>, marvin24@gmx.de
Cc: oe-kbuild-all@lists.linux.dev, ac100@lists.launchpad.net,
linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org,
stable@vger.kernel.org,
"Sebastián Alba Vives" <sebasjosue84@gmail.com>
Subject: Re: [PATCH v2] staging: nvec: validate battery response length before memcpy
Date: Mon, 30 Mar 2026 17:36:40 +0800 [thread overview]
Message-ID: <202603301722.axpoITcy-lkp@intel.com> (raw)
In-Reply-To: <20260329210800.597697-1-sebasjosue84@gmail.com>
Hi Sebastian,
kernel test robot noticed the following build errors:
[auto build test ERROR on staging/staging-testing]
url: https://github.com/intel-lab-lkp/linux/commits/Sebastian-Josue-Alba-Vives/staging-nvec-validate-battery-response-length-before-memcpy/20260330-083704
base: staging/staging-testing
patch link: https://lore.kernel.org/r/20260329210800.597697-1-sebasjosue84%40gmail.com
patch subject: [PATCH v2] staging: nvec: validate battery response length before memcpy
config: arm64-randconfig-003-20260330 (https://download.01.org/0day-ci/archive/20260330/202603301722.axpoITcy-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 8.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260330/202603301722.axpoITcy-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/202603301722.axpoITcy-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/staging/nvec/nvec_power.c: In function 'nvec_power_bat_notifier':
>> drivers/staging/nvec/nvec_power.c:237:12: error: invalid storage class for function 'nvec_power_get_property'
static int nvec_power_get_property(struct power_supply *psy,
^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/nvec/nvec_power.c:253:12: error: invalid storage class for function 'nvec_battery_get_property'
static int nvec_battery_get_property(struct power_supply *psy,
^~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/nvec/nvec_power.c:344:18: error: initializer element is not constant
.get_property = nvec_battery_get_property,
^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/nvec/nvec_power.c:344:18: note: (near initialization for 'nvec_bat_psy_desc.get_property')
drivers/staging/nvec/nvec_power.c:352:18: error: initializer element is not constant
.get_property = nvec_power_get_property,
^~~~~~~~~~~~~~~~~~~~~~~
drivers/staging/nvec/nvec_power.c:352:18: note: (near initialization for 'nvec_psy_desc.get_property')
>> drivers/staging/nvec/nvec_power.c:363:13: error: invalid storage class for function 'nvec_power_poll'
static void nvec_power_poll(struct work_struct *work)
^~~~~~~~~~~~~~~
>> drivers/staging/nvec/nvec_power.c:387:12: error: invalid storage class for function 'nvec_power_probe'
static int nvec_power_probe(struct platform_device *pdev)
^~~~~~~~~~~~~~~~
>> drivers/staging/nvec/nvec_power.c:434:13: error: invalid storage class for function 'nvec_power_remove'
static void nvec_power_remove(struct platform_device *pdev)
^~~~~~~~~~~~~~~~~
drivers/staging/nvec/nvec_power.c:450:11: error: initializer element is not constant
.probe = nvec_power_probe,
^~~~~~~~~~~~~~~~
drivers/staging/nvec/nvec_power.c:450:11: note: (near initialization for 'nvec_power_driver.probe')
drivers/staging/nvec/nvec_power.c:451:12: error: initializer element is not constant
.remove = nvec_power_remove,
^~~~~~~~~~~~~~~~~
drivers/staging/nvec/nvec_power.c:451:12: note: (near initialization for 'nvec_power_driver.remove')
In file included from include/linux/device.h:32,
from include/linux/platform_device.h:13,
from drivers/staging/nvec/nvec_power.c:12:
>> drivers/staging/nvec/nvec_power.c:457:24: error: invalid storage class for function 'nvec_power_driver_init'
module_platform_driver(nvec_power_driver);
^~~~~~~~~~~~~~~~~
include/linux/device/driver.h:267:19: note: in definition of macro 'module_driver'
static int __init __driver##_init(void) \
^~~~~~~~
drivers/staging/nvec/nvec_power.c:457:1: note: in expansion of macro 'module_platform_driver'
module_platform_driver(nvec_power_driver);
^~~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/build_bug.h:5,
from include/linux/container_of.h:5,
from include/linux/list.h:5,
from include/linux/module.h:12,
from drivers/staging/nvec/nvec_power.c:11:
include/linux/compiler.h:276:44: error: initializer element is not constant
__UNIQUE_ID(__PASTE(addressable_, sym)) = (void *)(uintptr_t)&sym;
^
include/linux/compiler.h:279:2: note: in expansion of macro '___ADDRESSABLE'
___ADDRESSABLE(sym, __section(".discard.addressable"))
^~~~~~~~~~~~~~
include/linux/init.h:251:2: note: in expansion of macro '__ADDRESSABLE'
__ADDRESSABLE(fn)
^~~~~~~~~~~~~
include/linux/init.h:256:2: note: in expansion of macro '__define_initcall_stub'
__define_initcall_stub(__stub, fn) \
^~~~~~~~~~~~~~~~~~~~~~
include/linux/init.h:269:2: note: in expansion of macro '____define_initcall'
____define_initcall(fn, \
^~~~~~~~~~~~~~~~~~~
include/linux/init.h:275:2: note: in expansion of macro '__unique_initcall'
__unique_initcall(fn, id, __sec, __initcall_id(fn))
^~~~~~~~~~~~~~~~~
include/linux/init.h:277:35: note: in expansion of macro '___define_initcall'
#define __define_initcall(fn, id) ___define_initcall(fn, id, .initcall##id)
^~~~~~~~~~~~~~~~~~
include/linux/init.h:306:30: note: in expansion of macro '__define_initcall'
#define device_initcall(fn) __define_initcall(fn, 6)
^~~~~~~~~~~~~~~~~
include/linux/init.h:311:24: note: in expansion of macro 'device_initcall'
#define __initcall(fn) device_initcall(fn)
^~~~~~~~~~~~~~~
include/linux/module.h:89:24: note: in expansion of macro '__initcall'
#define module_init(x) __initcall(x);
^~~~~~~~~~
include/linux/device/driver.h:271:1: note: in expansion of macro 'module_init'
module_init(__driver##_init); \
^~~~~~~~~~~
include/linux/platform_device.h:295:2: note: in expansion of macro 'module_driver'
module_driver(__platform_driver, platform_driver_register, \
^~~~~~~~~~~~~
drivers/staging/nvec/nvec_power.c:457:1: note: in expansion of macro 'module_platform_driver'
module_platform_driver(nvec_power_driver);
^~~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/device.h:32,
from include/linux/platform_device.h:13,
from drivers/staging/nvec/nvec_power.c:12:
>> drivers/staging/nvec/nvec_power.c:457:24: error: invalid storage class for function 'nvec_power_driver_exit'
module_platform_driver(nvec_power_driver);
^~~~~~~~~~~~~~~~~
include/linux/device/driver.h:272:20: note: in definition of macro 'module_driver'
static void __exit __driver##_exit(void) \
^~~~~~~~
drivers/staging/nvec/nvec_power.c:457:1: note: in expansion of macro 'module_platform_driver'
module_platform_driver(nvec_power_driver);
^~~~~~~~~~~~~~~~~~~~~~
In file included from arch/arm64/include/asm/alternative.h:9,
from arch/arm64/include/asm/lse.h:12,
from arch/arm64/include/asm/cmpxchg.h:14,
from arch/arm64/include/asm/atomic.h:16,
from include/linux/atomic.h:7,
from include/asm-generic/bitops/atomic.h:5,
from arch/arm64/include/asm/bitops.h:25,
from include/linux/bitops.h:67,
from arch/arm64/include/asm/cache.h:40,
from include/vdso/cache.h:5,
from include/linux/cache.h:6,
from include/linux/time.h:5,
from arch/arm64/include/asm/stat.h:12,
from include/linux/stat.h:6,
from include/linux/module.h:13,
from drivers/staging/nvec/nvec_power.c:11:
drivers/staging/nvec/nvec_power.c:457:24: error: initializer element is not constant
module_platform_driver(nvec_power_driver);
^~~~~~~~~~~~~~~~~
include/linux/init.h:314:50: note: in definition of macro '__exitcall'
static exitcall_t __exitcall_##fn __exit_call = fn
^~
include/linux/device/driver.h:276:1: note: in expansion of macro 'module_exit'
module_exit(__driver##_exit);
^~~~~~~~~~~
include/linux/platform_device.h:295:2: note: in expansion of macro 'module_driver'
module_driver(__platform_driver, platform_driver_register, \
^~~~~~~~~~~~~
drivers/staging/nvec/nvec_power.c:457:1: note: in expansion of macro 'module_platform_driver'
module_platform_driver(nvec_power_driver);
^~~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/nvec/nvec_power.c:462:1: error: expected declaration or statement at end of input
MODULE_ALIAS("platform:nvec-power");
^~~~~~~~~~~~
vim +/nvec_power_get_property +237 drivers/staging/nvec/nvec_power.c
32890b98308613 Marc Dietrich 2011-05-19 236
32890b98308613 Marc Dietrich 2011-05-19 @237 static int nvec_power_get_property(struct power_supply *psy,
32890b98308613 Marc Dietrich 2011-05-19 238 enum power_supply_property psp,
32890b98308613 Marc Dietrich 2011-05-19 239 union power_supply_propval *val)
32890b98308613 Marc Dietrich 2011-05-19 240 {
297d716f6260cc Krzysztof Kozlowski 2015-03-12 241 struct nvec_power *power = dev_get_drvdata(psy->dev.parent);
fa799617865037 Pawel Lebioda 2014-07-03 242
32890b98308613 Marc Dietrich 2011-05-19 243 switch (psp) {
32890b98308613 Marc Dietrich 2011-05-19 244 case POWER_SUPPLY_PROP_ONLINE:
32890b98308613 Marc Dietrich 2011-05-19 245 val->intval = power->on;
32890b98308613 Marc Dietrich 2011-05-19 246 break;
32890b98308613 Marc Dietrich 2011-05-19 247 default:
32890b98308613 Marc Dietrich 2011-05-19 248 return -EINVAL;
32890b98308613 Marc Dietrich 2011-05-19 249 }
32890b98308613 Marc Dietrich 2011-05-19 250 return 0;
32890b98308613 Marc Dietrich 2011-05-19 251 }
32890b98308613 Marc Dietrich 2011-05-19 252
32890b98308613 Marc Dietrich 2011-05-19 @253 static int nvec_battery_get_property(struct power_supply *psy,
32890b98308613 Marc Dietrich 2011-05-19 254 enum power_supply_property psp,
32890b98308613 Marc Dietrich 2011-05-19 255 union power_supply_propval *val)
32890b98308613 Marc Dietrich 2011-05-19 256 {
297d716f6260cc Krzysztof Kozlowski 2015-03-12 257 struct nvec_power *power = dev_get_drvdata(psy->dev.parent);
32890b98308613 Marc Dietrich 2011-05-19 258
162c7d8c4be2d5 Marc Dietrich 2011-09-27 259 switch (psp) {
32890b98308613 Marc Dietrich 2011-05-19 260 case POWER_SUPPLY_PROP_STATUS:
32890b98308613 Marc Dietrich 2011-05-19 261 val->intval = power->bat_status;
32890b98308613 Marc Dietrich 2011-05-19 262 break;
32890b98308613 Marc Dietrich 2011-05-19 263 case POWER_SUPPLY_PROP_CAPACITY:
32890b98308613 Marc Dietrich 2011-05-19 264 val->intval = power->bat_cap;
32890b98308613 Marc Dietrich 2011-05-19 265 break;
32890b98308613 Marc Dietrich 2011-05-19 266 case POWER_SUPPLY_PROP_PRESENT:
32890b98308613 Marc Dietrich 2011-05-19 267 val->intval = power->bat_present;
32890b98308613 Marc Dietrich 2011-05-19 268 break;
32890b98308613 Marc Dietrich 2011-05-19 269 case POWER_SUPPLY_PROP_VOLTAGE_NOW:
32890b98308613 Marc Dietrich 2011-05-19 270 val->intval = power->bat_voltage_now;
32890b98308613 Marc Dietrich 2011-05-19 271 break;
32890b98308613 Marc Dietrich 2011-05-19 272 case POWER_SUPPLY_PROP_CURRENT_NOW:
32890b98308613 Marc Dietrich 2011-05-19 273 val->intval = power->bat_current_now;
32890b98308613 Marc Dietrich 2011-05-19 274 break;
32890b98308613 Marc Dietrich 2011-05-19 275 case POWER_SUPPLY_PROP_CURRENT_AVG:
32890b98308613 Marc Dietrich 2011-05-19 276 val->intval = power->bat_current_avg;
32890b98308613 Marc Dietrich 2011-05-19 277 break;
32890b98308613 Marc Dietrich 2011-05-19 278 case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW:
32890b98308613 Marc Dietrich 2011-05-19 279 val->intval = power->time_remain;
32890b98308613 Marc Dietrich 2011-05-19 280 break;
32890b98308613 Marc Dietrich 2011-05-19 281 case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
32890b98308613 Marc Dietrich 2011-05-19 282 val->intval = power->charge_full_design;
32890b98308613 Marc Dietrich 2011-05-19 283 break;
32890b98308613 Marc Dietrich 2011-05-19 284 case POWER_SUPPLY_PROP_CHARGE_FULL:
32890b98308613 Marc Dietrich 2011-05-19 285 val->intval = power->charge_last_full;
32890b98308613 Marc Dietrich 2011-05-19 286 break;
32890b98308613 Marc Dietrich 2011-05-19 287 case POWER_SUPPLY_PROP_CHARGE_EMPTY:
32890b98308613 Marc Dietrich 2011-05-19 288 val->intval = power->critical_capacity;
32890b98308613 Marc Dietrich 2011-05-19 289 break;
32890b98308613 Marc Dietrich 2011-05-19 290 case POWER_SUPPLY_PROP_CHARGE_NOW:
32890b98308613 Marc Dietrich 2011-05-19 291 val->intval = power->capacity_remain;
32890b98308613 Marc Dietrich 2011-05-19 292 break;
32890b98308613 Marc Dietrich 2011-05-19 293 case POWER_SUPPLY_PROP_TEMP:
32890b98308613 Marc Dietrich 2011-05-19 294 val->intval = power->bat_temperature;
32890b98308613 Marc Dietrich 2011-05-19 295 break;
32890b98308613 Marc Dietrich 2011-05-19 296 case POWER_SUPPLY_PROP_MANUFACTURER:
32890b98308613 Marc Dietrich 2011-05-19 297 val->strval = power->bat_manu;
32890b98308613 Marc Dietrich 2011-05-19 298 break;
32890b98308613 Marc Dietrich 2011-05-19 299 case POWER_SUPPLY_PROP_MODEL_NAME:
32890b98308613 Marc Dietrich 2011-05-19 300 val->strval = power->bat_model;
32890b98308613 Marc Dietrich 2011-05-19 301 break;
32890b98308613 Marc Dietrich 2011-05-19 302 case POWER_SUPPLY_PROP_TECHNOLOGY:
32890b98308613 Marc Dietrich 2011-05-19 303 val->intval = power->bat_type_enum;
32890b98308613 Marc Dietrich 2011-05-19 304 break;
32890b98308613 Marc Dietrich 2011-05-19 305 default:
32890b98308613 Marc Dietrich 2011-05-19 306 return -EINVAL;
32890b98308613 Marc Dietrich 2011-05-19 307 }
32890b98308613 Marc Dietrich 2011-05-19 308 return 0;
32890b98308613 Marc Dietrich 2011-05-19 309 }
32890b98308613 Marc Dietrich 2011-05-19 310
32890b98308613 Marc Dietrich 2011-05-19 311 static enum power_supply_property nvec_power_props[] = {
32890b98308613 Marc Dietrich 2011-05-19 312 POWER_SUPPLY_PROP_ONLINE,
32890b98308613 Marc Dietrich 2011-05-19 313 };
32890b98308613 Marc Dietrich 2011-05-19 314
32890b98308613 Marc Dietrich 2011-05-19 315 static enum power_supply_property nvec_battery_props[] = {
32890b98308613 Marc Dietrich 2011-05-19 316 POWER_SUPPLY_PROP_STATUS,
32890b98308613 Marc Dietrich 2011-05-19 317 POWER_SUPPLY_PROP_PRESENT,
32890b98308613 Marc Dietrich 2011-05-19 318 POWER_SUPPLY_PROP_CAPACITY,
32890b98308613 Marc Dietrich 2011-05-19 319 POWER_SUPPLY_PROP_VOLTAGE_NOW,
32890b98308613 Marc Dietrich 2011-05-19 320 POWER_SUPPLY_PROP_CURRENT_NOW,
32890b98308613 Marc Dietrich 2011-05-19 321 #ifdef EC_FULL_DIAG
32890b98308613 Marc Dietrich 2011-05-19 322 POWER_SUPPLY_PROP_CURRENT_AVG,
32890b98308613 Marc Dietrich 2011-05-19 323 POWER_SUPPLY_PROP_TEMP,
32890b98308613 Marc Dietrich 2011-05-19 324 POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW,
32890b98308613 Marc Dietrich 2011-05-19 325 #endif
32890b98308613 Marc Dietrich 2011-05-19 326 POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
32890b98308613 Marc Dietrich 2011-05-19 327 POWER_SUPPLY_PROP_CHARGE_FULL,
32890b98308613 Marc Dietrich 2011-05-19 328 POWER_SUPPLY_PROP_CHARGE_EMPTY,
32890b98308613 Marc Dietrich 2011-05-19 329 POWER_SUPPLY_PROP_CHARGE_NOW,
32890b98308613 Marc Dietrich 2011-05-19 330 POWER_SUPPLY_PROP_MANUFACTURER,
32890b98308613 Marc Dietrich 2011-05-19 331 POWER_SUPPLY_PROP_MODEL_NAME,
32890b98308613 Marc Dietrich 2011-05-19 332 POWER_SUPPLY_PROP_TECHNOLOGY,
32890b98308613 Marc Dietrich 2011-05-19 333 };
32890b98308613 Marc Dietrich 2011-05-19 334
32890b98308613 Marc Dietrich 2011-05-19 335 static char *nvec_power_supplied_to[] = {
32890b98308613 Marc Dietrich 2011-05-19 336 "battery",
32890b98308613 Marc Dietrich 2011-05-19 337 };
32890b98308613 Marc Dietrich 2011-05-19 338
297d716f6260cc Krzysztof Kozlowski 2015-03-12 339 static const struct power_supply_desc nvec_bat_psy_desc = {
32890b98308613 Marc Dietrich 2011-05-19 340 .name = "battery",
32890b98308613 Marc Dietrich 2011-05-19 341 .type = POWER_SUPPLY_TYPE_BATTERY,
32890b98308613 Marc Dietrich 2011-05-19 342 .properties = nvec_battery_props,
32890b98308613 Marc Dietrich 2011-05-19 343 .num_properties = ARRAY_SIZE(nvec_battery_props),
32890b98308613 Marc Dietrich 2011-05-19 @344 .get_property = nvec_battery_get_property,
32890b98308613 Marc Dietrich 2011-05-19 345 };
32890b98308613 Marc Dietrich 2011-05-19 346
297d716f6260cc Krzysztof Kozlowski 2015-03-12 347 static const struct power_supply_desc nvec_psy_desc = {
32890b98308613 Marc Dietrich 2011-05-19 348 .name = "ac",
32890b98308613 Marc Dietrich 2011-05-19 349 .type = POWER_SUPPLY_TYPE_MAINS,
32890b98308613 Marc Dietrich 2011-05-19 350 .properties = nvec_power_props,
32890b98308613 Marc Dietrich 2011-05-19 351 .num_properties = ARRAY_SIZE(nvec_power_props),
32890b98308613 Marc Dietrich 2011-05-19 352 .get_property = nvec_power_get_property,
32890b98308613 Marc Dietrich 2011-05-19 353 };
32890b98308613 Marc Dietrich 2011-05-19 354
162c7d8c4be2d5 Marc Dietrich 2011-09-27 355 static int counter;
dc31fc6ce69e03 Fatih Yildirim 2021-02-12 356 static const int bat_iter[] = {
32890b98308613 Marc Dietrich 2011-05-19 357 SLOT_STATUS, VOLTAGE, CURRENT, CAPACITY_REMAINING,
32890b98308613 Marc Dietrich 2011-05-19 358 #ifdef EC_FULL_DIAG
32890b98308613 Marc Dietrich 2011-05-19 359 AVERAGE_CURRENT, TEMPERATURE, TIME_REMAINING,
32890b98308613 Marc Dietrich 2011-05-19 360 #endif
32890b98308613 Marc Dietrich 2011-05-19 361 };
32890b98308613 Marc Dietrich 2011-05-19 362
32890b98308613 Marc Dietrich 2011-05-19 @363 static void nvec_power_poll(struct work_struct *work)
32890b98308613 Marc Dietrich 2011-05-19 364 {
93eff83ff1640b Marc Dietrich 2013-01-27 365 char buf[] = { NVEC_SYS, GET_SYSTEM_STATUS };
32890b98308613 Marc Dietrich 2011-05-19 366 struct nvec_power *power = container_of(work, struct nvec_power,
32890b98308613 Marc Dietrich 2011-05-19 367 poller.work);
32890b98308613 Marc Dietrich 2011-05-19 368
32890b98308613 Marc Dietrich 2011-05-19 369 if (counter >= ARRAY_SIZE(bat_iter))
32890b98308613 Marc Dietrich 2011-05-19 370 counter = 0;
32890b98308613 Marc Dietrich 2011-05-19 371
32890b98308613 Marc Dietrich 2011-05-19 372 /* AC status via sys req */
32890b98308613 Marc Dietrich 2011-05-19 373 nvec_write_async(power->nvec, buf, 2);
32890b98308613 Marc Dietrich 2011-05-19 374 msleep(100);
32890b98308613 Marc Dietrich 2011-05-19 375
66ad85d13f56b4 Simon Guinot 2015-12-09 376 /*
66ad85d13f56b4 Simon Guinot 2015-12-09 377 * Select a battery request function via round robin doing it all at
66ad85d13f56b4 Simon Guinot 2015-12-09 378 * once seems to overload the power supply.
66ad85d13f56b4 Simon Guinot 2015-12-09 379 */
93eff83ff1640b Marc Dietrich 2013-01-27 380 buf[0] = NVEC_BAT;
32890b98308613 Marc Dietrich 2011-05-19 381 buf[1] = bat_iter[counter++];
32890b98308613 Marc Dietrich 2011-05-19 382 nvec_write_async(power->nvec, buf, 2);
32890b98308613 Marc Dietrich 2011-05-19 383
32890b98308613 Marc Dietrich 2011-05-19 384 schedule_delayed_work(to_delayed_work(work), msecs_to_jiffies(5000));
32890b98308613 Marc Dietrich 2011-05-19 385 };
32890b98308613 Marc Dietrich 2011-05-19 386
46620803c309d2 Bill Pemberton 2012-11-19 @387 static int nvec_power_probe(struct platform_device *pdev)
32890b98308613 Marc Dietrich 2011-05-19 388 {
297d716f6260cc Krzysztof Kozlowski 2015-03-12 389 struct power_supply **psy;
297d716f6260cc Krzysztof Kozlowski 2015-03-12 390 const struct power_supply_desc *psy_desc;
f5e3352e5185ef Marc Dietrich 2012-06-24 391 struct nvec_power *power;
32890b98308613 Marc Dietrich 2011-05-19 392 struct nvec_chip *nvec = dev_get_drvdata(pdev->dev.parent);
2dc9215d7c94f7 Krzysztof Kozlowski 2015-03-12 393 struct power_supply_config psy_cfg = {};
32890b98308613 Marc Dietrich 2011-05-19 394
f5e3352e5185ef Marc Dietrich 2012-06-24 395 power = devm_kzalloc(&pdev->dev, sizeof(struct nvec_power), GFP_NOWAIT);
4c42d979816a0b Somya Anand 2015-03-16 396 if (!power)
f5e3352e5185ef Marc Dietrich 2012-06-24 397 return -ENOMEM;
f5e3352e5185ef Marc Dietrich 2012-06-24 398
32890b98308613 Marc Dietrich 2011-05-19 399 dev_set_drvdata(&pdev->dev, power);
32890b98308613 Marc Dietrich 2011-05-19 400 power->nvec = nvec;
32890b98308613 Marc Dietrich 2011-05-19 401
32890b98308613 Marc Dietrich 2011-05-19 402 switch (pdev->id) {
32890b98308613 Marc Dietrich 2011-05-19 403 case AC:
32890b98308613 Marc Dietrich 2011-05-19 404 psy = &nvec_psy;
297d716f6260cc Krzysztof Kozlowski 2015-03-12 405 psy_desc = &nvec_psy_desc;
2dc9215d7c94f7 Krzysztof Kozlowski 2015-03-12 406 psy_cfg.supplied_to = nvec_power_supplied_to;
2dc9215d7c94f7 Krzysztof Kozlowski 2015-03-12 407 psy_cfg.num_supplicants = ARRAY_SIZE(nvec_power_supplied_to);
32890b98308613 Marc Dietrich 2011-05-19 408
32890b98308613 Marc Dietrich 2011-05-19 409 power->notifier.notifier_call = nvec_power_notifier;
32890b98308613 Marc Dietrich 2011-05-19 410
32890b98308613 Marc Dietrich 2011-05-19 411 INIT_DELAYED_WORK(&power->poller, nvec_power_poll);
32890b98308613 Marc Dietrich 2011-05-19 412 schedule_delayed_work(&power->poller, msecs_to_jiffies(5000));
32890b98308613 Marc Dietrich 2011-05-19 413 break;
32890b98308613 Marc Dietrich 2011-05-19 414 case BAT:
32890b98308613 Marc Dietrich 2011-05-19 415 psy = &nvec_bat_psy;
297d716f6260cc Krzysztof Kozlowski 2015-03-12 416 psy_desc = &nvec_bat_psy_desc;
32890b98308613 Marc Dietrich 2011-05-19 417
32890b98308613 Marc Dietrich 2011-05-19 418 power->notifier.notifier_call = nvec_power_bat_notifier;
32890b98308613 Marc Dietrich 2011-05-19 419 break;
32890b98308613 Marc Dietrich 2011-05-19 420 default:
32890b98308613 Marc Dietrich 2011-05-19 421 return -ENODEV;
32890b98308613 Marc Dietrich 2011-05-19 422 }
32890b98308613 Marc Dietrich 2011-05-19 423
32890b98308613 Marc Dietrich 2011-05-19 424 nvec_register_notifier(nvec, &power->notifier, NVEC_SYS);
32890b98308613 Marc Dietrich 2011-05-19 425
32890b98308613 Marc Dietrich 2011-05-19 426 if (pdev->id == BAT)
32890b98308613 Marc Dietrich 2011-05-19 427 get_bat_mfg_data(power);
32890b98308613 Marc Dietrich 2011-05-19 428
297d716f6260cc Krzysztof Kozlowski 2015-03-12 429 *psy = power_supply_register(&pdev->dev, psy_desc, &psy_cfg);
297d716f6260cc Krzysztof Kozlowski 2015-03-12 430
297d716f6260cc Krzysztof Kozlowski 2015-03-12 431 return PTR_ERR_OR_ZERO(*psy);
32890b98308613 Marc Dietrich 2011-05-19 432 }
32890b98308613 Marc Dietrich 2011-05-19 433
f1e870c45be5b6 Uwe Kleine-König 2023-04-03 @434 static void nvec_power_remove(struct platform_device *pdev)
3cdde3a3d55e64 Marc Dietrich 2012-06-24 435 {
3cdde3a3d55e64 Marc Dietrich 2012-06-24 436 struct nvec_power *power = platform_get_drvdata(pdev);
3cdde3a3d55e64 Marc Dietrich 2012-06-24 437
3cdde3a3d55e64 Marc Dietrich 2012-06-24 438 cancel_delayed_work_sync(&power->poller);
c2b62f60f67e03 Marc Dietrich 2013-04-29 439 nvec_unregister_notifier(power->nvec, &power->notifier);
3cdde3a3d55e64 Marc Dietrich 2012-06-24 440 switch (pdev->id) {
3cdde3a3d55e64 Marc Dietrich 2012-06-24 441 case AC:
297d716f6260cc Krzysztof Kozlowski 2015-03-12 442 power_supply_unregister(nvec_psy);
3cdde3a3d55e64 Marc Dietrich 2012-06-24 443 break;
3cdde3a3d55e64 Marc Dietrich 2012-06-24 444 case BAT:
297d716f6260cc Krzysztof Kozlowski 2015-03-12 445 power_supply_unregister(nvec_bat_psy);
3cdde3a3d55e64 Marc Dietrich 2012-06-24 446 }
3cdde3a3d55e64 Marc Dietrich 2012-06-24 447 }
3cdde3a3d55e64 Marc Dietrich 2012-06-24 448
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next prev parent reply other threads:[~2026-03-30 9:36 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-29 21:08 [PATCH v2] staging: nvec: validate battery response length before memcpy Sebastian Josue Alba Vives
2026-03-30 5:49 ` Greg KH
2026-03-30 9:36 ` kernel test robot [this message]
-- strict thread matches above, loose matches on Subject: below --
2026-03-30 6:09 Sebastian Josue Alba Vives
2026-03-30 23:05 ` kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202603301722.axpoITcy-lkp@intel.com \
--to=lkp@intel.com \
--cc=ac100@lists.launchpad.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=marvin24@gmx.de \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=sebasjosue84@gmail.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.