Lines Matching +full:ac +full:- +full:charger

2  * rk817 charger driver
5 * xsf <xsf@rock-chips.com>
361 if (charge->pdata->virtual_power) in rk817_charge_ac_get_property()
362 val->intval = 1; in rk817_charge_ac_get_property()
364 val->intval = (charge->ac_in | charge->dc_in); in rk817_charge_ac_get_property()
366 DBG("ac report online: %d\n", val->intval); in rk817_charge_ac_get_property()
369 if (charge->pdata->virtual_power) in rk817_charge_ac_get_property()
370 val->intval = POWER_SUPPLY_STATUS_CHARGING; in rk817_charge_ac_get_property()
372 val->intval = charge->prop_status; in rk817_charge_ac_get_property()
374 DBG("report prop: %d\n", val->intval); in rk817_charge_ac_get_property()
377 val->intval = charge->max_chrg_voltage * 1000; /* uV */ in rk817_charge_ac_get_property()
380 val->intval = charge->max_chrg_current * 1000; /* uA */ in rk817_charge_ac_get_property()
383 ret = -EINVAL; in rk817_charge_ac_get_property()
399 if (charge->pdata->virtual_power) in rk817_charge_usb_get_property()
400 val->intval = 1; in rk817_charge_usb_get_property()
402 val->intval = charge->usb_in; in rk817_charge_usb_get_property()
404 DBG("usb report online: %d\n", val->intval); in rk817_charge_usb_get_property()
407 if (charge->pdata->virtual_power) in rk817_charge_usb_get_property()
408 val->intval = POWER_SUPPLY_STATUS_CHARGING; in rk817_charge_usb_get_property()
410 val->intval = charge->prop_status; in rk817_charge_usb_get_property()
412 DBG("report prop: %d\n", val->intval); in rk817_charge_usb_get_property()
415 val->intval = charge->max_chrg_voltage; in rk817_charge_usb_get_property()
418 val->intval = charge->max_chrg_current; in rk817_charge_usb_get_property()
421 ret = -EINVAL; in rk817_charge_usb_get_property()
429 .name = "ac",
448 charge->usb_psy = devm_power_supply_register(charge->dev, in rk817_charge_init_power_supply()
451 if (IS_ERR(charge->usb_psy)) { in rk817_charge_init_power_supply()
452 dev_err(charge->dev, "register usb power supply fail\n"); in rk817_charge_init_power_supply()
453 return PTR_ERR(charge->usb_psy); in rk817_charge_init_power_supply()
456 charge->ac_psy = devm_power_supply_register(charge->dev, &rk817_ac_desc, in rk817_charge_init_power_supply()
458 if (IS_ERR(charge->ac_psy)) { in rk817_charge_init_power_supply()
459 dev_err(charge->dev, "register ac power supply fail\n"); in rk817_charge_init_power_supply()
460 return PTR_ERR(charge->ac_psy); in rk817_charge_init_power_supply()
472 ret = regmap_field_read(charge->rmap_fields[field_id], &val); in rk817_charge_field_read()
483 return regmap_field_write(charge->rmap_fields[field_id], val); in rk817_charge_field_write()
488 return regulator_is_enabled(charge->otg5v_rdev); in rk817_charge_get_otg_state()
505 ret = regulator_disable(charge->otg5v_rdev); in rk817_charge_otg_disable()
519 ret = regulator_enable(charge->otg5v_rdev); in rk817_charge_otg_enable()
626 dev_err(charge->dev, "the charge voltage is error!\n"); in rk817_charge_set_chrg_voltage()
628 voltage = (chrg_vol - 4100) / 50; in rk817_charge_set_chrg_voltage()
639 dev_err(charge->dev, "the charge current is error!\n"); in rk817_charge_set_chrg_current()
668 dev_err(charge->dev, "the input voltage is error.\n"); in rk817_charge_set_input_voltage()
670 voltage = INPUT_VOL_4000MV + (input_voltage - 4000) / 100; in rk817_charge_set_input_voltage()
685 dev_err(charge->dev, "the input current is error.\n"); in rk817_charge_set_input_current()
746 value = CURRENT_TO_ADC(chrg_current, charge->res_div); in rk817_charge_set_term_current_digital()
755 if (charge->chrg_term_mode == CHRG_ANALOG) in rk817_charge_set_chrg_finish_condition()
757 charge->chrg_finish_cur); in rk817_charge_set_chrg_finish_condition()
760 charge->chrg_finish_cur); in rk817_charge_set_chrg_finish_condition()
762 rk817_charge_set_chrg_term_mod(charge, charge->chrg_term_mode); in rk817_charge_set_chrg_finish_condition()
767 return (charge->ac_in | charge->usb_in | charge->dc_in); in rk817_charge_online()
783 charge->otg_in = online; in rk817_charge_set_otg_in()
787 enum charger_t charger) in rk817_charge_set_chrg_param() argument
789 switch (charger) { in rk817_charge_set_chrg_param()
791 charge->usb_in = 0; in rk817_charge_set_chrg_param()
792 charge->ac_in = 0; in rk817_charge_set_chrg_param()
793 if (charge->dc_in == 0) { in rk817_charge_set_chrg_param()
794 charge->prop_status = POWER_SUPPLY_STATUS_DISCHARGING; in rk817_charge_set_chrg_param()
797 power_supply_changed(charge->usb_psy); in rk817_charge_set_chrg_param()
798 power_supply_changed(charge->ac_psy); in rk817_charge_set_chrg_param()
801 charge->usb_in = 1; in rk817_charge_set_chrg_param()
802 charge->ac_in = 0; in rk817_charge_set_chrg_param()
803 charge->prop_status = POWER_SUPPLY_STATUS_CHARGING; in rk817_charge_set_chrg_param()
804 if (charge->dc_in == 0) in rk817_charge_set_chrg_param()
806 power_supply_changed(charge->usb_psy); in rk817_charge_set_chrg_param()
807 power_supply_changed(charge->ac_psy); in rk817_charge_set_chrg_param()
811 charge->ac_in = 1; in rk817_charge_set_chrg_param()
812 charge->usb_in = 0; in rk817_charge_set_chrg_param()
813 charge->prop_status = POWER_SUPPLY_STATUS_CHARGING; in rk817_charge_set_chrg_param()
814 if (charger == USB_TYPE_AC_CHARGER) in rk817_charge_set_chrg_param()
816 charge->max_input_current); in rk817_charge_set_chrg_param()
820 power_supply_changed(charge->usb_psy); in rk817_charge_set_chrg_param()
821 power_supply_changed(charge->ac_psy); in rk817_charge_set_chrg_param()
824 charge->dc_in = 1; in rk817_charge_set_chrg_param()
825 charge->prop_status = POWER_SUPPLY_STATUS_CHARGING; in rk817_charge_set_chrg_param()
827 charge->max_input_current); in rk817_charge_set_chrg_param()
828 power_supply_changed(charge->usb_psy); in rk817_charge_set_chrg_param()
829 power_supply_changed(charge->ac_psy); in rk817_charge_set_chrg_param()
832 charge->dc_in = 0; in rk817_charge_set_chrg_param()
834 charge->ac_in = 0; in rk817_charge_set_chrg_param()
835 charge->usb_in = 0; in rk817_charge_set_chrg_param()
836 charge->prop_status = POWER_SUPPLY_STATUS_DISCHARGING; in rk817_charge_set_chrg_param()
838 } else if (charge->usb_in) { in rk817_charge_set_chrg_param()
840 charge->prop_status = POWER_SUPPLY_STATUS_CHARGING; in rk817_charge_set_chrg_param()
842 power_supply_changed(charge->usb_psy); in rk817_charge_set_chrg_param()
843 power_supply_changed(charge->ac_psy); in rk817_charge_set_chrg_param()
846 charge->prop_status = POWER_SUPPLY_STATUS_DISCHARGING; in rk817_charge_set_chrg_param()
852 charge->prop_status = POWER_SUPPLY_STATUS_FULL; in rk817_charge_set_chrg_param()
859 if (charge->otg_in) { in rk817_charge_set_otg_state()
870 disable_irq(charge->plugin_irq); in rk817_charge_set_otg_state()
871 disable_irq(charge->plugout_irq); in rk817_charge_set_otg_state()
877 if (!charge->otg_in) { in rk817_charge_set_otg_state()
888 enable_irq(charge->plugin_irq); in rk817_charge_set_otg_state()
889 enable_irq(charge->plugout_irq); in rk817_charge_set_otg_state()
894 dev_err(charge->dev, "error otg type\n"); in rk817_charge_set_otg_state()
899 static irqreturn_t rk817_charge_dc_det_isr(int irq, void *charger) in rk817_charge_dc_det_isr() argument
901 struct rk817_charger *charge = (struct rk817_charger *)charger; in rk817_charge_dc_det_isr()
903 if (gpio_get_value(charge->pdata->dc_det_pin)) in rk817_charge_dc_det_isr()
908 queue_delayed_work(charge->dc_charger_wq, &charge->dc_work, in rk817_charge_dc_det_isr()
918 if (!gpio_is_valid(charge->pdata->dc_det_pin)) in rk817_charge_get_dc_state()
921 level = gpio_get_value(charge->pdata->dc_det_pin); in rk817_charge_get_dc_state()
923 return (level == charge->pdata->dc_det_level) ? in rk817_charge_get_dc_state()
929 enum charger_t charger; in rk817_charge_dc_det_worker() local
933 charger = rk817_charge_get_dc_state(charge); in rk817_charge_dc_det_worker()
934 if (charger == DC_TYPE_DC_CHARGER) { in rk817_charge_dc_det_worker()
935 DBG("detect dc charger in..\n"); in rk817_charge_dc_det_worker()
938 if (charge->otg_in && charge->pdata->power_dc2otg) { in rk817_charge_dc_det_worker()
945 DBG("detect dc charger out..\n"); in rk817_charge_dc_det_worker()
949 if (charge->otg_in) in rk817_charge_dc_det_worker()
960 charge->dc_charger_wq = alloc_ordered_workqueue("%s", in rk817_charge_init_dc()
962 "rk817-dc-wq"); in rk817_charge_init_dc()
963 INIT_DELAYED_WORK(&charge->dc_work, rk817_charge_dc_det_worker); in rk817_charge_init_dc()
964 charge->dc_charger = DC_TYPE_NONE_CHARGER; in rk817_charge_init_dc()
966 if (!charge->pdata->support_dc_det) in rk817_charge_init_dc()
969 ret = devm_gpio_request(charge->dev, in rk817_charge_init_dc()
970 charge->pdata->dc_det_pin, in rk817_charge_init_dc()
973 dev_err(charge->dev, "failed to request gpio %d\n", in rk817_charge_init_dc()
974 charge->pdata->dc_det_pin); in rk817_charge_init_dc()
978 ret = gpio_direction_input(charge->pdata->dc_det_pin); in rk817_charge_init_dc()
980 dev_err(charge->dev, "failed to set gpio input\n"); in rk817_charge_init_dc()
984 level = gpio_get_value(charge->pdata->dc_det_pin); in rk817_charge_init_dc()
985 if (level == charge->pdata->dc_det_level) in rk817_charge_init_dc()
986 charge->dc_charger = DC_TYPE_DC_CHARGER; in rk817_charge_init_dc()
988 charge->dc_charger = DC_TYPE_NONE_CHARGER; in rk817_charge_init_dc()
995 dc_det_irq = gpio_to_irq(charge->pdata->dc_det_pin); in rk817_charge_init_dc()
996 ret = devm_request_irq(charge->dev, dc_det_irq, rk817_charge_dc_det_isr, in rk817_charge_init_dc()
999 dev_err(charge->dev, "rk817_dc_det_irq request failed!\n"); in rk817_charge_init_dc()
1005 if (charge->dc_charger != DC_TYPE_NONE_CHARGER) in rk817_charge_init_dc()
1006 rk817_charge_set_chrg_param(charge, charge->dc_charger); in rk817_charge_init_dc()
1015 struct extcon_dev *edev = charge->cable_edev; in rk817_charge_host_evt_worker()
1017 /* Determine cable/charger type */ in rk817_charge_host_evt_worker()
1019 DBG("receive type-c notifier event: OTG ON...\n"); in rk817_charge_host_evt_worker()
1020 if (charge->dc_in && charge->pdata->power_dc2otg) { in rk817_charge_host_evt_worker()
1021 if (charge->otg_in) in rk817_charge_host_evt_worker()
1030 DBG("receive type-c notifier event: OTG OFF...\n"); in rk817_charge_host_evt_worker()
1040 struct extcon_dev *edev = charge->cable_edev; in rk817_charger_evt_worker()
1041 enum charger_t charger = USB_TYPE_UNKNOWN_CHARGER; in rk817_charger_evt_worker() local
1043 "AC", "CDP1.5A"}; in rk817_charger_evt_worker()
1045 /* Determine cable/charger type */ in rk817_charger_evt_worker()
1047 charger = USB_TYPE_USB_CHARGER; in rk817_charger_evt_worker()
1049 charger = USB_TYPE_AC_CHARGER; in rk817_charger_evt_worker()
1051 charger = USB_TYPE_CDP_CHARGER; in rk817_charger_evt_worker()
1053 if (charger != USB_TYPE_UNKNOWN_CHARGER) { in rk817_charger_evt_worker()
1054 DBG("receive type-c notifier event: %s...\n", in rk817_charger_evt_worker()
1055 event[charger]); in rk817_charger_evt_worker()
1056 charge->usb_charger = charger; in rk817_charger_evt_worker()
1057 rk817_charge_set_chrg_param(charge, charger); in rk817_charger_evt_worker()
1066 if (extcon_get_state(charge->cable_edev, EXTCON_USB) == 0) { in rk817_charge_discnt_evt_worker()
1067 DBG("receive type-c notifier event: DISCNT...\n"); in rk817_charge_discnt_evt_worker()
1078 static const char * const event_name[] = {"DISCNT", "USB", "AC", in rk817_charge_bc_evt_worker()
1082 switch (charge->bc_event) { in rk817_charge_bc_evt_worker()
1096 if (charge->pdata->power_dc2otg && charge->dc_in) in rk817_charge_bc_evt_worker()
1108 DBG("receive bc notifier event: %s..\n", event_name[charge->bc_event]); in rk817_charge_bc_evt_worker()
1117 queue_delayed_work(charge->usb_charger_wq, &charge->usb_work, in rk817_charger_evt_notifier()
1129 queue_delayed_work(charge->usb_charger_wq, &charge->host_work, in rk817_charge_host_evt_notifier()
1141 queue_delayed_work(charge->usb_charger_wq, &charge->discnt_work, in rk817_charge_discnt_evt_notfier()
1153 charge->bc_event = event; in rk817_charge_bc_evt_notifier()
1154 queue_delayed_work(charge->usb_charger_wq, &charge->usb_work, in rk817_charge_bc_evt_notifier()
1162 enum charger_t charger; in rk817_charge_usb_init() local
1165 struct device *dev = charge->dev; in rk817_charge_usb_init()
1168 charge->usb_charger_wq = alloc_ordered_workqueue("%s", in rk817_charge_usb_init()
1170 "rk817-usb-wq"); in rk817_charge_usb_init()
1172 /* type-C */ in rk817_charge_usb_init()
1173 if (charge->pdata->extcon) { in rk817_charge_usb_init()
1176 if (PTR_ERR(edev) != -EPROBE_DEFER) in rk817_charge_usb_init()
1182 INIT_DELAYED_WORK(&charge->usb_work, rk817_charger_evt_worker); in rk817_charge_usb_init()
1183 charge->cable_cg_nb.notifier_call = rk817_charger_evt_notifier; in rk817_charge_usb_init()
1185 &charge->cable_cg_nb); in rk817_charge_usb_init()
1192 &charge->cable_cg_nb); in rk817_charge_usb_init()
1196 &charge->cable_cg_nb); in rk817_charge_usb_init()
1201 &charge->cable_cg_nb); in rk817_charge_usb_init()
1205 &charge->cable_cg_nb); in rk817_charge_usb_init()
1207 &charge->cable_cg_nb); in rk817_charge_usb_init()
1212 INIT_DELAYED_WORK(&charge->host_work, in rk817_charge_usb_init()
1214 charge->cable_host_nb.notifier_call = in rk817_charge_usb_init()
1217 &charge->cable_host_nb); in rk817_charge_usb_init()
1221 &charge->cable_cg_nb); in rk817_charge_usb_init()
1223 &charge->cable_cg_nb); in rk817_charge_usb_init()
1225 &charge->cable_cg_nb); in rk817_charge_usb_init()
1231 INIT_DELAYED_WORK(&charge->discnt_work, in rk817_charge_usb_init()
1233 charge->cable_discnt_nb.notifier_call = in rk817_charge_usb_init()
1236 &charge->cable_discnt_nb); in rk817_charge_usb_init()
1240 &charge->cable_cg_nb); in rk817_charge_usb_init()
1242 &charge->cable_cg_nb); in rk817_charge_usb_init()
1244 &charge->cable_cg_nb); in rk817_charge_usb_init()
1246 &charge->cable_host_nb); in rk817_charge_usb_init()
1250 charge->cable_edev = edev; in rk817_charge_usb_init()
1254 INIT_DELAYED_WORK(&charge->usb_work, in rk817_charge_usb_init()
1256 charge->bc_nb.notifier_call = rk817_charge_bc_evt_notifier; in rk817_charge_usb_init()
1257 ret = rk_bc_detect_notifier_register(&charge->bc_nb, &bc_type); in rk817_charge_usb_init()
1260 return -EINVAL; in rk817_charge_usb_init()
1265 charger = USB_TYPE_NONE_CHARGER; in rk817_charge_usb_init()
1269 charger = USB_TYPE_USB_CHARGER; in rk817_charge_usb_init()
1272 charger = USB_TYPE_AC_CHARGER; in rk817_charge_usb_init()
1275 charger = USB_TYPE_NONE_CHARGER; in rk817_charge_usb_init()
1279 charge->usb_charger = charger; in rk817_charge_usb_init()
1280 if (charge->dc_charger != DC_TYPE_NONE_CHARGER) in rk817_charge_usb_init()
1282 charge->usb_charger); in rk817_charge_usb_init()
1292 charge->max_chrg_current = charge->pdata->max_chrg_current; in rk817_charge_pre_init()
1293 charge->max_input_current = charge->pdata->max_input_current; in rk817_charge_pre_init()
1294 charge->max_chrg_voltage = charge->pdata->max_chrg_voltage; in rk817_charge_pre_init()
1295 charge->min_input_voltage = charge->pdata->min_input_voltage; in rk817_charge_pre_init()
1296 charge->chrg_finish_cur = charge->pdata->chrg_finish_cur; in rk817_charge_pre_init()
1297 charge->chrg_term_mode = charge->pdata->chrg_term_mode; in rk817_charge_pre_init()
1299 rk817_charge_set_input_voltage(charge, charge->min_input_voltage); in rk817_charge_pre_init()
1301 rk817_charge_set_chrg_voltage(charge, charge->max_chrg_voltage); in rk817_charge_pre_init()
1302 rk817_charge_set_chrg_current(charge, charge->max_chrg_current); in rk817_charge_pre_init()
1311 if (!charge->pdata->gate_function_disable) in rk817_charge_pre_init()
1330 charge->max_chrg_current, in rk817_chage_debug()
1331 charge->max_input_current, in rk817_chage_debug()
1332 charge->min_input_voltage, in rk817_chage_debug()
1333 charge->max_chrg_voltage, in rk817_chage_debug()
1334 charge->chrg_finish_cur, in rk817_chage_debug()
1335 charge->chrg_term_mode); in rk817_chage_debug()
1342 charge->otg5v_rdev = devm_regulator_get(charge->dev, "otg_switch"); in rk817_charge_get_otg5v_regulator()
1343 if (IS_ERR(charge->otg5v_rdev)) { in rk817_charge_get_otg5v_regulator()
1344 ret = PTR_ERR(charge->otg5v_rdev); in rk817_charge_get_otg5v_regulator()
1345 dev_warn(charge->dev, "failed to get otg regulator: %d\n", ret); in rk817_charge_get_otg5v_regulator()
1356 struct device *dev = charge->dev; in rk817_charge_parse_dt()
1357 struct device_node *np = charge->dev->of_node; in rk817_charge_parse_dt()
1362 return -ENOMEM; in rk817_charge_parse_dt()
1364 charge->pdata = pdata; in rk817_charge_parse_dt()
1365 pdata->max_chrg_current = DEFAULT_CHRG_CURRENT; in rk817_charge_parse_dt()
1366 pdata->max_input_current = DEFAULT_INPUT_CURRENT; in rk817_charge_parse_dt()
1367 pdata->max_chrg_voltage = DEFAULT_CHRG_VOLTAGE; in rk817_charge_parse_dt()
1368 pdata->min_input_voltage = DEFAULT_INPUT_VOLTAGE; in rk817_charge_parse_dt()
1369 pdata->chrg_finish_cur = DEFAULT_CHRG_TERM_CUR; in rk817_charge_parse_dt()
1370 pdata->chrg_term_mode = DEFAULT_CHRG_TERM_MODE; in rk817_charge_parse_dt()
1372 pdata->extcon = of_property_read_bool(np, "extcon"); in rk817_charge_parse_dt()
1375 &pdata->max_chrg_current); in rk817_charge_parse_dt()
1380 &pdata->max_input_current); in rk817_charge_parse_dt()
1385 &pdata->max_chrg_voltage); in rk817_charge_parse_dt()
1390 &pdata->min_input_voltage); in rk817_charge_parse_dt()
1395 &pdata->chrg_finish_cur); in rk817_charge_parse_dt()
1401 &pdata->chrg_term_mode); in rk817_charge_parse_dt()
1405 ret = of_property_read_u32(np, "virtual_power", &pdata->virtual_power); in rk817_charge_parse_dt()
1409 ret = of_property_read_u32(np, "power_dc2otg", &pdata->power_dc2otg); in rk817_charge_parse_dt()
1413 ret = of_property_read_u32(np, "sample_res", &pdata->sample_res); in rk817_charge_parse_dt()
1415 pdata->sample_res = SAMPLE_RES_10MR; in rk817_charge_parse_dt()
1420 &pdata->otg5v_suspend_enable); in rk817_charge_parse_dt()
1422 pdata->otg5v_suspend_enable = 1; in rk817_charge_parse_dt()
1427 &pdata->gate_function_disable); in rk817_charge_parse_dt()
1432 pdata->virtual_power = 1; in rk817_charge_parse_dt()
1434 charge->res_div = (charge->pdata->sample_res == SAMPLE_RES_10MR) ? in rk817_charge_parse_dt()
1438 pdata->support_dc_det = false; in rk817_charge_parse_dt()
1441 pdata->support_dc_det = true; in rk817_charge_parse_dt()
1442 pdata->dc_det_pin = of_get_named_gpio_flags(np, "dc_det_gpio", in rk817_charge_parse_dt()
1444 if (gpio_is_valid(pdata->dc_det_pin)) { in rk817_charge_parse_dt()
1446 pdata->dc_det_level = (flags & OF_GPIO_ACTIVE_LOW) ? in rk817_charge_parse_dt()
1450 return -EINVAL; in rk817_charge_parse_dt()
1462 pdata->max_input_current, pdata->min_input_voltage, in rk817_charge_parse_dt()
1463 pdata->max_chrg_current, pdata->max_chrg_voltage, in rk817_charge_parse_dt()
1464 pdata->sample_res, pdata->extcon, in rk817_charge_parse_dt()
1465 pdata->virtual_power, pdata->power_dc2otg); in rk817_charge_parse_dt()
1472 return -ENODEV; in rk817_charge_parse_dt()
1481 if (charge->plugin_trigger) { in rk817_charge_irq_delay_work()
1483 charge->plugin_trigger = 0; in rk817_charge_irq_delay_work()
1484 if (charge->pdata->extcon) in rk817_charge_irq_delay_work()
1485 queue_delayed_work(charge->usb_charger_wq, &charge->usb_work, in rk817_charge_irq_delay_work()
1487 } else if (charge->plugout_trigger) { in rk817_charge_irq_delay_work()
1489 charge->plugout_trigger = 0; in rk817_charge_irq_delay_work()
1502 charge->plugin_trigger = 1; in rk817_plug_in_isr()
1503 queue_delayed_work(charge->usb_charger_wq, &charge->irq_work, in rk817_plug_in_isr()
1514 charge->plugout_trigger = 1; in rk817_plug_out_isr()
1515 queue_delayed_work(charge->usb_charger_wq, &charge->irq_work, in rk817_plug_out_isr()
1523 struct rk808 *rk817 = charge->rk817; in rk817_charge_init_irqs()
1524 struct platform_device *pdev = charge->pdev; in rk817_charge_init_irqs()
1527 plug_in_irq = regmap_irq_get_virq(rk817->irq_data, RK817_IRQ_PLUG_IN); in rk817_charge_init_irqs()
1529 dev_err(charge->dev, "plug_in_irq request failed!\n"); in rk817_charge_init_irqs()
1533 plug_out_irq = regmap_irq_get_virq(rk817->irq_data, RK817_IRQ_PLUG_OUT); in rk817_charge_init_irqs()
1535 dev_err(charge->dev, "plug_out_irq request failed!\n"); in rk817_charge_init_irqs()
1539 ret = devm_request_threaded_irq(charge->dev, plug_in_irq, NULL, in rk817_charge_init_irqs()
1544 dev_err(&pdev->dev, "plug_in_irq request failed!\n"); in rk817_charge_init_irqs()
1548 ret = devm_request_threaded_irq(charge->dev, plug_out_irq, NULL, in rk817_charge_init_irqs()
1553 dev_err(&pdev->dev, "plug_out_irq request failed!\n"); in rk817_charge_init_irqs()
1557 charge->plugin_irq = plug_in_irq; in rk817_charge_init_irqs()
1558 charge->plugout_irq = plug_out_irq; in rk817_charge_init_irqs()
1560 INIT_DELAYED_WORK(&charge->irq_work, rk817_charge_irq_delay_work); in rk817_charge_init_irqs()
1566 { .compatible = "rk817,charger", },
1572 struct rk808 *rk817 = dev_get_drvdata(pdev->dev.parent); in rk817_charge_probe()
1574 of_match_device(rk817_charge_of_match, &pdev->dev); in rk817_charge_probe()
1575 struct i2c_client *client = rk817->i2c; in rk817_charge_probe()
1581 dev_err(&pdev->dev, "Failed to find matching dt id\n"); in rk817_charge_probe()
1582 return -ENODEV; in rk817_charge_probe()
1585 charge = devm_kzalloc(&pdev->dev, sizeof(*charge), GFP_KERNEL); in rk817_charge_probe()
1587 return -EINVAL; in rk817_charge_probe()
1589 charge->rk817 = rk817; in rk817_charge_probe()
1590 charge->pdev = pdev; in rk817_charge_probe()
1591 charge->dev = &pdev->dev; in rk817_charge_probe()
1592 charge->client = client; in rk817_charge_probe()
1595 charge->regmap = rk817->regmap; in rk817_charge_probe()
1596 if (IS_ERR(charge->regmap)) { in rk817_charge_probe()
1597 dev_err(charge->dev, "Failed to initialize regmap\n"); in rk817_charge_probe()
1598 return -EINVAL; in rk817_charge_probe()
1604 charge->rmap_fields[i] = in rk817_charge_probe()
1605 devm_regmap_field_alloc(charge->dev, in rk817_charge_probe()
1606 charge->regmap, in rk817_charge_probe()
1608 if (IS_ERR(charge->rmap_fields[i])) { in rk817_charge_probe()
1609 dev_err(charge->dev, "cannot allocate regmap field\n"); in rk817_charge_probe()
1610 return PTR_ERR(charge->rmap_fields[i]); in rk817_charge_probe()
1616 dev_err(charge->dev, "charge parse dt failed!\n"); in rk817_charge_probe()
1625 dev_err(charge->dev, "init power supply fail!\n"); in rk817_charge_probe()
1631 dev_err(charge->dev, "init dc failed!\n"); in rk817_charge_probe()
1637 dev_err(charge->dev, "init usb failed!\n"); in rk817_charge_probe()
1643 dev_err(charge->dev, "init irqs failed!\n"); in rk817_charge_probe()
1647 if (charge->pdata->extcon) { in rk817_charge_probe()
1648 schedule_delayed_work(&charge->host_work, 0); in rk817_charge_probe()
1649 schedule_delayed_work(&charge->usb_work, 0); in rk817_charge_probe()
1657 if (charge->pdata->extcon) { in rk817_charge_probe()
1658 cancel_delayed_work_sync(&charge->host_work); in rk817_charge_probe()
1659 cancel_delayed_work_sync(&charge->discnt_work); in rk817_charge_probe()
1662 cancel_delayed_work_sync(&charge->usb_work); in rk817_charge_probe()
1663 cancel_delayed_work_sync(&charge->dc_work); in rk817_charge_probe()
1664 cancel_delayed_work_sync(&charge->irq_work); in rk817_charge_probe()
1665 destroy_workqueue(charge->usb_charger_wq); in rk817_charge_probe()
1666 destroy_workqueue(charge->dc_charger_wq); in rk817_charge_probe()
1668 if (charge->pdata->extcon) { in rk817_charge_probe()
1669 extcon_unregister_notifier(charge->cable_edev, in rk817_charge_probe()
1671 &charge->cable_cg_nb); in rk817_charge_probe()
1672 extcon_unregister_notifier(charge->cable_edev, in rk817_charge_probe()
1674 &charge->cable_cg_nb); in rk817_charge_probe()
1675 extcon_unregister_notifier(charge->cable_edev, in rk817_charge_probe()
1677 &charge->cable_cg_nb); in rk817_charge_probe()
1678 extcon_unregister_notifier(charge->cable_edev, in rk817_charge_probe()
1680 &charge->cable_host_nb); in rk817_charge_probe()
1681 extcon_unregister_notifier(charge->cable_edev, in rk817_charge_probe()
1683 &charge->cable_discnt_nb); in rk817_charge_probe()
1685 rk_bc_detect_notifier_unregister(&charge->bc_nb); in rk817_charge_probe()
1695 struct rk817_charger *charge = dev_get_drvdata(&pdev->dev); in rk817_charge_pm_suspend()
1697 charge->otg_slp_state = rk817_charge_get_otg_slp_state(charge); in rk817_charge_pm_suspend()
1700 if (charge->pdata->otg5v_suspend_enable) { in rk817_charge_pm_suspend()
1701 if ((charge->otg_in && !charge->dc_in) || in rk817_charge_pm_suspend()
1702 (charge->otg_in && charge->dc_in && in rk817_charge_pm_suspend()
1703 !charge->pdata->power_dc2otg)) { in rk817_charge_pm_suspend()
1719 struct rk817_charger *charge = dev_get_drvdata(&pdev->dev); in rk817_charge_pm_resume()
1722 if (charge->otg_slp_state) in rk817_charge_pm_resume()
1735 /* type-c only */ in rk817_charger_shutdown()
1736 if (charge->pdata->extcon) { in rk817_charger_shutdown()
1737 cancel_delayed_work_sync(&charge->host_work); in rk817_charger_shutdown()
1738 cancel_delayed_work_sync(&charge->discnt_work); in rk817_charger_shutdown()
1743 disable_irq(charge->plugin_irq); in rk817_charger_shutdown()
1744 disable_irq(charge->plugout_irq); in rk817_charger_shutdown()
1746 cancel_delayed_work_sync(&charge->usb_work); in rk817_charger_shutdown()
1747 cancel_delayed_work_sync(&charge->dc_work); in rk817_charger_shutdown()
1748 cancel_delayed_work_sync(&charge->irq_work); in rk817_charger_shutdown()
1749 flush_workqueue(charge->usb_charger_wq); in rk817_charger_shutdown()
1750 flush_workqueue(charge->dc_charger_wq); in rk817_charger_shutdown()
1752 if (charge->pdata->extcon) { in rk817_charger_shutdown()
1753 extcon_unregister_notifier(charge->cable_edev, in rk817_charger_shutdown()
1755 &charge->cable_cg_nb); in rk817_charger_shutdown()
1756 extcon_unregister_notifier(charge->cable_edev, in rk817_charger_shutdown()
1758 &charge->cable_cg_nb); in rk817_charger_shutdown()
1759 extcon_unregister_notifier(charge->cable_edev, in rk817_charger_shutdown()
1761 &charge->cable_cg_nb); in rk817_charger_shutdown()
1762 extcon_unregister_notifier(charge->cable_edev, in rk817_charger_shutdown()
1764 &charge->cable_host_nb); in rk817_charger_shutdown()
1765 extcon_unregister_notifier(charge->cable_edev, EXTCON_USB, in rk817_charger_shutdown()
1766 &charge->cable_discnt_nb); in rk817_charger_shutdown()
1768 rk_bc_detect_notifier_unregister(&charge->bc_nb); in rk817_charger_shutdown()
1771 DBG("shutdown: ac=%d usb=%d dc=%d otg=%d\n", in rk817_charger_shutdown()
1772 charge->ac_in, charge->usb_in, charge->dc_in, charge->otg_in); in rk817_charger_shutdown()
1779 .name = "rk817-charger",