diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-01-21 14:36:20 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-01-21 14:36:20 -0500 |
commit | 03d11a0e458d7008192585124e4c3313c2829046 (patch) | |
tree | 8e9f5141e53d2d4bf435fbd56f8ae96790304b7f /include | |
parent | ac26663572db5b64522b92f3941a58678a832a36 (diff) | |
parent | 573189354b7c97cd2256b87cf083ee435584594e (diff) |
Merge tag 'for-v3.14' of git://git.infradead.org/battery-2.6
Pull battery updates from Dmitry Eremin-Solenikov:
"I'm picking up power supply maintainership from Anton Vorontov. Could
you please pull battery-2.6 git tree changes prepared for the v3.14
release.
Highlights:
- Power supply notifier
- Several drivers gained DT support
- Added Maxim 14577 driver
- Change of maintainer"
* tag 'for-v3.14' of git://git.infradead.org/battery-2.6:
MAINTAINERS: Pick up power supply maintainership
max17042_battery: Add IRQF_ONESHOT flag to use default irq handler
gpio-charger: Support wakeup events
power_supply: Add charger support for Maxim 14577
dt: Binding documentation for isp1704 charger
isp1704_charger: Add DT support
charger-manager: of_cm_parse_desc() should be static
bq2415x_charger: Add DT support
power_supply: Add power_supply_get_by_phandle
bq2415x_charger: Use power_supply notifier for automode
power: reset: Add as3722 power-off driver
mfd: AS3722: Add dt node properties for system power controller
charger-manager: Support deivce tree in charger manager driver
charger-manager: Modify the way of checking battery's temperature
power_supply: Add power_supply notifier
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/power/bq2415x_charger.h | 48 | ||||
-rw-r--r-- | include/linux/power/charger-manager.h | 34 | ||||
-rw-r--r-- | include/linux/power/isp1704_charger.h | 1 | ||||
-rw-r--r-- | include/linux/power_supply.h | 16 |
4 files changed, 43 insertions, 56 deletions
diff --git a/include/linux/power/bq2415x_charger.h b/include/linux/power/bq2415x_charger.h index 8dcc0f46fc0a..50762af8b834 100644 --- a/include/linux/power/bq2415x_charger.h +++ b/include/linux/power/bq2415x_charger.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * bq2415x charger driver | 2 | * bq2415x charger driver |
3 | * | 3 | * |
4 | * Copyright (C) 2011-2012 Pali Rohár <pali.rohar@gmail.com> | 4 | * Copyright (C) 2011-2013 Pali Rohár <pali.rohar@gmail.com> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
@@ -31,46 +31,9 @@ | |||
31 | * termination current. It it is less or equal to zero, configuring charge | 31 | * termination current. It it is less or equal to zero, configuring charge |
32 | * and termination current will not be possible. | 32 | * and termination current will not be possible. |
33 | * | 33 | * |
34 | * Function set_mode_hook is needed for automode (setting correct current | 34 | * For automode support is needed to provide name of power supply device |
35 | * limit when charger is connected/disconnected or setting boost mode). | 35 | * in value notify_device. Device driver must immediately report property |
36 | * When is NULL, automode function is disabled. When is not NULL, it must | 36 | * POWER_SUPPLY_PROP_CURRENT_MAX when current changed. |
37 | * have this prototype: | ||
38 | * | ||
39 | * int (*set_mode_hook)( | ||
40 | * void (*hook)(enum bq2415x_mode mode, void *data), | ||
41 | * void *data) | ||
42 | * | ||
43 | * hook is hook function (see below) and data is pointer to driver private | ||
44 | * data | ||
45 | * | ||
46 | * bq2415x driver will call it as: | ||
47 | * | ||
48 | * platform_data->set_mode_hook(bq2415x_hook_function, bq2415x_device); | ||
49 | * | ||
50 | * Board/platform function set_mode_hook return non zero value when hook | ||
51 | * function was successful registered. Platform code should call that hook | ||
52 | * function (which get from pointer, with data) every time when charger | ||
53 | * was connected/disconnected or require to enable boost mode. bq2415x | ||
54 | * driver then will set correct current limit, enable/disable charger or | ||
55 | * boost mode. | ||
56 | * | ||
57 | * Hook function has this prototype: | ||
58 | * | ||
59 | * void hook(enum bq2415x_mode mode, void *data); | ||
60 | * | ||
61 | * mode is bq2415x mode (charger or boost) | ||
62 | * data is pointer to driver private data (which get from | ||
63 | * set_charger_type_hook) | ||
64 | * | ||
65 | * When bq driver is being unloaded, it call function: | ||
66 | * | ||
67 | * platform_data->set_mode_hook(NULL, NULL); | ||
68 | * | ||
69 | * (hook function and driver private data are NULL) | ||
70 | * | ||
71 | * After that board/platform code must not call driver hook function! It | ||
72 | * is possible that pointer to hook function will not be valid and calling | ||
73 | * will cause undefined result. | ||
74 | */ | 37 | */ |
75 | 38 | ||
76 | /* Supported modes with maximal current limit */ | 39 | /* Supported modes with maximal current limit */ |
@@ -89,8 +52,7 @@ struct bq2415x_platform_data { | |||
89 | int charge_current; /* mA */ | 52 | int charge_current; /* mA */ |
90 | int termination_current; /* mA */ | 53 | int termination_current; /* mA */ |
91 | int resistor_sense; /* m ohm */ | 54 | int resistor_sense; /* m ohm */ |
92 | int (*set_mode_hook)(void (*hook)(enum bq2415x_mode mode, void *data), | 55 | const char *notify_device; /* name */ |
93 | void *data); | ||
94 | }; | 56 | }; |
95 | 57 | ||
96 | #endif | 58 | #endif |
diff --git a/include/linux/power/charger-manager.h b/include/linux/power/charger-manager.h index 0e86840eb603..07e7945a1ff2 100644 --- a/include/linux/power/charger-manager.h +++ b/include/linux/power/charger-manager.h | |||
@@ -37,6 +37,8 @@ enum cm_event_types { | |||
37 | CM_EVENT_BATT_FULL, | 37 | CM_EVENT_BATT_FULL, |
38 | CM_EVENT_BATT_IN, | 38 | CM_EVENT_BATT_IN, |
39 | CM_EVENT_BATT_OUT, | 39 | CM_EVENT_BATT_OUT, |
40 | CM_EVENT_BATT_OVERHEAT, | ||
41 | CM_EVENT_BATT_COLD, | ||
40 | CM_EVENT_EXT_PWR_IN_OUT, | 42 | CM_EVENT_EXT_PWR_IN_OUT, |
41 | CM_EVENT_CHG_START_STOP, | 43 | CM_EVENT_CHG_START_STOP, |
42 | CM_EVENT_OTHERS, | 44 | CM_EVENT_OTHERS, |
@@ -173,11 +175,10 @@ struct charger_regulator { | |||
173 | * @num_charger_regulator: the number of entries in charger_regulators | 175 | * @num_charger_regulator: the number of entries in charger_regulators |
174 | * @charger_regulators: array of charger regulators | 176 | * @charger_regulators: array of charger regulators |
175 | * @psy_fuel_gauge: the name of power-supply for fuel gauge | 177 | * @psy_fuel_gauge: the name of power-supply for fuel gauge |
176 | * @temperature_out_of_range: | 178 | * @thermal_zone : the name of thermal zone for battery |
177 | * Determine whether the status is overheat or cold or normal. | 179 | * @temp_min : Minimum battery temperature for charging. |
178 | * return_value > 0: overheat | 180 | * @temp_max : Maximum battery temperature for charging. |
179 | * return_value == 0: normal | 181 | * @temp_diff : Temperature diffential to restart charging. |
180 | * return_value < 0: cold | ||
181 | * @measure_battery_temp: | 182 | * @measure_battery_temp: |
182 | * true: measure battery temperature | 183 | * true: measure battery temperature |
183 | * false: measure ambient temperature | 184 | * false: measure ambient temperature |
@@ -190,7 +191,7 @@ struct charger_regulator { | |||
190 | * max_duration_ms', cm start charging. | 191 | * max_duration_ms', cm start charging. |
191 | */ | 192 | */ |
192 | struct charger_desc { | 193 | struct charger_desc { |
193 | char *psy_name; | 194 | const char *psy_name; |
194 | 195 | ||
195 | enum polling_modes polling_mode; | 196 | enum polling_modes polling_mode; |
196 | unsigned int polling_interval_ms; | 197 | unsigned int polling_interval_ms; |
@@ -203,18 +204,23 @@ struct charger_desc { | |||
203 | 204 | ||
204 | enum data_source battery_present; | 205 | enum data_source battery_present; |
205 | 206 | ||
206 | char **psy_charger_stat; | 207 | const char **psy_charger_stat; |
207 | 208 | ||
208 | int num_charger_regulators; | 209 | int num_charger_regulators; |
209 | struct charger_regulator *charger_regulators; | 210 | struct charger_regulator *charger_regulators; |
210 | 211 | ||
211 | char *psy_fuel_gauge; | 212 | const char *psy_fuel_gauge; |
213 | |||
214 | const char *thermal_zone; | ||
215 | |||
216 | int temp_min; | ||
217 | int temp_max; | ||
218 | int temp_diff; | ||
212 | 219 | ||
213 | int (*temperature_out_of_range)(int *mC); | ||
214 | bool measure_battery_temp; | 220 | bool measure_battery_temp; |
215 | 221 | ||
216 | u64 charging_max_duration_ms; | 222 | u32 charging_max_duration_ms; |
217 | u64 discharging_max_duration_ms; | 223 | u32 discharging_max_duration_ms; |
218 | }; | 224 | }; |
219 | 225 | ||
220 | #define PSY_NAME_MAX 30 | 226 | #define PSY_NAME_MAX 30 |
@@ -226,13 +232,13 @@ struct charger_desc { | |||
226 | * @desc: instance of charger_desc | 232 | * @desc: instance of charger_desc |
227 | * @fuel_gauge: power_supply for fuel gauge | 233 | * @fuel_gauge: power_supply for fuel gauge |
228 | * @charger_stat: array of power_supply for chargers | 234 | * @charger_stat: array of power_supply for chargers |
235 | * @tzd_batt : thermal zone device for battery | ||
229 | * @charger_enabled: the state of charger | 236 | * @charger_enabled: the state of charger |
230 | * @fullbatt_vchk_jiffies_at: | 237 | * @fullbatt_vchk_jiffies_at: |
231 | * jiffies at the time full battery check will occur. | 238 | * jiffies at the time full battery check will occur. |
232 | * @fullbatt_vchk_work: work queue for full battery check | 239 | * @fullbatt_vchk_work: work queue for full battery check |
233 | * @emergency_stop: | 240 | * @emergency_stop: |
234 | * When setting true, stop charging | 241 | * When setting true, stop charging |
235 | * @last_temp_mC: the measured temperature in milli-Celsius | ||
236 | * @psy_name_buf: the name of power-supply-class for charger manager | 242 | * @psy_name_buf: the name of power-supply-class for charger manager |
237 | * @charger_psy: power_supply for charger manager | 243 | * @charger_psy: power_supply for charger manager |
238 | * @status_save_ext_pwr_inserted: | 244 | * @status_save_ext_pwr_inserted: |
@@ -250,13 +256,15 @@ struct charger_manager { | |||
250 | struct power_supply *fuel_gauge; | 256 | struct power_supply *fuel_gauge; |
251 | struct power_supply **charger_stat; | 257 | struct power_supply **charger_stat; |
252 | 258 | ||
259 | #ifdef CONFIG_THERMAL | ||
260 | struct thermal_zone_device *tzd_batt; | ||
261 | #endif | ||
253 | bool charger_enabled; | 262 | bool charger_enabled; |
254 | 263 | ||
255 | unsigned long fullbatt_vchk_jiffies_at; | 264 | unsigned long fullbatt_vchk_jiffies_at; |
256 | struct delayed_work fullbatt_vchk_work; | 265 | struct delayed_work fullbatt_vchk_work; |
257 | 266 | ||
258 | int emergency_stop; | 267 | int emergency_stop; |
259 | int last_temp_mC; | ||
260 | 268 | ||
261 | char psy_name_buf[PSY_NAME_MAX + 1]; | 269 | char psy_name_buf[PSY_NAME_MAX + 1]; |
262 | struct power_supply charger_psy; | 270 | struct power_supply charger_psy; |
diff --git a/include/linux/power/isp1704_charger.h b/include/linux/power/isp1704_charger.h index 68096a6aa2d7..0105d9e7af85 100644 --- a/include/linux/power/isp1704_charger.h +++ b/include/linux/power/isp1704_charger.h | |||
@@ -24,6 +24,7 @@ | |||
24 | 24 | ||
25 | struct isp1704_charger_data { | 25 | struct isp1704_charger_data { |
26 | void (*set_power)(bool on); | 26 | void (*set_power)(bool on); |
27 | int enable_gpio; | ||
27 | }; | 28 | }; |
28 | 29 | ||
29 | #endif | 30 | #endif |
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h index 5c2600630dc9..c9dc4e09854c 100644 --- a/include/linux/power_supply.h +++ b/include/linux/power_supply.h | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/workqueue.h> | 16 | #include <linux/workqueue.h> |
17 | #include <linux/leds.h> | 17 | #include <linux/leds.h> |
18 | #include <linux/spinlock.h> | 18 | #include <linux/spinlock.h> |
19 | #include <linux/notifier.h> | ||
19 | 20 | ||
20 | struct device; | 21 | struct device; |
21 | 22 | ||
@@ -158,6 +159,10 @@ enum power_supply_type { | |||
158 | POWER_SUPPLY_TYPE_USB_ACA, /* Accessory Charger Adapters */ | 159 | POWER_SUPPLY_TYPE_USB_ACA, /* Accessory Charger Adapters */ |
159 | }; | 160 | }; |
160 | 161 | ||
162 | enum power_supply_notifier_events { | ||
163 | PSY_EVENT_PROP_CHANGED, | ||
164 | }; | ||
165 | |||
161 | union power_supply_propval { | 166 | union power_supply_propval { |
162 | int intval; | 167 | int intval; |
163 | const char *strval; | 168 | const char *strval; |
@@ -235,7 +240,18 @@ struct power_supply_info { | |||
235 | int use_for_apm; | 240 | int use_for_apm; |
236 | }; | 241 | }; |
237 | 242 | ||
243 | extern struct atomic_notifier_head power_supply_notifier; | ||
244 | extern int power_supply_reg_notifier(struct notifier_block *nb); | ||
245 | extern void power_supply_unreg_notifier(struct notifier_block *nb); | ||
238 | extern struct power_supply *power_supply_get_by_name(const char *name); | 246 | extern struct power_supply *power_supply_get_by_name(const char *name); |
247 | #ifdef CONFIG_OF | ||
248 | extern struct power_supply *power_supply_get_by_phandle(struct device_node *np, | ||
249 | const char *property); | ||
250 | #else /* !CONFIG_OF */ | ||
251 | static inline struct power_supply * | ||
252 | power_supply_get_by_phandle(struct device_node *np, const char *property) | ||
253 | { return NULL; } | ||
254 | #endif /* CONFIG_OF */ | ||
239 | extern void power_supply_changed(struct power_supply *psy); | 255 | extern void power_supply_changed(struct power_supply *psy); |
240 | extern int power_supply_am_i_supplied(struct power_supply *psy); | 256 | extern int power_supply_am_i_supplied(struct power_supply *psy); |
241 | extern int power_supply_set_battery_charged(struct power_supply *psy); | 257 | extern int power_supply_set_battery_charged(struct power_supply *psy); |