Lines Matching full:data
138 static int stc3117_get_battery_data(struct stc3117_data *data) in stc3117_get_battery_data() argument
144 regmap_bulk_read(data->regmap, STC3117_ADDR_MODE, in stc3117_get_battery_data()
149 data->hrsoc = value; in stc3117_get_battery_data()
150 data->soc = (value * 10 + 256) / 512; in stc3117_get_battery_data()
154 data->batt_current = stc3117_convert(value, in stc3117_get_battery_data()
155 CURRENT_LSB_VALUE / data->battery_info.sense_resistor); in stc3117_get_battery_data()
159 data->voltage = stc3117_convert(value, VOLTAGE_LSB_VALUE); in stc3117_get_battery_data()
162 data->temp = reg_list[10] * 10; in stc3117_get_battery_data()
166 regmap_read(data->regmap, STC3117_ADDR_MODE, &mode); in stc3117_get_battery_data()
169 CURRENT_LSB_VALUE / data->battery_info.sense_resistor); in stc3117_get_battery_data()
174 data->avg_current = value; in stc3117_get_battery_data()
180 data->ocv = value; in stc3117_get_battery_data()
183 regmap_bulk_read(data->regmap, STC3117_ADDR_CC_ADJ_L, in stc3117_get_battery_data()
186 data->cc_adj = value; in stc3117_get_battery_data()
189 data->vm_adj = value; in stc3117_get_battery_data()
194 static int ram_write(struct stc3117_data *data) in ram_write() argument
198 ret = regmap_bulk_write(data->regmap, STC3117_ADDR_RAM, in ram_write()
199 data->ram_data.ram_bytes, STC3117_RAM_SIZE); in ram_write()
206 static int ram_read(struct stc3117_data *data) in ram_read() argument
210 ret = regmap_bulk_read(data->regmap, STC3117_ADDR_RAM, in ram_read()
211 data->ram_data.ram_bytes, STC3117_RAM_SIZE); in ram_read()
218 static int stc3117_set_para(struct stc3117_data *data) in stc3117_set_para() argument
222 ret = regmap_write(data->regmap, STC3117_ADDR_MODE, STC3117_VMODE); in stc3117_set_para()
225 ret |= regmap_write(data->regmap, STC3117_ADDR_OCV_TABLE + i, in stc3117_set_para()
227 if (data->soc_tab[1] != 0) in stc3117_set_para()
228 ret |= regmap_bulk_write(data->regmap, STC3117_ADDR_SOC_TABLE, in stc3117_set_para()
229 data->soc_tab, STC3117_OCV_TABLE_SIZE); in stc3117_set_para()
231 ret |= regmap_write(data->regmap, STC3117_ADDR_CC_CNF_H, in stc3117_set_para()
232 (data->ram_data.reg.cc_cnf >> 8) & 0xFF); in stc3117_set_para()
234 ret |= regmap_write(data->regmap, STC3117_ADDR_CC_CNF_L, in stc3117_set_para()
235 data->ram_data.reg.cc_cnf & 0xFF); in stc3117_set_para()
237 ret |= regmap_write(data->regmap, STC3117_ADDR_VM_CNF_H, in stc3117_set_para()
238 (data->ram_data.reg.vm_cnf >> 8) & 0xFF); in stc3117_set_para()
240 ret |= regmap_write(data->regmap, STC3117_ADDR_VM_CNF_L, in stc3117_set_para()
241 data->ram_data.reg.vm_cnf & 0xFF); in stc3117_set_para()
243 ret |= regmap_write(data->regmap, STC3117_ADDR_CTRL, 0x03); in stc3117_set_para()
245 ret |= regmap_write(data->regmap, STC3117_ADDR_MODE, in stc3117_set_para()
251 static int stc3117_init(struct stc3117_data *data) in stc3117_init() argument
257 regmap_read(data->regmap, STC3117_ADDR_ID, &id); in stc3117_init()
261 data->cc_cnf = (data->battery_info.battery_capacity_mah * in stc3117_init()
262 data->battery_info.sense_resistor * 250 + 6194) / 12389; in stc3117_init()
263 data->vm_cnf = (data->battery_info.battery_capacity_mah in stc3117_init()
267 data->presence = 1; in stc3117_init()
269 /* Read RAM data */ in stc3117_init()
270 ret = ram_read(data); in stc3117_init()
274 if (data->ram_data.reg.testword != STC3117_RAM_TESTWORD || in stc3117_init()
275 (crc8(stc3117_crc_table, data->ram_data.ram_bytes, in stc3117_init()
277 data->ram_data.reg.testword = STC3117_RAM_TESTWORD; in stc3117_init()
278 data->ram_data.reg.cc_cnf = data->cc_cnf; in stc3117_init()
279 data->ram_data.reg.vm_cnf = data->vm_cnf; in stc3117_init()
280 data->ram_data.reg.crc = crc8(stc3117_crc_table, in stc3117_init()
281 data->ram_data.ram_bytes, in stc3117_init()
284 ret = regmap_read(data->regmap, STC3117_ADDR_OCV_H, &ocv_m); in stc3117_init()
286 ret |= regmap_read(data->regmap, STC3117_ADDR_OCV_L, &ocv_l); in stc3117_init()
288 ret |= stc3117_set_para(data); in stc3117_init()
290 ret |= regmap_write(data->regmap, STC3117_ADDR_OCV_H, ocv_m); in stc3117_init()
292 ret |= regmap_write(data->regmap, STC3117_ADDR_OCV_L, ocv_l); in stc3117_init()
296 ret = regmap_read(data->regmap, STC3117_ADDR_CTRL, &ctrl); in stc3117_init()
302 ret = regmap_read(data->regmap, in stc3117_init()
305 ret |= regmap_read(data->regmap, in stc3117_init()
308 ret |= stc3117_set_para(data); in stc3117_init()
310 ret |= regmap_write(data->regmap, in stc3117_init()
313 ret |= regmap_write(data->regmap, in stc3117_init()
318 ret = stc3117_set_para(data); in stc3117_init()
319 ret |= regmap_write(data->regmap, STC3117_ADDR_SOC_H, in stc3117_init()
320 (data->ram_data.reg.hrsoc >> 8 & 0xFF)); in stc3117_init()
321 ret |= regmap_write(data->regmap, STC3117_ADDR_SOC_L, in stc3117_init()
322 (data->ram_data.reg.hrsoc & 0xFF)); in stc3117_init()
328 data->ram_data.reg.state = STC3117_INIT; in stc3117_init()
329 data->ram_data.reg.crc = crc8(stc3117_crc_table, in stc3117_init()
330 data->ram_data.ram_bytes, in stc3117_init()
332 ret = ram_write(data); in stc3117_init()
339 static int stc3117_task(struct stc3117_data *data) in stc3117_task() argument
345 regmap_read(data->regmap, STC3117_ADDR_ID, &id); in stc3117_task()
347 data->presence = 0; in stc3117_task()
351 stc3117_get_battery_data(data); in stc3117_task()
353 /* Read RAM data */ in stc3117_task()
354 ret = ram_read(data); in stc3117_task()
358 if (data->ram_data.reg.testword != STC3117_RAM_TESTWORD || in stc3117_task()
359 (crc8(stc3117_crc_table, data->ram_data.ram_bytes, in stc3117_task()
361 data->ram_data.reg.testword = STC3117_RAM_TESTWORD; in stc3117_task()
362 data->ram_data.reg.cc_cnf = data->cc_cnf; in stc3117_task()
363 data->ram_data.reg.vm_cnf = data->vm_cnf; in stc3117_task()
364 data->ram_data.reg.crc = crc8(stc3117_crc_table, in stc3117_task()
365 data->ram_data.ram_bytes, in stc3117_task()
367 data->ram_data.reg.state = STC3117_INIT; in stc3117_task()
371 ret = regmap_read(data->regmap, STC3117_ADDR_CTRL, &mode); in stc3117_task()
373 data->presence = 0; in stc3117_task()
374 data->ram_data.reg.testword = 0; in stc3117_task()
375 data->ram_data.reg.state = STC3117_INIT; in stc3117_task()
376 ret = ram_write(data); in stc3117_task()
377 ret |= regmap_write(data->regmap, STC3117_ADDR_CTRL, STC3117_PORDET); in stc3117_task()
382 data->presence = 1; in stc3117_task()
384 ret = regmap_read(data->regmap, STC3117_ADDR_MODE, &mode); in stc3117_task()
388 if (data->ram_data.reg.state > STC3117_INIT) { in stc3117_task()
389 ret = stc3117_set_para(data); in stc3117_task()
391 ret |= regmap_write(data->regmap, STC3117_ADDR_SOC_H, in stc3117_task()
392 (data->ram_data.reg.hrsoc >> 8 & 0xFF)); in stc3117_task()
393 ret |= regmap_write(data->regmap, STC3117_ADDR_SOC_L, in stc3117_task()
394 (data->ram_data.reg.hrsoc & 0xFF)); in stc3117_task()
398 ret = regmap_read(data->regmap, STC3117_ADDR_OCV_H, &ocv_m); in stc3117_task()
400 ret |= regmap_read(data->regmap, STC3117_ADDR_OCV_L, &ocv_l); in stc3117_task()
402 ret |= stc3117_set_para(data); in stc3117_task()
404 ret |= regmap_write(data->regmap, STC3117_ADDR_OCV_H, ocv_m); in stc3117_task()
406 ret |= regmap_write(data->regmap, STC3117_ADDR_OCV_L, ocv_l); in stc3117_task()
410 data->ram_data.reg.state = STC3117_INIT; in stc3117_task()
413 regmap_read(data->regmap, STC3117_ADDR_COUNTER_L, &count_l); in stc3117_task()
414 regmap_read(data->regmap, STC3117_ADDR_COUNTER_H, &count_m); in stc3117_task()
419 if (data->ram_data.reg.state == STC3117_INIT && count_m > 4) { in stc3117_task()
420 data->avg_voltage = data->voltage; in stc3117_task()
421 data->avg_current = data->batt_current; in stc3117_task()
422 data->ram_data.reg.state = STC3117_RUNNING; in stc3117_task()
425 if (data->ram_data.reg.state != STC3117_RUNNING) { in stc3117_task()
426 data->batt_current = -ENODATA; in stc3117_task()
427 data->temp = -ENODATA; in stc3117_task()
429 if (data->voltage < APP_CUTOFF_VOLTAGE) in stc3117_task()
430 data->soc = -ENODATA; in stc3117_task()
433 data->avg_current = -ENODATA; in stc3117_task()
434 data->batt_current = -ENODATA; in stc3117_task()
438 data->ram_data.reg.hrsoc = data->hrsoc; in stc3117_task()
439 data->ram_data.reg.soc = (data->soc + 5) / 10; in stc3117_task()
440 data->ram_data.reg.crc = crc8(stc3117_crc_table, in stc3117_task()
441 data->ram_data.ram_bytes, in stc3117_task()
444 ret = ram_write(data); in stc3117_task()
452 struct stc3117_data *data = in fuel_gauge_update_work() local
455 stc3117_task(data); in fuel_gauge_update_work()
458 schedule_delayed_work(&data->update_work, msecs_to_jiffies(2000)); in fuel_gauge_update_work()
464 struct stc3117_data *data = power_supply_get_drvdata(psy); in stc3117_get_property() local
468 if (data->soc > BATTERY_FULL) in stc3117_get_property()
470 else if (data->batt_current < 0) in stc3117_get_property()
472 else if (data->batt_current > 0) in stc3117_get_property()
478 val->intval = data->voltage; in stc3117_get_property()
481 val->intval = data->batt_current; in stc3117_get_property()
484 val->intval = data->ocv; in stc3117_get_property()
487 val->intval = data->avg_current; in stc3117_get_property()
490 val->intval = data->soc; in stc3117_get_property()
493 val->intval = data->temp; in stc3117_get_property()
496 val->intval = data->presence; in stc3117_get_property()
530 struct stc3117_data *data; in stc3117_probe() local
535 data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL); in stc3117_probe()
536 if (!data) in stc3117_probe()
539 data->client = client; in stc3117_probe()
540 data->regmap = devm_regmap_init_i2c(client, &stc3117_regmap_config); in stc3117_probe()
541 if (IS_ERR(data->regmap)) in stc3117_probe()
542 return PTR_ERR(data->regmap); in stc3117_probe()
544 psy_cfg.drv_data = data; in stc3117_probe()
549 data->battery = devm_power_supply_register(&client->dev, in stc3117_probe()
551 if (IS_ERR(data->battery)) in stc3117_probe()
552 return dev_err_probe(&client->dev, PTR_ERR(data->battery), in stc3117_probe()
556 &data->battery_info.sense_resistor); in stc3117_probe()
560 data->battery_info.sense_resistor = data->battery_info.sense_resistor / 1000; in stc3117_probe()
562 ret = power_supply_get_battery_info(data->battery, &info); in stc3117_probe()
567 data->battery_info.battery_capacity_mah = info->charge_full_design_uah / 1000; in stc3117_probe()
568 data->battery_info.voltage_min_mv = info->voltage_min_design_uv / 1000; in stc3117_probe()
569 data->battery_info.voltage_max_mv = info->voltage_max_design_uv / 1000; in stc3117_probe()
571 ret = stc3117_init(data); in stc3117_probe()
576 ret = devm_delayed_work_autocancel(&client->dev, &data->update_work, in stc3117_probe()
581 schedule_delayed_work(&data->update_work, 0); in stc3117_probe()