aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/power/ab8500_btemp.c
diff options
context:
space:
mode:
authorLee Jones <lee.jones@linaro.org>2012-08-29 08:36:51 -0400
committerLee Jones <lee.jones@linaro.org>2013-03-06 23:35:48 -0500
commit861a30da53e2c5b9823b5390c1757baaf8f6e356 (patch)
treef703602dfcfabac6f1855633aec306cf271ec7d5 /drivers/power/ab8500_btemp.c
parent2c4c40ac0052eaf9b14009635ab475362e88c6e0 (diff)
ab8500-bm: Add support for the new ab8540 platform
Provide AB8540 platform specific information required to run the Battery Management subsystem on AB8540 based devices. For this to happen we see the introduction of separate platform specific data structures and a means in which to process them. Signed-off-by: Lee Jones <lee.jones@linaro.org>
Diffstat (limited to 'drivers/power/ab8500_btemp.c')
-rw-r--r--drivers/power/ab8500_btemp.c42
1 files changed, 35 insertions, 7 deletions
diff --git a/drivers/power/ab8500_btemp.c b/drivers/power/ab8500_btemp.c
index 91ad3edf6197..7336dcf45f7e 100644
--- a/drivers/power/ab8500_btemp.c
+++ b/drivers/power/ab8500_btemp.c
@@ -42,6 +42,9 @@
42#define BTEMP_BATCTRL_CURR_SRC_16UA 16 42#define BTEMP_BATCTRL_CURR_SRC_16UA 16
43#define BTEMP_BATCTRL_CURR_SRC_18UA 18 43#define BTEMP_BATCTRL_CURR_SRC_18UA 18
44 44
45#define BTEMP_BATCTRL_CURR_SRC_60UA 60
46#define BTEMP_BATCTRL_CURR_SRC_120UA 120
47
45#define to_ab8500_btemp_device_info(x) container_of((x), \ 48#define to_ab8500_btemp_device_info(x) container_of((x), \
46 struct ab8500_btemp, btemp_psy); 49 struct ab8500_btemp, btemp_psy);
47 50
@@ -216,7 +219,12 @@ static int ab8500_btemp_curr_source_enable(struct ab8500_btemp *di,
216 /* Only do this for batteries with internal NTC */ 219 /* Only do this for batteries with internal NTC */
217 if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL && enable) { 220 if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL && enable) {
218 221
219 if (is_ab9540(di->parent) || is_ab8505(di->parent)) { 222 if (is_ab8540(di->parent)) {
223 if (di->curr_source == BTEMP_BATCTRL_CURR_SRC_60UA)
224 curr = BAT_CTRL_60U_ENA;
225 else
226 curr = BAT_CTRL_120U_ENA;
227 } else if (is_ab9540(di->parent) || is_ab8505(di->parent)) {
220 if (di->curr_source == BTEMP_BATCTRL_CURR_SRC_16UA) 228 if (di->curr_source == BTEMP_BATCTRL_CURR_SRC_16UA)
221 curr = BAT_CTRL_16U_ENA; 229 curr = BAT_CTRL_16U_ENA;
222 else 230 else
@@ -257,7 +265,14 @@ static int ab8500_btemp_curr_source_enable(struct ab8500_btemp *di,
257 } else if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL && !enable) { 265 } else if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL && !enable) {
258 dev_dbg(di->dev, "Disable BATCTRL curr source\n"); 266 dev_dbg(di->dev, "Disable BATCTRL curr source\n");
259 267
260 if (is_ab9540(di->parent) || is_ab8505(di->parent)) { 268 if (is_ab8540(di->parent)) {
269 /* Write 0 to the curr bits */
270 ret = abx500_mask_and_set_register_interruptible(
271 di->dev,
272 AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
273 BAT_CTRL_60U_ENA | BAT_CTRL_120U_ENA,
274 ~(BAT_CTRL_60U_ENA | BAT_CTRL_120U_ENA));
275 } else if (is_ab9540(di->parent) || is_ab8505(di->parent)) {
261 /* Write 0 to the curr bits */ 276 /* Write 0 to the curr bits */
262 ret = abx500_mask_and_set_register_interruptible( 277 ret = abx500_mask_and_set_register_interruptible(
263 di->dev, 278 di->dev,
@@ -314,7 +329,13 @@ static int ab8500_btemp_curr_source_enable(struct ab8500_btemp *di,
314 * if we got an error above 329 * if we got an error above
315 */ 330 */
316disable_curr_source: 331disable_curr_source:
317 if (is_ab9540(di->parent) || is_ab8505(di->parent)) { 332 if (is_ab8540(di->parent)) {
333 /* Write 0 to the curr bits */
334 ret = abx500_mask_and_set_register_interruptible(di->dev,
335 AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
336 BAT_CTRL_60U_ENA | BAT_CTRL_120U_ENA,
337 ~(BAT_CTRL_60U_ENA | BAT_CTRL_120U_ENA));
338 } else if (is_ab9540(di->parent) || is_ab8505(di->parent)) {
318 /* Write 0 to the curr bits */ 339 /* Write 0 to the curr bits */
319 ret = abx500_mask_and_set_register_interruptible(di->dev, 340 ret = abx500_mask_and_set_register_interruptible(di->dev,
320 AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE, 341 AB8500_CHARGER, AB8500_BAT_CTRL_CURRENT_SOURCE,
@@ -541,7 +562,9 @@ static int ab8500_btemp_id(struct ab8500_btemp *di)
541{ 562{
542 int res; 563 int res;
543 u8 i; 564 u8 i;
544 if (is_ab9540(di->parent) || is_ab8505(di->parent)) 565 if (is_ab8540(di->parent))
566 di->curr_source = BTEMP_BATCTRL_CURR_SRC_60UA;
567 else if (is_ab9540(di->parent) || is_ab8505(di->parent))
545 di->curr_source = BTEMP_BATCTRL_CURR_SRC_16UA; 568 di->curr_source = BTEMP_BATCTRL_CURR_SRC_16UA;
546 else 569 else
547 di->curr_source = BTEMP_BATCTRL_CURR_SRC_7UA; 570 di->curr_source = BTEMP_BATCTRL_CURR_SRC_7UA;
@@ -582,9 +605,14 @@ static int ab8500_btemp_id(struct ab8500_btemp *di)
582 * detected type is Type 1, else we use the 7uA source 605 * detected type is Type 1, else we use the 7uA source
583 */ 606 */
584 if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL && 607 if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL &&
585 di->bm->batt_id == 1) { 608 di->bm->batt_id == 1) {
586 if (is_ab9540(di->parent) || is_ab8505(di->parent)) { 609 if (is_ab8540(di->parent)) {
587 dev_dbg(di->dev, "Set BATCTRL current source to 16uA\n"); 610 dev_dbg(di->dev,
611 "Set BATCTRL current source to 60uA\n");
612 di->curr_source = BTEMP_BATCTRL_CURR_SRC_60UA;
613 } else if (is_ab9540(di->parent) || is_ab8505(di->parent)) {
614 dev_dbg(di->dev,
615 "Set BATCTRL current source to 16uA\n");
588 di->curr_source = BTEMP_BATCTRL_CURR_SRC_16UA; 616 di->curr_source = BTEMP_BATCTRL_CURR_SRC_16UA;
589 } else { 617 } else {
590 dev_dbg(di->dev, "Set BATCTRL current source to 20uA\n"); 618 dev_dbg(di->dev, "Set BATCTRL current source to 20uA\n");