diff options
author | Johan Palsson <johan.palsson@stericsson.com> | 2011-02-24 08:22:34 +0100 |
---|---|---|
committer | Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com> | 2011-02-24 10:16:37 +0100 |
commit | 073d2da1138dd71b325cefe0580d06de028d692a (patch) | |
tree | 10bd83aebfe16e72467b5298b5f5878d52d9801b /drivers/power | |
parent | c952e9749af977fd5e756a3bb62e1912d54bac01 (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>
Diffstat (limited to 'drivers/power')
-rw-r--r-- | drivers/power/ab8500_charger.c | 17 |
1 files changed, 15 insertions, 2 deletions
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; |