switch (irq - chip->irq_base) { case MAX8925_IRQ_VCHG_DC_R:
info->ac_online = 1;
__set_charger(info, 1);
dev_dbg(chip->dev, "Adapter inserted\n"); break; case MAX8925_IRQ_VCHG_DC_F:
info->ac_online = 0;
__set_charger(info, 0);
dev_dbg(chip->dev, "Adapter removed\n"); break; case MAX8925_IRQ_VCHG_THM_OK_F: /* Battery is not ready yet */
dev_dbg(chip->dev, "Battery temperature is out of range\n");
fallthrough; case MAX8925_IRQ_VCHG_DC_OVP:
dev_dbg(chip->dev, "Error detection\n");
__set_charger(info, 0); break; case MAX8925_IRQ_VCHG_THM_OK_R: /* Battery is ready now */
dev_dbg(chip->dev, "Battery temperature is in range\n"); break; case MAX8925_IRQ_VCHG_SYSLOW_R: /* VSYS is low */
dev_info(chip->dev, "Sys power is too low\n"); break; case MAX8925_IRQ_VCHG_SYSLOW_F:
dev_dbg(chip->dev, "Sys power is above low threshold\n"); break; case MAX8925_IRQ_VCHG_DONE:
__set_charger(info, 0);
dev_dbg(chip->dev, "Charging is done\n"); break; case MAX8925_IRQ_VCHG_TOPOFF:
dev_dbg(chip->dev, "Charging in top-off mode\n"); break; case MAX8925_IRQ_VCHG_TMR_FAULT:
__set_charger(info, 0);
dev_dbg(chip->dev, "Safe timer is expired\n"); break; case MAX8925_IRQ_VCHG_RST:
__set_charger(info, 0);
dev_dbg(chip->dev, "Charger is reset\n"); break;
} return IRQ_HANDLED;
}
staticint start_measure(struct max8925_power_info *info, int type)
{ unsignedchar buf[2] = {0, 0}; int meas_cmd; int meas_reg = 0, ret;
staticint max8925_bat_get_prop(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val)
{ struct max8925_power_info *info = dev_get_drvdata(psy->dev.parent); int ret = 0;
switch (psp) { case POWER_SUPPLY_PROP_ONLINE:
val->intval = info->bat_online; break; case POWER_SUPPLY_PROP_VOLTAGE_NOW: if (info->bat_online) {
ret = start_measure(info, MEASURE_VMBATT); if (ret >= 0) {
val->intval = ret * 2000; /* unit is uV */
ret = 0; break;
}
}
ret = -ENODATA; break; case POWER_SUPPLY_PROP_CURRENT_NOW: if (info->bat_online) {
ret = start_measure(info, MEASURE_ISNS); if (ret >= 0) { /* assume r_sns is 0.02 */
ret = ((ret * 6250) - 3125) /* uA */;
val->intval = 0; if (ret > 0)
val->intval = ret; /* unit is mA */
ret = 0; break;
}
}
ret = -ENODATA; break; case POWER_SUPPLY_PROP_CHARGE_TYPE: if (!info->bat_online) {
ret = -ENODATA; break;
}
ret = max8925_reg_read(info->gpm, MAX8925_CHG_STATUS);
ret = (ret & MAX8925_CHG_STAT_MODE_MASK) >> 2; switch (ret) { case 1:
val->intval = POWER_SUPPLY_CHARGE_TYPE_FAST; break; case 0: case 2:
val->intval = POWER_SUPPLY_CHARGE_TYPE_TRICKLE; break; case 3:
val->intval = POWER_SUPPLY_CHARGE_TYPE_NONE; break;
}
ret = 0; break; case POWER_SUPPLY_PROP_STATUS: if (!info->bat_online) {
ret = -ENODATA; break;
}
ret = max8925_reg_read(info->gpm, MAX8925_CHG_STATUS); if (info->usb_online || info->ac_online) {
val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING; if (ret & MAX8925_CHG_STAT_EN_MASK)
val->intval = POWER_SUPPLY_STATUS_CHARGING;
} else
val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
ret = 0; break; default:
ret = -ENODEV; break;
} return ret;
}
/* check for power - can miss interrupt at boot time */ if (start_measure(info, MEASURE_VCHG) * 2000 > 500000)
info->ac_online = 1; else
info->ac_online = 0;
ret = max8925_reg_read(info->gpm, MAX8925_CHG_STATUS); if (ret >= 0) { /* * If battery detection is enabled, ID pin of battery is * connected to MBDET pin of MAX8925. It could be used to * detect battery presence. * Otherwise, we have to assume that battery is always on.
*/ if (info->batt_detect)
info->bat_online = (ret & MAX8925_CHG_MBDET) ? 0 : 1; else
info->bat_online = 1; if (ret & MAX8925_CHG_AC_RANGE_MASK)
info->ac_online = 1; else
info->ac_online = 0;
} /* disable charge */
max8925_set_bits(info->gpm, MAX8925_CHG_CNTL1, 1 << 7, 1 << 7); /* set charging current in charge topoff mode */
max8925_set_bits(info->gpm, MAX8925_CHG_CNTL1, 3 << 5,
info->topoff_threshold << 5); /* set charing current in fast charge mode */
max8925_set_bits(info->gpm, MAX8925_CHG_CNTL1, 7, info->fast_charge);
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.