mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 02:53:36 +02:00
power: supply: max77705_charger: return error when config fails
Handle error, returned from register writes in init function. Signed-off-by: Dzmitry Sankouski <dsankouski@gmail.com> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
This commit is contained in:
parent
ef1e734dbe
commit
55af7b9bb6
|
|
@ -400,43 +400,72 @@ static void max77705_chgin_isr_work(struct work_struct *work)
|
|||
power_supply_changed(chg->psy_chg);
|
||||
}
|
||||
|
||||
static void max77705_charger_initialize(struct max77705_charger_data *chg)
|
||||
static int max77705_charger_initialize(struct max77705_charger_data *chg)
|
||||
{
|
||||
struct power_supply_battery_info *info;
|
||||
struct regmap *regmap = chg->regmap;
|
||||
int err;
|
||||
|
||||
if (power_supply_get_battery_info(chg->psy_chg, &info) < 0)
|
||||
return;
|
||||
err = power_supply_get_battery_info(chg->psy_chg, &info);
|
||||
if (err)
|
||||
return dev_err_probe(chg->dev, err, "error on getting battery info");
|
||||
|
||||
chg->bat_info = info;
|
||||
|
||||
/* unlock charger setting protect */
|
||||
/* slowest LX slope */
|
||||
regmap_field_write(chg->rfield[MAX77705_CHGPROT], MAX77705_CHGPROT_UNLOCKED);
|
||||
regmap_field_write(chg->rfield[MAX77705_LX_SLOPE], MAX77705_SLOWEST_LX_SLOPE);
|
||||
err = regmap_field_write(chg->rfield[MAX77705_CHGPROT], MAX77705_CHGPROT_UNLOCKED);
|
||||
if (err)
|
||||
goto err;
|
||||
|
||||
err = regmap_field_write(chg->rfield[MAX77705_LX_SLOPE], MAX77705_SLOWEST_LX_SLOPE);
|
||||
if (err)
|
||||
goto err;
|
||||
|
||||
/* fast charge timer disable */
|
||||
/* restart threshold disable */
|
||||
/* pre-qual charge disable */
|
||||
regmap_field_write(chg->rfield[MAX77705_FCHGTIME], MAX77705_FCHGTIME_DISABLE);
|
||||
regmap_field_write(chg->rfield[MAX77705_CHG_RSTRT], MAX77705_CHG_RSTRT_DISABLE);
|
||||
regmap_field_write(chg->rfield[MAX77705_CHG_PQEN], MAX77705_CHG_PQEN_DISABLE);
|
||||
err = regmap_field_write(chg->rfield[MAX77705_FCHGTIME], MAX77705_FCHGTIME_DISABLE);
|
||||
if (err)
|
||||
goto err;
|
||||
|
||||
regmap_field_write(chg->rfield[MAX77705_MODE],
|
||||
err = regmap_field_write(chg->rfield[MAX77705_CHG_RSTRT], MAX77705_CHG_RSTRT_DISABLE);
|
||||
if (err)
|
||||
goto err;
|
||||
|
||||
err = regmap_field_write(chg->rfield[MAX77705_CHG_PQEN], MAX77705_CHG_PQEN_DISABLE);
|
||||
if (err)
|
||||
goto err;
|
||||
|
||||
err = regmap_field_write(chg->rfield[MAX77705_MODE],
|
||||
MAX77705_CHG_MASK | MAX77705_BUCK_MASK);
|
||||
if (err)
|
||||
goto err;
|
||||
|
||||
/* charge current 450mA(default) */
|
||||
/* otg current limit 900mA */
|
||||
regmap_field_write(chg->rfield[MAX77705_OTG_ILIM], MAX77705_OTG_ILIM_900);
|
||||
err = regmap_field_write(chg->rfield[MAX77705_OTG_ILIM], MAX77705_OTG_ILIM_900);
|
||||
if (err)
|
||||
goto err;
|
||||
|
||||
/* BAT to SYS OCP 4.80A */
|
||||
regmap_field_write(chg->rfield[MAX77705_REG_B2SOVRC], MAX77705_B2SOVRC_4_8A);
|
||||
err = regmap_field_write(chg->rfield[MAX77705_REG_B2SOVRC], MAX77705_B2SOVRC_4_8A);
|
||||
if (err)
|
||||
goto err;
|
||||
|
||||
/* top off current 150mA */
|
||||
/* top off timer 30min */
|
||||
regmap_field_write(chg->rfield[MAX77705_TO], MAX77705_TO_ITH_150MA);
|
||||
regmap_field_write(chg->rfield[MAX77705_TO_TIME], MAX77705_TO_TIME_30M);
|
||||
regmap_field_write(chg->rfield[MAX77705_SYS_TRACK], MAX77705_SYS_TRACK_DISABLE);
|
||||
err = regmap_field_write(chg->rfield[MAX77705_TO], MAX77705_TO_ITH_150MA);
|
||||
if (err)
|
||||
goto err;
|
||||
|
||||
err = regmap_field_write(chg->rfield[MAX77705_TO_TIME], MAX77705_TO_TIME_30M);
|
||||
if (err)
|
||||
goto err;
|
||||
|
||||
err = regmap_field_write(chg->rfield[MAX77705_SYS_TRACK], MAX77705_SYS_TRACK_DISABLE);
|
||||
if (err)
|
||||
goto err;
|
||||
|
||||
/* cv voltage 4.2V or 4.35V */
|
||||
/* MINVSYS 3.6V(default) */
|
||||
|
|
@ -447,21 +476,38 @@ static void max77705_charger_initialize(struct max77705_charger_data *chg)
|
|||
max77705_set_float_voltage(chg, info->voltage_max_design_uv);
|
||||
}
|
||||
|
||||
regmap_field_write(chg->rfield[MAX77705_VCHGIN], MAX77705_VCHGIN_4_5);
|
||||
regmap_field_write(chg->rfield[MAX77705_WCIN], MAX77705_WCIN_4_5);
|
||||
err = regmap_field_write(chg->rfield[MAX77705_VCHGIN], MAX77705_VCHGIN_4_5);
|
||||
if (err)
|
||||
goto err;
|
||||
|
||||
err = regmap_field_write(chg->rfield[MAX77705_WCIN], MAX77705_WCIN_4_5);
|
||||
if (err)
|
||||
goto err;
|
||||
|
||||
/* Watchdog timer */
|
||||
regmap_update_bits(regmap, MAX77705_CHG_REG_CNFG_00,
|
||||
MAX77705_WDTEN_MASK, 0);
|
||||
|
||||
/* VBYPSET=5.0V */
|
||||
regmap_field_write(chg->rfield[MAX77705_VBYPSET], 0);
|
||||
err = regmap_field_write(chg->rfield[MAX77705_VBYPSET], 0);
|
||||
if (err)
|
||||
goto err;
|
||||
|
||||
/* Switching Frequency : 1.5MHz */
|
||||
regmap_field_write(chg->rfield[MAX77705_REG_FSW], MAX77705_CHG_FSW_1_5MHz);
|
||||
err = regmap_field_write(chg->rfield[MAX77705_REG_FSW], MAX77705_CHG_FSW_1_5MHz);
|
||||
if (err)
|
||||
goto err;
|
||||
|
||||
/* Auto skip mode */
|
||||
regmap_field_write(chg->rfield[MAX77705_REG_DISKIP], MAX77705_AUTO_SKIP);
|
||||
err = regmap_field_write(chg->rfield[MAX77705_REG_DISKIP], MAX77705_AUTO_SKIP);
|
||||
if (err)
|
||||
goto err;
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
return dev_err_probe(chg->dev, err, "error while configuring");
|
||||
|
||||
}
|
||||
|
||||
static int max77705_charger_probe(struct i2c_client *i2c)
|
||||
|
|
@ -524,7 +570,11 @@ static int max77705_charger_probe(struct i2c_client *i2c)
|
|||
goto destroy_wq;
|
||||
}
|
||||
|
||||
max77705_charger_initialize(chg);
|
||||
ret = max77705_charger_initialize(chg);
|
||||
if (ret) {
|
||||
dev_err_probe(dev, ret, "failed to initialize charger IC\n");
|
||||
goto destroy_wq;
|
||||
}
|
||||
|
||||
ret = max77705_charger_enable(chg);
|
||||
if (ret) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user