staticenum power_supply_property max8997_battery_props[] = {
POWER_SUPPLY_PROP_STATUS, /* "FULL", "CHARGING" or "DISCHARGING". */
POWER_SUPPLY_PROP_PRESENT, /* the presence of battery */
POWER_SUPPLY_PROP_ONLINE, /* charger is active or not */
};
/* Note that the charger control is done by a current regulator "CHARGER" */ staticint max8997_battery_get_property(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val)
{ struct charger_data *charger = power_supply_get_drvdata(psy); struct i2c_client *i2c = charger->iodev->i2c; int ret;
u8 reg;
switch (psp) { case POWER_SUPPLY_PROP_STATUS:
val->intval = 0;
ret = max8997_read_reg(i2c, MAX8997_REG_STATUS4, ®); if (ret) return ret; if ((reg & (1 << 0)) == 0x1)
val->intval = POWER_SUPPLY_STATUS_FULL; elseif ((reg & DCINOK_MASK))
val->intval = POWER_SUPPLY_STATUS_CHARGING; else
val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
break; case POWER_SUPPLY_PROP_PRESENT:
val->intval = 0;
ret = max8997_read_reg(i2c, MAX8997_REG_STATUS4, ®); if (ret) return ret; if ((reg & DETBAT_MASK) == 0x0)
val->intval = 1;
break; case POWER_SUPPLY_PROP_ONLINE:
val->intval = 0;
ret = max8997_read_reg(i2c, MAX8997_REG_STATUS4, ®); if (ret) return ret; if (reg & DCINOK_MASK)
val->intval = 1;
if (current_limit > 0) { int ret = regulator_set_current_limit(charger->reg, current_limit, current_limit);
if (ret) {
dev_err(charger->dev, "failed to set current limit: %d\n", ret); return;
}
ret = regulator_enable(charger->reg); if (ret)
dev_err(charger->dev, "failed to enable regulator: %d\n", ret);
} else { int ret = regulator_disable(charger->reg);
if (ret)
dev_err(charger->dev, "failed to disable regulator: %d\n", ret);
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.