Commit e41f39ea authored by Rajkumar Kasirajan's avatar Rajkumar Kasirajan Committed by Lee Jones

pm2301: Enable vbat low monitoring

Enable support for low battery checking.
Signed-off-by: default avatarRajkumar Kasirajan <rajkumar.kasirajan@stericsson.com>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
Reviewed-by: default avatarJonas ABERG <jonas.aberg@stericsson.com>
Tested-by: default avatarJonas ABERG <jonas.aberg@stericsson.com>
parent 53ef1f59
...@@ -118,6 +118,8 @@ static int pm2xxx_reg_read(struct pm2xxx_charger *pm2, int reg, u8 *val) ...@@ -118,6 +118,8 @@ static int pm2xxx_reg_read(struct pm2xxx_charger *pm2, int reg, u8 *val)
1, val); 1, val);
if (ret < 0) if (ret < 0)
dev_err(pm2->dev, "Error reading register at 0x%x\n", reg); dev_err(pm2->dev, "Error reading register at 0x%x\n", reg);
else
ret = 0;
return ret; return ret;
} }
...@@ -130,6 +132,8 @@ static int pm2xxx_reg_write(struct pm2xxx_charger *pm2, int reg, u8 val) ...@@ -130,6 +132,8 @@ static int pm2xxx_reg_write(struct pm2xxx_charger *pm2, int reg, u8 val)
1, &val); 1, &val);
if (ret < 0) if (ret < 0)
dev_err(pm2->dev, "Error writing register at 0x%x\n", reg); dev_err(pm2->dev, "Error writing register at 0x%x\n", reg);
else
ret = 0;
return ret; return ret;
} }
...@@ -227,7 +231,7 @@ static int pm2xxx_charger_bat_disc_mngt(struct pm2xxx_charger *pm2, int val) ...@@ -227,7 +231,7 @@ static int pm2xxx_charger_bat_disc_mngt(struct pm2xxx_charger *pm2, int val)
static int pm2xxx_charger_detection(struct pm2xxx_charger *pm2, u8 *val) static int pm2xxx_charger_detection(struct pm2xxx_charger *pm2, u8 *val)
{ {
int ret = 0; int ret;
ret = pm2xxx_reg_read(pm2, PM2XXX_SRCE_REG_INT2, val); ret = pm2xxx_reg_read(pm2, PM2XXX_SRCE_REG_INT2, val);
...@@ -237,6 +241,7 @@ static int pm2xxx_charger_detection(struct pm2xxx_charger *pm2, u8 *val) ...@@ -237,6 +241,7 @@ static int pm2xxx_charger_detection(struct pm2xxx_charger *pm2, u8 *val)
} }
*val &= (PM2XXX_INT2_S_ITVPWR1PLUG | PM2XXX_INT2_S_ITVPWR2PLUG); *val &= (PM2XXX_INT2_S_ITVPWR1PLUG | PM2XXX_INT2_S_ITVPWR2PLUG);
out: out:
return ret; return ret;
} }
...@@ -628,7 +633,7 @@ static int pm2xxx_charging_init(struct pm2xxx_charger *pm2) ...@@ -628,7 +633,7 @@ static int pm2xxx_charging_init(struct pm2xxx_charger *pm2)
/* Disable battery low monitoring */ /* Disable battery low monitoring */
ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_LOW_LEV_COMP_REG, ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_LOW_LEV_COMP_REG,
PM2XXX_VBAT_LOW_MONITORING_DIS); PM2XXX_VBAT_LOW_MONITORING_ENA);
/* Disable LED */ /* Disable LED */
ret = pm2xxx_reg_write(pm2, PM2XXX_LED_CTRL_REG, ret = pm2xxx_reg_write(pm2, PM2XXX_LED_CTRL_REG,
...@@ -677,53 +682,51 @@ static int pm2xxx_charger_ac_en(struct ux500_charger *charger, ...@@ -677,53 +682,51 @@ static int pm2xxx_charger_ac_en(struct ux500_charger *charger,
} }
ret = pm2xxx_reg_read(pm2, PM2XXX_BATT_CTRL_REG8, &val); ret = pm2xxx_reg_read(pm2, PM2XXX_BATT_CTRL_REG8, &val);
if (ret >= 0) { if (ret < 0) {
val &= ~PM2XXX_CH_VOLT_MASK; dev_err(pm2->dev, "%s pm2xxx read failed\n", __func__);
val |= volt_index; goto error_occured;
ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_CTRL_REG8, val); }
val &= ~PM2XXX_CH_VOLT_MASK;
if (ret < 0) { val |= volt_index;
dev_err(pm2->dev, ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_CTRL_REG8, val);
"%s write failed\n", __func__); if (ret < 0) {
goto error_occured; dev_err(pm2->dev, "%s pm2xxx write failed\n", __func__);
} goto error_occured;
else
dev_err(pm2->dev, "%s read failed\n", __func__);
} }
ret = pm2xxx_reg_read(pm2, PM2XXX_BATT_CTRL_REG6, &val); ret = pm2xxx_reg_read(pm2, PM2XXX_BATT_CTRL_REG6, &val);
if (ret >= 0) { if (ret < 0) {
val &= ~PM2XXX_DIR_CH_CC_CURRENT_MASK; dev_err(pm2->dev, "%s pm2xxx read failed\n", __func__);
val |= curr_index; goto error_occured;
ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_CTRL_REG6, val); }
if (ret < 0) { val &= ~PM2XXX_DIR_CH_CC_CURRENT_MASK;
dev_err(pm2->dev, val |= curr_index;
"%s write failed\n", __func__); ret = pm2xxx_reg_write(pm2, PM2XXX_BATT_CTRL_REG6, val);
goto error_occured; if (ret < 0) {
} dev_err(pm2->dev, "%s pm2xxx write failed\n", __func__);
else goto error_occured;
dev_err(pm2->dev, "%s read failed\n", __func__);
} }
if (!pm2->bat->enable_overshoot) { if (!pm2->bat->enable_overshoot) {
ret = pm2xxx_reg_read(pm2, PM2XXX_LED_CTRL_REG, &val); ret = pm2xxx_reg_read(pm2, PM2XXX_LED_CTRL_REG, &val);
if (ret >= 0) { if (ret < 0) {
val |= PM2XXX_ANTI_OVERSHOOT_EN; dev_err(pm2->dev, "%s pm2xxx read failed\n",
ret = pm2xxx_reg_write(pm2, PM2XXX_LED_CTRL_REG, __func__);
val); goto error_occured;
if (ret < 0){ }
dev_err(pm2->dev, "%s write failed\n", val |= PM2XXX_ANTI_OVERSHOOT_EN;
__func__); ret = pm2xxx_reg_write(pm2, PM2XXX_LED_CTRL_REG, val);
goto error_occured; if (ret < 0) {
} dev_err(pm2->dev, "%s pm2xxx write failed\n",
__func__);
goto error_occured;
} }
else
dev_err(pm2->dev, "%s read failed\n", __func__);
} }
ret = pm2xxx_charging_enable_mngt(pm2); ret = pm2xxx_charging_enable_mngt(pm2);
if (ret) { if (ret < 0) {
dev_err(pm2->dev, "%s write failed\n", __func__); dev_err(pm2->dev, "Failed to enable"
"pm2xxx ac charger\n");
goto error_occured; goto error_occured;
} }
...@@ -739,9 +742,10 @@ static int pm2xxx_charger_ac_en(struct ux500_charger *charger, ...@@ -739,9 +742,10 @@ static int pm2xxx_charger_ac_en(struct ux500_charger *charger,
} }
ret = pm2xxx_charging_disable_mngt(pm2); ret = pm2xxx_charging_disable_mngt(pm2);
if (ret) { if (ret < 0) {
dev_err(pm2->dev, "%s write failed\n", __func__); dev_err(pm2->dev, "failed to disable"
return ret; "pm2xxx ac charger\n");
goto error_occured;
} }
dev_dbg(pm2->dev, "PM2301: " "Disabled AC charging\n"); dev_dbg(pm2->dev, "PM2301: " "Disabled AC charging\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment