Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'for-v3.11' of git://git.infradead.org/battery-2.6

Pull battery subsystem update from Anton Vorontsov:
"Nothing exciting this time, just assorted fixes and cleanups"

* tag 'for-v3.11' of git://git.infradead.org/battery-2.6: (25 commits)
charger-manager: Fix regulator_get() return check
charger-manager: Fix a bug when it unregisters notifier block of extcon
tps65090-charger: Add dt node to power_supply
sbs-battery: Add dt to power_supply struct
power_supply: Add of_node_put to fix refcount
power_supply: Move of_node out of the #ifdef CONFIG_OF
power/reset: Make the vexpress driver optional on arm and arm64
charger-manager: Add missing newlines, fix a couple of typos, add pr_fmt
tps65090-charger: Fix AC detect
MAINTAINERS: Update email address for Anton Vorontsov
charger-manager: Ensure event is not used as format string
power_supply: Replace strict_strtoul() with kstrtoul()
generic-adc-battery: Fix checking if none of the channels are supported
power: Use platform_{get,set}_drvdata()
pm2301_charger: Return error if create_singlethread_workqueue fails
pm2301_charger: Fix NULL pointer dereference
lp8727_charger: Support the device tree feature
twl4030_charger: Remove unnecessary platform_set_drvdata()
rx51_battery: Remove unnecessary platform_set_drvdata()
jz4740-battery: Remove unnecessary platform_set_drvdata()
...

+241 -130
+44
Documentation/devicetree/bindings/power_supply/lp8727_charger.txt
··· 1 + Binding for TI/National Semiconductor LP8727 Charger 2 + 3 + Required properties: 4 + - compatible: "ti,lp8727" 5 + - reg: I2C slave address 27h 6 + 7 + Optional properties: 8 + - interrupt-parent: interrupt controller node (see interrupt binding[0]) 9 + - interrupts: interrupt specifier (see interrupt binding[0]) 10 + - debounce-ms: interrupt debounce time. (u32) 11 + 12 + AC and USB charging parameters 13 + - charger-type: "ac" or "usb" (string) 14 + - eoc-level: value of 'enum lp8727_eoc_level' (u8) 15 + - charging-current: value of 'enum lp8727_ichg' (u8) 16 + 17 + [0]: Documentation/devicetree/bindings/interrupt-controller/interrupts.txt 18 + 19 + Example) 20 + 21 + lp8727@27 { 22 + compatible = "ti,lp8727"; 23 + reg = <0x27>; 24 + 25 + /* GPIO 134 is used for LP8728 interrupt pin */ 26 + interrupt-parent = <&gpio5>; /* base = 128 */ 27 + interrupts = <6 0x2>; /* offset = 6, falling edge type */ 28 + 29 + debounce-ms = <300>; 30 + 31 + /* AC charger: 5% EOC and 500mA charging current */ 32 + ac { 33 + charger-type = "ac"; 34 + eoc-level = /bits/ 8 <0>; 35 + charging-current = /bits/ 8 <4>; 36 + }; 37 + 38 + /* USB charger: 10% EOC and 400mA charging current */ 39 + usb { 40 + charger-type = "usb"; 41 + eoc-level = /bits/ 8 <1>; 42 + charging-current = /bits/ 8 <2>; 43 + }; 44 + };
+4 -4
MAINTAINERS
··· 752 752 F: arch/arm/mach-highbank/ 753 753 754 754 ARM/CAVIUM NETWORKS CNS3XXX MACHINE SUPPORT 755 - M: Anton Vorontsov <avorontsov@mvista.com> 755 + M: Anton Vorontsov <anton@enomsg.org> 756 756 S: Maintained 757 757 F: arch/arm/mach-cns3xxx/ 758 758 T: git git://git.infradead.org/users/cbou/linux-cns3xxx.git ··· 6406 6406 F: kernel/*timer* 6407 6407 6408 6408 POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS 6409 - M: Anton Vorontsov <cbou@mail.ru> 6409 + M: Anton Vorontsov <anton@enomsg.org> 6410 6410 M: David Woodhouse <dwmw2@infradead.org> 6411 6411 T: git git://git.infradead.org/battery-2.6.git 6412 6412 S: Maintained ··· 6516 6516 F: drivers/block/ps3vram.c 6517 6517 6518 6518 PSTORE FILESYSTEM 6519 - M: Anton Vorontsov <cbouatmailru@gmail.com> 6519 + M: Anton Vorontsov <anton@enomsg.org> 6520 6520 M: Colin Cross <ccross@android.com> 6521 6521 M: Kees Cook <keescook@chromium.org> 6522 6522 M: Tony Luck <tony.luck@intel.com> ··· 7214 7214 F: drivers/mmc/host/sdhci-pltfm.[ch] 7215 7215 7216 7216 SECURE DIGITAL HOST CONTROLLER INTERFACE, OPEN FIRMWARE BINDINGS (SDHCI-OF) 7217 - M: Anton Vorontsov <avorontsov@ru.mvista.com> 7217 + M: Anton Vorontsov <anton@enomsg.org> 7218 7218 L: linuxppc-dev@lists.ozlabs.org 7219 7219 L: linux-mmc@vger.kernel.org 7220 7220 S: Maintained
-1
drivers/power/88pm860x_battery.c
··· 992 992 free_irq(info->irq_batt, info); 993 993 free_irq(info->irq_cc, info); 994 994 power_supply_unregister(&info->battery); 995 - platform_set_drvdata(pdev, NULL); 996 995 return 0; 997 996 } 998 997
-1
drivers/power/88pm860x_charger.c
··· 722 722 struct pm860x_charger_info *info = platform_get_drvdata(pdev); 723 723 int i; 724 724 725 - platform_set_drvdata(pdev, NULL); 726 725 power_supply_unregister(&info->usb); 727 726 free_irq(info->irq[0], info); 728 727 for (i = 0; i < info->irq_nums; i++)
-1
drivers/power/ab8500_btemp.c
··· 1045 1045 1046 1046 flush_scheduled_work(); 1047 1047 power_supply_unregister(&di->btemp_psy); 1048 - platform_set_drvdata(pdev, NULL); 1049 1048 1050 1049 return 0; 1051 1050 }
-2
drivers/power/ab8500_charger.c
··· 3425 3425 if (di->ac_chg.enabled && !di->ac_chg.external) 3426 3426 power_supply_unregister(&di->ac_chg.psy); 3427 3427 3428 - platform_set_drvdata(pdev, NULL); 3429 - 3430 3428 return 0; 3431 3429 } 3432 3430
+3 -4
drivers/power/ab8500_fg.c
··· 2465 2465 size_t count) 2466 2466 { 2467 2467 unsigned long charge_full; 2468 - ssize_t ret = -EINVAL; 2468 + ssize_t ret; 2469 2469 2470 - ret = strict_strtoul(buf, 10, &charge_full); 2470 + ret = kstrtoul(buf, 10, &charge_full); 2471 2471 2472 2472 dev_dbg(di->dev, "Ret %zd charge_full %lu", ret, charge_full); 2473 2473 ··· 2489 2489 unsigned long charge_now; 2490 2490 ssize_t ret; 2491 2491 2492 - ret = strict_strtoul(buf, 10, &charge_now); 2492 + ret = kstrtoul(buf, 10, &charge_now); 2493 2493 2494 2494 dev_dbg(di->dev, "Ret %zd charge_now %lu was %d", 2495 2495 ret, charge_now, di->bat_cap.prev_mah); ··· 3070 3070 flush_scheduled_work(); 3071 3071 ab8500_fg_sysfs_psy_remove_attrs(di->fg_psy.dev); 3072 3072 power_supply_unregister(&di->fg_psy); 3073 - platform_set_drvdata(pdev, NULL); 3074 3073 return ret; 3075 3074 } 3076 3075
-1
drivers/power/abx500_chargalg.c
··· 2035 2035 destroy_workqueue(di->chargalg_wq); 2036 2036 2037 2037 power_supply_unregister(&di->chargalg_psy); 2038 - platform_set_drvdata(pdev, NULL); 2039 2038 2040 2039 return 0; 2041 2040 }
-2
drivers/power/bq27x00_battery.c
··· 966 966 return 0; 967 967 968 968 err_free: 969 - platform_set_drvdata(pdev, NULL); 970 969 kfree(di); 971 970 972 971 return ret; ··· 977 978 978 979 bq27x00_powersupply_unregister(di); 979 980 980 - platform_set_drvdata(pdev, NULL); 981 981 kfree(di); 982 982 983 983 return 0;
+62 -84
drivers/power/charger-manager.c
··· 12 12 * published by the Free Software Foundation. 13 13 **/ 14 14 15 + #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 16 + 15 17 #include <linux/io.h> 16 18 #include <linux/module.h> 17 19 #include <linux/irq.h> ··· 197 195 cm->charger_stat[i], 198 196 POWER_SUPPLY_PROP_ONLINE, &val); 199 197 if (ret) { 200 - dev_warn(cm->dev, "Cannot read ONLINE value from %s.\n", 201 - cm->desc->psy_charger_stat[i]); 198 + dev_warn(cm->dev, "Cannot read ONLINE value from %s\n", 199 + cm->desc->psy_charger_stat[i]); 202 200 continue; 203 201 } 204 202 if (val.intval == 0) ··· 212 210 cm->charger_stat[i], 213 211 POWER_SUPPLY_PROP_STATUS, &val); 214 212 if (ret) { 215 - dev_warn(cm->dev, "Cannot read STATUS value from %s.\n", 216 - cm->desc->psy_charger_stat[i]); 213 + dev_warn(cm->dev, "Cannot read STATUS value from %s\n", 214 + cm->desc->psy_charger_stat[i]); 217 215 continue; 218 216 } 219 217 if (val.intval == POWER_SUPPLY_STATUS_FULL || ··· 291 289 return is_charging(cm); 292 290 default: 293 291 dev_warn(cm->dev, "Incorrect polling_mode (%d)\n", 294 - cm->desc->polling_mode); 292 + cm->desc->polling_mode); 295 293 } 296 294 297 295 return false; ··· 333 331 334 332 err = regulator_enable(desc->charger_regulators[i].consumer); 335 333 if (err < 0) { 336 - dev_warn(cm->dev, 337 - "Cannot enable %s regulator\n", 338 - desc->charger_regulators[i].regulator_name); 334 + dev_warn(cm->dev, "Cannot enable %s regulator\n", 335 + desc->charger_regulators[i].regulator_name); 339 336 } 340 337 } 341 338 } else { ··· 351 350 352 351 err = regulator_disable(desc->charger_regulators[i].consumer); 353 352 if (err < 0) { 354 - dev_warn(cm->dev, 355 - "Cannot disable %s regulator\n", 356 - desc->charger_regulators[i].regulator_name); 353 + dev_warn(cm->dev, "Cannot disable %s regulator\n", 354 + desc->charger_regulators[i].regulator_name); 357 355 } 358 356 } 359 357 ··· 365 365 desc->charger_regulators[i].consumer)) { 366 366 regulator_force_disable( 367 367 desc->charger_regulators[i].consumer); 368 - dev_warn(cm->dev, 369 - "Disable regulator(%s) forcibly.\n", 370 - desc->charger_regulators[i].regulator_name); 368 + dev_warn(cm->dev, "Disable regulator(%s) forcibly\n", 369 + desc->charger_regulators[i].regulator_name); 371 370 } 372 371 } 373 372 } ··· 449 450 strncpy(env_str, event, UEVENT_BUF_SIZE); 450 451 kobject_uevent(&cm->dev->kobj, KOBJ_CHANGE); 451 452 452 - dev_info(cm->dev, event); 453 + dev_info(cm->dev, "%s\n", event); 453 454 } 454 455 455 456 /** ··· 477 478 478 479 err = get_batt_uV(cm, &batt_uV); 479 480 if (err) { 480 - dev_err(cm->dev, "%s: get_batt_uV error(%d).\n", __func__, err); 481 + dev_err(cm->dev, "%s: get_batt_uV error(%d)\n", __func__, err); 481 482 return; 482 483 } 483 484 ··· 485 486 if (diff < 0) 486 487 return; 487 488 488 - dev_info(cm->dev, "VBATT dropped %duV after full-batt.\n", diff); 489 + dev_info(cm->dev, "VBATT dropped %duV after full-batt\n", diff); 489 490 490 491 if (diff > desc->fullbatt_vchkdrop_uV) { 491 492 try_charger_restart(cm); ··· 518 519 duration = curr - cm->charging_start_time; 519 520 520 521 if (duration > desc->charging_max_duration_ms) { 521 - dev_info(cm->dev, "Charging duration exceed %lldms", 522 + dev_info(cm->dev, "Charging duration exceed %lldms\n", 522 523 desc->charging_max_duration_ms); 523 524 uevent_notify(cm, "Discharging"); 524 525 try_charger_enable(cm, false); ··· 529 530 530 531 if (duration > desc->charging_max_duration_ms && 531 532 is_ext_pwr_online(cm)) { 532 - dev_info(cm->dev, "DisCharging duration exceed %lldms", 533 + dev_info(cm->dev, "Discharging duration exceed %lldms\n", 533 534 desc->discharging_max_duration_ms); 534 - uevent_notify(cm, "Recharing"); 535 + uevent_notify(cm, "Recharging"); 535 536 try_charger_enable(cm, true); 536 537 ret = true; 537 538 } ··· 578 579 */ 579 580 } else if (!cm->emergency_stop && check_charging_duration(cm)) { 580 581 dev_dbg(cm->dev, 581 - "Charging/Discharging duration is out of range"); 582 + "Charging/Discharging duration is out of range\n"); 582 583 /* 583 584 * Check dropped voltage of battery. If battery voltage is more 584 585 * dropped than fullbatt_vchkdrop_uV after fully charged state, ··· 594 595 */ 595 596 } else if (!cm->emergency_stop && is_full_charged(cm) && 596 597 cm->charger_enabled) { 597 - dev_info(cm->dev, "EVENT_HANDLE: Battery Fully Charged.\n"); 598 + dev_info(cm->dev, "EVENT_HANDLE: Battery Fully Charged\n"); 598 599 uevent_notify(cm, default_event_names[CM_EVENT_BATT_FULL]); 599 600 600 601 try_charger_enable(cm, false); ··· 724 725 cm->fullbatt_vchk_jiffies_at = 1; 725 726 726 727 out: 727 - dev_info(cm->dev, "EVENT_HANDLE: Battery Fully Charged.\n"); 728 + dev_info(cm->dev, "EVENT_HANDLE: Battery Fully Charged\n"); 728 729 uevent_notify(cm, default_event_names[CM_EVENT_BATT_FULL]); 729 730 } 730 731 ··· 971 972 mutex_unlock(&cm_list_mtx); 972 973 973 974 if (wakeup_ms < UINT_MAX && wakeup_ms > 0) { 974 - pr_info("Charger Manager wakeup timer: %u ms.\n", wakeup_ms); 975 + pr_info("Charger Manager wakeup timer: %u ms\n", wakeup_ms); 975 976 if (rtc_dev) { 976 977 struct rtc_wkalrm tmp; 977 978 unsigned long time, now; ··· 1004 1005 ret = false; 1005 1006 } 1006 1007 1007 - pr_info("Waking up after %lu secs.\n", 1008 - time - now); 1008 + pr_info("Waking up after %lu secs\n", time - now); 1009 1009 1010 1010 rtc_time_to_tm(time, &tmp.time); 1011 1011 rtc_set_alarm(rtc_dev, &tmp); ··· 1099 1101 g_desc = NULL; 1100 1102 1101 1103 if (!gd->rtc_only_wakeup) { 1102 - pr_err("The callback rtc_only_wakeup is not given.\n"); 1104 + pr_err("The callback rtc_only_wakeup is not given\n"); 1103 1105 return -EINVAL; 1104 1106 } 1105 1107 ··· 1110 1112 /* Retry at probe. RTC may be not registered yet */ 1111 1113 } 1112 1114 } else { 1113 - pr_warn("No wakeup timer is given for charger manager." 1115 + pr_warn("No wakeup timer is given for charger manager. " 1114 1116 "In-suspend monitoring won't work.\n"); 1115 1117 } 1116 1118 ··· 1136 1138 cable->min_uA, cable->max_uA); 1137 1139 if (ret < 0) { 1138 1140 pr_err("Cannot set current limit of %s (%s)\n", 1139 - cable->charger->regulator_name, cable->name); 1141 + cable->charger->regulator_name, cable->name); 1140 1142 return; 1141 1143 } 1142 1144 1143 1145 pr_info("Set current limit of %s : %duA ~ %duA\n", 1144 - cable->charger->regulator_name, 1145 - cable->min_uA, cable->max_uA); 1146 + cable->charger->regulator_name, 1147 + cable->min_uA, cable->max_uA); 1146 1148 } 1147 1149 1148 1150 try_charger_enable(cable->cm, cable->attached); ··· 1208 1210 ret = extcon_register_interest(&cable->extcon_dev, 1209 1211 cable->extcon_name, cable->name, &cable->nb); 1210 1212 if (ret < 0) { 1211 - pr_info("Cannot register extcon_dev for %s(cable: %s).\n", 1212 - cable->extcon_name, 1213 - cable->name); 1213 + pr_info("Cannot register extcon_dev for %s(cable: %s)\n", 1214 + cable->extcon_name, cable->name); 1214 1215 ret = -EINVAL; 1215 1216 } 1216 1217 ··· 1239 1242 1240 1243 charger->consumer = regulator_get(cm->dev, 1241 1244 charger->regulator_name); 1242 - if (charger->consumer == NULL) { 1243 - dev_err(cm->dev, "Cannot find charger(%s)n", 1244 - charger->regulator_name); 1245 - ret = -EINVAL; 1246 - goto err; 1245 + if (IS_ERR(charger->consumer)) { 1246 + dev_err(cm->dev, "Cannot find charger(%s)\n", 1247 + charger->regulator_name); 1248 + return PTR_ERR(charger->consumer); 1247 1249 } 1248 1250 charger->cm = cm; 1249 1251 ··· 1251 1255 1252 1256 ret = charger_extcon_init(cm, cable); 1253 1257 if (ret < 0) { 1254 - dev_err(cm->dev, "Cannot initialize charger(%s)n", 1255 - charger->regulator_name); 1258 + dev_err(cm->dev, "Cannot initialize charger(%s)\n", 1259 + charger->regulator_name); 1256 1260 goto err; 1257 1261 } 1258 1262 cable->charger = charger; ··· 1343 1347 } 1344 1348 } else { 1345 1349 dev_warn(cm->dev, 1346 - "'%s' regulator should be controlled " 1347 - "in charger-manager because charger-manager " 1348 - "must need at least one charger for charging\n", 1349 - charger->regulator_name); 1350 + "'%s' regulator should be controlled in charger-manager because charger-manager must need at least one charger for charging\n", 1351 + charger->regulator_name); 1350 1352 } 1351 1353 1352 1354 return count; ··· 1380 1386 snprintf(buf, 10, "charger.%d", i); 1381 1387 str = kzalloc(sizeof(char) * (strlen(buf) + 1), GFP_KERNEL); 1382 1388 if (!str) { 1383 - dev_err(cm->dev, "Cannot allocate memory: %s\n", 1384 - charger->regulator_name); 1385 1389 ret = -ENOMEM; 1386 1390 goto err; 1387 1391 } ··· 1415 1423 !chargers_externally_control) 1416 1424 chargers_externally_control = 0; 1417 1425 1418 - dev_info(cm->dev, "'%s' regulator's externally_control" 1419 - "is %d\n", charger->regulator_name, 1420 - charger->externally_control); 1426 + dev_info(cm->dev, "'%s' regulator's externally_control is %d\n", 1427 + charger->regulator_name, charger->externally_control); 1421 1428 1422 1429 ret = sysfs_create_group(&cm->charger_psy.dev->kobj, 1423 1430 &charger->attr_g); 1424 1431 if (ret < 0) { 1425 - dev_err(cm->dev, "Cannot create sysfs entry" 1426 - "of %s regulator\n", 1427 - charger->regulator_name); 1432 + dev_err(cm->dev, "Cannot create sysfs entry of %s regulator\n", 1433 + charger->regulator_name); 1428 1434 ret = -EINVAL; 1429 1435 goto err; 1430 1436 } 1431 1437 } 1432 1438 1433 1439 if (chargers_externally_control) { 1434 - dev_err(cm->dev, "Cannot register regulator because " 1435 - "charger-manager must need at least " 1436 - "one charger for charging battery\n"); 1437 - 1440 + dev_err(cm->dev, "Cannot register regulator because charger-manager must need at least one charger for charging battery\n"); 1438 1441 ret = -EINVAL; 1439 1442 goto err; 1440 1443 } ··· 1450 1463 rtc_dev = rtc_class_open(g_desc->rtc_name); 1451 1464 if (IS_ERR_OR_NULL(rtc_dev)) { 1452 1465 rtc_dev = NULL; 1453 - dev_err(&pdev->dev, "Cannot get RTC %s.\n", 1466 + dev_err(&pdev->dev, "Cannot get RTC %s\n", 1454 1467 g_desc->rtc_name); 1455 1468 ret = -ENODEV; 1456 1469 goto err_alloc; ··· 1458 1471 } 1459 1472 1460 1473 if (!desc) { 1461 - dev_err(&pdev->dev, "No platform data (desc) found.\n"); 1474 + dev_err(&pdev->dev, "No platform data (desc) found\n"); 1462 1475 ret = -ENODEV; 1463 1476 goto err_alloc; 1464 1477 } 1465 1478 1466 1479 cm = kzalloc(sizeof(struct charger_manager), GFP_KERNEL); 1467 1480 if (!cm) { 1468 - dev_err(&pdev->dev, "Cannot allocate memory.\n"); 1469 1481 ret = -ENOMEM; 1470 1482 goto err_alloc; 1471 1483 } ··· 1473 1487 cm->dev = &pdev->dev; 1474 1488 cm->desc = kmemdup(desc, sizeof(struct charger_desc), GFP_KERNEL); 1475 1489 if (!cm->desc) { 1476 - dev_err(&pdev->dev, "Cannot allocate memory.\n"); 1477 1490 ret = -ENOMEM; 1478 1491 goto err_alloc_desc; 1479 1492 } ··· 1483 1498 * Users may intentionally ignore those two features. 1484 1499 */ 1485 1500 if (desc->fullbatt_uV == 0) { 1486 - dev_info(&pdev->dev, "Ignoring full-battery voltage threshold" 1487 - " as it is not supplied."); 1501 + dev_info(&pdev->dev, "Ignoring full-battery voltage threshold as it is not supplied\n"); 1488 1502 } 1489 1503 if (!desc->fullbatt_vchkdrop_ms || !desc->fullbatt_vchkdrop_uV) { 1490 - dev_info(&pdev->dev, "Disabling full-battery voltage drop " 1491 - "checking mechanism as it is not supplied."); 1504 + dev_info(&pdev->dev, "Disabling full-battery voltage drop checking mechanism as it is not supplied\n"); 1492 1505 desc->fullbatt_vchkdrop_ms = 0; 1493 1506 desc->fullbatt_vchkdrop_uV = 0; 1494 1507 } 1495 1508 if (desc->fullbatt_soc == 0) { 1496 - dev_info(&pdev->dev, "Ignoring full-battery soc(state of" 1497 - " charge) threshold as it is not" 1498 - " supplied."); 1509 + dev_info(&pdev->dev, "Ignoring full-battery soc(state of charge) threshold as it is not supplied\n"); 1499 1510 } 1500 1511 if (desc->fullbatt_full_capacity == 0) { 1501 - dev_info(&pdev->dev, "Ignoring full-battery full capacity" 1502 - " threshold as it is not supplied."); 1512 + dev_info(&pdev->dev, "Ignoring full-battery full capacity threshold as it is not supplied\n"); 1503 1513 } 1504 1514 1505 1515 if (!desc->charger_regulators || desc->num_charger_regulators < 1) { 1506 1516 ret = -EINVAL; 1507 - dev_err(&pdev->dev, "charger_regulators undefined.\n"); 1517 + dev_err(&pdev->dev, "charger_regulators undefined\n"); 1508 1518 goto err_no_charger; 1509 1519 } 1510 1520 1511 1521 if (!desc->psy_charger_stat || !desc->psy_charger_stat[0]) { 1512 - dev_err(&pdev->dev, "No power supply defined.\n"); 1522 + dev_err(&pdev->dev, "No power supply defined\n"); 1513 1523 ret = -EINVAL; 1514 1524 goto err_no_charger_stat; 1515 1525 } ··· 1524 1544 cm->charger_stat[i] = power_supply_get_by_name( 1525 1545 desc->psy_charger_stat[i]); 1526 1546 if (!cm->charger_stat[i]) { 1527 - dev_err(&pdev->dev, "Cannot find power supply " 1528 - "\"%s\"\n", 1529 - desc->psy_charger_stat[i]); 1547 + dev_err(&pdev->dev, "Cannot find power supply \"%s\"\n", 1548 + desc->psy_charger_stat[i]); 1530 1549 ret = -ENODEV; 1531 1550 goto err_chg_stat; 1532 1551 } ··· 1534 1555 cm->fuel_gauge = power_supply_get_by_name(desc->psy_fuel_gauge); 1535 1556 if (!cm->fuel_gauge) { 1536 1557 dev_err(&pdev->dev, "Cannot find power supply \"%s\"\n", 1537 - desc->psy_fuel_gauge); 1558 + desc->psy_fuel_gauge); 1538 1559 ret = -ENODEV; 1539 1560 goto err_chg_stat; 1540 1561 } ··· 1554 1575 1555 1576 if (!desc->charging_max_duration_ms || 1556 1577 !desc->discharging_max_duration_ms) { 1557 - dev_info(&pdev->dev, "Cannot limit charging duration " 1558 - "checking mechanism to prevent overcharge/overheat " 1559 - "and control discharging duration"); 1578 + dev_info(&pdev->dev, "Cannot limit charging duration checking mechanism to prevent overcharge/overheat and control discharging duration\n"); 1560 1579 desc->charging_max_duration_ms = 0; 1561 1580 desc->discharging_max_duration_ms = 0; 1562 1581 } ··· 1575 1598 NUM_CHARGER_PSY_OPTIONAL), 1576 1599 GFP_KERNEL); 1577 1600 if (!cm->charger_psy.properties) { 1578 - dev_err(&pdev->dev, "Cannot allocate for psy properties.\n"); 1579 1601 ret = -ENOMEM; 1580 1602 goto err_chg_stat; 1581 1603 } ··· 1612 1636 1613 1637 ret = power_supply_register(NULL, &cm->charger_psy); 1614 1638 if (ret) { 1615 - dev_err(&pdev->dev, "Cannot register charger-manager with" 1616 - " name \"%s\".\n", cm->charger_psy.name); 1639 + dev_err(&pdev->dev, "Cannot register charger-manager with name \"%s\"\n", 1640 + cm->charger_psy.name); 1617 1641 goto err_register; 1618 1642 } 1619 1643 ··· 1665 1689 charger = &desc->charger_regulators[i]; 1666 1690 for (j = 0; j < charger->num_cables; j++) { 1667 1691 struct charger_cable *cable = &charger->cables[j]; 1668 - extcon_unregister_interest(&cable->extcon_dev); 1692 + /* Remove notifier block if only edev exists */ 1693 + if (cable->extcon_dev.edev) 1694 + extcon_unregister_interest(&cable->extcon_dev); 1669 1695 } 1670 1696 1671 1697 regulator_put(desc->charger_regulators[i].consumer); ··· 1926 1948 uevent_notify(cm, msg ? msg : default_event_names[type]); 1927 1949 break; 1928 1950 default: 1929 - dev_err(cm->dev, "%s type not specified.\n", __func__); 1951 + dev_err(cm->dev, "%s: type not specified\n", __func__); 1930 1952 break; 1931 1953 } 1932 1954 }
+3 -1
drivers/power/generic-adc-battery.c
··· 299 299 } 300 300 301 301 /* none of the channels are supported so let's bail out */ 302 - if (index == ARRAY_SIZE(gab_chan_name)) 302 + if (index == 0) { 303 + ret = -ENODEV; 303 304 goto second_mem_fail; 305 + } 304 306 305 307 /* 306 308 * Total number of properties is equal to static properties
-2
drivers/power/gpio-charger.c
··· 155 155 156 156 gpio_free(gpio_charger->pdata->gpio); 157 157 158 - platform_set_drvdata(pdev, NULL); 159 - 160 158 return 0; 161 159 } 162 160
+1 -1
drivers/power/intel_mid_battery.c
··· 756 756 757 757 static int platform_pmic_battery_remove(struct platform_device *pdev) 758 758 { 759 - struct pmic_power_module_info *pbi = dev_get_drvdata(&pdev->dev); 759 + struct pmic_power_module_info *pbi = platform_get_drvdata(pdev); 760 760 761 761 free_irq(pbi->irq, pbi); 762 762 cancel_delayed_work_sync(&pbi->monitor_battery);
+1 -3
drivers/power/jz4740-battery.c
··· 292 292 jz_battery); 293 293 if (ret) { 294 294 dev_err(&pdev->dev, "Failed to request irq %d\n", ret); 295 - goto err; 295 + return ret; 296 296 } 297 297 disable_irq(jz_battery->irq); 298 298 ··· 349 349 gpio_free(jz_battery->pdata->gpio_charge); 350 350 err_free_irq: 351 351 free_irq(jz_battery->irq, jz_battery); 352 - err: 353 - platform_set_drvdata(pdev, NULL); 354 352 return ret; 355 353 } 356 354
+68
drivers/power/lp8727_charger.c
··· 16 16 #include <linux/i2c.h> 17 17 #include <linux/power_supply.h> 18 18 #include <linux/platform_data/lp8727.h> 19 + #include <linux/of.h> 19 20 20 21 #define LP8788_NUM_INTREGS 2 21 22 #define DEFAULT_DEBOUNCE_MSEC 270 ··· 482 481 power_supply_unregister(&psy->batt); 483 482 } 484 483 484 + #ifdef CONFIG_OF 485 + static struct lp8727_chg_param 486 + *lp8727_parse_charge_pdata(struct device *dev, struct device_node *np) 487 + { 488 + struct lp8727_chg_param *param; 489 + 490 + param = devm_kzalloc(dev, sizeof(*param), GFP_KERNEL); 491 + if (!param) 492 + goto out; 493 + 494 + of_property_read_u8(np, "eoc-level", (u8 *)&param->eoc_level); 495 + of_property_read_u8(np, "charging-current", (u8 *)&param->ichg); 496 + out: 497 + return param; 498 + } 499 + 500 + static int lp8727_parse_dt(struct device *dev) 501 + { 502 + struct device_node *np = dev->of_node; 503 + struct device_node *child; 504 + struct lp8727_platform_data *pdata; 505 + const char *type; 506 + 507 + /* If charging parameter is not defined, just skip parsing the dt */ 508 + if (of_get_child_count(np) == 0) 509 + goto out; 510 + 511 + pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); 512 + if (!pdata) 513 + return -ENOMEM; 514 + 515 + of_property_read_u32(np, "debounce-ms", &pdata->debounce_msec); 516 + 517 + for_each_child_of_node(np, child) { 518 + of_property_read_string(child, "charger-type", &type); 519 + 520 + if (!strcmp(type, "ac")) 521 + pdata->ac = lp8727_parse_charge_pdata(dev, child); 522 + 523 + if (!strcmp(type, "usb")) 524 + pdata->usb = lp8727_parse_charge_pdata(dev, child); 525 + } 526 + 527 + dev->platform_data = pdata; 528 + out: 529 + return 0; 530 + } 531 + #else 532 + static int lp8727_parse_dt(struct device *dev) 533 + { 534 + return 0; 535 + } 536 + #endif 537 + 485 538 static int lp8727_probe(struct i2c_client *cl, const struct i2c_device_id *id) 486 539 { 487 540 struct lp8727_chg *pchg; ··· 543 488 544 489 if (!i2c_check_functionality(cl->adapter, I2C_FUNC_SMBUS_I2C_BLOCK)) 545 490 return -EIO; 491 + 492 + if (cl->dev.of_node) { 493 + ret = lp8727_parse_dt(&cl->dev); 494 + if (ret) 495 + return ret; 496 + } 546 497 547 498 pchg = devm_kzalloc(&cl->dev, sizeof(*pchg), GFP_KERNEL); 548 499 if (!pchg) ··· 592 531 return 0; 593 532 } 594 533 534 + static const struct of_device_id lp8727_dt_ids[] = { 535 + { .compatible = "ti,lp8727", }, 536 + { } 537 + }; 538 + MODULE_DEVICE_TABLE(of, lp8727_dt_ids); 539 + 595 540 static const struct i2c_device_id lp8727_ids[] = { 596 541 {"lp8727", 0}, 597 542 { } ··· 607 540 static struct i2c_driver lp8727_driver = { 608 541 .driver = { 609 542 .name = "lp8727", 543 + .of_match_table = of_match_ptr(lp8727_dt_ids), 610 544 }, 611 545 .probe = lp8727_probe, 612 546 .remove = lp8727_remove,
+4 -4
drivers/power/pcf50633-charger.c
··· 191 191 unsigned long ma; 192 192 int ret; 193 193 194 - ret = strict_strtoul(buf, 10, &ma); 194 + ret = kstrtoul(buf, 10, &ma); 195 195 if (ret) 196 - return -EINVAL; 196 + return ret; 197 197 198 198 pcf50633_mbc_usb_curlim_set(mbc->pcf, ma); 199 199 ··· 228 228 if (!mbc->pcf->pdata->charger_reference_current_ma) 229 229 return -ENODEV; 230 230 231 - ret = strict_strtoul(buf, 10, &ma); 231 + ret = kstrtoul(buf, 10, &ma); 232 232 if (ret) 233 - return -EINVAL; 233 + return ret; 234 234 235 235 mbcc5 = (ma << 8) / mbc->pcf->pdata->charger_reference_current_ma; 236 236 if (mbcc5 > 255)
+8 -3
drivers/power/pm2301_charger.c
··· 1007 1007 u8 val; 1008 1008 int i; 1009 1009 1010 + if (!pl_data) { 1011 + dev_err(&i2c_client->dev, "No platform data supplied\n"); 1012 + return -EINVAL; 1013 + } 1014 + 1010 1015 pm2 = kzalloc(sizeof(struct pm2xxx_charger), GFP_KERNEL); 1011 1016 if (!pm2) { 1012 - dev_err(pm2->dev, "pm2xxx_charger allocation failed\n"); 1017 + dev_err(&i2c_client->dev, "pm2xxx_charger allocation failed\n"); 1013 1018 return -ENOMEM; 1014 1019 } 1015 1020 ··· 1075 1070 pm2->ac_chg.external = true; 1076 1071 1077 1072 /* Create a work queue for the charger */ 1078 - pm2->charger_wq = 1079 - create_singlethread_workqueue("pm2xxx_charger_wq"); 1073 + pm2->charger_wq = create_singlethread_workqueue("pm2xxx_charger_wq"); 1080 1074 if (pm2->charger_wq == NULL) { 1075 + ret = -ENOMEM; 1081 1076 dev_err(pm2->dev, "failed to create work queue\n"); 1082 1077 goto free_device_info; 1083 1078 }
+4
drivers/power/power_supply_core.c
··· 109 109 psy->name, epsy->name); 110 110 psy->supplied_from[i-1] = (char *)epsy->name; 111 111 psy->num_supplies++; 112 + of_node_put(np); 112 113 break; 113 114 } 115 + of_node_put(np); 114 116 } while (np); 115 117 116 118 return 0; ··· 195 193 ret = power_supply_find_supply_from_node(np); 196 194 if (ret) { 197 195 dev_dbg(psy->dev, "Failed to find supply, defer!\n"); 196 + of_node_put(np); 198 197 return -EPROBE_DEFER; 199 198 } 199 + of_node_put(np); 200 200 } while (np); 201 201 202 202 /* All supplies found, allocate char ** array for filling */
+2 -1
drivers/power/reset/Kconfig
··· 32 32 user presses a key. u-boot then boots into Linux. 33 33 34 34 config POWER_RESET_VEXPRESS 35 - bool 35 + bool "ARM Versatile Express power-off and reset driver" 36 + depends on ARM || ARM64 36 37 depends on POWER_RESET 37 38 help 38 39 Power off and reset support for the ARM Ltd. Versatile
+1 -4
drivers/power/rx51_battery.c
··· 216 216 di->bat.get_property = rx51_battery_get_property; 217 217 218 218 ret = power_supply_register(di->dev, &di->bat); 219 - if (ret) { 220 - platform_set_drvdata(pdev, NULL); 219 + if (ret) 221 220 return ret; 222 - } 223 221 224 222 return 0; 225 223 } ··· 227 229 struct rx51_device_info *di = platform_get_drvdata(pdev); 228 230 229 231 power_supply_unregister(&di->bat); 230 - platform_set_drvdata(pdev, NULL); 231 232 232 233 return 0; 233 234 }
+1
drivers/power/sbs-battery.c
··· 704 704 chip->power_supply.properties = sbs_properties; 705 705 chip->power_supply.num_properties = ARRAY_SIZE(sbs_properties); 706 706 chip->power_supply.get_property = sbs_get_property; 707 + chip->power_supply.of_node = client->dev.of_node; 707 708 /* ignore first notification of external change, it is generated 708 709 * from the power_supply_register call back 709 710 */
+33 -7
drivers/power/tps65090-charger.c
··· 27 27 #include <linux/mfd/tps65090.h> 28 28 29 29 #define TPS65090_REG_INTR_STS 0x00 30 + #define TPS65090_REG_INTR_MASK 0x02 30 31 #define TPS65090_REG_CG_CTRL0 0x04 31 32 #define TPS65090_REG_CG_CTRL1 0x05 32 33 #define TPS65090_REG_CG_CTRL2 0x06 ··· 68 67 return 0; 69 68 } 70 69 71 - static int tps65090_enable_charging(struct tps65090_charger *charger, 72 - uint8_t enable) 70 + static int tps65090_enable_charging(struct tps65090_charger *charger) 73 71 { 74 72 int ret; 75 73 uint8_t ctrl0 = 0; ··· 84 84 ret = tps65090_write(charger->dev->parent, TPS65090_REG_CG_CTRL0, 85 85 (ctrl0 | TPS65090_CHARGER_ENABLE)); 86 86 if (ret < 0) { 87 - dev_err(charger->dev, "%s(): error reading in register 0x%x\n", 87 + dev_err(charger->dev, "%s(): error writing in register 0x%x\n", 88 88 __func__, TPS65090_REG_CG_CTRL0); 89 89 return ret; 90 90 } ··· 93 93 94 94 static int tps65090_config_charger(struct tps65090_charger *charger) 95 95 { 96 + uint8_t intrmask = 0; 96 97 int ret; 97 98 98 99 if (charger->pdata->enable_low_current_chrg) { ··· 103 102 "error configuring low charge current\n"); 104 103 return ret; 105 104 } 105 + } 106 + 107 + /* Enable the VACG interrupt for AC power detect */ 108 + ret = tps65090_read(charger->dev->parent, TPS65090_REG_INTR_MASK, 109 + &intrmask); 110 + if (ret < 0) { 111 + dev_err(charger->dev, "%s(): error reading in register 0x%x\n", 112 + __func__, TPS65090_REG_INTR_MASK); 113 + return ret; 114 + } 115 + 116 + ret = tps65090_write(charger->dev->parent, TPS65090_REG_INTR_MASK, 117 + (intrmask | TPS65090_VACG)); 118 + if (ret < 0) { 119 + dev_err(charger->dev, "%s(): error writing in register 0x%x\n", 120 + __func__, TPS65090_REG_CG_CTRL0); 121 + return ret; 106 122 } 107 123 108 124 return 0; ··· 164 146 } 165 147 166 148 if (intrsts & TPS65090_VACG) { 167 - ret = tps65090_enable_charging(charger, 1); 149 + ret = tps65090_enable_charging(charger); 168 150 if (ret < 0) 169 151 return IRQ_HANDLED; 170 152 charger->ac_online = 1; 171 153 } else { 172 154 charger->ac_online = 0; 155 + } 156 + 157 + /* Clear interrupts. */ 158 + ret = tps65090_write(charger->dev->parent, TPS65090_REG_INTR_STS, 0x00); 159 + if (ret < 0) { 160 + dev_err(charger->dev, "%s(): Error in writing reg 0x%x\n", 161 + __func__, TPS65090_REG_INTR_STS); 173 162 } 174 163 175 164 if (charger->prev_ac_online != charger->ac_online) ··· 243 218 return -ENOMEM; 244 219 } 245 220 246 - dev_set_drvdata(&pdev->dev, cdata); 221 + platform_set_drvdata(pdev, cdata); 247 222 248 223 cdata->dev = &pdev->dev; 249 224 cdata->pdata = pdata; ··· 255 230 cdata->ac.num_properties = ARRAY_SIZE(tps65090_ac_props); 256 231 cdata->ac.supplied_to = pdata->supplied_to; 257 232 cdata->ac.num_supplicants = pdata->num_supplicants; 233 + cdata->ac.of_node = pdev->dev.of_node; 258 234 259 235 ret = power_supply_register(&pdev->dev, &cdata->ac); 260 236 if (ret) { ··· 296 270 } 297 271 298 272 if (status1 != 0) { 299 - ret = tps65090_enable_charging(cdata, 1); 273 + ret = tps65090_enable_charging(cdata); 300 274 if (ret < 0) { 301 275 dev_err(cdata->dev, "error enabling charger\n"); 302 276 goto fail_free_irq; ··· 317 291 318 292 static int tps65090_charger_remove(struct platform_device *pdev) 319 293 { 320 - struct tps65090_charger *cdata = dev_get_drvdata(&pdev->dev); 294 + struct tps65090_charger *cdata = platform_get_drvdata(pdev); 321 295 322 296 devm_free_irq(cdata->dev, cdata->irq, cdata); 323 297 power_supply_unregister(&cdata->ac);
-2
drivers/power/twl4030_charger.c
··· 594 594 fail_register_usb: 595 595 power_supply_unregister(&bci->ac); 596 596 fail_register_ac: 597 - platform_set_drvdata(pdev, NULL); 598 597 kfree(bci); 599 598 600 599 return ret; ··· 621 622 free_irq(bci->irq_chg, bci); 622 623 power_supply_unregister(&bci->usb); 623 624 power_supply_unregister(&bci->ac); 624 - platform_set_drvdata(pdev, NULL); 625 625 kfree(bci); 626 626 627 627 return 0;
+2 -2
include/linux/power_supply.h
··· 162 162 const char *strval; 163 163 }; 164 164 165 + struct device_node; 166 + 165 167 struct power_supply { 166 168 const char *name; 167 169 enum power_supply_type type; ··· 175 173 176 174 char **supplied_from; 177 175 size_t num_supplies; 178 - #ifdef CONFIG_OF 179 176 struct device_node *of_node; 180 - #endif 181 177 182 178 int (*get_property)(struct power_supply *psy, 183 179 enum power_supply_property psp,