Lines Matching refs:cm
398 static int get_battery_temperature(struct charger_manager *cm, in get_battery_temperature() argument
405 psy = power_supply_get_by_name(cm->desc->psy_fuel_gauge); in get_battery_temperature()
407 cm->fc_config->fc_charge_error = true; in get_battery_temperature()
408 dev_err(cm->dev, "Cannot find power supply \"%s\"\n", in get_battery_temperature()
409 cm->desc->psy_charger_stat); in get_battery_temperature()
418 cm->fc_config->fc_charge_error = true; in get_battery_temperature()
419 dev_err(cm->dev, "failed to get %s POWER_SUPPLY_PROP_TEMP\n", in get_battery_temperature()
420 cm->desc->psy_fuel_gauge); in get_battery_temperature()
436 static int get_battery_voltage(struct charger_manager *cm, int *uV) in get_battery_voltage() argument
443 psy = power_supply_get_by_name(cm->desc->psy_fuel_gauge); in get_battery_voltage()
445 cm->fc_config->fc_charge_error = true; in get_battery_voltage()
446 dev_err(cm->dev, "Cannot find power supply \"%s\"\n", in get_battery_voltage()
447 cm->desc->psy_charger_stat); in get_battery_voltage()
456 cm->fc_config->fc_charge_error = true; in get_battery_voltage()
457 dev_err(cm->dev, "failed to get %s POWER_SUPPLY_PROP_VOLTAGE_NOW\n", in get_battery_voltage()
458 cm->desc->psy_fuel_gauge); in get_battery_voltage()
474 static int get_battery_current(struct charger_manager *cm, int *uA) in get_battery_current() argument
481 psy = power_supply_get_by_name(cm->desc->psy_fuel_gauge); in get_battery_current()
483 cm->fc_config->fc_charge_error = true; in get_battery_current()
484 dev_err(cm->dev, "Cannot find power supply \"%s\"\n", in get_battery_current()
485 cm->desc->psy_charger_stat); in get_battery_current()
494 cm->fc_config->fc_charge_error = true; in get_battery_current()
495 dev_err(cm->dev, "failed to get %s POWER_SUPPLY_PROP_CURRENT_NOW\n", in get_battery_current()
496 cm->desc->psy_fuel_gauge); in get_battery_current()
512 static bool is_ext_pwr_online(struct charger_manager *cm) in is_ext_pwr_online() argument
519 psy = power_supply_get_by_name(cm->desc->psy_charger_stat); in is_ext_pwr_online()
521 dev_err(cm->dev, "Cannot find power supply \"%s\"\n", in is_ext_pwr_online()
522 cm->desc->psy_charger_stat); in is_ext_pwr_online()
531 dev_err(cm->dev, "failed to get %s POWER_SUPPLY_PROP_ONLINE\n", in is_ext_pwr_online()
532 cm->desc->psy_charger_stat); in is_ext_pwr_online()
542 static int set_sw_charger_enable(struct charger_manager *cm) in set_sw_charger_enable() argument
548 psy = power_supply_get_by_name(cm->desc->psy_charger_stat); in set_sw_charger_enable()
550 cm->fc_config->fc_charge_error = true; in set_sw_charger_enable()
551 dev_err(cm->dev, "Cannot find power supply \"%s\"\n", in set_sw_charger_enable()
552 cm->desc->psy_charger_stat); in set_sw_charger_enable()
563 cm->fc_config->fc_charge_error = true; in set_sw_charger_enable()
564 dev_err(cm->dev, "failed to set %s POWER_SUPPLY_PROP_ONLINE\n", in set_sw_charger_enable()
565 cm->desc->psy_charger_stat); in set_sw_charger_enable()
569 cm->fc_config->sw_charge_status = 1; in set_sw_charger_enable()
573 static int set_sw_charger_disable(struct charger_manager *cm) in set_sw_charger_disable() argument
579 psy = power_supply_get_by_name(cm->desc->psy_charger_stat); in set_sw_charger_disable()
581 dev_err(cm->dev, "Cannot find power supply \"%s\"\n", in set_sw_charger_disable()
582 cm->desc->psy_charger_stat); in set_sw_charger_disable()
593 dev_err(cm->dev, "failed to get %s POWER_SUPPLY_PROP_ONLINE\n", in set_sw_charger_disable()
594 cm->desc->psy_charger_stat); in set_sw_charger_disable()
598 cm->fc_config->sw_charge_status = 0; in set_sw_charger_disable()
602 static int set_sw_charger_input_limit_current(struct charger_manager *cm, in set_sw_charger_input_limit_current() argument
609 psy = power_supply_get_by_name(cm->desc->psy_charger_stat); in set_sw_charger_input_limit_current()
611 cm->fc_config->fc_charge_error = true; in set_sw_charger_input_limit_current()
612 dev_err(cm->dev, "Cannot find power supply \"%s\"\n", in set_sw_charger_input_limit_current()
613 cm->desc->psy_charger_stat); in set_sw_charger_input_limit_current()
624 cm->fc_config->fc_charge_error = true; in set_sw_charger_input_limit_current()
625 dev_err(cm->dev, "failed to set %s POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT\n", in set_sw_charger_input_limit_current()
626 cm->desc->psy_charger_stat); in set_sw_charger_input_limit_current()
630 cm->fc_config->ibus_dcdc_lmt = input_current_ua; in set_sw_charger_input_limit_current()
634 static int set_sw_charger_voltage(struct charger_manager *cm, in set_sw_charger_voltage() argument
642 psy = power_supply_get_by_name(cm->desc->psy_charger_stat); in set_sw_charger_voltage()
644 dev_err(cm->dev, "Cannot find power supply \"%s\"\n", in set_sw_charger_voltage()
645 cm->desc->psy_charger_stat); in set_sw_charger_voltage()
646 cm->fc_config->fc_charge_error = true; in set_sw_charger_voltage()
657 dev_err(cm->dev, "failed to set %s POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE\n", in set_sw_charger_voltage()
658 cm->desc->psy_charger_stat); in set_sw_charger_voltage()
659 cm->fc_config->fc_charge_error = true; in set_sw_charger_voltage()
663 cm->fc_config->sw_charge_voltage = voltage_uv; in set_sw_charger_voltage()
667 static int set_sw_charger_current(struct charger_manager *cm, in set_sw_charger_current() argument
675 psy = power_supply_get_by_name(cm->desc->psy_charger_stat); in set_sw_charger_current()
677 dev_err(cm->dev, "Cannot find power supply \"%s\"\n", in set_sw_charger_current()
678 cm->desc->psy_charger_stat); in set_sw_charger_current()
679 cm->fc_config->fc_charge_error = true; in set_sw_charger_current()
690 dev_err(cm->dev, "failed to set %s POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT\n", in set_sw_charger_current()
691 cm->desc->psy_charger_stat); in set_sw_charger_current()
692 cm->fc_config->fc_charge_error = true; in set_sw_charger_current()
699 static int get_sw_charger_current_max(struct charger_manager *cm, int *uA) in get_sw_charger_current_max() argument
705 psy = power_supply_get_by_name(cm->desc->psy_charger_stat); in get_sw_charger_current_max()
707 dev_err(cm->dev, "Cannot find power supply \"%s\"\n", in get_sw_charger_current_max()
708 cm->desc->psy_charger_stat); in get_sw_charger_current_max()
709 cm->fc_config->fc_charge_error = true; in get_sw_charger_current_max()
719 dev_err(cm->dev, "failed to get %s POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX\n", in get_sw_charger_current_max()
720 cm->desc->psy_charger_stat); in get_sw_charger_current_max()
721 cm->fc_config->fc_charge_error = true; in get_sw_charger_current_max()
729 static int get_sw_charger_input_limit_current(struct charger_manager *cm, int *uA) in get_sw_charger_input_limit_current() argument
735 psy = power_supply_get_by_name(cm->desc->psy_charger_stat); in get_sw_charger_input_limit_current()
737 dev_err(cm->dev, "Cannot find power supply \"%s\"\n", in get_sw_charger_input_limit_current()
738 cm->desc->psy_charger_stat); in get_sw_charger_input_limit_current()
739 cm->fc_config->fc_charge_error = true; in get_sw_charger_input_limit_current()
749 dev_err(cm->dev, "failed to get %s POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT\n", in get_sw_charger_input_limit_current()
750 cm->desc->psy_charger_stat); in get_sw_charger_input_limit_current()
751 cm->fc_config->fc_charge_error = true; in get_sw_charger_input_limit_current()
759 static int set_cp_enable(struct charger_manager *cm) in set_cp_enable() argument
765 cp_psy = power_supply_get_by_name(cm->desc->psy_charger_pump_stat); in set_cp_enable()
767 dev_err(cm->dev, "Cannot find power supply \"%s\"\n", in set_cp_enable()
768 cm->desc->psy_charger_pump_stat); in set_cp_enable()
769 cm->fc_config->fc_charge_error = true; in set_cp_enable()
780 dev_err(cm->dev, "failed to enable %s POWER_SUPPLY_PROP_CP_CHARGING_ENABLED\n", in set_cp_enable()
781 cm->desc->psy_charger_pump_stat); in set_cp_enable()
782 cm->fc_config->fc_charge_error = true; in set_cp_enable()
786 cm->cp.charge_enabled = 1; in set_cp_enable()
790 static int set_cp_disable(struct charger_manager *cm) in set_cp_disable() argument
796 cp_psy = power_supply_get_by_name(cm->desc->psy_charger_pump_stat); in set_cp_disable()
798 dev_err(cm->dev, "Cannot find power supply \"%s\"\n", in set_cp_disable()
799 cm->desc->psy_charger_pump_stat); in set_cp_disable()
800 cm->fc_config->fc_charge_error = true; in set_cp_disable()
811 dev_err(cm->dev, "failed to disable %s POWER_SUPPLY_PROP_CP_CHARGING_ENABLED\n", in set_cp_disable()
812 cm->desc->psy_charger_pump_stat); in set_cp_disable()
813 cm->fc_config->fc_charge_error = true; in set_cp_disable()
817 cm->cp.charge_enabled = 0; in set_cp_disable()
825 static bool is_polling_required(struct charger_manager *cm) in is_polling_required() argument
827 CM_DBG("cm->desc->polling_mode: %d\n", cm->desc->polling_mode); in is_polling_required()
828 switch (cm->desc->polling_mode) { in is_polling_required()
834 return is_ext_pwr_online(cm); in is_polling_required()
836 return cm->attached && cm->fc_charger_enabled; in is_polling_required()
838 dev_warn(cm->dev, "Incorrect polling_mode (%d)\n", in is_polling_required()
839 cm->desc->polling_mode); in is_polling_required()
844 static void cm_update_jeita_charge_info(struct charger_manager *cm) in cm_update_jeita_charge_info() argument
850 if (!cm->desc->measure_battery_temp) in cm_update_jeita_charge_info()
853 ret = get_battery_temperature(cm, &temperature); in cm_update_jeita_charge_info()
856 cm->fc_config->jeita_enable_charge = false; in cm_update_jeita_charge_info()
860 count = cm->desc->jeita_charge_table_count; in cm_update_jeita_charge_info()
862 cm->fc_config->jeita_charge_support = true; in cm_update_jeita_charge_info()
863 cm->fc_config->jeita_temperature = temperature; in cm_update_jeita_charge_info()
864 if (temperature / 10 < cm->desc->jeita_charge_table[0].temp_down) { in cm_update_jeita_charge_info()
865 cm->fc_config->jeita_charge_current = 0; in cm_update_jeita_charge_info()
866 cm->fc_config->jeita_charge_voltage = 0; in cm_update_jeita_charge_info()
867 cm->fc_config->jeita_enable_charge = false; in cm_update_jeita_charge_info()
868 cm->fc_config->jeita_status = CM_JEITA_COLD; in cm_update_jeita_charge_info()
872 if (temperature / 10 > cm->desc->jeita_charge_table[count - 1].temp_up) { in cm_update_jeita_charge_info()
873 cm->fc_config->jeita_charge_current = 0; in cm_update_jeita_charge_info()
874 cm->fc_config->jeita_charge_voltage = 0; in cm_update_jeita_charge_info()
875 cm->fc_config->jeita_enable_charge = false; in cm_update_jeita_charge_info()
876 cm->fc_config->jeita_status = CM_JEITA_HOT; in cm_update_jeita_charge_info()
880 if (!cm->fc_config->jeita_enable_charge) in cm_update_jeita_charge_info()
881 if ((temperature / 10 > cm->desc->jeita_charge_table[0].temp_down + 3) && in cm_update_jeita_charge_info()
882 (temperature / 10 < cm->desc->jeita_charge_table[count - 1].temp_up - 3)) in cm_update_jeita_charge_info()
883 cm->fc_config->jeita_enable_charge = true; in cm_update_jeita_charge_info()
886 if ((temperature / 10 > cm->desc->jeita_charge_table[i].temp_down) && in cm_update_jeita_charge_info()
887 (temperature / 10 <= cm->desc->jeita_charge_table[i].temp_up)) { in cm_update_jeita_charge_info()
888 cm->fc_config->jeita_charge_current = in cm_update_jeita_charge_info()
889 cm->desc->jeita_charge_table[i].chrg_current; in cm_update_jeita_charge_info()
890 cm->fc_config->jeita_charge_voltage = in cm_update_jeita_charge_info()
891 cm->desc->jeita_charge_table[i].chrg_voltage; in cm_update_jeita_charge_info()
892 cm->fc_config->jeita_status = CM_JEITA_COOL + i; in cm_update_jeita_charge_info()
898 static void cm_update_charge_pump_status(struct charger_manager *cm) in cm_update_charge_pump_status() argument
904 cp_psy = power_supply_get_by_name(cm->desc->psy_charger_pump_stat); in cm_update_charge_pump_status()
906 dev_err(cm->dev, "Cannot find power supply:%s\n", in cm_update_charge_pump_status()
907 cm->desc->psy_charger_pump_stat); in cm_update_charge_pump_status()
915 cm->cp.vbat_volt = val.intval; in cm_update_charge_pump_status()
921 cm->cp.ibat_curr = val.intval; in cm_update_charge_pump_status()
927 cm->cp.vbus_volt = val.intval; in cm_update_charge_pump_status()
933 cm->cp.ibus_curr = val.intval; in cm_update_charge_pump_status()
939 cm->cp.ibus_max = val.intval; in cm_update_charge_pump_status()
945 cm->cp.vbus_max = val.intval; in cm_update_charge_pump_status()
951 cm->cp.vbus_error_high = val.intval; in cm_update_charge_pump_status()
957 cm->cp.vbus_error_low = val.intval; in cm_update_charge_pump_status()
963 cm->cp.bat_temp = val.intval; in cm_update_charge_pump_status()
968 cm->cp.bus_temp = val.intval; in cm_update_charge_pump_status()
973 cm->cp.die_temp = val.intval; in cm_update_charge_pump_status()
978 cm->cp.bat_ovp_alarm = val.intval; in cm_update_charge_pump_status()
983 cm->cp.bat_ocp_alarm = val.intval; in cm_update_charge_pump_status()
988 cm->cp.bat_ucp_alarm = val.intval; in cm_update_charge_pump_status()
993 cm->cp.bus_ovp_alarm = val.intval; in cm_update_charge_pump_status()
998 cm->cp.bus_ocp_alarm = val.intval; in cm_update_charge_pump_status()
1003 cm->cp.bat_therm_alarm = val.intval; in cm_update_charge_pump_status()
1008 cm->cp.bus_therm_alarm = val.intval; in cm_update_charge_pump_status()
1013 cm->cp.die_therm_alarm = val.intval; in cm_update_charge_pump_status()
1019 cm->cp.bat_ovp_fault = val.intval; in cm_update_charge_pump_status()
1024 cm->cp.bat_ocp_fault = val.intval; in cm_update_charge_pump_status()
1029 cm->cp.bus_ovp_fault = val.intval; in cm_update_charge_pump_status()
1034 cm->cp.bus_ocp_fault = val.intval; in cm_update_charge_pump_status()
1039 cm->cp.bat_therm_fault = val.intval; in cm_update_charge_pump_status()
1044 cm->cp.bus_therm_fault = val.intval; in cm_update_charge_pump_status()
1049 cm->cp.die_therm_fault = val.intval; in cm_update_charge_pump_status()
1054 cm->cp.cp_alarm_status, cm->cp.cp_fault_status); in cm_update_charge_pump_status()
1057 static void cm_charge_pump_move_state(struct charger_manager *cm, in cm_charge_pump_move_state() argument
1061 pm_debug_str[cm->state], pm_debug_str[state]); in cm_charge_pump_move_state()
1063 cm->state = state; in cm_charge_pump_move_state()
1066 static int cm_charge_limit_update(struct charger_manager *cm) in cm_charge_limit_update() argument
1074 info = cm->desc->info; in cm_charge_limit_update()
1075 fc_config = cm->fc_config; in cm_charge_limit_update()
1087 ret = get_battery_voltage(cm, &fc_config->vbat_now); in cm_charge_limit_update()
1091 fc_config->vbat_now = cm->cp.vbat_volt; in cm_charge_limit_update()
1093 ret = get_battery_current(cm, &fc_config->ibat_now); in cm_charge_limit_update()
1101 ret = get_sw_charger_current_max(cm, &cm->fc_config->sw_charge_current_max); in cm_charge_limit_update()
1105 ret = get_sw_charger_input_limit_current(cm, &ibus_dcdc_lmt); in cm_charge_limit_update()
1111 fc_config->vbus_cp_lmt = cm->cp.vbus_max; in cm_charge_limit_update()
1112 fc_config->ibus_cp_lmt = cm->cp.ibus_max; in cm_charge_limit_update()
1113 fc_config->vbus_cp = cm->cp.vbus_volt; in cm_charge_limit_update()
1114 fc_config->ibus_cp = cm->cp.ibus_curr; in cm_charge_limit_update()
1116 fc_config->adapter_curr_required = cm->cp.request_current; in cm_charge_limit_update()
1117 fc_config->adapter_volt_required = cm->cp.request_voltage; in cm_charge_limit_update()
1124 ret = power_supply_get_property(cm->desc->tcpm_psy, in cm_charge_limit_update()
1128 dev_err(cm->dev, "[%d] failed to get POWER_SUPPLY_PROP_VOLTAGE_MAX\n", __LINE__); in cm_charge_limit_update()
1133 ret = power_supply_get_property(cm->desc->tcpm_psy, in cm_charge_limit_update()
1137 dev_err(cm->dev, "[%d] failed to get POWER_SUPPLY_PROP_CURRENT_MAX\n", __LINE__); in cm_charge_limit_update()
1142 ret = power_supply_get_property(cm->desc->tcpm_psy, in cm_charge_limit_update()
1146 dev_err(cm->dev, "[%d] failed to get POWER_SUPPLY_PROP_INPUT_POWER_LIMIT\n", __LINE__); in cm_charge_limit_update()
1199 cm->cp.ibat_curr, in cm_charge_limit_update()
1200 cm->cp.vbat_volt, in cm_charge_limit_update()
1228 static int cm_charge_pump_algo(struct charger_manager *cm) in cm_charge_pump_algo() argument
1244 fc_config = cm->fc_config; in cm_charge_pump_algo()
1265 CM_DBG("ibus_limit: %d cm->cp.ibus_max: %d\n", ibus_limit, cm->cp.ibus_max); in cm_charge_pump_algo()
1274 if (cm->cp.ibus_curr > fc_config->ibus_cp_lmt) in cm_charge_pump_algo()
1277 cm->cp.ibus_curr, fc_config->ibus_cp_lmt); in cm_charge_pump_algo()
1279 if (cm->cp.request_voltage + FC_VOLTAGE_STEP < fc_config->adapter_volt_max_lmt) in cm_charge_pump_algo()
1286 cm->cp.request_current -= FC_CURRENT_STEP; in cm_charge_pump_algo()
1288 cm->cp.request_current = min(fc_config->adapter_curr_max_lmt, cm->cp.request_current); in cm_charge_pump_algo()
1294 if (cm->cp.bat_ocp_alarm in cm_charge_pump_algo()
1295 || cm->cp.bus_ocp_alarm || cm->cp.bus_ovp_alarm) in cm_charge_pump_algo()
1300 if (cm->cp.bat_therm_fault || !fc_config->jeita_enable_charge) { in cm_charge_pump_algo()
1303 cm->cp.bat_therm_fault, fc_config->jeita_enable_charge); in cm_charge_pump_algo()
1305 } else if (cm->cp.bat_ocp_fault || cm->cp.bus_ocp_fault || in cm_charge_pump_algo()
1306 cm->cp.bat_ovp_fault || cm->cp.bus_ovp_fault) { in cm_charge_pump_algo()
1311 cm->cp.bat_ocp_fault, in cm_charge_pump_algo()
1312 cm->cp.bus_ocp_fault, in cm_charge_pump_algo()
1313 cm->cp.bat_ovp_fault, in cm_charge_pump_algo()
1314 cm->cp.bus_ovp_fault); in cm_charge_pump_algo()
1317 } else if (cm->cp.vbus_error_low || cm->cp.vbus_error_high) { in cm_charge_pump_algo()
1320 cm->cp.charge_enabled, cm->cp.vbus_error_low, cm->cp.vbus_error_high); in cm_charge_pump_algo()
1327 if (cm->fc2_taper_timer++ > TAPER_TIMEOUT) { in cm_charge_pump_algo()
1329 cm->fc2_taper_timer = 0; in cm_charge_pump_algo()
1333 cm->fc2_taper_timer = 0; in cm_charge_pump_algo()
1337 cm->cp.request_voltage += steps * FC_VOLTAGE_STEP; in cm_charge_pump_algo()
1351 CM_DBG(">>>>>> cm->cp.charge_enabled: %d\n", cm->cp.charge_enabled); in cm_charge_pump_algo()
1356 static void cm_sw_fast_charge_algo(struct charger_manager *cm) in cm_sw_fast_charge_algo() argument
1371 fc_config = cm->fc_config; in cm_sw_fast_charge_algo()
1378 if (fc_config->ibat_lmt / 2 < cm->cp.request_current) in cm_sw_fast_charge_algo()
1398 ret = set_sw_charger_voltage(cm, charge_voltage); in cm_sw_fast_charge_algo()
1410 ret = set_sw_charger_enable(cm); in cm_sw_fast_charge_algo()
1414 ret = set_sw_charger_current(cm, fc_config->sw_charge_current); in cm_sw_fast_charge_algo()
1420 ret = set_sw_charger_disable(cm); in cm_sw_fast_charge_algo()
1437 static int cm_charge_pump_sm(struct charger_manager *cm) in cm_charge_pump_sm() argument
1451 info = cm->desc->info; in cm_charge_pump_sm()
1452 fc_config = cm->fc_config; in cm_charge_pump_sm()
1453 switch (cm->state) { in cm_charge_pump_sm()
1459 ret = power_supply_get_property(cm->desc->tcpm_psy, in cm_charge_pump_sm()
1463 dev_err(cm->dev, "[%d] failed to get POWER_SUPPLY_PROP_VOLTAGE_MAX\n", __LINE__); in cm_charge_pump_sm()
1466 ret = set_sw_charger_input_limit_current(cm, val.intval); in cm_charge_pump_sm()
1469 if (cm->fc_config->sw_charge_status) { in cm_charge_pump_sm()
1470 ret = set_sw_charger_disable(cm); in cm_charge_pump_sm()
1474 cm_charge_pump_move_state(cm, PPS_PM_STATE_FC_JEITA); in cm_charge_pump_sm()
1475 cm->desc->polling_interval_ms = 3000; in cm_charge_pump_sm()
1480 ret = set_sw_charger_voltage(cm, fc_config->vbat_lmt); in cm_charge_pump_sm()
1485 ret = set_sw_charger_current(cm, fc_config->sw_charge_current); in cm_charge_pump_sm()
1489 if (!cm->fc_config->sw_charge_status) { in cm_charge_pump_sm()
1490 ret = set_sw_charger_enable(cm); in cm_charge_pump_sm()
1495 ret = set_sw_charger_voltage(cm, fc_config->vbat_lmt); in cm_charge_pump_sm()
1499 ret = set_sw_charger_current(cm, fc_config->sw_charge_current); in cm_charge_pump_sm()
1503 if (!cm->fc_config->sw_charge_status) { in cm_charge_pump_sm()
1504 ret = set_sw_charger_enable(cm); in cm_charge_pump_sm()
1510 if (cm->cp.vbat_volt < info.precharge_voltage_max_uv) { in cm_charge_pump_sm()
1511 ret = power_supply_get_property(cm->desc->tcpm_psy, in cm_charge_pump_sm()
1515 dev_err(cm->dev, "[%d] failed to get POWER_SUPPLY_PROP_CURRENT_MAX\n", __LINE__); in cm_charge_pump_sm()
1518 ret = set_sw_charger_input_limit_current(cm, val.intval); in cm_charge_pump_sm()
1522 cm->cp.vbat_volt, info.precharge_voltage_max_uv); in cm_charge_pump_sm()
1523 } else if (cm->cp.vbat_volt > cm->fc_config->vbat_lmt - 100 * 1000) { in cm_charge_pump_sm()
1525 cm->cp.vbat_volt, cm->fc_config->vbat_lmt - 100 * 1000); in cm_charge_pump_sm()
1526 cm_charge_pump_move_state(cm, PPS_PM_STATE_FC_EXIT); in cm_charge_pump_sm()
1529 cm->cp.vbat_volt); in cm_charge_pump_sm()
1531 cm->desc->polling_interval_ms = 300; in cm_charge_pump_sm()
1534 ret = power_supply_set_property(cm->desc->tcpm_psy, in cm_charge_pump_sm()
1538 dev_err(cm->dev, "[%d] failed to set POWER_SUPPLY_PROP_ONLINE\n", __LINE__); in cm_charge_pump_sm()
1541 cm_charge_pump_move_state(cm, PPS_PM_STATE_FC_ENTRY); in cm_charge_pump_sm()
1546 ret = set_sw_charger_input_limit_current(cm, USB_PPS_INPUT_CURRENT); in cm_charge_pump_sm()
1550 ret = power_supply_get_property(cm->desc->tcpm_psy, in cm_charge_pump_sm()
1554 dev_err(cm->dev, "[%d] failed to get POWER_SUPPLY_PROP_CURRENT_MAX\n", __LINE__); in cm_charge_pump_sm()
1559 cm->cp.request_current = min(cm->cp.ibus_max + fc_config->ibus_dcdc_lmt, val.intval); in cm_charge_pump_sm()
1562 ibat_max = min(fc_config->ibat_lmt, 2 * cm->cp.request_current); in cm_charge_pump_sm()
1565 …cm->cp.request_voltage = bat_voltage * 2 + 15 * vbus_volt_init_up / 10 + ibat_max / 2 * 100 / 1000; in cm_charge_pump_sm()
1568 cm->cp.request_voltage, cm->cp.vbat_volt, vbus_volt_init_up, bat_voltage); in cm_charge_pump_sm()
1570 adapter_volt_max = fc_config->adaper_power_lmt / (cm->cp.request_current / 1000); in cm_charge_pump_sm()
1571 cm->cp.request_voltage = min(cm->cp.request_voltage, adapter_volt_max * 1000); in cm_charge_pump_sm()
1573 ret = set_sw_charger_voltage(cm, cm->fc_config->vbat_lmt + 200 * 1000); in cm_charge_pump_sm()
1579 ret = set_sw_charger_current(cm, fc_config->sw_charge_current); in cm_charge_pump_sm()
1584 (fc_config->ibat_lmt / 2 < cm->cp.request_current) || in cm_charge_pump_sm()
1587 if (cm->fc_config->sw_charge_status) { in cm_charge_pump_sm()
1588 ret = set_sw_charger_disable(cm); in cm_charge_pump_sm()
1594 if (!cm->fc_config->sw_charge_status && in cm_charge_pump_sm()
1597 ret = set_sw_charger_enable(cm); in cm_charge_pump_sm()
1603 val.intval = cm->cp.request_voltage; in cm_charge_pump_sm()
1604 ret = power_supply_set_property(cm->desc->tcpm_psy, in cm_charge_pump_sm()
1608 dev_err(cm->dev, "[%d] failed to set POWER_SUPPLY_PROP_VOLTAGE_NOW\n", __LINE__); in cm_charge_pump_sm()
1612 val.intval = cm->cp.request_current; in cm_charge_pump_sm()
1613 ret = power_supply_set_property(cm->desc->tcpm_psy, in cm_charge_pump_sm()
1617 dev_err(cm->dev, "[%d] failed to set POWER_SUPPLY_PROP_CURRENT_NOW\n", __LINE__); in cm_charge_pump_sm()
1621 cm->cp.request_voltage, cm->cp.request_current); in cm_charge_pump_sm()
1623 if (!cm->cp.charge_enabled) { in cm_charge_pump_sm()
1624 ret = set_cp_enable(cm); in cm_charge_pump_sm()
1628 cm_charge_pump_move_state(cm, PPS_PM_STATE_FC_ENTRY_1); in cm_charge_pump_sm()
1629 cm->desc->polling_interval_ms = 300; in cm_charge_pump_sm()
1635 cm->cp.request_voltage); in cm_charge_pump_sm()
1636 ret = set_sw_charger_input_limit_current(cm, USB_PPS_INPUT_CURRENT); in cm_charge_pump_sm()
1640 cm->cp.request_voltage += cm->cp.request_voltage - cm->cp.vbus_volt; in cm_charge_pump_sm()
1642 adapter_volt_max = fc_config->adaper_power_lmt / (cm->cp.request_current / 1000); in cm_charge_pump_sm()
1643 cm->cp.request_voltage = min(cm->cp.request_voltage, adapter_volt_max * 1000); in cm_charge_pump_sm()
1644 ret = set_sw_charger_voltage(cm, cm->fc_config->vbat_lmt + 200 * 1000); in cm_charge_pump_sm()
1650 ret = set_sw_charger_current(cm, fc_config->sw_charge_current); in cm_charge_pump_sm()
1655 (fc_config->ibat_lmt / 2 < cm->cp.request_current) || in cm_charge_pump_sm()
1658 if (cm->fc_config->sw_charge_status) { in cm_charge_pump_sm()
1659 ret = set_sw_charger_disable(cm); in cm_charge_pump_sm()
1665 if (!cm->fc_config->sw_charge_status && in cm_charge_pump_sm()
1668 ret = set_sw_charger_enable(cm); in cm_charge_pump_sm()
1674 val.intval = cm->cp.request_voltage; in cm_charge_pump_sm()
1675 ret = power_supply_set_property(cm->desc->tcpm_psy, in cm_charge_pump_sm()
1679 dev_err(cm->dev, "[%d] failed to set POWER_SUPPLY_PROP_VOLTAGE_NOW\n", __LINE__); in cm_charge_pump_sm()
1682 val.intval = cm->cp.request_current; in cm_charge_pump_sm()
1683 ret = power_supply_set_property(cm->desc->tcpm_psy, in cm_charge_pump_sm()
1687 dev_err(cm->dev, "[%d] failed to set POWER_SUPPLY_PROP_CURRENT_NOW\n", __LINE__); in cm_charge_pump_sm()
1690 cm->desc->polling_interval_ms = 300; in cm_charge_pump_sm()
1692 cm->cp.request_voltage, cm->cp.request_current); in cm_charge_pump_sm()
1695 cm->cp.vbus_volt, vbus_volt_init_up, bat_res, in cm_charge_pump_sm()
1697 cm_charge_pump_move_state(cm, PPS_PM_STATE_FC_ENTRY_2); in cm_charge_pump_sm()
1701 cm->cp.request_voltage, cm->cp.vbus_volt, cm->cp.vbat_volt); in cm_charge_pump_sm()
1702 ret = set_sw_charger_input_limit_current(cm, USB_PPS_INPUT_CURRENT); in cm_charge_pump_sm()
1705 ret = set_sw_charger_voltage(cm, cm->fc_config->vbat_lmt + 200 * 1000); in cm_charge_pump_sm()
1711 ret = set_sw_charger_current(cm, fc_config->sw_charge_current); in cm_charge_pump_sm()
1716 (fc_config->ibat_lmt / 2 < cm->cp.request_current) || in cm_charge_pump_sm()
1719 if (cm->fc_config->sw_charge_status) { in cm_charge_pump_sm()
1720 ret = set_sw_charger_disable(cm); in cm_charge_pump_sm()
1726 if (!cm->fc_config->sw_charge_status && in cm_charge_pump_sm()
1729 ret = set_sw_charger_enable(cm); in cm_charge_pump_sm()
1735 if (cm->cp.vbus_error_low) { in cm_charge_pump_sm()
1737 cm->cp.request_voltage += FC_VOLTAGE_STEP * 2; in cm_charge_pump_sm()
1739 val.intval = cm->cp.request_voltage; in cm_charge_pump_sm()
1740 ret = power_supply_set_property(cm->desc->tcpm_psy, in cm_charge_pump_sm()
1744 dev_err(cm->dev, "[%d] failed to set POWER_SUPPLY_PROP_VOLTAGE_NOW\n", __LINE__); in cm_charge_pump_sm()
1747 ret = set_cp_enable(cm); in cm_charge_pump_sm()
1751 cm->cp.request_voltage, cm->cp.request_current); in cm_charge_pump_sm()
1752 } else if (cm->cp.vbus_error_high) { in cm_charge_pump_sm()
1754 cm->cp.request_voltage -= FC_VOLTAGE_STEP * 2; in cm_charge_pump_sm()
1755 val.intval = cm->cp.request_voltage; in cm_charge_pump_sm()
1756 ret = power_supply_set_property(cm->desc->tcpm_psy, in cm_charge_pump_sm()
1760 dev_err(cm->dev, "[%d] failed to set POWER_SUPPLY_PROP_VOLTAGE_NOW\n", __LINE__); in cm_charge_pump_sm()
1763 ret = set_cp_enable(cm); in cm_charge_pump_sm()
1767 cm->cp.request_voltage, cm->cp.request_current); in cm_charge_pump_sm()
1770 cm->fc2_taper_timer = 0; in cm_charge_pump_sm()
1771 cm_charge_pump_move_state(cm, PPS_PM_STATE_FC_TUNE); in cm_charge_pump_sm()
1776 cm_charge_pump_move_state(cm, PPS_PM_STATE_FC_EXIT); in cm_charge_pump_sm()
1778 cm->desc->polling_interval_ms = 100; in cm_charge_pump_sm()
1783 ret = set_sw_charger_input_limit_current(cm, USB_PPS_INPUT_CURRENT); in cm_charge_pump_sm()
1786 ret = cm_charge_pump_algo(cm); in cm_charge_pump_sm()
1789 cm_charge_pump_move_state(cm, PPS_PM_STATE_FC_JEITA); in cm_charge_pump_sm()
1792 cm_charge_pump_move_state(cm, PPS_PM_STATE_FC_EXIT); in cm_charge_pump_sm()
1796 cm_charge_pump_move_state(cm, PPS_PM_STATE_FC_EXIT); in cm_charge_pump_sm()
1798 if (!cm->cp.charge_enabled) { in cm_charge_pump_sm()
1799 ret = set_cp_enable(cm); in cm_charge_pump_sm()
1804 cm_sw_fast_charge_algo(cm); in cm_charge_pump_sm()
1805 cm->cp.request_voltage = min(cm->cp.request_voltage, cm->cp.vbus_max); in cm_charge_pump_sm()
1807 CM_DBG("cm->cp.vbat_volt: %d\n", cm->cp.vbat_volt); in cm_charge_pump_sm()
1808 val.intval = cm->cp.request_voltage; in cm_charge_pump_sm()
1809 CM_DBG("cm->cp.request_voltage: %d\n", cm->cp.request_voltage); in cm_charge_pump_sm()
1810 ret = power_supply_set_property(cm->desc->tcpm_psy, in cm_charge_pump_sm()
1814 dev_err(cm->dev, "[%d] failed to set POWER_SUPPLY_PROP_VOLTAGE_NOW\n", __LINE__); in cm_charge_pump_sm()
1817 val.intval = cm->cp.request_current; in cm_charge_pump_sm()
1818 ret = power_supply_set_property(cm->desc->tcpm_psy, in cm_charge_pump_sm()
1822 dev_err(cm->dev, "[%d] failed to get POWER_SUPPLY_PROP_CURRENT_NOW\n", __LINE__); in cm_charge_pump_sm()
1825 cm->desc->polling_interval_ms = 1000; in cm_charge_pump_sm()
1826 cm_charge_pump_move_state(cm, PPS_PM_STATE_FC_TUNE); in cm_charge_pump_sm()
1830 CM_DBG("PPS_PM_STATE_FC_JEITA:%d\n", cm->fc_config->jeita_temperature); in cm_charge_pump_sm()
1832 if (!cm->cp.charge_enabled) { in cm_charge_pump_sm()
1833 ret = power_supply_get_property(cm->desc->tcpm_psy, in cm_charge_pump_sm()
1837 dev_err(cm->dev, "[%d] failed to get POWER_SUPPLY_PROP_CURRENT_MAX\n", __LINE__); in cm_charge_pump_sm()
1840 ret = set_sw_charger_input_limit_current(cm, val.intval); in cm_charge_pump_sm()
1845 if (!cm->fc_config->jeita_enable_charge && cm->cp.charge_enabled) { in cm_charge_pump_sm()
1846 ret = set_cp_disable(cm); in cm_charge_pump_sm()
1849 if (cm->fc_config->sw_charge_status) { in cm_charge_pump_sm()
1850 ret = set_sw_charger_disable(cm); in cm_charge_pump_sm()
1854 ret = set_sw_charger_voltage(cm, cm->fc_config->vbat_lmt); in cm_charge_pump_sm()
1860 ret = set_sw_charger_current(cm, fc_config->sw_charge_current); in cm_charge_pump_sm()
1865 ret = power_supply_set_property(cm->desc->tcpm_psy, in cm_charge_pump_sm()
1869 dev_err(cm->dev, "[%d] failed to set POWER_SUPPLY_PROP_ONLINE\n", __LINE__); in cm_charge_pump_sm()
1872 cm_charge_pump_move_state(cm, PPS_PM_STATE_FC_JEITA); in cm_charge_pump_sm()
1875 if (cm->fc_config->jeita_enable_charge) { in cm_charge_pump_sm()
1876 CM_DBG("EXIT PPS_PM_STATE_FC_JEITA:%d\n", cm->fc_config->jeita_temperature); in cm_charge_pump_sm()
1877 cm_charge_pump_move_state(cm, PPS_PM_STATE_ENTRY); in cm_charge_pump_sm()
1882 if (cm->cp.charge_enabled) { in cm_charge_pump_sm()
1883 ret = set_cp_disable(cm); in cm_charge_pump_sm()
1886 if (cm->fc_config->sw_charge_status) { in cm_charge_pump_sm()
1887 ret = set_sw_charger_disable(cm); in cm_charge_pump_sm()
1891 ret = set_sw_charger_voltage(cm, cm->fc_config->vbat_lmt); in cm_charge_pump_sm()
1897 ret = set_sw_charger_current(cm, fc_config->sw_charge_current); in cm_charge_pump_sm()
1901 if ((!cm->fc_config->sw_charge_status) && in cm_charge_pump_sm()
1903 ret = set_sw_charger_enable(cm); in cm_charge_pump_sm()
1908 ret = power_supply_get_property(cm->desc->tcpm_psy, in cm_charge_pump_sm()
1912 dev_err(cm->dev, "[%d] failed to get POWER_SUPPLY_PROP_CURRENT_MAX\n", __LINE__); in cm_charge_pump_sm()
1915 ret = set_sw_charger_input_limit_current(cm, val.intval); in cm_charge_pump_sm()
1921 ret = power_supply_set_property(cm->desc->tcpm_psy, in cm_charge_pump_sm()
1925 dev_err(cm->dev, "[%d] failed to set POWER_SUPPLY_PROP_ONLINE\n", __LINE__); in cm_charge_pump_sm()
1929 cm_charge_pump_move_state(cm, PPS_PM_STATE_ENTRY); in cm_charge_pump_sm()
1935 static void cm_disable_charge(struct charger_manager *cm);
1943 static void _cm_monitor(struct charger_manager *cm) in _cm_monitor() argument
1947 cm_update_charge_pump_status(cm); in _cm_monitor()
1948 cm_update_jeita_charge_info(cm); in _cm_monitor()
1949 ret = cm_charge_limit_update(cm); in _cm_monitor()
1950 if (ret || cm->fc_config->fc_charge_error) { in _cm_monitor()
1951 cm_disable_charge(cm); in _cm_monitor()
1955 ret = cm_charge_pump_sm(cm); in _cm_monitor()
1956 if (ret || cm->fc_config->fc_charge_error) in _cm_monitor()
1957 cm_disable_charge(cm); in _cm_monitor()
1964 static void _setup_polling(struct charger_manager *cm) in _setup_polling() argument
1971 if ((is_polling_required(cm) && cm->desc->polling_interval_ms) || in _setup_polling()
1972 (cm->attached && cm->fc_charger_enabled)) { in _setup_polling()
1973 CM_DBG("cm->attached: %d\n", cm->attached); in _setup_polling()
1976 if (min > cm->desc->polling_interval_ms) in _setup_polling()
1977 min = cm->desc->polling_interval_ms; in _setup_polling()
1991 WARN(cm->cm_wq == NULL, "rockchip-charger-manager: workqueue not initialized\n"); in _setup_polling()
2001 if (time_before(_next_polling, cm->next_polling)) { in _setup_polling()
2002 queue_delayed_work(cm->cm_wq, &cm->cm_monitor_work, polling_jiffy); in _setup_polling()
2003 cm->next_polling = _next_polling; in _setup_polling()
2005 if (queue_delayed_work(cm->cm_wq, &cm->cm_monitor_work, polling_jiffy)) in _setup_polling()
2006 cm->next_polling = _next_polling; in _setup_polling()
2021 struct charger_manager *cm = container_of(work, in cm_monitor_poller() local
2025 _cm_monitor(cm); in cm_monitor_poller()
2026 _setup_polling(cm); in cm_monitor_poller()
2031 struct charger_manager *cm = container_of(work, in cm_jeita_poller() local
2037 cm_update_jeita_charge_info(cm); in cm_jeita_poller()
2038 ret = get_sw_charger_current_max(cm, &cm->fc_config->sw_charge_current_max); in cm_jeita_poller()
2041 if (cm->fc_config->jeita_status != status) { in cm_jeita_poller()
2042 ret = set_sw_charger_voltage(cm, cm->fc_config->jeita_charge_voltage); in cm_jeita_poller()
2045 if ((cm->fc_config->jeita_status == CM_JEITA_COLD) || in cm_jeita_poller()
2046 (cm->fc_config->jeita_status == CM_JEITA_HOT)) { in cm_jeita_poller()
2047 if (cm->fc_config->sw_charge_status) { in cm_jeita_poller()
2048 ret = set_sw_charger_disable(cm); in cm_jeita_poller()
2053 cm->fc_config->sw_charge_current = min(cm->fc_config->jeita_charge_current, in cm_jeita_poller()
2054 cm->fc_config->sw_charge_current_max); in cm_jeita_poller()
2055 ret = set_sw_charger_current(cm, cm->fc_config->sw_charge_current); in cm_jeita_poller()
2058 if (!cm->fc_config->sw_charge_status) { in cm_jeita_poller()
2059 ret = set_sw_charger_enable(cm); in cm_jeita_poller()
2064 status = cm->fc_config->jeita_status; in cm_jeita_poller()
2066 ret = set_sw_charger_voltage(cm, cm->fc_config->jeita_charge_voltage); in cm_jeita_poller()
2069 cm->fc_config->sw_charge_current = min(cm->fc_config->jeita_charge_current, in cm_jeita_poller()
2070 cm->fc_config->sw_charge_current_max); in cm_jeita_poller()
2071 ret = set_sw_charger_current(cm, cm->fc_config->sw_charge_current); in cm_jeita_poller()
2075 if (!cm->fc_config->sw_charge_status && cm->fc_config->jeita_enable_charge) { in cm_jeita_poller()
2076 ret = set_sw_charger_enable(cm); in cm_jeita_poller()
2082 if (cm->attached) in cm_jeita_poller()
2083 queue_delayed_work(cm->cm_wq, in cm_jeita_poller()
2084 &cm->cm_jeita_work, in cm_jeita_poller()
2098 struct charger_manager *cm = container_of(work, in charger_extcon_work() local
2102 cancel_delayed_work(&cm->cm_monitor_work); in charger_extcon_work()
2103 queue_delayed_work(cm->cm_wq, &cm->cm_monitor_work, 0); in charger_extcon_work()
2119 struct charger_manager *cm = in charger_extcon_notifier() local
2121 struct charger_desc *desc = cm->desc; in charger_extcon_notifier()
2131 cm->attached = event; in charger_extcon_notifier()
2132 fc_config = cm->fc_config; in charger_extcon_notifier()
2134 CM_DBG("%s, %d\n", __func__, cm->attached); in charger_extcon_notifier()
2136 cm->is_charge = 1; in charger_extcon_notifier()
2137 pm_stay_awake(cm->dev); in charger_extcon_notifier()
2145 dev_err(cm->dev, "[%d] failed to get POWER_SUPPLY_PROP_CURRENT_MAX\n", __LINE__); in charger_extcon_notifier()
2155 dev_err(cm->dev, "[%d] failed to get POWER_SUPPLY_PROP_CURRENT_MAX\n", __LINE__); in charger_extcon_notifier()
2168 dev_err(cm->dev, "[%d] failed to get POWER_SUPPLY_PROP_CURRENT_MAX\n", __LINE__); in charger_extcon_notifier()
2173 cm->is_fast_charge = 1; in charger_extcon_notifier()
2180 dev_err(cm->dev, "[%d] failed to get POWER_SUPPLY_PROP_CURRENT_MAX\n", __LINE__); in charger_extcon_notifier()
2188 dev_err(cm->dev, "[%d] failed to get POWER_SUPPLY_PROP_CURRENT_MAXn", __LINE__); in charger_extcon_notifier()
2193 ret = set_sw_charger_input_limit_current(cm, fc_config->adapter_curr_max_lmt); in charger_extcon_notifier()
2199 cm->is_fast_charge = 1; in charger_extcon_notifier()
2202 CM_DBG("charge_type: %d, %d\n", cm->fc_config->charge_type, __LINE__); in charger_extcon_notifier()
2203 cm->fc_charger_enabled = 1; in charger_extcon_notifier()
2204 cm_charge_pump_move_state(cm, PPS_PM_STATE_ENTRY); in charger_extcon_notifier()
2209 queue_work(cm->cm_wq, &cm->wq); in charger_extcon_notifier()
2217 dev_err(cm->dev, "[%d] failed to get POWER_SUPPLY_PROP_CURRENT_MAX\n", __LINE__); in charger_extcon_notifier()
2226 ret = set_sw_charger_input_limit_current(cm, USB_TYPE_C_INPUT_CURRENT); in charger_extcon_notifier()
2234 ret = set_sw_charger_input_limit_current(cm, USB_SDP_INPUT_CURRENT); in charger_extcon_notifier()
2240 ret = set_sw_charger_input_limit_current(cm, USB_DCP_INPUT_CURRENT); in charger_extcon_notifier()
2246 ret = set_sw_charger_input_limit_current(cm, USB_CDP_INPUT_CURRENT); in charger_extcon_notifier()
2255 if (cm->fc_config->jeita_charge_support) { in charger_extcon_notifier()
2256 cancel_delayed_work(&cm->cm_jeita_work); in charger_extcon_notifier()
2257 queue_delayed_work(cm->cm_wq, &cm->cm_jeita_work, 0); in charger_extcon_notifier()
2261 cm->is_charge = 0; in charger_extcon_notifier()
2262 cm->is_fast_charge = 0; in charger_extcon_notifier()
2264 set_sw_charger_input_limit_current(cm, USB_SDP_INPUT_CURRENT); in charger_extcon_notifier()
2265 cm_charge_limit_update(cm); in charger_extcon_notifier()
2266 set_sw_charger_disable(cm); in charger_extcon_notifier()
2267 set_sw_charger_voltage(cm, cm->fc_config->vbat_lmt); in charger_extcon_notifier()
2268 cm_charge_pump_move_state(cm, PPS_PM_STATE_ENTRY); in charger_extcon_notifier()
2269 if (cm->cp.charge_enabled) in charger_extcon_notifier()
2270 set_cp_disable(cm); in charger_extcon_notifier()
2271 pm_relax(cm->dev); in charger_extcon_notifier()
2272 cm->fc_charger_enabled = 0; in charger_extcon_notifier()
2273 cm->fc_config->sw_ovp_flag = 0; in charger_extcon_notifier()
2274 cm->fc_config->fc_charge_error = false; in charger_extcon_notifier()
2280 static void cm_disable_charge(struct charger_manager *cm) in cm_disable_charge() argument
2282 cancel_delayed_work_sync(&cm->cm_monitor_work); in cm_disable_charge()
2283 cancel_delayed_work_sync(&cm->cm_jeita_work); in cm_disable_charge()
2285 charger_extcon_notifier(&cm->nb, 0, NULL); in cm_disable_charge()
2288 static void cm_enable_charge(struct charger_manager *cm) in cm_enable_charge() argument
2290 charger_extcon_notifier(&cm->nb, 1, NULL); in cm_enable_charge()
2304 struct charger_manager *cm = dev_get_drvdata(dev); in chg_en_store() local
2314 cm_enable_charge(cm); in chg_en_store()
2316 cm_disable_charge(cm); in chg_en_store()
2336 static int charger_extcon_init(struct charger_manager *cm) in charger_extcon_init() argument
2338 struct charger_desc *desc = cm->desc; in charger_extcon_init()
2348 INIT_WORK(&cm->wq, charger_extcon_work); in charger_extcon_init()
2349 cm->nb.notifier_call = charger_extcon_notifier; in charger_extcon_init()
2366 ret = devm_extcon_register_notifier(cm->dev, in charger_extcon_init()
2369 &cm->nb); in charger_extcon_init()
2377 charger_extcon_notifier(&cm->nb, event, NULL); in charger_extcon_init()
2483 struct charger_manager *cm; in charger_manager_probe() local
2491 cm = devm_kzalloc(&pdev->dev, sizeof(*cm), GFP_KERNEL); in charger_manager_probe()
2492 if (!cm) in charger_manager_probe()
2496 cm->dev = &pdev->dev; in charger_manager_probe()
2497 cm->desc = desc; in charger_manager_probe()
2511 if (cm->desc->polling_mode != CM_POLL_DISABLE && in charger_manager_probe()
2518 platform_set_drvdata(pdev, cm); in charger_manager_probe()
2519 charger_psy.of_node = cm->dev->of_node; in charger_manager_probe()
2528 cm->fc_config = &fc_config_parameter; in charger_manager_probe()
2529 ret = get_sw_charger_current_max(cm, &cm->fc_config->sw_charge_current_max); in charger_manager_probe()
2534 cm->fc_config->jeita_charge_support = true; in charger_manager_probe()
2535 cm->fc_config->jeita_enable_charge = true; in charger_manager_probe()
2554 cm->cm_wq = alloc_ordered_workqueue("%s", in charger_manager_probe()
2557 if (unlikely(!cm->cm_wq)) { in charger_manager_probe()
2561 INIT_DELAYED_WORK(&cm->cm_monitor_work, in charger_manager_probe()
2563 INIT_DELAYED_WORK(&cm->cm_jeita_work, in charger_manager_probe()
2567 ret = charger_extcon_init(cm); in charger_manager_probe()
2591 struct charger_manager *cm = platform_get_drvdata(pdev); in charger_manager_remove() local
2593 cancel_delayed_work_sync(&cm->cm_monitor_work); in charger_manager_remove()
2594 cancel_delayed_work_sync(&cm->cm_jeita_work); in charger_manager_remove()
2601 struct charger_manager *cm = platform_get_drvdata(pdev); in charger_manager_shutdown() local
2605 cancel_delayed_work_sync(&cm->cm_monitor_work); in charger_manager_shutdown()
2606 cancel_delayed_work_sync(&cm->cm_jeita_work); in charger_manager_shutdown()
2610 cm->fc_config->charge_type, CHARGE_TYPE_PPS); in charger_manager_shutdown()
2611 if (cm->fc_config->charge_type == CHARGE_TYPE_PPS) { in charger_manager_shutdown()
2613 set_cp_disable(cm); in charger_manager_shutdown()
2615 ret = power_supply_set_property(cm->desc->tcpm_psy, in charger_manager_shutdown()
2619 dev_err(cm->dev, "failed to switch form PPS MODE to PD mode\n"); in charger_manager_shutdown()