aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-10-06 21:21:15 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2016-10-06 21:21:15 -0400
commit021723e6c5a5e7b50eb68f9812418406de9860b2 (patch)
treefe22465563a9056925f0e4edd236d9a6c456e6cc
parentc6594fc6af1924b7fdce600088b10e3b3b159fb7 (diff)
parent1d72706f0485b58e151b5a7584c4c65d66670587 (diff)
Merge tag 'for-v4.9' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply
Pull power supply and reset updates from Sebastian Reichel: - move power supply drivers to drivers/power/supply - unify location of power supply DT documentation - tps65217-charger: IRQ support - act8945a-charger: misc. cleanups & improvements - sbs-battery cleanup - fix users of deprecated create_singlethread_workqueue() - misc fixes. * tag 'for-v4.9' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply: (46 commits) power: supply: bq27xxx_battery: allow kernel poll_interval parameter runtime update power: supply: sbs-battery: Cleanup removal of chip->pdata power: reset: st: Remove obsolete platforms from dt doc power: reset: st-poweroff: Remove obsolete platforms. power: reset: zx-reboot: Unmap region obtained by of_iomap power: reset: xgene-reboot: Unmap region obtained by of_iomap power: supply: ab8500: cleanup with list_first_entry_or_null() power: reset: add in missing white space in error message text sbs-battery: make writes to ManufacturerAccess optional power: bq24257: Fix use of uninitialized pointer bq->charger power: supply: sbs-battery: simplify DT parsing power: supply: bq24735-charger: Request status GPIO with initial input setup power: supply: sbs-battery: Use gpio_desc and sleeping calls for battery detect power: supply: act8945a_charger: Add max current property power: supply: act8945a_charger: Add capacity level property doc: bindings: power: act8945a-charger: Update properties. power: supply: act8945a_charger: Fix the power supply type power: supply: act8945a_charger: Add status change update support power: supply: act8945a_charger: Improve state handling power: supply: act8945a_charger: Remove "battery_temperature" ...
-rw-r--r--CREDITS4
-rw-r--r--Documentation/ABI/testing/sysfs-class-power8
-rw-r--r--Documentation/devicetree/bindings/power/act8945a-charger.txt35
-rw-r--r--Documentation/devicetree/bindings/power/reset/axxia-reset.txt (renamed from Documentation/devicetree/bindings/power_supply/axxia-reset.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/reset/imx-snvs-poweroff.txt (renamed from Documentation/devicetree/bindings/power_supply/imx-snvs-poweroff.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/reset/msm-poweroff.txt (renamed from Documentation/devicetree/bindings/power_supply/msm-poweroff.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/reset/qnap-poweroff.txt (renamed from Documentation/devicetree/bindings/power_supply/qnap-poweroff.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/reset/restart-poweroff.txt (renamed from Documentation/devicetree/bindings/power_supply/restart-poweroff.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/reset/st-reset.txt7
-rw-r--r--Documentation/devicetree/bindings/power/supply/ab8500/btemp.txt (renamed from Documentation/devicetree/bindings/power_supply/ab8500/btemp.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/ab8500/chargalg.txt (renamed from Documentation/devicetree/bindings/power_supply/ab8500/chargalg.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/ab8500/charger.txt (renamed from Documentation/devicetree/bindings/power_supply/ab8500/charger.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/ab8500/fg.txt (renamed from Documentation/devicetree/bindings/power_supply/ab8500/fg.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/act8945a-charger.txt48
-rw-r--r--Documentation/devicetree/bindings/power/supply/axp20x_usb_power.txt (renamed from Documentation/devicetree/bindings/power_supply/axp20x_usb_power.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/bq2415x.txt (renamed from Documentation/devicetree/bindings/power/bq2415x.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/bq24257.txt (renamed from Documentation/devicetree/bindings/power/bq24257.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/bq25890.txt (renamed from Documentation/devicetree/bindings/power/bq25890.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/charger-manager.txt (renamed from Documentation/devicetree/bindings/power_supply/charger-manager.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/da9150-charger.txt (renamed from Documentation/devicetree/bindings/power/da9150-charger.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/da9150-fg.txt (renamed from Documentation/devicetree/bindings/power/da9150-fg.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/gpio-charger.txt (renamed from Documentation/devicetree/bindings/power_supply/gpio-charger.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/isp1704.txt (renamed from Documentation/devicetree/bindings/power/isp1704.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/lp8727_charger.txt (renamed from Documentation/devicetree/bindings/power_supply/lp8727_charger.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/ltc2941.txt (renamed from Documentation/devicetree/bindings/power/ltc2941.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/max17042_battery.txt (renamed from Documentation/devicetree/bindings/power_supply/max17042_battery.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/max8925_batter.txt (renamed from Documentation/devicetree/bindings/power_supply/max8925_batter.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/olpc_battery.txt (renamed from Documentation/devicetree/bindings/power_supply/olpc_battery.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/power_supply.txt (renamed from Documentation/devicetree/bindings/power_supply/power_supply.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/qcom,coincell-charger.txt (renamed from Documentation/devicetree/bindings/power/qcom,coincell-charger.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/qcom_smbb.txt (renamed from Documentation/devicetree/bindings/power_supply/qcom_smbb.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/rt9455_charger.txt (renamed from Documentation/devicetree/bindings/power/rt9455_charger.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/rx51-battery.txt (renamed from Documentation/devicetree/bindings/power/rx51-battery.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/sbs_sbs-battery.txt (renamed from Documentation/devicetree/bindings/power_supply/sbs_sbs-battery.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/ti,bq24735.txt (renamed from Documentation/devicetree/bindings/power_supply/ti,bq24735.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/tps65090.txt (renamed from Documentation/devicetree/bindings/power_supply/tps65090.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/tps65217_charger.txt (renamed from Documentation/devicetree/bindings/power_supply/tps65217_charger.txt)0
-rw-r--r--Documentation/devicetree/bindings/power/supply/twl-charger.txt (renamed from Documentation/devicetree/bindings/power/twl-charger.txt)0
-rw-r--r--Documentation/driver-model/devres.txt4
-rw-r--r--Documentation/power/power_supply_class.txt4
-rw-r--r--MAINTAINERS46
-rw-r--r--drivers/power/Kconfig518
-rw-r--r--drivers/power/Makefile75
-rw-r--r--drivers/power/act8945a_charger.c359
-rw-r--r--drivers/power/reset/keystone-reset.c2
-rw-r--r--drivers/power/reset/reboot-mode.c59
-rw-r--r--drivers/power/reset/reboot-mode.h4
-rw-r--r--drivers/power/reset/st-poweroff.c41
-rw-r--r--drivers/power/reset/syscon-reboot-mode.c12
-rw-r--r--drivers/power/reset/xgene-reboot.c4
-rw-r--r--drivers/power/reset/zx-reboot.c5
-rw-r--r--drivers/power/supply/88pm860x_battery.c (renamed from drivers/power/88pm860x_battery.c)0
-rw-r--r--drivers/power/supply/88pm860x_charger.c (renamed from drivers/power/88pm860x_charger.c)0
-rw-r--r--drivers/power/supply/Kconfig514
-rw-r--r--drivers/power/supply/Makefile74
-rw-r--r--drivers/power/supply/ab8500_bmdata.c (renamed from drivers/power/ab8500_bmdata.c)0
-rw-r--r--drivers/power/supply/ab8500_btemp.c (renamed from drivers/power/ab8500_btemp.c)2
-rw-r--r--drivers/power/supply/ab8500_charger.c (renamed from drivers/power/ab8500_charger.c)4
-rw-r--r--drivers/power/supply/ab8500_fg.c (renamed from drivers/power/ab8500_fg.c)11
-rw-r--r--drivers/power/supply/abx500_chargalg.c (renamed from drivers/power/abx500_chargalg.c)4
-rw-r--r--drivers/power/supply/act8945a_charger.c666
-rw-r--r--drivers/power/supply/apm_power.c (renamed from drivers/power/apm_power.c)0
-rw-r--r--drivers/power/supply/axp20x_usb_power.c (renamed from drivers/power/axp20x_usb_power.c)0
-rw-r--r--drivers/power/supply/axp288_charger.c (renamed from drivers/power/axp288_charger.c)1
-rw-r--r--drivers/power/supply/axp288_fuel_gauge.c (renamed from drivers/power/axp288_fuel_gauge.c)1
-rw-r--r--drivers/power/supply/bq2415x_charger.c (renamed from drivers/power/bq2415x_charger.c)0
-rw-r--r--drivers/power/supply/bq24190_charger.c (renamed from drivers/power/bq24190_charger.c)0
-rw-r--r--drivers/power/supply/bq24257_charger.c (renamed from drivers/power/bq24257_charger.c)12
-rw-r--r--drivers/power/supply/bq24735-charger.c (renamed from drivers/power/bq24735-charger.c)45
-rw-r--r--drivers/power/supply/bq25890_charger.c (renamed from drivers/power/bq25890_charger.c)0
-rw-r--r--drivers/power/supply/bq27xxx_battery.c (renamed from drivers/power/bq27xxx_battery.c)43
-rw-r--r--drivers/power/supply/bq27xxx_battery_i2c.c (renamed from drivers/power/bq27xxx_battery_i2c.c)0
-rw-r--r--drivers/power/supply/charger-manager.c (renamed from drivers/power/charger-manager.c)0
-rw-r--r--drivers/power/supply/collie_battery.c (renamed from drivers/power/collie_battery.c)0
-rw-r--r--drivers/power/supply/da9030_battery.c (renamed from drivers/power/da9030_battery.c)0
-rw-r--r--drivers/power/supply/da9052-battery.c (renamed from drivers/power/da9052-battery.c)0
-rw-r--r--drivers/power/supply/da9150-charger.c (renamed from drivers/power/da9150-charger.c)0
-rw-r--r--drivers/power/supply/da9150-fg.c (renamed from drivers/power/da9150-fg.c)0
-rw-r--r--drivers/power/supply/ds2760_battery.c (renamed from drivers/power/ds2760_battery.c)7
-rw-r--r--drivers/power/supply/ds2780_battery.c (renamed from drivers/power/ds2780_battery.c)4
-rw-r--r--drivers/power/supply/ds2781_battery.c (renamed from drivers/power/ds2781_battery.c)4
-rw-r--r--drivers/power/supply/ds2782_battery.c (renamed from drivers/power/ds2782_battery.c)0
-rw-r--r--drivers/power/supply/generic-adc-battery.c (renamed from drivers/power/generic-adc-battery.c)0
-rw-r--r--drivers/power/supply/goldfish_battery.c (renamed from drivers/power/goldfish_battery.c)0
-rw-r--r--drivers/power/supply/gpio-charger.c (renamed from drivers/power/gpio-charger.c)0
-rw-r--r--drivers/power/supply/intel_mid_battery.c (renamed from drivers/power/intel_mid_battery.c)3
-rw-r--r--drivers/power/supply/ipaq_micro_battery.c (renamed from drivers/power/ipaq_micro_battery.c)2
-rw-r--r--drivers/power/supply/isp1704_charger.c (renamed from drivers/power/isp1704_charger.c)0
-rw-r--r--drivers/power/supply/jz4740-battery.c (renamed from drivers/power/jz4740-battery.c)0
-rw-r--r--drivers/power/supply/lp8727_charger.c (renamed from drivers/power/lp8727_charger.c)0
-rw-r--r--drivers/power/supply/lp8788-charger.c (renamed from drivers/power/lp8788-charger.c)0
-rw-r--r--drivers/power/supply/ltc2941-battery-gauge.c (renamed from drivers/power/ltc2941-battery-gauge.c)0
-rw-r--r--drivers/power/supply/max14577_charger.c (renamed from drivers/power/max14577_charger.c)4
-rw-r--r--drivers/power/supply/max17040_battery.c (renamed from drivers/power/max17040_battery.c)0
-rw-r--r--drivers/power/supply/max17042_battery.c (renamed from drivers/power/max17042_battery.c)0
-rw-r--r--drivers/power/supply/max77693_charger.c (renamed from drivers/power/max77693_charger.c)4
-rw-r--r--drivers/power/supply/max8903_charger.c (renamed from drivers/power/max8903_charger.c)0
-rw-r--r--drivers/power/supply/max8925_power.c (renamed from drivers/power/max8925_power.c)0
-rw-r--r--drivers/power/supply/max8997_charger.c (renamed from drivers/power/max8997_charger.c)0
-rw-r--r--drivers/power/supply/max8998_charger.c (renamed from drivers/power/max8998_charger.c)0
-rw-r--r--drivers/power/supply/olpc_battery.c (renamed from drivers/power/olpc_battery.c)0
-rw-r--r--drivers/power/supply/pcf50633-charger.c (renamed from drivers/power/pcf50633-charger.c)0
-rw-r--r--drivers/power/supply/pda_power.c (renamed from drivers/power/pda_power.c)0
-rw-r--r--drivers/power/supply/pm2301_charger.c (renamed from drivers/power/pm2301_charger.c)3
-rw-r--r--drivers/power/supply/pm2301_charger.h (renamed from drivers/power/pm2301_charger.h)0
-rw-r--r--drivers/power/supply/pmu_battery.c (renamed from drivers/power/pmu_battery.c)0
-rw-r--r--drivers/power/supply/power_supply.h (renamed from drivers/power/power_supply.h)0
-rw-r--r--drivers/power/supply/power_supply_core.c (renamed from drivers/power/power_supply_core.c)0
-rw-r--r--drivers/power/supply/power_supply_leds.c (renamed from drivers/power/power_supply_leds.c)0
-rw-r--r--drivers/power/supply/power_supply_sysfs.c (renamed from drivers/power/power_supply_sysfs.c)0
-rw-r--r--drivers/power/supply/qcom_smbb.c (renamed from drivers/power/qcom_smbb.c)0
-rw-r--r--drivers/power/supply/rt5033_battery.c (renamed from drivers/power/rt5033_battery.c)0
-rw-r--r--drivers/power/supply/rt9455_charger.c (renamed from drivers/power/rt9455_charger.c)0
-rw-r--r--drivers/power/supply/rx51_battery.c (renamed from drivers/power/rx51_battery.c)0
-rw-r--r--drivers/power/supply/s3c_adc_battery.c (renamed from drivers/power/s3c_adc_battery.c)0
-rw-r--r--drivers/power/supply/sbs-battery.c (renamed from drivers/power/sbs-battery.c)254
-rw-r--r--drivers/power/supply/smb347-charger.c (renamed from drivers/power/smb347-charger.c)0
-rw-r--r--drivers/power/supply/test_power.c (renamed from drivers/power/test_power.c)0
-rw-r--r--drivers/power/supply/tosa_battery.c (renamed from drivers/power/tosa_battery.c)0
-rw-r--r--drivers/power/supply/tps65090-charger.c (renamed from drivers/power/tps65090-charger.c)0
-rw-r--r--drivers/power/supply/tps65217_charger.c (renamed from drivers/power/tps65217_charger.c)40
-rw-r--r--drivers/power/supply/twl4030_charger.c (renamed from drivers/power/twl4030_charger.c)0
-rw-r--r--drivers/power/supply/twl4030_madc_battery.c (renamed from drivers/power/twl4030_madc_battery.c)0
-rw-r--r--drivers/power/supply/wm831x_backup.c (renamed from drivers/power/wm831x_backup.c)0
-rw-r--r--drivers/power/supply/wm831x_power.c (renamed from drivers/power/wm831x_power.c)0
-rw-r--r--drivers/power/supply/wm8350_power.c (renamed from drivers/power/wm8350_power.c)0
-rw-r--r--drivers/power/supply/wm97xx_battery.c (renamed from drivers/power/wm97xx_battery.c)2
-rw-r--r--drivers/power/supply/z2_battery.c (renamed from drivers/power/z2_battery.c)1
-rw-r--r--include/linux/power/bq24735-charger.h4
-rw-r--r--include/linux/power/bq27xxx_battery.h1
-rw-r--r--include/linux/power/sbs-battery.h8
131 files changed, 1638 insertions, 1315 deletions
diff --git a/CREDITS b/CREDITS
index 936f05a7500c..df0a50eb3f64 100644
--- a/CREDITS
+++ b/CREDITS
@@ -1090,6 +1090,10 @@ S: 6350 Stoneridge Mall Road
1090S: Pleasanton, CA 94588 1090S: Pleasanton, CA 94588
1091S: USA 1091S: USA
1092 1092
1093N: Dmitry Eremin-Solenikov
1094E: dbaryshkov@gmail.com
1095D: Power Supply Maintainer from v3.14 - v3.15
1096
1093N: Doug Evans 1097N: Doug Evans
1094E: dje@cygnus.com 1098E: dje@cygnus.com
1095D: Wrote Xenix FS (part of standard kernel since 0.99.15) 1099D: Wrote Xenix FS (part of standard kernel since 0.99.15)
diff --git a/Documentation/ABI/testing/sysfs-class-power b/Documentation/ABI/testing/sysfs-class-power
index fa05719f9981..f85ce9e327b9 100644
--- a/Documentation/ABI/testing/sysfs-class-power
+++ b/Documentation/ABI/testing/sysfs-class-power
@@ -22,7 +22,7 @@ Description:
22What: /sys/class/power_supply/max14577-charger/device/fast_charge_timer 22What: /sys/class/power_supply/max14577-charger/device/fast_charge_timer
23Date: October 2014 23Date: October 2014
24KernelVersion: 3.18.0 24KernelVersion: 3.18.0
25Contact: Krzysztof Kozlowski <k.kozlowski@samsung.com> 25Contact: Krzysztof Kozlowski <krzk@kernel.org>
26Description: 26Description:
27 This entry shows and sets the maximum time the max14577 27 This entry shows and sets the maximum time the max14577
28 charger operates in fast-charge mode. When the timer expires 28 charger operates in fast-charge mode. When the timer expires
@@ -36,7 +36,7 @@ Description:
36What: /sys/class/power_supply/max77693-charger/device/fast_charge_timer 36What: /sys/class/power_supply/max77693-charger/device/fast_charge_timer
37Date: January 2015 37Date: January 2015
38KernelVersion: 3.19.0 38KernelVersion: 3.19.0
39Contact: Krzysztof Kozlowski <k.kozlowski@samsung.com> 39Contact: Krzysztof Kozlowski <krzk@kernel.org>
40Description: 40Description:
41 This entry shows and sets the maximum time the max77693 41 This entry shows and sets the maximum time the max77693
42 charger operates in fast-charge mode. When the timer expires 42 charger operates in fast-charge mode. When the timer expires
@@ -50,7 +50,7 @@ Description:
50What: /sys/class/power_supply/max77693-charger/device/top_off_threshold_current 50What: /sys/class/power_supply/max77693-charger/device/top_off_threshold_current
51Date: January 2015 51Date: January 2015
52KernelVersion: 3.19.0 52KernelVersion: 3.19.0
53Contact: Krzysztof Kozlowski <k.kozlowski@samsung.com> 53Contact: Krzysztof Kozlowski <krzk@kernel.org>
54Description: 54Description:
55 This entry shows and sets the charging current threshold for 55 This entry shows and sets the charging current threshold for
56 entering top-off charging mode. When charging current in fast 56 entering top-off charging mode. When charging current in fast
@@ -65,7 +65,7 @@ Description:
65What: /sys/class/power_supply/max77693-charger/device/top_off_timer 65What: /sys/class/power_supply/max77693-charger/device/top_off_timer
66Date: January 2015 66Date: January 2015
67KernelVersion: 3.19.0 67KernelVersion: 3.19.0
68Contact: Krzysztof Kozlowski <k.kozlowski@samsung.com> 68Contact: Krzysztof Kozlowski <krzk@kernel.org>
69Description: 69Description:
70 This entry shows and sets the maximum time the max77693 70 This entry shows and sets the maximum time the max77693
71 charger operates in top-off charge mode. When the timer expires 71 charger operates in top-off charge mode. When the timer expires
diff --git a/Documentation/devicetree/bindings/power/act8945a-charger.txt b/Documentation/devicetree/bindings/power/act8945a-charger.txt
deleted file mode 100644
index bea254c9d136..000000000000
--- a/Documentation/devicetree/bindings/power/act8945a-charger.txt
+++ /dev/null
@@ -1,35 +0,0 @@
1Device-Tree bindings for charger of Active-semi ACT8945A Multi-Function Device
2
3Required properties:
4 - compatible: "active-semi,act8945a", please refer to ../mfd/act8945a.txt.
5 - active-semi,chglev-gpios: charge current level phandle with args
6 as described in ../gpio/gpio.txt.
7
8Optional properties:
9 - active-semi,check-battery-temperature: boolean to check the battery
10 temperature or not.
11 - active-semi,input-voltage-threshold-microvolt: unit: mV;
12 Specifies the charger's input over-voltage threshold value;
13 The value can be: 6600, 7000, 7500, 8000; default: 6600
14 - active-semi,precondition-timeout: unit: minutes;
15 Specifies the charger's PRECONDITION safety timer setting value;
16 The value can be: 40, 60, 80, 0; If 0, it means to disable this timer;
17 default: 40.
18 - active-semi,total-timeout: unit: hours;
19 Specifies the charger's total safety timer setting value;
20 The value can be: 3, 4, 5, 0; If 0, it means to disable this timer;
21 default: 3.
22
23Example:
24 pmic@5b {
25 compatible = "active-semi,act8945a";
26 reg = <0x5b>;
27 status = "okay";
28
29 pinctrl-names = "default";
30 pinctrl-0 = <&pinctrl_charger_chglev>;
31 active-semi,chglev-gpios = <&pioA 12 GPIO_ACTIVE_HIGH>;
32 active-semi,input-voltage-threshold-microvolt = <6600>;
33 active-semi,precondition-timeout = <40>;
34 active-semi,total-timeout = <3>;
35 };
diff --git a/Documentation/devicetree/bindings/power_supply/axxia-reset.txt b/Documentation/devicetree/bindings/power/reset/axxia-reset.txt
index 47e720d249d2..47e720d249d2 100644
--- a/Documentation/devicetree/bindings/power_supply/axxia-reset.txt
+++ b/Documentation/devicetree/bindings/power/reset/axxia-reset.txt
diff --git a/Documentation/devicetree/bindings/power_supply/imx-snvs-poweroff.txt b/Documentation/devicetree/bindings/power/reset/imx-snvs-poweroff.txt
index dc7c9bad63ea..dc7c9bad63ea 100644
--- a/Documentation/devicetree/bindings/power_supply/imx-snvs-poweroff.txt
+++ b/Documentation/devicetree/bindings/power/reset/imx-snvs-poweroff.txt
diff --git a/Documentation/devicetree/bindings/power_supply/msm-poweroff.txt b/Documentation/devicetree/bindings/power/reset/msm-poweroff.txt
index ce44ad357565..ce44ad357565 100644
--- a/Documentation/devicetree/bindings/power_supply/msm-poweroff.txt
+++ b/Documentation/devicetree/bindings/power/reset/msm-poweroff.txt
diff --git a/Documentation/devicetree/bindings/power_supply/qnap-poweroff.txt b/Documentation/devicetree/bindings/power/reset/qnap-poweroff.txt
index af25e77c0e0c..af25e77c0e0c 100644
--- a/Documentation/devicetree/bindings/power_supply/qnap-poweroff.txt
+++ b/Documentation/devicetree/bindings/power/reset/qnap-poweroff.txt
diff --git a/Documentation/devicetree/bindings/power_supply/restart-poweroff.txt b/Documentation/devicetree/bindings/power/reset/restart-poweroff.txt
index 5776e684afda..5776e684afda 100644
--- a/Documentation/devicetree/bindings/power_supply/restart-poweroff.txt
+++ b/Documentation/devicetree/bindings/power/reset/restart-poweroff.txt
diff --git a/Documentation/devicetree/bindings/power/reset/st-reset.txt b/Documentation/devicetree/bindings/power/reset/st-reset.txt
index 809af54f02f3..83734dc3a389 100644
--- a/Documentation/devicetree/bindings/power/reset/st-reset.txt
+++ b/Documentation/devicetree/bindings/power/reset/st-reset.txt
@@ -1,11 +1,12 @@
1*Device-Tree bindings for ST SW reset functionality 1*Device-Tree bindings for ST SW reset functionality
2 2
3Required properties: 3Required properties:
4- compatible: should be "st,<chip>-restart". 4- compatible: should be "stih407-restart".
5- st,syscfg: should be a phandle of the syscfg node. 5- st,syscfg: should be a phandle of the syscfg node.
6 6
7Example node: 7Example node:
8 restart { 8 restart {
9 compatible = "st,stih416-restart"; 9 compatible = "st,stih407-restart";
10 st,syscfg = <&syscfg_sbc>; 10 st,syscfg = <&syscfg_sbc_reg>;
11 status = "okay";
11 }; 12 };
diff --git a/Documentation/devicetree/bindings/power_supply/ab8500/btemp.txt b/Documentation/devicetree/bindings/power/supply/ab8500/btemp.txt
index 0ba1bcc7f33a..0ba1bcc7f33a 100644
--- a/Documentation/devicetree/bindings/power_supply/ab8500/btemp.txt
+++ b/Documentation/devicetree/bindings/power/supply/ab8500/btemp.txt
diff --git a/Documentation/devicetree/bindings/power_supply/ab8500/chargalg.txt b/Documentation/devicetree/bindings/power/supply/ab8500/chargalg.txt
index ef5328371122..ef5328371122 100644
--- a/Documentation/devicetree/bindings/power_supply/ab8500/chargalg.txt
+++ b/Documentation/devicetree/bindings/power/supply/ab8500/chargalg.txt
diff --git a/Documentation/devicetree/bindings/power_supply/ab8500/charger.txt b/Documentation/devicetree/bindings/power/supply/ab8500/charger.txt
index 6bdbb08ea9e0..6bdbb08ea9e0 100644
--- a/Documentation/devicetree/bindings/power_supply/ab8500/charger.txt
+++ b/Documentation/devicetree/bindings/power/supply/ab8500/charger.txt
diff --git a/Documentation/devicetree/bindings/power_supply/ab8500/fg.txt b/Documentation/devicetree/bindings/power/supply/ab8500/fg.txt
index ccafcb9112fb..ccafcb9112fb 100644
--- a/Documentation/devicetree/bindings/power_supply/ab8500/fg.txt
+++ b/Documentation/devicetree/bindings/power/supply/ab8500/fg.txt
diff --git a/Documentation/devicetree/bindings/power/supply/act8945a-charger.txt b/Documentation/devicetree/bindings/power/supply/act8945a-charger.txt
new file mode 100644
index 000000000000..de78d761ce44
--- /dev/null
+++ b/Documentation/devicetree/bindings/power/supply/act8945a-charger.txt
@@ -0,0 +1,48 @@
1Device-Tree bindings for charger of Active-semi ACT8945A Multi-Function Device
2
3Required properties:
4 - compatible: "active-semi,act8945a-charger".
5 - active-semi,chglev-gpios: charge current level phandle with args
6 as described in ../gpio/gpio.txt.
7 - active-semi,lbo-gpios: specify the low battery voltage detect phandle
8 with args as as described in ../gpio/gpio.txt.
9 - interrupts: <a b> where a is the interrupt number and b is a
10 field that represents an encoding of the sense and level
11 information for the interrupt.
12 - interrupt-parent: the phandle for the interrupt controller that
13 services interrupts for this device.
14
15Optional properties:
16 - active-semi,input-voltage-threshold-microvolt: unit: mV;
17 Specifies the charger's input over-voltage threshold value;
18 The value can be: 6600, 7000, 7500, 8000; default: 6600
19 - active-semi,precondition-timeout: unit: minutes;
20 Specifies the charger's PRECONDITION safety timer setting value;
21 The value can be: 40, 60, 80, 0; If 0, it means to disable this timer;
22 default: 40.
23 - active-semi,total-timeout: unit: hours;
24 Specifies the charger's total safety timer setting value;
25 The value can be: 3, 4, 5, 0; If 0, it means to disable this timer;
26 default: 3.
27
28Example:
29 pmic@5b {
30 compatible = "active-semi,act8945a";
31 reg = <0x5b>;
32 status = "okay";
33
34 charger {
35 compatible = "active-semi,act8945a-charger";
36 pinctrl-names = "default";
37 pinctrl-0 = <&pinctrl_charger_chglev &pinctrl_charger_lbo &pinctrl_charger_irq>;
38 interrupt-parent = <&pioA>;
39 interrupts = <45 GPIO_ACTIVE_LOW>;
40
41 active-semi,chglev-gpios = <&pioA 12 GPIO_ACTIVE_HIGH>;
42 active-semi,lbo-gpios = <&pioA 72 GPIO_ACTIVE_LOW>;
43 active-semi,input-voltage-threshold-microvolt = <6600>;
44 active-semi,precondition-timeout = <40>;
45 active-semi,total-timeout = <3>;
46 status = "okay";
47 };
48 };
diff --git a/Documentation/devicetree/bindings/power_supply/axp20x_usb_power.txt b/Documentation/devicetree/bindings/power/supply/axp20x_usb_power.txt
index f1d7beec45bf..f1d7beec45bf 100644
--- a/Documentation/devicetree/bindings/power_supply/axp20x_usb_power.txt
+++ b/Documentation/devicetree/bindings/power/supply/axp20x_usb_power.txt
diff --git a/Documentation/devicetree/bindings/power/bq2415x.txt b/Documentation/devicetree/bindings/power/supply/bq2415x.txt
index d0327f0b59ad..d0327f0b59ad 100644
--- a/Documentation/devicetree/bindings/power/bq2415x.txt
+++ b/Documentation/devicetree/bindings/power/supply/bq2415x.txt
diff --git a/Documentation/devicetree/bindings/power/bq24257.txt b/Documentation/devicetree/bindings/power/supply/bq24257.txt
index d693702c9c1e..d693702c9c1e 100644
--- a/Documentation/devicetree/bindings/power/bq24257.txt
+++ b/Documentation/devicetree/bindings/power/supply/bq24257.txt
diff --git a/Documentation/devicetree/bindings/power/bq25890.txt b/Documentation/devicetree/bindings/power/supply/bq25890.txt
index c9dd17d142ad..c9dd17d142ad 100644
--- a/Documentation/devicetree/bindings/power/bq25890.txt
+++ b/Documentation/devicetree/bindings/power/supply/bq25890.txt
diff --git a/Documentation/devicetree/bindings/power_supply/charger-manager.txt b/Documentation/devicetree/bindings/power/supply/charger-manager.txt
index ec4fe9de3137..ec4fe9de3137 100644
--- a/Documentation/devicetree/bindings/power_supply/charger-manager.txt
+++ b/Documentation/devicetree/bindings/power/supply/charger-manager.txt
diff --git a/Documentation/devicetree/bindings/power/da9150-charger.txt b/Documentation/devicetree/bindings/power/supply/da9150-charger.txt
index f3906663c454..f3906663c454 100644
--- a/Documentation/devicetree/bindings/power/da9150-charger.txt
+++ b/Documentation/devicetree/bindings/power/supply/da9150-charger.txt
diff --git a/Documentation/devicetree/bindings/power/da9150-fg.txt b/Documentation/devicetree/bindings/power/supply/da9150-fg.txt
index 00236fe3ea31..00236fe3ea31 100644
--- a/Documentation/devicetree/bindings/power/da9150-fg.txt
+++ b/Documentation/devicetree/bindings/power/supply/da9150-fg.txt
diff --git a/Documentation/devicetree/bindings/power_supply/gpio-charger.txt b/Documentation/devicetree/bindings/power/supply/gpio-charger.txt
index adbb5dc5b6e9..adbb5dc5b6e9 100644
--- a/Documentation/devicetree/bindings/power_supply/gpio-charger.txt
+++ b/Documentation/devicetree/bindings/power/supply/gpio-charger.txt
diff --git a/Documentation/devicetree/bindings/power/isp1704.txt b/Documentation/devicetree/bindings/power/supply/isp1704.txt
index fa3596907967..fa3596907967 100644
--- a/Documentation/devicetree/bindings/power/isp1704.txt
+++ b/Documentation/devicetree/bindings/power/supply/isp1704.txt
diff --git a/Documentation/devicetree/bindings/power_supply/lp8727_charger.txt b/Documentation/devicetree/bindings/power/supply/lp8727_charger.txt
index 2246bc5c874b..2246bc5c874b 100644
--- a/Documentation/devicetree/bindings/power_supply/lp8727_charger.txt
+++ b/Documentation/devicetree/bindings/power/supply/lp8727_charger.txt
diff --git a/Documentation/devicetree/bindings/power/ltc2941.txt b/Documentation/devicetree/bindings/power/supply/ltc2941.txt
index ea42ae12d924..ea42ae12d924 100644
--- a/Documentation/devicetree/bindings/power/ltc2941.txt
+++ b/Documentation/devicetree/bindings/power/supply/ltc2941.txt
diff --git a/Documentation/devicetree/bindings/power_supply/max17042_battery.txt b/Documentation/devicetree/bindings/power/supply/max17042_battery.txt
index 3f3894aaeebc..3f3894aaeebc 100644
--- a/Documentation/devicetree/bindings/power_supply/max17042_battery.txt
+++ b/Documentation/devicetree/bindings/power/supply/max17042_battery.txt
diff --git a/Documentation/devicetree/bindings/power_supply/max8925_batter.txt b/Documentation/devicetree/bindings/power/supply/max8925_batter.txt
index d7e3e0c0f71d..d7e3e0c0f71d 100644
--- a/Documentation/devicetree/bindings/power_supply/max8925_batter.txt
+++ b/Documentation/devicetree/bindings/power/supply/max8925_batter.txt
diff --git a/Documentation/devicetree/bindings/power_supply/olpc_battery.txt b/Documentation/devicetree/bindings/power/supply/olpc_battery.txt
index c8901b3992d9..c8901b3992d9 100644
--- a/Documentation/devicetree/bindings/power_supply/olpc_battery.txt
+++ b/Documentation/devicetree/bindings/power/supply/olpc_battery.txt
diff --git a/Documentation/devicetree/bindings/power_supply/power_supply.txt b/Documentation/devicetree/bindings/power/supply/power_supply.txt
index 8391bfa0edac..8391bfa0edac 100644
--- a/Documentation/devicetree/bindings/power_supply/power_supply.txt
+++ b/Documentation/devicetree/bindings/power/supply/power_supply.txt
diff --git a/Documentation/devicetree/bindings/power/qcom,coincell-charger.txt b/Documentation/devicetree/bindings/power/supply/qcom,coincell-charger.txt
index 747899223262..747899223262 100644
--- a/Documentation/devicetree/bindings/power/qcom,coincell-charger.txt
+++ b/Documentation/devicetree/bindings/power/supply/qcom,coincell-charger.txt
diff --git a/Documentation/devicetree/bindings/power_supply/qcom_smbb.txt b/Documentation/devicetree/bindings/power/supply/qcom_smbb.txt
index 65b88fac854b..65b88fac854b 100644
--- a/Documentation/devicetree/bindings/power_supply/qcom_smbb.txt
+++ b/Documentation/devicetree/bindings/power/supply/qcom_smbb.txt
diff --git a/Documentation/devicetree/bindings/power/rt9455_charger.txt b/Documentation/devicetree/bindings/power/supply/rt9455_charger.txt
index 5d9ad5cf2c5a..5d9ad5cf2c5a 100644
--- a/Documentation/devicetree/bindings/power/rt9455_charger.txt
+++ b/Documentation/devicetree/bindings/power/supply/rt9455_charger.txt
diff --git a/Documentation/devicetree/bindings/power/rx51-battery.txt b/Documentation/devicetree/bindings/power/supply/rx51-battery.txt
index 90438453db58..90438453db58 100644
--- a/Documentation/devicetree/bindings/power/rx51-battery.txt
+++ b/Documentation/devicetree/bindings/power/supply/rx51-battery.txt
diff --git a/Documentation/devicetree/bindings/power_supply/sbs_sbs-battery.txt b/Documentation/devicetree/bindings/power/supply/sbs_sbs-battery.txt
index c40e8926facf..c40e8926facf 100644
--- a/Documentation/devicetree/bindings/power_supply/sbs_sbs-battery.txt
+++ b/Documentation/devicetree/bindings/power/supply/sbs_sbs-battery.txt
diff --git a/Documentation/devicetree/bindings/power_supply/ti,bq24735.txt b/Documentation/devicetree/bindings/power/supply/ti,bq24735.txt
index 3bf55757ceec..3bf55757ceec 100644
--- a/Documentation/devicetree/bindings/power_supply/ti,bq24735.txt
+++ b/Documentation/devicetree/bindings/power/supply/ti,bq24735.txt
diff --git a/Documentation/devicetree/bindings/power_supply/tps65090.txt b/Documentation/devicetree/bindings/power/supply/tps65090.txt
index 8e5e0d3910df..8e5e0d3910df 100644
--- a/Documentation/devicetree/bindings/power_supply/tps65090.txt
+++ b/Documentation/devicetree/bindings/power/supply/tps65090.txt
diff --git a/Documentation/devicetree/bindings/power_supply/tps65217_charger.txt b/Documentation/devicetree/bindings/power/supply/tps65217_charger.txt
index 98d131acee95..98d131acee95 100644
--- a/Documentation/devicetree/bindings/power_supply/tps65217_charger.txt
+++ b/Documentation/devicetree/bindings/power/supply/tps65217_charger.txt
diff --git a/Documentation/devicetree/bindings/power/twl-charger.txt b/Documentation/devicetree/bindings/power/supply/twl-charger.txt
index 3b4ea1b73b38..3b4ea1b73b38 100644
--- a/Documentation/devicetree/bindings/power/twl-charger.txt
+++ b/Documentation/devicetree/bindings/power/supply/twl-charger.txt
diff --git a/Documentation/driver-model/devres.txt b/Documentation/driver-model/devres.txt
index 75bc5b8add2f..167070895498 100644
--- a/Documentation/driver-model/devres.txt
+++ b/Documentation/driver-model/devres.txt
@@ -346,6 +346,10 @@ PINCTRL
346 devm_pinctrl_register() 346 devm_pinctrl_register()
347 devm_pinctrl_unregister() 347 devm_pinctrl_unregister()
348 348
349POWER
350 devm_reboot_mode_register()
351 devm_reboot_mode_unregister()
352
349PWM 353PWM
350 devm_pwm_get() 354 devm_pwm_get()
351 devm_pwm_put() 355 devm_pwm_put()
diff --git a/Documentation/power/power_supply_class.txt b/Documentation/power/power_supply_class.txt
index 82dacc06e355..0c72588bd967 100644
--- a/Documentation/power/power_supply_class.txt
+++ b/Documentation/power/power_supply_class.txt
@@ -39,8 +39,8 @@ kind of power supply, and can process/present them to a user in consistent
39manner. Results for different power supplies and machines are also directly 39manner. Results for different power supplies and machines are also directly
40comparable. 40comparable.
41 41
42See drivers/power/ds2760_battery.c and drivers/power/pda_power.c for the 42See drivers/power/supply/ds2760_battery.c and drivers/power/supply/pda_power.c
43example how to declare and handle attributes. 43for the example how to declare and handle attributes.
44 44
45 45
46Units 46Units
diff --git a/MAINTAINERS b/MAINTAINERS
index 464437dbfa26..40f462966564 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3784,8 +3784,8 @@ F: drivers/leds/leds-da90??.c
3784F: drivers/mfd/da903x.c 3784F: drivers/mfd/da903x.c
3785F: drivers/mfd/da90??-*.c 3785F: drivers/mfd/da90??-*.c
3786F: drivers/mfd/da91??-*.c 3786F: drivers/mfd/da91??-*.c
3787F: drivers/power/da9052-battery.c 3787F: drivers/power/supply/da9052-battery.c
3788F: drivers/power/da91??-*.c 3788F: drivers/power/supply/da91??-*.c
3789F: drivers/regulator/da903x.c 3789F: drivers/regulator/da903x.c
3790F: drivers/regulator/da9???-regulator.[ch] 3790F: drivers/regulator/da9???-regulator.[ch]
3791F: drivers/rtc/rtc-da90??.c 3791F: drivers/rtc/rtc-da90??.c
@@ -7579,8 +7579,8 @@ M: Krzysztof Kozlowski <krzk@kernel.org>
7579M: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> 7579M: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
7580L: linux-pm@vger.kernel.org 7580L: linux-pm@vger.kernel.org
7581S: Supported 7581S: Supported
7582F: drivers/power/max14577_charger.c 7582F: drivers/power/supply/max14577_charger.c
7583F: drivers/power/max77693_charger.c 7583F: drivers/power/supply/max77693_charger.c
7584 7584
7585MAXIM MAX77802 MULTIFUNCTION PMIC DEVICE DRIVERS 7585MAXIM MAX77802 MULTIFUNCTION PMIC DEVICE DRIVERS
7586M: Javier Martinez Canillas <javier@osg.samsung.com> 7586M: Javier Martinez Canillas <javier@osg.samsung.com>
@@ -8486,11 +8486,11 @@ R: Pali Rohár <pali.rohar@gmail.com>
8486F: include/linux/power/bq2415x_charger.h 8486F: include/linux/power/bq2415x_charger.h
8487F: include/linux/power/bq27xxx_battery.h 8487F: include/linux/power/bq27xxx_battery.h
8488F: include/linux/power/isp1704_charger.h 8488F: include/linux/power/isp1704_charger.h
8489F: drivers/power/bq2415x_charger.c 8489F: drivers/power/supply/bq2415x_charger.c
8490F: drivers/power/bq27xxx_battery.c 8490F: drivers/power/supply/bq27xxx_battery.c
8491F: drivers/power/bq27xxx_battery_i2c.c 8491F: drivers/power/supply/bq27xxx_battery_i2c.c
8492F: drivers/power/isp1704_charger.c 8492F: drivers/power/supply/isp1704_charger.c
8493F: drivers/power/rx51_battery.c 8493F: drivers/power/supply/rx51_battery.c
8494 8494
8495NTB DRIVER CORE 8495NTB DRIVER CORE
8496M: Jon Mason <jdmason@kudzu.us> 8496M: Jon Mason <jdmason@kudzu.us>
@@ -9490,16 +9490,12 @@ F: drivers/powercap/
9490 9490
9491POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS 9491POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS
9492M: Sebastian Reichel <sre@kernel.org> 9492M: Sebastian Reichel <sre@kernel.org>
9493M: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
9494M: David Woodhouse <dwmw2@infradead.org>
9495L: linux-pm@vger.kernel.org 9493L: linux-pm@vger.kernel.org
9496T: git git://git.infradead.org/battery-2.6.git 9494T: git git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git
9497S: Maintained 9495S: Maintained
9498F: Documentation/devicetree/bindings/power/ 9496F: Documentation/devicetree/bindings/power/supply/
9499F: Documentation/devicetree/bindings/power_supply/
9500F: include/linux/power_supply.h 9497F: include/linux/power_supply.h
9501F: drivers/power/ 9498F: drivers/power/supply/
9502X: drivers/power/avs/
9503 9499
9504POWER STATE COORDINATION INTERFACE (PSCI) 9500POWER STATE COORDINATION INTERFACE (PSCI)
9505M: Mark Rutland <mark.rutland@arm.com> 9501M: Mark Rutland <mark.rutland@arm.com>
@@ -10514,8 +10510,8 @@ F: drivers/thunderbolt/
10514TI BQ27XXX POWER SUPPLY DRIVER 10510TI BQ27XXX POWER SUPPLY DRIVER
10515R: Andrew F. Davis <afd@ti.com> 10511R: Andrew F. Davis <afd@ti.com>
10516F: include/linux/power/bq27xxx_battery.h 10512F: include/linux/power/bq27xxx_battery.h
10517F: drivers/power/bq27xxx_battery.c 10513F: drivers/power/supply/bq27xxx_battery.c
10518F: drivers/power/bq27xxx_battery_i2c.c 10514F: drivers/power/supply/bq27xxx_battery_i2c.c
10519 10515
10520TIMEKEEPING, CLOCKSOURCE CORE, NTP, ALARMTIMER 10516TIMEKEEPING, CLOCKSOURCE CORE, NTP, ALARMTIMER
10521M: John Stultz <john.stultz@linaro.org> 10517M: John Stultz <john.stultz@linaro.org>
@@ -11512,6 +11508,14 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git
11512S: Supported 11508S: Supported
11513F: drivers/mfd/syscon.c 11509F: drivers/mfd/syscon.c
11514 11510
11511SYSTEM RESET/SHUTDOWN DRIVERS
11512M: Sebastian Reichel <sre@kernel.org>
11513L: linux-pm@vger.kernel.org
11514T: git git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git
11515S: Maintained
11516F: Documentation/devicetree/bindings/power/reset/
11517F: drivers/power/reset/
11518
11515SYSV FILESYSTEM 11519SYSV FILESYSTEM
11516M: Christoph Hellwig <hch@infradead.org> 11520M: Christoph Hellwig <hch@infradead.org>
11517S: Maintained 11521S: Maintained
@@ -11860,7 +11864,7 @@ F: include/linux/platform_data/lp855x.h
11860TI LP8727 CHARGER DRIVER 11864TI LP8727 CHARGER DRIVER
11861M: Milo Kim <milo.kim@ti.com> 11865M: Milo Kim <milo.kim@ti.com>
11862S: Maintained 11866S: Maintained
11863F: drivers/power/lp8727_charger.c 11867F: drivers/power/supply/lp8727_charger.c
11864F: include/linux/platform_data/lp8727.h 11868F: include/linux/platform_data/lp8727.h
11865 11869
11866TI LP8788 MFD DRIVER 11870TI LP8788 MFD DRIVER
@@ -11869,7 +11873,7 @@ S: Maintained
11869F: drivers/iio/adc/lp8788_adc.c 11873F: drivers/iio/adc/lp8788_adc.c
11870F: drivers/leds/leds-lp8788.c 11874F: drivers/leds/leds-lp8788.c
11871F: drivers/mfd/lp8788*.c 11875F: drivers/mfd/lp8788*.c
11872F: drivers/power/lp8788-charger.c 11876F: drivers/power/supply/lp8788-charger.c
11873F: drivers/regulator/lp8788-*.c 11877F: drivers/regulator/lp8788-*.c
11874F: include/linux/mfd/lp8788*.h 11878F: include/linux/mfd/lp8788*.h
11875 11879
@@ -12946,7 +12950,7 @@ F: drivers/input/touchscreen/wm97*.c
12946F: drivers/mfd/arizona* 12950F: drivers/mfd/arizona*
12947F: drivers/mfd/wm*.c 12951F: drivers/mfd/wm*.c
12948F: drivers/mfd/cs47l24* 12952F: drivers/mfd/cs47l24*
12949F: drivers/power/wm83*.c 12953F: drivers/power/supply/wm83*.c
12950F: drivers/rtc/rtc-wm83*.c 12954F: drivers/rtc/rtc-wm83*.c
12951F: drivers/regulator/wm8*.c 12955F: drivers/regulator/wm8*.c
12952F: drivers/video/backlight/wm83*_bl.c 12956F: drivers/video/backlight/wm83*_bl.c
diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig
index acd4a1524a1e..63454b5cac27 100644
--- a/drivers/power/Kconfig
+++ b/drivers/power/Kconfig
@@ -1,517 +1,3 @@
1menuconfig POWER_SUPPLY
2 bool "Power supply class support"
3 help
4 Say Y here to enable power supply class support. This allows
5 power supply (batteries, AC, USB) monitoring by userspace
6 via sysfs and uevent (if available) and/or APM kernel interface
7 (if selected below).
8
9if POWER_SUPPLY
10
11config POWER_SUPPLY_DEBUG
12 bool "Power supply debug"
13 help
14 Say Y here to enable debugging messages for power supply class
15 and drivers.
16
17config PDA_POWER
18 tristate "Generic PDA/phone power driver"
19 depends on !S390
20 help
21 Say Y here to enable generic power driver for PDAs and phones with
22 one or two external power supplies (AC/USB) connected to main and
23 backup batteries, and optional builtin charger.
24
25config APM_POWER
26 tristate "APM emulation for class batteries"
27 depends on APM_EMULATION
28 help
29 Say Y here to enable support APM status emulation using
30 battery class devices.
31
32config GENERIC_ADC_BATTERY
33 tristate "Generic battery support using IIO"
34 depends on IIO
35 help
36 Say Y here to enable support for the generic battery driver
37 which uses IIO framework to read adc.
38
39config MAX8925_POWER
40 tristate "MAX8925 battery charger support"
41 depends on MFD_MAX8925
42 help
43 Say Y here to enable support for the battery charger in the Maxim
44 MAX8925 PMIC.
45
46config WM831X_BACKUP
47 tristate "WM831X backup battery charger support"
48 depends on MFD_WM831X
49 help
50 Say Y here to enable support for the backup battery charger
51 in the Wolfson Microelectronics WM831x PMICs.
52
53config WM831X_POWER
54 tristate "WM831X PMU support"
55 depends on MFD_WM831X
56 help
57 Say Y here to enable support for the power management unit
58 provided by Wolfson Microelectronics WM831x PMICs.
59
60config WM8350_POWER
61 tristate "WM8350 PMU support"
62 depends on MFD_WM8350
63 help
64 Say Y here to enable support for the power management unit
65 provided by the Wolfson Microelectronics WM8350 PMIC.
66
67config TEST_POWER
68 tristate "Test power driver"
69 help
70 This driver is used for testing. It's safe to say M here.
71
72config BATTERY_88PM860X
73 tristate "Marvell 88PM860x battery driver"
74 depends on MFD_88PM860X
75 help
76 Say Y here to enable battery monitor for Marvell 88PM860x chip.
77
78config BATTERY_ACT8945A
79 tristate "Active-semi ACT8945A charger driver"
80 depends on MFD_ACT8945A || COMPILE_TEST
81 help
82 Say Y here to enable support for power supply provided by
83 Active-semi ActivePath ACT8945A charger.
84
85config BATTERY_DS2760
86 tristate "DS2760 battery driver (HP iPAQ & others)"
87 depends on W1 && W1_SLAVE_DS2760
88 help
89 Say Y here to enable support for batteries with ds2760 chip.
90
91config BATTERY_DS2780
92 tristate "DS2780 battery driver"
93 depends on HAS_IOMEM
94 select W1
95 select W1_SLAVE_DS2780
96 help
97 Say Y here to enable support for batteries with ds2780 chip.
98
99config BATTERY_DS2781
100 tristate "DS2781 battery driver"
101 depends on HAS_IOMEM
102 select W1
103 select W1_SLAVE_DS2781
104 help
105 If you enable this you will have the DS2781 battery driver support.
106
107 The battery monitor chip is used in many batteries/devices
108 as the one who is responsible for charging/discharging/monitoring
109 Li+ batteries.
110
111 If you are unsure, say N.
112
113config BATTERY_DS2782
114 tristate "DS2782/DS2786 standalone gas-gauge"
115 depends on I2C
116 help
117 Say Y here to enable support for the DS2782/DS2786 standalone battery
118 gas-gauge.
119
120config BATTERY_PMU
121 tristate "Apple PMU battery"
122 depends on PPC32 && ADB_PMU
123 help
124 Say Y here to expose battery information on Apple machines
125 through the generic battery class.
126
127config BATTERY_OLPC
128 tristate "One Laptop Per Child battery"
129 depends on X86_32 && OLPC
130 help
131 Say Y to enable support for the battery on the OLPC laptop.
132
133config BATTERY_TOSA
134 tristate "Sharp SL-6000 (tosa) battery"
135 depends on MACH_TOSA && MFD_TC6393XB && TOUCHSCREEN_WM97XX
136 help
137 Say Y to enable support for the battery on the Sharp Zaurus
138 SL-6000 (tosa) models.
139
140config BATTERY_COLLIE
141 tristate "Sharp SL-5500 (collie) battery"
142 depends on SA1100_COLLIE && MCP_UCB1200
143 help
144 Say Y to enable support for the battery on the Sharp Zaurus
145 SL-5500 (collie) models.
146
147config BATTERY_IPAQ_MICRO
148 tristate "iPAQ Atmel Micro ASIC battery driver"
149 depends on MFD_IPAQ_MICRO
150 help
151 Choose this option if you want to monitor battery status on
152 Compaq/HP iPAQ h3100 and h3600.
153
154config BATTERY_WM97XX
155 bool "WM97xx generic battery driver"
156 depends on TOUCHSCREEN_WM97XX=y
157 help
158 Say Y to enable support for battery measured by WM97xx aux port.
159
160config BATTERY_SBS
161 tristate "SBS Compliant gas gauge"
162 depends on I2C
163 help
164 Say Y to include support for SBS battery driver for SBS-compliant
165 gas gauges.
166
167config BATTERY_BQ27XXX
168 tristate "BQ27xxx battery driver"
169 help
170 Say Y here to enable support for batteries with BQ27xxx chips.
171
172config BATTERY_BQ27XXX_I2C
173 tristate "BQ27xxx I2C support"
174 depends on BATTERY_BQ27XXX
175 depends on I2C
176 default y
177 help
178 Say Y here to enable support for batteries with BQ27xxx chips
179 connected over an I2C bus.
180
181config BATTERY_DA9030
182 tristate "DA9030 battery driver"
183 depends on PMIC_DA903X
184 help
185 Say Y here to enable support for batteries charger integrated into
186 DA9030 PMIC.
187
188config BATTERY_DA9052
189 tristate "Dialog DA9052 Battery"
190 depends on PMIC_DA9052
191 help
192 Say Y here to enable support for batteries charger integrated into
193 DA9052 PMIC.
194
195config CHARGER_DA9150
196 tristate "Dialog Semiconductor DA9150 Charger support"
197 depends on MFD_DA9150
198 depends on DA9150_GPADC
199 depends on IIO
200 help
201 Say Y here to enable support for charger unit of the DA9150
202 Integrated Charger & Fuel-Gauge IC.
203
204 This driver can also be built as a module. If so, the module will be
205 called da9150-charger.
206
207config BATTERY_DA9150
208 tristate "Dialog Semiconductor DA9150 Fuel Gauge support"
209 depends on MFD_DA9150
210 help
211 Say Y here to enable support for the Fuel-Gauge unit of the DA9150
212 Integrated Charger & Fuel-Gauge IC
213
214 This driver can also be built as a module. If so, the module will be
215 called da9150-fg.
216
217config AXP288_CHARGER
218 tristate "X-Powers AXP288 Charger"
219 depends on MFD_AXP20X && EXTCON_AXP288
220 help
221 Say yes here to have support X-Power AXP288 power management IC (PMIC)
222 integrated charger.
223
224config AXP288_FUEL_GAUGE
225 tristate "X-Powers AXP288 Fuel Gauge"
226 depends on MFD_AXP20X && IIO
227 help
228 Say yes here to have support for X-Power power management IC (PMIC)
229 Fuel Gauge. The device provides battery statistics and status
230 monitoring as well as alerts for battery over/under voltage and
231 over/under temperature.
232
233config BATTERY_MAX17040
234 tristate "Maxim MAX17040 Fuel Gauge"
235 depends on I2C
236 help
237 MAX17040 is fuel-gauge systems for lithium-ion (Li+) batteries
238 in handheld and portable equipment. The MAX17040 is configured
239 to operate with a single lithium cell
240
241config BATTERY_MAX17042
242 tristate "Maxim MAX17042/17047/17050/8997/8966 Fuel Gauge"
243 depends on I2C
244 select REGMAP_I2C
245 help
246 MAX17042 is fuel-gauge systems for lithium-ion (Li+) batteries
247 in handheld and portable equipment. The MAX17042 is configured
248 to operate with a single lithium cell. MAX8997 and MAX8966 are
249 multi-function devices that include fuel gauages that are compatible
250 with MAX17042. This driver also supports max17047/50 chips which are
251 improved version of max17042.
252
253config BATTERY_Z2
254 tristate "Z2 battery driver"
255 depends on I2C && MACH_ZIPIT2
256 help
257 Say Y to include support for the battery on the Zipit Z2.
258
259config BATTERY_S3C_ADC
260 tristate "Battery driver for Samsung ADC based monitoring"
261 depends on S3C_ADC
262 help
263 Say Y here to enable support for iPAQ h1930/h1940/rx1950 battery
264
265config BATTERY_TWL4030_MADC
266 tristate "TWL4030 MADC battery driver"
267 depends on TWL4030_MADC
268 help
269 Say Y here to enable this dumb driver for batteries managed
270 through the TWL4030 MADC.
271
272config CHARGER_88PM860X
273 tristate "Marvell 88PM860x Charger driver"
274 depends on MFD_88PM860X && BATTERY_88PM860X
275 help
276 Say Y here to enable charger for Marvell 88PM860x chip.
277
278config CHARGER_PCF50633
279 tristate "NXP PCF50633 MBC"
280 depends on MFD_PCF50633
281 help
282 Say Y to include support for NXP PCF50633 Main Battery Charger.
283
284config BATTERY_JZ4740
285 tristate "Ingenic JZ4740 battery"
286 depends on MACH_JZ4740
287 depends on MFD_JZ4740_ADC
288 help
289 Say Y to enable support for the battery on Ingenic JZ4740 based
290 boards.
291
292 This driver can be build as a module. If so, the module will be
293 called jz4740-battery.
294
295config BATTERY_INTEL_MID
296 tristate "Battery driver for Intel MID platforms"
297 depends on INTEL_SCU_IPC && SPI
298 help
299 Say Y here to enable the battery driver on Intel MID
300 platforms.
301
302config BATTERY_RX51
303 tristate "Nokia RX-51 (N900) battery driver"
304 depends on TWL4030_MADC
305 help
306 Say Y here to enable support for battery information on Nokia
307 RX-51, also known as N900 tablet.
308
309config CHARGER_ISP1704
310 tristate "ISP1704 USB Charger Detection"
311 depends on USB_PHY
312 depends on USB_GADGET || !USB_GADGET # if USB_GADGET=m, this can't be 'y'
313 help
314 Say Y to enable support for USB Charger Detection with
315 ISP1707/ISP1704 USB transceivers.
316
317config CHARGER_MAX8903
318 tristate "MAX8903 Battery DC-DC Charger for USB and Adapter Power"
319 help
320 Say Y to enable support for the MAX8903 DC-DC charger and sysfs.
321 The driver supports controlling charger-enable and current-limit
322 pins based on the status of charger connections with interrupt
323 handlers.
324
325config CHARGER_TWL4030
326 tristate "OMAP TWL4030 BCI charger driver"
327 depends on IIO && TWL4030_CORE
328 help
329 Say Y here to enable support for TWL4030 Battery Charge Interface.
330
331config CHARGER_LP8727
332 tristate "TI/National Semiconductor LP8727 charger driver"
333 depends on I2C
334 help
335 Say Y here to enable support for LP8727 Charger Driver.
336
337config CHARGER_LP8788
338 tristate "TI LP8788 charger driver"
339 depends on MFD_LP8788
340 depends on LP8788_ADC
341 depends on IIO
342 help
343 Say Y to enable support for the LP8788 linear charger.
344
345config CHARGER_GPIO
346 tristate "GPIO charger"
347 depends on GPIOLIB || COMPILE_TEST
348 help
349 Say Y to include support for chargers which report their online status
350 through a GPIO pin.
351
352 This driver can be build as a module. If so, the module will be
353 called gpio-charger.
354
355config CHARGER_MANAGER
356 bool "Battery charger manager for multiple chargers"
357 depends on REGULATOR
358 select EXTCON
359 help
360 Say Y to enable charger-manager support, which allows multiple
361 chargers attached to a battery and multiple batteries attached to a
362 system. The charger-manager also can monitor charging status in
363 runtime and in suspend-to-RAM by waking up the system periodically
364 with help of suspend_again support.
365
366config CHARGER_MAX14577
367 tristate "Maxim MAX14577/77836 battery charger driver"
368 depends on MFD_MAX14577
369 help
370 Say Y to enable support for the battery charger control sysfs and
371 platform data of MAX14577/77836 MUICs.
372
373config CHARGER_MAX77693
374 tristate "Maxim MAX77693 battery charger driver"
375 depends on MFD_MAX77693
376 help
377 Say Y to enable support for the Maxim MAX77693 battery charger.
378
379config CHARGER_MAX8997
380 tristate "Maxim MAX8997/MAX8966 PMIC battery charger driver"
381 depends on MFD_MAX8997 && REGULATOR_MAX8997
382 help
383 Say Y to enable support for the battery charger control sysfs and
384 platform data of MAX8997/LP3974 PMICs.
385
386config CHARGER_MAX8998
387 tristate "Maxim MAX8998/LP3974 PMIC battery charger driver"
388 depends on MFD_MAX8998 && REGULATOR_MAX8998
389 help
390 Say Y to enable support for the battery charger control sysfs and
391 platform data of MAX8998/LP3974 PMICs.
392
393config CHARGER_QCOM_SMBB
394 tristate "Qualcomm Switch-Mode Battery Charger and Boost"
395 depends on MFD_SPMI_PMIC || COMPILE_TEST
396 depends on OF
397 depends on EXTCON
398 help
399 Say Y to include support for the Switch-Mode Battery Charger and
400 Boost (SMBB) hardware found in Qualcomm PM8941 PMICs. The charger
401 is an integrated, single-cell lithium-ion battery charger. DT
402 configuration is required for loading, see the devicetree
403 documentation for more detail. The base name for this driver is
404 'pm8941_charger'.
405
406config CHARGER_BQ2415X
407 tristate "TI BQ2415x battery charger driver"
408 depends on I2C
409 help
410 Say Y to enable support for the TI BQ2415x battery charger
411 PMICs.
412
413 You'll need this driver to charge batteries on e.g. Nokia
414 RX-51/N900.
415
416config CHARGER_BQ24190
417 tristate "TI BQ24190 battery charger driver"
418 depends on I2C
419 depends on GPIOLIB || COMPILE_TEST
420 help
421 Say Y to enable support for the TI BQ24190 battery charger.
422
423config CHARGER_BQ24257
424 tristate "TI BQ24250/24251/24257 battery charger driver"
425 depends on I2C
426 depends on GPIOLIB || COMPILE_TEST
427 depends on REGMAP_I2C
428 help
429 Say Y to enable support for the TI BQ24250, BQ24251, and BQ24257 battery
430 chargers.
431
432config CHARGER_BQ24735
433 tristate "TI BQ24735 battery charger support"
434 depends on I2C
435 depends on GPIOLIB || COMPILE_TEST
436 help
437 Say Y to enable support for the TI BQ24735 battery charger.
438
439config CHARGER_BQ25890
440 tristate "TI BQ25890 battery charger driver"
441 depends on I2C
442 depends on GPIOLIB || COMPILE_TEST
443 select REGMAP_I2C
444 help
445 Say Y to enable support for the TI BQ25890 battery charger.
446
447config CHARGER_SMB347
448 tristate "Summit Microelectronics SMB347 Battery Charger"
449 depends on I2C
450 select REGMAP_I2C
451 help
452 Say Y to include support for Summit Microelectronics SMB347
453 Battery Charger.
454
455config CHARGER_TPS65090
456 tristate "TPS65090 battery charger driver"
457 depends on MFD_TPS65090
458 help
459 Say Y here to enable support for battery charging with TPS65090
460 PMIC chips.
461
462config CHARGER_TPS65217
463 tristate "TPS65217 battery charger driver"
464 depends on MFD_TPS65217
465 help
466 Say Y here to enable support for battery charging with TPS65217
467 PMIC chips.
468
469config BATTERY_GAUGE_LTC2941
470 tristate "LTC2941/LTC2943 Battery Gauge Driver"
471 depends on I2C
472 help
473 Say Y here to include support for LTC2941 and LTC2943 Battery
474 Gauge IC. The driver reports the charge count continuously, and
475 measures the voltage and temperature every 10 seconds.
476
477config AB8500_BM
478 bool "AB8500 Battery Management Driver"
479 depends on AB8500_CORE && AB8500_GPADC
480 help
481 Say Y to include support for AB8500 battery management.
482
483config BATTERY_GOLDFISH
484 tristate "Goldfish battery driver"
485 depends on GOLDFISH || COMPILE_TEST
486 depends on HAS_IOMEM
487 help
488 Say Y to enable support for the battery and AC power in the
489 Goldfish emulator.
490
491config BATTERY_RT5033
492 tristate "RT5033 fuel gauge support"
493 depends on MFD_RT5033
494 help
495 This adds support for battery fuel gauge in Richtek RT5033 PMIC.
496 The fuelgauge calculates and determines the battery state of charge
497 according to battery open circuit voltage.
498
499config CHARGER_RT9455
500 tristate "Richtek RT9455 battery charger driver"
501 depends on I2C
502 depends on GPIOLIB || COMPILE_TEST
503 select REGMAP_I2C
504 help
505 Say Y to enable support for Richtek RT9455 battery charger.
506
507config AXP20X_POWER
508 tristate "AXP20x power supply driver"
509 depends on MFD_AXP20X
510 help
511 This driver provides support for the power supply features of
512 AXP20x PMIC.
513
514endif # POWER_SUPPLY
515
516source "drivers/power/reset/Kconfig"
517source "drivers/power/avs/Kconfig" 1source "drivers/power/avs/Kconfig"
2source "drivers/power/reset/Kconfig"
3source "drivers/power/supply/Kconfig"
diff --git a/drivers/power/Makefile b/drivers/power/Makefile
index e46b75d448a5..ff35c712d824 100644
--- a/drivers/power/Makefile
+++ b/drivers/power/Makefile
@@ -1,76 +1,3 @@
1subdir-ccflags-$(CONFIG_POWER_SUPPLY_DEBUG) := -DDEBUG
2
3power_supply-y := power_supply_core.o
4power_supply-$(CONFIG_SYSFS) += power_supply_sysfs.o
5power_supply-$(CONFIG_LEDS_TRIGGERS) += power_supply_leds.o
6
7obj-$(CONFIG_POWER_SUPPLY) += power_supply.o
8obj-$(CONFIG_GENERIC_ADC_BATTERY) += generic-adc-battery.o
9
10obj-$(CONFIG_PDA_POWER) += pda_power.o
11obj-$(CONFIG_APM_POWER) += apm_power.o
12obj-$(CONFIG_AXP20X_POWER) += axp20x_usb_power.o
13obj-$(CONFIG_MAX8925_POWER) += max8925_power.o
14obj-$(CONFIG_WM831X_BACKUP) += wm831x_backup.o
15obj-$(CONFIG_WM831X_POWER) += wm831x_power.o
16obj-$(CONFIG_WM8350_POWER) += wm8350_power.o
17obj-$(CONFIG_TEST_POWER) += test_power.o
18
19obj-$(CONFIG_BATTERY_88PM860X) += 88pm860x_battery.o
20obj-$(CONFIG_BATTERY_ACT8945A) += act8945a_charger.o
21obj-$(CONFIG_BATTERY_DS2760) += ds2760_battery.o
22obj-$(CONFIG_BATTERY_DS2780) += ds2780_battery.o
23obj-$(CONFIG_BATTERY_DS2781) += ds2781_battery.o
24obj-$(CONFIG_BATTERY_DS2782) += ds2782_battery.o
25obj-$(CONFIG_BATTERY_GAUGE_LTC2941) += ltc2941-battery-gauge.o
26obj-$(CONFIG_BATTERY_GOLDFISH) += goldfish_battery.o
27obj-$(CONFIG_BATTERY_PMU) += pmu_battery.o
28obj-$(CONFIG_BATTERY_OLPC) += olpc_battery.o
29obj-$(CONFIG_BATTERY_TOSA) += tosa_battery.o
30obj-$(CONFIG_BATTERY_COLLIE) += collie_battery.o
31obj-$(CONFIG_BATTERY_IPAQ_MICRO) += ipaq_micro_battery.o
32obj-$(CONFIG_BATTERY_WM97XX) += wm97xx_battery.o
33obj-$(CONFIG_BATTERY_SBS) += sbs-battery.o
34obj-$(CONFIG_BATTERY_BQ27XXX) += bq27xxx_battery.o
35obj-$(CONFIG_BATTERY_BQ27XXX_I2C) += bq27xxx_battery_i2c.o
36obj-$(CONFIG_BATTERY_DA9030) += da9030_battery.o
37obj-$(CONFIG_BATTERY_DA9052) += da9052-battery.o
38obj-$(CONFIG_CHARGER_DA9150) += da9150-charger.o
39obj-$(CONFIG_BATTERY_DA9150) += da9150-fg.o
40obj-$(CONFIG_BATTERY_MAX17040) += max17040_battery.o
41obj-$(CONFIG_BATTERY_MAX17042) += max17042_battery.o
42obj-$(CONFIG_BATTERY_Z2) += z2_battery.o
43obj-$(CONFIG_BATTERY_RT5033) += rt5033_battery.o
44obj-$(CONFIG_CHARGER_RT9455) += rt9455_charger.o
45obj-$(CONFIG_BATTERY_S3C_ADC) += s3c_adc_battery.o
46obj-$(CONFIG_BATTERY_TWL4030_MADC) += twl4030_madc_battery.o
47obj-$(CONFIG_CHARGER_88PM860X) += 88pm860x_charger.o
48obj-$(CONFIG_CHARGER_PCF50633) += pcf50633-charger.o
49obj-$(CONFIG_BATTERY_JZ4740) += jz4740-battery.o
50obj-$(CONFIG_BATTERY_INTEL_MID) += intel_mid_battery.o
51obj-$(CONFIG_BATTERY_RX51) += rx51_battery.o
52obj-$(CONFIG_AB8500_BM) += ab8500_bmdata.o ab8500_charger.o ab8500_fg.o ab8500_btemp.o abx500_chargalg.o pm2301_charger.o
53obj-$(CONFIG_CHARGER_ISP1704) += isp1704_charger.o
54obj-$(CONFIG_CHARGER_MAX8903) += max8903_charger.o
55obj-$(CONFIG_CHARGER_TWL4030) += twl4030_charger.o
56obj-$(CONFIG_CHARGER_LP8727) += lp8727_charger.o
57obj-$(CONFIG_CHARGER_LP8788) += lp8788-charger.o
58obj-$(CONFIG_CHARGER_GPIO) += gpio-charger.o
59obj-$(CONFIG_CHARGER_MANAGER) += charger-manager.o
60obj-$(CONFIG_CHARGER_MAX14577) += max14577_charger.o
61obj-$(CONFIG_CHARGER_MAX77693) += max77693_charger.o
62obj-$(CONFIG_CHARGER_MAX8997) += max8997_charger.o
63obj-$(CONFIG_CHARGER_MAX8998) += max8998_charger.o
64obj-$(CONFIG_CHARGER_QCOM_SMBB) += qcom_smbb.o
65obj-$(CONFIG_CHARGER_BQ2415X) += bq2415x_charger.o
66obj-$(CONFIG_CHARGER_BQ24190) += bq24190_charger.o
67obj-$(CONFIG_CHARGER_BQ24257) += bq24257_charger.o
68obj-$(CONFIG_CHARGER_BQ24735) += bq24735-charger.o
69obj-$(CONFIG_CHARGER_BQ25890) += bq25890_charger.o
70obj-$(CONFIG_POWER_AVS) += avs/ 1obj-$(CONFIG_POWER_AVS) += avs/
71obj-$(CONFIG_CHARGER_SMB347) += smb347-charger.o
72obj-$(CONFIG_CHARGER_TPS65090) += tps65090-charger.o
73obj-$(CONFIG_CHARGER_TPS65217) += tps65217_charger.o
74obj-$(CONFIG_POWER_RESET) += reset/ 2obj-$(CONFIG_POWER_RESET) += reset/
75obj-$(CONFIG_AXP288_FUEL_GAUGE) += axp288_fuel_gauge.o 3obj-$(CONFIG_POWER_SUPPLY) += supply/
76obj-$(CONFIG_AXP288_CHARGER) += axp288_charger.o
diff --git a/drivers/power/act8945a_charger.c b/drivers/power/act8945a_charger.c
deleted file mode 100644
index b5c00e45741e..000000000000
--- a/drivers/power/act8945a_charger.c
+++ /dev/null
@@ -1,359 +0,0 @@
1/*
2 * Power supply driver for the Active-semi ACT8945A PMIC
3 *
4 * Copyright (C) 2015 Atmel Corporation
5 *
6 * Author: Wenyou Yang <wenyou.yang@atmel.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 *
12 */
13#include <linux/module.h>
14#include <linux/of.h>
15#include <linux/of_gpio.h>
16#include <linux/platform_device.h>
17#include <linux/power_supply.h>
18#include <linux/regmap.h>
19
20static const char *act8945a_charger_model = "ACT8945A";
21static const char *act8945a_charger_manufacturer = "Active-semi";
22
23/**
24 * ACT8945A Charger Register Map
25 */
26
27/* 0x70: Reserved */
28#define ACT8945A_APCH_CFG 0x71
29#define ACT8945A_APCH_STATUS 0x78
30#define ACT8945A_APCH_CTRL 0x79
31#define ACT8945A_APCH_STATE 0x7A
32
33/* ACT8945A_APCH_CFG */
34#define APCH_CFG_OVPSET (0x3 << 0)
35#define APCH_CFG_OVPSET_6V6 (0x0 << 0)
36#define APCH_CFG_OVPSET_7V (0x1 << 0)
37#define APCH_CFG_OVPSET_7V5 (0x2 << 0)
38#define APCH_CFG_OVPSET_8V (0x3 << 0)
39#define APCH_CFG_PRETIMO (0x3 << 2)
40#define APCH_CFG_PRETIMO_40_MIN (0x0 << 2)
41#define APCH_CFG_PRETIMO_60_MIN (0x1 << 2)
42#define APCH_CFG_PRETIMO_80_MIN (0x2 << 2)
43#define APCH_CFG_PRETIMO_DISABLED (0x3 << 2)
44#define APCH_CFG_TOTTIMO (0x3 << 4)
45#define APCH_CFG_TOTTIMO_3_HOUR (0x0 << 4)
46#define APCH_CFG_TOTTIMO_4_HOUR (0x1 << 4)
47#define APCH_CFG_TOTTIMO_5_HOUR (0x2 << 4)
48#define APCH_CFG_TOTTIMO_DISABLED (0x3 << 4)
49#define APCH_CFG_SUSCHG (0x1 << 7)
50
51#define APCH_STATUS_CHGDAT BIT(0)
52#define APCH_STATUS_INDAT BIT(1)
53#define APCH_STATUS_TEMPDAT BIT(2)
54#define APCH_STATUS_TIMRDAT BIT(3)
55#define APCH_STATUS_CHGSTAT BIT(4)
56#define APCH_STATUS_INSTAT BIT(5)
57#define APCH_STATUS_TEMPSTAT BIT(6)
58#define APCH_STATUS_TIMRSTAT BIT(7)
59
60#define APCH_CTRL_CHGEOCOUT BIT(0)
61#define APCH_CTRL_INDIS BIT(1)
62#define APCH_CTRL_TEMPOUT BIT(2)
63#define APCH_CTRL_TIMRPRE BIT(3)
64#define APCH_CTRL_CHGEOCIN BIT(4)
65#define APCH_CTRL_INCON BIT(5)
66#define APCH_CTRL_TEMPIN BIT(6)
67#define APCH_CTRL_TIMRTOT BIT(7)
68
69#define APCH_STATE_ACINSTAT (0x1 << 1)
70#define APCH_STATE_CSTATE (0x3 << 4)
71#define APCH_STATE_CSTATE_SHIFT 4
72#define APCH_STATE_CSTATE_DISABLED 0x00
73#define APCH_STATE_CSTATE_EOC 0x01
74#define APCH_STATE_CSTATE_FAST 0x02
75#define APCH_STATE_CSTATE_PRE 0x03
76
77struct act8945a_charger {
78 struct regmap *regmap;
79 bool battery_temperature;
80};
81
82static int act8945a_get_charger_state(struct regmap *regmap, int *val)
83{
84 int ret;
85 unsigned int status, state;
86
87 ret = regmap_read(regmap, ACT8945A_APCH_STATUS, &status);
88 if (ret < 0)
89 return ret;
90
91 ret = regmap_read(regmap, ACT8945A_APCH_STATE, &state);
92 if (ret < 0)
93 return ret;
94
95 state &= APCH_STATE_CSTATE;
96 state >>= APCH_STATE_CSTATE_SHIFT;
97
98 if (state == APCH_STATE_CSTATE_EOC) {
99 if (status & APCH_STATUS_CHGDAT)
100 *val = POWER_SUPPLY_STATUS_FULL;
101 else
102 *val = POWER_SUPPLY_STATUS_NOT_CHARGING;
103 } else if ((state == APCH_STATE_CSTATE_FAST) ||
104 (state == APCH_STATE_CSTATE_PRE)) {
105 *val = POWER_SUPPLY_STATUS_CHARGING;
106 } else {
107 *val = POWER_SUPPLY_STATUS_NOT_CHARGING;
108 }
109
110 return 0;
111}
112
113static int act8945a_get_charge_type(struct regmap *regmap, int *val)
114{
115 int ret;
116 unsigned int state;
117
118 ret = regmap_read(regmap, ACT8945A_APCH_STATE, &state);
119 if (ret < 0)
120 return ret;
121
122 state &= APCH_STATE_CSTATE;
123 state >>= APCH_STATE_CSTATE_SHIFT;
124
125 switch (state) {
126 case APCH_STATE_CSTATE_PRE:
127 *val = POWER_SUPPLY_CHARGE_TYPE_TRICKLE;
128 break;
129 case APCH_STATE_CSTATE_FAST:
130 *val = POWER_SUPPLY_CHARGE_TYPE_FAST;
131 break;
132 case APCH_STATE_CSTATE_EOC:
133 case APCH_STATE_CSTATE_DISABLED:
134 default:
135 *val = POWER_SUPPLY_CHARGE_TYPE_NONE;
136 }
137
138 return 0;
139}
140
141static int act8945a_get_battery_health(struct act8945a_charger *charger,
142 struct regmap *regmap, int *val)
143{
144 int ret;
145 unsigned int status;
146
147 ret = regmap_read(regmap, ACT8945A_APCH_STATUS, &status);
148 if (ret < 0)
149 return ret;
150
151 if (charger->battery_temperature && !(status & APCH_STATUS_TEMPDAT))
152 *val = POWER_SUPPLY_HEALTH_OVERHEAT;
153 else if (!(status & APCH_STATUS_INDAT))
154 *val = POWER_SUPPLY_HEALTH_OVERVOLTAGE;
155 else if (status & APCH_STATUS_TIMRDAT)
156 *val = POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE;
157 else
158 *val = POWER_SUPPLY_HEALTH_GOOD;
159
160 return 0;
161}
162
163static enum power_supply_property act8945a_charger_props[] = {
164 POWER_SUPPLY_PROP_STATUS,
165 POWER_SUPPLY_PROP_CHARGE_TYPE,
166 POWER_SUPPLY_PROP_TECHNOLOGY,
167 POWER_SUPPLY_PROP_HEALTH,
168 POWER_SUPPLY_PROP_MODEL_NAME,
169 POWER_SUPPLY_PROP_MANUFACTURER
170};
171
172static int act8945a_charger_get_property(struct power_supply *psy,
173 enum power_supply_property prop,
174 union power_supply_propval *val)
175{
176 struct act8945a_charger *charger = power_supply_get_drvdata(psy);
177 struct regmap *regmap = charger->regmap;
178 int ret = 0;
179
180 switch (prop) {
181 case POWER_SUPPLY_PROP_STATUS:
182 ret = act8945a_get_charger_state(regmap, &val->intval);
183 break;
184 case POWER_SUPPLY_PROP_CHARGE_TYPE:
185 ret = act8945a_get_charge_type(regmap, &val->intval);
186 break;
187 case POWER_SUPPLY_PROP_TECHNOLOGY:
188 val->intval = POWER_SUPPLY_TECHNOLOGY_LION;
189 break;
190 case POWER_SUPPLY_PROP_HEALTH:
191 ret = act8945a_get_battery_health(charger,
192 regmap, &val->intval);
193 break;
194 case POWER_SUPPLY_PROP_MODEL_NAME:
195 val->strval = act8945a_charger_model;
196 break;
197 case POWER_SUPPLY_PROP_MANUFACTURER:
198 val->strval = act8945a_charger_manufacturer;
199 break;
200 default:
201 return -EINVAL;
202 }
203
204 return ret;
205}
206
207static const struct power_supply_desc act8945a_charger_desc = {
208 .name = "act8945a-charger",
209 .type = POWER_SUPPLY_TYPE_BATTERY,
210 .get_property = act8945a_charger_get_property,
211 .properties = act8945a_charger_props,
212 .num_properties = ARRAY_SIZE(act8945a_charger_props),
213};
214
215#define DEFAULT_TOTAL_TIME_OUT 3
216#define DEFAULT_PRE_TIME_OUT 40
217#define DEFAULT_INPUT_OVP_THRESHOLD 6600
218
219static int act8945a_charger_config(struct device *dev,
220 struct act8945a_charger *charger)
221{
222 struct device_node *np = dev->of_node;
223 enum of_gpio_flags flags;
224 struct regmap *regmap = charger->regmap;
225
226 u32 total_time_out;
227 u32 pre_time_out;
228 u32 input_voltage_threshold;
229 int chglev_pin;
230
231 unsigned int value = 0;
232
233 if (!np) {
234 dev_err(dev, "no charger of node\n");
235 return -EINVAL;
236 }
237
238 charger->battery_temperature = of_property_read_bool(np,
239 "active-semi,check-battery-temperature");
240
241 chglev_pin = of_get_named_gpio_flags(np,
242 "active-semi,chglev-gpios", 0, &flags);
243
244 if (gpio_is_valid(chglev_pin)) {
245 gpio_set_value(chglev_pin,
246 ((flags == OF_GPIO_ACTIVE_LOW) ? 0 : 1));
247 }
248
249 if (of_property_read_u32(np,
250 "active-semi,input-voltage-threshold-microvolt",
251 &input_voltage_threshold))
252 input_voltage_threshold = DEFAULT_INPUT_OVP_THRESHOLD;
253
254 if (of_property_read_u32(np,
255 "active-semi,precondition-timeout",
256 &pre_time_out))
257 pre_time_out = DEFAULT_PRE_TIME_OUT;
258
259 if (of_property_read_u32(np, "active-semi,total-timeout",
260 &total_time_out))
261 total_time_out = DEFAULT_TOTAL_TIME_OUT;
262
263 switch (input_voltage_threshold) {
264 case 8000:
265 value |= APCH_CFG_OVPSET_8V;
266 break;
267 case 7500:
268 value |= APCH_CFG_OVPSET_7V5;
269 break;
270 case 7000:
271 value |= APCH_CFG_OVPSET_7V;
272 break;
273 case 6600:
274 default:
275 value |= APCH_CFG_OVPSET_6V6;
276 break;
277 }
278
279 switch (pre_time_out) {
280 case 60:
281 value |= APCH_CFG_PRETIMO_60_MIN;
282 break;
283 case 80:
284 value |= APCH_CFG_PRETIMO_80_MIN;
285 break;
286 case 0:
287 value |= APCH_CFG_PRETIMO_DISABLED;
288 break;
289 case 40:
290 default:
291 value |= APCH_CFG_PRETIMO_40_MIN;
292 break;
293 }
294
295 switch (total_time_out) {
296 case 4:
297 value |= APCH_CFG_TOTTIMO_4_HOUR;
298 break;
299 case 5:
300 value |= APCH_CFG_TOTTIMO_5_HOUR;
301 break;
302 case 0:
303 value |= APCH_CFG_TOTTIMO_DISABLED;
304 break;
305 case 3:
306 default:
307 value |= APCH_CFG_TOTTIMO_3_HOUR;
308 break;
309 }
310
311 return regmap_write(regmap, ACT8945A_APCH_CFG, value);
312}
313
314static int act8945a_charger_probe(struct platform_device *pdev)
315{
316 struct act8945a_charger *charger;
317 struct power_supply *psy;
318 struct power_supply_config psy_cfg = {};
319 int ret;
320
321 charger = devm_kzalloc(&pdev->dev, sizeof(*charger), GFP_KERNEL);
322 if (!charger)
323 return -ENOMEM;
324
325 charger->regmap = dev_get_regmap(pdev->dev.parent, NULL);
326 if (!charger->regmap) {
327 dev_err(&pdev->dev, "Parent did not provide regmap\n");
328 return -EINVAL;
329 }
330
331 ret = act8945a_charger_config(pdev->dev.parent, charger);
332 if (ret)
333 return ret;
334
335 psy_cfg.of_node = pdev->dev.parent->of_node;
336 psy_cfg.drv_data = charger;
337
338 psy = devm_power_supply_register(&pdev->dev,
339 &act8945a_charger_desc,
340 &psy_cfg);
341 if (IS_ERR(psy)) {
342 dev_err(&pdev->dev, "failed to register power supply\n");
343 return PTR_ERR(psy);
344 }
345
346 return 0;
347}
348
349static struct platform_driver act8945a_charger_driver = {
350 .driver = {
351 .name = "act8945a-charger",
352 },
353 .probe = act8945a_charger_probe,
354};
355module_platform_driver(act8945a_charger_driver);
356
357MODULE_DESCRIPTION("Active-semi ACT8945A ActivePath charger driver");
358MODULE_AUTHOR("Wenyou Yang <wenyou.yang@atmel.com>");
359MODULE_LICENSE("GPL");
diff --git a/drivers/power/reset/keystone-reset.c b/drivers/power/reset/keystone-reset.c
index c70f1bffe038..09380857a1c5 100644
--- a/drivers/power/reset/keystone-reset.c
+++ b/drivers/power/reset/keystone-reset.c
@@ -139,7 +139,7 @@ static int rsctrl_probe(struct platform_device *pdev)
139 } 139 }
140 140
141 if (val >= WDT_MUX_NUMBER) { 141 if (val >= WDT_MUX_NUMBER) {
142 dev_err(dev, "ti,wdt-list property can contain" 142 dev_err(dev, "ti,wdt-list property can contain "
143 "only numbers < 4\n"); 143 "only numbers < 4\n");
144 return -EINVAL; 144 return -EINVAL;
145 } 145 }
diff --git a/drivers/power/reset/reboot-mode.c b/drivers/power/reset/reboot-mode.c
index 2dfbbce0f817..fb512183ace3 100644
--- a/drivers/power/reset/reboot-mode.c
+++ b/drivers/power/reset/reboot-mode.c
@@ -135,6 +135,65 @@ int reboot_mode_unregister(struct reboot_mode_driver *reboot)
135} 135}
136EXPORT_SYMBOL_GPL(reboot_mode_unregister); 136EXPORT_SYMBOL_GPL(reboot_mode_unregister);
137 137
138static void devm_reboot_mode_release(struct device *dev, void *res)
139{
140 reboot_mode_unregister(*(struct reboot_mode_driver **)res);
141}
142
143/**
144 * devm_reboot_mode_register() - resource managed reboot_mode_register()
145 * @dev: device to associate this resource with
146 * @reboot: reboot mode driver
147 *
148 * Returns: 0 on success or a negative error code on failure.
149 */
150int devm_reboot_mode_register(struct device *dev,
151 struct reboot_mode_driver *reboot)
152{
153 struct reboot_mode_driver **dr;
154 int rc;
155
156 dr = devres_alloc(devm_reboot_mode_release, sizeof(*dr), GFP_KERNEL);
157 if (!dr)
158 return -ENOMEM;
159
160 rc = reboot_mode_register(reboot);
161 if (rc) {
162 devres_free(dr);
163 return rc;
164 }
165
166 *dr = reboot;
167 devres_add(dev, dr);
168
169 return 0;
170}
171EXPORT_SYMBOL_GPL(devm_reboot_mode_register);
172
173static int devm_reboot_mode_match(struct device *dev, void *res, void *data)
174{
175 struct reboot_mode_driver **p = res;
176
177 if (WARN_ON(!p || !*p))
178 return 0;
179
180 return *p == data;
181}
182
183/**
184 * devm_reboot_mode_unregister() - resource managed reboot_mode_unregister()
185 * @dev: device to associate this resource with
186 * @reboot: reboot mode driver
187 */
188void devm_reboot_mode_unregister(struct device *dev,
189 struct reboot_mode_driver *reboot)
190{
191 WARN_ON(devres_release(dev,
192 devm_reboot_mode_release,
193 devm_reboot_mode_match, reboot));
194}
195EXPORT_SYMBOL_GPL(devm_reboot_mode_unregister);
196
138MODULE_AUTHOR("Andy Yan <andy.yan@rock-chips.com"); 197MODULE_AUTHOR("Andy Yan <andy.yan@rock-chips.com");
139MODULE_DESCRIPTION("System reboot mode core library"); 198MODULE_DESCRIPTION("System reboot mode core library");
140MODULE_LICENSE("GPL v2"); 199MODULE_LICENSE("GPL v2");
diff --git a/drivers/power/reset/reboot-mode.h b/drivers/power/reset/reboot-mode.h
index 2491bb71f591..75f7fe5c881f 100644
--- a/drivers/power/reset/reboot-mode.h
+++ b/drivers/power/reset/reboot-mode.h
@@ -10,5 +10,9 @@ struct reboot_mode_driver {
10 10
11int reboot_mode_register(struct reboot_mode_driver *reboot); 11int reboot_mode_register(struct reboot_mode_driver *reboot);
12int reboot_mode_unregister(struct reboot_mode_driver *reboot); 12int reboot_mode_unregister(struct reboot_mode_driver *reboot);
13int devm_reboot_mode_register(struct device *dev,
14 struct reboot_mode_driver *reboot);
15void devm_reboot_mode_unregister(struct device *dev,
16 struct reboot_mode_driver *reboot);
13 17
14#endif 18#endif
diff --git a/drivers/power/reset/st-poweroff.c b/drivers/power/reset/st-poweroff.c
index a488877a3538..2046b31232f7 100644
--- a/drivers/power/reset/st-poweroff.c
+++ b/drivers/power/reset/st-poweroff.c
@@ -28,28 +28,6 @@ struct reset_syscfg {
28 unsigned int mask_rst_msk; 28 unsigned int mask_rst_msk;
29}; 29};
30 30
31/* STiH415 */
32#define STIH415_SYSCFG_11 0x2c
33#define STIH415_SYSCFG_15 0x3c
34
35static struct reset_syscfg stih415_reset = {
36 .offset_rst = STIH415_SYSCFG_11,
37 .mask_rst = BIT(0),
38 .offset_rst_msk = STIH415_SYSCFG_15,
39 .mask_rst_msk = BIT(0)
40};
41
42/* STiH416 */
43#define STIH416_SYSCFG_500 0x7d0
44#define STIH416_SYSCFG_504 0x7e0
45
46static struct reset_syscfg stih416_reset = {
47 .offset_rst = STIH416_SYSCFG_500,
48 .mask_rst = BIT(0),
49 .offset_rst_msk = STIH416_SYSCFG_504,
50 .mask_rst_msk = BIT(0)
51};
52
53/* STiH407 */ 31/* STiH407 */
54#define STIH407_SYSCFG_4000 0x0 32#define STIH407_SYSCFG_4000 0x0
55#define STIH407_SYSCFG_4008 0x20 33#define STIH407_SYSCFG_4008 0x20
@@ -61,16 +39,6 @@ static struct reset_syscfg stih407_reset = {
61 .mask_rst_msk = BIT(0) 39 .mask_rst_msk = BIT(0)
62}; 40};
63 41
64/* STiD127 */
65#define STID127_SYSCFG_700 0x0
66#define STID127_SYSCFG_773 0x124
67
68static struct reset_syscfg stid127_reset = {
69 .offset_rst = STID127_SYSCFG_773,
70 .mask_rst = BIT(0),
71 .offset_rst_msk = STID127_SYSCFG_700,
72 .mask_rst_msk = BIT(8)
73};
74 42
75static struct reset_syscfg *st_restart_syscfg; 43static struct reset_syscfg *st_restart_syscfg;
76 44
@@ -99,17 +67,8 @@ static struct notifier_block st_restart_nb = {
99 67
100static const struct of_device_id st_reset_of_match[] = { 68static const struct of_device_id st_reset_of_match[] = {
101 { 69 {
102 .compatible = "st,stih415-restart",
103 .data = (void *)&stih415_reset,
104 }, {
105 .compatible = "st,stih416-restart",
106 .data = (void *)&stih416_reset,
107 }, {
108 .compatible = "st,stih407-restart", 70 .compatible = "st,stih407-restart",
109 .data = (void *)&stih407_reset, 71 .data = (void *)&stih407_reset,
110 }, {
111 .compatible = "st,stid127-restart",
112 .data = (void *)&stid127_reset,
113 }, 72 },
114 {} 73 {}
115}; 74};
diff --git a/drivers/power/reset/syscon-reboot-mode.c b/drivers/power/reset/syscon-reboot-mode.c
index 9e1cba5dd58e..1ecb51d67149 100644
--- a/drivers/power/reset/syscon-reboot-mode.c
+++ b/drivers/power/reset/syscon-reboot-mode.c
@@ -53,8 +53,6 @@ static int syscon_reboot_mode_probe(struct platform_device *pdev)
53 syscon_rbm->reboot.write = syscon_reboot_mode_write; 53 syscon_rbm->reboot.write = syscon_reboot_mode_write;
54 syscon_rbm->mask = 0xffffffff; 54 syscon_rbm->mask = 0xffffffff;
55 55
56 dev_set_drvdata(&pdev->dev, syscon_rbm);
57
58 syscon_rbm->map = syscon_node_to_regmap(pdev->dev.parent->of_node); 56 syscon_rbm->map = syscon_node_to_regmap(pdev->dev.parent->of_node);
59 if (IS_ERR(syscon_rbm->map)) 57 if (IS_ERR(syscon_rbm->map))
60 return PTR_ERR(syscon_rbm->map); 58 return PTR_ERR(syscon_rbm->map);
@@ -65,20 +63,13 @@ static int syscon_reboot_mode_probe(struct platform_device *pdev)
65 63
66 of_property_read_u32(pdev->dev.of_node, "mask", &syscon_rbm->mask); 64 of_property_read_u32(pdev->dev.of_node, "mask", &syscon_rbm->mask);
67 65
68 ret = reboot_mode_register(&syscon_rbm->reboot); 66 ret = devm_reboot_mode_register(&pdev->dev, &syscon_rbm->reboot);
69 if (ret) 67 if (ret)
70 dev_err(&pdev->dev, "can't register reboot mode\n"); 68 dev_err(&pdev->dev, "can't register reboot mode\n");
71 69
72 return ret; 70 return ret;
73} 71}
74 72
75static int syscon_reboot_mode_remove(struct platform_device *pdev)
76{
77 struct syscon_reboot_mode *syscon_rbm = dev_get_drvdata(&pdev->dev);
78
79 return reboot_mode_unregister(&syscon_rbm->reboot);
80}
81
82static const struct of_device_id syscon_reboot_mode_of_match[] = { 73static const struct of_device_id syscon_reboot_mode_of_match[] = {
83 { .compatible = "syscon-reboot-mode" }, 74 { .compatible = "syscon-reboot-mode" },
84 {} 75 {}
@@ -86,7 +77,6 @@ static const struct of_device_id syscon_reboot_mode_of_match[] = {
86 77
87static struct platform_driver syscon_reboot_mode_driver = { 78static struct platform_driver syscon_reboot_mode_driver = {
88 .probe = syscon_reboot_mode_probe, 79 .probe = syscon_reboot_mode_probe,
89 .remove = syscon_reboot_mode_remove,
90 .driver = { 80 .driver = {
91 .name = "syscon-reboot-mode", 81 .name = "syscon-reboot-mode",
92 .of_match_table = syscon_reboot_mode_of_match, 82 .of_match_table = syscon_reboot_mode_of_match,
diff --git a/drivers/power/reset/xgene-reboot.c b/drivers/power/reset/xgene-reboot.c
index f07e93c97ba3..73c3d93e5318 100644
--- a/drivers/power/reset/xgene-reboot.c
+++ b/drivers/power/reset/xgene-reboot.c
@@ -81,8 +81,10 @@ static int xgene_reboot_probe(struct platform_device *pdev)
81 ctx->restart_handler.notifier_call = xgene_restart_handler; 81 ctx->restart_handler.notifier_call = xgene_restart_handler;
82 ctx->restart_handler.priority = 128; 82 ctx->restart_handler.priority = 128;
83 err = register_restart_handler(&ctx->restart_handler); 83 err = register_restart_handler(&ctx->restart_handler);
84 if (err) 84 if (err) {
85 iounmap(ctx->csr);
85 dev_err(dev, "cannot register restart handler (err=%d)\n", err); 86 dev_err(dev, "cannot register restart handler (err=%d)\n", err);
87 }
86 88
87 return err; 89 return err;
88} 90}
diff --git a/drivers/power/reset/zx-reboot.c b/drivers/power/reset/zx-reboot.c
index a5b009673d0e..b0b1eb3a78c2 100644
--- a/drivers/power/reset/zx-reboot.c
+++ b/drivers/power/reset/zx-reboot.c
@@ -58,9 +58,12 @@ static int zx_reboot_probe(struct platform_device *pdev)
58 } 58 }
59 59
60 err = register_restart_handler(&zx_restart_nb); 60 err = register_restart_handler(&zx_restart_nb);
61 if (err) 61 if (err) {
62 iounmap(base);
63 iounmap(pcu_base);
62 dev_err(&pdev->dev, "Register restart handler failed(err=%d)\n", 64 dev_err(&pdev->dev, "Register restart handler failed(err=%d)\n",
63 err); 65 err);
66 }
64 67
65 return err; 68 return err;
66} 69}
diff --git a/drivers/power/88pm860x_battery.c b/drivers/power/supply/88pm860x_battery.c
index 63c57dc82ac1..63c57dc82ac1 100644
--- a/drivers/power/88pm860x_battery.c
+++ b/drivers/power/supply/88pm860x_battery.c
diff --git a/drivers/power/88pm860x_charger.c b/drivers/power/supply/88pm860x_charger.c
index 2b82e44d9027..2b82e44d9027 100644
--- a/drivers/power/88pm860x_charger.c
+++ b/drivers/power/supply/88pm860x_charger.c
diff --git a/drivers/power/supply/Kconfig b/drivers/power/supply/Kconfig
new file mode 100644
index 000000000000..76806a0be820
--- /dev/null
+++ b/drivers/power/supply/Kconfig
@@ -0,0 +1,514 @@
1menuconfig POWER_SUPPLY
2 bool "Power supply class support"
3 help
4 Say Y here to enable power supply class support. This allows
5 power supply (batteries, AC, USB) monitoring by userspace
6 via sysfs and uevent (if available) and/or APM kernel interface
7 (if selected below).
8
9if POWER_SUPPLY
10
11config POWER_SUPPLY_DEBUG
12 bool "Power supply debug"
13 help
14 Say Y here to enable debugging messages for power supply class
15 and drivers.
16
17config PDA_POWER
18 tristate "Generic PDA/phone power driver"
19 depends on !S390
20 help
21 Say Y here to enable generic power driver for PDAs and phones with
22 one or two external power supplies (AC/USB) connected to main and
23 backup batteries, and optional builtin charger.
24
25config APM_POWER
26 tristate "APM emulation for class batteries"
27 depends on APM_EMULATION
28 help
29 Say Y here to enable support APM status emulation using
30 battery class devices.
31
32config GENERIC_ADC_BATTERY
33 tristate "Generic battery support using IIO"
34 depends on IIO
35 help
36 Say Y here to enable support for the generic battery driver
37 which uses IIO framework to read adc.
38
39config MAX8925_POWER
40 tristate "MAX8925 battery charger support"
41 depends on MFD_MAX8925
42 help
43 Say Y here to enable support for the battery charger in the Maxim
44 MAX8925 PMIC.
45
46config WM831X_BACKUP
47 tristate "WM831X backup battery charger support"
48 depends on MFD_WM831X
49 help
50 Say Y here to enable support for the backup battery charger
51 in the Wolfson Microelectronics WM831x PMICs.
52
53config WM831X_POWER
54 tristate "WM831X PMU support"
55 depends on MFD_WM831X
56 help
57 Say Y here to enable support for the power management unit
58 provided by Wolfson Microelectronics WM831x PMICs.
59
60config WM8350_POWER
61 tristate "WM8350 PMU support"
62 depends on MFD_WM8350
63 help
64 Say Y here to enable support for the power management unit
65 provided by the Wolfson Microelectronics WM8350 PMIC.
66
67config TEST_POWER
68 tristate "Test power driver"
69 help
70 This driver is used for testing. It's safe to say M here.
71
72config BATTERY_88PM860X
73 tristate "Marvell 88PM860x battery driver"
74 depends on MFD_88PM860X
75 help
76 Say Y here to enable battery monitor for Marvell 88PM860x chip.
77
78config BATTERY_ACT8945A
79 tristate "Active-semi ACT8945A charger driver"
80 depends on MFD_ACT8945A || COMPILE_TEST
81 help
82 Say Y here to enable support for power supply provided by
83 Active-semi ActivePath ACT8945A charger.
84
85config BATTERY_DS2760
86 tristate "DS2760 battery driver (HP iPAQ & others)"
87 depends on W1 && W1_SLAVE_DS2760
88 help
89 Say Y here to enable support for batteries with ds2760 chip.
90
91config BATTERY_DS2780
92 tristate "DS2780 battery driver"
93 depends on HAS_IOMEM
94 select W1
95 select W1_SLAVE_DS2780
96 help
97 Say Y here to enable support for batteries with ds2780 chip.
98
99config BATTERY_DS2781
100 tristate "DS2781 battery driver"
101 depends on HAS_IOMEM
102 select W1
103 select W1_SLAVE_DS2781
104 help
105 If you enable this you will have the DS2781 battery driver support.
106
107 The battery monitor chip is used in many batteries/devices
108 as the one who is responsible for charging/discharging/monitoring
109 Li+ batteries.
110
111 If you are unsure, say N.
112
113config BATTERY_DS2782
114 tristate "DS2782/DS2786 standalone gas-gauge"
115 depends on I2C
116 help
117 Say Y here to enable support for the DS2782/DS2786 standalone battery
118 gas-gauge.
119
120config BATTERY_PMU
121 tristate "Apple PMU battery"
122 depends on PPC32 && ADB_PMU
123 help
124 Say Y here to expose battery information on Apple machines
125 through the generic battery class.
126
127config BATTERY_OLPC
128 tristate "One Laptop Per Child battery"
129 depends on X86_32 && OLPC
130 help
131 Say Y to enable support for the battery on the OLPC laptop.
132
133config BATTERY_TOSA
134 tristate "Sharp SL-6000 (tosa) battery"
135 depends on MACH_TOSA && MFD_TC6393XB && TOUCHSCREEN_WM97XX
136 help
137 Say Y to enable support for the battery on the Sharp Zaurus
138 SL-6000 (tosa) models.
139
140config BATTERY_COLLIE
141 tristate "Sharp SL-5500 (collie) battery"
142 depends on SA1100_COLLIE && MCP_UCB1200
143 help
144 Say Y to enable support for the battery on the Sharp Zaurus
145 SL-5500 (collie) models.
146
147config BATTERY_IPAQ_MICRO
148 tristate "iPAQ Atmel Micro ASIC battery driver"
149 depends on MFD_IPAQ_MICRO
150 help
151 Choose this option if you want to monitor battery status on
152 Compaq/HP iPAQ h3100 and h3600.
153
154config BATTERY_WM97XX
155 bool "WM97xx generic battery driver"
156 depends on TOUCHSCREEN_WM97XX=y
157 help
158 Say Y to enable support for battery measured by WM97xx aux port.
159
160config BATTERY_SBS
161 tristate "SBS Compliant gas gauge"
162 depends on I2C
163 help
164 Say Y to include support for SBS battery driver for SBS-compliant
165 gas gauges.
166
167config BATTERY_BQ27XXX
168 tristate "BQ27xxx battery driver"
169 help
170 Say Y here to enable support for batteries with BQ27xxx chips.
171
172config BATTERY_BQ27XXX_I2C
173 tristate "BQ27xxx I2C support"
174 depends on BATTERY_BQ27XXX
175 depends on I2C
176 default y
177 help
178 Say Y here to enable support for batteries with BQ27xxx chips
179 connected over an I2C bus.
180
181config BATTERY_DA9030
182 tristate "DA9030 battery driver"
183 depends on PMIC_DA903X
184 help
185 Say Y here to enable support for batteries charger integrated into
186 DA9030 PMIC.
187
188config BATTERY_DA9052
189 tristate "Dialog DA9052 Battery"
190 depends on PMIC_DA9052
191 help
192 Say Y here to enable support for batteries charger integrated into
193 DA9052 PMIC.
194
195config CHARGER_DA9150
196 tristate "Dialog Semiconductor DA9150 Charger support"
197 depends on MFD_DA9150
198 depends on DA9150_GPADC
199 depends on IIO
200 help
201 Say Y here to enable support for charger unit of the DA9150
202 Integrated Charger & Fuel-Gauge IC.
203
204 This driver can also be built as a module. If so, the module will be
205 called da9150-charger.
206
207config BATTERY_DA9150
208 tristate "Dialog Semiconductor DA9150 Fuel Gauge support"
209 depends on MFD_DA9150
210 help
211 Say Y here to enable support for the Fuel-Gauge unit of the DA9150
212 Integrated Charger & Fuel-Gauge IC
213
214 This driver can also be built as a module. If so, the module will be
215 called da9150-fg.
216
217config AXP288_CHARGER
218 tristate "X-Powers AXP288 Charger"
219 depends on MFD_AXP20X && EXTCON_AXP288
220 help
221 Say yes here to have support X-Power AXP288 power management IC (PMIC)
222 integrated charger.
223
224config AXP288_FUEL_GAUGE
225 tristate "X-Powers AXP288 Fuel Gauge"
226 depends on MFD_AXP20X && IIO
227 help
228 Say yes here to have support for X-Power power management IC (PMIC)
229 Fuel Gauge. The device provides battery statistics and status
230 monitoring as well as alerts for battery over/under voltage and
231 over/under temperature.
232
233config BATTERY_MAX17040
234 tristate "Maxim MAX17040 Fuel Gauge"
235 depends on I2C
236 help
237 MAX17040 is fuel-gauge systems for lithium-ion (Li+) batteries
238 in handheld and portable equipment. The MAX17040 is configured
239 to operate with a single lithium cell
240
241config BATTERY_MAX17042
242 tristate "Maxim MAX17042/17047/17050/8997/8966 Fuel Gauge"
243 depends on I2C
244 select REGMAP_I2C
245 help
246 MAX17042 is fuel-gauge systems for lithium-ion (Li+) batteries
247 in handheld and portable equipment. The MAX17042 is configured
248 to operate with a single lithium cell. MAX8997 and MAX8966 are
249 multi-function devices that include fuel gauages that are compatible
250 with MAX17042. This driver also supports max17047/50 chips which are
251 improved version of max17042.
252
253config BATTERY_Z2
254 tristate "Z2 battery driver"
255 depends on I2C && MACH_ZIPIT2
256 help
257 Say Y to include support for the battery on the Zipit Z2.
258
259config BATTERY_S3C_ADC
260 tristate "Battery driver for Samsung ADC based monitoring"
261 depends on S3C_ADC
262 help
263 Say Y here to enable support for iPAQ h1930/h1940/rx1950 battery
264
265config BATTERY_TWL4030_MADC
266 tristate "TWL4030 MADC battery driver"
267 depends on TWL4030_MADC
268 help
269 Say Y here to enable this dumb driver for batteries managed
270 through the TWL4030 MADC.
271
272config CHARGER_88PM860X
273 tristate "Marvell 88PM860x Charger driver"
274 depends on MFD_88PM860X && BATTERY_88PM860X
275 help
276 Say Y here to enable charger for Marvell 88PM860x chip.
277
278config CHARGER_PCF50633
279 tristate "NXP PCF50633 MBC"
280 depends on MFD_PCF50633
281 help
282 Say Y to include support for NXP PCF50633 Main Battery Charger.
283
284config BATTERY_JZ4740
285 tristate "Ingenic JZ4740 battery"
286 depends on MACH_JZ4740
287 depends on MFD_JZ4740_ADC
288 help
289 Say Y to enable support for the battery on Ingenic JZ4740 based
290 boards.
291
292 This driver can be build as a module. If so, the module will be
293 called jz4740-battery.
294
295config BATTERY_INTEL_MID
296 tristate "Battery driver for Intel MID platforms"
297 depends on INTEL_SCU_IPC && SPI
298 help
299 Say Y here to enable the battery driver on Intel MID
300 platforms.
301
302config BATTERY_RX51
303 tristate "Nokia RX-51 (N900) battery driver"
304 depends on TWL4030_MADC
305 help
306 Say Y here to enable support for battery information on Nokia
307 RX-51, also known as N900 tablet.
308
309config CHARGER_ISP1704
310 tristate "ISP1704 USB Charger Detection"
311 depends on USB_PHY
312 depends on USB_GADGET || !USB_GADGET # if USB_GADGET=m, this can't be 'y'
313 help
314 Say Y to enable support for USB Charger Detection with
315 ISP1707/ISP1704 USB transceivers.
316
317config CHARGER_MAX8903
318 tristate "MAX8903 Battery DC-DC Charger for USB and Adapter Power"
319 help
320 Say Y to enable support for the MAX8903 DC-DC charger and sysfs.
321 The driver supports controlling charger-enable and current-limit
322 pins based on the status of charger connections with interrupt
323 handlers.
324
325config CHARGER_TWL4030
326 tristate "OMAP TWL4030 BCI charger driver"
327 depends on IIO && TWL4030_CORE
328 help
329 Say Y here to enable support for TWL4030 Battery Charge Interface.
330
331config CHARGER_LP8727
332 tristate "TI/National Semiconductor LP8727 charger driver"
333 depends on I2C
334 help
335 Say Y here to enable support for LP8727 Charger Driver.
336
337config CHARGER_LP8788
338 tristate "TI LP8788 charger driver"
339 depends on MFD_LP8788
340 depends on LP8788_ADC
341 depends on IIO
342 help
343 Say Y to enable support for the LP8788 linear charger.
344
345config CHARGER_GPIO
346 tristate "GPIO charger"
347 depends on GPIOLIB || COMPILE_TEST
348 help
349 Say Y to include support for chargers which report their online status
350 through a GPIO pin.
351
352 This driver can be build as a module. If so, the module will be
353 called gpio-charger.
354
355config CHARGER_MANAGER
356 bool "Battery charger manager for multiple chargers"
357 depends on REGULATOR
358 select EXTCON
359 help
360 Say Y to enable charger-manager support, which allows multiple
361 chargers attached to a battery and multiple batteries attached to a
362 system. The charger-manager also can monitor charging status in
363 runtime and in suspend-to-RAM by waking up the system periodically
364 with help of suspend_again support.
365
366config CHARGER_MAX14577
367 tristate "Maxim MAX14577/77836 battery charger driver"
368 depends on MFD_MAX14577
369 help
370 Say Y to enable support for the battery charger control sysfs and
371 platform data of MAX14577/77836 MUICs.
372
373config CHARGER_MAX77693
374 tristate "Maxim MAX77693 battery charger driver"
375 depends on MFD_MAX77693
376 help
377 Say Y to enable support for the Maxim MAX77693 battery charger.
378
379config CHARGER_MAX8997
380 tristate "Maxim MAX8997/MAX8966 PMIC battery charger driver"
381 depends on MFD_MAX8997 && REGULATOR_MAX8997
382 help
383 Say Y to enable support for the battery charger control sysfs and
384 platform data of MAX8997/LP3974 PMICs.
385
386config CHARGER_MAX8998
387 tristate "Maxim MAX8998/LP3974 PMIC battery charger driver"
388 depends on MFD_MAX8998 && REGULATOR_MAX8998
389 help
390 Say Y to enable support for the battery charger control sysfs and
391 platform data of MAX8998/LP3974 PMICs.
392
393config CHARGER_QCOM_SMBB
394 tristate "Qualcomm Switch-Mode Battery Charger and Boost"
395 depends on MFD_SPMI_PMIC || COMPILE_TEST
396 depends on OF
397 depends on EXTCON
398 help
399 Say Y to include support for the Switch-Mode Battery Charger and
400 Boost (SMBB) hardware found in Qualcomm PM8941 PMICs. The charger
401 is an integrated, single-cell lithium-ion battery charger. DT
402 configuration is required for loading, see the devicetree
403 documentation for more detail. The base name for this driver is
404 'pm8941_charger'.
405
406config CHARGER_BQ2415X
407 tristate "TI BQ2415x battery charger driver"
408 depends on I2C
409 help
410 Say Y to enable support for the TI BQ2415x battery charger
411 PMICs.
412
413 You'll need this driver to charge batteries on e.g. Nokia
414 RX-51/N900.
415
416config CHARGER_BQ24190
417 tristate "TI BQ24190 battery charger driver"
418 depends on I2C
419 depends on GPIOLIB || COMPILE_TEST
420 help
421 Say Y to enable support for the TI BQ24190 battery charger.
422
423config CHARGER_BQ24257
424 tristate "TI BQ24250/24251/24257 battery charger driver"
425 depends on I2C
426 depends on GPIOLIB || COMPILE_TEST
427 depends on REGMAP_I2C
428 help
429 Say Y to enable support for the TI BQ24250, BQ24251, and BQ24257 battery
430 chargers.
431
432config CHARGER_BQ24735
433 tristate "TI BQ24735 battery charger support"
434 depends on I2C
435 depends on GPIOLIB || COMPILE_TEST
436 help
437 Say Y to enable support for the TI BQ24735 battery charger.
438
439config CHARGER_BQ25890
440 tristate "TI BQ25890 battery charger driver"
441 depends on I2C
442 depends on GPIOLIB || COMPILE_TEST
443 select REGMAP_I2C
444 help
445 Say Y to enable support for the TI BQ25890 battery charger.
446
447config CHARGER_SMB347
448 tristate "Summit Microelectronics SMB347 Battery Charger"
449 depends on I2C
450 select REGMAP_I2C
451 help
452 Say Y to include support for Summit Microelectronics SMB347
453 Battery Charger.
454
455config CHARGER_TPS65090
456 tristate "TPS65090 battery charger driver"
457 depends on MFD_TPS65090
458 help
459 Say Y here to enable support for battery charging with TPS65090
460 PMIC chips.
461
462config CHARGER_TPS65217
463 tristate "TPS65217 battery charger driver"
464 depends on MFD_TPS65217
465 help
466 Say Y here to enable support for battery charging with TPS65217
467 PMIC chips.
468
469config BATTERY_GAUGE_LTC2941
470 tristate "LTC2941/LTC2943 Battery Gauge Driver"
471 depends on I2C
472 help
473 Say Y here to include support for LTC2941 and LTC2943 Battery
474 Gauge IC. The driver reports the charge count continuously, and
475 measures the voltage and temperature every 10 seconds.
476
477config AB8500_BM
478 bool "AB8500 Battery Management Driver"
479 depends on AB8500_CORE && AB8500_GPADC
480 help
481 Say Y to include support for AB8500 battery management.
482
483config BATTERY_GOLDFISH
484 tristate "Goldfish battery driver"
485 depends on GOLDFISH || COMPILE_TEST
486 depends on HAS_IOMEM
487 help
488 Say Y to enable support for the battery and AC power in the
489 Goldfish emulator.
490
491config BATTERY_RT5033
492 tristate "RT5033 fuel gauge support"
493 depends on MFD_RT5033
494 help
495 This adds support for battery fuel gauge in Richtek RT5033 PMIC.
496 The fuelgauge calculates and determines the battery state of charge
497 according to battery open circuit voltage.
498
499config CHARGER_RT9455
500 tristate "Richtek RT9455 battery charger driver"
501 depends on I2C
502 depends on GPIOLIB || COMPILE_TEST
503 select REGMAP_I2C
504 help
505 Say Y to enable support for Richtek RT9455 battery charger.
506
507config AXP20X_POWER
508 tristate "AXP20x power supply driver"
509 depends on MFD_AXP20X
510 help
511 This driver provides support for the power supply features of
512 AXP20x PMIC.
513
514endif # POWER_SUPPLY
diff --git a/drivers/power/supply/Makefile b/drivers/power/supply/Makefile
new file mode 100644
index 000000000000..36c599d9a495
--- /dev/null
+++ b/drivers/power/supply/Makefile
@@ -0,0 +1,74 @@
1subdir-ccflags-$(CONFIG_POWER_SUPPLY_DEBUG) := -DDEBUG
2
3power_supply-y := power_supply_core.o
4power_supply-$(CONFIG_SYSFS) += power_supply_sysfs.o
5power_supply-$(CONFIG_LEDS_TRIGGERS) += power_supply_leds.o
6
7obj-$(CONFIG_POWER_SUPPLY) += power_supply.o
8obj-$(CONFIG_GENERIC_ADC_BATTERY) += generic-adc-battery.o
9
10obj-$(CONFIG_PDA_POWER) += pda_power.o
11obj-$(CONFIG_APM_POWER) += apm_power.o
12obj-$(CONFIG_AXP20X_POWER) += axp20x_usb_power.o
13obj-$(CONFIG_MAX8925_POWER) += max8925_power.o
14obj-$(CONFIG_WM831X_BACKUP) += wm831x_backup.o
15obj-$(CONFIG_WM831X_POWER) += wm831x_power.o
16obj-$(CONFIG_WM8350_POWER) += wm8350_power.o
17obj-$(CONFIG_TEST_POWER) += test_power.o
18
19obj-$(CONFIG_BATTERY_88PM860X) += 88pm860x_battery.o
20obj-$(CONFIG_BATTERY_ACT8945A) += act8945a_charger.o
21obj-$(CONFIG_BATTERY_DS2760) += ds2760_battery.o
22obj-$(CONFIG_BATTERY_DS2780) += ds2780_battery.o
23obj-$(CONFIG_BATTERY_DS2781) += ds2781_battery.o
24obj-$(CONFIG_BATTERY_DS2782) += ds2782_battery.o
25obj-$(CONFIG_BATTERY_GAUGE_LTC2941) += ltc2941-battery-gauge.o
26obj-$(CONFIG_BATTERY_GOLDFISH) += goldfish_battery.o
27obj-$(CONFIG_BATTERY_PMU) += pmu_battery.o
28obj-$(CONFIG_BATTERY_OLPC) += olpc_battery.o
29obj-$(CONFIG_BATTERY_TOSA) += tosa_battery.o
30obj-$(CONFIG_BATTERY_COLLIE) += collie_battery.o
31obj-$(CONFIG_BATTERY_IPAQ_MICRO) += ipaq_micro_battery.o
32obj-$(CONFIG_BATTERY_WM97XX) += wm97xx_battery.o
33obj-$(CONFIG_BATTERY_SBS) += sbs-battery.o
34obj-$(CONFIG_BATTERY_BQ27XXX) += bq27xxx_battery.o
35obj-$(CONFIG_BATTERY_BQ27XXX_I2C) += bq27xxx_battery_i2c.o
36obj-$(CONFIG_BATTERY_DA9030) += da9030_battery.o
37obj-$(CONFIG_BATTERY_DA9052) += da9052-battery.o
38obj-$(CONFIG_CHARGER_DA9150) += da9150-charger.o
39obj-$(CONFIG_BATTERY_DA9150) += da9150-fg.o
40obj-$(CONFIG_BATTERY_MAX17040) += max17040_battery.o
41obj-$(CONFIG_BATTERY_MAX17042) += max17042_battery.o
42obj-$(CONFIG_BATTERY_Z2) += z2_battery.o
43obj-$(CONFIG_BATTERY_RT5033) += rt5033_battery.o
44obj-$(CONFIG_CHARGER_RT9455) += rt9455_charger.o
45obj-$(CONFIG_BATTERY_S3C_ADC) += s3c_adc_battery.o
46obj-$(CONFIG_BATTERY_TWL4030_MADC) += twl4030_madc_battery.o
47obj-$(CONFIG_CHARGER_88PM860X) += 88pm860x_charger.o
48obj-$(CONFIG_CHARGER_PCF50633) += pcf50633-charger.o
49obj-$(CONFIG_BATTERY_JZ4740) += jz4740-battery.o
50obj-$(CONFIG_BATTERY_INTEL_MID) += intel_mid_battery.o
51obj-$(CONFIG_BATTERY_RX51) += rx51_battery.o
52obj-$(CONFIG_AB8500_BM) += ab8500_bmdata.o ab8500_charger.o ab8500_fg.o ab8500_btemp.o abx500_chargalg.o pm2301_charger.o
53obj-$(CONFIG_CHARGER_ISP1704) += isp1704_charger.o
54obj-$(CONFIG_CHARGER_MAX8903) += max8903_charger.o
55obj-$(CONFIG_CHARGER_TWL4030) += twl4030_charger.o
56obj-$(CONFIG_CHARGER_LP8727) += lp8727_charger.o
57obj-$(CONFIG_CHARGER_LP8788) += lp8788-charger.o
58obj-$(CONFIG_CHARGER_GPIO) += gpio-charger.o
59obj-$(CONFIG_CHARGER_MANAGER) += charger-manager.o
60obj-$(CONFIG_CHARGER_MAX14577) += max14577_charger.o
61obj-$(CONFIG_CHARGER_MAX77693) += max77693_charger.o
62obj-$(CONFIG_CHARGER_MAX8997) += max8997_charger.o
63obj-$(CONFIG_CHARGER_MAX8998) += max8998_charger.o
64obj-$(CONFIG_CHARGER_QCOM_SMBB) += qcom_smbb.o
65obj-$(CONFIG_CHARGER_BQ2415X) += bq2415x_charger.o
66obj-$(CONFIG_CHARGER_BQ24190) += bq24190_charger.o
67obj-$(CONFIG_CHARGER_BQ24257) += bq24257_charger.o
68obj-$(CONFIG_CHARGER_BQ24735) += bq24735-charger.o
69obj-$(CONFIG_CHARGER_BQ25890) += bq25890_charger.o
70obj-$(CONFIG_CHARGER_SMB347) += smb347-charger.o
71obj-$(CONFIG_CHARGER_TPS65090) += tps65090-charger.o
72obj-$(CONFIG_CHARGER_TPS65217) += tps65217_charger.o
73obj-$(CONFIG_AXP288_FUEL_GAUGE) += axp288_fuel_gauge.o
74obj-$(CONFIG_AXP288_CHARGER) += axp288_charger.o
diff --git a/drivers/power/ab8500_bmdata.c b/drivers/power/supply/ab8500_bmdata.c
index d29864533093..d29864533093 100644
--- a/drivers/power/ab8500_bmdata.c
+++ b/drivers/power/supply/ab8500_bmdata.c
diff --git a/drivers/power/ab8500_btemp.c b/drivers/power/supply/ab8500_btemp.c
index bf2e5dd301e7..6ffdc18f2599 100644
--- a/drivers/power/ab8500_btemp.c
+++ b/drivers/power/supply/ab8500_btemp.c
@@ -1095,7 +1095,7 @@ static int ab8500_btemp_probe(struct platform_device *pdev)
1095 1095
1096 /* Create a work queue for the btemp */ 1096 /* Create a work queue for the btemp */
1097 di->btemp_wq = 1097 di->btemp_wq =
1098 create_singlethread_workqueue("ab8500_btemp_wq"); 1098 alloc_workqueue("ab8500_btemp_wq", WQ_MEM_RECLAIM, 0);
1099 if (di->btemp_wq == NULL) { 1099 if (di->btemp_wq == NULL) {
1100 dev_err(di->dev, "failed to create work queue\n"); 1100 dev_err(di->dev, "failed to create work queue\n");
1101 return -ENOMEM; 1101 return -ENOMEM;
diff --git a/drivers/power/ab8500_charger.c b/drivers/power/supply/ab8500_charger.c
index 30de5d42b26a..5cee9aa87aa3 100644
--- a/drivers/power/ab8500_charger.c
+++ b/drivers/power/supply/ab8500_charger.c
@@ -3540,8 +3540,8 @@ static int ab8500_charger_probe(struct platform_device *pdev)
3540 di->usb_state.usb_current = -1; 3540 di->usb_state.usb_current = -1;
3541 3541
3542 /* Create a work queue for the charger */ 3542 /* Create a work queue for the charger */
3543 di->charger_wq = 3543 di->charger_wq = alloc_ordered_workqueue("ab8500_charger_wq",
3544 create_singlethread_workqueue("ab8500_charger_wq"); 3544 WQ_MEM_RECLAIM);
3545 if (di->charger_wq == NULL) { 3545 if (di->charger_wq == NULL) {
3546 dev_err(di->dev, "failed to create work queue\n"); 3546 dev_err(di->dev, "failed to create work queue\n");
3547 return -ENOMEM; 3547 return -ENOMEM;
diff --git a/drivers/power/ab8500_fg.c b/drivers/power/supply/ab8500_fg.c
index 5a36cf88578a..2199f673118c 100644
--- a/drivers/power/ab8500_fg.c
+++ b/drivers/power/supply/ab8500_fg.c
@@ -245,13 +245,8 @@ static LIST_HEAD(ab8500_fg_list);
245 */ 245 */
246struct ab8500_fg *ab8500_fg_get(void) 246struct ab8500_fg *ab8500_fg_get(void)
247{ 247{
248 struct ab8500_fg *fg; 248 return list_first_entry_or_null(&ab8500_fg_list, struct ab8500_fg,
249 249 node);
250 if (list_empty(&ab8500_fg_list))
251 return NULL;
252
253 fg = list_first_entry(&ab8500_fg_list, struct ab8500_fg, node);
254 return fg;
255} 250}
256 251
257/* Main battery properties */ 252/* Main battery properties */
@@ -3096,7 +3091,7 @@ static int ab8500_fg_probe(struct platform_device *pdev)
3096 ab8500_fg_discharge_state_to(di, AB8500_FG_DISCHARGE_INIT); 3091 ab8500_fg_discharge_state_to(di, AB8500_FG_DISCHARGE_INIT);
3097 3092
3098 /* Create a work queue for running the FG algorithm */ 3093 /* Create a work queue for running the FG algorithm */
3099 di->fg_wq = create_singlethread_workqueue("ab8500_fg_wq"); 3094 di->fg_wq = alloc_ordered_workqueue("ab8500_fg_wq", WQ_MEM_RECLAIM);
3100 if (di->fg_wq == NULL) { 3095 if (di->fg_wq == NULL) {
3101 dev_err(di->dev, "failed to create work queue\n"); 3096 dev_err(di->dev, "failed to create work queue\n");
3102 return -ENOMEM; 3097 return -ENOMEM;
diff --git a/drivers/power/abx500_chargalg.c b/drivers/power/supply/abx500_chargalg.c
index d9104b1ab7cf..a4411d6bbc96 100644
--- a/drivers/power/abx500_chargalg.c
+++ b/drivers/power/supply/abx500_chargalg.c
@@ -2091,8 +2091,8 @@ static int abx500_chargalg_probe(struct platform_device *pdev)
2091 abx500_chargalg_maintenance_timer_expired; 2091 abx500_chargalg_maintenance_timer_expired;
2092 2092
2093 /* Create a work queue for the chargalg */ 2093 /* Create a work queue for the chargalg */
2094 di->chargalg_wq = 2094 di->chargalg_wq = alloc_ordered_workqueue("abx500_chargalg_wq",
2095 create_singlethread_workqueue("abx500_chargalg_wq"); 2095 WQ_MEM_RECLAIM);
2096 if (di->chargalg_wq == NULL) { 2096 if (di->chargalg_wq == NULL) {
2097 dev_err(di->dev, "failed to create work queue\n"); 2097 dev_err(di->dev, "failed to create work queue\n");
2098 return -ENOMEM; 2098 return -ENOMEM;
diff --git a/drivers/power/supply/act8945a_charger.c b/drivers/power/supply/act8945a_charger.c
new file mode 100644
index 000000000000..d1eb2e359532
--- /dev/null
+++ b/drivers/power/supply/act8945a_charger.c
@@ -0,0 +1,666 @@
1/*
2 * Power supply driver for the Active-semi ACT8945A PMIC
3 *
4 * Copyright (C) 2015 Atmel Corporation
5 *
6 * Author: Wenyou Yang <wenyou.yang@atmel.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 *
12 */
13#include <linux/interrupt.h>
14#include <linux/module.h>
15#include <linux/of.h>
16#include <linux/of_irq.h>
17#include <linux/platform_device.h>
18#include <linux/power_supply.h>
19#include <linux/regmap.h>
20#include <linux/gpio/consumer.h>
21
22static const char *act8945a_charger_model = "ACT8945A";
23static const char *act8945a_charger_manufacturer = "Active-semi";
24
25/**
26 * ACT8945A Charger Register Map
27 */
28
29/* 0x70: Reserved */
30#define ACT8945A_APCH_CFG 0x71
31#define ACT8945A_APCH_STATUS 0x78
32#define ACT8945A_APCH_CTRL 0x79
33#define ACT8945A_APCH_STATE 0x7A
34
35/* ACT8945A_APCH_CFG */
36#define APCH_CFG_OVPSET (0x3 << 0)
37#define APCH_CFG_OVPSET_6V6 (0x0 << 0)
38#define APCH_CFG_OVPSET_7V (0x1 << 0)
39#define APCH_CFG_OVPSET_7V5 (0x2 << 0)
40#define APCH_CFG_OVPSET_8V (0x3 << 0)
41#define APCH_CFG_PRETIMO (0x3 << 2)
42#define APCH_CFG_PRETIMO_40_MIN (0x0 << 2)
43#define APCH_CFG_PRETIMO_60_MIN (0x1 << 2)
44#define APCH_CFG_PRETIMO_80_MIN (0x2 << 2)
45#define APCH_CFG_PRETIMO_DISABLED (0x3 << 2)
46#define APCH_CFG_TOTTIMO (0x3 << 4)
47#define APCH_CFG_TOTTIMO_3_HOUR (0x0 << 4)
48#define APCH_CFG_TOTTIMO_4_HOUR (0x1 << 4)
49#define APCH_CFG_TOTTIMO_5_HOUR (0x2 << 4)
50#define APCH_CFG_TOTTIMO_DISABLED (0x3 << 4)
51#define APCH_CFG_SUSCHG (0x1 << 7)
52
53#define APCH_STATUS_CHGDAT BIT(0)
54#define APCH_STATUS_INDAT BIT(1)
55#define APCH_STATUS_TEMPDAT BIT(2)
56#define APCH_STATUS_TIMRDAT BIT(3)
57#define APCH_STATUS_CHGSTAT BIT(4)
58#define APCH_STATUS_INSTAT BIT(5)
59#define APCH_STATUS_TEMPSTAT BIT(6)
60#define APCH_STATUS_TIMRSTAT BIT(7)
61
62#define APCH_CTRL_CHGEOCOUT BIT(0)
63#define APCH_CTRL_INDIS BIT(1)
64#define APCH_CTRL_TEMPOUT BIT(2)
65#define APCH_CTRL_TIMRPRE BIT(3)
66#define APCH_CTRL_CHGEOCIN BIT(4)
67#define APCH_CTRL_INCON BIT(5)
68#define APCH_CTRL_TEMPIN BIT(6)
69#define APCH_CTRL_TIMRTOT BIT(7)
70
71#define APCH_STATE_ACINSTAT (0x1 << 1)
72#define APCH_STATE_CSTATE (0x3 << 4)
73#define APCH_STATE_CSTATE_SHIFT 4
74#define APCH_STATE_CSTATE_DISABLED 0x00
75#define APCH_STATE_CSTATE_EOC 0x01
76#define APCH_STATE_CSTATE_FAST 0x02
77#define APCH_STATE_CSTATE_PRE 0x03
78
79struct act8945a_charger {
80 struct power_supply *psy;
81 struct power_supply_desc desc;
82 struct regmap *regmap;
83 struct work_struct work;
84
85 bool init_done;
86 struct gpio_desc *lbo_gpio;
87 struct gpio_desc *chglev_gpio;
88};
89
90static int act8945a_get_charger_state(struct regmap *regmap, int *val)
91{
92 int ret;
93 unsigned int status, state;
94
95 ret = regmap_read(regmap, ACT8945A_APCH_STATUS, &status);
96 if (ret < 0)
97 return ret;
98
99 ret = regmap_read(regmap, ACT8945A_APCH_STATE, &state);
100 if (ret < 0)
101 return ret;
102
103 state &= APCH_STATE_CSTATE;
104 state >>= APCH_STATE_CSTATE_SHIFT;
105
106 switch (state) {
107 case APCH_STATE_CSTATE_PRE:
108 case APCH_STATE_CSTATE_FAST:
109 *val = POWER_SUPPLY_STATUS_CHARGING;
110 break;
111 case APCH_STATE_CSTATE_EOC:
112 if (status & APCH_STATUS_CHGDAT)
113 *val = POWER_SUPPLY_STATUS_FULL;
114 else
115 *val = POWER_SUPPLY_STATUS_CHARGING;
116 break;
117 case APCH_STATE_CSTATE_DISABLED:
118 default:
119 if (!(status & APCH_STATUS_INDAT))
120 *val = POWER_SUPPLY_STATUS_DISCHARGING;
121 else
122 *val = POWER_SUPPLY_STATUS_NOT_CHARGING;
123 break;
124 }
125
126 return 0;
127}
128
129static int act8945a_get_charge_type(struct regmap *regmap, int *val)
130{
131 int ret;
132 unsigned int status, state;
133
134 ret = regmap_read(regmap, ACT8945A_APCH_STATUS, &status);
135 if (ret < 0)
136 return ret;
137
138 ret = regmap_read(regmap, ACT8945A_APCH_STATE, &state);
139 if (ret < 0)
140 return ret;
141
142 state &= APCH_STATE_CSTATE;
143 state >>= APCH_STATE_CSTATE_SHIFT;
144
145 switch (state) {
146 case APCH_STATE_CSTATE_PRE:
147 *val = POWER_SUPPLY_CHARGE_TYPE_TRICKLE;
148 break;
149 case APCH_STATE_CSTATE_FAST:
150 *val = POWER_SUPPLY_CHARGE_TYPE_FAST;
151 break;
152 case APCH_STATE_CSTATE_EOC:
153 *val = POWER_SUPPLY_CHARGE_TYPE_NONE;
154 break;
155 case APCH_STATE_CSTATE_DISABLED:
156 default:
157 if (!(status & APCH_STATUS_INDAT))
158 *val = POWER_SUPPLY_CHARGE_TYPE_NONE;
159 else
160 *val = POWER_SUPPLY_CHARGE_TYPE_UNKNOWN;
161 break;
162 }
163
164 return 0;
165}
166
167static int act8945a_get_battery_health(struct regmap *regmap, int *val)
168{
169 int ret;
170 unsigned int status, state, config;
171
172 ret = regmap_read(regmap, ACT8945A_APCH_STATUS, &status);
173 if (ret < 0)
174 return ret;
175
176 ret = regmap_read(regmap, ACT8945A_APCH_CFG, &config);
177 if (ret < 0)
178 return ret;
179
180 ret = regmap_read(regmap, ACT8945A_APCH_STATE, &state);
181 if (ret < 0)
182 return ret;
183
184 state &= APCH_STATE_CSTATE;
185 state >>= APCH_STATE_CSTATE_SHIFT;
186
187 switch (state) {
188 case APCH_STATE_CSTATE_DISABLED:
189 if (config & APCH_CFG_SUSCHG) {
190 *val = POWER_SUPPLY_HEALTH_UNKNOWN;
191 } else if (status & APCH_STATUS_INDAT) {
192 if (!(status & APCH_STATUS_TEMPDAT))
193 *val = POWER_SUPPLY_HEALTH_OVERHEAT;
194 else if (status & APCH_STATUS_TIMRDAT)
195 *val = POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE;
196 else
197 *val = POWER_SUPPLY_HEALTH_OVERVOLTAGE;
198 } else {
199 *val = POWER_SUPPLY_HEALTH_GOOD;
200 }
201 break;
202 case APCH_STATE_CSTATE_PRE:
203 case APCH_STATE_CSTATE_FAST:
204 case APCH_STATE_CSTATE_EOC:
205 default:
206 *val = POWER_SUPPLY_HEALTH_GOOD;
207 break;
208 }
209
210 return 0;
211}
212
213static int act8945a_get_capacity_level(struct act8945a_charger *charger,
214 struct regmap *regmap, int *val)
215{
216 int ret;
217 unsigned int status, state, config;
218 int lbo_level = gpiod_get_value(charger->lbo_gpio);
219
220 ret = regmap_read(regmap, ACT8945A_APCH_STATUS, &status);
221 if (ret < 0)
222 return ret;
223
224 ret = regmap_read(regmap, ACT8945A_APCH_CFG, &config);
225 if (ret < 0)
226 return ret;
227
228 ret = regmap_read(regmap, ACT8945A_APCH_STATE, &state);
229 if (ret < 0)
230 return ret;
231
232 state &= APCH_STATE_CSTATE;
233 state >>= APCH_STATE_CSTATE_SHIFT;
234
235 switch (state) {
236 case APCH_STATE_CSTATE_PRE:
237 *val = POWER_SUPPLY_CAPACITY_LEVEL_LOW;
238 break;
239 case APCH_STATE_CSTATE_FAST:
240 if (lbo_level)
241 *val = POWER_SUPPLY_CAPACITY_LEVEL_HIGH;
242 else
243 *val = POWER_SUPPLY_CAPACITY_LEVEL_LOW;
244 break;
245 case APCH_STATE_CSTATE_EOC:
246 if (status & APCH_STATUS_CHGDAT)
247 *val = POWER_SUPPLY_CAPACITY_LEVEL_FULL;
248 else
249 *val = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL;
250 break;
251 case APCH_STATE_CSTATE_DISABLED:
252 default:
253 if (config & APCH_CFG_SUSCHG) {
254 *val = POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN;
255 } else {
256 *val = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL;
257 if (!(status & APCH_STATUS_INDAT)) {
258 if (!lbo_level)
259 *val = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL;
260 }
261 }
262 break;
263 }
264
265 return 0;
266}
267
268#define MAX_CURRENT_USB_HIGH 450000
269#define MAX_CURRENT_USB_LOW 90000
270#define MAX_CURRENT_USB_PRE 45000
271/*
272 * Riset(K) = 2336 * (1V/Ichg(mA)) - 0.205
273 * Riset = 2.43K
274 */
275#define MAX_CURRENT_AC_HIGH 886527
276#define MAX_CURRENT_AC_LOW 117305
277#define MAX_CURRENT_AC_HIGH_PRE 88653
278#define MAX_CURRENT_AC_LOW_PRE 11731
279
280static int act8945a_get_current_max(struct act8945a_charger *charger,
281 struct regmap *regmap, int *val)
282{
283 int ret;
284 unsigned int status, state;
285 unsigned int acin_state;
286 int chgin_level = gpiod_get_value(charger->chglev_gpio);
287
288 ret = regmap_read(regmap, ACT8945A_APCH_STATUS, &status);
289 if (ret < 0)
290 return ret;
291
292 ret = regmap_read(regmap, ACT8945A_APCH_STATE, &state);
293 if (ret < 0)
294 return ret;
295
296 acin_state = (state & APCH_STATE_ACINSTAT) >> 1;
297
298 state &= APCH_STATE_CSTATE;
299 state >>= APCH_STATE_CSTATE_SHIFT;
300
301 switch (state) {
302 case APCH_STATE_CSTATE_PRE:
303 if (acin_state) {
304 if (chgin_level)
305 *val = MAX_CURRENT_AC_HIGH_PRE;
306 else
307 *val = MAX_CURRENT_AC_LOW_PRE;
308 } else {
309 *val = MAX_CURRENT_USB_PRE;
310 }
311 break;
312 case APCH_STATE_CSTATE_FAST:
313 if (acin_state) {
314 if (chgin_level)
315 *val = MAX_CURRENT_AC_HIGH;
316 else
317 *val = MAX_CURRENT_AC_LOW;
318 } else {
319 if (chgin_level)
320 *val = MAX_CURRENT_USB_HIGH;
321 else
322 *val = MAX_CURRENT_USB_LOW;
323 }
324 break;
325 case APCH_STATE_CSTATE_EOC:
326 case APCH_STATE_CSTATE_DISABLED:
327 default:
328 *val = 0;
329 break;
330 }
331
332 return 0;
333}
334
335static enum power_supply_property act8945a_charger_props[] = {
336 POWER_SUPPLY_PROP_STATUS,
337 POWER_SUPPLY_PROP_CHARGE_TYPE,
338 POWER_SUPPLY_PROP_TECHNOLOGY,
339 POWER_SUPPLY_PROP_HEALTH,
340 POWER_SUPPLY_PROP_CAPACITY_LEVEL,
341 POWER_SUPPLY_PROP_CURRENT_MAX,
342 POWER_SUPPLY_PROP_MODEL_NAME,
343 POWER_SUPPLY_PROP_MANUFACTURER
344};
345
346static int act8945a_charger_get_property(struct power_supply *psy,
347 enum power_supply_property prop,
348 union power_supply_propval *val)
349{
350 struct act8945a_charger *charger = power_supply_get_drvdata(psy);
351 struct regmap *regmap = charger->regmap;
352 int ret = 0;
353
354 switch (prop) {
355 case POWER_SUPPLY_PROP_STATUS:
356 ret = act8945a_get_charger_state(regmap, &val->intval);
357 break;
358 case POWER_SUPPLY_PROP_CHARGE_TYPE:
359 ret = act8945a_get_charge_type(regmap, &val->intval);
360 break;
361 case POWER_SUPPLY_PROP_TECHNOLOGY:
362 val->intval = POWER_SUPPLY_TECHNOLOGY_LION;
363 break;
364 case POWER_SUPPLY_PROP_HEALTH:
365 ret = act8945a_get_battery_health(regmap, &val->intval);
366 break;
367 case POWER_SUPPLY_PROP_CAPACITY_LEVEL:
368 ret = act8945a_get_capacity_level(charger,
369 regmap, &val->intval);
370 break;
371 case POWER_SUPPLY_PROP_CURRENT_MAX:
372 ret = act8945a_get_current_max(charger,
373 regmap, &val->intval);
374 break;
375 case POWER_SUPPLY_PROP_MODEL_NAME:
376 val->strval = act8945a_charger_model;
377 break;
378 case POWER_SUPPLY_PROP_MANUFACTURER:
379 val->strval = act8945a_charger_manufacturer;
380 break;
381 default:
382 return -EINVAL;
383 }
384
385 return ret;
386}
387
388static int act8945a_enable_interrupt(struct act8945a_charger *charger)
389{
390 struct regmap *regmap = charger->regmap;
391 unsigned char ctrl;
392 int ret;
393
394 ctrl = APCH_CTRL_CHGEOCOUT | APCH_CTRL_CHGEOCIN |
395 APCH_CTRL_INDIS | APCH_CTRL_INCON |
396 APCH_CTRL_TEMPOUT | APCH_CTRL_TEMPIN |
397 APCH_CTRL_TIMRPRE | APCH_CTRL_TIMRTOT;
398 ret = regmap_write(regmap, ACT8945A_APCH_CTRL, ctrl);
399 if (ret)
400 return ret;
401
402 ctrl = APCH_STATUS_CHGSTAT | APCH_STATUS_INSTAT |
403 APCH_STATUS_TEMPSTAT | APCH_STATUS_TIMRSTAT;
404 ret = regmap_write(regmap, ACT8945A_APCH_STATUS, ctrl);
405 if (ret)
406 return ret;
407
408 return 0;
409}
410
411static unsigned int act8945a_set_supply_type(struct act8945a_charger *charger,
412 unsigned int *type)
413{
414 unsigned int status, state;
415 int ret;
416
417 ret = regmap_read(charger->regmap, ACT8945A_APCH_STATUS, &status);
418 if (ret < 0)
419 return ret;
420
421 ret = regmap_read(charger->regmap, ACT8945A_APCH_STATE, &state);
422 if (ret < 0)
423 return ret;
424
425 if (status & APCH_STATUS_INDAT) {
426 if (state & APCH_STATE_ACINSTAT)
427 *type = POWER_SUPPLY_TYPE_MAINS;
428 else
429 *type = POWER_SUPPLY_TYPE_USB;
430 } else {
431 *type = POWER_SUPPLY_TYPE_BATTERY;
432 }
433
434 return 0;
435}
436
437static void act8945a_work(struct work_struct *work)
438{
439 struct act8945a_charger *charger =
440 container_of(work, struct act8945a_charger, work);
441
442 act8945a_set_supply_type(charger, &charger->desc.type);
443
444 power_supply_changed(charger->psy);
445}
446
447static irqreturn_t act8945a_status_changed(int irq, void *dev_id)
448{
449 struct act8945a_charger *charger = dev_id;
450
451 if (charger->init_done)
452 schedule_work(&charger->work);
453
454 return IRQ_HANDLED;
455}
456
457#define DEFAULT_TOTAL_TIME_OUT 3
458#define DEFAULT_PRE_TIME_OUT 40
459#define DEFAULT_INPUT_OVP_THRESHOLD 6600
460
461static int act8945a_charger_config(struct device *dev,
462 struct act8945a_charger *charger)
463{
464 struct device_node *np = dev->of_node;
465 struct regmap *regmap = charger->regmap;
466
467 u32 total_time_out;
468 u32 pre_time_out;
469 u32 input_voltage_threshold;
470 int err, ret;
471
472 unsigned int tmp;
473 unsigned int value = 0;
474
475 if (!np) {
476 dev_err(dev, "no charger of node\n");
477 return -EINVAL;
478 }
479
480 ret = regmap_read(regmap, ACT8945A_APCH_CFG, &tmp);
481 if (ret)
482 return ret;
483
484 if (tmp & APCH_CFG_SUSCHG) {
485 value |= APCH_CFG_SUSCHG;
486 dev_info(dev, "have been suspended\n");
487 }
488
489 charger->lbo_gpio = devm_gpiod_get_optional(dev, "active-semi,lbo",
490 GPIOD_IN);
491 if (IS_ERR(charger->lbo_gpio)) {
492 err = PTR_ERR(charger->lbo_gpio);
493 dev_err(dev, "unable to claim gpio \"lbo\": %d\n", err);
494 return err;
495 }
496
497 ret = devm_request_irq(dev, gpiod_to_irq(charger->lbo_gpio),
498 act8945a_status_changed,
499 (IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING),
500 "act8945a_lbo_detect", charger);
501 if (ret)
502 dev_info(dev, "failed to request gpio \"lbo\" IRQ\n");
503
504 charger->chglev_gpio = devm_gpiod_get_optional(dev,
505 "active-semi,chglev",
506 GPIOD_IN);
507 if (IS_ERR(charger->chglev_gpio)) {
508 err = PTR_ERR(charger->chglev_gpio);
509 dev_err(dev, "unable to claim gpio \"chglev\": %d\n", err);
510 return err;
511 }
512
513 if (of_property_read_u32(np,
514 "active-semi,input-voltage-threshold-microvolt",
515 &input_voltage_threshold))
516 input_voltage_threshold = DEFAULT_INPUT_OVP_THRESHOLD;
517
518 if (of_property_read_u32(np,
519 "active-semi,precondition-timeout",
520 &pre_time_out))
521 pre_time_out = DEFAULT_PRE_TIME_OUT;
522
523 if (of_property_read_u32(np, "active-semi,total-timeout",
524 &total_time_out))
525 total_time_out = DEFAULT_TOTAL_TIME_OUT;
526
527 switch (input_voltage_threshold) {
528 case 8000:
529 value |= APCH_CFG_OVPSET_8V;
530 break;
531 case 7500:
532 value |= APCH_CFG_OVPSET_7V5;
533 break;
534 case 7000:
535 value |= APCH_CFG_OVPSET_7V;
536 break;
537 case 6600:
538 default:
539 value |= APCH_CFG_OVPSET_6V6;
540 break;
541 }
542
543 switch (pre_time_out) {
544 case 60:
545 value |= APCH_CFG_PRETIMO_60_MIN;
546 break;
547 case 80:
548 value |= APCH_CFG_PRETIMO_80_MIN;
549 break;
550 case 0:
551 value |= APCH_CFG_PRETIMO_DISABLED;
552 break;
553 case 40:
554 default:
555 value |= APCH_CFG_PRETIMO_40_MIN;
556 break;
557 }
558
559 switch (total_time_out) {
560 case 4:
561 value |= APCH_CFG_TOTTIMO_4_HOUR;
562 break;
563 case 5:
564 value |= APCH_CFG_TOTTIMO_5_HOUR;
565 break;
566 case 0:
567 value |= APCH_CFG_TOTTIMO_DISABLED;
568 break;
569 case 3:
570 default:
571 value |= APCH_CFG_TOTTIMO_3_HOUR;
572 break;
573 }
574
575 return regmap_write(regmap, ACT8945A_APCH_CFG, value);
576}
577
578static int act8945a_charger_probe(struct platform_device *pdev)
579{
580 struct act8945a_charger *charger;
581 struct power_supply_config psy_cfg = {};
582 int irq, ret;
583
584 charger = devm_kzalloc(&pdev->dev, sizeof(*charger), GFP_KERNEL);
585 if (!charger)
586 return -ENOMEM;
587
588 charger->regmap = dev_get_regmap(pdev->dev.parent, NULL);
589 if (!charger->regmap) {
590 dev_err(&pdev->dev, "Parent did not provide regmap\n");
591 return -EINVAL;
592 }
593
594 ret = act8945a_charger_config(&pdev->dev, charger);
595 if (ret)
596 return ret;
597
598 irq = of_irq_get(pdev->dev.of_node, 0);
599 if (irq == -EPROBE_DEFER) {
600 dev_err(&pdev->dev, "failed to find IRQ number\n");
601 return -EPROBE_DEFER;
602 }
603
604 ret = devm_request_irq(&pdev->dev, irq, act8945a_status_changed,
605 IRQF_TRIGGER_FALLING, "act8945a_interrupt",
606 charger);
607 if (ret) {
608 dev_err(&pdev->dev, "failed to request nIRQ pin IRQ\n");
609 return ret;
610 }
611
612 charger->desc.name = "act8945a-charger";
613 charger->desc.get_property = act8945a_charger_get_property;
614 charger->desc.properties = act8945a_charger_props;
615 charger->desc.num_properties = ARRAY_SIZE(act8945a_charger_props);
616
617 ret = act8945a_set_supply_type(charger, &charger->desc.type);
618 if (ret)
619 return -EINVAL;
620
621 psy_cfg.of_node = pdev->dev.of_node;
622 psy_cfg.drv_data = charger;
623
624 charger->psy = devm_power_supply_register(&pdev->dev,
625 &charger->desc,
626 &psy_cfg);
627 if (IS_ERR(charger->psy)) {
628 dev_err(&pdev->dev, "failed to register power supply\n");
629 return PTR_ERR(charger->psy);
630 }
631
632 platform_set_drvdata(pdev, charger);
633
634 INIT_WORK(&charger->work, act8945a_work);
635
636 ret = act8945a_enable_interrupt(charger);
637 if (ret)
638 return -EIO;
639
640 charger->init_done = true;
641
642 return 0;
643}
644
645static int act8945a_charger_remove(struct platform_device *pdev)
646{
647 struct act8945a_charger *charger = platform_get_drvdata(pdev);
648
649 charger->init_done = false;
650 cancel_work_sync(&charger->work);
651
652 return 0;
653}
654
655static struct platform_driver act8945a_charger_driver = {
656 .driver = {
657 .name = "act8945a-charger",
658 },
659 .probe = act8945a_charger_probe,
660 .remove = act8945a_charger_remove,
661};
662module_platform_driver(act8945a_charger_driver);
663
664MODULE_DESCRIPTION("Active-semi ACT8945A ActivePath charger driver");
665MODULE_AUTHOR("Wenyou Yang <wenyou.yang@atmel.com>");
666MODULE_LICENSE("GPL");
diff --git a/drivers/power/apm_power.c b/drivers/power/supply/apm_power.c
index 9d1a7fbcaed4..9d1a7fbcaed4 100644
--- a/drivers/power/apm_power.c
+++ b/drivers/power/supply/apm_power.c
diff --git a/drivers/power/axp20x_usb_power.c b/drivers/power/supply/axp20x_usb_power.c
index 6af6feb7058d..6af6feb7058d 100644
--- a/drivers/power/axp20x_usb_power.c
+++ b/drivers/power/supply/axp20x_usb_power.c
diff --git a/drivers/power/axp288_charger.c b/drivers/power/supply/axp288_charger.c
index 4030eeb7cf65..75b8e0c7402b 100644
--- a/drivers/power/axp288_charger.c
+++ b/drivers/power/supply/axp288_charger.c
@@ -23,7 +23,6 @@
23#include <linux/usb/otg.h> 23#include <linux/usb/otg.h>
24#include <linux/notifier.h> 24#include <linux/notifier.h>
25#include <linux/power_supply.h> 25#include <linux/power_supply.h>
26#include <linux/notifier.h>
27#include <linux/property.h> 26#include <linux/property.h>
28#include <linux/mfd/axp20x.h> 27#include <linux/mfd/axp20x.h>
29#include <linux/extcon.h> 28#include <linux/extcon.h>
diff --git a/drivers/power/axp288_fuel_gauge.c b/drivers/power/supply/axp288_fuel_gauge.c
index 50c0110d6b58..5bdde692f724 100644
--- a/drivers/power/axp288_fuel_gauge.c
+++ b/drivers/power/supply/axp288_fuel_gauge.c
@@ -22,7 +22,6 @@
22#include <linux/regmap.h> 22#include <linux/regmap.h>
23#include <linux/jiffies.h> 23#include <linux/jiffies.h>
24#include <linux/interrupt.h> 24#include <linux/interrupt.h>
25#include <linux/device.h>
26#include <linux/workqueue.h> 25#include <linux/workqueue.h>
27#include <linux/mfd/axp20x.h> 26#include <linux/mfd/axp20x.h>
28#include <linux/platform_device.h> 27#include <linux/platform_device.h>
diff --git a/drivers/power/bq2415x_charger.c b/drivers/power/supply/bq2415x_charger.c
index 73e2f0b79dd4..73e2f0b79dd4 100644
--- a/drivers/power/bq2415x_charger.c
+++ b/drivers/power/supply/bq2415x_charger.c
diff --git a/drivers/power/bq24190_charger.c b/drivers/power/supply/bq24190_charger.c
index f5746b9f4e83..f5746b9f4e83 100644
--- a/drivers/power/bq24190_charger.c
+++ b/drivers/power/supply/bq24190_charger.c
diff --git a/drivers/power/bq24257_charger.c b/drivers/power/supply/bq24257_charger.c
index 1fea2c7ef97f..6fc31bdc639b 100644
--- a/drivers/power/bq24257_charger.c
+++ b/drivers/power/supply/bq24257_charger.c
@@ -1068,6 +1068,12 @@ static int bq24257_probe(struct i2c_client *client,
1068 return ret; 1068 return ret;
1069 } 1069 }
1070 1070
1071 ret = bq24257_power_supply_init(bq);
1072 if (ret < 0) {
1073 dev_err(dev, "Failed to register power supply\n");
1074 return ret;
1075 }
1076
1071 ret = devm_request_threaded_irq(dev, client->irq, NULL, 1077 ret = devm_request_threaded_irq(dev, client->irq, NULL,
1072 bq24257_irq_handler_thread, 1078 bq24257_irq_handler_thread,
1073 IRQF_TRIGGER_FALLING | 1079 IRQF_TRIGGER_FALLING |
@@ -1078,12 +1084,6 @@ static int bq24257_probe(struct i2c_client *client,
1078 return ret; 1084 return ret;
1079 } 1085 }
1080 1086
1081 ret = bq24257_power_supply_init(bq);
1082 if (ret < 0) {
1083 dev_err(dev, "Failed to register power supply\n");
1084 return ret;
1085 }
1086
1087 ret = sysfs_create_group(&bq->charger->dev.kobj, &bq24257_attr_group); 1087 ret = sysfs_create_group(&bq->charger->dev.kobj, &bq24257_attr_group);
1088 if (ret < 0) { 1088 if (ret < 0) {
1089 dev_err(dev, "Can't create sysfs entries\n"); 1089 dev_err(dev, "Can't create sysfs entries\n");
diff --git a/drivers/power/bq24735-charger.c b/drivers/power/supply/bq24735-charger.c
index fa454c19ce17..eb7783b42e0a 100644
--- a/drivers/power/bq24735-charger.c
+++ b/drivers/power/supply/bq24735-charger.c
@@ -25,7 +25,7 @@
25#include <linux/kernel.h> 25#include <linux/kernel.h>
26#include <linux/module.h> 26#include <linux/module.h>
27#include <linux/of.h> 27#include <linux/of.h>
28#include <linux/of_gpio.h> 28#include <linux/gpio/consumer.h>
29#include <linux/power_supply.h> 29#include <linux/power_supply.h>
30#include <linux/slab.h> 30#include <linux/slab.h>
31 31
@@ -49,6 +49,7 @@ struct bq24735 {
49 struct i2c_client *client; 49 struct i2c_client *client;
50 struct bq24735_platform *pdata; 50 struct bq24735_platform *pdata;
51 struct mutex lock; 51 struct mutex lock;
52 struct gpio_desc *status_gpio;
52 bool charging; 53 bool charging;
53}; 54};
54 55
@@ -177,12 +178,8 @@ static int bq24735_config_charger(struct bq24735 *charger)
177 178
178static bool bq24735_charger_is_present(struct bq24735 *charger) 179static bool bq24735_charger_is_present(struct bq24735 *charger)
179{ 180{
180 struct bq24735_platform *pdata = charger->pdata; 181 if (charger->status_gpio) {
181 int ret; 182 return !gpiod_get_value_cansleep(charger->status_gpio);
182
183 if (pdata->status_gpio_valid) {
184 ret = gpio_get_value_cansleep(pdata->status_gpio);
185 return ret ^= pdata->status_gpio_active_low == 0;
186 } else { 183 } else {
187 int ac = 0; 184 int ac = 0;
188 185
@@ -201,8 +198,12 @@ static bool bq24735_charger_is_present(struct bq24735 *charger)
201 198
202static int bq24735_charger_is_charging(struct bq24735 *charger) 199static int bq24735_charger_is_charging(struct bq24735 *charger)
203{ 200{
204 int ret = bq24735_read_word(charger->client, BQ24735_CHG_OPT); 201 int ret;
205 202
203 if (!bq24735_charger_is_present(charger))
204 return 0;
205
206 ret = bq24735_read_word(charger->client, BQ24735_CHG_OPT);
206 if (ret < 0) 207 if (ret < 0)
207 return ret; 208 return ret;
208 209
@@ -304,7 +305,6 @@ static struct bq24735_platform *bq24735_parse_dt_data(struct i2c_client *client)
304 struct device_node *np = client->dev.of_node; 305 struct device_node *np = client->dev.of_node;
305 u32 val; 306 u32 val;
306 int ret; 307 int ret;
307 enum of_gpio_flags flags;
308 308
309 pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL); 309 pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
310 if (!pdata) { 310 if (!pdata) {
@@ -313,12 +313,6 @@ static struct bq24735_platform *bq24735_parse_dt_data(struct i2c_client *client)
313 return NULL; 313 return NULL;
314 } 314 }
315 315
316 pdata->status_gpio = of_get_named_gpio_flags(np, "ti,ac-detect-gpios",
317 0, &flags);
318
319 if (flags & OF_GPIO_ACTIVE_LOW)
320 pdata->status_gpio_active_low = 1;
321
322 ret = of_property_read_u32(np, "ti,charge-current", &val); 316 ret = of_property_read_u32(np, "ti,charge-current", &val);
323 if (!ret) 317 if (!ret)
324 pdata->charge_current = val; 318 pdata->charge_current = val;
@@ -392,21 +386,16 @@ static int bq24735_charger_probe(struct i2c_client *client,
392 386
393 i2c_set_clientdata(client, charger); 387 i2c_set_clientdata(client, charger);
394 388
395 if (gpio_is_valid(charger->pdata->status_gpio)) { 389 charger->status_gpio = devm_gpiod_get_optional(&client->dev,
396 ret = devm_gpio_request(&client->dev, 390 "ti,ac-detect",
397 charger->pdata->status_gpio, 391 GPIOD_IN);
398 name); 392 if (IS_ERR(charger->status_gpio)) {
399 if (ret) { 393 ret = PTR_ERR(charger->status_gpio);
400 dev_err(&client->dev, 394 dev_err(&client->dev, "Getting gpio failed: %d\n", ret);
401 "Failed GPIO request for GPIO %d: %d\n", 395 return ret;
402 charger->pdata->status_gpio, ret);
403 }
404
405 charger->pdata->status_gpio_valid = !ret;
406 } 396 }
407 397
408 if (!charger->pdata->status_gpio_valid 398 if (!charger->status_gpio || bq24735_charger_is_present(charger)) {
409 || bq24735_charger_is_present(charger)) {
410 ret = bq24735_read_word(client, BQ24735_MANUFACTURER_ID); 399 ret = bq24735_read_word(client, BQ24735_MANUFACTURER_ID);
411 if (ret < 0) { 400 if (ret < 0) {
412 dev_err(&client->dev, "Failed to read manufacturer id : %d\n", 401 dev_err(&client->dev, "Failed to read manufacturer id : %d\n",
diff --git a/drivers/power/bq25890_charger.c b/drivers/power/supply/bq25890_charger.c
index f993a55cde20..f993a55cde20 100644
--- a/drivers/power/bq25890_charger.c
+++ b/drivers/power/supply/bq25890_charger.c
diff --git a/drivers/power/bq27xxx_battery.c b/drivers/power/supply/bq27xxx_battery.c
index 323d05a12f9b..3b0dbc689d72 100644
--- a/drivers/power/bq27xxx_battery.c
+++ b/drivers/power/supply/bq27xxx_battery.c
@@ -39,6 +39,7 @@
39 39
40#include <linux/device.h> 40#include <linux/device.h>
41#include <linux/module.h> 41#include <linux/module.h>
42#include <linux/mutex.h>
42#include <linux/param.h> 43#include <linux/param.h>
43#include <linux/jiffies.h> 44#include <linux/jiffies.h>
44#include <linux/workqueue.h> 45#include <linux/workqueue.h>
@@ -390,8 +391,35 @@ static struct {
390 BQ27XXX_PROP(BQ27421, bq27421_battery_props), 391 BQ27XXX_PROP(BQ27421, bq27421_battery_props),
391}; 392};
392 393
394static DEFINE_MUTEX(bq27xxx_list_lock);
395static LIST_HEAD(bq27xxx_battery_devices);
396
397static int poll_interval_param_set(const char *val, const struct kernel_param *kp)
398{
399 struct bq27xxx_device_info *di;
400 int ret;
401
402 ret = param_set_uint(val, kp);
403 if (ret < 0)
404 return ret;
405
406 mutex_lock(&bq27xxx_list_lock);
407 list_for_each_entry(di, &bq27xxx_battery_devices, list) {
408 cancel_delayed_work_sync(&di->work);
409 schedule_delayed_work(&di->work, 0);
410 }
411 mutex_unlock(&bq27xxx_list_lock);
412
413 return ret;
414}
415
416static const struct kernel_param_ops param_ops_poll_interval = {
417 .get = param_get_uint,
418 .set = poll_interval_param_set,
419};
420
393static unsigned int poll_interval = 360; 421static unsigned int poll_interval = 360;
394module_param(poll_interval, uint, 0644); 422module_param_cb(poll_interval, &param_ops_poll_interval, &poll_interval, 0644);
395MODULE_PARM_DESC(poll_interval, 423MODULE_PARM_DESC(poll_interval,
396 "battery poll interval in seconds - 0 disables polling"); 424 "battery poll interval in seconds - 0 disables polling");
397 425
@@ -644,8 +672,9 @@ static bool bq27xxx_battery_dead(struct bq27xxx_device_info *di, u16 flags)
644static int bq27xxx_battery_read_health(struct bq27xxx_device_info *di) 672static int bq27xxx_battery_read_health(struct bq27xxx_device_info *di)
645{ 673{
646 int flags; 674 int flags;
675 bool has_singe_flag = di->chip == BQ27000 || di->chip == BQ27010;
647 676
648 flags = bq27xxx_read(di, BQ27XXX_REG_FLAGS, false); 677 flags = bq27xxx_read(di, BQ27XXX_REG_FLAGS, has_singe_flag);
649 if (flags < 0) { 678 if (flags < 0) {
650 dev_err(di->dev, "error reading flag register:%d\n", flags); 679 dev_err(di->dev, "error reading flag register:%d\n", flags);
651 return flags; 680 return flags;
@@ -745,7 +774,7 @@ static int bq27xxx_battery_current(struct bq27xxx_device_info *di,
745 } 774 }
746 775
747 if (di->chip == BQ27000 || di->chip == BQ27010) { 776 if (di->chip == BQ27000 || di->chip == BQ27010) {
748 flags = bq27xxx_read(di, BQ27XXX_REG_FLAGS, false); 777 flags = bq27xxx_read(di, BQ27XXX_REG_FLAGS, true);
749 if (flags & BQ27000_FLAG_CHGS) { 778 if (flags & BQ27000_FLAG_CHGS) {
750 dev_dbg(di->dev, "negative current!\n"); 779 dev_dbg(di->dev, "negative current!\n");
751 curr = -curr; 780 curr = -curr;
@@ -971,6 +1000,10 @@ int bq27xxx_battery_setup(struct bq27xxx_device_info *di)
971 1000
972 bq27xxx_battery_update(di); 1001 bq27xxx_battery_update(di);
973 1002
1003 mutex_lock(&bq27xxx_list_lock);
1004 list_add(&di->list, &bq27xxx_battery_devices);
1005 mutex_unlock(&bq27xxx_list_lock);
1006
974 return 0; 1007 return 0;
975} 1008}
976EXPORT_SYMBOL_GPL(bq27xxx_battery_setup); 1009EXPORT_SYMBOL_GPL(bq27xxx_battery_setup);
@@ -989,6 +1022,10 @@ void bq27xxx_battery_teardown(struct bq27xxx_device_info *di)
989 1022
990 power_supply_unregister(di->bat); 1023 power_supply_unregister(di->bat);
991 1024
1025 mutex_lock(&bq27xxx_list_lock);
1026 list_del(&di->list);
1027 mutex_unlock(&bq27xxx_list_lock);
1028
992 mutex_destroy(&di->lock); 1029 mutex_destroy(&di->lock);
993} 1030}
994EXPORT_SYMBOL_GPL(bq27xxx_battery_teardown); 1031EXPORT_SYMBOL_GPL(bq27xxx_battery_teardown);
diff --git a/drivers/power/bq27xxx_battery_i2c.c b/drivers/power/supply/bq27xxx_battery_i2c.c
index 85d4ea2a9c20..85d4ea2a9c20 100644
--- a/drivers/power/bq27xxx_battery_i2c.c
+++ b/drivers/power/supply/bq27xxx_battery_i2c.c
diff --git a/drivers/power/charger-manager.c b/drivers/power/supply/charger-manager.c
index e664ca7c0afd..e664ca7c0afd 100644
--- a/drivers/power/charger-manager.c
+++ b/drivers/power/supply/charger-manager.c
diff --git a/drivers/power/collie_battery.c b/drivers/power/supply/collie_battery.c
index 3a0bc608d4b5..3a0bc608d4b5 100644
--- a/drivers/power/collie_battery.c
+++ b/drivers/power/supply/collie_battery.c
diff --git a/drivers/power/da9030_battery.c b/drivers/power/supply/da9030_battery.c
index 5ca0f4d90792..5ca0f4d90792 100644
--- a/drivers/power/da9030_battery.c
+++ b/drivers/power/supply/da9030_battery.c
diff --git a/drivers/power/da9052-battery.c b/drivers/power/supply/da9052-battery.c
index 830ec46fe7d0..830ec46fe7d0 100644
--- a/drivers/power/da9052-battery.c
+++ b/drivers/power/supply/da9052-battery.c
diff --git a/drivers/power/da9150-charger.c b/drivers/power/supply/da9150-charger.c
index 60099815296e..60099815296e 100644
--- a/drivers/power/da9150-charger.c
+++ b/drivers/power/supply/da9150-charger.c
diff --git a/drivers/power/da9150-fg.c b/drivers/power/supply/da9150-fg.c
index 8b8ce978656a..8b8ce978656a 100644
--- a/drivers/power/da9150-fg.c
+++ b/drivers/power/supply/da9150-fg.c
diff --git a/drivers/power/ds2760_battery.c b/drivers/power/supply/ds2760_battery.c
index 80f73ccb77ab..17225689e3f6 100644
--- a/drivers/power/ds2760_battery.c
+++ b/drivers/power/supply/ds2760_battery.c
@@ -28,8 +28,8 @@
28#include <linux/platform_device.h> 28#include <linux/platform_device.h>
29#include <linux/power_supply.h> 29#include <linux/power_supply.h>
30 30
31#include "../w1/w1.h" 31#include "../../w1/w1.h"
32#include "../w1/slaves/w1_ds2760.h" 32#include "../../w1/slaves/w1_ds2760.h"
33 33
34struct ds2760_device_info { 34struct ds2760_device_info {
35 struct device *dev; 35 struct device *dev;
@@ -566,7 +566,8 @@ static int ds2760_battery_probe(struct platform_device *pdev)
566 INIT_DELAYED_WORK(&di->monitor_work, ds2760_battery_work); 566 INIT_DELAYED_WORK(&di->monitor_work, ds2760_battery_work);
567 INIT_DELAYED_WORK(&di->set_charged_work, 567 INIT_DELAYED_WORK(&di->set_charged_work,
568 ds2760_battery_set_charged_work); 568 ds2760_battery_set_charged_work);
569 di->monitor_wqueue = create_singlethread_workqueue(dev_name(&pdev->dev)); 569 di->monitor_wqueue = alloc_ordered_workqueue(dev_name(&pdev->dev),
570 WQ_MEM_RECLAIM);
570 if (!di->monitor_wqueue) { 571 if (!di->monitor_wqueue) {
571 retval = -ESRCH; 572 retval = -ESRCH;
572 goto workqueue_failed; 573 goto workqueue_failed;
diff --git a/drivers/power/ds2780_battery.c b/drivers/power/supply/ds2780_battery.c
index d3743d0ad55b..1b3b6fa89c28 100644
--- a/drivers/power/ds2780_battery.c
+++ b/drivers/power/supply/ds2780_battery.c
@@ -21,8 +21,8 @@
21#include <linux/power_supply.h> 21#include <linux/power_supply.h>
22#include <linux/idr.h> 22#include <linux/idr.h>
23 23
24#include "../w1/w1.h" 24#include "../../w1/w1.h"
25#include "../w1/slaves/w1_ds2780.h" 25#include "../../w1/slaves/w1_ds2780.h"
26 26
27/* Current unit measurement in uA for a 1 milli-ohm sense resistor */ 27/* Current unit measurement in uA for a 1 milli-ohm sense resistor */
28#define DS2780_CURRENT_UNITS 1563 28#define DS2780_CURRENT_UNITS 1563
diff --git a/drivers/power/ds2781_battery.c b/drivers/power/supply/ds2781_battery.c
index c3680024f399..cc0149131f89 100644
--- a/drivers/power/ds2781_battery.c
+++ b/drivers/power/supply/ds2781_battery.c
@@ -19,8 +19,8 @@
19#include <linux/power_supply.h> 19#include <linux/power_supply.h>
20#include <linux/idr.h> 20#include <linux/idr.h>
21 21
22#include "../w1/w1.h" 22#include "../../w1/w1.h"
23#include "../w1/slaves/w1_ds2781.h" 23#include "../../w1/slaves/w1_ds2781.h"
24 24
25/* Current unit measurement in uA for a 1 milli-ohm sense resistor */ 25/* Current unit measurement in uA for a 1 milli-ohm sense resistor */
26#define DS2781_CURRENT_UNITS 1563 26#define DS2781_CURRENT_UNITS 1563
diff --git a/drivers/power/ds2782_battery.c b/drivers/power/supply/ds2782_battery.c
index a1b7e0592245..a1b7e0592245 100644
--- a/drivers/power/ds2782_battery.c
+++ b/drivers/power/supply/ds2782_battery.c
diff --git a/drivers/power/generic-adc-battery.c b/drivers/power/supply/generic-adc-battery.c
index edb36bf781b0..edb36bf781b0 100644
--- a/drivers/power/generic-adc-battery.c
+++ b/drivers/power/supply/generic-adc-battery.c
diff --git a/drivers/power/goldfish_battery.c b/drivers/power/supply/goldfish_battery.c
index f5c525e4482a..f5c525e4482a 100644
--- a/drivers/power/goldfish_battery.c
+++ b/drivers/power/supply/goldfish_battery.c
diff --git a/drivers/power/gpio-charger.c b/drivers/power/supply/gpio-charger.c
index c5869b1941ac..c5869b1941ac 100644
--- a/drivers/power/gpio-charger.c
+++ b/drivers/power/supply/gpio-charger.c
diff --git a/drivers/power/intel_mid_battery.c b/drivers/power/supply/intel_mid_battery.c
index 9fa4acc107ca..dc7feef1bea4 100644
--- a/drivers/power/intel_mid_battery.c
+++ b/drivers/power/supply/intel_mid_battery.c
@@ -689,8 +689,7 @@ static int probe(int irq, struct device *dev)
689 /* initialize all required framework before enabling interrupts */ 689 /* initialize all required framework before enabling interrupts */
690 INIT_WORK(&pbi->handler, pmic_battery_handle_intrpt); 690 INIT_WORK(&pbi->handler, pmic_battery_handle_intrpt);
691 INIT_DELAYED_WORK(&pbi->monitor_battery, pmic_battery_monitor); 691 INIT_DELAYED_WORK(&pbi->monitor_battery, pmic_battery_monitor);
692 pbi->monitor_wqueue = 692 pbi->monitor_wqueue = alloc_workqueue(dev_name(dev), WQ_MEM_RECLAIM, 0);
693 create_singlethread_workqueue(dev_name(dev));
694 if (!pbi->monitor_wqueue) { 693 if (!pbi->monitor_wqueue) {
695 dev_err(dev, "%s(): wqueue init failed\n", __func__); 694 dev_err(dev, "%s(): wqueue init failed\n", __func__);
696 retval = -ESRCH; 695 retval = -ESRCH;
diff --git a/drivers/power/ipaq_micro_battery.c b/drivers/power/supply/ipaq_micro_battery.c
index 35b01c7d775b..4af7b770f293 100644
--- a/drivers/power/ipaq_micro_battery.c
+++ b/drivers/power/supply/ipaq_micro_battery.c
@@ -235,7 +235,7 @@ static int micro_batt_probe(struct platform_device *pdev)
235 return -ENOMEM; 235 return -ENOMEM;
236 236
237 mb->micro = dev_get_drvdata(pdev->dev.parent); 237 mb->micro = dev_get_drvdata(pdev->dev.parent);
238 mb->wq = create_singlethread_workqueue("ipaq-battery-wq"); 238 mb->wq = alloc_workqueue("ipaq-battery-wq", WQ_MEM_RECLAIM, 0);
239 if (!mb->wq) 239 if (!mb->wq)
240 return -ENOMEM; 240 return -ENOMEM;
241 241
diff --git a/drivers/power/isp1704_charger.c b/drivers/power/supply/isp1704_charger.c
index 4cd6899b961e..4cd6899b961e 100644
--- a/drivers/power/isp1704_charger.c
+++ b/drivers/power/supply/isp1704_charger.c
diff --git a/drivers/power/jz4740-battery.c b/drivers/power/supply/jz4740-battery.c
index 88f04f4d1a70..88f04f4d1a70 100644
--- a/drivers/power/jz4740-battery.c
+++ b/drivers/power/supply/jz4740-battery.c
diff --git a/drivers/power/lp8727_charger.c b/drivers/power/supply/lp8727_charger.c
index 042fb3dacb46..042fb3dacb46 100644
--- a/drivers/power/lp8727_charger.c
+++ b/drivers/power/supply/lp8727_charger.c
diff --git a/drivers/power/lp8788-charger.c b/drivers/power/supply/lp8788-charger.c
index 7321b727d484..7321b727d484 100644
--- a/drivers/power/lp8788-charger.c
+++ b/drivers/power/supply/lp8788-charger.c
diff --git a/drivers/power/ltc2941-battery-gauge.c b/drivers/power/supply/ltc2941-battery-gauge.c
index 4adf2ba021ce..4adf2ba021ce 100644
--- a/drivers/power/ltc2941-battery-gauge.c
+++ b/drivers/power/supply/ltc2941-battery-gauge.c
diff --git a/drivers/power/max14577_charger.c b/drivers/power/supply/max14577_charger.c
index a36bcaf62dd4..449fc56f09eb 100644
--- a/drivers/power/max14577_charger.c
+++ b/drivers/power/supply/max14577_charger.c
@@ -2,7 +2,7 @@
2 * max14577_charger.c - Battery charger driver for the Maxim 14577/77836 2 * max14577_charger.c - Battery charger driver for the Maxim 14577/77836
3 * 3 *
4 * Copyright (C) 2013,2014 Samsung Electronics 4 * Copyright (C) 2013,2014 Samsung Electronics
5 * Krzysztof Kozlowski <k.kozlowski@samsung.com> 5 * Krzysztof Kozlowski <krzk@kernel.org>
6 * 6 *
7 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
@@ -643,6 +643,6 @@ static struct platform_driver max14577_charger_driver = {
643}; 643};
644module_platform_driver(max14577_charger_driver); 644module_platform_driver(max14577_charger_driver);
645 645
646MODULE_AUTHOR("Krzysztof Kozlowski <k.kozlowski@samsung.com>"); 646MODULE_AUTHOR("Krzysztof Kozlowski <krzk@kernel.org>");
647MODULE_DESCRIPTION("Maxim 14577/77836 charger driver"); 647MODULE_DESCRIPTION("Maxim 14577/77836 charger driver");
648MODULE_LICENSE("GPL"); 648MODULE_LICENSE("GPL");
diff --git a/drivers/power/max17040_battery.c b/drivers/power/supply/max17040_battery.c
index 8689c80202b5..8689c80202b5 100644
--- a/drivers/power/max17040_battery.c
+++ b/drivers/power/supply/max17040_battery.c
diff --git a/drivers/power/max17042_battery.c b/drivers/power/supply/max17042_battery.c
index da7a75f82489..da7a75f82489 100644
--- a/drivers/power/max17042_battery.c
+++ b/drivers/power/supply/max17042_battery.c
diff --git a/drivers/power/max77693_charger.c b/drivers/power/supply/max77693_charger.c
index 060cab5ae3aa..6c78884bad5e 100644
--- a/drivers/power/max77693_charger.c
+++ b/drivers/power/supply/max77693_charger.c
@@ -2,7 +2,7 @@
2 * max77693_charger.c - Battery charger driver for the Maxim 77693 2 * max77693_charger.c - Battery charger driver for the Maxim 77693
3 * 3 *
4 * Copyright (C) 2014 Samsung Electronics 4 * Copyright (C) 2014 Samsung Electronics
5 * Krzysztof Kozlowski <k.kozlowski@samsung.com> 5 * Krzysztof Kozlowski <krzk@kernel.org>
6 * 6 *
7 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
@@ -766,6 +766,6 @@ static struct platform_driver max77693_charger_driver = {
766}; 766};
767module_platform_driver(max77693_charger_driver); 767module_platform_driver(max77693_charger_driver);
768 768
769MODULE_AUTHOR("Krzysztof Kozlowski <k.kozlowski@samsung.com>"); 769MODULE_AUTHOR("Krzysztof Kozlowski <krzk@kernel.org>");
770MODULE_DESCRIPTION("Maxim 77693 charger driver"); 770MODULE_DESCRIPTION("Maxim 77693 charger driver");
771MODULE_LICENSE("GPL"); 771MODULE_LICENSE("GPL");
diff --git a/drivers/power/max8903_charger.c b/drivers/power/supply/max8903_charger.c
index fdc73d686153..fdc73d686153 100644
--- a/drivers/power/max8903_charger.c
+++ b/drivers/power/supply/max8903_charger.c
diff --git a/drivers/power/max8925_power.c b/drivers/power/supply/max8925_power.c
index 3b94620ce5c1..3b94620ce5c1 100644
--- a/drivers/power/max8925_power.c
+++ b/drivers/power/supply/max8925_power.c
diff --git a/drivers/power/max8997_charger.c b/drivers/power/supply/max8997_charger.c
index 0b2eab571528..0b2eab571528 100644
--- a/drivers/power/max8997_charger.c
+++ b/drivers/power/supply/max8997_charger.c
diff --git a/drivers/power/max8998_charger.c b/drivers/power/supply/max8998_charger.c
index b64cf0f14142..b64cf0f14142 100644
--- a/drivers/power/max8998_charger.c
+++ b/drivers/power/supply/max8998_charger.c
diff --git a/drivers/power/olpc_battery.c b/drivers/power/supply/olpc_battery.c
index 9e29b1321648..9e29b1321648 100644
--- a/drivers/power/olpc_battery.c
+++ b/drivers/power/supply/olpc_battery.c
diff --git a/drivers/power/pcf50633-charger.c b/drivers/power/supply/pcf50633-charger.c
index d05597b4e40f..d05597b4e40f 100644
--- a/drivers/power/pcf50633-charger.c
+++ b/drivers/power/supply/pcf50633-charger.c
diff --git a/drivers/power/pda_power.c b/drivers/power/supply/pda_power.c
index dfe1ee89f7c7..dfe1ee89f7c7 100644
--- a/drivers/power/pda_power.c
+++ b/drivers/power/supply/pda_power.c
diff --git a/drivers/power/pm2301_charger.c b/drivers/power/supply/pm2301_charger.c
index fb62ed3fc38c..78561b6884fc 100644
--- a/drivers/power/pm2301_charger.c
+++ b/drivers/power/supply/pm2301_charger.c
@@ -1054,7 +1054,8 @@ static int pm2xxx_wall_charger_probe(struct i2c_client *i2c_client,
1054 pm2->ac_chg.external = true; 1054 pm2->ac_chg.external = true;
1055 1055
1056 /* Create a work queue for the charger */ 1056 /* Create a work queue for the charger */
1057 pm2->charger_wq = create_singlethread_workqueue("pm2xxx_charger_wq"); 1057 pm2->charger_wq = alloc_ordered_workqueue("pm2xxx_charger_wq",
1058 WQ_MEM_RECLAIM);
1058 if (pm2->charger_wq == NULL) { 1059 if (pm2->charger_wq == NULL) {
1059 ret = -ENOMEM; 1060 ret = -ENOMEM;
1060 dev_err(pm2->dev, "failed to create work queue\n"); 1061 dev_err(pm2->dev, "failed to create work queue\n");
diff --git a/drivers/power/pm2301_charger.h b/drivers/power/supply/pm2301_charger.h
index 24181cf9717b..24181cf9717b 100644
--- a/drivers/power/pm2301_charger.h
+++ b/drivers/power/supply/pm2301_charger.h
diff --git a/drivers/power/pmu_battery.c b/drivers/power/supply/pmu_battery.c
index 9c8d5253812c..9c8d5253812c 100644
--- a/drivers/power/pmu_battery.c
+++ b/drivers/power/supply/pmu_battery.c
diff --git a/drivers/power/power_supply.h b/drivers/power/supply/power_supply.h
index cc439fd89d8d..cc439fd89d8d 100644
--- a/drivers/power/power_supply.h
+++ b/drivers/power/supply/power_supply.h
diff --git a/drivers/power/power_supply_core.c b/drivers/power/supply/power_supply_core.c
index a74d8ca383a1..a74d8ca383a1 100644
--- a/drivers/power/power_supply_core.c
+++ b/drivers/power/supply/power_supply_core.c
diff --git a/drivers/power/power_supply_leds.c b/drivers/power/supply/power_supply_leds.c
index 2277ad9c2f68..2277ad9c2f68 100644
--- a/drivers/power/power_supply_leds.c
+++ b/drivers/power/supply/power_supply_leds.c
diff --git a/drivers/power/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c
index bcde8d13476a..bcde8d13476a 100644
--- a/drivers/power/power_supply_sysfs.c
+++ b/drivers/power/supply/power_supply_sysfs.c
diff --git a/drivers/power/qcom_smbb.c b/drivers/power/supply/qcom_smbb.c
index b5896ba2a602..b5896ba2a602 100644
--- a/drivers/power/qcom_smbb.c
+++ b/drivers/power/supply/qcom_smbb.c
diff --git a/drivers/power/rt5033_battery.c b/drivers/power/supply/rt5033_battery.c
index bcdd83048492..bcdd83048492 100644
--- a/drivers/power/rt5033_battery.c
+++ b/drivers/power/supply/rt5033_battery.c
diff --git a/drivers/power/rt9455_charger.c b/drivers/power/supply/rt9455_charger.c
index cfdbde9daf94..cfdbde9daf94 100644
--- a/drivers/power/rt9455_charger.c
+++ b/drivers/power/supply/rt9455_charger.c
diff --git a/drivers/power/rx51_battery.c b/drivers/power/supply/rx51_battery.c
index af9383d23d12..af9383d23d12 100644
--- a/drivers/power/rx51_battery.c
+++ b/drivers/power/supply/rx51_battery.c
diff --git a/drivers/power/s3c_adc_battery.c b/drivers/power/supply/s3c_adc_battery.c
index 0ffe5cd3abf6..0ffe5cd3abf6 100644
--- a/drivers/power/s3c_adc_battery.c
+++ b/drivers/power/supply/s3c_adc_battery.c
diff --git a/drivers/power/sbs-battery.c b/drivers/power/supply/sbs-battery.c
index 768b9fcb58ea..8bb2eb38eb1c 100644
--- a/drivers/power/sbs-battery.c
+++ b/drivers/power/supply/sbs-battery.c
@@ -26,7 +26,7 @@
26#include <linux/i2c.h> 26#include <linux/i2c.h>
27#include <linux/slab.h> 27#include <linux/slab.h>
28#include <linux/interrupt.h> 28#include <linux/interrupt.h>
29#include <linux/gpio.h> 29#include <linux/gpio/consumer.h>
30#include <linux/of.h> 30#include <linux/of.h>
31#include <linux/stat.h> 31#include <linux/stat.h>
32 32
@@ -41,6 +41,7 @@ enum {
41 REG_TIME_TO_EMPTY, 41 REG_TIME_TO_EMPTY,
42 REG_TIME_TO_FULL, 42 REG_TIME_TO_FULL,
43 REG_STATUS, 43 REG_STATUS,
44 REG_CAPACITY_LEVEL,
44 REG_CYCLE_COUNT, 45 REG_CYCLE_COUNT,
45 REG_SERIAL_NUMBER, 46 REG_SERIAL_NUMBER,
46 REG_REMAINING_CAPACITY, 47 REG_REMAINING_CAPACITY,
@@ -68,6 +69,7 @@ enum sbs_battery_mode {
68#define MANUFACTURER_ACCESS_SLEEP 0x0011 69#define MANUFACTURER_ACCESS_SLEEP 0x0011
69 70
70/* battery status value bits */ 71/* battery status value bits */
72#define BATTERY_INITIALIZED 0x80
71#define BATTERY_DISCHARGING 0x40 73#define BATTERY_DISCHARGING 0x40
72#define BATTERY_FULL_CHARGED 0x20 74#define BATTERY_FULL_CHARGED 0x20
73#define BATTERY_FULL_DISCHARGED 0x10 75#define BATTERY_FULL_DISCHARGED 0x10
@@ -110,6 +112,8 @@ static const struct chip_data {
110 SBS_DATA(POWER_SUPPLY_PROP_TIME_TO_FULL_AVG, 0x13, 0, 65535), 112 SBS_DATA(POWER_SUPPLY_PROP_TIME_TO_FULL_AVG, 0x13, 0, 65535),
111 [REG_STATUS] = 113 [REG_STATUS] =
112 SBS_DATA(POWER_SUPPLY_PROP_STATUS, 0x16, 0, 65535), 114 SBS_DATA(POWER_SUPPLY_PROP_STATUS, 0x16, 0, 65535),
115 [REG_CAPACITY_LEVEL] =
116 SBS_DATA(POWER_SUPPLY_PROP_CAPACITY_LEVEL, 0x16, 0, 65535),
113 [REG_CYCLE_COUNT] = 117 [REG_CYCLE_COUNT] =
114 SBS_DATA(POWER_SUPPLY_PROP_CYCLE_COUNT, 0x17, 0, 65535), 118 SBS_DATA(POWER_SUPPLY_PROP_CYCLE_COUNT, 0x17, 0, 65535),
115 [REG_DESIGN_CAPACITY] = 119 [REG_DESIGN_CAPACITY] =
@@ -131,6 +135,7 @@ static const struct chip_data {
131 135
132static enum power_supply_property sbs_properties[] = { 136static enum power_supply_property sbs_properties[] = {
133 POWER_SUPPLY_PROP_STATUS, 137 POWER_SUPPLY_PROP_STATUS,
138 POWER_SUPPLY_PROP_CAPACITY_LEVEL,
134 POWER_SUPPLY_PROP_HEALTH, 139 POWER_SUPPLY_PROP_HEALTH,
135 POWER_SUPPLY_PROP_PRESENT, 140 POWER_SUPPLY_PROP_PRESENT,
136 POWER_SUPPLY_PROP_TECHNOLOGY, 141 POWER_SUPPLY_PROP_TECHNOLOGY,
@@ -158,13 +163,13 @@ static enum power_supply_property sbs_properties[] = {
158struct sbs_info { 163struct sbs_info {
159 struct i2c_client *client; 164 struct i2c_client *client;
160 struct power_supply *power_supply; 165 struct power_supply *power_supply;
161 struct sbs_platform_data *pdata;
162 bool is_present; 166 bool is_present;
163 bool gpio_detect; 167 struct gpio_desc *gpio_detect;
164 bool enable_detection; 168 bool enable_detection;
165 int irq;
166 int last_state; 169 int last_state;
167 int poll_time; 170 int poll_time;
171 u32 i2c_retry_count;
172 u32 poll_retry_count;
168 struct delayed_work work; 173 struct delayed_work work;
169 int ignore_changes; 174 int ignore_changes;
170}; 175};
@@ -179,8 +184,7 @@ static int sbs_read_word_data(struct i2c_client *client, u8 address)
179 s32 ret = 0; 184 s32 ret = 0;
180 int retries = 1; 185 int retries = 1;
181 186
182 if (chip->pdata) 187 retries = chip->i2c_retry_count;
183 retries = max(chip->pdata->i2c_retry_count + 1, 1);
184 188
185 while (retries > 0) { 189 while (retries > 0) {
186 ret = i2c_smbus_read_word_data(client, address); 190 ret = i2c_smbus_read_word_data(client, address);
@@ -207,10 +211,8 @@ static int sbs_read_string_data(struct i2c_client *client, u8 address,
207 int retries_length = 1, retries_block = 1; 211 int retries_length = 1, retries_block = 1;
208 u8 block_buffer[I2C_SMBUS_BLOCK_MAX + 1]; 212 u8 block_buffer[I2C_SMBUS_BLOCK_MAX + 1];
209 213
210 if (chip->pdata) { 214 retries_length = chip->i2c_retry_count;
211 retries_length = max(chip->pdata->i2c_retry_count + 1, 1); 215 retries_block = chip->i2c_retry_count;
212 retries_block = max(chip->pdata->i2c_retry_count + 1, 1);
213 }
214 216
215 /* Adapter needs to support these two functions */ 217 /* Adapter needs to support these two functions */
216 if (!i2c_check_functionality(client->adapter, 218 if (!i2c_check_functionality(client->adapter,
@@ -274,8 +276,7 @@ static int sbs_write_word_data(struct i2c_client *client, u8 address,
274 s32 ret = 0; 276 s32 ret = 0;
275 int retries = 1; 277 int retries = 1;
276 278
277 if (chip->pdata) 279 retries = chip->i2c_retry_count;
278 retries = max(chip->pdata->i2c_retry_count + 1, 1);
279 280
280 while (retries > 0) { 281 while (retries > 0) {
281 ret = i2c_smbus_write_word_data(client, address, 282 ret = i2c_smbus_write_word_data(client, address,
@@ -302,32 +303,31 @@ static int sbs_get_battery_presence_and_health(
302 s32 ret; 303 s32 ret;
303 struct sbs_info *chip = i2c_get_clientdata(client); 304 struct sbs_info *chip = i2c_get_clientdata(client);
304 305
305 if (psp == POWER_SUPPLY_PROP_PRESENT && 306 if (psp == POWER_SUPPLY_PROP_PRESENT && chip->gpio_detect) {
306 chip->gpio_detect) { 307 ret = gpiod_get_value_cansleep(chip->gpio_detect);
307 ret = gpio_get_value(chip->pdata->battery_detect); 308 if (ret < 0)
308 if (ret == chip->pdata->battery_detect_present) 309 return ret;
309 val->intval = 1; 310 val->intval = ret;
310 else
311 val->intval = 0;
312 chip->is_present = val->intval; 311 chip->is_present = val->intval;
313 return ret; 312 return ret;
314 } 313 }
315 314
316 /* Write to ManufacturerAccess with 315 /*
317 * ManufacturerAccess command and then 316 * Write to ManufacturerAccess with ManufacturerAccess command
318 * read the status */ 317 * and then read the status. Do not check for error on the write
319 ret = sbs_write_word_data(client, sbs_data[REG_MANUFACTURER_DATA].addr, 318 * since not all batteries implement write access to this command,
320 MANUFACTURER_ACCESS_STATUS); 319 * while others mandate it.
320 */
321 sbs_write_word_data(client, sbs_data[REG_MANUFACTURER_DATA].addr,
322 MANUFACTURER_ACCESS_STATUS);
323
324 ret = sbs_read_word_data(client, sbs_data[REG_MANUFACTURER_DATA].addr);
321 if (ret < 0) { 325 if (ret < 0) {
322 if (psp == POWER_SUPPLY_PROP_PRESENT) 326 if (psp == POWER_SUPPLY_PROP_PRESENT)
323 val->intval = 0; /* battery removed */ 327 val->intval = 0; /* battery removed */
324 return ret; 328 return ret;
325 } 329 }
326 330
327 ret = sbs_read_word_data(client, sbs_data[REG_MANUFACTURER_DATA].addr);
328 if (ret < 0)
329 return ret;
330
331 if (ret < sbs_data[REG_MANUFACTURER_DATA].min_value || 331 if (ret < sbs_data[REG_MANUFACTURER_DATA].min_value ||
332 ret > sbs_data[REG_MANUFACTURER_DATA].max_value) { 332 ret > sbs_data[REG_MANUFACTURER_DATA].max_value) {
333 val->intval = 0; 333 val->intval = 0;
@@ -377,8 +377,23 @@ static int sbs_get_battery_property(struct i2c_client *client,
377 if (ret >= sbs_data[reg_offset].min_value && 377 if (ret >= sbs_data[reg_offset].min_value &&
378 ret <= sbs_data[reg_offset].max_value) { 378 ret <= sbs_data[reg_offset].max_value) {
379 val->intval = ret; 379 val->intval = ret;
380 if (psp != POWER_SUPPLY_PROP_STATUS) 380 if (psp == POWER_SUPPLY_PROP_CAPACITY_LEVEL) {
381 if (!(ret & BATTERY_INITIALIZED))
382 val->intval =
383 POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN;
384 else if (ret & BATTERY_FULL_CHARGED)
385 val->intval =
386 POWER_SUPPLY_CAPACITY_LEVEL_FULL;
387 else if (ret & BATTERY_FULL_DISCHARGED)
388 val->intval =
389 POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL;
390 else
391 val->intval =
392 POWER_SUPPLY_CAPACITY_LEVEL_NORMAL;
393 return 0;
394 } else if (psp != POWER_SUPPLY_PROP_STATUS) {
381 return 0; 395 return 0;
396 }
382 397
383 if (ret & BATTERY_FULL_CHARGED) 398 if (ret & BATTERY_FULL_CHARGED)
384 val->intval = POWER_SUPPLY_STATUS_FULL; 399 val->intval = POWER_SUPPLY_STATUS_FULL;
@@ -590,6 +605,7 @@ static int sbs_get_property(struct power_supply *psy,
590 break; 605 break;
591 606
592 case POWER_SUPPLY_PROP_STATUS: 607 case POWER_SUPPLY_PROP_STATUS:
608 case POWER_SUPPLY_PROP_CAPACITY_LEVEL:
593 case POWER_SUPPLY_PROP_CYCLE_COUNT: 609 case POWER_SUPPLY_PROP_CYCLE_COUNT:
594 case POWER_SUPPLY_PROP_VOLTAGE_NOW: 610 case POWER_SUPPLY_PROP_VOLTAGE_NOW:
595 case POWER_SUPPLY_PROP_CURRENT_NOW: 611 case POWER_SUPPLY_PROP_CURRENT_NOW:
@@ -661,8 +677,14 @@ done:
661 677
662static irqreturn_t sbs_irq(int irq, void *devid) 678static irqreturn_t sbs_irq(int irq, void *devid)
663{ 679{
664 struct power_supply *battery = devid; 680 struct sbs_info *chip = devid;
681 struct power_supply *battery = chip->power_supply;
682 int ret;
665 683
684 ret = gpiod_get_value_cansleep(chip->gpio_detect);
685 if (ret < 0)
686 return ret;
687 chip->is_present = ret;
666 power_supply_changed(battery); 688 power_supply_changed(battery);
667 689
668 return IRQ_HANDLED; 690 return IRQ_HANDLED;
@@ -681,7 +703,7 @@ static void sbs_external_power_changed(struct power_supply *psy)
681 cancel_delayed_work_sync(&chip->work); 703 cancel_delayed_work_sync(&chip->work);
682 704
683 schedule_delayed_work(&chip->work, HZ); 705 schedule_delayed_work(&chip->work, HZ);
684 chip->poll_time = chip->pdata->poll_retry_count; 706 chip->poll_time = chip->poll_retry_count;
685} 707}
686 708
687static void sbs_delayed_work(struct work_struct *work) 709static void sbs_delayed_work(struct work_struct *work)
@@ -717,80 +739,6 @@ static void sbs_delayed_work(struct work_struct *work)
717 } 739 }
718} 740}
719 741
720#if defined(CONFIG_OF)
721
722#include <linux/of_device.h>
723#include <linux/of_gpio.h>
724
725static const struct of_device_id sbs_dt_ids[] = {
726 { .compatible = "sbs,sbs-battery" },
727 { .compatible = "ti,bq20z75" },
728 { }
729};
730MODULE_DEVICE_TABLE(of, sbs_dt_ids);
731
732static struct sbs_platform_data *sbs_of_populate_pdata(
733 struct i2c_client *client)
734{
735 struct device_node *of_node = client->dev.of_node;
736 struct sbs_platform_data *pdata = client->dev.platform_data;
737 enum of_gpio_flags gpio_flags;
738 int rc;
739 u32 prop;
740
741 /* verify this driver matches this device */
742 if (!of_node)
743 return NULL;
744
745 /* if platform data is set, honor it */
746 if (pdata)
747 return pdata;
748
749 /* first make sure at least one property is set, otherwise
750 * it won't change behavior from running without pdata.
751 */
752 if (!of_get_property(of_node, "sbs,i2c-retry-count", NULL) &&
753 !of_get_property(of_node, "sbs,poll-retry-count", NULL) &&
754 !of_get_property(of_node, "sbs,battery-detect-gpios", NULL))
755 goto of_out;
756
757 pdata = devm_kzalloc(&client->dev, sizeof(struct sbs_platform_data),
758 GFP_KERNEL);
759 if (!pdata)
760 goto of_out;
761
762 rc = of_property_read_u32(of_node, "sbs,i2c-retry-count", &prop);
763 if (!rc)
764 pdata->i2c_retry_count = prop;
765
766 rc = of_property_read_u32(of_node, "sbs,poll-retry-count", &prop);
767 if (!rc)
768 pdata->poll_retry_count = prop;
769
770 if (!of_get_property(of_node, "sbs,battery-detect-gpios", NULL)) {
771 pdata->battery_detect = -1;
772 goto of_out;
773 }
774
775 pdata->battery_detect = of_get_named_gpio_flags(of_node,
776 "sbs,battery-detect-gpios", 0, &gpio_flags);
777
778 if (gpio_flags & OF_GPIO_ACTIVE_LOW)
779 pdata->battery_detect_present = 0;
780 else
781 pdata->battery_detect_present = 1;
782
783of_out:
784 return pdata;
785}
786#else
787static struct sbs_platform_data *sbs_of_populate_pdata(
788 struct i2c_client *client)
789{
790 return client->dev.platform_data;
791}
792#endif
793
794static const struct power_supply_desc sbs_default_desc = { 742static const struct power_supply_desc sbs_default_desc = {
795 .type = POWER_SUPPLY_TYPE_BATTERY, 743 .type = POWER_SUPPLY_TYPE_BATTERY,
796 .properties = sbs_properties, 744 .properties = sbs_properties,
@@ -819,13 +767,12 @@ static int sbs_probe(struct i2c_client *client,
819 if (!sbs_desc->name) 767 if (!sbs_desc->name)
820 return -ENOMEM; 768 return -ENOMEM;
821 769
822 chip = kzalloc(sizeof(struct sbs_info), GFP_KERNEL); 770 chip = devm_kzalloc(&client->dev, sizeof(struct sbs_info), GFP_KERNEL);
823 if (!chip) 771 if (!chip)
824 return -ENOMEM; 772 return -ENOMEM;
825 773
826 chip->client = client; 774 chip->client = client;
827 chip->enable_detection = false; 775 chip->enable_detection = false;
828 chip->gpio_detect = false;
829 psy_cfg.of_node = client->dev.of_node; 776 psy_cfg.of_node = client->dev.of_node;
830 psy_cfg.drv_data = chip; 777 psy_cfg.drv_data = chip;
831 /* ignore first notification of external change, it is generated 778 /* ignore first notification of external change, it is generated
@@ -834,11 +781,31 @@ static int sbs_probe(struct i2c_client *client,
834 chip->ignore_changes = 1; 781 chip->ignore_changes = 1;
835 chip->last_state = POWER_SUPPLY_STATUS_UNKNOWN; 782 chip->last_state = POWER_SUPPLY_STATUS_UNKNOWN;
836 783
837 pdata = sbs_of_populate_pdata(client); 784 /* use pdata if available, fall back to DT properties,
785 * or hardcoded defaults if not
786 */
787 rc = of_property_read_u32(client->dev.of_node, "sbs,i2c-retry-count",
788 &chip->i2c_retry_count);
789 if (rc)
790 chip->i2c_retry_count = 0;
791
792 rc = of_property_read_u32(client->dev.of_node, "sbs,poll-retry-count",
793 &chip->poll_retry_count);
794 if (rc)
795 chip->poll_retry_count = 0;
838 796
839 if (pdata) { 797 if (pdata) {
840 chip->gpio_detect = gpio_is_valid(pdata->battery_detect); 798 chip->poll_retry_count = pdata->poll_retry_count;
841 chip->pdata = pdata; 799 chip->i2c_retry_count = pdata->i2c_retry_count;
800 }
801 chip->i2c_retry_count = chip->i2c_retry_count + 1;
802
803 chip->gpio_detect = devm_gpiod_get_optional(&client->dev,
804 "sbs,battery-detect", GPIOD_IN);
805 if (IS_ERR(chip->gpio_detect)) {
806 dev_err(&client->dev, "Failed to get gpio: %ld\n",
807 PTR_ERR(chip->gpio_detect));
808 return PTR_ERR(chip->gpio_detect);
842 } 809 }
843 810
844 i2c_set_clientdata(client, chip); 811 i2c_set_clientdata(client, chip);
@@ -846,47 +813,26 @@ static int sbs_probe(struct i2c_client *client,
846 if (!chip->gpio_detect) 813 if (!chip->gpio_detect)
847 goto skip_gpio; 814 goto skip_gpio;
848 815
849 rc = gpio_request(pdata->battery_detect, dev_name(&client->dev)); 816 irq = gpiod_to_irq(chip->gpio_detect);
850 if (rc) {
851 dev_warn(&client->dev, "Failed to request gpio: %d\n", rc);
852 chip->gpio_detect = false;
853 goto skip_gpio;
854 }
855
856 rc = gpio_direction_input(pdata->battery_detect);
857 if (rc) {
858 dev_warn(&client->dev, "Failed to get gpio as input: %d\n", rc);
859 gpio_free(pdata->battery_detect);
860 chip->gpio_detect = false;
861 goto skip_gpio;
862 }
863
864 irq = gpio_to_irq(pdata->battery_detect);
865 if (irq <= 0) { 817 if (irq <= 0) {
866 dev_warn(&client->dev, "Failed to get gpio as irq: %d\n", irq); 818 dev_warn(&client->dev, "Failed to get gpio as irq: %d\n", irq);
867 gpio_free(pdata->battery_detect);
868 chip->gpio_detect = false;
869 goto skip_gpio; 819 goto skip_gpio;
870 } 820 }
871 821
872 rc = request_irq(irq, sbs_irq, 822 rc = devm_request_threaded_irq(&client->dev, irq, NULL, sbs_irq,
873 IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, 823 IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
874 dev_name(&client->dev), chip->power_supply); 824 dev_name(&client->dev), chip);
875 if (rc) { 825 if (rc) {
876 dev_warn(&client->dev, "Failed to request irq: %d\n", rc); 826 dev_warn(&client->dev, "Failed to request irq: %d\n", rc);
877 gpio_free(pdata->battery_detect);
878 chip->gpio_detect = false;
879 goto skip_gpio; 827 goto skip_gpio;
880 } 828 }
881 829
882 chip->irq = irq;
883
884skip_gpio: 830skip_gpio:
885 /* 831 /*
886 * Before we register, we might need to make sure we can actually talk 832 * Before we register, we might need to make sure we can actually talk
887 * to the battery. 833 * to the battery.
888 */ 834 */
889 if (!force_load) { 835 if (!(force_load || chip->gpio_detect)) {
890 rc = sbs_read_word_data(client, sbs_data[REG_STATUS].addr); 836 rc = sbs_read_word_data(client, sbs_data[REG_STATUS].addr);
891 837
892 if (rc < 0) { 838 if (rc < 0) {
@@ -896,7 +842,7 @@ skip_gpio:
896 } 842 }
897 } 843 }
898 844
899 chip->power_supply = power_supply_register(&client->dev, sbs_desc, 845 chip->power_supply = devm_power_supply_register(&client->dev, sbs_desc,
900 &psy_cfg); 846 &psy_cfg);
901 if (IS_ERR(chip->power_supply)) { 847 if (IS_ERR(chip->power_supply)) {
902 dev_err(&client->dev, 848 dev_err(&client->dev,
@@ -915,13 +861,6 @@ skip_gpio:
915 return 0; 861 return 0;
916 862
917exit_psupply: 863exit_psupply:
918 if (chip->irq)
919 free_irq(chip->irq, chip->power_supply);
920 if (chip->gpio_detect)
921 gpio_free(pdata->battery_detect);
922
923 kfree(chip);
924
925 return rc; 864 return rc;
926} 865}
927 866
@@ -929,18 +868,8 @@ static int sbs_remove(struct i2c_client *client)
929{ 868{
930 struct sbs_info *chip = i2c_get_clientdata(client); 869 struct sbs_info *chip = i2c_get_clientdata(client);
931 870
932 if (chip->irq)
933 free_irq(chip->irq, chip->power_supply);
934 if (chip->gpio_detect)
935 gpio_free(chip->pdata->battery_detect);
936
937 power_supply_unregister(chip->power_supply);
938
939 cancel_delayed_work_sync(&chip->work); 871 cancel_delayed_work_sync(&chip->work);
940 872
941 kfree(chip);
942 chip = NULL;
943
944 return 0; 873 return 0;
945} 874}
946 875
@@ -950,16 +879,16 @@ static int sbs_suspend(struct device *dev)
950{ 879{
951 struct i2c_client *client = to_i2c_client(dev); 880 struct i2c_client *client = to_i2c_client(dev);
952 struct sbs_info *chip = i2c_get_clientdata(client); 881 struct sbs_info *chip = i2c_get_clientdata(client);
953 s32 ret;
954 882
955 if (chip->poll_time > 0) 883 if (chip->poll_time > 0)
956 cancel_delayed_work_sync(&chip->work); 884 cancel_delayed_work_sync(&chip->work);
957 885
958 /* write to manufacturer access with sleep command */ 886 /*
959 ret = sbs_write_word_data(client, sbs_data[REG_MANUFACTURER_DATA].addr, 887 * Write to manufacturer access with sleep command.
888 * Support is manufacturer dependend, so ignore errors.
889 */
890 sbs_write_word_data(client, sbs_data[REG_MANUFACTURER_DATA].addr,
960 MANUFACTURER_ACCESS_SLEEP); 891 MANUFACTURER_ACCESS_SLEEP);
961 if (chip->is_present && ret < 0)
962 return ret;
963 892
964 return 0; 893 return 0;
965} 894}
@@ -978,13 +907,20 @@ static const struct i2c_device_id sbs_id[] = {
978}; 907};
979MODULE_DEVICE_TABLE(i2c, sbs_id); 908MODULE_DEVICE_TABLE(i2c, sbs_id);
980 909
910static const struct of_device_id sbs_dt_ids[] = {
911 { .compatible = "sbs,sbs-battery" },
912 { .compatible = "ti,bq20z75" },
913 { }
914};
915MODULE_DEVICE_TABLE(of, sbs_dt_ids);
916
981static struct i2c_driver sbs_battery_driver = { 917static struct i2c_driver sbs_battery_driver = {
982 .probe = sbs_probe, 918 .probe = sbs_probe,
983 .remove = sbs_remove, 919 .remove = sbs_remove,
984 .id_table = sbs_id, 920 .id_table = sbs_id,
985 .driver = { 921 .driver = {
986 .name = "sbs-battery", 922 .name = "sbs-battery",
987 .of_match_table = of_match_ptr(sbs_dt_ids), 923 .of_match_table = sbs_dt_ids,
988 .pm = SBS_PM_OPS, 924 .pm = SBS_PM_OPS,
989 }, 925 },
990}; 926};
diff --git a/drivers/power/smb347-charger.c b/drivers/power/supply/smb347-charger.c
index 072c5189bd6d..072c5189bd6d 100644
--- a/drivers/power/smb347-charger.c
+++ b/drivers/power/supply/smb347-charger.c
diff --git a/drivers/power/test_power.c b/drivers/power/supply/test_power.c
index 57246cdbd042..57246cdbd042 100644
--- a/drivers/power/test_power.c
+++ b/drivers/power/supply/test_power.c
diff --git a/drivers/power/tosa_battery.c b/drivers/power/supply/tosa_battery.c
index 6e88c1b37945..6e88c1b37945 100644
--- a/drivers/power/tosa_battery.c
+++ b/drivers/power/supply/tosa_battery.c
diff --git a/drivers/power/tps65090-charger.c b/drivers/power/supply/tps65090-charger.c
index 1b4b5e09538e..1b4b5e09538e 100644
--- a/drivers/power/tps65090-charger.c
+++ b/drivers/power/supply/tps65090-charger.c
diff --git a/drivers/power/tps65217_charger.c b/drivers/power/supply/tps65217_charger.c
index 4c56e54af6ac..9fd019f9b88c 100644
--- a/drivers/power/tps65217_charger.c
+++ b/drivers/power/supply/tps65217_charger.c
@@ -46,6 +46,8 @@ struct tps65217_charger {
46 int prev_ac_online; 46 int prev_ac_online;
47 47
48 struct task_struct *poll_task; 48 struct task_struct *poll_task;
49
50 int irq;
49}; 51};
50 52
51static enum power_supply_property tps65217_ac_props[] = { 53static enum power_supply_property tps65217_ac_props[] = {
@@ -198,6 +200,7 @@ static int tps65217_charger_probe(struct platform_device *pdev)
198 struct tps65217 *tps = dev_get_drvdata(pdev->dev.parent); 200 struct tps65217 *tps = dev_get_drvdata(pdev->dev.parent);
199 struct tps65217_charger *charger; 201 struct tps65217_charger *charger;
200 struct power_supply_config cfg = {}; 202 struct power_supply_config cfg = {};
203 int irq;
201 int ret; 204 int ret;
202 205
203 dev_dbg(&pdev->dev, "%s\n", __func__); 206 dev_dbg(&pdev->dev, "%s\n", __func__);
@@ -221,18 +224,40 @@ static int tps65217_charger_probe(struct platform_device *pdev)
221 return PTR_ERR(charger->ac); 224 return PTR_ERR(charger->ac);
222 } 225 }
223 226
227 irq = platform_get_irq_byname(pdev, "AC");
228 if (irq < 0)
229 irq = -ENXIO;
230 charger->irq = irq;
231
224 ret = tps65217_config_charger(charger); 232 ret = tps65217_config_charger(charger);
225 if (ret < 0) { 233 if (ret < 0) {
226 dev_err(charger->dev, "charger config failed, err %d\n", ret); 234 dev_err(charger->dev, "charger config failed, err %d\n", ret);
227 return ret; 235 return ret;
228 } 236 }
229 237
230 charger->poll_task = kthread_run(tps65217_charger_poll_task, 238 if (irq != -ENXIO) {
231 charger, "ktps65217charger"); 239 ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
232 if (IS_ERR(charger->poll_task)) { 240 tps65217_charger_irq,
233 ret = PTR_ERR(charger->poll_task); 241 0, "tps65217-charger",
234 dev_err(charger->dev, "Unable to run kthread err %d\n", ret); 242 charger);
235 return ret; 243 if (ret) {
244 dev_err(charger->dev,
245 "Unable to register irq %d err %d\n", irq,
246 ret);
247 return ret;
248 }
249
250 /* Check current state */
251 tps65217_charger_irq(irq, charger);
252 } else {
253 charger->poll_task = kthread_run(tps65217_charger_poll_task,
254 charger, "ktps65217charger");
255 if (IS_ERR(charger->poll_task)) {
256 ret = PTR_ERR(charger->poll_task);
257 dev_err(charger->dev,
258 "Unable to run kthread err %d\n", ret);
259 return ret;
260 }
236 } 261 }
237 262
238 return 0; 263 return 0;
@@ -242,7 +267,8 @@ static int tps65217_charger_remove(struct platform_device *pdev)
242{ 267{
243 struct tps65217_charger *charger = platform_get_drvdata(pdev); 268 struct tps65217_charger *charger = platform_get_drvdata(pdev);
244 269
245 kthread_stop(charger->poll_task); 270 if (charger->irq == -ENXIO)
271 kthread_stop(charger->poll_task);
246 272
247 return 0; 273 return 0;
248} 274}
diff --git a/drivers/power/twl4030_charger.c b/drivers/power/supply/twl4030_charger.c
index bcd4dc304f27..bcd4dc304f27 100644
--- a/drivers/power/twl4030_charger.c
+++ b/drivers/power/supply/twl4030_charger.c
diff --git a/drivers/power/twl4030_madc_battery.c b/drivers/power/supply/twl4030_madc_battery.c
index f5817e422d64..f5817e422d64 100644
--- a/drivers/power/twl4030_madc_battery.c
+++ b/drivers/power/supply/twl4030_madc_battery.c
diff --git a/drivers/power/wm831x_backup.c b/drivers/power/supply/wm831x_backup.c
index 2e33109ca8c7..2e33109ca8c7 100644
--- a/drivers/power/wm831x_backup.c
+++ b/drivers/power/supply/wm831x_backup.c
diff --git a/drivers/power/wm831x_power.c b/drivers/power/supply/wm831x_power.c
index 7082301da945..7082301da945 100644
--- a/drivers/power/wm831x_power.c
+++ b/drivers/power/supply/wm831x_power.c
diff --git a/drivers/power/wm8350_power.c b/drivers/power/supply/wm8350_power.c
index 5c5880664e09..5c5880664e09 100644
--- a/drivers/power/wm8350_power.c
+++ b/drivers/power/supply/wm8350_power.c
diff --git a/drivers/power/wm97xx_battery.c b/drivers/power/supply/wm97xx_battery.c
index c2f09ed35050..6285626d142a 100644
--- a/drivers/power/wm97xx_battery.c
+++ b/drivers/power/supply/wm97xx_battery.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * linux/drivers/power/wm97xx_battery.c
3 *
4 * Battery measurement code for WM97xx 2 * Battery measurement code for WM97xx
5 * 3 *
6 * based on tosa_battery.c 4 * based on tosa_battery.c
diff --git a/drivers/power/z2_battery.c b/drivers/power/supply/z2_battery.c
index b201e3facf73..8a43b49cfd35 100644
--- a/drivers/power/z2_battery.c
+++ b/drivers/power/supply/z2_battery.c
@@ -317,7 +317,6 @@ MODULE_DEVICE_TABLE(i2c, z2_batt_id);
317static struct i2c_driver z2_batt_driver = { 317static struct i2c_driver z2_batt_driver = {
318 .driver = { 318 .driver = {
319 .name = "z2-battery", 319 .name = "z2-battery",
320 .owner = THIS_MODULE,
321 .pm = Z2_BATTERY_PM_OPS 320 .pm = Z2_BATTERY_PM_OPS
322 }, 321 },
323 .probe = z2_batt_probe, 322 .probe = z2_batt_probe,
diff --git a/include/linux/power/bq24735-charger.h b/include/linux/power/bq24735-charger.h
index 6b750c1a45fa..b04be59f914c 100644
--- a/include/linux/power/bq24735-charger.h
+++ b/include/linux/power/bq24735-charger.h
@@ -28,10 +28,6 @@ struct bq24735_platform {
28 28
29 const char *name; 29 const char *name;
30 30
31 int status_gpio;
32 int status_gpio_active_low;
33 bool status_gpio_valid;
34
35 bool ext_control; 31 bool ext_control;
36 32
37 char **supplied_to; 33 char **supplied_to;
diff --git a/include/linux/power/bq27xxx_battery.h b/include/linux/power/bq27xxx_battery.h
index b50c0492629d..e30deb046156 100644
--- a/include/linux/power/bq27xxx_battery.h
+++ b/include/linux/power/bq27xxx_battery.h
@@ -58,6 +58,7 @@ struct bq27xxx_device_info {
58 unsigned long last_update; 58 unsigned long last_update;
59 struct delayed_work work; 59 struct delayed_work work;
60 struct power_supply *bat; 60 struct power_supply *bat;
61 struct list_head list;
61 struct mutex lock; 62 struct mutex lock;
62 u8 *regs; 63 u8 *regs;
63}; 64};
diff --git a/include/linux/power/sbs-battery.h b/include/linux/power/sbs-battery.h
index 2b0a9d9ff57e..519b8b43239a 100644
--- a/include/linux/power/sbs-battery.h
+++ b/include/linux/power/sbs-battery.h
@@ -26,17 +26,13 @@
26 26
27/** 27/**
28 * struct sbs_platform_data - platform data for sbs devices 28 * struct sbs_platform_data - platform data for sbs devices
29 * @battery_detect: GPIO which is used to detect battery presence
30 * @battery_detect_present: gpio state when battery is present (0 / 1)
31 * @i2c_retry_count: # of times to retry on i2c IO failure 29 * @i2c_retry_count: # of times to retry on i2c IO failure
32 * @poll_retry_count: # of times to retry looking for new status after 30 * @poll_retry_count: # of times to retry looking for new status after
33 * external change notification 31 * external change notification
34 */ 32 */
35struct sbs_platform_data { 33struct sbs_platform_data {
36 int battery_detect; 34 u32 i2c_retry_count;
37 int battery_detect_present; 35 u32 poll_retry_count;
38 int i2c_retry_count;
39 int poll_retry_count;
40}; 36};
41 37
42#endif 38#endif