Lines Matching full:bat
37 struct power_supply *bat; member
90 static int ec_i2c_read(struct ec_battery *bat, u8 cmd, u8 *dest, u16 len) in ec_i2c_read() argument
92 struct i2c_client *i2c = bat->i2c; in ec_i2c_read()
114 static void ec_dump_info(struct ec_battery *bat) in ec_dump_info() argument
119 DBG("battery status: %x\n", bat->status); in ec_dump_info()
120 temp = bat->temperature_now / 10; in ec_dump_info()
122 DBG("current_now: %d ma\n", bat->current_now); in ec_dump_info()
123 DBG("voltage_now: %d mv\n", bat->voltage_now); in ec_dump_info()
124 DBG("Charge: %d %%\n", bat->soc); in ec_dump_info()
125 DBG("Remaining: %d mAh\n", bat->rem_capacity); in ec_dump_info()
126 DBG("Cap-full: %d mAh\n", bat->full_charge_capacity); in ec_dump_info()
127 DBG("Design: %d mAh\n", bat->design_capacity); in ec_dump_info()
131 static int ec_get_battery_info(struct ec_battery *bat) in ec_get_battery_info() argument
141 ret = ec_i2c_read(bat, EC_GET_BATTERY_INFO_COMMOND, buf, in ec_get_battery_info()
144 bat->status = buf[2] << 8 | buf[1]; in ec_get_battery_info()
146 bat->current_now = cur; in ec_get_battery_info()
148 bat->current_now = (~cur) & 0xffff; in ec_get_battery_info()
149 bat->current_now = -(bat->current_now); in ec_get_battery_info()
152 bat->rem_capacity = buf[6] << 8 | buf[5]; in ec_get_battery_info()
153 bat->voltage_now = buf[8] << 8 | buf[7]; in ec_get_battery_info()
154 bat->full_charge_capacity = buf[10] << 8 | buf[9]; in ec_get_battery_info()
155 bat->temperature_now = buf[12] << 8 | buf[11]; in ec_get_battery_info()
156 soc = (bat->rem_capacity + bat->full_charge_capacity / 101) * in ec_get_battery_info()
157 100 / bat->full_charge_capacity; in ec_get_battery_info()
159 bat->soc = 100; in ec_get_battery_info()
161 bat->soc = 0; in ec_get_battery_info()
163 bat->soc = soc; in ec_get_battery_info()
165 dev_err(bat->dev, "get battery info from 0x07 erro\n"); in ec_get_battery_info()
168 ret = ec_i2c_read(bat, EC_GET_BATTERY_OTHER_COMMOND, buf, in ec_get_battery_info()
174 bat->design_capacity = design_capacity; in ec_get_battery_info()
177 ec_dump_info(bat); in ec_get_battery_info()
182 static int ec_get_current(struct ec_battery *bat) in ec_get_current() argument
184 return bat->current_now * 1000; in ec_get_current()
187 static int ec_get_voltage(struct ec_battery *bat) in ec_get_voltage() argument
189 return bat->voltage_now * 1000; in ec_get_voltage()
192 static int is_ec_bat_exist(struct ec_battery *bat) in is_ec_bat_exist() argument
196 is_exist = EC_IS_BATTERY_IN(bat->status); in is_ec_bat_exist()
200 static int ec_get_capacity(struct ec_battery *bat) in ec_get_capacity() argument
202 return bat->soc; in ec_get_capacity()
205 static int ec_get_temperature(struct ec_battery *bat) in ec_get_temperature() argument
209 temp = bat->temperature_now - 2722; in ec_get_temperature()
213 static int ec_bat_chrg_online(struct ec_battery *bat) in ec_bat_chrg_online() argument
215 return EC_IS_CHARGE(bat->status); in ec_bat_chrg_online()
219 static int ec_bat_parse_dt(struct ec_battery *bat) in ec_bat_parse_dt() argument
223 struct device_node *np = bat->dev->of_node; in ec_bat_parse_dt()
225 bat->bat_mode = MODE_BATTARY; in ec_bat_parse_dt()
226 bat->monitor_sec = DEFAULT_MONITOR_SEC * TIMER_MS_COUNTS; in ec_bat_parse_dt()
228 ret = of_property_read_u32(np, "virtual_power", &bat->bat_mode); in ec_bat_parse_dt()
230 dev_err(bat->dev, "virtual_power missing!\n"); in ec_bat_parse_dt()
234 dev_err(bat->dev, "monitor_sec missing!\n"); in ec_bat_parse_dt()
236 bat->monitor_sec = out_value * TIMER_MS_COUNTS; in ec_bat_parse_dt()
238 bat->ec_notify_io = in ec_bat_parse_dt()
239 devm_gpiod_get_optional(bat->dev, "ec-notify", in ec_bat_parse_dt()
241 if (!IS_ERR_OR_NULL(bat->ec_notify_io)) in ec_bat_parse_dt()
242 gpiod_direction_output(bat->ec_notify_io, 0); in ec_bat_parse_dt()
247 static int ec_bat_parse_dt(struct ec_battery *bat) in ec_bat_parse_dt() argument
267 struct ec_battery *bat = power_supply_get_drvdata(psy); in ec_battery_get_property() local
271 val->intval = ec_get_current(bat);/*uA*/ in ec_battery_get_property()
272 if (bat->bat_mode == MODE_VIRTUAL) in ec_battery_get_property()
276 val->intval = ec_get_voltage(bat);/*uV*/ in ec_battery_get_property()
277 if (bat->bat_mode == MODE_VIRTUAL) in ec_battery_get_property()
281 val->intval = is_ec_bat_exist(bat); in ec_battery_get_property()
282 if (bat->bat_mode == MODE_VIRTUAL) in ec_battery_get_property()
286 val->intval = ec_get_capacity(bat); in ec_battery_get_property()
287 if (bat->bat_mode == MODE_VIRTUAL) in ec_battery_get_property()
294 val->intval = ec_get_temperature(bat); in ec_battery_get_property()
295 if (bat->bat_mode == MODE_VIRTUAL) in ec_battery_get_property()
299 if (bat->bat_mode == MODE_VIRTUAL) in ec_battery_get_property()
301 else if (ec_get_capacity(bat) == 100) in ec_battery_get_property()
303 else if (ec_bat_chrg_online(bat)) in ec_battery_get_property()
323 static int ec_bat_init_power_supply(struct ec_battery *bat) in ec_bat_init_power_supply() argument
325 struct power_supply_config psy_cfg = { .drv_data = bat, }; in ec_bat_init_power_supply()
327 bat->bat = power_supply_register(bat->dev, &ec_bat_desc, &psy_cfg); in ec_bat_init_power_supply()
328 if (IS_ERR(bat->bat)) { in ec_bat_init_power_supply()
329 dev_err(bat->dev, "register bat power supply fail\n"); in ec_bat_init_power_supply()
330 return PTR_ERR(bat->bat); in ec_bat_init_power_supply()
349 power_supply_changed(ec_bat->bat); in ec_bat_power_supply_changed()
395 "ec-bat-monitor-wq"); in ec_charger_probe()