power: supply: bq24190_charger: Enable devicetree config
Add get_config(). Rename set_mode_host() to set_config(). Call get_config() and hw_init() after power_supply_register(). No functional changes. Cc: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Liam Breck <kernel@networkimprov.net> Acked-by: Tony Lindgren <tony@atomide.com> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
This commit is contained in:
parent
3c72785a32
commit
a4c7590b8d
|
@ -504,15 +504,7 @@ static int bq24190_sysfs_create_group(struct bq24190_dev_info *bdi)
|
||||||
static inline void bq24190_sysfs_remove_group(struct bq24190_dev_info *bdi) {}
|
static inline void bq24190_sysfs_remove_group(struct bq24190_dev_info *bdi) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
static int bq24190_set_config(struct bq24190_dev_info *bdi)
|
||||||
* According to the "Host Mode and default Mode" section of the
|
|
||||||
* manual, a write to any register causes the bq24190 to switch
|
|
||||||
* from default mode to host mode. It will switch back to default
|
|
||||||
* mode after a WDT timeout unless the WDT is turned off as well.
|
|
||||||
* So, by simply turning off the WDT, we accomplish both with the
|
|
||||||
* same write.
|
|
||||||
*/
|
|
||||||
static int bq24190_set_mode_host(struct bq24190_dev_info *bdi)
|
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
u8 v;
|
u8 v;
|
||||||
|
@ -523,9 +515,22 @@ static int bq24190_set_mode_host(struct bq24190_dev_info *bdi)
|
||||||
|
|
||||||
bdi->watchdog = ((v & BQ24190_REG_CTTC_WATCHDOG_MASK) >>
|
bdi->watchdog = ((v & BQ24190_REG_CTTC_WATCHDOG_MASK) >>
|
||||||
BQ24190_REG_CTTC_WATCHDOG_SHIFT);
|
BQ24190_REG_CTTC_WATCHDOG_SHIFT);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* According to the "Host Mode and default Mode" section of the
|
||||||
|
* manual, a write to any register causes the bq24190 to switch
|
||||||
|
* from default mode to host mode. It will switch back to default
|
||||||
|
* mode after a WDT timeout unless the WDT is turned off as well.
|
||||||
|
* So, by simply turning off the WDT, we accomplish both with the
|
||||||
|
* same write.
|
||||||
|
*/
|
||||||
v &= ~BQ24190_REG_CTTC_WATCHDOG_MASK;
|
v &= ~BQ24190_REG_CTTC_WATCHDOG_MASK;
|
||||||
|
|
||||||
return bq24190_write(bdi, BQ24190_REG_CTTC, v);
|
ret = bq24190_write(bdi, BQ24190_REG_CTTC, v);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bq24190_register_reset(struct bq24190_dev_info *bdi)
|
static int bq24190_register_reset(struct bq24190_dev_info *bdi)
|
||||||
|
@ -1495,13 +1500,18 @@ static int bq24190_hw_init(struct bq24190_dev_info *bdi)
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ret = bq24190_set_mode_host(bdi);
|
ret = bq24190_set_config(bdi);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
return bq24190_read(bdi, BQ24190_REG_SS, &bdi->ss_reg);
|
return bq24190_read(bdi, BQ24190_REG_SS, &bdi->ss_reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int bq24190_get_config(struct bq24190_dev_info *bdi)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int bq24190_probe(struct i2c_client *client,
|
static int bq24190_probe(struct i2c_client *client,
|
||||||
const struct i2c_device_id *id)
|
const struct i2c_device_id *id)
|
||||||
{
|
{
|
||||||
|
@ -1532,7 +1542,7 @@ static int bq24190_probe(struct i2c_client *client,
|
||||||
|
|
||||||
i2c_set_clientdata(client, bdi);
|
i2c_set_clientdata(client, bdi);
|
||||||
|
|
||||||
if (!client->irq) {
|
if (client->irq <= 0) {
|
||||||
dev_err(dev, "Can't get irq info\n");
|
dev_err(dev, "Can't get irq info\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -1565,12 +1575,6 @@ static int bq24190_probe(struct i2c_client *client,
|
||||||
goto out_pmrt;
|
goto out_pmrt;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = bq24190_hw_init(bdi);
|
|
||||||
if (ret < 0) {
|
|
||||||
dev_err(dev, "Hardware init failed\n");
|
|
||||||
goto out_pmrt;
|
|
||||||
}
|
|
||||||
|
|
||||||
charger_cfg.drv_data = bdi;
|
charger_cfg.drv_data = bdi;
|
||||||
charger_cfg.supplied_to = bq24190_charger_supplied_to;
|
charger_cfg.supplied_to = bq24190_charger_supplied_to;
|
||||||
charger_cfg.num_supplicants = ARRAY_SIZE(bq24190_charger_supplied_to),
|
charger_cfg.num_supplicants = ARRAY_SIZE(bq24190_charger_supplied_to),
|
||||||
|
@ -1595,8 +1599,20 @@ static int bq24190_probe(struct i2c_client *client,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = bq24190_get_config(bdi);
|
||||||
|
if (ret < 0) {
|
||||||
|
dev_err(dev, "Can't get devicetree config\n");
|
||||||
|
goto out_charger;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = bq24190_hw_init(bdi);
|
||||||
|
if (ret < 0) {
|
||||||
|
dev_err(dev, "Hardware init failed\n");
|
||||||
|
goto out_charger;
|
||||||
|
}
|
||||||
|
|
||||||
ret = bq24190_sysfs_create_group(bdi);
|
ret = bq24190_sysfs_create_group(bdi);
|
||||||
if (ret) {
|
if (ret < 0) {
|
||||||
dev_err(dev, "Can't create sysfs entries\n");
|
dev_err(dev, "Can't create sysfs entries\n");
|
||||||
goto out_charger;
|
goto out_charger;
|
||||||
}
|
}
|
||||||
|
@ -1739,7 +1755,7 @@ static __maybe_unused int bq24190_pm_resume(struct device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
bq24190_register_reset(bdi);
|
bq24190_register_reset(bdi);
|
||||||
bq24190_set_mode_host(bdi);
|
bq24190_set_config(bdi);
|
||||||
bq24190_read(bdi, BQ24190_REG_SS, &bdi->ss_reg);
|
bq24190_read(bdi, BQ24190_REG_SS, &bdi->ss_reg);
|
||||||
|
|
||||||
if (error >= 0) {
|
if (error >= 0) {
|
||||||
|
|
Loading…
Reference in New Issue