staticint da9150_charger_get_prop(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val)
{ struct da9150_charger *charger = dev_get_drvdata(psy->dev.parent); int ret;
switch (psp) { case POWER_SUPPLY_PROP_ONLINE:
ret = da9150_charger_supply_online(charger, psy, val); break; case POWER_SUPPLY_PROP_VOLTAGE_NOW:
ret = da9150_charger_vbus_voltage_now(charger, val); break; case POWER_SUPPLY_PROP_CURRENT_AVG:
ret = da9150_charger_ibus_current_avg(charger, val); break; case POWER_SUPPLY_PROP_TEMP:
ret = da9150_charger_tjunc_temp(charger, val); break; default:
ret = -EINVAL; break;
}
/* Now check for other states */ switch (reg & DA9150_CHG_STAT_MASK) { case DA9150_CHG_STAT_ACT: case DA9150_CHG_STAT_PRE: case DA9150_CHG_STAT_CC: case DA9150_CHG_STAT_CV:
val->intval = POWER_SUPPLY_STATUS_CHARGING; break; case DA9150_CHG_STAT_OFF: case DA9150_CHG_STAT_SUSP: case DA9150_CHG_STAT_TEMP: case DA9150_CHG_STAT_TIME: case DA9150_CHG_STAT_BAT:
val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING; break; case DA9150_CHG_STAT_FULL:
val->intval = POWER_SUPPLY_STATUS_FULL; break; default:
val->intval = POWER_SUPPLY_STATUS_UNKNOWN; break;
}
return 0;
}
staticint da9150_charger_battery_health(struct da9150_charger *charger, union power_supply_propval *val)
{
u8 reg;
/* Check if temperature limit reached */ switch (reg & DA9150_CHG_TEMP_MASK) { case DA9150_CHG_TEMP_UNDER:
val->intval = POWER_SUPPLY_HEALTH_COLD; return 0; case DA9150_CHG_TEMP_OVER:
val->intval = POWER_SUPPLY_HEALTH_OVERHEAT; return 0; default: break;
}
/* Check for other health states */ switch (reg & DA9150_CHG_STAT_MASK) { case DA9150_CHG_STAT_ACT: case DA9150_CHG_STAT_PRE:
val->intval = POWER_SUPPLY_HEALTH_DEAD; break; case DA9150_CHG_STAT_TIME:
val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE; break; default:
val->intval = POWER_SUPPLY_HEALTH_GOOD; break;
}
return 0;
}
staticint da9150_charger_battery_present(struct da9150_charger *charger, union power_supply_propval *val)
{
u8 reg;
/* Check if battery present or removed */
reg = da9150_reg_read(charger->da9150, DA9150_STATUS_J); if ((reg & DA9150_CHG_STAT_MASK) == DA9150_CHG_STAT_BAT)
val->intval = 0; else
val->intval = 1;
return 0;
}
staticint da9150_charger_battery_charge_type(struct da9150_charger *charger, union power_supply_propval *val)
{
u8 reg;
staticint da9150_charger_battery_get_prop(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val)
{ struct da9150_charger *charger = dev_get_drvdata(psy->dev.parent); int ret;
switch (psp) { case POWER_SUPPLY_PROP_STATUS:
ret = da9150_charger_battery_status(charger, val); break; case POWER_SUPPLY_PROP_ONLINE:
ret = da9150_charger_supply_online(charger, psy, val); break; case POWER_SUPPLY_PROP_HEALTH:
ret = da9150_charger_battery_health(charger, val); break; case POWER_SUPPLY_PROP_PRESENT:
ret = da9150_charger_battery_present(charger, val); break; case POWER_SUPPLY_PROP_CHARGE_TYPE:
ret = da9150_charger_battery_charge_type(charger, val); break; case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN:
ret = da9150_charger_battery_voltage_min(charger, val); break; case POWER_SUPPLY_PROP_VOLTAGE_NOW:
ret = da9150_charger_battery_voltage_now(charger, val); break; case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX:
ret = da9150_charger_battery_current_max(charger, val); break; case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX:
ret = da9150_charger_battery_voltage_max(charger, val); break; default:
ret = -EINVAL; break;
}
/* Nothing we can really do except report this. */
dev_crit(charger->dev, "VSYS under voltage!!!\n");
power_supply_changed(charger->usb);
power_supply_changed(charger->battery);
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.