Lines Matching refs:charger
142 struct da9030_charger *charger = s->private; in bat_debug_show() local
144 seq_printf(s, "charger is %s\n", charger->is_on ? "on" : "off"); in bat_debug_show()
145 if (charger->chdet) { in bat_debug_show()
147 charger->mA, charger->mV); in bat_debug_show()
151 charger->adc.vbat_res, in bat_debug_show()
152 da9030_reg_to_mV(charger->adc.vbat_res)); in bat_debug_show()
154 charger->adc.vbatmin_res, in bat_debug_show()
155 da9030_reg_to_mV(charger->adc.vbatmin_res)); in bat_debug_show()
157 charger->adc.vbatmintxon, in bat_debug_show()
158 da9030_reg_to_mV(charger->adc.vbatmintxon)); in bat_debug_show()
160 charger->adc.ichmax_res, in bat_debug_show()
161 da9030_reg_to_mV(charger->adc.ichmax_res)); in bat_debug_show()
163 charger->adc.ichmin_res, in bat_debug_show()
164 da9030_reg_to_mA(charger->adc.ichmin_res)); in bat_debug_show()
166 charger->adc.ichaverage_res, in bat_debug_show()
167 da9030_reg_to_mA(charger->adc.ichaverage_res)); in bat_debug_show()
169 charger->adc.vchmax_res, in bat_debug_show()
170 da9030_reg_to_mA(charger->adc.vchmax_res)); in bat_debug_show()
172 charger->adc.vchmin_res, in bat_debug_show()
173 da9030_reg_to_mV(charger->adc.vchmin_res)); in bat_debug_show()
190 static struct dentry *da9030_bat_create_debugfs(struct da9030_charger *charger) in da9030_bat_create_debugfs() argument
192 charger->debug_file = debugfs_create_file("charger", 0666, NULL, in da9030_bat_create_debugfs()
193 charger, &bat_debug_fops); in da9030_bat_create_debugfs()
194 return charger->debug_file; in da9030_bat_create_debugfs()
197 static void da9030_bat_remove_debugfs(struct da9030_charger *charger) in da9030_bat_remove_debugfs() argument
199 debugfs_remove(charger->debug_file); in da9030_bat_remove_debugfs()
202 static inline struct dentry *da9030_bat_create_debugfs(struct da9030_charger *charger) in da9030_bat_create_debugfs() argument
206 static inline void da9030_bat_remove_debugfs(struct da9030_charger *charger) in da9030_bat_remove_debugfs() argument
211 static inline void da9030_read_adc(struct da9030_charger *charger, in da9030_read_adc() argument
214 da903x_reads(charger->master, DA9030_VBAT_RES, in da9030_read_adc()
218 static void da9030_charger_update_state(struct da9030_charger *charger) in da9030_charger_update_state() argument
222 da903x_read(charger->master, DA9030_CHARGE_CONTROL, &val); in da9030_charger_update_state()
223 charger->is_on = (val & DA9030_CHRG_CHARGER_ENABLE) ? 1 : 0; in da9030_charger_update_state()
224 charger->mA = ((val >> 3) & 0xf) * 100; in da9030_charger_update_state()
225 charger->mV = (val & 0x7) * 50 + 4000; in da9030_charger_update_state()
227 da9030_read_adc(charger, &charger->adc); in da9030_charger_update_state()
228 da903x_read(charger->master, DA9030_FAULT_LOG, &charger->fault); in da9030_charger_update_state()
229 charger->chdet = da903x_query_status(charger->master, in da9030_charger_update_state()
233 static void da9030_set_charge(struct da9030_charger *charger, int on) in da9030_set_charge() argument
239 val |= (charger->charge_milliamp / 100) << 3; in da9030_set_charge()
240 val |= (charger->charge_millivolt - 4000) / 50; in da9030_set_charge()
241 charger->is_on = 1; in da9030_set_charge()
244 charger->is_on = 0; in da9030_set_charge()
247 da903x_write(charger->master, DA9030_CHARGE_CONTROL, val); in da9030_set_charge()
249 power_supply_changed(charger->psy); in da9030_set_charge()
252 static void da9030_charger_check_state(struct da9030_charger *charger) in da9030_charger_check_state() argument
254 da9030_charger_update_state(charger); in da9030_charger_check_state()
257 if (!charger->is_on) { in da9030_charger_check_state()
258 if ((charger->chdet) && in da9030_charger_check_state()
259 (charger->adc.vbat_res < in da9030_charger_check_state()
260 charger->thresholds.vbat_charge_start)) { in da9030_charger_check_state()
261 da9030_set_charge(charger, 1); in da9030_charger_check_state()
265 if (!charger->chdet) { in da9030_charger_check_state()
266 da9030_set_charge(charger, 0); in da9030_charger_check_state()
270 if (charger->adc.vbat_res >= in da9030_charger_check_state()
271 charger->thresholds.vbat_charge_stop) { in da9030_charger_check_state()
272 da9030_set_charge(charger, 0); in da9030_charger_check_state()
273 da903x_write(charger->master, DA9030_VBATMON, in da9030_charger_check_state()
274 charger->thresholds.vbat_charge_restart); in da9030_charger_check_state()
275 } else if (charger->adc.vbat_res > in da9030_charger_check_state()
276 charger->thresholds.vbat_low) { in da9030_charger_check_state()
280 da903x_write(charger->master, DA9030_VBATMON, in da9030_charger_check_state()
281 charger->thresholds.vbat_low); in da9030_charger_check_state()
283 if (charger->adc.vchmax_res > charger->thresholds.vcharge_max || in da9030_charger_check_state()
284 charger->adc.vchmin_res < charger->thresholds.vcharge_min || in da9030_charger_check_state()
286 charger->adc.tbat_res < charger->thresholds.tbat_high || in da9030_charger_check_state()
287 charger->adc.tbat_res > charger->thresholds.tbat_low) { in da9030_charger_check_state()
289 da9030_set_charge(charger, 0); in da9030_charger_check_state()
296 struct da9030_charger *charger; in da9030_charging_monitor() local
298 charger = container_of(work, struct da9030_charger, work.work); in da9030_charging_monitor()
300 da9030_charger_check_state(charger); in da9030_charging_monitor()
303 schedule_delayed_work(&charger->work, charger->interval); in da9030_charging_monitor()
317 static void da9030_battery_check_status(struct da9030_charger *charger, in da9030_battery_check_status() argument
320 if (charger->chdet) { in da9030_battery_check_status()
321 if (charger->is_on) in da9030_battery_check_status()
330 static void da9030_battery_check_health(struct da9030_charger *charger, in da9030_battery_check_health() argument
333 if (charger->fault & DA9030_FAULT_LOG_OVER_TEMP) in da9030_battery_check_health()
335 else if (charger->fault & DA9030_FAULT_LOG_VBAT_OVER) in da9030_battery_check_health()
345 struct da9030_charger *charger = power_supply_get_drvdata(psy); in da9030_battery_get_property() local
349 da9030_battery_check_status(charger, val); in da9030_battery_get_property()
352 da9030_battery_check_health(charger, val); in da9030_battery_get_property()
355 val->intval = charger->battery_info->technology; in da9030_battery_get_property()
358 val->intval = charger->battery_info->voltage_max_design; in da9030_battery_get_property()
361 val->intval = charger->battery_info->voltage_min_design; in da9030_battery_get_property()
364 val->intval = da9030_reg_to_mV(charger->adc.vbat_res) * 1000; in da9030_battery_get_property()
368 da9030_reg_to_mA(charger->adc.ichaverage_res) * 1000; in da9030_battery_get_property()
371 val->strval = charger->battery_info->name; in da9030_battery_get_property()
380 static void da9030_battery_vbat_event(struct da9030_charger *charger) in da9030_battery_vbat_event() argument
382 da9030_read_adc(charger, &charger->adc); in da9030_battery_vbat_event()
384 if (charger->is_on) in da9030_battery_vbat_event()
387 if (charger->adc.vbat_res < charger->thresholds.vbat_low) { in da9030_battery_vbat_event()
389 da903x_write(charger->master, DA9030_VBATMON, in da9030_battery_vbat_event()
390 charger->thresholds.vbat_crit); in da9030_battery_vbat_event()
391 if (charger->battery_low) in da9030_battery_vbat_event()
392 charger->battery_low(); in da9030_battery_vbat_event()
393 } else if (charger->adc.vbat_res < in da9030_battery_vbat_event()
394 charger->thresholds.vbat_crit) { in da9030_battery_vbat_event()
396 if (charger->battery_critical) in da9030_battery_vbat_event()
397 charger->battery_critical(); in da9030_battery_vbat_event()
404 struct da9030_charger *charger = in da9030_battery_event() local
409 cancel_delayed_work_sync(&charger->work); in da9030_battery_event()
410 schedule_work(&charger->work.work); in da9030_battery_event()
413 da9030_battery_vbat_event(charger); in da9030_battery_event()
417 da9030_set_charge(charger, 0); in da9030_battery_event()
424 static void da9030_battery_convert_thresholds(struct da9030_charger *charger, in da9030_battery_convert_thresholds() argument
427 charger->thresholds.tbat_low = pdata->tbat_low; in da9030_battery_convert_thresholds()
428 charger->thresholds.tbat_high = pdata->tbat_high; in da9030_battery_convert_thresholds()
429 charger->thresholds.tbat_restart = pdata->tbat_restart; in da9030_battery_convert_thresholds()
431 charger->thresholds.vbat_low = in da9030_battery_convert_thresholds()
433 charger->thresholds.vbat_crit = in da9030_battery_convert_thresholds()
435 charger->thresholds.vbat_charge_start = in da9030_battery_convert_thresholds()
437 charger->thresholds.vbat_charge_stop = in da9030_battery_convert_thresholds()
439 charger->thresholds.vbat_charge_restart = in da9030_battery_convert_thresholds()
442 charger->thresholds.vcharge_min = in da9030_battery_convert_thresholds()
444 charger->thresholds.vcharge_max = in da9030_battery_convert_thresholds()
448 static void da9030_battery_setup_psy(struct da9030_charger *charger) in da9030_battery_setup_psy() argument
450 struct power_supply_desc *psy_desc = &charger->psy_desc; in da9030_battery_setup_psy()
451 struct power_supply_info *info = charger->battery_info; in da9030_battery_setup_psy()
462 static int da9030_battery_charger_init(struct da9030_charger *charger) in da9030_battery_charger_init() argument
467 v[0] = v[1] = charger->thresholds.vbat_low; in da9030_battery_charger_init()
468 v[2] = charger->thresholds.tbat_high; in da9030_battery_charger_init()
469 v[3] = charger->thresholds.tbat_restart; in da9030_battery_charger_init()
470 v[4] = charger->thresholds.tbat_low; in da9030_battery_charger_init()
472 ret = da903x_writes(charger->master, DA9030_VBATMON, 5, v); in da9030_battery_charger_init()
480 ret = da903x_write(charger->master, DA9030_ADC_MAN_CONTROL, in da9030_battery_charger_init()
487 return da903x_write(charger->master, DA9030_ADC_AUTO_CONTROL, in da9030_battery_charger_init()
496 struct da9030_charger *charger; in da9030_battery_probe() local
509 charger = devm_kzalloc(&pdev->dev, sizeof(*charger), GFP_KERNEL); in da9030_battery_probe()
510 if (charger == NULL) in da9030_battery_probe()
513 charger->master = pdev->dev.parent; in da9030_battery_probe()
517 charger->interval = msecs_to_jiffies( in da9030_battery_probe()
520 charger->charge_milliamp = pdata->charge_milliamp; in da9030_battery_probe()
521 charger->charge_millivolt = pdata->charge_millivolt; in da9030_battery_probe()
522 charger->battery_info = pdata->battery_info; in da9030_battery_probe()
523 charger->battery_low = pdata->battery_low; in da9030_battery_probe()
524 charger->battery_critical = pdata->battery_critical; in da9030_battery_probe()
526 da9030_battery_convert_thresholds(charger, pdata); in da9030_battery_probe()
528 ret = da9030_battery_charger_init(charger); in da9030_battery_probe()
532 INIT_DELAYED_WORK(&charger->work, da9030_charging_monitor); in da9030_battery_probe()
533 schedule_delayed_work(&charger->work, charger->interval); in da9030_battery_probe()
535 charger->nb.notifier_call = da9030_battery_event; in da9030_battery_probe()
536 ret = da903x_register_notifier(charger->master, &charger->nb, in da9030_battery_probe()
544 da9030_battery_setup_psy(charger); in da9030_battery_probe()
545 psy_cfg.drv_data = charger; in da9030_battery_probe()
546 charger->psy = power_supply_register(&pdev->dev, &charger->psy_desc, in da9030_battery_probe()
548 if (IS_ERR(charger->psy)) { in da9030_battery_probe()
549 ret = PTR_ERR(charger->psy); in da9030_battery_probe()
553 charger->debug_file = da9030_bat_create_debugfs(charger); in da9030_battery_probe()
554 platform_set_drvdata(pdev, charger); in da9030_battery_probe()
558 da903x_unregister_notifier(charger->master, &charger->nb, in da9030_battery_probe()
562 cancel_delayed_work(&charger->work); in da9030_battery_probe()
570 struct da9030_charger *charger = platform_get_drvdata(dev); in da9030_battery_remove() local
572 da9030_bat_remove_debugfs(charger); in da9030_battery_remove()
574 da903x_unregister_notifier(charger->master, &charger->nb, in da9030_battery_remove()
577 cancel_delayed_work_sync(&charger->work); in da9030_battery_remove()
578 da9030_set_charge(charger, 0); in da9030_battery_remove()
579 power_supply_unregister(charger->psy); in da9030_battery_remove()