power: supply: smb347-charger: Utilize generic regmap caching
Utilize generic regmap caching in order to avoid unnecessary slow I2C accesses to all constant registers each time the supply status updated and remove local caching of charger state to make code cleaner. Signed-off-by: Dmitry Osipenko <digetx@gmail.com> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
This commit is contained in:
parent
4ac59d85a2
commit
17e7bc532c
|
@ -135,7 +135,6 @@
|
||||||
* @id: SMB charger ID
|
* @id: SMB charger ID
|
||||||
* @mains_online: is AC/DC input connected
|
* @mains_online: is AC/DC input connected
|
||||||
* @usb_online: is USB input connected
|
* @usb_online: is USB input connected
|
||||||
* @charging_enabled: is charging enabled
|
|
||||||
* @irq_unsupported: is interrupt unsupported by SMB hardware
|
* @irq_unsupported: is interrupt unsupported by SMB hardware
|
||||||
* @max_charge_current: maximum current (in uA) the battery can be charged
|
* @max_charge_current: maximum current (in uA) the battery can be charged
|
||||||
* @max_charge_voltage: maximum voltage (in uV) the battery can be charged
|
* @max_charge_voltage: maximum voltage (in uV) the battery can be charged
|
||||||
|
@ -192,7 +191,6 @@ struct smb347_charger {
|
||||||
unsigned int id;
|
unsigned int id;
|
||||||
bool mains_online;
|
bool mains_online;
|
||||||
bool usb_online;
|
bool usb_online;
|
||||||
bool charging_enabled;
|
|
||||||
bool irq_unsupported;
|
bool irq_unsupported;
|
||||||
|
|
||||||
unsigned int max_charge_current;
|
unsigned int max_charge_current;
|
||||||
|
@ -358,21 +356,13 @@ static int smb347_charging_status(struct smb347_charger *smb)
|
||||||
|
|
||||||
static int smb347_charging_set(struct smb347_charger *smb, bool enable)
|
static int smb347_charging_set(struct smb347_charger *smb, bool enable)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
if (smb->enable_control != SMB3XX_CHG_ENABLE_SW) {
|
if (smb->enable_control != SMB3XX_CHG_ENABLE_SW) {
|
||||||
dev_dbg(smb->dev, "charging enable/disable in SW disabled\n");
|
dev_dbg(smb->dev, "charging enable/disable in SW disabled\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (smb->charging_enabled != enable) {
|
return regmap_update_bits(smb->regmap, CMD_A, CMD_A_CHG_ENABLED,
|
||||||
ret = regmap_update_bits(smb->regmap, CMD_A, CMD_A_CHG_ENABLED,
|
enable ? CMD_A_CHG_ENABLED : 0);
|
||||||
enable ? CMD_A_CHG_ENABLED : 0);
|
|
||||||
if (!ret)
|
|
||||||
smb->charging_enabled = enable;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int smb347_charging_enable(struct smb347_charger *smb)
|
static inline int smb347_charging_enable(struct smb347_charger *smb)
|
||||||
|
@ -1310,6 +1300,8 @@ static const struct regmap_config smb347_regmap = {
|
||||||
.max_register = SMB347_MAX_REGISTER,
|
.max_register = SMB347_MAX_REGISTER,
|
||||||
.volatile_reg = smb347_volatile_reg,
|
.volatile_reg = smb347_volatile_reg,
|
||||||
.readable_reg = smb347_readable_reg,
|
.readable_reg = smb347_readable_reg,
|
||||||
|
.cache_type = REGCACHE_FLAT,
|
||||||
|
.num_reg_defaults_raw = SMB347_MAX_REGISTER,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct power_supply_desc smb347_mains_desc = {
|
static const struct power_supply_desc smb347_mains_desc = {
|
||||||
|
|
Loading…
Reference in New Issue