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/linux | |
| 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/linux')
| -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); |
