diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-10-15 00:56:23 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-10-15 00:56:23 -0400 |
commit | 50fa86172bec2769979b5eb0cd1a244391ae4bb0 (patch) | |
tree | 5fd4949b031e1362af8b226d6372da2604de13ff /include/linux/mfd | |
parent | 6b0490816671b2f4126a99998c9bf3c8c0472de2 (diff) | |
parent | 7881c64716f3a7d60b325ed0ad4d15f49b474a43 (diff) |
Merge tag 'for-v3.18' of git://git.infradead.org/battery-2.6
Pull power supply and reset updates from Sebastian Reichel:
- Initial support for the following chips
* max77836 (charger)
* max14577 (charger)
* bq27742 (battery gauge)
* ltc2952 (poweroff)
* stih416 (restart)
* syscon-reboot (restart)
* gpio-restart (restart)
- cleanup of power supply core
- misc fixes in power supply and reset drivers
* tag 'for-v3.18' of git://git.infradead.org/battery-2.6: (48 commits)
power: ab8500_fg: Fix build warning
Documentation: charger: max14577: Update the date of introducing ABI
power: reset: corrections for simple syscon reboot driver
Documentation: power: reset: Add documentation for generic SYSCON reboot driver
power: reset: Add generic SYSCON register mapped reset
bq27x00_battery: Fix flag reading for bq27742
power: reset: use restart_notifier mechanism for msm-poweroff
power: Add simple gpio-restart driver
power: reset: st: Provide DT bindings for ST's Power Reset driver
power: reset: Add restart functionality for STiH41x platforms
power: charger-manager: Fix NULL pointer exception with missing cm-fuel-gauge
power: max14577: Fix circular config SYSFS dependency
power: gpio-charger: do not use gpio value directly
power: max8925: Use of_get_child_by_name
power: max8925: Fix NULL ptr dereference on memory allocation failure
bq27x00_battery: Add support to bq27742
Documentation: charger: max14577: Document exported sysfs entry
devicetree: mfd: max14577: Add device tree bindings document
power: max17040: Add ID for MAX77836 Fuel Gauge block
charger: max14577: Configure battery-dependent settings from DTS and sysfs
...
Conflicts:
drivers/power/reset/Kconfig
drivers/power/reset/Makefile
Diffstat (limited to 'include/linux/mfd')
-rw-r--r-- | include/linux/mfd/max14577-private.h | 95 | ||||
-rw-r--r-- | include/linux/mfd/max14577.h | 30 |
2 files changed, 100 insertions, 25 deletions
diff --git a/include/linux/mfd/max14577-private.h b/include/linux/mfd/max14577-private.h index 499253604026..f01c1fae4d84 100644 --- a/include/linux/mfd/max14577-private.h +++ b/include/linux/mfd/max14577-private.h | |||
@@ -72,15 +72,33 @@ enum max14577_muic_reg { | |||
72 | MAX14577_MUIC_REG_END, | 72 | MAX14577_MUIC_REG_END, |
73 | }; | 73 | }; |
74 | 74 | ||
75 | /* | ||
76 | * Combined charger types for max14577 and max77836. | ||
77 | * | ||
78 | * On max14577 three lower bits map to STATUS2/CHGTYP field. | ||
79 | * However the max77836 has different two last values of STATUS2/CHGTYP. | ||
80 | * To indicate the difference enum has two additional values for max77836. | ||
81 | * These values are just a register value bitwise OR with 0x8. | ||
82 | */ | ||
75 | enum max14577_muic_charger_type { | 83 | enum max14577_muic_charger_type { |
76 | MAX14577_CHARGER_TYPE_NONE = 0, | 84 | MAX14577_CHARGER_TYPE_NONE = 0x0, |
77 | MAX14577_CHARGER_TYPE_USB, | 85 | MAX14577_CHARGER_TYPE_USB = 0x1, |
78 | MAX14577_CHARGER_TYPE_DOWNSTREAM_PORT, | 86 | MAX14577_CHARGER_TYPE_DOWNSTREAM_PORT = 0x2, |
79 | MAX14577_CHARGER_TYPE_DEDICATED_CHG, | 87 | MAX14577_CHARGER_TYPE_DEDICATED_CHG = 0x3, |
80 | MAX14577_CHARGER_TYPE_SPECIAL_500MA, | 88 | MAX14577_CHARGER_TYPE_SPECIAL_500MA = 0x4, |
81 | MAX14577_CHARGER_TYPE_SPECIAL_1A, | 89 | /* Special 1A or 2A charger */ |
82 | MAX14577_CHARGER_TYPE_RESERVED, | 90 | MAX14577_CHARGER_TYPE_SPECIAL_1A = 0x5, |
83 | MAX14577_CHARGER_TYPE_DEAD_BATTERY = 7, | 91 | /* max14577: reserved, used on max77836 */ |
92 | MAX14577_CHARGER_TYPE_RESERVED = 0x6, | ||
93 | /* max14577: dead-battery charing with maximum current 100mA */ | ||
94 | MAX14577_CHARGER_TYPE_DEAD_BATTERY = 0x7, | ||
95 | /* | ||
96 | * max77836: special charger (bias on D+/D-), | ||
97 | * matches register value of 0x6 | ||
98 | */ | ||
99 | MAX77836_CHARGER_TYPE_SPECIAL_BIAS = 0xe, | ||
100 | /* max77836: reserved, register value 0x7 */ | ||
101 | MAX77836_CHARGER_TYPE_RESERVED = 0xf, | ||
84 | }; | 102 | }; |
85 | 103 | ||
86 | /* MAX14577 interrupts */ | 104 | /* MAX14577 interrupts */ |
@@ -121,13 +139,15 @@ enum max14577_muic_charger_type { | |||
121 | #define STATUS2_CHGTYP_SHIFT 0 | 139 | #define STATUS2_CHGTYP_SHIFT 0 |
122 | #define STATUS2_CHGDETRUN_SHIFT 3 | 140 | #define STATUS2_CHGDETRUN_SHIFT 3 |
123 | #define STATUS2_DCDTMR_SHIFT 4 | 141 | #define STATUS2_DCDTMR_SHIFT 4 |
124 | #define STATUS2_DBCHG_SHIFT 5 | 142 | #define MAX14577_STATUS2_DBCHG_SHIFT 5 |
143 | #define MAX77836_STATUS2_DXOVP_SHIFT 5 | ||
125 | #define STATUS2_VBVOLT_SHIFT 6 | 144 | #define STATUS2_VBVOLT_SHIFT 6 |
126 | #define MAX77836_STATUS2_VIDRM_SHIFT 7 | 145 | #define MAX77836_STATUS2_VIDRM_SHIFT 7 |
127 | #define STATUS2_CHGTYP_MASK (0x7 << STATUS2_CHGTYP_SHIFT) | 146 | #define STATUS2_CHGTYP_MASK (0x7 << STATUS2_CHGTYP_SHIFT) |
128 | #define STATUS2_CHGDETRUN_MASK BIT(STATUS2_CHGDETRUN_SHIFT) | 147 | #define STATUS2_CHGDETRUN_MASK BIT(STATUS2_CHGDETRUN_SHIFT) |
129 | #define STATUS2_DCDTMR_MASK BIT(STATUS2_DCDTMR_SHIFT) | 148 | #define STATUS2_DCDTMR_MASK BIT(STATUS2_DCDTMR_SHIFT) |
130 | #define STATUS2_DBCHG_MASK BIT(STATUS2_DBCHG_SHIFT) | 149 | #define MAX14577_STATUS2_DBCHG_MASK BIT(MAX14577_STATUS2_DBCHG_SHIFT) |
150 | #define MAX77836_STATUS2_DXOVP_MASK BIT(MAX77836_STATUS2_DXOVP_SHIFT) | ||
131 | #define STATUS2_VBVOLT_MASK BIT(STATUS2_VBVOLT_SHIFT) | 151 | #define STATUS2_VBVOLT_MASK BIT(STATUS2_VBVOLT_SHIFT) |
132 | #define MAX77836_STATUS2_VIDRM_MASK BIT(MAX77836_STATUS2_VIDRM_SHIFT) | 152 | #define MAX77836_STATUS2_VIDRM_MASK BIT(MAX77836_STATUS2_VIDRM_SHIFT) |
133 | 153 | ||
@@ -177,9 +197,11 @@ enum max14577_muic_charger_type { | |||
177 | #define CTRL3_JIGSET_SHIFT 0 | 197 | #define CTRL3_JIGSET_SHIFT 0 |
178 | #define CTRL3_BOOTSET_SHIFT 2 | 198 | #define CTRL3_BOOTSET_SHIFT 2 |
179 | #define CTRL3_ADCDBSET_SHIFT 4 | 199 | #define CTRL3_ADCDBSET_SHIFT 4 |
200 | #define CTRL3_WBTH_SHIFT 6 | ||
180 | #define CTRL3_JIGSET_MASK (0x3 << CTRL3_JIGSET_SHIFT) | 201 | #define CTRL3_JIGSET_MASK (0x3 << CTRL3_JIGSET_SHIFT) |
181 | #define CTRL3_BOOTSET_MASK (0x3 << CTRL3_BOOTSET_SHIFT) | 202 | #define CTRL3_BOOTSET_MASK (0x3 << CTRL3_BOOTSET_SHIFT) |
182 | #define CTRL3_ADCDBSET_MASK (0x3 << CTRL3_ADCDBSET_SHIFT) | 203 | #define CTRL3_ADCDBSET_MASK (0x3 << CTRL3_ADCDBSET_SHIFT) |
204 | #define CTRL3_WBTH_MASK (0x3 << CTRL3_WBTH_SHIFT) | ||
183 | 205 | ||
184 | /* Slave addr = 0x4A: Charger */ | 206 | /* Slave addr = 0x4A: Charger */ |
185 | enum max14577_charger_reg { | 207 | enum max14577_charger_reg { |
@@ -210,16 +232,20 @@ enum max14577_charger_reg { | |||
210 | #define CDETCTRL1_CHGTYPMAN_SHIFT 1 | 232 | #define CDETCTRL1_CHGTYPMAN_SHIFT 1 |
211 | #define CDETCTRL1_DCDEN_SHIFT 2 | 233 | #define CDETCTRL1_DCDEN_SHIFT 2 |
212 | #define CDETCTRL1_DCD2SCT_SHIFT 3 | 234 | #define CDETCTRL1_DCD2SCT_SHIFT 3 |
213 | #define CDETCTRL1_DCHKTM_SHIFT 4 | 235 | #define MAX14577_CDETCTRL1_DCHKTM_SHIFT 4 |
214 | #define CDETCTRL1_DBEXIT_SHIFT 5 | 236 | #define MAX77836_CDETCTRL1_CDLY_SHIFT 4 |
237 | #define MAX14577_CDETCTRL1_DBEXIT_SHIFT 5 | ||
238 | #define MAX77836_CDETCTRL1_DCDCPL_SHIFT 5 | ||
215 | #define CDETCTRL1_DBIDLE_SHIFT 6 | 239 | #define CDETCTRL1_DBIDLE_SHIFT 6 |
216 | #define CDETCTRL1_CDPDET_SHIFT 7 | 240 | #define CDETCTRL1_CDPDET_SHIFT 7 |
217 | #define CDETCTRL1_CHGDETEN_MASK BIT(CDETCTRL1_CHGDETEN_SHIFT) | 241 | #define CDETCTRL1_CHGDETEN_MASK BIT(CDETCTRL1_CHGDETEN_SHIFT) |
218 | #define CDETCTRL1_CHGTYPMAN_MASK BIT(CDETCTRL1_CHGTYPMAN_SHIFT) | 242 | #define CDETCTRL1_CHGTYPMAN_MASK BIT(CDETCTRL1_CHGTYPMAN_SHIFT) |
219 | #define CDETCTRL1_DCDEN_MASK BIT(CDETCTRL1_DCDEN_SHIFT) | 243 | #define CDETCTRL1_DCDEN_MASK BIT(CDETCTRL1_DCDEN_SHIFT) |
220 | #define CDETCTRL1_DCD2SCT_MASK BIT(CDETCTRL1_DCD2SCT_SHIFT) | 244 | #define CDETCTRL1_DCD2SCT_MASK BIT(CDETCTRL1_DCD2SCT_SHIFT) |
221 | #define CDETCTRL1_DCHKTM_MASK BIT(CDETCTRL1_DCHKTM_SHIFT) | 245 | #define MAX14577_CDETCTRL1_DCHKTM_MASK BIT(MAX14577_CDETCTRL1_DCHKTM_SHIFT) |
222 | #define CDETCTRL1_DBEXIT_MASK BIT(CDETCTRL1_DBEXIT_SHIFT) | 246 | #define MAX77836_CDETCTRL1_CDDLY_MASK BIT(MAX77836_CDETCTRL1_CDDLY_SHIFT) |
247 | #define MAX14577_CDETCTRL1_DBEXIT_MASK BIT(MAX14577_CDETCTRL1_DBEXIT_SHIFT) | ||
248 | #define MAX77836_CDETCTRL1_DCDCPL_MASK BIT(MAX77836_CDETCTRL1_DCDCPL_SHIFT) | ||
223 | #define CDETCTRL1_DBIDLE_MASK BIT(CDETCTRL1_DBIDLE_SHIFT) | 249 | #define CDETCTRL1_DBIDLE_MASK BIT(CDETCTRL1_DBIDLE_SHIFT) |
224 | #define CDETCTRL1_CDPDET_MASK BIT(CDETCTRL1_CDPDET_SHIFT) | 250 | #define CDETCTRL1_CDPDET_MASK BIT(CDETCTRL1_CDPDET_SHIFT) |
225 | 251 | ||
@@ -255,17 +281,36 @@ enum max14577_charger_reg { | |||
255 | #define CHGCTRL7_OTPCGHCVS_SHIFT 0 | 281 | #define CHGCTRL7_OTPCGHCVS_SHIFT 0 |
256 | #define CHGCTRL7_OTPCGHCVS_MASK (0x3 << CHGCTRL7_OTPCGHCVS_SHIFT) | 282 | #define CHGCTRL7_OTPCGHCVS_MASK (0x3 << CHGCTRL7_OTPCGHCVS_SHIFT) |
257 | 283 | ||
258 | /* MAX14577 regulator current limits (as in CHGCTRL4 register), uA */ | 284 | /* MAX14577 charger current limits (as in CHGCTRL4 register), uA */ |
259 | #define MAX14577_REGULATOR_CURRENT_LIMIT_MIN 90000 | 285 | #define MAX14577_CHARGER_CURRENT_LIMIT_MIN 90000U |
260 | #define MAX14577_REGULATOR_CURRENT_LIMIT_HIGH_START 200000 | 286 | #define MAX14577_CHARGER_CURRENT_LIMIT_HIGH_START 200000U |
261 | #define MAX14577_REGULATOR_CURRENT_LIMIT_HIGH_STEP 50000 | 287 | #define MAX14577_CHARGER_CURRENT_LIMIT_HIGH_STEP 50000U |
262 | #define MAX14577_REGULATOR_CURRENT_LIMIT_MAX 950000 | 288 | #define MAX14577_CHARGER_CURRENT_LIMIT_MAX 950000U |
263 | 289 | ||
264 | /* MAX77836 regulator current limits (as in CHGCTRL4 register), uA */ | 290 | /* MAX77836 charger current limits (as in CHGCTRL4 register), uA */ |
265 | #define MAX77836_REGULATOR_CURRENT_LIMIT_MIN 45000 | 291 | #define MAX77836_CHARGER_CURRENT_LIMIT_MIN 45000U |
266 | #define MAX77836_REGULATOR_CURRENT_LIMIT_HIGH_START 100000 | 292 | #define MAX77836_CHARGER_CURRENT_LIMIT_HIGH_START 100000U |
267 | #define MAX77836_REGULATOR_CURRENT_LIMIT_HIGH_STEP 25000 | 293 | #define MAX77836_CHARGER_CURRENT_LIMIT_HIGH_STEP 25000U |
268 | #define MAX77836_REGULATOR_CURRENT_LIMIT_MAX 475000 | 294 | #define MAX77836_CHARGER_CURRENT_LIMIT_MAX 475000U |
295 | |||
296 | /* | ||
297 | * MAX14577 charger End-Of-Charge current limits | ||
298 | * (as in CHGCTRL5 register), uA | ||
299 | */ | ||
300 | #define MAX14577_CHARGER_EOC_CURRENT_LIMIT_MIN 50000U | ||
301 | #define MAX14577_CHARGER_EOC_CURRENT_LIMIT_STEP 10000U | ||
302 | #define MAX14577_CHARGER_EOC_CURRENT_LIMIT_MAX 200000U | ||
303 | |||
304 | /* | ||
305 | * MAX14577/MAX77836 Battery Constant Voltage | ||
306 | * (as in CHGCTRL3 register), uV | ||
307 | */ | ||
308 | #define MAXIM_CHARGER_CONSTANT_VOLTAGE_MIN 4000000U | ||
309 | #define MAXIM_CHARGER_CONSTANT_VOLTAGE_STEP 20000U | ||
310 | #define MAXIM_CHARGER_CONSTANT_VOLTAGE_MAX 4350000U | ||
311 | |||
312 | /* Default value for fast charge timer, in hours */ | ||
313 | #define MAXIM_CHARGER_FAST_CHARGE_TIMER_DEFAULT 5 | ||
269 | 314 | ||
270 | /* MAX14577 regulator SFOUT LDO voltage, fixed, uV */ | 315 | /* MAX14577 regulator SFOUT LDO voltage, fixed, uV */ |
271 | #define MAX14577_REGULATOR_SAFEOUT_VOLTAGE 4900000 | 316 | #define MAX14577_REGULATOR_SAFEOUT_VOLTAGE 4900000 |
diff --git a/include/linux/mfd/max14577.h b/include/linux/mfd/max14577.h index c83fbed1c7b6..ccfaf952c31b 100644 --- a/include/linux/mfd/max14577.h +++ b/include/linux/mfd/max14577.h | |||
@@ -54,6 +54,13 @@ struct max14577_regulator_platform_data { | |||
54 | struct device_node *of_node; | 54 | struct device_node *of_node; |
55 | }; | 55 | }; |
56 | 56 | ||
57 | struct max14577_charger_platform_data { | ||
58 | u32 constant_uvolt; | ||
59 | u32 fast_charge_uamp; | ||
60 | u32 eoc_uamp; | ||
61 | u32 ovp_uvolt; | ||
62 | }; | ||
63 | |||
57 | /* | 64 | /* |
58 | * MAX14577 MFD platform data | 65 | * MAX14577 MFD platform data |
59 | */ | 66 | */ |
@@ -74,4 +81,27 @@ struct max14577_platform_data { | |||
74 | struct max14577_regulator_platform_data *regulators; | 81 | struct max14577_regulator_platform_data *regulators; |
75 | }; | 82 | }; |
76 | 83 | ||
84 | /* | ||
85 | * Valid limits of current for max14577 and max77836 chargers. | ||
86 | * They must correspond to MBCICHWRCL and MBCICHWRCH fields in CHGCTRL4 | ||
87 | * register for given chipset. | ||
88 | */ | ||
89 | struct maxim_charger_current { | ||
90 | /* Minimal current, set in CHGCTRL4/MBCICHWRCL, uA */ | ||
91 | unsigned int min; | ||
92 | /* | ||
93 | * Minimal current when high setting is active, | ||
94 | * set in CHGCTRL4/MBCICHWRCH, uA | ||
95 | */ | ||
96 | unsigned int high_start; | ||
97 | /* Value of one step in high setting, uA */ | ||
98 | unsigned int high_step; | ||
99 | /* Maximum current of high setting, uA */ | ||
100 | unsigned int max; | ||
101 | }; | ||
102 | |||
103 | extern const struct maxim_charger_current maxim_charger_currents[]; | ||
104 | extern int maxim_charger_calc_reg_current(const struct maxim_charger_current *limits, | ||
105 | unsigned int min_ua, unsigned int max_ua, u8 *dst); | ||
106 | |||
77 | #endif /* __MAX14577_H__ */ | 107 | #endif /* __MAX14577_H__ */ |