And one more comment: On Sun, 2014-02-02 at 02:23 +0400, Vladimir Barinov wrote: > +static int modelgauge_get_property(struct power_supply *psy, > + enum power_supply_property psp, > + union power_supply_propval *val) > +{ > + struct modelgauge_priv *priv = container_of(psy, > + struct modelgauge_priv, > + battery); > + struct regmap *regmap = priv->regmap; > + struct modelgauge_platform_data *pdata = priv->pdata; > + int reg; > + int ret; > + > + switch (psp) { > + case POWER_SUPPLY_PROP_STATUS: > + if (pdata && pdata->get_charging_status) > + val->intval = pdata->get_charging_status(); > + else > + val->intval = POWER_SUPPLY_STATUS_UNKNOWN; > + break; > + case POWER_SUPPLY_PROP_VOLTAGE_NOW: > + ret = regmap_read(regmap, MODELGAUGE_VCELL_REG, ®); > + if (ret < 0) > + return ret; > + > + val->intval = modelgauge_lsb_to_uvolts(priv, reg); > + break; > + case POWER_SUPPLY_PROP_VOLTAGE_OCV: > + /* Unlock model access */ > + regmap_write(regmap, MODELGAUGE_UNLOCK_REG, > + MODELGAUGE_UNLOCK_VALUE); > + ret = regmap_read(regmap, MODELGAUGE_OCV_REG, ®); > + /* Lock model access */ > + regmap_write(regmap, MODELGAUGE_UNLOCK_REG, 0); > + if (ret < 0) > + return ret; > + > + val->intval = modelgauge_lsb_to_uvolts(priv, reg); > + break; > + case POWER_SUPPLY_PROP_CAPACITY: > + ret = regmap_read(regmap, MODELGAUGE_SOC_REG, ®); > + if (ret < 0) > + return ret; > + > + val->intval = reg / (1 << priv->soc_shift); > + break; > + case POWER_SUPPLY_PROP_TEMP: > + if (pdata && pdata->get_temperature) > + val->intval = pdata->get_temperature(); > + else > + val->intval = 25; If pdata->get_temperature() is not supplied then probably the driver should not support POWER_SUPPLY_PROP_TEMP at all. I think it is better not to report any temperature than to report a wrong one. Best regards, Krzysztof -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html