Hi! > Our charger manager can optimize the battery capacity periodically, so > we can save last battery capacity into registers. Then next system > power-on, we can read the last saved battery capacity as the initial > battery capacity, which can make the battery capacity more accurate. > > Signed-off-by: Yuanjiang Yu > Signed-off-by: Baolin Wang > --- > drivers/power/supply/sc27xx_fuel_gauge.c | 143 +++++++++++++++++++++++++++++- > 1 file changed, 142 insertions(+), 1 deletion(-) > > +static int sc27xx_fgu_set_property(struct power_supply *psy, > + enum power_supply_property psp, > + const union power_supply_propval *val) > +{ > + struct sc27xx_fgu_data *data = power_supply_get_drvdata(psy); > + int ret; > + > + mutex_lock(&data->lock); > + > + switch (psp) { > + case POWER_SUPPLY_PROP_CAPACITY: > + ret = sc27xx_fgu_save_last_cap(data, val->intval); > + if (ret < 0) > + dev_err(data->dev, "failed to save battery capacity\n"); > + break; > + > + default: > + ret = -EINVAL; > + } > + > + mutex_unlock(&data->lock); > + return ret; if (psp != ....) return -EINVAL; And you can do that outside lock... Ok, OTOH this is easier to extend in future. Do you expect more writable properties? > +static int sc27xx_fgu_property_is_writeable(struct power_supply *psy, > + enum power_supply_property psp) > +{ > + switch (psp) { > + case POWER_SUPPLY_PROP_CAPACITY: > + return 1; > + > + default: > + return 0; > + } > +} Same here. return psp == POWER_SUPPLY_PROP_CAPACITY; really looks strange written like this. Best regards, Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html