|
@@ -2836,6 +2836,7 @@ static int ab8500_charger_usb_get_property(struct power_supply *psy,
|
|
|
static int ab8500_charger_init_hw_registers(struct ab8500_charger *di)
|
|
|
{
|
|
|
int ret = 0;
|
|
|
+ u8 bup_vch_range = 0, vbup33_vrtcn = 0;
|
|
|
|
|
|
/* Setup maximum charger current and voltage for ABB cut2.0 */
|
|
|
if (!is_ab8500_1p1_or_earlier(di->parent)) {
|
|
@@ -2945,15 +2946,29 @@ static int ab8500_charger_init_hw_registers(struct ab8500_charger *di)
|
|
|
}
|
|
|
|
|
|
/* Backup battery voltage and current */
|
|
|
+ if (di->bm->bkup_bat_v > BUP_VCH_SEL_3P1V)
|
|
|
+ bup_vch_range = BUP_VCH_RANGE;
|
|
|
+ if (di->bm->bkup_bat_v == BUP_VCH_SEL_3P3V)
|
|
|
+ vbup33_vrtcn = VBUP33_VRTCN;
|
|
|
+
|
|
|
ret = abx500_set_register_interruptible(di->dev,
|
|
|
AB8500_RTC,
|
|
|
AB8500_RTC_BACKUP_CHG_REG,
|
|
|
- di->bm->bkup_bat_v |
|
|
|
- di->bm->bkup_bat_i);
|
|
|
+ (di->bm->bkup_bat_v & 0x3) | di->bm->bkup_bat_i);
|
|
|
if (ret) {
|
|
|
dev_err(di->dev, "failed to setup backup battery charging\n");
|
|
|
goto out;
|
|
|
}
|
|
|
+ if (is_ab8540(di->parent)) {
|
|
|
+ ret = abx500_set_register_interruptible(di->dev,
|
|
|
+ AB8500_RTC,
|
|
|
+ AB8500_RTC_CTRL1_REG,
|
|
|
+ bup_vch_range | vbup33_vrtcn);
|
|
|
+ if (ret) {
|
|
|
+ dev_err(di->dev, "failed to setup backup battery charging\n");
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
/* Enable backup battery charging */
|
|
|
abx500_mask_and_set_register_interruptible(di->dev,
|