尚未完成
DS2786中INITIAL_CAPACITY_SCALING_FACTOR的设置:
初试化值是0x80
IACR是Internal Accumulated Current Reg,就是充电的所有charge之和。单位是mVh。charge是从那个sensor resisitor上面测得的。
而ICSF的单位是百分比/Vh。
所以IACR*ICSF后就是百分比。
Relative Capacity是用IACR * Learned Capacity Scaling Factor + Last OCV Relative Capacity。
而Learned Capacity Scaling Factor是DS2786控制的。
PEN1 PEN2 POWER_SUS关系
我们是用DC接入,PEN1根据是否为充电器来决定充电电流(3000/R or decided by PEN2 & POWER_SUS)。
PEN2直接接高,表示最大充电电流限制在500ma(而非100ma).POWER_SUS可以用来控制是否充电。
di->bat.external_power_changed =
ds2786_battery_external_power_changed; //when max-charger state changed, notify him
static void power_supply_changed_work(struct work_struct *work)
{
struct power_supply *psy = container_of(work, struct power_supply,
changed_work);
dev_dbg(psy->dev, "%s/n", __func__);
class_for_each_device(power_supply_class, NULL, psy,
__power_supply_changed_work);
power_supply_update_leds(psy);
kobject_uevent(&psy->dev->kobj, KOBJ_CHANGE);
}
显然,最后还是通过发uevent通知上层的。