Lines Matching refs:cg

183 static int rk818_reg_read(struct rk818_charger *cg, u8 reg)  in rk818_reg_read()  argument
187 ret = regmap_read(cg->regmap, reg, &val); in rk818_reg_read()
189 dev_err(cg->dev, "i2c read reg: 0x%2x failed\n", reg); in rk818_reg_read()
194 static int rk818_reg_write(struct rk818_charger *cg, u8 reg, u8 buf) in rk818_reg_write() argument
198 ret = regmap_write(cg->regmap, reg, buf); in rk818_reg_write()
200 dev_err(cg->dev, "i2c write reg: 0x%2x failed\n", reg); in rk818_reg_write()
205 static int rk818_reg_set_bits(struct rk818_charger *cg, u8 reg, u8 mask, u8 buf) in rk818_reg_set_bits() argument
209 ret = regmap_update_bits(cg->regmap, reg, mask, buf); in rk818_reg_set_bits()
211 dev_err(cg->dev, "i2c set reg: 0x%2x failed\n", reg); in rk818_reg_set_bits()
216 static int rk818_reg_clear_bits(struct rk818_charger *cg, u8 reg, u8 mask) in rk818_reg_clear_bits() argument
220 ret = regmap_update_bits(cg->regmap, reg, mask, 0); in rk818_reg_clear_bits()
222 dev_err(cg->dev, "i2c clr reg: 0x%02x failed\n", reg); in rk818_reg_clear_bits()
227 static int rk818_cg_online(struct rk818_charger *cg) in rk818_cg_online() argument
229 return (cg->ac_in | cg->usb_in | cg->dc_in); in rk818_cg_online()
232 static int rk818_cg_get_dsoc(struct rk818_charger *cg) in rk818_cg_get_dsoc() argument
234 return rk818_reg_read(cg, RK818_SOC_REG); in rk818_cg_get_dsoc()
237 static int rk818_cg_get_avg_current(struct rk818_charger *cg) in rk818_cg_get_avg_current() argument
241 val |= rk818_reg_read(cg, RK818_BAT_CUR_AVG_REGL) << 0; in rk818_cg_get_avg_current()
242 val |= rk818_reg_read(cg, RK818_BAT_CUR_AVG_REGH) << 8; in rk818_cg_get_avg_current()
246 cur = val * cg->res_div * 1506 / 1000; in rk818_cg_get_avg_current()
251 static int rk818_cg_get_ts2_voltage(struct rk818_charger *cg) in rk818_cg_get_ts2_voltage() argument
256 val |= rk818_reg_read(cg, RK818_TS2_ADC_REGL) << 0; in rk818_cg_get_ts2_voltage()
257 val |= rk818_reg_read(cg, RK818_TS2_ADC_REGH) << 8; in rk818_cg_get_ts2_voltage()
260 voltage = val * 2200 * cg->pdata->ts2_vol_multi / 4095; in rk818_cg_get_ts2_voltage()
276 static int rk818_cg_lowpwr_check(struct rk818_charger *cg) in rk818_cg_lowpwr_check() argument
282 buf = rk818_reg_read(cg, RK818_TS_CTRL_REG); in rk818_cg_lowpwr_check()
286 dsoc = rk818_cg_get_dsoc(cg); in rk818_cg_lowpwr_check()
287 current_avg = rk818_cg_get_avg_current(cg); in rk818_cg_lowpwr_check()
309 struct rk818_charger *cg = data; in rk818_cg_get_bat_psy() local
313 cg->bat_psy = psy; in rk818_cg_get_bat_psy()
320 static void rk818_cg_get_psy(struct rk818_charger *cg) in rk818_cg_get_psy() argument
322 if (!cg->bat_psy) in rk818_cg_get_psy()
323 class_for_each_device(power_supply_class, NULL, (void *)cg, in rk818_cg_get_psy()
327 static int rk818_cg_get_bat_max_cur(struct rk818_charger *cg) in rk818_cg_get_bat_max_cur() argument
332 rk818_cg_get_psy(cg); in rk818_cg_get_bat_max_cur()
334 if (!cg->bat_psy) in rk818_cg_get_bat_max_cur()
335 return cg->pdata->max_chrg_current; in rk818_cg_get_bat_max_cur()
337 ret = cg->bat_psy->desc->get_property(cg->bat_psy, in rk818_cg_get_bat_max_cur()
343 return cg->pdata->max_chrg_current; in rk818_cg_get_bat_max_cur()
346 static int rk818_cg_get_bat_max_vol(struct rk818_charger *cg) in rk818_cg_get_bat_max_vol() argument
351 rk818_cg_get_psy(cg); in rk818_cg_get_bat_max_vol()
353 if (!cg->bat_psy) in rk818_cg_get_bat_max_vol()
354 return cg->pdata->max_chrg_voltage; in rk818_cg_get_bat_max_vol()
356 ret = cg->bat_psy->desc->get_property(cg->bat_psy, in rk818_cg_get_bat_max_vol()
362 return cg->pdata->max_chrg_voltage; in rk818_cg_get_bat_max_vol()
383 struct rk818_charger *cg = power_supply_get_drvdata(psy); in rk818_cg_ac_get_property() local
386 if (rk818_cg_online(cg)) in rk818_cg_ac_get_property()
387 fake_offline = rk818_cg_lowpwr_check(cg); in rk818_cg_ac_get_property()
391 if (cg->pdata->virtual_power) in rk818_cg_ac_get_property()
396 val->intval = (cg->ac_in | cg->dc_in); in rk818_cg_ac_get_property()
401 if (cg->pdata->virtual_power) in rk818_cg_ac_get_property()
406 val->intval = cg->prop_status; in rk818_cg_ac_get_property()
411 val->intval = rk818_cg_get_bat_max_vol(cg); in rk818_cg_ac_get_property()
414 val->intval = rk818_cg_get_bat_max_cur(cg); in rk818_cg_ac_get_property()
428 struct rk818_charger *cg = power_supply_get_drvdata(psy); in rk818_cg_usb_get_property() local
431 if (rk818_cg_online(cg)) in rk818_cg_usb_get_property()
432 fake_offline = rk818_cg_lowpwr_check(cg); in rk818_cg_usb_get_property()
436 if (cg->pdata->virtual_power) in rk818_cg_usb_get_property()
441 val->intval = cg->usb_in; in rk818_cg_usb_get_property()
446 if (cg->pdata->virtual_power) in rk818_cg_usb_get_property()
451 val->intval = cg->prop_status; in rk818_cg_usb_get_property()
456 val->intval = rk818_cg_get_bat_max_vol(cg); in rk818_cg_usb_get_property()
459 val->intval = rk818_cg_get_bat_max_cur(cg); in rk818_cg_usb_get_property()
485 static int rk818_cg_init_power_supply(struct rk818_charger *cg) in rk818_cg_init_power_supply() argument
487 struct power_supply_config psy_cfg = { .drv_data = cg, }; in rk818_cg_init_power_supply()
489 cg->usb_psy = devm_power_supply_register(cg->dev, &rk818_usb_desc, in rk818_cg_init_power_supply()
491 if (IS_ERR(cg->usb_psy)) { in rk818_cg_init_power_supply()
492 dev_err(cg->dev, "register usb power supply fail\n"); in rk818_cg_init_power_supply()
493 return PTR_ERR(cg->usb_psy); in rk818_cg_init_power_supply()
496 cg->ac_psy = devm_power_supply_register(cg->dev, &rk818_ac_desc, in rk818_cg_init_power_supply()
498 if (IS_ERR(cg->ac_psy)) { in rk818_cg_init_power_supply()
499 dev_err(cg->dev, "register ac power supply fail\n"); in rk818_cg_init_power_supply()
500 return PTR_ERR(cg->ac_psy); in rk818_cg_init_power_supply()
506 static void rk818_cg_pr_info(struct rk818_charger *cg) in rk818_cg_pr_info() argument
510 usb_ctrl = rk818_reg_read(cg, RK818_USB_CTRL_REG); in rk818_cg_pr_info()
511 chrg_ctrl1 = rk818_reg_read(cg, RK818_CHRG_CTRL_REG1); in rk818_cg_pr_info()
513 cg->ac_in, cg->usb_in, cg->dc_in, cg->otg_in, cg->otg_pmic5v, in rk818_cg_pr_info()
515 chrg_cur_sel_array[chrg_ctrl1 & 0x0f] * cg->res_div, in rk818_cg_pr_info()
517 cg->pdata->virtual_power); in rk818_cg_pr_info()
520 static bool is_battery_exist(struct rk818_charger *cg) in is_battery_exist() argument
522 return (rk818_reg_read(cg, RK818_SUP_STS_REG) & BAT_EXS) ? true : false; in is_battery_exist()
525 static void rk818_cg_set_chrg_current(struct rk818_charger *cg, in rk818_cg_set_chrg_current() argument
530 chrg_ctrl_reg1 = rk818_reg_read(cg, RK818_CHRG_CTRL_REG1); in rk818_cg_set_chrg_current()
533 rk818_reg_write(cg, RK818_CHRG_CTRL_REG1, chrg_ctrl_reg1); in rk818_cg_set_chrg_current()
536 static void rk818_cg_set_input_current(struct rk818_charger *cg, in rk818_cg_set_input_current() argument
541 if (cg->pdata->virtual_power) { in rk818_cg_set_input_current()
543 input_current = cg->chrg_input; in rk818_cg_set_input_current()
546 usb_ctrl = rk818_reg_read(cg, RK818_USB_CTRL_REG); in rk818_cg_set_input_current()
549 rk818_reg_write(cg, RK818_USB_CTRL_REG, usb_ctrl); in rk818_cg_set_input_current()
552 static void rk818_cg_set_finish_sig(struct rk818_charger *cg, int mode) in rk818_cg_set_finish_sig() argument
556 buf = rk818_reg_read(cg, RK818_CHRG_CTRL_REG3); in rk818_cg_set_finish_sig()
559 rk818_reg_write(cg, RK818_CHRG_CTRL_REG3, buf); in rk818_cg_set_finish_sig()
564 struct rk818_charger *cg; in rk818_cg_finish_sig_work() local
566 cg = container_of(work, struct rk818_charger, finish_sig_work.work); in rk818_cg_finish_sig_work()
567 if (rk818_cg_online(cg)) in rk818_cg_finish_sig_work()
568 rk818_cg_set_finish_sig(cg, CHRG_FINISH_DIG_SIGNAL); in rk818_cg_finish_sig_work()
570 rk818_cg_set_finish_sig(cg, CHRG_FINISH_ANA_SIGNAL); in rk818_cg_finish_sig_work()
573 static void rk818_cg_set_chrg_param(struct rk818_charger *cg, in rk818_cg_set_chrg_param() argument
580 cg->usb_in = 0; in rk818_cg_set_chrg_param()
581 cg->ac_in = 0; in rk818_cg_set_chrg_param()
582 if (cg->dc_in == 0) { in rk818_cg_set_chrg_param()
583 cg->prop_status = POWER_SUPPLY_STATUS_DISCHARGING; in rk818_cg_set_chrg_param()
584 rk818_cg_set_chrg_current(cg, cg->chrg_current); in rk818_cg_set_chrg_param()
585 rk818_cg_set_input_current(cg, INPUT_CUR450MA); in rk818_cg_set_chrg_param()
587 power_supply_changed(cg->usb_psy); in rk818_cg_set_chrg_param()
588 power_supply_changed(cg->ac_psy); in rk818_cg_set_chrg_param()
591 cg->usb_in = 1; in rk818_cg_set_chrg_param()
592 cg->ac_in = 0; in rk818_cg_set_chrg_param()
593 cg->prop_status = POWER_SUPPLY_STATUS_CHARGING; in rk818_cg_set_chrg_param()
594 if (cg->dc_in == 0) { in rk818_cg_set_chrg_param()
595 rk818_cg_set_chrg_current(cg, cg->chrg_current); in rk818_cg_set_chrg_param()
596 rk818_cg_set_input_current(cg, INPUT_CUR450MA); in rk818_cg_set_chrg_param()
598 power_supply_changed(cg->usb_psy); in rk818_cg_set_chrg_param()
599 power_supply_changed(cg->ac_psy); in rk818_cg_set_chrg_param()
602 cg->usb_in = 1; in rk818_cg_set_chrg_param()
603 cg->ac_in = 0; in rk818_cg_set_chrg_param()
604 cg->prop_status = POWER_SUPPLY_STATUS_CHARGING; in rk818_cg_set_chrg_param()
605 if (cg->dc_in == 0) { in rk818_cg_set_chrg_param()
606 rk818_cg_set_chrg_current(cg, cg->chrg_current); in rk818_cg_set_chrg_param()
607 rk818_cg_set_input_current(cg, INPUT_CUR1500MA); in rk818_cg_set_chrg_param()
609 power_supply_changed(cg->usb_psy); in rk818_cg_set_chrg_param()
610 power_supply_changed(cg->ac_psy); in rk818_cg_set_chrg_param()
613 cg->ac_in = 1; in rk818_cg_set_chrg_param()
614 cg->usb_in = 0; in rk818_cg_set_chrg_param()
615 cg->prop_status = POWER_SUPPLY_STATUS_CHARGING; in rk818_cg_set_chrg_param()
617 if (cg->pdata->ts2_vol_multi) { in rk818_cg_set_chrg_param()
618 rk818_cg_set_chrg_current(cg, cg->chrg_current); in rk818_cg_set_chrg_param()
619 rk818_cg_set_input_current(cg, INPUT_CUR450MA); in rk818_cg_set_chrg_param()
620 queue_delayed_work(cg->ts2_wq, in rk818_cg_set_chrg_param()
621 &cg->ts2_vol_work, in rk818_cg_set_chrg_param()
624 rk818_cg_set_chrg_current(cg, cg->chrg_current); in rk818_cg_set_chrg_param()
625 rk818_cg_set_input_current(cg, cg->chrg_input); in rk818_cg_set_chrg_param()
628 rk818_cg_set_chrg_current(cg, cg->chrg_current); in rk818_cg_set_chrg_param()
629 rk818_cg_set_input_current(cg, INPUT_CUR1500MA); in rk818_cg_set_chrg_param()
631 power_supply_changed(cg->usb_psy); in rk818_cg_set_chrg_param()
632 power_supply_changed(cg->ac_psy); in rk818_cg_set_chrg_param()
635 cg->dc_in = 1; in rk818_cg_set_chrg_param()
636 cg->prop_status = POWER_SUPPLY_STATUS_CHARGING; in rk818_cg_set_chrg_param()
637 if (cg->pdata->ts2_vol_multi) { in rk818_cg_set_chrg_param()
638 rk818_cg_set_chrg_current(cg, cg->chrg_current); in rk818_cg_set_chrg_param()
639 rk818_cg_set_input_current(cg, INPUT_CUR450MA); in rk818_cg_set_chrg_param()
640 queue_delayed_work(cg->ts2_wq, in rk818_cg_set_chrg_param()
641 &cg->ts2_vol_work, in rk818_cg_set_chrg_param()
644 rk818_cg_set_chrg_current(cg, cg->chrg_current); in rk818_cg_set_chrg_param()
645 rk818_cg_set_input_current(cg, cg->chrg_input); in rk818_cg_set_chrg_param()
647 power_supply_changed(cg->usb_psy); in rk818_cg_set_chrg_param()
648 power_supply_changed(cg->ac_psy); in rk818_cg_set_chrg_param()
651 cg->dc_in = 0; in rk818_cg_set_chrg_param()
652 buf = rk818_reg_read(cg, RK818_VB_MON_REG); in rk818_cg_set_chrg_param()
654 cg->ac_in = 0; in rk818_cg_set_chrg_param()
655 cg->usb_in = 0; in rk818_cg_set_chrg_param()
656 cg->prop_status = POWER_SUPPLY_STATUS_DISCHARGING; in rk818_cg_set_chrg_param()
657 rk818_cg_set_chrg_current(cg, cg->chrg_current); in rk818_cg_set_chrg_param()
658 rk818_cg_set_input_current(cg, INPUT_CUR450MA); in rk818_cg_set_chrg_param()
659 } else if (cg->usb_in) { in rk818_cg_set_chrg_param()
660 rk818_cg_set_chrg_current(cg, cg->chrg_current); in rk818_cg_set_chrg_param()
661 rk818_cg_set_input_current(cg, INPUT_CUR450MA); in rk818_cg_set_chrg_param()
662 cg->prop_status = POWER_SUPPLY_STATUS_CHARGING; in rk818_cg_set_chrg_param()
664 power_supply_changed(cg->usb_psy); in rk818_cg_set_chrg_param()
665 power_supply_changed(cg->ac_psy); in rk818_cg_set_chrg_param()
668 cg->prop_status = POWER_SUPPLY_STATUS_DISCHARGING; in rk818_cg_set_chrg_param()
672 cg->charger_changed = 1; in rk818_cg_set_chrg_param()
674 if (rk818_cg_online(cg) && rk818_cg_get_dsoc(cg) == 100) in rk818_cg_set_chrg_param()
675 cg->prop_status = POWER_SUPPLY_STATUS_FULL; in rk818_cg_set_chrg_param()
677 if (cg->finish_sig_wq) in rk818_cg_set_chrg_param()
678 queue_delayed_work(cg->finish_sig_wq, &cg->finish_sig_work, in rk818_cg_set_chrg_param()
682 static void rk818_cg_set_otg_in(struct rk818_charger *cg, int online) in rk818_cg_set_otg_in() argument
684 cg->otg_in = online; in rk818_cg_set_otg_in()
687 static void rk818_cg_set_otg_power(struct rk818_charger *cg, int state) in rk818_cg_set_otg_power() argument
693 if (cg->otg_pmic5v) { in rk818_cg_set_otg_power()
696 if (IS_ERR(cg->otg5v_rdev)) { in rk818_cg_set_otg_power()
701 if (!regulator_is_enabled(cg->otg5v_rdev)) { in rk818_cg_set_otg_power()
702 ret = regulator_enable(cg->otg5v_rdev); in rk818_cg_set_otg_power()
709 cg->otg_pmic5v = 1; in rk818_cg_set_otg_power()
710 disable_irq(cg->plugin_irq); in rk818_cg_set_otg_power()
711 disable_irq(cg->plugout_irq); in rk818_cg_set_otg_power()
717 if (!cg->otg_pmic5v) { in rk818_cg_set_otg_power()
720 if (IS_ERR(cg->otg5v_rdev)) { in rk818_cg_set_otg_power()
725 if (regulator_is_enabled(cg->otg5v_rdev)) { in rk818_cg_set_otg_power()
726 ret = regulator_disable(cg->otg5v_rdev); in rk818_cg_set_otg_power()
733 cg->otg_pmic5v = 0; in rk818_cg_set_otg_power()
734 enable_irq(cg->plugin_irq); in rk818_cg_set_otg_power()
735 enable_irq(cg->plugout_irq); in rk818_cg_set_otg_power()
740 dev_err(cg->dev, "error otg type\n"); in rk818_cg_set_otg_power()
745 static enum charger_t rk818_cg_get_dc_state(struct rk818_charger *cg) in rk818_cg_get_dc_state() argument
749 if (!gpio_is_valid(cg->pdata->dc_det_pin)) in rk818_cg_get_dc_state()
752 level = gpio_get_value(cg->pdata->dc_det_pin); in rk818_cg_get_dc_state()
754 return (level == cg->pdata->dc_det_level) ? in rk818_cg_get_dc_state()
761 struct rk818_charger *cg = container_of(work, in rk818_cg_dc_det_worker() local
764 charger = rk818_cg_get_dc_state(cg); in rk818_cg_dc_det_worker()
767 rk818_cg_set_chrg_param(cg, DC_TYPE_DC_CHARGER); in rk818_cg_dc_det_worker()
769 if (cg->otg_in && cg->pdata->power_dc2otg) { in rk818_cg_dc_det_worker()
771 rk818_cg_set_otg_power(cg, USB_OTG_POWER_OFF); in rk818_cg_dc_det_worker()
775 rk818_cg_set_chrg_param(cg, DC_TYPE_NONE_CHARGER); in rk818_cg_dc_det_worker()
777 if (cg->otg_in) in rk818_cg_dc_det_worker()
778 rk818_cg_set_otg_power(cg, USB_OTG_POWER_ON); in rk818_cg_dc_det_worker()
782 rk818_cg_pr_info(cg); in rk818_cg_dc_det_worker()
785 static u8 rk818_cg_decode_chrg_vol(struct rk818_charger *cg, u32 chrg_vol) in rk818_cg_decode_chrg_vol() argument
798 static u8 rk818_cg_decode_input_current(struct rk818_charger *cg, in rk818_cg_decode_input_current() argument
820 static u8 rk818_cg_decode_chrg_current(struct rk818_charger *cg, in rk818_cg_decode_chrg_current() argument
825 if (cg->pdata->sample_res == SAMPLE_RES_10MR) { in rk818_cg_decode_chrg_current()
827 chrg_current /= cg->res_div; in rk818_cg_decode_chrg_current()
841 static void rk818_cg_init_config(struct rk818_charger *cg) in rk818_cg_init_config() argument
845 cg->chrg_voltage = rk818_cg_decode_chrg_vol(cg, in rk818_cg_init_config()
846 cg->pdata->max_chrg_voltage); in rk818_cg_init_config()
847 cg->chrg_current = rk818_cg_decode_chrg_current(cg, in rk818_cg_init_config()
848 cg->pdata->max_chrg_current); in rk818_cg_init_config()
849 cg->chrg_input = rk818_cg_decode_input_current(cg, in rk818_cg_init_config()
850 cg->pdata->max_input_current); in rk818_cg_init_config()
852 sup_sts = rk818_reg_read(cg, RK818_SUP_STS_REG); in rk818_cg_init_config()
853 usb_ctrl = rk818_reg_read(cg, RK818_USB_CTRL_REG); in rk818_cg_init_config()
857 usb_ctrl |= cg->chrg_input; in rk818_cg_init_config()
858 chrg_ctrl1 = (CHRG_EN | cg->chrg_voltage | cg->chrg_current); in rk818_cg_init_config()
864 rk818_reg_write(cg, RK818_SUP_STS_REG, sup_sts); in rk818_cg_init_config()
865 rk818_reg_write(cg, RK818_USB_CTRL_REG, usb_ctrl); in rk818_cg_init_config()
866 rk818_reg_write(cg, RK818_CHRG_CTRL_REG1, chrg_ctrl1); in rk818_cg_init_config()
871 struct rk818_charger *cg; in rk818_ts2_vol_work() local
874 cg = container_of(work, struct rk818_charger, ts2_vol_work.work); in rk818_ts2_vol_work()
877 while (input_current < cg->chrg_input) { in rk818_ts2_vol_work()
879 ts2_vol = rk818_cg_get_ts2_voltage(cg); in rk818_ts2_vol_work()
890 input_current = cg->chrg_input; in rk818_ts2_vol_work()
891 rk818_cg_set_input_current(cg, input_current); in rk818_ts2_vol_work()
899 rk818_cg_set_input_current(cg, input_current); in rk818_ts2_vol_work()
916 rk818_cg_set_input_current(cg, input_current); in rk818_ts2_vol_work()
921 if (input_current != cg->chrg_input) in rk818_ts2_vol_work()
929 struct rk818_charger *cg = in rk818_cg_charger_evt_notifier() local
932 queue_delayed_work(cg->usb_charger_wq, &cg->usb_work, in rk818_cg_charger_evt_notifier()
941 struct rk818_charger *cg = in rk818_cg_discnt_evt_notfier() local
944 queue_delayed_work(cg->usb_charger_wq, &cg->discnt_work, in rk818_cg_discnt_evt_notfier()
953 struct rk818_charger *cg = in rk818_cg_host_evt_notifier() local
956 queue_delayed_work(cg->usb_charger_wq, &cg->host_work, in rk818_cg_host_evt_notifier()
965 struct rk818_charger *cg = in rk818_cg_bc_evt_notifier() local
968 cg->bc_event = event; in rk818_cg_bc_evt_notifier()
969 queue_delayed_work(cg->usb_charger_wq, &cg->usb_work, in rk818_cg_bc_evt_notifier()
977 struct rk818_charger *cg = container_of(work, in rk818_cg_bc_evt_worker() local
982 switch (cg->bc_event) { in rk818_cg_bc_evt_worker()
984 rk818_cg_set_chrg_param(cg, USB_TYPE_NONE_CHARGER); in rk818_cg_bc_evt_worker()
987 rk818_cg_set_chrg_param(cg, USB_TYPE_USB_CHARGER); in rk818_cg_bc_evt_worker()
990 rk818_cg_set_chrg_param(cg, USB_TYPE_AC_CHARGER); in rk818_cg_bc_evt_worker()
993 rk818_cg_set_chrg_param(cg, USB_TYPE_CDP_CHARGER); in rk818_cg_bc_evt_worker()
996 rk818_cg_set_otg_in(cg, ONLINE); in rk818_cg_bc_evt_worker()
997 if (cg->pdata->power_dc2otg && cg->dc_in) in rk818_cg_bc_evt_worker()
1000 rk818_cg_set_otg_power(cg, USB_OTG_POWER_ON); in rk818_cg_bc_evt_worker()
1003 rk818_cg_set_otg_in(cg, OFFLINE); in rk818_cg_bc_evt_worker()
1004 rk818_cg_set_otg_power(cg, USB_OTG_POWER_OFF); in rk818_cg_bc_evt_worker()
1010 CG_INFO("receive bc notifier event: %s..\n", event_name[cg->bc_event]); in rk818_cg_bc_evt_worker()
1012 rk818_cg_pr_info(cg); in rk818_cg_bc_evt_worker()
1017 struct rk818_charger *cg = container_of(work, in rk818_cg_irq_delay_work() local
1020 if (cg->plugin_trigger) { in rk818_cg_irq_delay_work()
1022 cg->plugin_trigger = 0; in rk818_cg_irq_delay_work()
1024 if (cg->pdata->extcon) in rk818_cg_irq_delay_work()
1025 queue_delayed_work(cg->usb_charger_wq, &cg->usb_work, in rk818_cg_irq_delay_work()
1027 } else if (cg->plugout_trigger) { in rk818_cg_irq_delay_work()
1029 cg->plugout_trigger = 0; in rk818_cg_irq_delay_work()
1030 rk818_cg_set_chrg_param(cg, USB_TYPE_NONE_CHARGER); in rk818_cg_irq_delay_work()
1031 rk818_cg_set_chrg_param(cg, DC_TYPE_NONE_CHARGER); in rk818_cg_irq_delay_work()
1033 rk818_cg_pr_info(cg); in rk818_cg_irq_delay_work()
1039 static irqreturn_t rk818_plug_in_isr(int irq, void *cg) in rk818_plug_in_isr() argument
1043 icg = (struct rk818_charger *)cg; in rk818_plug_in_isr()
1051 static irqreturn_t rk818_plug_out_isr(int irq, void *cg) in rk818_plug_out_isr() argument
1055 icg = (struct rk818_charger *)cg; in rk818_plug_out_isr()
1065 struct rk818_charger *cg = (struct rk818_charger *)charger; in rk818_dc_det_isr() local
1067 if (gpio_get_value(cg->pdata->dc_det_pin)) in rk818_dc_det_isr()
1072 queue_delayed_work(cg->dc_charger_wq, &cg->dc_work, in rk818_dc_det_isr()
1078 static int rk818_cg_init_irqs(struct rk818_charger *cg) in rk818_cg_init_irqs() argument
1080 struct rk808 *rk818 = cg->rk818; in rk818_cg_init_irqs()
1081 struct platform_device *pdev = cg->pdev; in rk818_cg_init_irqs()
1086 dev_err(cg->dev, "plug_in_irq request failed!\n"); in rk818_cg_init_irqs()
1092 dev_err(cg->dev, "plug_out_irq request failed!\n"); in rk818_cg_init_irqs()
1096 ret = devm_request_threaded_irq(cg->dev, plug_in_irq, NULL, in rk818_cg_init_irqs()
1099 "rk818_plug_in", cg); in rk818_cg_init_irqs()
1105 ret = devm_request_threaded_irq(cg->dev, plug_out_irq, NULL, in rk818_cg_init_irqs()
1108 "rk818_plug_out", cg); in rk818_cg_init_irqs()
1114 cg->plugin_irq = plug_in_irq; in rk818_cg_init_irqs()
1115 cg->plugout_irq = plug_out_irq; in rk818_cg_init_irqs()
1117 INIT_DELAYED_WORK(&cg->irq_work, rk818_cg_irq_delay_work); in rk818_cg_init_irqs()
1122 static int rk818_cg_init_dc(struct rk818_charger *cg) in rk818_cg_init_dc() argument
1128 cg->dc_charger_wq = alloc_ordered_workqueue("%s", in rk818_cg_init_dc()
1131 INIT_DELAYED_WORK(&cg->dc_work, rk818_cg_dc_det_worker); in rk818_cg_init_dc()
1132 cg->dc_charger = DC_TYPE_NONE_CHARGER; in rk818_cg_init_dc()
1134 if (!cg->pdata->support_dc_det) in rk818_cg_init_dc()
1137 ret = devm_gpio_request(cg->dev, cg->pdata->dc_det_pin, "rk818_dc_det"); in rk818_cg_init_dc()
1139 dev_err(cg->dev, "failed to request gpio %d\n", in rk818_cg_init_dc()
1140 cg->pdata->dc_det_pin); in rk818_cg_init_dc()
1144 ret = gpio_direction_input(cg->pdata->dc_det_pin); in rk818_cg_init_dc()
1146 dev_err(cg->dev, "failed to set gpio input\n"); in rk818_cg_init_dc()
1150 level = gpio_get_value(cg->pdata->dc_det_pin); in rk818_cg_init_dc()
1151 if (level == cg->pdata->dc_det_level) in rk818_cg_init_dc()
1152 cg->dc_charger = DC_TYPE_DC_CHARGER; in rk818_cg_init_dc()
1154 cg->dc_charger = DC_TYPE_NONE_CHARGER; in rk818_cg_init_dc()
1161 dc_det_irq = gpio_to_irq(cg->pdata->dc_det_pin); in rk818_cg_init_dc()
1162 ret = devm_request_irq(cg->dev, dc_det_irq, rk818_dc_det_isr, in rk818_cg_init_dc()
1163 irq_flags, "rk818_dc_det", cg); in rk818_cg_init_dc()
1165 dev_err(cg->dev, "rk818_dc_det_irq request failed!\n"); in rk818_cg_init_dc()
1176 struct rk818_charger *cg = container_of(work, in rk818_cg_discnt_evt_worker() local
1179 if (extcon_get_state(cg->cable_edev, EXTCON_USB) == 0) { in rk818_cg_discnt_evt_worker()
1181 rk818_cg_set_chrg_param(cg, USB_TYPE_NONE_CHARGER); in rk818_cg_discnt_evt_worker()
1182 rk818_cg_pr_info(cg); in rk818_cg_discnt_evt_worker()
1188 struct rk818_charger *cg = container_of(work, in rk818_cg_host_evt_worker() local
1190 struct extcon_dev *edev = cg->cable_edev; in rk818_cg_host_evt_worker()
1194 rk818_cg_set_otg_in(cg, ONLINE); in rk818_cg_host_evt_worker()
1196 if (cg->dc_in && cg->pdata->power_dc2otg) in rk818_cg_host_evt_worker()
1199 rk818_cg_set_otg_power(cg, USB_OTG_POWER_ON); in rk818_cg_host_evt_worker()
1202 rk818_cg_set_otg_in(cg, OFFLINE); in rk818_cg_host_evt_worker()
1203 rk818_cg_set_otg_power(cg, USB_OTG_POWER_OFF); in rk818_cg_host_evt_worker()
1206 rk818_cg_pr_info(cg); in rk818_cg_host_evt_worker()
1211 struct rk818_charger *cg = container_of(work, in rk818_cg_charger_evt_worker() local
1213 struct extcon_dev *edev = cg->cable_edev; in rk818_cg_charger_evt_worker()
1228 cg->usb_charger = charger; in rk818_cg_charger_evt_worker()
1229 rk818_cg_set_chrg_param(cg, charger); in rk818_cg_charger_evt_worker()
1230 rk818_cg_pr_info(cg); in rk818_cg_charger_evt_worker()
1234 static long rk818_cg_init_usb(struct rk818_charger *cg) in rk818_cg_init_usb() argument
1239 struct device *dev = cg->dev; in rk818_cg_init_usb()
1242 cg->usb_charger_wq = alloc_ordered_workqueue("%s", in rk818_cg_init_usb()
1245 cg->usb_charger = USB_TYPE_NONE_CHARGER; in rk818_cg_init_usb()
1248 if (cg->pdata->extcon) { in rk818_cg_init_usb()
1257 INIT_DELAYED_WORK(&cg->usb_work, rk818_cg_charger_evt_worker); in rk818_cg_init_usb()
1258 cg->cable_cg_nb.notifier_call = rk818_cg_charger_evt_notifier; in rk818_cg_init_usb()
1260 &cg->cable_cg_nb); in rk818_cg_init_usb()
1267 &cg->cable_cg_nb); in rk818_cg_init_usb()
1271 &cg->cable_cg_nb); in rk818_cg_init_usb()
1276 &cg->cable_cg_nb); in rk818_cg_init_usb()
1280 &cg->cable_cg_nb); in rk818_cg_init_usb()
1282 &cg->cable_cg_nb); in rk818_cg_init_usb()
1287 INIT_DELAYED_WORK(&cg->host_work, rk818_cg_host_evt_worker); in rk818_cg_init_usb()
1288 cg->cable_host_nb.notifier_call = rk818_cg_host_evt_notifier; in rk818_cg_init_usb()
1290 &cg->cable_host_nb); in rk818_cg_init_usb()
1294 &cg->cable_cg_nb); in rk818_cg_init_usb()
1296 &cg->cable_cg_nb); in rk818_cg_init_usb()
1298 &cg->cable_cg_nb); in rk818_cg_init_usb()
1304 INIT_DELAYED_WORK(&cg->discnt_work, rk818_cg_discnt_evt_worker); in rk818_cg_init_usb()
1305 cg->cable_discnt_nb.notifier_call = rk818_cg_discnt_evt_notfier; in rk818_cg_init_usb()
1307 &cg->cable_discnt_nb); in rk818_cg_init_usb()
1311 &cg->cable_cg_nb); in rk818_cg_init_usb()
1313 &cg->cable_cg_nb); in rk818_cg_init_usb()
1315 &cg->cable_cg_nb); in rk818_cg_init_usb()
1317 &cg->cable_host_nb); in rk818_cg_init_usb()
1321 cg->cable_edev = edev; in rk818_cg_init_usb()
1323 schedule_delayed_work(&cg->host_work, 0); in rk818_cg_init_usb()
1324 schedule_delayed_work(&cg->usb_work, 0); in rk818_cg_init_usb()
1328 INIT_DELAYED_WORK(&cg->usb_work, rk818_cg_bc_evt_worker); in rk818_cg_init_usb()
1329 cg->bc_nb.notifier_call = rk818_cg_bc_evt_notifier; in rk818_cg_init_usb()
1330 ret = rk_bc_detect_notifier_register(&cg->bc_nb, &bc_type); in rk818_cg_init_usb()
1352 cg->usb_charger = charger; in rk818_cg_init_usb()
1359 static void rk818_cg_init_finish_sig(struct rk818_charger *cg) in rk818_cg_init_finish_sig() argument
1361 if (rk818_cg_online(cg)) in rk818_cg_init_finish_sig()
1362 rk818_cg_set_finish_sig(cg, CHRG_FINISH_DIG_SIGNAL); in rk818_cg_init_finish_sig()
1364 rk818_cg_set_finish_sig(cg, CHRG_FINISH_ANA_SIGNAL); in rk818_cg_init_finish_sig()
1366 cg->finish_sig_wq = alloc_ordered_workqueue("%s", in rk818_cg_init_finish_sig()
1369 INIT_DELAYED_WORK(&cg->finish_sig_work, rk818_cg_finish_sig_work); in rk818_cg_init_finish_sig()
1372 static void rk818_cg_init_ts2_detect(struct rk818_charger *cg) in rk818_cg_init_ts2_detect() argument
1376 cg->ts2_wq = alloc_ordered_workqueue("%s", in rk818_cg_init_ts2_detect()
1379 INIT_DELAYED_WORK(&cg->ts2_vol_work, rk818_ts2_vol_work); in rk818_cg_init_ts2_detect()
1381 if (!cg->pdata->ts2_vol_multi) in rk818_cg_init_ts2_detect()
1385 buf = rk818_reg_read(cg, RK818_TS_CTRL_REG); in rk818_cg_init_ts2_detect()
1387 rk818_reg_write(cg, RK818_TS_CTRL_REG, buf); in rk818_cg_init_ts2_detect()
1390 buf = rk818_reg_read(cg, RK818_ADC_CTRL_REG); in rk818_cg_init_ts2_detect()
1392 rk818_reg_write(cg, RK818_ADC_CTRL_REG, buf); in rk818_cg_init_ts2_detect()
1395 cg->pdata->ts2_vol_multi); in rk818_cg_init_ts2_detect()
1398 static void rk818_cg_init_charger_state(struct rk818_charger *cg) in rk818_cg_init_charger_state() argument
1400 rk818_cg_init_config(cg); in rk818_cg_init_charger_state()
1401 rk818_cg_init_finish_sig(cg); in rk818_cg_init_charger_state()
1402 rk818_cg_set_chrg_param(cg, cg->dc_charger); in rk818_cg_init_charger_state()
1403 rk818_cg_set_chrg_param(cg, cg->usb_charger); in rk818_cg_init_charger_state()
1405 if (cg->otg_in && cg->dc_in && cg->pdata->power_dc2otg) { in rk818_cg_init_charger_state()
1407 rk818_cg_set_otg_power(cg, USB_OTG_POWER_OFF); in rk818_cg_init_charger_state()
1411 cg->ac_in, cg->usb_in, cg->dc_in, cg->otg_in, cg->otg_pmic5v); in rk818_cg_init_charger_state()
1417 struct rk818_charger *cg = in rk818_cg_temperature_notifier_call() local
1425 for (i = 0; i < cg->pdata->tc_count; i++) { in rk818_cg_temperature_notifier_call()
1426 up_temp = cg->pdata->tc_table[i].temp_up; in rk818_cg_temperature_notifier_call()
1427 down_temp = cg->pdata->tc_table[i].temp_down; in rk818_cg_temperature_notifier_call()
1428 cfg_current = cg->pdata->tc_table[i].chrg_current; in rk818_cg_temperature_notifier_call()
1432 if (config_index == i && !cg->charger_changed) in rk818_cg_temperature_notifier_call()
1436 cg->charger_changed = 0; in rk818_cg_temperature_notifier_call()
1439 if (cg->pdata->tc_table[i].set_chrg_current) { in rk818_cg_temperature_notifier_call()
1440 rk818_cg_set_chrg_current(cg, cfg_current); in rk818_cg_temperature_notifier_call()
1445 cg->res_div); in rk818_cg_temperature_notifier_call()
1447 rk818_cg_set_input_current(cg, cfg_current); in rk818_cg_temperature_notifier_call()
1464 rk818_cg_set_chrg_current(cg, cg->chrg_current); in rk818_cg_temperature_notifier_call()
1465 if (cg->ac_in || cg->dc_in) in rk818_cg_temperature_notifier_call()
1466 rk818_cg_set_input_current(cg, cg->chrg_input); in rk818_cg_temperature_notifier_call()
1468 rk818_cg_set_input_current(cg, INPUT_CUR450MA); in rk818_cg_temperature_notifier_call()
1469 usb_ctrl = rk818_reg_read(cg, RK818_USB_CTRL_REG); in rk818_cg_temperature_notifier_call()
1470 chrg_ctrl1 = rk818_reg_read(cg, RK818_CHRG_CTRL_REG1); in rk818_cg_temperature_notifier_call()
1473 chrg_cur_sel_array[(chrg_ctrl1 & 0x0f)] * cg->res_div, in rk818_cg_temperature_notifier_call()
1480 static int parse_temperature_chrg_table(struct rk818_charger *cg, in parse_temperature_chrg_table() argument
1493 dev_err(cg->dev, in parse_temperature_chrg_table()
1499 cg->pdata->tc_count = count; in parse_temperature_chrg_table()
1500 cg->pdata->tc_table = devm_kzalloc(cg->dev, in parse_temperature_chrg_table()
1501 count * sizeof(*cg->pdata->tc_table), in parse_temperature_chrg_table()
1503 if (!cg->pdata->tc_table) in parse_temperature_chrg_table()
1508 cg->pdata->tc_table[i].temp_down = be32_to_cpu(*list++); in parse_temperature_chrg_table()
1509 cg->pdata->tc_table[i].temp_up = be32_to_cpu(*list++); in parse_temperature_chrg_table()
1518 cg->pdata->tc_table[i].set_chrg_current = 1; in parse_temperature_chrg_table()
1519 cg->pdata->tc_table[i].chrg_current = in parse_temperature_chrg_table()
1520 rk818_cg_decode_chrg_current(cg, chrg_current); in parse_temperature_chrg_table()
1522 cg->pdata->tc_table[i].chrg_current = in parse_temperature_chrg_table()
1523 rk818_cg_decode_input_current(cg, chrg_current); in parse_temperature_chrg_table()
1527 i, cg->pdata->tc_table[i].temp_down, in parse_temperature_chrg_table()
1528 cg->pdata->tc_table[i].temp_up, in parse_temperature_chrg_table()
1529 cg->pdata->tc_table[i].chrg_current); in parse_temperature_chrg_table()
1536 static int rk818_cg_register_temp_notifier(struct rk818_charger *cg) in rk818_cg_register_temp_notifier() argument
1540 if (!cg->pdata->tc_count) in rk818_cg_register_temp_notifier()
1542 cg->temp_nb.notifier_call = rk818_cg_temperature_notifier_call, in rk818_cg_register_temp_notifier()
1543 ret = rk818_bat_temp_notifier_register(&cg->temp_nb); in rk818_cg_register_temp_notifier()
1545 dev_err(cg->dev, in rk818_cg_register_temp_notifier()
1555 static int rk818_cg_get_otg5v_regulator(struct rk818_charger *cg) in rk818_cg_get_otg5v_regulator() argument
1560 cg->otg5v_rdev = devm_regulator_get(cg->dev, "otg_switch"); in rk818_cg_get_otg5v_regulator()
1561 if (IS_ERR(cg->otg5v_rdev)) { in rk818_cg_get_otg5v_regulator()
1562 ret = PTR_ERR(cg->otg5v_rdev); in rk818_cg_get_otg5v_regulator()
1563 dev_warn(cg->dev, "failed to get otg regulator: %d\n", ret); in rk818_cg_get_otg5v_regulator()
1570 static int rk818_cg_parse_dt(struct rk818_charger *cg) in rk818_cg_parse_dt() argument
1575 struct device *dev = cg->dev; in rk818_cg_parse_dt()
1578 np = of_find_node_by_name(cg->pdev->dev.of_node, "battery"); in rk818_cg_parse_dt()
1588 cg->pdata = pdata; in rk818_cg_parse_dt()
1634 if (!is_battery_exist(cg)) in rk818_cg_parse_dt()
1637 cg->res_div = (cg->pdata->sample_res == SAMPLE_RES_20MR) ? in rk818_cg_parse_dt()
1657 ret = parse_temperature_chrg_table(cg, np); in rk818_cg_parse_dt()
1676 static int rk818_cg_parse_dt(struct rk818_charger *cg) in rk818_cg_parse_dt() argument
1685 struct rk818_charger *cg; in rk818_charger_probe() local
1688 cg = devm_kzalloc(&pdev->dev, sizeof(*cg), GFP_KERNEL); in rk818_charger_probe()
1689 if (!cg) in rk818_charger_probe()
1692 cg->rk818 = rk818; in rk818_charger_probe()
1693 cg->pdev = pdev; in rk818_charger_probe()
1694 cg->dev = &pdev->dev; in rk818_charger_probe()
1695 cg->regmap = rk818->regmap; in rk818_charger_probe()
1696 platform_set_drvdata(pdev, cg); in rk818_charger_probe()
1698 ret = rk818_cg_parse_dt(cg); in rk818_charger_probe()
1700 dev_err(cg->dev, "parse dt failed!\n"); in rk818_charger_probe()
1704 rk818_cg_init_ts2_detect(cg); in rk818_charger_probe()
1705 rk818_cg_get_otg5v_regulator(cg); in rk818_charger_probe()
1707 ret = rk818_cg_init_dc(cg); in rk818_charger_probe()
1709 dev_err(cg->dev, "init dc failed!\n"); in rk818_charger_probe()
1713 ret = rk818_cg_init_usb(cg); in rk818_charger_probe()
1715 dev_err(cg->dev, "init usb failed!\n"); in rk818_charger_probe()
1719 ret = rk818_cg_init_power_supply(cg); in rk818_charger_probe()
1721 dev_err(cg->dev, "init power supply fail!\n"); in rk818_charger_probe()
1725 rk818_cg_init_charger_state(cg); in rk818_charger_probe()
1727 ret = rk818_cg_register_temp_notifier(cg); in rk818_charger_probe()
1729 dev_err(cg->dev, "register temp notify failed!\n"); in rk818_charger_probe()
1733 ret = rk818_cg_init_irqs(cg); in rk818_charger_probe()
1735 dev_err(cg->dev, "init irqs failed!\n"); in rk818_charger_probe()
1744 rk818_bat_temp_notifier_unregister(&cg->temp_nb); in rk818_charger_probe()
1748 if (cg->pdata->extcon) { in rk818_charger_probe()
1749 cancel_delayed_work_sync(&cg->host_work); in rk818_charger_probe()
1750 cancel_delayed_work_sync(&cg->discnt_work); in rk818_charger_probe()
1753 cancel_delayed_work_sync(&cg->usb_work); in rk818_charger_probe()
1754 cancel_delayed_work_sync(&cg->dc_work); in rk818_charger_probe()
1755 cancel_delayed_work_sync(&cg->finish_sig_work); in rk818_charger_probe()
1756 cancel_delayed_work_sync(&cg->irq_work); in rk818_charger_probe()
1757 cancel_delayed_work_sync(&cg->ts2_vol_work); in rk818_charger_probe()
1758 destroy_workqueue(cg->ts2_wq); in rk818_charger_probe()
1759 destroy_workqueue(cg->usb_charger_wq); in rk818_charger_probe()
1760 destroy_workqueue(cg->dc_charger_wq); in rk818_charger_probe()
1761 destroy_workqueue(cg->finish_sig_wq); in rk818_charger_probe()
1763 if (cg->pdata->extcon) { in rk818_charger_probe()
1764 extcon_unregister_notifier(cg->cable_edev, EXTCON_CHG_USB_SDP, in rk818_charger_probe()
1765 &cg->cable_cg_nb); in rk818_charger_probe()
1766 extcon_unregister_notifier(cg->cable_edev, EXTCON_CHG_USB_DCP, in rk818_charger_probe()
1767 &cg->cable_cg_nb); in rk818_charger_probe()
1768 extcon_unregister_notifier(cg->cable_edev, EXTCON_CHG_USB_CDP, in rk818_charger_probe()
1769 &cg->cable_cg_nb); in rk818_charger_probe()
1770 extcon_unregister_notifier(cg->cable_edev, EXTCON_USB_VBUS_EN, in rk818_charger_probe()
1771 &cg->cable_host_nb); in rk818_charger_probe()
1772 extcon_unregister_notifier(cg->cable_edev, EXTCON_USB, in rk818_charger_probe()
1773 &cg->cable_discnt_nb); in rk818_charger_probe()
1775 rk_bc_detect_notifier_unregister(&cg->bc_nb); in rk818_charger_probe()
1783 struct rk818_charger *cg = platform_get_drvdata(pdev); in rk818_charger_shutdown() local
1786 if (cg->pdata->extcon) { in rk818_charger_shutdown()
1787 cancel_delayed_work_sync(&cg->host_work); in rk818_charger_shutdown()
1788 cancel_delayed_work_sync(&cg->discnt_work); in rk818_charger_shutdown()
1791 rk818_cg_set_otg_power(cg, USB_OTG_POWER_OFF); in rk818_charger_shutdown()
1792 disable_irq(cg->plugin_irq); in rk818_charger_shutdown()
1793 disable_irq(cg->plugout_irq); in rk818_charger_shutdown()
1795 cancel_delayed_work_sync(&cg->usb_work); in rk818_charger_shutdown()
1796 cancel_delayed_work_sync(&cg->dc_work); in rk818_charger_shutdown()
1797 cancel_delayed_work_sync(&cg->finish_sig_work); in rk818_charger_shutdown()
1798 cancel_delayed_work_sync(&cg->irq_work); in rk818_charger_shutdown()
1799 cancel_delayed_work_sync(&cg->ts2_vol_work); in rk818_charger_shutdown()
1800 flush_workqueue(cg->ts2_wq); in rk818_charger_shutdown()
1801 flush_workqueue(cg->usb_charger_wq); in rk818_charger_shutdown()
1802 flush_workqueue(cg->dc_charger_wq); in rk818_charger_shutdown()
1803 flush_workqueue(cg->finish_sig_wq); in rk818_charger_shutdown()
1805 if (cg->pdata->extcon) { in rk818_charger_shutdown()
1806 extcon_unregister_notifier(cg->cable_edev, EXTCON_CHG_USB_SDP, in rk818_charger_shutdown()
1807 &cg->cable_cg_nb); in rk818_charger_shutdown()
1808 extcon_unregister_notifier(cg->cable_edev, EXTCON_CHG_USB_DCP, in rk818_charger_shutdown()
1809 &cg->cable_cg_nb); in rk818_charger_shutdown()
1810 extcon_unregister_notifier(cg->cable_edev, EXTCON_CHG_USB_CDP, in rk818_charger_shutdown()
1811 &cg->cable_cg_nb); in rk818_charger_shutdown()
1812 extcon_unregister_notifier(cg->cable_edev, EXTCON_USB_VBUS_EN, in rk818_charger_shutdown()
1813 &cg->cable_host_nb); in rk818_charger_shutdown()
1814 extcon_unregister_notifier(cg->cable_edev, EXTCON_USB, in rk818_charger_shutdown()
1815 &cg->cable_discnt_nb); in rk818_charger_shutdown()
1817 rk_bc_detect_notifier_unregister(&cg->bc_nb); in rk818_charger_shutdown()
1820 rk818_bat_temp_notifier_unregister(&cg->temp_nb); in rk818_charger_shutdown()
1822 rk818_cg_set_finish_sig(cg, CHRG_FINISH_ANA_SIGNAL); in rk818_charger_shutdown()
1825 cg->ac_in, cg->usb_in, cg->dc_in, cg->otg_in, cg->otg_pmic5v); in rk818_charger_shutdown()
1831 struct rk818_charger *cg = platform_get_drvdata(pdev); in rk818_charger_suspend() local
1833 cg->sleep_set_off_reg1 = rk818_reg_read(cg, RK818_SLEEP_SET_OFF_REG1); in rk818_charger_suspend()
1836 if (cg->pdata->otg5v_suspend_enable) { in rk818_charger_suspend()
1837 if ((cg->otg_in && !cg->dc_in) || in rk818_charger_suspend()
1838 (cg->otg_in && cg->dc_in && !cg->pdata->power_dc2otg)) { in rk818_charger_suspend()
1839 rk818_reg_clear_bits(cg, RK818_SLEEP_SET_OFF_REG1, in rk818_charger_suspend()
1847 rk818_reg_set_bits(cg, RK818_SLEEP_SET_OFF_REG1, in rk818_charger_suspend()
1856 struct rk818_charger *cg = platform_get_drvdata(pdev); in rk818_charger_resume() local
1859 rk818_reg_set_bits(cg, RK818_SLEEP_SET_OFF_REG1, in rk818_charger_resume()
1860 OTG_BOOST_SLP_OFF, cg->sleep_set_off_reg1); in rk818_charger_resume()