staticint max77976_get_status(struct max77976 *chg, int *val)
{ unsignedint regval; int err;
err = regmap_field_read(chg->rfield[CHG_DTLS], ®val); if (err < 0) return err;
switch (regval) { case MAX77976_CHARGING_PREQUALIFICATION: case MAX77976_CHARGING_FAST_CONST_CURRENT: case MAX77976_CHARGING_FAST_CONST_VOLTAGE: case MAX77976_CHARGING_TOP_OFF:
*val = POWER_SUPPLY_STATUS_CHARGING; break; case MAX77976_CHARGING_DONE:
*val = POWER_SUPPLY_STATUS_FULL; break; case MAX77976_CHARGING_TIMER_FAULT: case MAX77976_CHARGING_SUSPENDED_QBATT_OFF: case MAX77976_CHARGING_SUSPENDED_JEITA: case MAX77976_CHARGING_SUSPENDED_THM_REMOVAL: case MAX77976_CHARGING_SUSPENDED_PIN:
*val = POWER_SUPPLY_STATUS_NOT_CHARGING; break; case MAX77976_CHARGING_OFF: case MAX77976_CHARGING_THERMAL_SHUTDOWN: case MAX77976_CHARGING_WATCHDOG_EXPIRED:
*val = POWER_SUPPLY_STATUS_DISCHARGING; break; default:
*val = POWER_SUPPLY_STATUS_UNKNOWN;
}
return 0;
}
staticint max77976_get_charge_type(struct max77976 *chg, int *val)
{ unsignedint regval; int err;
err = regmap_field_read(chg->rfield[CHG_DTLS], ®val); if (err < 0) return err;
switch (regval) { case MAX77976_CHARGING_PREQUALIFICATION:
*val = POWER_SUPPLY_CHARGE_TYPE_TRICKLE; break; case MAX77976_CHARGING_FAST_CONST_CURRENT: case MAX77976_CHARGING_FAST_CONST_VOLTAGE:
*val = POWER_SUPPLY_CHARGE_TYPE_FAST; break; case MAX77976_CHARGING_TOP_OFF:
*val = POWER_SUPPLY_CHARGE_TYPE_STANDARD; break; case MAX77976_CHARGING_DONE: case MAX77976_CHARGING_TIMER_FAULT: case MAX77976_CHARGING_SUSPENDED_QBATT_OFF: case MAX77976_CHARGING_OFF: case MAX77976_CHARGING_THERMAL_SHUTDOWN: case MAX77976_CHARGING_WATCHDOG_EXPIRED: case MAX77976_CHARGING_SUSPENDED_JEITA: case MAX77976_CHARGING_SUSPENDED_THM_REMOVAL: case MAX77976_CHARGING_SUSPENDED_PIN:
*val = POWER_SUPPLY_CHARGE_TYPE_NONE; break; default:
*val = POWER_SUPPLY_CHARGE_TYPE_UNKNOWN;
}
return 0;
}
staticint max77976_get_health(struct max77976 *chg, int *val)
{ unsignedint regval; int err;
err = regmap_field_read(chg->rfield[BAT_DTLS], ®val); if (err < 0) return err;
switch (regval) { case MAX77976_BATTERY_BATTERY_REMOVAL:
*val = POWER_SUPPLY_HEALTH_NO_BATTERY; break; case MAX77976_BATTERY_LOW_VOLTAGE: case MAX77976_BATTERY_REGULAR_VOLTAGE:
*val = POWER_SUPPLY_HEALTH_GOOD; break; case MAX77976_BATTERY_TIMER_FAULT:
*val = POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE; break; case MAX77976_BATTERY_OVERVOLTAGE:
*val = POWER_SUPPLY_HEALTH_OVERVOLTAGE; break; case MAX77976_BATTERY_PREQUALIFICATION: case MAX77976_BATTERY_BATTERY_ONLY:
*val = POWER_SUPPLY_HEALTH_UNKNOWN; break; default:
*val = POWER_SUPPLY_HEALTH_UNKNOWN;
}
return 0;
}
staticint max77976_get_online(struct max77976 *chg, int *val)
{ unsignedint regval; int err;
err = regmap_field_read(chg->rfield[CHGIN_OK], ®val); if (err < 0) return err;
*val = (regval ? 1 : 0);
return 0;
}
staticint max77976_get_integer(struct max77976 *chg, enum max77976_field_idx fidx, unsignedint clamp_min, unsignedint clamp_max, unsignedint mult, int *val)
{ unsignedint regval; int err;
err = regmap_field_read(chg->rfield[fidx], ®val); if (err < 0) return err;
/* Magic value to unlock writing to some registers */
err = regmap_field_write(chg->rfield[CHGPROT], 0x3); if (err) goto err;
/* * Mode 5 = Charger ON, OTG OFF, buck ON, boost OFF. * Other modes are not implemented by this driver.
*/
err = regmap_field_write(chg->rfield[MODE], MAX77976_MODE_CHARGER_BUCK); if (err) goto err;
return 0;
err: return dev_err_probe(dev, err, "error while configuring");
}
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.