diff options
author | Rajagopala V <rajagopala.v@stericsson.com> | 2011-12-20 09:45:56 +0530 |
---|---|---|
committer | Philippe Langlais <philippe.langlais@stericsson.com> | 2012-05-22 11:01:18 +0200 |
commit | 3a3a2a4eb80d4ed20313afd53b2bd50f499af253 (patch) | |
tree | 3f95702409f8883ce737dde60064cf2faf0f042b | |
parent | f773f909f17144a20f4a7c1d23e7615ebca62062 (diff) |
power: ab5500-btemp: manual mode monitoring as platform data
Move battery temperature manual mode monitoring selection
to platform data.
ST-Ericsson Linux next: NA
ST-Ericsson ID: 372448
ST-Ericsson FOSS-OUT ID: Trivial
Change-Id: I9224e5cc8bed77be6a10344d32e480a7717a1d22
Signed-off-by: Rajagopala V <rajagopala.v@stericsson.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/43248
Reviewed-by: QABUILD
Reviewed-by: Arun MURTHY <arun.murthy@stericsson.com>
Reviewed-by: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com>
-rw-r--r-- | arch/arm/mach-ux500/board-u5500-bm.c | 1 | ||||
-rw-r--r-- | drivers/power/ab5500_btemp.c | 68 |
2 files changed, 32 insertions, 37 deletions
diff --git a/arch/arm/mach-ux500/board-u5500-bm.c b/arch/arm/mach-ux500/board-u5500-bm.c index f7ca803da42..96b7cc656eb 100644 --- a/arch/arm/mach-ux500/board-u5500-bm.c +++ b/arch/arm/mach-ux500/board-u5500-bm.c @@ -473,6 +473,7 @@ struct abx500_bm_data ab5500_bm_data = { #endif .chg_unknown_bat = false, .enable_overshoot = false, + .auto_trig = false, .fg_res = 200, .cap_levels = &cap_levels, .bat_type = bat_type, diff --git a/drivers/power/ab5500_btemp.c b/drivers/power/ab5500_btemp.c index 08d5ae89dbe..3ce07f149e2 100644 --- a/drivers/power/ab5500_btemp.c +++ b/drivers/power/ab5500_btemp.c @@ -38,9 +38,6 @@ #define RESET 0x00 #define ADOUT_10K_PULL_UP 0x07 -/* Enable battery temp monitoring manual mode */ -#define BTEMP_MANUAL_MONITORING - #define to_ab5500_btemp_device_info(x) container_of((x), \ struct ab5500_btemp, btemp_psy); @@ -335,7 +332,7 @@ static int ab5500_btemp_measure_temp(struct ab5500_btemp *di) id = di->bat->batt_id; if (di->bat->adc_therm == ABx500_ADC_THERM_BATCTRL && - id != BATTERY_UNKNOWN) { + id != BATTERY_UNKNOWN && !di->bat->auto_trig) { rbat = ab5500_btemp_get_batctrl_res(di); if (rbat < 0) { dev_err(di->dev, "%s get batctrl res failed\n", @@ -456,25 +453,26 @@ static void ab5500_btemp_periodic_work(struct work_struct *work) power_supply_changed(&di->btemp_psy); } di->bat->temp_now = di->bat_temp; -#if defined(BTEMP_MANUAL_MONITORING) - /* Check for temperature limits */ - ab5500_btemp_bat_temp_trig(0); - /* Schedule a new measurement */ - if (di->events.usb_conn) + if (!di->bat->auto_trig) { + /* Check for temperature limits */ + ab5500_btemp_bat_temp_trig(0); + + /* Schedule a new measurement */ + if (di->events.usb_conn) + queue_delayed_work(di->btemp_wq, + &di->btemp_periodic_work, + round_jiffies(di->bat->interval_charging * HZ)); + else + queue_delayed_work(di->btemp_wq, + &di->btemp_periodic_work, + round_jiffies(di->bat->interval_not_charging * HZ)); + } else { + /* Schedule a new measurement */ queue_delayed_work(di->btemp_wq, &di->btemp_periodic_work, round_jiffies(di->bat->interval_charging * HZ)); - else - queue_delayed_work(di->btemp_wq, - &di->btemp_periodic_work, - round_jiffies(di->bat->interval_not_charging * HZ)); -#else - /* Schedule a new measurement */ - queue_delayed_work(di->btemp_wq, - &di->btemp_periodic_work, - round_jiffies(di->bat->interval_charging * HZ)); -#endif + } } /** @@ -623,18 +621,15 @@ static int ab5500_btemp_get_ext_psy_data(struct device *dev, void *data) /* USB disconnected */ if (!ret.intval && di->events.usb_conn) { di->events.usb_conn = false; -#if !defined(BTEMP_MANUAL_MONITORING) + if (di->bat->auto_trig) ab5500_btemp_periodic(di, false); -#endif } /* USB connected */ else if (ret.intval && !di->events.usb_conn) { di->events.usb_conn = true; - -#if !defined(BTEMP_MANUAL_MONITORING) + if (di->bat->auto_trig) ab5500_btemp_periodic(di, true); -#endif } break; default: @@ -686,7 +681,6 @@ static int ab5500_btemp_bat_temp_trig(int mux) return 0;; } -#if !defined(BTEMP_MANUAL_MONITORING) static int ab5500_btemp_auto_temp(struct ab5500_btemp *di) { struct adc_auto_input *auto_ip; @@ -710,7 +704,6 @@ static int ab5500_btemp_auto_temp(struct ab5500_btemp *di) "failed to set auto trigger for battery temp\n"); return ret; } -#endif #if defined(CONFIG_PM) static int ab5500_btemp_resume(struct platform_device *pdev) @@ -858,18 +851,19 @@ static int __devinit ab5500_btemp_probe(struct platform_device *pdev) dev_dbg(di->dev, "Requested %s IRQ %d: %d\n", ab5500_btemp_irq[i].name, irq, ret); } -#if defined(BTEMP_MANUAL_MONITORING) - /* Schedule monitoring work only if battery type is known */ - if (di->bat->batt_id != BATTERY_UNKNOWN) - queue_delayed_work(di->btemp_wq, &di->btemp_periodic_work, 0); -#else - ret = ab5500_btemp_auto_temp(di); - if (ret) { - dev_err(di->dev, - "failed to register auto trigger for battery temp\n"); - goto free_irq; + + if (!di->bat->auto_trig) { + /* Schedule monitoring work only if battery type is known */ + if (di->bat->batt_id != BATTERY_UNKNOWN) + queue_delayed_work(di->btemp_wq, &di->btemp_periodic_work, 0); + } else { + ret = ab5500_btemp_auto_temp(di); + if (ret) { + dev_err(di->dev, + "failed to register auto trigger for battery temp\n"); + goto free_irq; + } } -#endif platform_set_drvdata(pdev, di); list_add_tail(&di->node, &ab5500_btemp_list); |