aboutsummaryrefslogtreecommitdiff
path: root/drivers/power
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 /drivers/power
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>
Diffstat (limited to 'drivers/power')
-rw-r--r--drivers/power/ab8500_charger.c17
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;