Lines Matching full:charger

6  * This driver enables to monitor battery health and control charger
8 * Charger manager depends on other devices. Register this later than
23 #include <linux/power/charger-manager.h>
41 { "FAST-CHARGER", EXTCON_CHG_USB_FAST },
42 { "SLOW-CHARGER", EXTCON_CHG_USB_SLOW },
94 * @cm: the Charger Manager representing the battery.
146 * @cm: the Charger Manager representing the battery.
182 * @cm: the Charger Manager representing the battery.
210 * @cm: the Charger Manager representing the battery.
223 /* If at least one of the charger is charging, return yes */ in is_charging()
225 /* 1. The charger should not be DISABLED */ in is_charging()
238 /* 2. The charger should be online (ext-power) */ in is_charging()
253 * 3. The charger should not be FULL, DISCHARGING, in is_charging()
279 * @cm: the Charger Manager representing the battery.
342 * @cm: the Charger Manager representing the battery.
365 * @cm: the Charger Manager representing the battery.
368 * Note that Charger Manager keeps the charger enabled regardless whether
369 * the charger is charging or not (because battery is full or no external
424 * even if charger was enabled at the other places in try_charger_enable()
445 * @cm: the Charger Manager representing the battery.
449 * duration exceed 'discharging _max_duration_ms', charger cable is
566 * @cm: the Charger Manager representing the battery.
601 * @cm: the Charger Manager representing the battery.
676 WARN(cm_wq == NULL, "charger-manager: workqueue not initialized" in _setup_polling()
855 * Returns true if the alarm is set for Charger Manager to use.
858 * cm_setup_timer does not need to set an alarm for Charger Manager,
894 pr_info("Charger Manager wakeup timer: %u ms\n", wakeup_ms); in cm_setup_timer()
909 * charger_extcon_work - enable/diable charger according to the state
910 * of charger cable
921 ret = regulator_set_current_limit(cable->charger->consumer, in charger_extcon_work()
925 cable->charger->regulator_name, cable->name); in charger_extcon_work()
930 cable->charger->regulator_name, in charger_extcon_work()
939 * charger_extcon_notifier - receive the state of charger cable
953 * The newly state of charger cable. in charger_extcon_notifier()
959 * Setup work for controlling charger(regulator) in charger_extcon_notifier()
960 * according to charger cable. in charger_extcon_notifier()
969 * as the charger cable
971 * @cm: the Charger Manager representing the battery.
972 * @cable: the Charger cable representing the external connector.
981 * Charger manager use Extcon framework to identify in charger_extcon_init()
982 * the charger cable among various external connector in charger_extcon_init()
1021 * of charger cable.
1022 * @cm: the Charger Manager representing the battery.
1025 * state of charger cables for enabling or disabling charger(regulator) and
1026 * select the charger cable for charging among a number of external cable
1032 struct charger_regulator *charger; in charger_manager_register_extcon() local
1039 charger = &desc->charger_regulators[i]; in charger_manager_register_extcon()
1041 charger->consumer = regulator_get(cm->dev, in charger_manager_register_extcon()
1042 charger->regulator_name); in charger_manager_register_extcon()
1043 if (IS_ERR(charger->consumer)) { in charger_manager_register_extcon()
1044 dev_err(cm->dev, "Cannot find charger(%s)\n", in charger_manager_register_extcon()
1045 charger->regulator_name); in charger_manager_register_extcon()
1046 return PTR_ERR(charger->consumer); in charger_manager_register_extcon()
1048 charger->cm = cm; in charger_manager_register_extcon()
1050 for (j = 0; j < charger->num_cables; j++) { in charger_manager_register_extcon()
1051 struct charger_cable *cable = &charger->cables[j]; in charger_manager_register_extcon()
1055 dev_err(cm->dev, "Cannot initialize charger(%s)\n", in charger_manager_register_extcon()
1056 charger->regulator_name); in charger_manager_register_extcon()
1059 cable->charger = charger; in charger_manager_register_extcon()
1072 /* help function of sysfs node to control charger(regulator) */
1076 struct charger_regulator *charger in charger_name_show() local
1079 return sysfs_emit(buf, "%s\n", charger->regulator_name); in charger_name_show()
1085 struct charger_regulator *charger in charger_state_show() local
1089 if (!charger->externally_control) in charger_state_show()
1090 state = regulator_is_enabled(charger->consumer); in charger_state_show()
1098 struct charger_regulator *charger = container_of(attr, in charger_externally_control_show() local
1101 return sysfs_emit(buf, "%d\n", charger->externally_control); in charger_externally_control_show()
1108 struct charger_regulator *charger in charger_externally_control_store() local
1111 struct charger_manager *cm = charger->cm; in charger_externally_control_store()
1125 charger->externally_control = 0; in charger_externally_control_store()
1130 if (&desc->charger_regulators[i] != charger && in charger_externally_control_store()
1133 * At least, one charger is controlled by in charger_externally_control_store()
1134 * charger-manager in charger_externally_control_store()
1143 try_charger_enable(charger->cm, false); in charger_externally_control_store()
1144 charger->externally_control = externally_control; in charger_externally_control_store()
1145 try_charger_enable(charger->cm, true); in charger_externally_control_store()
1147 charger->externally_control = externally_control; in charger_externally_control_store()
1151 …"'%s' regulator should be controlled in charger-manager because charger-manager must need at least… in charger_externally_control_store()
1152 charger->regulator_name); in charger_externally_control_store()
1159 * charger_manager_prepare_sysfs - Prepare sysfs entry for each charger
1160 * @cm: the Charger Manager representing the battery.
1162 * This function add sysfs entry for charger(regulator) to control charger from
1164 * but only need one charger on specific case which is dependent on user
1166 * class/power_supply/battery/charger.[index]/externally_control'. For example,
1167 * if user enter 1 to 'sys/class/power_supply/battery/charger.[index]/
1168 * externally_control, this charger isn't controlled from charger-manager and
1174 struct charger_regulator *charger; in charger_manager_prepare_sysfs() local
1179 /* Create sysfs entry to control charger(regulator) */ in charger_manager_prepare_sysfs()
1181 charger = &desc->charger_regulators[i]; in charger_manager_prepare_sysfs()
1183 name = devm_kasprintf(cm->dev, GFP_KERNEL, "charger.%d", i); in charger_manager_prepare_sysfs()
1187 charger->attrs[0] = &charger->attr_name.attr; in charger_manager_prepare_sysfs()
1188 charger->attrs[1] = &charger->attr_state.attr; in charger_manager_prepare_sysfs()
1189 charger->attrs[2] = &charger->attr_externally_control.attr; in charger_manager_prepare_sysfs()
1190 charger->attrs[3] = NULL; in charger_manager_prepare_sysfs()
1192 charger->attr_grp.name = name; in charger_manager_prepare_sysfs()
1193 charger->attr_grp.attrs = charger->attrs; in charger_manager_prepare_sysfs()
1194 desc->sysfs_groups[i] = &charger->attr_grp; in charger_manager_prepare_sysfs()
1196 sysfs_attr_init(&charger->attr_name.attr); in charger_manager_prepare_sysfs()
1197 charger->attr_name.attr.name = "name"; in charger_manager_prepare_sysfs()
1198 charger->attr_name.attr.mode = 0444; in charger_manager_prepare_sysfs()
1199 charger->attr_name.show = charger_name_show; in charger_manager_prepare_sysfs()
1201 sysfs_attr_init(&charger->attr_state.attr); in charger_manager_prepare_sysfs()
1202 charger->attr_state.attr.name = "state"; in charger_manager_prepare_sysfs()
1203 charger->attr_state.attr.mode = 0444; in charger_manager_prepare_sysfs()
1204 charger->attr_state.show = charger_state_show; in charger_manager_prepare_sysfs()
1206 sysfs_attr_init(&charger->attr_externally_control.attr); in charger_manager_prepare_sysfs()
1207 charger->attr_externally_control.attr.name in charger_manager_prepare_sysfs()
1209 charger->attr_externally_control.attr.mode = 0644; in charger_manager_prepare_sysfs()
1210 charger->attr_externally_control.show in charger_manager_prepare_sysfs()
1212 charger->attr_externally_control.store in charger_manager_prepare_sysfs()
1220 charger->regulator_name, charger->externally_control); in charger_manager_prepare_sysfs()
1224 …dev_err(cm->dev, "Cannot register regulator because charger-manager must need at least one charger in charger_manager_prepare_sysfs()
1276 .compatible = "charger-manager",
1345 /* battery charger regulators */ in of_cm_parse_desc()
1374 /* charger cables */ in of_cm_parse_desc()
1487 /* Check if charger's supplies are present at probe */ in charger_manager_probe()
1576 /* Register sysfs entry for charger(regulator) */ in charger_manager_probe()
1589 dev_err(&pdev->dev, "Cannot register charger-manager with name \"%s\"\n", in charger_manager_probe()
1594 /* Register extcon device for charger cable */ in charger_manager_probe()
1607 * Charger-manager is capable of waking up the system from sleep in charger_manager_probe()
1614 * Charger-manager have to check the charging state right after in charger_manager_probe()
1615 * initialization of charger-manager and then update current charging in charger_manager_probe()
1656 { "charger-manager", 0 },
1738 .name = "charger-manager",
1769 MODULE_DESCRIPTION("Charger Manager");