diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-10-06 21:21:15 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-10-06 21:21:15 -0400 |
commit | 021723e6c5a5e7b50eb68f9812418406de9860b2 (patch) | |
tree | fe22465563a9056925f0e4edd236d9a6c456e6cc | |
parent | c6594fc6af1924b7fdce600088b10e3b3b159fb7 (diff) | |
parent | 1d72706f0485b58e151b5a7584c4c65d66670587 (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-- | CREDITS | 4 | ||||
-rw-r--r-- | Documentation/ABI/testing/sysfs-class-power | 8 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/power/act8945a-charger.txt | 35 | ||||
-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.txt | 7 | ||||
-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.txt | 48 | ||||
-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.txt | 4 | ||||
-rw-r--r-- | Documentation/power/power_supply_class.txt | 4 | ||||
-rw-r--r-- | MAINTAINERS | 46 | ||||
-rw-r--r-- | drivers/power/Kconfig | 518 | ||||
-rw-r--r-- | drivers/power/Makefile | 75 | ||||
-rw-r--r-- | drivers/power/act8945a_charger.c | 359 | ||||
-rw-r--r-- | drivers/power/reset/keystone-reset.c | 2 | ||||
-rw-r--r-- | drivers/power/reset/reboot-mode.c | 59 | ||||
-rw-r--r-- | drivers/power/reset/reboot-mode.h | 4 | ||||
-rw-r--r-- | drivers/power/reset/st-poweroff.c | 41 | ||||
-rw-r--r-- | drivers/power/reset/syscon-reboot-mode.c | 12 | ||||
-rw-r--r-- | drivers/power/reset/xgene-reboot.c | 4 | ||||
-rw-r--r-- | drivers/power/reset/zx-reboot.c | 5 | ||||
-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/Kconfig | 514 | ||||
-rw-r--r-- | drivers/power/supply/Makefile | 74 | ||||
-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.c | 666 | ||||
-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.h | 4 | ||||
-rw-r--r-- | include/linux/power/bq27xxx_battery.h | 1 | ||||
-rw-r--r-- | include/linux/power/sbs-battery.h | 8 |
131 files changed, 1638 insertions, 1315 deletions
@@ -1090,6 +1090,10 @@ S: 6350 Stoneridge Mall Road | |||
1090 | S: Pleasanton, CA 94588 | 1090 | S: Pleasanton, CA 94588 |
1091 | S: USA | 1091 | S: USA |
1092 | 1092 | ||
1093 | N: Dmitry Eremin-Solenikov | ||
1094 | E: dbaryshkov@gmail.com | ||
1095 | D: Power Supply Maintainer from v3.14 - v3.15 | ||
1096 | |||
1093 | N: Doug Evans | 1097 | N: Doug Evans |
1094 | E: dje@cygnus.com | 1098 | E: dje@cygnus.com |
1095 | D: Wrote Xenix FS (part of standard kernel since 0.99.15) | 1099 | D: 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: | |||
22 | What: /sys/class/power_supply/max14577-charger/device/fast_charge_timer | 22 | What: /sys/class/power_supply/max14577-charger/device/fast_charge_timer |
23 | Date: October 2014 | 23 | Date: October 2014 |
24 | KernelVersion: 3.18.0 | 24 | KernelVersion: 3.18.0 |
25 | Contact: Krzysztof Kozlowski <k.kozlowski@samsung.com> | 25 | Contact: Krzysztof Kozlowski <krzk@kernel.org> |
26 | Description: | 26 | Description: |
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: | |||
36 | What: /sys/class/power_supply/max77693-charger/device/fast_charge_timer | 36 | What: /sys/class/power_supply/max77693-charger/device/fast_charge_timer |
37 | Date: January 2015 | 37 | Date: January 2015 |
38 | KernelVersion: 3.19.0 | 38 | KernelVersion: 3.19.0 |
39 | Contact: Krzysztof Kozlowski <k.kozlowski@samsung.com> | 39 | Contact: Krzysztof Kozlowski <krzk@kernel.org> |
40 | Description: | 40 | Description: |
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: | |||
50 | What: /sys/class/power_supply/max77693-charger/device/top_off_threshold_current | 50 | What: /sys/class/power_supply/max77693-charger/device/top_off_threshold_current |
51 | Date: January 2015 | 51 | Date: January 2015 |
52 | KernelVersion: 3.19.0 | 52 | KernelVersion: 3.19.0 |
53 | Contact: Krzysztof Kozlowski <k.kozlowski@samsung.com> | 53 | Contact: Krzysztof Kozlowski <krzk@kernel.org> |
54 | Description: | 54 | Description: |
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: | |||
65 | What: /sys/class/power_supply/max77693-charger/device/top_off_timer | 65 | What: /sys/class/power_supply/max77693-charger/device/top_off_timer |
66 | Date: January 2015 | 66 | Date: January 2015 |
67 | KernelVersion: 3.19.0 | 67 | KernelVersion: 3.19.0 |
68 | Contact: Krzysztof Kozlowski <k.kozlowski@samsung.com> | 68 | Contact: Krzysztof Kozlowski <krzk@kernel.org> |
69 | Description: | 69 | Description: |
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 @@ | |||
1 | Device-Tree bindings for charger of Active-semi ACT8945A Multi-Function Device | ||
2 | |||
3 | Required 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 | |||
8 | Optional 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 | |||
23 | Example: | ||
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 | ||
3 | Required properties: | 3 | Required 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 | ||
7 | Example node: | 7 | Example 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 @@ | |||
1 | Device-Tree bindings for charger of Active-semi ACT8945A Multi-Function Device | ||
2 | |||
3 | Required 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 | |||
15 | Optional 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 | |||
28 | Example: | ||
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 | ||
349 | POWER | ||
350 | devm_reboot_mode_register() | ||
351 | devm_reboot_mode_unregister() | ||
352 | |||
349 | PWM | 353 | PWM |
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 | |||
39 | manner. Results for different power supplies and machines are also directly | 39 | manner. Results for different power supplies and machines are also directly |
40 | comparable. | 40 | comparable. |
41 | 41 | ||
42 | See drivers/power/ds2760_battery.c and drivers/power/pda_power.c for the | 42 | See drivers/power/supply/ds2760_battery.c and drivers/power/supply/pda_power.c |
43 | example how to declare and handle attributes. | 43 | for the example how to declare and handle attributes. |
44 | 44 | ||
45 | 45 | ||
46 | Units | 46 | Units |
diff --git a/MAINTAINERS b/MAINTAINERS index 464437dbfa26..40f462966564 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -3784,8 +3784,8 @@ F: drivers/leds/leds-da90??.c | |||
3784 | F: drivers/mfd/da903x.c | 3784 | F: drivers/mfd/da903x.c |
3785 | F: drivers/mfd/da90??-*.c | 3785 | F: drivers/mfd/da90??-*.c |
3786 | F: drivers/mfd/da91??-*.c | 3786 | F: drivers/mfd/da91??-*.c |
3787 | F: drivers/power/da9052-battery.c | 3787 | F: drivers/power/supply/da9052-battery.c |
3788 | F: drivers/power/da91??-*.c | 3788 | F: drivers/power/supply/da91??-*.c |
3789 | F: drivers/regulator/da903x.c | 3789 | F: drivers/regulator/da903x.c |
3790 | F: drivers/regulator/da9???-regulator.[ch] | 3790 | F: drivers/regulator/da9???-regulator.[ch] |
3791 | F: drivers/rtc/rtc-da90??.c | 3791 | F: drivers/rtc/rtc-da90??.c |
@@ -7579,8 +7579,8 @@ M: Krzysztof Kozlowski <krzk@kernel.org> | |||
7579 | M: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> | 7579 | M: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> |
7580 | L: linux-pm@vger.kernel.org | 7580 | L: linux-pm@vger.kernel.org |
7581 | S: Supported | 7581 | S: Supported |
7582 | F: drivers/power/max14577_charger.c | 7582 | F: drivers/power/supply/max14577_charger.c |
7583 | F: drivers/power/max77693_charger.c | 7583 | F: drivers/power/supply/max77693_charger.c |
7584 | 7584 | ||
7585 | MAXIM MAX77802 MULTIFUNCTION PMIC DEVICE DRIVERS | 7585 | MAXIM MAX77802 MULTIFUNCTION PMIC DEVICE DRIVERS |
7586 | M: Javier Martinez Canillas <javier@osg.samsung.com> | 7586 | M: Javier Martinez Canillas <javier@osg.samsung.com> |
@@ -8486,11 +8486,11 @@ R: Pali Rohár <pali.rohar@gmail.com> | |||
8486 | F: include/linux/power/bq2415x_charger.h | 8486 | F: include/linux/power/bq2415x_charger.h |
8487 | F: include/linux/power/bq27xxx_battery.h | 8487 | F: include/linux/power/bq27xxx_battery.h |
8488 | F: include/linux/power/isp1704_charger.h | 8488 | F: include/linux/power/isp1704_charger.h |
8489 | F: drivers/power/bq2415x_charger.c | 8489 | F: drivers/power/supply/bq2415x_charger.c |
8490 | F: drivers/power/bq27xxx_battery.c | 8490 | F: drivers/power/supply/bq27xxx_battery.c |
8491 | F: drivers/power/bq27xxx_battery_i2c.c | 8491 | F: drivers/power/supply/bq27xxx_battery_i2c.c |
8492 | F: drivers/power/isp1704_charger.c | 8492 | F: drivers/power/supply/isp1704_charger.c |
8493 | F: drivers/power/rx51_battery.c | 8493 | F: drivers/power/supply/rx51_battery.c |
8494 | 8494 | ||
8495 | NTB DRIVER CORE | 8495 | NTB DRIVER CORE |
8496 | M: Jon Mason <jdmason@kudzu.us> | 8496 | M: Jon Mason <jdmason@kudzu.us> |
@@ -9490,16 +9490,12 @@ F: drivers/powercap/ | |||
9490 | 9490 | ||
9491 | POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS | 9491 | POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS |
9492 | M: Sebastian Reichel <sre@kernel.org> | 9492 | M: Sebastian Reichel <sre@kernel.org> |
9493 | M: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | ||
9494 | M: David Woodhouse <dwmw2@infradead.org> | ||
9495 | L: linux-pm@vger.kernel.org | 9493 | L: linux-pm@vger.kernel.org |
9496 | T: git git://git.infradead.org/battery-2.6.git | 9494 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git |
9497 | S: Maintained | 9495 | S: Maintained |
9498 | F: Documentation/devicetree/bindings/power/ | 9496 | F: Documentation/devicetree/bindings/power/supply/ |
9499 | F: Documentation/devicetree/bindings/power_supply/ | ||
9500 | F: include/linux/power_supply.h | 9497 | F: include/linux/power_supply.h |
9501 | F: drivers/power/ | 9498 | F: drivers/power/supply/ |
9502 | X: drivers/power/avs/ | ||
9503 | 9499 | ||
9504 | POWER STATE COORDINATION INTERFACE (PSCI) | 9500 | POWER STATE COORDINATION INTERFACE (PSCI) |
9505 | M: Mark Rutland <mark.rutland@arm.com> | 9501 | M: Mark Rutland <mark.rutland@arm.com> |
@@ -10514,8 +10510,8 @@ F: drivers/thunderbolt/ | |||
10514 | TI BQ27XXX POWER SUPPLY DRIVER | 10510 | TI BQ27XXX POWER SUPPLY DRIVER |
10515 | R: Andrew F. Davis <afd@ti.com> | 10511 | R: Andrew F. Davis <afd@ti.com> |
10516 | F: include/linux/power/bq27xxx_battery.h | 10512 | F: include/linux/power/bq27xxx_battery.h |
10517 | F: drivers/power/bq27xxx_battery.c | 10513 | F: drivers/power/supply/bq27xxx_battery.c |
10518 | F: drivers/power/bq27xxx_battery_i2c.c | 10514 | F: drivers/power/supply/bq27xxx_battery_i2c.c |
10519 | 10515 | ||
10520 | TIMEKEEPING, CLOCKSOURCE CORE, NTP, ALARMTIMER | 10516 | TIMEKEEPING, CLOCKSOURCE CORE, NTP, ALARMTIMER |
10521 | M: John Stultz <john.stultz@linaro.org> | 10517 | M: John Stultz <john.stultz@linaro.org> |
@@ -11512,6 +11508,14 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git | |||
11512 | S: Supported | 11508 | S: Supported |
11513 | F: drivers/mfd/syscon.c | 11509 | F: drivers/mfd/syscon.c |
11514 | 11510 | ||
11511 | SYSTEM RESET/SHUTDOWN DRIVERS | ||
11512 | M: Sebastian Reichel <sre@kernel.org> | ||
11513 | L: linux-pm@vger.kernel.org | ||
11514 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git | ||
11515 | S: Maintained | ||
11516 | F: Documentation/devicetree/bindings/power/reset/ | ||
11517 | F: drivers/power/reset/ | ||
11518 | |||
11515 | SYSV FILESYSTEM | 11519 | SYSV FILESYSTEM |
11516 | M: Christoph Hellwig <hch@infradead.org> | 11520 | M: Christoph Hellwig <hch@infradead.org> |
11517 | S: Maintained | 11521 | S: Maintained |
@@ -11860,7 +11864,7 @@ F: include/linux/platform_data/lp855x.h | |||
11860 | TI LP8727 CHARGER DRIVER | 11864 | TI LP8727 CHARGER DRIVER |
11861 | M: Milo Kim <milo.kim@ti.com> | 11865 | M: Milo Kim <milo.kim@ti.com> |
11862 | S: Maintained | 11866 | S: Maintained |
11863 | F: drivers/power/lp8727_charger.c | 11867 | F: drivers/power/supply/lp8727_charger.c |
11864 | F: include/linux/platform_data/lp8727.h | 11868 | F: include/linux/platform_data/lp8727.h |
11865 | 11869 | ||
11866 | TI LP8788 MFD DRIVER | 11870 | TI LP8788 MFD DRIVER |
@@ -11869,7 +11873,7 @@ S: Maintained | |||
11869 | F: drivers/iio/adc/lp8788_adc.c | 11873 | F: drivers/iio/adc/lp8788_adc.c |
11870 | F: drivers/leds/leds-lp8788.c | 11874 | F: drivers/leds/leds-lp8788.c |
11871 | F: drivers/mfd/lp8788*.c | 11875 | F: drivers/mfd/lp8788*.c |
11872 | F: drivers/power/lp8788-charger.c | 11876 | F: drivers/power/supply/lp8788-charger.c |
11873 | F: drivers/regulator/lp8788-*.c | 11877 | F: drivers/regulator/lp8788-*.c |
11874 | F: include/linux/mfd/lp8788*.h | 11878 | F: include/linux/mfd/lp8788*.h |
11875 | 11879 | ||
@@ -12946,7 +12950,7 @@ F: drivers/input/touchscreen/wm97*.c | |||
12946 | F: drivers/mfd/arizona* | 12950 | F: drivers/mfd/arizona* |
12947 | F: drivers/mfd/wm*.c | 12951 | F: drivers/mfd/wm*.c |
12948 | F: drivers/mfd/cs47l24* | 12952 | F: drivers/mfd/cs47l24* |
12949 | F: drivers/power/wm83*.c | 12953 | F: drivers/power/supply/wm83*.c |
12950 | F: drivers/rtc/rtc-wm83*.c | 12954 | F: drivers/rtc/rtc-wm83*.c |
12951 | F: drivers/regulator/wm8*.c | 12955 | F: drivers/regulator/wm8*.c |
12952 | F: drivers/video/backlight/wm83*_bl.c | 12956 | F: 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 @@ | |||
1 | menuconfig 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 | |||
9 | if POWER_SUPPLY | ||
10 | |||
11 | config 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 | |||
17 | config 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 | |||
25 | config 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 | |||
32 | config 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 | |||
39 | config 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 | |||
46 | config 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 | |||
53 | config 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 | |||
60 | config 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 | |||
67 | config TEST_POWER | ||
68 | tristate "Test power driver" | ||
69 | help | ||
70 | This driver is used for testing. It's safe to say M here. | ||
71 | |||
72 | config 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 | |||
78 | config 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 | |||
85 | config 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 | |||
91 | config 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 | |||
99 | config 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 | |||
113 | config 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 | |||
120 | config 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 | |||
127 | config 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 | |||
133 | config 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 | |||
140 | config 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 | |||
147 | config 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 | |||
154 | config 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 | |||
160 | config 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 | |||
167 | config BATTERY_BQ27XXX | ||
168 | tristate "BQ27xxx battery driver" | ||
169 | help | ||
170 | Say Y here to enable support for batteries with BQ27xxx chips. | ||
171 | |||
172 | config 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 | |||
181 | config 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 | |||
188 | config 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 | |||
195 | config 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 | |||
207 | config 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 | |||
217 | config 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 | |||
224 | config 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 | |||
233 | config 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 | |||
241 | config 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 | |||
253 | config 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 | |||
259 | config 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 | |||
265 | config 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 | |||
272 | config 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 | |||
278 | config 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 | |||
284 | config 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 | |||
295 | config 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 | |||
302 | config 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 | |||
309 | config 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 | |||
317 | config 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 | |||
325 | config 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 | |||
331 | config 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 | |||
337 | config 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 | |||
345 | config 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 | |||
355 | config 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 | |||
366 | config 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 | |||
373 | config 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 | |||
379 | config 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 | |||
386 | config 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 | |||
393 | config 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 | |||
406 | config 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 | |||
416 | config 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 | |||
423 | config 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 | |||
432 | config 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 | |||
439 | config 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 | |||
447 | config 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 | |||
455 | config 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 | |||
462 | config 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 | |||
469 | config 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 | |||
477 | config 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 | |||
483 | config 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 | |||
491 | config 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 | |||
499 | config 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 | |||
507 | config 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 | |||
514 | endif # POWER_SUPPLY | ||
515 | |||
516 | source "drivers/power/reset/Kconfig" | ||
517 | source "drivers/power/avs/Kconfig" | 1 | source "drivers/power/avs/Kconfig" |
2 | source "drivers/power/reset/Kconfig" | ||
3 | source "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 @@ | |||
1 | subdir-ccflags-$(CONFIG_POWER_SUPPLY_DEBUG) := -DDEBUG | ||
2 | |||
3 | power_supply-y := power_supply_core.o | ||
4 | power_supply-$(CONFIG_SYSFS) += power_supply_sysfs.o | ||
5 | power_supply-$(CONFIG_LEDS_TRIGGERS) += power_supply_leds.o | ||
6 | |||
7 | obj-$(CONFIG_POWER_SUPPLY) += power_supply.o | ||
8 | obj-$(CONFIG_GENERIC_ADC_BATTERY) += generic-adc-battery.o | ||
9 | |||
10 | obj-$(CONFIG_PDA_POWER) += pda_power.o | ||
11 | obj-$(CONFIG_APM_POWER) += apm_power.o | ||
12 | obj-$(CONFIG_AXP20X_POWER) += axp20x_usb_power.o | ||
13 | obj-$(CONFIG_MAX8925_POWER) += max8925_power.o | ||
14 | obj-$(CONFIG_WM831X_BACKUP) += wm831x_backup.o | ||
15 | obj-$(CONFIG_WM831X_POWER) += wm831x_power.o | ||
16 | obj-$(CONFIG_WM8350_POWER) += wm8350_power.o | ||
17 | obj-$(CONFIG_TEST_POWER) += test_power.o | ||
18 | |||
19 | obj-$(CONFIG_BATTERY_88PM860X) += 88pm860x_battery.o | ||
20 | obj-$(CONFIG_BATTERY_ACT8945A) += act8945a_charger.o | ||
21 | obj-$(CONFIG_BATTERY_DS2760) += ds2760_battery.o | ||
22 | obj-$(CONFIG_BATTERY_DS2780) += ds2780_battery.o | ||
23 | obj-$(CONFIG_BATTERY_DS2781) += ds2781_battery.o | ||
24 | obj-$(CONFIG_BATTERY_DS2782) += ds2782_battery.o | ||
25 | obj-$(CONFIG_BATTERY_GAUGE_LTC2941) += ltc2941-battery-gauge.o | ||
26 | obj-$(CONFIG_BATTERY_GOLDFISH) += goldfish_battery.o | ||
27 | obj-$(CONFIG_BATTERY_PMU) += pmu_battery.o | ||
28 | obj-$(CONFIG_BATTERY_OLPC) += olpc_battery.o | ||
29 | obj-$(CONFIG_BATTERY_TOSA) += tosa_battery.o | ||
30 | obj-$(CONFIG_BATTERY_COLLIE) += collie_battery.o | ||
31 | obj-$(CONFIG_BATTERY_IPAQ_MICRO) += ipaq_micro_battery.o | ||
32 | obj-$(CONFIG_BATTERY_WM97XX) += wm97xx_battery.o | ||
33 | obj-$(CONFIG_BATTERY_SBS) += sbs-battery.o | ||
34 | obj-$(CONFIG_BATTERY_BQ27XXX) += bq27xxx_battery.o | ||
35 | obj-$(CONFIG_BATTERY_BQ27XXX_I2C) += bq27xxx_battery_i2c.o | ||
36 | obj-$(CONFIG_BATTERY_DA9030) += da9030_battery.o | ||
37 | obj-$(CONFIG_BATTERY_DA9052) += da9052-battery.o | ||
38 | obj-$(CONFIG_CHARGER_DA9150) += da9150-charger.o | ||
39 | obj-$(CONFIG_BATTERY_DA9150) += da9150-fg.o | ||
40 | obj-$(CONFIG_BATTERY_MAX17040) += max17040_battery.o | ||
41 | obj-$(CONFIG_BATTERY_MAX17042) += max17042_battery.o | ||
42 | obj-$(CONFIG_BATTERY_Z2) += z2_battery.o | ||
43 | obj-$(CONFIG_BATTERY_RT5033) += rt5033_battery.o | ||
44 | obj-$(CONFIG_CHARGER_RT9455) += rt9455_charger.o | ||
45 | obj-$(CONFIG_BATTERY_S3C_ADC) += s3c_adc_battery.o | ||
46 | obj-$(CONFIG_BATTERY_TWL4030_MADC) += twl4030_madc_battery.o | ||
47 | obj-$(CONFIG_CHARGER_88PM860X) += 88pm860x_charger.o | ||
48 | obj-$(CONFIG_CHARGER_PCF50633) += pcf50633-charger.o | ||
49 | obj-$(CONFIG_BATTERY_JZ4740) += jz4740-battery.o | ||
50 | obj-$(CONFIG_BATTERY_INTEL_MID) += intel_mid_battery.o | ||
51 | obj-$(CONFIG_BATTERY_RX51) += rx51_battery.o | ||
52 | obj-$(CONFIG_AB8500_BM) += ab8500_bmdata.o ab8500_charger.o ab8500_fg.o ab8500_btemp.o abx500_chargalg.o pm2301_charger.o | ||
53 | obj-$(CONFIG_CHARGER_ISP1704) += isp1704_charger.o | ||
54 | obj-$(CONFIG_CHARGER_MAX8903) += max8903_charger.o | ||
55 | obj-$(CONFIG_CHARGER_TWL4030) += twl4030_charger.o | ||
56 | obj-$(CONFIG_CHARGER_LP8727) += lp8727_charger.o | ||
57 | obj-$(CONFIG_CHARGER_LP8788) += lp8788-charger.o | ||
58 | obj-$(CONFIG_CHARGER_GPIO) += gpio-charger.o | ||
59 | obj-$(CONFIG_CHARGER_MANAGER) += charger-manager.o | ||
60 | obj-$(CONFIG_CHARGER_MAX14577) += max14577_charger.o | ||
61 | obj-$(CONFIG_CHARGER_MAX77693) += max77693_charger.o | ||
62 | obj-$(CONFIG_CHARGER_MAX8997) += max8997_charger.o | ||
63 | obj-$(CONFIG_CHARGER_MAX8998) += max8998_charger.o | ||
64 | obj-$(CONFIG_CHARGER_QCOM_SMBB) += qcom_smbb.o | ||
65 | obj-$(CONFIG_CHARGER_BQ2415X) += bq2415x_charger.o | ||
66 | obj-$(CONFIG_CHARGER_BQ24190) += bq24190_charger.o | ||
67 | obj-$(CONFIG_CHARGER_BQ24257) += bq24257_charger.o | ||
68 | obj-$(CONFIG_CHARGER_BQ24735) += bq24735-charger.o | ||
69 | obj-$(CONFIG_CHARGER_BQ25890) += bq25890_charger.o | ||
70 | obj-$(CONFIG_POWER_AVS) += avs/ | 1 | obj-$(CONFIG_POWER_AVS) += avs/ |
71 | obj-$(CONFIG_CHARGER_SMB347) += smb347-charger.o | ||
72 | obj-$(CONFIG_CHARGER_TPS65090) += tps65090-charger.o | ||
73 | obj-$(CONFIG_CHARGER_TPS65217) += tps65217_charger.o | ||
74 | obj-$(CONFIG_POWER_RESET) += reset/ | 2 | obj-$(CONFIG_POWER_RESET) += reset/ |
75 | obj-$(CONFIG_AXP288_FUEL_GAUGE) += axp288_fuel_gauge.o | 3 | obj-$(CONFIG_POWER_SUPPLY) += supply/ |
76 | obj-$(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 | |||
20 | static const char *act8945a_charger_model = "ACT8945A"; | ||
21 | static 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 | |||
77 | struct act8945a_charger { | ||
78 | struct regmap *regmap; | ||
79 | bool battery_temperature; | ||
80 | }; | ||
81 | |||
82 | static 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 | |||
113 | static 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 | |||
141 | static 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 | |||
163 | static 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 | |||
172 | static 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 | |||
207 | static 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 | |||
219 | static 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 | |||
314 | static 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 | |||
349 | static struct platform_driver act8945a_charger_driver = { | ||
350 | .driver = { | ||
351 | .name = "act8945a-charger", | ||
352 | }, | ||
353 | .probe = act8945a_charger_probe, | ||
354 | }; | ||
355 | module_platform_driver(act8945a_charger_driver); | ||
356 | |||
357 | MODULE_DESCRIPTION("Active-semi ACT8945A ActivePath charger driver"); | ||
358 | MODULE_AUTHOR("Wenyou Yang <wenyou.yang@atmel.com>"); | ||
359 | MODULE_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 | } |
136 | EXPORT_SYMBOL_GPL(reboot_mode_unregister); | 136 | EXPORT_SYMBOL_GPL(reboot_mode_unregister); |
137 | 137 | ||
138 | static 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 | */ | ||
150 | int 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 | } | ||
171 | EXPORT_SYMBOL_GPL(devm_reboot_mode_register); | ||
172 | |||
173 | static 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 | */ | ||
188 | void 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 | } | ||
195 | EXPORT_SYMBOL_GPL(devm_reboot_mode_unregister); | ||
196 | |||
138 | MODULE_AUTHOR("Andy Yan <andy.yan@rock-chips.com"); | 197 | MODULE_AUTHOR("Andy Yan <andy.yan@rock-chips.com"); |
139 | MODULE_DESCRIPTION("System reboot mode core library"); | 198 | MODULE_DESCRIPTION("System reboot mode core library"); |
140 | MODULE_LICENSE("GPL v2"); | 199 | MODULE_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 | ||
11 | int reboot_mode_register(struct reboot_mode_driver *reboot); | 11 | int reboot_mode_register(struct reboot_mode_driver *reboot); |
12 | int reboot_mode_unregister(struct reboot_mode_driver *reboot); | 12 | int reboot_mode_unregister(struct reboot_mode_driver *reboot); |
13 | int devm_reboot_mode_register(struct device *dev, | ||
14 | struct reboot_mode_driver *reboot); | ||
15 | void 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 | |||
35 | static 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 | |||
46 | static 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 | |||
68 | static 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 | ||
75 | static struct reset_syscfg *st_restart_syscfg; | 43 | static struct reset_syscfg *st_restart_syscfg; |
76 | 44 | ||
@@ -99,17 +67,8 @@ static struct notifier_block st_restart_nb = { | |||
99 | 67 | ||
100 | static const struct of_device_id st_reset_of_match[] = { | 68 | static 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 | ||
75 | static 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 | |||
82 | static const struct of_device_id syscon_reboot_mode_of_match[] = { | 73 | static 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 | ||
87 | static struct platform_driver syscon_reboot_mode_driver = { | 78 | static 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 @@ | |||
1 | menuconfig 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 | |||
9 | if POWER_SUPPLY | ||
10 | |||
11 | config 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 | |||
17 | config 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 | |||
25 | config 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 | |||
32 | config 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 | |||
39 | config 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 | |||
46 | config 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 | |||
53 | config 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 | |||
60 | config 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 | |||
67 | config TEST_POWER | ||
68 | tristate "Test power driver" | ||
69 | help | ||
70 | This driver is used for testing. It's safe to say M here. | ||
71 | |||
72 | config 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 | |||
78 | config 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 | |||
85 | config 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 | |||
91 | config 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 | |||
99 | config 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 | |||
113 | config 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 | |||
120 | config 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 | |||
127 | config 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 | |||
133 | config 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 | |||
140 | config 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 | |||
147 | config 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 | |||
154 | config 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 | |||
160 | config 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 | |||
167 | config BATTERY_BQ27XXX | ||
168 | tristate "BQ27xxx battery driver" | ||
169 | help | ||
170 | Say Y here to enable support for batteries with BQ27xxx chips. | ||
171 | |||
172 | config 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 | |||
181 | config 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 | |||
188 | config 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 | |||
195 | config 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 | |||
207 | config 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 | |||
217 | config 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 | |||
224 | config 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 | |||
233 | config 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 | |||
241 | config 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 | |||
253 | config 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 | |||
259 | config 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 | |||
265 | config 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 | |||
272 | config 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 | |||
278 | config 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 | |||
284 | config 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 | |||
295 | config 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 | |||
302 | config 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 | |||
309 | config 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 | |||
317 | config 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 | |||
325 | config 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 | |||
331 | config 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 | |||
337 | config 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 | |||
345 | config 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 | |||
355 | config 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 | |||
366 | config 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 | |||
373 | config 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 | |||
379 | config 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 | |||
386 | config 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 | |||
393 | config 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 | |||
406 | config 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 | |||
416 | config 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 | |||
423 | config 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 | |||
432 | config 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 | |||
439 | config 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 | |||
447 | config 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 | |||
455 | config 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 | |||
462 | config 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 | |||
469 | config 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 | |||
477 | config 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 | |||
483 | config 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 | |||
491 | config 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 | |||
499 | config 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 | |||
507 | config 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 | |||
514 | endif # 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 @@ | |||
1 | subdir-ccflags-$(CONFIG_POWER_SUPPLY_DEBUG) := -DDEBUG | ||
2 | |||
3 | power_supply-y := power_supply_core.o | ||
4 | power_supply-$(CONFIG_SYSFS) += power_supply_sysfs.o | ||
5 | power_supply-$(CONFIG_LEDS_TRIGGERS) += power_supply_leds.o | ||
6 | |||
7 | obj-$(CONFIG_POWER_SUPPLY) += power_supply.o | ||
8 | obj-$(CONFIG_GENERIC_ADC_BATTERY) += generic-adc-battery.o | ||
9 | |||
10 | obj-$(CONFIG_PDA_POWER) += pda_power.o | ||
11 | obj-$(CONFIG_APM_POWER) += apm_power.o | ||
12 | obj-$(CONFIG_AXP20X_POWER) += axp20x_usb_power.o | ||
13 | obj-$(CONFIG_MAX8925_POWER) += max8925_power.o | ||
14 | obj-$(CONFIG_WM831X_BACKUP) += wm831x_backup.o | ||
15 | obj-$(CONFIG_WM831X_POWER) += wm831x_power.o | ||
16 | obj-$(CONFIG_WM8350_POWER) += wm8350_power.o | ||
17 | obj-$(CONFIG_TEST_POWER) += test_power.o | ||
18 | |||
19 | obj-$(CONFIG_BATTERY_88PM860X) += 88pm860x_battery.o | ||
20 | obj-$(CONFIG_BATTERY_ACT8945A) += act8945a_charger.o | ||
21 | obj-$(CONFIG_BATTERY_DS2760) += ds2760_battery.o | ||
22 | obj-$(CONFIG_BATTERY_DS2780) += ds2780_battery.o | ||
23 | obj-$(CONFIG_BATTERY_DS2781) += ds2781_battery.o | ||
24 | obj-$(CONFIG_BATTERY_DS2782) += ds2782_battery.o | ||
25 | obj-$(CONFIG_BATTERY_GAUGE_LTC2941) += ltc2941-battery-gauge.o | ||
26 | obj-$(CONFIG_BATTERY_GOLDFISH) += goldfish_battery.o | ||
27 | obj-$(CONFIG_BATTERY_PMU) += pmu_battery.o | ||
28 | obj-$(CONFIG_BATTERY_OLPC) += olpc_battery.o | ||
29 | obj-$(CONFIG_BATTERY_TOSA) += tosa_battery.o | ||
30 | obj-$(CONFIG_BATTERY_COLLIE) += collie_battery.o | ||
31 | obj-$(CONFIG_BATTERY_IPAQ_MICRO) += ipaq_micro_battery.o | ||
32 | obj-$(CONFIG_BATTERY_WM97XX) += wm97xx_battery.o | ||
33 | obj-$(CONFIG_BATTERY_SBS) += sbs-battery.o | ||
34 | obj-$(CONFIG_BATTERY_BQ27XXX) += bq27xxx_battery.o | ||
35 | obj-$(CONFIG_BATTERY_BQ27XXX_I2C) += bq27xxx_battery_i2c.o | ||
36 | obj-$(CONFIG_BATTERY_DA9030) += da9030_battery.o | ||
37 | obj-$(CONFIG_BATTERY_DA9052) += da9052-battery.o | ||
38 | obj-$(CONFIG_CHARGER_DA9150) += da9150-charger.o | ||
39 | obj-$(CONFIG_BATTERY_DA9150) += da9150-fg.o | ||
40 | obj-$(CONFIG_BATTERY_MAX17040) += max17040_battery.o | ||
41 | obj-$(CONFIG_BATTERY_MAX17042) += max17042_battery.o | ||
42 | obj-$(CONFIG_BATTERY_Z2) += z2_battery.o | ||
43 | obj-$(CONFIG_BATTERY_RT5033) += rt5033_battery.o | ||
44 | obj-$(CONFIG_CHARGER_RT9455) += rt9455_charger.o | ||
45 | obj-$(CONFIG_BATTERY_S3C_ADC) += s3c_adc_battery.o | ||
46 | obj-$(CONFIG_BATTERY_TWL4030_MADC) += twl4030_madc_battery.o | ||
47 | obj-$(CONFIG_CHARGER_88PM860X) += 88pm860x_charger.o | ||
48 | obj-$(CONFIG_CHARGER_PCF50633) += pcf50633-charger.o | ||
49 | obj-$(CONFIG_BATTERY_JZ4740) += jz4740-battery.o | ||
50 | obj-$(CONFIG_BATTERY_INTEL_MID) += intel_mid_battery.o | ||
51 | obj-$(CONFIG_BATTERY_RX51) += rx51_battery.o | ||
52 | obj-$(CONFIG_AB8500_BM) += ab8500_bmdata.o ab8500_charger.o ab8500_fg.o ab8500_btemp.o abx500_chargalg.o pm2301_charger.o | ||
53 | obj-$(CONFIG_CHARGER_ISP1704) += isp1704_charger.o | ||
54 | obj-$(CONFIG_CHARGER_MAX8903) += max8903_charger.o | ||
55 | obj-$(CONFIG_CHARGER_TWL4030) += twl4030_charger.o | ||
56 | obj-$(CONFIG_CHARGER_LP8727) += lp8727_charger.o | ||
57 | obj-$(CONFIG_CHARGER_LP8788) += lp8788-charger.o | ||
58 | obj-$(CONFIG_CHARGER_GPIO) += gpio-charger.o | ||
59 | obj-$(CONFIG_CHARGER_MANAGER) += charger-manager.o | ||
60 | obj-$(CONFIG_CHARGER_MAX14577) += max14577_charger.o | ||
61 | obj-$(CONFIG_CHARGER_MAX77693) += max77693_charger.o | ||
62 | obj-$(CONFIG_CHARGER_MAX8997) += max8997_charger.o | ||
63 | obj-$(CONFIG_CHARGER_MAX8998) += max8998_charger.o | ||
64 | obj-$(CONFIG_CHARGER_QCOM_SMBB) += qcom_smbb.o | ||
65 | obj-$(CONFIG_CHARGER_BQ2415X) += bq2415x_charger.o | ||
66 | obj-$(CONFIG_CHARGER_BQ24190) += bq24190_charger.o | ||
67 | obj-$(CONFIG_CHARGER_BQ24257) += bq24257_charger.o | ||
68 | obj-$(CONFIG_CHARGER_BQ24735) += bq24735-charger.o | ||
69 | obj-$(CONFIG_CHARGER_BQ25890) += bq25890_charger.o | ||
70 | obj-$(CONFIG_CHARGER_SMB347) += smb347-charger.o | ||
71 | obj-$(CONFIG_CHARGER_TPS65090) += tps65090-charger.o | ||
72 | obj-$(CONFIG_CHARGER_TPS65217) += tps65217_charger.o | ||
73 | obj-$(CONFIG_AXP288_FUEL_GAUGE) += axp288_fuel_gauge.o | ||
74 | obj-$(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 | */ |
246 | struct ab8500_fg *ab8500_fg_get(void) | 246 | struct 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 | |||
22 | static const char *act8945a_charger_model = "ACT8945A"; | ||
23 | static 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 | |||
79 | struct 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 | |||
90 | static 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 | |||
129 | static 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 | |||
167 | static 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 | |||
213 | static 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 | |||
280 | static 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 | |||
335 | static 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 | |||
346 | static 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 | |||
388 | static 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 | |||
411 | static 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 | |||
437 | static 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 | |||
447 | static 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 | |||
461 | static 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 | |||
578 | static 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 | |||
645 | static 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 | |||
655 | static struct platform_driver act8945a_charger_driver = { | ||
656 | .driver = { | ||
657 | .name = "act8945a-charger", | ||
658 | }, | ||
659 | .probe = act8945a_charger_probe, | ||
660 | .remove = act8945a_charger_remove, | ||
661 | }; | ||
662 | module_platform_driver(act8945a_charger_driver); | ||
663 | |||
664 | MODULE_DESCRIPTION("Active-semi ACT8945A ActivePath charger driver"); | ||
665 | MODULE_AUTHOR("Wenyou Yang <wenyou.yang@atmel.com>"); | ||
666 | MODULE_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 | ||
178 | static bool bq24735_charger_is_present(struct bq24735 *charger) | 179 | static 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 | ||
202 | static int bq24735_charger_is_charging(struct bq24735 *charger) | 199 | static 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 | ||
394 | static DEFINE_MUTEX(bq27xxx_list_lock); | ||
395 | static LIST_HEAD(bq27xxx_battery_devices); | ||
396 | |||
397 | static 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 | |||
416 | static const struct kernel_param_ops param_ops_poll_interval = { | ||
417 | .get = param_get_uint, | ||
418 | .set = poll_interval_param_set, | ||
419 | }; | ||
420 | |||
393 | static unsigned int poll_interval = 360; | 421 | static unsigned int poll_interval = 360; |
394 | module_param(poll_interval, uint, 0644); | 422 | module_param_cb(poll_interval, ¶m_ops_poll_interval, &poll_interval, 0644); |
395 | MODULE_PARM_DESC(poll_interval, | 423 | MODULE_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) | |||
644 | static int bq27xxx_battery_read_health(struct bq27xxx_device_info *di) | 672 | static 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 | } |
976 | EXPORT_SYMBOL_GPL(bq27xxx_battery_setup); | 1009 | EXPORT_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 | } |
994 | EXPORT_SYMBOL_GPL(bq27xxx_battery_teardown); | 1031 | EXPORT_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 | ||
34 | struct ds2760_device_info { | 34 | struct 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 | }; |
644 | module_platform_driver(max14577_charger_driver); | 644 | module_platform_driver(max14577_charger_driver); |
645 | 645 | ||
646 | MODULE_AUTHOR("Krzysztof Kozlowski <k.kozlowski@samsung.com>"); | 646 | MODULE_AUTHOR("Krzysztof Kozlowski <krzk@kernel.org>"); |
647 | MODULE_DESCRIPTION("Maxim 14577/77836 charger driver"); | 647 | MODULE_DESCRIPTION("Maxim 14577/77836 charger driver"); |
648 | MODULE_LICENSE("GPL"); | 648 | MODULE_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 | }; |
767 | module_platform_driver(max77693_charger_driver); | 767 | module_platform_driver(max77693_charger_driver); |
768 | 768 | ||
769 | MODULE_AUTHOR("Krzysztof Kozlowski <k.kozlowski@samsung.com>"); | 769 | MODULE_AUTHOR("Krzysztof Kozlowski <krzk@kernel.org>"); |
770 | MODULE_DESCRIPTION("Maxim 77693 charger driver"); | 770 | MODULE_DESCRIPTION("Maxim 77693 charger driver"); |
771 | MODULE_LICENSE("GPL"); | 771 | MODULE_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 | ||
132 | static enum power_supply_property sbs_properties[] = { | 136 | static 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[] = { | |||
158 | struct sbs_info { | 163 | struct 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 | ||
662 | static irqreturn_t sbs_irq(int irq, void *devid) | 678 | static 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 | ||
687 | static void sbs_delayed_work(struct work_struct *work) | 709 | static 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 | |||
725 | static const struct of_device_id sbs_dt_ids[] = { | ||
726 | { .compatible = "sbs,sbs-battery" }, | ||
727 | { .compatible = "ti,bq20z75" }, | ||
728 | { } | ||
729 | }; | ||
730 | MODULE_DEVICE_TABLE(of, sbs_dt_ids); | ||
731 | |||
732 | static 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 | |||
783 | of_out: | ||
784 | return pdata; | ||
785 | } | ||
786 | #else | ||
787 | static struct sbs_platform_data *sbs_of_populate_pdata( | ||
788 | struct i2c_client *client) | ||
789 | { | ||
790 | return client->dev.platform_data; | ||
791 | } | ||
792 | #endif | ||
793 | |||
794 | static const struct power_supply_desc sbs_default_desc = { | 742 | static 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 | |||
884 | skip_gpio: | 830 | skip_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 | ||
917 | exit_psupply: | 863 | exit_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 | }; |
979 | MODULE_DEVICE_TABLE(i2c, sbs_id); | 908 | MODULE_DEVICE_TABLE(i2c, sbs_id); |
980 | 909 | ||
910 | static const struct of_device_id sbs_dt_ids[] = { | ||
911 | { .compatible = "sbs,sbs-battery" }, | ||
912 | { .compatible = "ti,bq20z75" }, | ||
913 | { } | ||
914 | }; | ||
915 | MODULE_DEVICE_TABLE(of, sbs_dt_ids); | ||
916 | |||
981 | static struct i2c_driver sbs_battery_driver = { | 917 | static 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 | ||
51 | static enum power_supply_property tps65217_ac_props[] = { | 53 | static 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); | |||
317 | static struct i2c_driver z2_batt_driver = { | 317 | static 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 | */ |
35 | struct sbs_platform_data { | 33 | struct 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 |