aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohan Palsson <johan.palsson@stericsson.com>2011-02-24 08:22:34 +0100
committerSrinidhi KASAGAR <srinidhi.kasagar@stericsson.com>2011-02-24 10:16:37 +0100
commit073d2da1138dd71b325cefe0580d06de028d692a (patch)
tree10bd83aebfe16e72467b5298b5f5878d52d9801b
parentc952e9749af977fd5e756a3bb62e1912d54bac01 (diff)
power: ab8500_bm: Support for disabling VBAT overshoot control
In AB8500 there is a feature called VBAT overshoot control. This will limit the charger current in the CV phase to avoid overshoot on the VBAT line. This patch will allow you to disable this feature and use real CV charging. Overshoot will be disabled with this patch to give the best charging performance ST-Ericsson Linux next: Not tested ST-Ericsson ID: WP 325782 ST-Ericsson FOSS-OUT ID: Trivial Change-Id: I9c14a5d9df7f8aa3bf8414c506a2fa0104c5ea61 Signed-off-by: Johan Palsson <johan.palsson@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/16847 Tested-by: Rishi KHARE <rishi.khare@stericsson.com> Reviewed-by: QATOOLS Reviewed-by: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com>
-rw-r--r--arch/arm/mach-ux500/board-mop500-bm.c1
-rw-r--r--drivers/power/ab8500_charger.c17
-rw-r--r--include/linux/mfd/ab8500/ab8500-bm.h2
3 files changed, 18 insertions, 2 deletions
diff --git a/arch/arm/mach-ux500/board-mop500-bm.c b/arch/arm/mach-ux500/board-mop500-bm.c
index 9cadd857d62..8ec34cee88c 100644
--- a/arch/arm/mach-ux500/board-mop500-bm.c
+++ b/arch/arm/mach-ux500/board-mop500-bm.c
@@ -389,6 +389,7 @@ struct ab8500_bm_data ab8500_bm_data = {
.adc_therm = ADC_THERM_BATTEMP,
#endif
.chg_unknown_bat = false,
+ .enable_overshoot = false,
.fg_res = 10,
.cap_levels = &cap_levels,
.bat_type = bat_type,
diff --git a/drivers/power/ab8500_charger.c b/drivers/power/ab8500_charger.c
index 87c554e2c15..0496fe18fe9 100644
--- a/drivers/power/ab8500_charger.c
+++ b/drivers/power/ab8500_charger.c
@@ -36,7 +36,9 @@
#define MAIN_WDOG_DIS 0x00
#define CHARG_WD_KICK 0x01
#define MAIN_CH_ENA 0x01
+#define MAIN_CH_NO_OVERSHOOT_ENA_N 0x02
#define USB_CH_ENA 0x01
+#define USB_CHG_NO_OVERSHOOT_ENA_N 0x02
#define MAIN_CH_DET 0x01
#define MAIN_CH_CV_ON 0x04
#define USB_CH_CV_ON 0x08
@@ -814,6 +816,7 @@ static int ab8500_charger_ac_en(struct ux500_charger *charger,
int ret;
int volt_index;
int curr_index;
+ u8 overshoot = 0;
struct ab8500_charger *di = to_ab8500_charger_ac_device_info(charger);
@@ -858,9 +861,14 @@ static int ab8500_charger_ac_en(struct ux500_charger *charger,
dev_err(di->dev, "%s write failed\n", __func__);
return ret;
}
+
+ /* Check if VBAT overshoot control should be enabled */
+ if (!di->bat->enable_overshoot)
+ overshoot = MAIN_CH_NO_OVERSHOOT_ENA_N;
+
/* Enable Main Charger */
ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
- AB8500_MCH_CTRL1, MAIN_CH_ENA);
+ AB8500_MCH_CTRL1, MAIN_CH_ENA | overshoot);
if (ret) {
dev_err(di->dev, "%s write failed\n", __func__);
return ret;
@@ -1008,6 +1016,7 @@ static int ab8500_charger_usb_en(struct ux500_charger *charger,
int ret;
int volt_index;
int curr_index;
+ u8 overshoot = 0;
struct ab8500_charger *di = to_ab8500_charger_usb_device_info(charger);
@@ -1053,9 +1062,13 @@ static int ab8500_charger_usb_en(struct ux500_charger *charger,
dev_err(di->dev, "%s write failed\n", __func__);
return ret;
}
+ /* Check if VBAT overshoot control should be enabled */
+ if (!di->bat->enable_overshoot)
+ overshoot = USB_CHG_NO_OVERSHOOT_ENA_N;
+
/* Enable USB Charger */
ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER,
- AB8500_USBCH_CTRL1_REG, USB_CH_ENA);
+ AB8500_USBCH_CTRL1_REG, USB_CH_ENA | overshoot);
if (ret) {
dev_err(di->dev, "%s write failed\n", __func__);
return ret;
diff --git a/include/linux/mfd/ab8500/ab8500-bm.h b/include/linux/mfd/ab8500/ab8500-bm.h
index c3a8b291dd3..8ef1a37dad8 100644
--- a/include/linux/mfd/ab8500/ab8500-bm.h
+++ b/include/linux/mfd/ab8500/ab8500-bm.h
@@ -380,6 +380,7 @@ struct ab8500_bm_charger_parameters {
* @bkup_bat_i current which we charge the backup battery with
* @adc_therm placement of thermistor, batctrl or battemp adc
* @chg_unknown_bat flag to enable charging of unknown batteries
+ * @enable_overshoot flag to enable VBAT overshoot control
* @fg_res resistance of FG resistor in mOhm
* @n_btypes number of elements in array bat_type
* @batt_id index of the identified battery in array bat_type
@@ -398,6 +399,7 @@ struct ab8500_bm_data {
int bkup_bat_v;
int bkup_bat_i;
bool chg_unknown_bat;
+ bool enable_overshoot;
enum adc_therm adc_therm;
int fg_res;
int n_btypes;