Lines Matching refs:di
344 static void ab8500_enable_disable_sw_fallback(struct ab8500_charger *di, in ab8500_enable_disable_sw_fallback() argument
353 dev_dbg(di->dev, "SW Fallback: %d\n", fallback); in ab8500_enable_disable_sw_fallback()
355 if (is_ab8500(di->parent)) { in ab8500_enable_disable_sw_fallback()
366 ret = abx500_get_register_interruptible(di->dev, bank, reg, &val); in ab8500_enable_disable_sw_fallback()
368 dev_err(di->dev, "%d read failed\n", __LINE__); in ab8500_enable_disable_sw_fallback()
372 if (is_ab8500(di->parent)) { in ab8500_enable_disable_sw_fallback()
374 ret = abx500_set_register_interruptible(di->dev, 0x11, 0x00, 0x2); in ab8500_enable_disable_sw_fallback()
376 dev_err(di->dev, "%d write failed\n", __LINE__); in ab8500_enable_disable_sw_fallback()
387 ret = abx500_set_register_interruptible(di->dev, bank, reg, val); in ab8500_enable_disable_sw_fallback()
389 dev_err(di->dev, "%d write failed\n", __LINE__); in ab8500_enable_disable_sw_fallback()
393 if (is_ab8500(di->parent)) { in ab8500_enable_disable_sw_fallback()
395 ret = abx500_set_register_interruptible(di->dev, 0x11, 0x00, 0x0); in ab8500_enable_disable_sw_fallback()
397 dev_err(di->dev, "%d write failed\n", __LINE__); in ab8500_enable_disable_sw_fallback()
409 static void ab8500_power_supply_changed(struct ab8500_charger *di, in ab8500_power_supply_changed() argument
412 if (di->autopower_cfg) { in ab8500_power_supply_changed()
413 if (!di->usb.charger_connected && in ab8500_power_supply_changed()
414 !di->ac.charger_connected && in ab8500_power_supply_changed()
415 di->autopower) { in ab8500_power_supply_changed()
416 di->autopower = false; in ab8500_power_supply_changed()
417 ab8500_enable_disable_sw_fallback(di, false); in ab8500_power_supply_changed()
418 } else if (!di->autopower && in ab8500_power_supply_changed()
419 (di->ac.charger_connected || in ab8500_power_supply_changed()
420 di->usb.charger_connected)) { in ab8500_power_supply_changed()
421 di->autopower = true; in ab8500_power_supply_changed()
422 ab8500_enable_disable_sw_fallback(di, true); in ab8500_power_supply_changed()
428 static void ab8500_charger_set_usb_connected(struct ab8500_charger *di, in ab8500_charger_set_usb_connected() argument
431 if (connected != di->usb.charger_connected) { in ab8500_charger_set_usb_connected()
432 dev_dbg(di->dev, "USB connected:%i\n", connected); in ab8500_charger_set_usb_connected()
433 di->usb.charger_connected = connected; in ab8500_charger_set_usb_connected()
436 di->flags.vbus_drop_end = false; in ab8500_charger_set_usb_connected()
438 sysfs_notify(&di->usb_chg.psy->dev.kobj, NULL, "present"); in ab8500_charger_set_usb_connected()
441 mutex_lock(&di->charger_attached_mutex); in ab8500_charger_set_usb_connected()
442 mutex_unlock(&di->charger_attached_mutex); in ab8500_charger_set_usb_connected()
444 if (is_ab8500(di->parent)) in ab8500_charger_set_usb_connected()
445 queue_delayed_work(di->charger_wq, in ab8500_charger_set_usb_connected()
446 &di->usb_charger_attached_work, in ab8500_charger_set_usb_connected()
449 cancel_delayed_work_sync(&di->usb_charger_attached_work); in ab8500_charger_set_usb_connected()
450 mutex_lock(&di->charger_attached_mutex); in ab8500_charger_set_usb_connected()
451 mutex_unlock(&di->charger_attached_mutex); in ab8500_charger_set_usb_connected()
462 static int ab8500_charger_get_ac_voltage(struct ab8500_charger *di) in ab8500_charger_get_ac_voltage() argument
467 if (di->ac.charger_connected) { in ab8500_charger_get_ac_voltage()
468 vch = ab8500_gpadc_convert(di->gpadc, MAIN_CHARGER_V); in ab8500_charger_get_ac_voltage()
470 dev_err(di->dev, "%s gpadc conv failed,\n", __func__); in ab8500_charger_get_ac_voltage()
483 static int ab8500_charger_ac_cv(struct ab8500_charger *di) in ab8500_charger_ac_cv() argument
489 if (di->ac.charger_online) { in ab8500_charger_ac_cv()
490 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_ac_cv()
493 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_ac_cv()
513 static int ab8500_charger_get_vbus_voltage(struct ab8500_charger *di) in ab8500_charger_get_vbus_voltage() argument
518 if (di->usb.charger_connected) { in ab8500_charger_get_vbus_voltage()
519 vch = ab8500_gpadc_convert(di->gpadc, VBUS_V); in ab8500_charger_get_vbus_voltage()
521 dev_err(di->dev, "%s gpadc conv failed\n", __func__); in ab8500_charger_get_vbus_voltage()
535 static int ab8500_charger_get_usb_current(struct ab8500_charger *di) in ab8500_charger_get_usb_current() argument
540 if (di->usb.charger_online) { in ab8500_charger_get_usb_current()
541 ich = ab8500_gpadc_convert(di->gpadc, USB_CHARGER_C); in ab8500_charger_get_usb_current()
543 dev_err(di->dev, "%s gpadc conv failed\n", __func__); in ab8500_charger_get_usb_current()
557 static int ab8500_charger_get_ac_current(struct ab8500_charger *di) in ab8500_charger_get_ac_current() argument
562 if (di->ac.charger_online) { in ab8500_charger_get_ac_current()
563 ich = ab8500_gpadc_convert(di->gpadc, MAIN_CHARGER_C); in ab8500_charger_get_ac_current()
565 dev_err(di->dev, "%s gpadc conv failed\n", __func__); in ab8500_charger_get_ac_current()
578 static int ab8500_charger_usb_cv(struct ab8500_charger *di) in ab8500_charger_usb_cv() argument
584 if (di->usb.charger_online) { in ab8500_charger_usb_cv()
585 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_usb_cv()
588 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_usb_cv()
620 static int ab8500_charger_detect_chargers(struct ab8500_charger *di, bool probe) in ab8500_charger_detect_chargers() argument
627 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_detect_chargers()
630 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_detect_chargers()
648 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_detect_chargers()
651 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_detect_chargers()
654 dev_dbg(di->dev, in ab8500_charger_detect_chargers()
672 static int ab8500_charger_max_usb_curr(struct ab8500_charger *di, in ab8500_charger_max_usb_curr() argument
677 di->usb_device_is_unrecognised = false; in ab8500_charger_max_usb_curr()
690 dev_dbg(di->dev, "USB Type - Standard host is " in ab8500_charger_max_usb_curr()
692 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P5; in ab8500_charger_max_usb_curr()
693 di->is_aca_rid = 0; in ab8500_charger_max_usb_curr()
696 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P5; in ab8500_charger_max_usb_curr()
697 di->is_aca_rid = 0; in ab8500_charger_max_usb_curr()
700 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P5; in ab8500_charger_max_usb_curr()
701 di->is_aca_rid = 0; in ab8500_charger_max_usb_curr()
704 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P9; in ab8500_charger_max_usb_curr()
705 di->is_aca_rid = 0; in ab8500_charger_max_usb_curr()
712 dev_dbg(di->dev, "USB_STAT_ACA_RID_A detected\n"); in ab8500_charger_max_usb_curr()
713 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P5; in ab8500_charger_max_usb_curr()
714 di->is_aca_rid = 1; in ab8500_charger_max_usb_curr()
721 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_1P3; in ab8500_charger_max_usb_curr()
722 dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d", link_status, in ab8500_charger_max_usb_curr()
723 di->max_usb_in_curr.usb_type_max); in ab8500_charger_max_usb_curr()
724 di->is_aca_rid = 1; in ab8500_charger_max_usb_curr()
727 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P5; in ab8500_charger_max_usb_curr()
728 di->is_aca_rid = 0; in ab8500_charger_max_usb_curr()
731 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_1P5; in ab8500_charger_max_usb_curr()
732 di->is_aca_rid = 0; in ab8500_charger_max_usb_curr()
736 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_1P5; in ab8500_charger_max_usb_curr()
737 di->is_aca_rid = 1; in ab8500_charger_max_usb_curr()
740 if (di->vbus_detected) { in ab8500_charger_max_usb_curr()
741 di->usb_device_is_unrecognised = true; in ab8500_charger_max_usb_curr()
742 dev_dbg(di->dev, "USB Type - Legacy charger.\n"); in ab8500_charger_max_usb_curr()
743 di->max_usb_in_curr.usb_type_max = in ab8500_charger_max_usb_curr()
748 dev_err(di->dev, "USB Type - Charging not allowed\n"); in ab8500_charger_max_usb_curr()
749 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P05; in ab8500_charger_max_usb_curr()
753 if (is_ab8500(di->parent)) { in ab8500_charger_max_usb_curr()
754 di->flags.vbus_collapse = true; in ab8500_charger_max_usb_curr()
755 dev_err(di->dev, "USB Type - USB_STAT_RESERVED " in ab8500_charger_max_usb_curr()
760 dev_dbg(di->dev, "USB Type - Charging not allowed\n"); in ab8500_charger_max_usb_curr()
761 di->max_usb_in_curr.usb_type_max = in ab8500_charger_max_usb_curr()
763 dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d", in ab8500_charger_max_usb_curr()
765 di->max_usb_in_curr.usb_type_max); in ab8500_charger_max_usb_curr()
773 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P5; in ab8500_charger_max_usb_curr()
774 dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d", link_status, in ab8500_charger_max_usb_curr()
775 di->max_usb_in_curr.usb_type_max); in ab8500_charger_max_usb_curr()
778 dev_err(di->dev, "USB Type invalid - try charging anyway\n"); in ab8500_charger_max_usb_curr()
779 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P5; in ab8500_charger_max_usb_curr()
783 dev_err(di->dev, "USB Type - Unknown\n"); in ab8500_charger_max_usb_curr()
784 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P05; in ab8500_charger_max_usb_curr()
789 di->max_usb_in_curr.set_max = di->max_usb_in_curr.usb_type_max; in ab8500_charger_max_usb_curr()
790 dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d", in ab8500_charger_max_usb_curr()
791 link_status, di->max_usb_in_curr.set_max); in ab8500_charger_max_usb_curr()
803 static int ab8500_charger_read_usb_type(struct ab8500_charger *di) in ab8500_charger_read_usb_type() argument
808 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_read_usb_type()
811 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_read_usb_type()
814 if (is_ab8500(di->parent)) in ab8500_charger_read_usb_type()
815 ret = abx500_get_register_interruptible(di->dev, AB8500_USB, in ab8500_charger_read_usb_type()
818 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_read_usb_type()
821 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_read_usb_type()
826 if (is_ab8500(di->parent)) in ab8500_charger_read_usb_type()
830 ret = ab8500_charger_max_usb_curr(di, in ab8500_charger_read_usb_type()
843 static int ab8500_charger_detect_usb_type(struct ab8500_charger *di) in ab8500_charger_detect_usb_type() argument
855 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_detect_usb_type()
858 dev_dbg(di->dev, "%s AB8500_IT_SOURCE21_REG %x\n", in ab8500_charger_detect_usb_type()
861 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_detect_usb_type()
865 if (is_ab8500(di->parent)) in ab8500_charger_detect_usb_type()
866 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_detect_usb_type()
869 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_detect_usb_type()
872 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_detect_usb_type()
875 dev_dbg(di->dev, "%s AB8500_USB_LINE_STAT_REG %x\n", __func__, in ab8500_charger_detect_usb_type()
884 if (is_ab8500(di->parent)) in ab8500_charger_detect_usb_type()
893 ret = ab8500_charger_max_usb_curr(di, in ab8500_charger_detect_usb_type()
1005 static int ab8500_current_to_regval(struct ab8500_charger *di, int curr) in ab8500_current_to_regval() argument
1009 if (curr < di->bm->chg_output_curr[0]) in ab8500_current_to_regval()
1012 for (i = 0; i < di->bm->n_chg_out_curr; i++) { in ab8500_current_to_regval()
1013 if (curr < di->bm->chg_output_curr[i]) in ab8500_current_to_regval()
1018 i = di->bm->n_chg_out_curr - 1; in ab8500_current_to_regval()
1019 if (curr == di->bm->chg_output_curr[i]) in ab8500_current_to_regval()
1025 static int ab8500_vbus_in_curr_to_regval(struct ab8500_charger *di, int curr) in ab8500_vbus_in_curr_to_regval() argument
1029 if (curr < di->bm->chg_input_curr[0]) in ab8500_vbus_in_curr_to_regval()
1032 for (i = 0; i < di->bm->n_chg_in_curr; i++) { in ab8500_vbus_in_curr_to_regval()
1033 if (curr < di->bm->chg_input_curr[i]) in ab8500_vbus_in_curr_to_regval()
1038 i = di->bm->n_chg_in_curr - 1; in ab8500_vbus_in_curr_to_regval()
1039 if (curr == di->bm->chg_input_curr[i]) in ab8500_vbus_in_curr_to_regval()
1054 static int ab8500_charger_get_usb_cur(struct ab8500_charger *di) in ab8500_charger_get_usb_cur() argument
1057 switch (di->usb_state.usb_current) { in ab8500_charger_get_usb_cur()
1059 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P09; in ab8500_charger_get_usb_cur()
1062 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P19; in ab8500_charger_get_usb_cur()
1065 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P29; in ab8500_charger_get_usb_cur()
1068 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P38; in ab8500_charger_get_usb_cur()
1071 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P5; in ab8500_charger_get_usb_cur()
1074 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P05; in ab8500_charger_get_usb_cur()
1078 di->max_usb_in_curr.set_max = di->max_usb_in_curr.usb_type_max; in ab8500_charger_get_usb_cur()
1091 static bool ab8500_charger_check_continue_stepping(struct ab8500_charger *di, in ab8500_charger_check_continue_stepping() argument
1095 return !di->flags.vbus_drop_end; in ab8500_charger_check_continue_stepping()
1113 static int ab8500_charger_set_current(struct ab8500_charger *di, in ab8500_charger_set_current() argument
1122 atomic_inc(&di->current_stepping_sessions); in ab8500_charger_set_current()
1124 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_set_current()
1127 dev_err(di->dev, "%s read failed\n", __func__); in ab8500_charger_set_current()
1135 curr_index = ab8500_current_to_regval(di, ich); in ab8500_charger_set_current()
1137 if (!di->ac.charger_connected) in ab8500_charger_set_current()
1141 if (is_ab8540(di->parent)) in ab8500_charger_set_current()
1146 curr_index = ab8500_vbus_in_curr_to_regval(di, ich); in ab8500_charger_set_current()
1149 if (!di->usb.charger_connected) in ab8500_charger_set_current()
1155 curr_index = ab8500_current_to_regval(di, ich); in ab8500_charger_set_current()
1160 if (!di->usb.charger_connected && !di->ac.charger_connected) in ab8500_charger_set_current()
1165 dev_err(di->dev, "%s current register not valid\n", __func__); in ab8500_charger_set_current()
1171 dev_err(di->dev, "requested current limit out-of-range\n"); in ab8500_charger_set_current()
1178 dev_dbg(di->dev, "%s current not changed for reg: 0x%02x\n", in ab8500_charger_set_current()
1184 dev_dbg(di->dev, "%s set charger current: %d mA for reg: 0x%02x\n", in ab8500_charger_set_current()
1188 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_set_current()
1191 dev_err(di->dev, "%s write failed\n", __func__); in ab8500_charger_set_current()
1194 dev_dbg(di->dev, "curr change_1 to: %x for 0x%02x\n", in ab8500_charger_set_current()
1196 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_set_current()
1199 dev_err(di->dev, "%s write failed\n", __func__); in ab8500_charger_set_current()
1208 dev_dbg(di->dev, "curr change_2 to: %x for 0x%02x\n", in ab8500_charger_set_current()
1210 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_set_current()
1213 dev_err(di->dev, "%s write failed\n", __func__); in ab8500_charger_set_current()
1219 allow = ab8500_charger_check_continue_stepping(di, reg); in ab8500_charger_set_current()
1224 atomic_dec(&di->current_stepping_sessions); in ab8500_charger_set_current()
1237 static int ab8500_charger_set_vbus_in_curr(struct ab8500_charger *di, in ab8500_charger_set_vbus_in_curr() argument
1244 min_value = min(di->bm->chg_params->usb_curr_max, ich_in); in ab8500_charger_set_vbus_in_curr()
1245 if (di->max_usb_in_curr.set_max > 0) in ab8500_charger_set_vbus_in_curr()
1246 min_value = min(di->max_usb_in_curr.set_max, min_value); in ab8500_charger_set_vbus_in_curr()
1248 if (di->usb_state.usb_current >= 0) in ab8500_charger_set_vbus_in_curr()
1249 min_value = min(di->usb_state.usb_current, min_value); in ab8500_charger_set_vbus_in_curr()
1253 if (di->vbat < VBAT_TRESH_IP_CUR_RED) in ab8500_charger_set_vbus_in_curr()
1257 if (di->vbat < VBAT_TRESH_IP_CUR_RED) in ab8500_charger_set_vbus_in_curr()
1264 dev_info(di->dev, "VBUS input current limit set to %d mA\n", min_value); in ab8500_charger_set_vbus_in_curr()
1266 mutex_lock(&di->usb_ipt_crnt_lock); in ab8500_charger_set_vbus_in_curr()
1267 ret = ab8500_charger_set_current(di, min_value, in ab8500_charger_set_vbus_in_curr()
1269 mutex_unlock(&di->usb_ipt_crnt_lock); in ab8500_charger_set_vbus_in_curr()
1282 static int ab8500_charger_set_main_in_curr(struct ab8500_charger *di, in ab8500_charger_set_main_in_curr() argument
1285 return ab8500_charger_set_current(di, ich_in, in ab8500_charger_set_main_in_curr()
1297 static int ab8500_charger_set_output_curr(struct ab8500_charger *di, in ab8500_charger_set_output_curr() argument
1300 return ab8500_charger_set_current(di, ich_out, in ab8500_charger_set_output_curr()
1312 static int ab8500_charger_led_en(struct ab8500_charger *di, int on) in ab8500_charger_led_en() argument
1318 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_led_en()
1322 dev_err(di->dev, "Power ON LED failed\n"); in ab8500_charger_led_en()
1326 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_led_en()
1330 dev_err(di->dev, "Set LED PWM duty cycle failed\n"); in ab8500_charger_led_en()
1335 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_led_en()
1339 dev_err(di->dev, "Power-off LED failed\n"); in ab8500_charger_led_en()
1366 struct ab8500_charger *di = to_ab8500_charger_ac_device_info(charger); in ab8500_charger_ac_en() local
1370 if (!di->ac.charger_connected) { in ab8500_charger_ac_en()
1371 dev_err(di->dev, "AC charger not connected\n"); in ab8500_charger_ac_en()
1376 dev_dbg(di->dev, "Enable AC: %dmV %dmA\n", vset, iset); in ab8500_charger_ac_en()
1388 if (!di->vddadc_en_ac) { in ab8500_charger_ac_en()
1389 ret = regulator_enable(di->regu); in ab8500_charger_ac_en()
1391 dev_warn(di->dev, in ab8500_charger_ac_en()
1394 di->vddadc_en_ac = true; in ab8500_charger_ac_en()
1399 curr_index = ab8500_current_to_regval(di, iset); in ab8500_charger_ac_en()
1400 input_curr_index = ab8500_current_to_regval(di, in ab8500_charger_ac_en()
1401 di->bm->chg_params->ac_curr_max); in ab8500_charger_ac_en()
1403 dev_err(di->dev, in ab8500_charger_ac_en()
1410 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_ac_en()
1413 dev_err(di->dev, "%s write failed\n", __func__); in ab8500_charger_ac_en()
1417 ret = ab8500_charger_set_main_in_curr(di, in ab8500_charger_ac_en()
1418 di->bm->chg_params->ac_curr_max); in ab8500_charger_ac_en()
1420 dev_err(di->dev, "%s Failed to set MainChInputCurr\n", in ab8500_charger_ac_en()
1425 ret = ab8500_charger_set_output_curr(di, iset); in ab8500_charger_ac_en()
1427 dev_err(di->dev, "%s " in ab8500_charger_ac_en()
1434 if (!di->bm->enable_overshoot) in ab8500_charger_ac_en()
1438 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_ac_en()
1441 dev_err(di->dev, "%s write failed\n", __func__); in ab8500_charger_ac_en()
1446 ret = ab8500_charger_led_en(di, true); in ab8500_charger_ac_en()
1448 dev_err(di->dev, "failed to enable LED\n"); in ab8500_charger_ac_en()
1450 di->ac.charger_online = 1; in ab8500_charger_ac_en()
1453 if (is_ab8500_1p1_or_earlier(di->parent)) { in ab8500_charger_ac_en()
1464 if (di->ac_conn) { in ab8500_charger_ac_en()
1465 queue_delayed_work(di->charger_wq, in ab8500_charger_ac_en()
1466 &di->kick_wd_work, in ab8500_charger_ac_en()
1477 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_ac_en()
1481 dev_err(di->dev, in ab8500_charger_ac_en()
1486 ret = ab8500_charger_set_output_curr(di, 0); in ab8500_charger_ac_en()
1488 dev_err(di->dev, "%s " in ab8500_charger_ac_en()
1494 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_ac_en()
1498 dev_err(di->dev, in ab8500_charger_ac_en()
1504 ret = ab8500_charger_led_en(di, false); in ab8500_charger_ac_en()
1506 dev_err(di->dev, "failed to disable LED\n"); in ab8500_charger_ac_en()
1508 di->ac.charger_online = 0; in ab8500_charger_ac_en()
1509 di->ac.wd_expired = false; in ab8500_charger_ac_en()
1512 if (di->vddadc_en_ac) { in ab8500_charger_ac_en()
1513 regulator_disable(di->regu); in ab8500_charger_ac_en()
1514 di->vddadc_en_ac = false; in ab8500_charger_ac_en()
1517 dev_dbg(di->dev, "%s Disabled AC charging\n", __func__); in ab8500_charger_ac_en()
1519 ab8500_power_supply_changed(di, di->ac_chg.psy); in ab8500_charger_ac_en()
1542 struct ab8500_charger *di = to_ab8500_charger_usb_device_info(charger); in ab8500_charger_usb_en() local
1546 if (!di->usb.charger_connected) { in ab8500_charger_usb_en()
1547 dev_err(di->dev, "USB charger not connected\n"); in ab8500_charger_usb_en()
1561 if (!di->vddadc_en_usb) { in ab8500_charger_usb_en()
1562 ret = regulator_enable(di->regu); in ab8500_charger_usb_en()
1564 dev_warn(di->dev, in ab8500_charger_usb_en()
1567 di->vddadc_en_usb = true; in ab8500_charger_usb_en()
1571 dev_dbg(di->dev, "Enable USB: %dmV %dmA\n", vset, ich_out); in ab8500_charger_usb_en()
1575 curr_index = ab8500_current_to_regval(di, ich_out); in ab8500_charger_usb_en()
1577 dev_err(di->dev, in ab8500_charger_usb_en()
1584 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_usb_en()
1587 dev_err(di->dev, "%s write failed\n", __func__); in ab8500_charger_usb_en()
1591 if (!di->bm->enable_overshoot) in ab8500_charger_usb_en()
1595 dev_dbg(di->dev, in ab8500_charger_usb_en()
1597 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_usb_en()
1600 dev_err(di->dev, "%s write failed\n", __func__); in ab8500_charger_usb_en()
1605 ret = ab8500_charger_led_en(di, true); in ab8500_charger_usb_en()
1607 dev_err(di->dev, "failed to enable LED\n"); in ab8500_charger_usb_en()
1609 di->usb.charger_online = 1; in ab8500_charger_usb_en()
1612 ret = ab8500_charger_set_vbus_in_curr(di, in ab8500_charger_usb_en()
1613 di->max_usb_in_curr.usb_type_max); in ab8500_charger_usb_en()
1615 dev_err(di->dev, "setting USBChInputCurr failed\n"); in ab8500_charger_usb_en()
1620 ret = ab8500_charger_set_output_curr(di, ich_out); in ab8500_charger_usb_en()
1622 dev_err(di->dev, "%s " in ab8500_charger_usb_en()
1628 queue_delayed_work(di->charger_wq, &di->check_vbat_work, HZ); in ab8500_charger_usb_en()
1632 dev_dbg(di->dev, "%s Disabled USB charging\n", __func__); in ab8500_charger_usb_en()
1633 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_usb_en()
1637 dev_err(di->dev, in ab8500_charger_usb_en()
1642 ret = ab8500_charger_led_en(di, false); in ab8500_charger_usb_en()
1644 dev_err(di->dev, "failed to disable LED\n"); in ab8500_charger_usb_en()
1646 ret = ab8500_charger_set_vbus_in_curr(di, 0); in ab8500_charger_usb_en()
1648 dev_err(di->dev, "setting USBChInputCurr failed\n"); in ab8500_charger_usb_en()
1653 ret = ab8500_charger_set_output_curr(di, 0); in ab8500_charger_usb_en()
1655 dev_err(di->dev, "%s " in ab8500_charger_usb_en()
1660 di->usb.charger_online = 0; in ab8500_charger_usb_en()
1661 di->usb.wd_expired = false; in ab8500_charger_usb_en()
1664 if (di->vddadc_en_usb) { in ab8500_charger_usb_en()
1665 regulator_disable(di->regu); in ab8500_charger_usb_en()
1666 di->vddadc_en_usb = false; in ab8500_charger_usb_en()
1669 dev_dbg(di->dev, "%s Disabled USB charging\n", __func__); in ab8500_charger_usb_en()
1672 cancel_delayed_work(&di->check_vbat_work); in ab8500_charger_usb_en()
1675 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_usb_en()
1718 struct ab8500_charger *di = to_ab8500_charger_usb_device_info(charger); in ab8500_charger_usb_check_enable() local
1720 if (!di->usb.charger_connected) in ab8500_charger_usb_check_enable()
1723 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_usb_check_enable()
1726 dev_err(di->dev, "ab8500 read failed %d\n", __LINE__); in ab8500_charger_usb_check_enable()
1729 dev_dbg(di->dev, "USB charger ctrl: 0x%02x\n", usbch_ctrl1); in ab8500_charger_usb_check_enable()
1732 dev_info(di->dev, "Charging has been disabled abnormally and will be re-enabled\n"); in ab8500_charger_usb_check_enable()
1734 ret = abx500_mask_and_set_register_interruptible(di->dev, in ab8500_charger_usb_check_enable()
1738 dev_err(di->dev, "ab8500 write failed %d\n", __LINE__); in ab8500_charger_usb_check_enable()
1742 ret = ab8500_charger_usb_en(&di->usb_chg, true, vset, iset); in ab8500_charger_usb_check_enable()
1744 dev_err(di->dev, "Failed to enable VBUS charger %d\n", in ab8500_charger_usb_check_enable()
1767 struct ab8500_charger *di = to_ab8500_charger_ac_device_info(charger); in ab8500_charger_ac_check_enable() local
1769 if (!di->ac.charger_connected) in ab8500_charger_ac_check_enable()
1772 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_ac_check_enable()
1775 dev_err(di->dev, "ab8500 read failed %d\n", __LINE__); in ab8500_charger_ac_check_enable()
1778 dev_dbg(di->dev, "AC charger ctrl: 0x%02x\n", mainch_ctrl1); in ab8500_charger_ac_check_enable()
1781 dev_info(di->dev, "Charging has been disabled abnormally and will be re-enabled\n"); in ab8500_charger_ac_check_enable()
1783 ret = abx500_mask_and_set_register_interruptible(di->dev, in ab8500_charger_ac_check_enable()
1788 dev_err(di->dev, "ab8500 write failed %d\n", __LINE__); in ab8500_charger_ac_check_enable()
1792 ret = ab8500_charger_ac_en(&di->usb_chg, true, vset, iset); in ab8500_charger_ac_check_enable()
1794 dev_err(di->dev, "failed to enable AC charger %d\n", in ab8500_charger_ac_check_enable()
1812 struct ab8500_charger *di; in ab8500_charger_watchdog_kick() local
1815 di = to_ab8500_charger_ac_device_info(charger); in ab8500_charger_watchdog_kick()
1817 di = to_ab8500_charger_usb_device_info(charger); in ab8500_charger_watchdog_kick()
1821 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_watchdog_kick()
1824 dev_err(di->dev, "Failed to kick WD!\n"); in ab8500_charger_watchdog_kick()
1840 struct ab8500_charger *di; in ab8500_charger_update_charger_current() local
1843 di = to_ab8500_charger_ac_device_info(charger); in ab8500_charger_update_charger_current()
1845 di = to_ab8500_charger_usb_device_info(charger); in ab8500_charger_update_charger_current()
1849 ret = ab8500_charger_set_output_curr(di, ich_out); in ab8500_charger_update_charger_current()
1851 dev_err(di->dev, "%s " in ab8500_charger_update_charger_current()
1858 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_update_charger_current()
1861 dev_err(di->dev, "%s write failed\n", __func__); in ab8500_charger_update_charger_current()
1880 struct ab8500_charger *di; in ab8540_charger_power_path_enable() local
1883 di = to_ab8500_charger_usb_device_info(charger); in ab8540_charger_power_path_enable()
1887 ret = abx500_mask_and_set_register_interruptible(di->dev, in ab8540_charger_power_path_enable()
1891 dev_err(di->dev, "%s write failed\n", __func__); in ab8540_charger_power_path_enable()
1911 struct ab8500_charger *di; in ab8540_charger_usb_pre_chg_enable() local
1914 di = to_ab8500_charger_usb_device_info(charger); in ab8540_charger_usb_pre_chg_enable()
1918 ret = abx500_mask_and_set_register_interruptible(di->dev, in ab8540_charger_usb_pre_chg_enable()
1922 dev_err(di->dev, "%s write failed\n", __func__); in ab8540_charger_usb_pre_chg_enable()
1933 struct ab8500_charger *di; in ab8500_charger_get_ext_psy_data() local
1942 di = to_ab8500_charger_usb_device_info(usb_chg); in ab8500_charger_get_ext_psy_data()
1967 di->vbat = ret.intval / 1000; in ab8500_charger_get_ext_psy_data()
1992 struct ab8500_charger *di = container_of(work, in ab8500_charger_check_vbat_work() local
1996 di->usb_chg.psy, ab8500_charger_get_ext_psy_data); in ab8500_charger_check_vbat_work()
1999 if (di->old_vbat == 0) in ab8500_charger_check_vbat_work()
2000 di->old_vbat = di->vbat; in ab8500_charger_check_vbat_work()
2002 if (!((di->old_vbat <= VBAT_TRESH_IP_CUR_RED && in ab8500_charger_check_vbat_work()
2003 di->vbat <= VBAT_TRESH_IP_CUR_RED) || in ab8500_charger_check_vbat_work()
2004 (di->old_vbat > VBAT_TRESH_IP_CUR_RED && in ab8500_charger_check_vbat_work()
2005 di->vbat > VBAT_TRESH_IP_CUR_RED))) { in ab8500_charger_check_vbat_work()
2007 dev_dbg(di->dev, "Vbat did cross threshold, curr: %d, new: %d," in ab8500_charger_check_vbat_work()
2008 " old: %d\n", di->max_usb_in_curr.usb_type_max, in ab8500_charger_check_vbat_work()
2009 di->vbat, di->old_vbat); in ab8500_charger_check_vbat_work()
2010 ab8500_charger_set_vbus_in_curr(di, in ab8500_charger_check_vbat_work()
2011 di->max_usb_in_curr.usb_type_max); in ab8500_charger_check_vbat_work()
2012 power_supply_changed(di->usb_chg.psy); in ab8500_charger_check_vbat_work()
2015 di->old_vbat = di->vbat; in ab8500_charger_check_vbat_work()
2021 if (di->vbat < (VBAT_TRESH_IP_CUR_RED + 100) && in ab8500_charger_check_vbat_work()
2022 (di->vbat > (VBAT_TRESH_IP_CUR_RED - 100))) in ab8500_charger_check_vbat_work()
2025 queue_delayed_work(di->charger_wq, &di->check_vbat_work, t * HZ); in ab8500_charger_check_vbat_work()
2039 struct ab8500_charger *di = container_of(work, in ab8500_charger_check_hw_failure_work() local
2043 if (di->flags.mainextchnotok) { in ab8500_charger_check_hw_failure_work()
2044 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_check_hw_failure_work()
2047 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_check_hw_failure_work()
2051 di->flags.mainextchnotok = false; in ab8500_charger_check_hw_failure_work()
2052 ab8500_power_supply_changed(di, di->ac_chg.psy); in ab8500_charger_check_hw_failure_work()
2055 if (di->flags.vbus_ovv) { in ab8500_charger_check_hw_failure_work()
2056 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_check_hw_failure_work()
2060 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_check_hw_failure_work()
2064 di->flags.vbus_ovv = false; in ab8500_charger_check_hw_failure_work()
2065 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_check_hw_failure_work()
2069 if (di->flags.mainextchnotok || di->flags.vbus_ovv) { in ab8500_charger_check_hw_failure_work()
2070 queue_delayed_work(di->charger_wq, in ab8500_charger_check_hw_failure_work()
2071 &di->check_hw_failure_work, round_jiffies(HZ)); in ab8500_charger_check_hw_failure_work()
2093 struct ab8500_charger *di = container_of(work, in ab8500_charger_kick_watchdog_work() local
2096 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_kick_watchdog_work()
2099 dev_err(di->dev, "Failed to kick WD!\n"); in ab8500_charger_kick_watchdog_work()
2102 queue_delayed_work(di->charger_wq, in ab8500_charger_kick_watchdog_work()
2103 &di->kick_wd_work, round_jiffies(WD_KICK_INTERVAL)); in ab8500_charger_kick_watchdog_work()
2116 struct ab8500_charger *di = container_of(work, in ab8500_charger_ac_work() local
2124 ret = ab8500_charger_detect_chargers(di, false); in ab8500_charger_ac_work()
2129 di->ac.charger_connected = 1; in ab8500_charger_ac_work()
2130 di->ac_conn = true; in ab8500_charger_ac_work()
2132 di->ac.charger_connected = 0; in ab8500_charger_ac_work()
2135 ab8500_power_supply_changed(di, di->ac_chg.psy); in ab8500_charger_ac_work()
2136 sysfs_notify(&di->ac_chg.psy->dev.kobj, NULL, "present"); in ab8500_charger_ac_work()
2141 struct ab8500_charger *di = container_of(work, in ab8500_charger_usb_attached_work() local
2149 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_usb_attached_work()
2154 dev_err(di->dev, "ab8500 read failed %d\n", __LINE__); in ab8500_charger_usb_attached_work()
2163 ab8500_charger_usb_en(&di->usb_chg, 0, 0, 0); in ab8500_charger_usb_attached_work()
2165 mutex_lock(&di->charger_attached_mutex); in ab8500_charger_usb_attached_work()
2166 mutex_unlock(&di->charger_attached_mutex); in ab8500_charger_usb_attached_work()
2171 queue_delayed_work(di->charger_wq, in ab8500_charger_usb_attached_work()
2172 &di->usb_charger_attached_work, in ab8500_charger_usb_attached_work()
2179 struct ab8500_charger *di = container_of(work, in ab8500_charger_ac_attached_work() local
2188 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_ac_attached_work()
2193 dev_err(di->dev, "ab8500 read failed %d\n", __LINE__); in ab8500_charger_ac_attached_work()
2203 ab8500_charger_ac_en(&di->ac_chg, 0, 0, 0); in ab8500_charger_ac_attached_work()
2204 queue_work(di->charger_wq, &di->ac_work); in ab8500_charger_ac_attached_work()
2206 mutex_lock(&di->charger_attached_mutex); in ab8500_charger_ac_attached_work()
2207 mutex_unlock(&di->charger_attached_mutex); in ab8500_charger_ac_attached_work()
2212 queue_delayed_work(di->charger_wq, in ab8500_charger_ac_attached_work()
2213 &di->ac_charger_attached_work, in ab8500_charger_ac_attached_work()
2227 struct ab8500_charger *di = container_of(work, in ab8500_charger_detect_usb_type_work() local
2235 ret = ab8500_charger_detect_chargers(di, false); in ab8500_charger_detect_usb_type_work()
2240 dev_dbg(di->dev, "%s di->vbus_detected = false\n", __func__); in ab8500_charger_detect_usb_type_work()
2241 di->vbus_detected = false; in ab8500_charger_detect_usb_type_work()
2242 ab8500_charger_set_usb_connected(di, false); in ab8500_charger_detect_usb_type_work()
2243 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_detect_usb_type_work()
2245 dev_dbg(di->dev, "%s di->vbus_detected = true\n", __func__); in ab8500_charger_detect_usb_type_work()
2246 di->vbus_detected = true; in ab8500_charger_detect_usb_type_work()
2248 if (is_ab8500_1p1_or_earlier(di->parent)) { in ab8500_charger_detect_usb_type_work()
2249 ret = ab8500_charger_detect_usb_type(di); in ab8500_charger_detect_usb_type_work()
2251 ab8500_charger_set_usb_connected(di, true); in ab8500_charger_detect_usb_type_work()
2252 ab8500_power_supply_changed(di, in ab8500_charger_detect_usb_type_work()
2253 di->usb_chg.psy); in ab8500_charger_detect_usb_type_work()
2263 if (di->vbus_detected_start) { in ab8500_charger_detect_usb_type_work()
2264 di->vbus_detected_start = false; in ab8500_charger_detect_usb_type_work()
2265 ret = ab8500_charger_detect_usb_type(di); in ab8500_charger_detect_usb_type_work()
2267 ab8500_charger_set_usb_connected(di, in ab8500_charger_detect_usb_type_work()
2269 ab8500_power_supply_changed(di, in ab8500_charger_detect_usb_type_work()
2270 di->usb_chg.psy); in ab8500_charger_detect_usb_type_work()
2285 struct ab8500_charger *di = in ab8500_charger_usb_link_attach_work() local
2290 if (!di->usb.charger_online) { in ab8500_charger_usb_link_attach_work()
2291 ret = ab8500_charger_set_vbus_in_curr(di, in ab8500_charger_usb_link_attach_work()
2292 di->max_usb_in_curr.usb_type_max); in ab8500_charger_usb_link_attach_work()
2297 ab8500_charger_set_usb_connected(di, true); in ab8500_charger_usb_link_attach_work()
2298 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_usb_link_attach_work()
2314 struct ab8500_charger *di = container_of(work, in ab8500_charger_usb_link_status_work() local
2322 detected_chargers = ab8500_charger_detect_chargers(di, false); in ab8500_charger_usb_link_status_work()
2332 if (is_ab8500(di->parent)) in ab8500_charger_usb_link_status_work()
2333 ret = abx500_get_register_interruptible(di->dev, AB8500_USB, in ab8500_charger_usb_link_status_work()
2336 ret = abx500_get_register_interruptible(di->dev, AB8500_USB, in ab8500_charger_usb_link_status_work()
2340 dev_dbg(di->dev, "UsbLineStatus register = 0x%02x\n", val); in ab8500_charger_usb_link_status_work()
2342 dev_dbg(di->dev, "Error reading USB link status\n"); in ab8500_charger_usb_link_status_work()
2344 if (is_ab8500(di->parent)) in ab8500_charger_usb_link_status_work()
2352 di->invalid_charger_detect_state == 0) { in ab8500_charger_usb_link_status_work()
2353 dev_dbg(di->dev, in ab8500_charger_usb_link_status_work()
2356 abx500_mask_and_set_register_interruptible(di->dev, in ab8500_charger_usb_link_status_work()
2360 abx500_mask_and_set_register_interruptible(di->dev, in ab8500_charger_usb_link_status_work()
2363 di->invalid_charger_detect_state = 1; in ab8500_charger_usb_link_status_work()
2368 if (di->invalid_charger_detect_state == 1) { in ab8500_charger_usb_link_status_work()
2369 dev_dbg(di->dev, in ab8500_charger_usb_link_status_work()
2372 abx500_mask_and_set_register_interruptible(di->dev, in ab8500_charger_usb_link_status_work()
2376 if (is_ab8500(di->parent)) in ab8500_charger_usb_link_status_work()
2377 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_usb_link_status_work()
2381 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_usb_link_status_work()
2385 dev_dbg(di->dev, "USB link status= 0x%02x\n", in ab8500_charger_usb_link_status_work()
2387 di->invalid_charger_detect_state = 2; in ab8500_charger_usb_link_status_work()
2390 di->invalid_charger_detect_state = 0; in ab8500_charger_usb_link_status_work()
2394 di->vbus_detected = false; in ab8500_charger_usb_link_status_work()
2395 ab8500_charger_set_usb_connected(di, false); in ab8500_charger_usb_link_status_work()
2396 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_usb_link_status_work()
2400 dev_dbg(di->dev,"%s di->vbus_detected = true\n",__func__); in ab8500_charger_usb_link_status_work()
2401 di->vbus_detected = true; in ab8500_charger_usb_link_status_work()
2402 ret = ab8500_charger_read_usb_type(di); in ab8500_charger_usb_link_status_work()
2406 ab8500_charger_set_usb_connected(di, false); in ab8500_charger_usb_link_status_work()
2407 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_usb_link_status_work()
2412 if (di->usb_device_is_unrecognised) { in ab8500_charger_usb_link_status_work()
2413 dev_dbg(di->dev, in ab8500_charger_usb_link_status_work()
2418 queue_delayed_work(di->charger_wq, in ab8500_charger_usb_link_status_work()
2419 &di->attach_work, in ab8500_charger_usb_link_status_work()
2421 } else if (di->is_aca_rid == 1) { in ab8500_charger_usb_link_status_work()
2423 di->is_aca_rid++; in ab8500_charger_usb_link_status_work()
2424 dev_dbg(di->dev, in ab8500_charger_usb_link_status_work()
2427 queue_delayed_work(di->charger_wq, in ab8500_charger_usb_link_status_work()
2428 &di->attach_work, in ab8500_charger_usb_link_status_work()
2431 queue_delayed_work(di->charger_wq, in ab8500_charger_usb_link_status_work()
2432 &di->attach_work, in ab8500_charger_usb_link_status_work()
2442 struct ab8500_charger *di = container_of(work, in ab8500_charger_usb_state_changed_work() local
2445 if (!di->vbus_detected) { in ab8500_charger_usb_state_changed_work()
2446 dev_dbg(di->dev, in ab8500_charger_usb_state_changed_work()
2452 spin_lock_irqsave(&di->usb_state.usb_lock, flags); in ab8500_charger_usb_state_changed_work()
2453 di->usb_state.state = di->usb_state.state_tmp; in ab8500_charger_usb_state_changed_work()
2454 di->usb_state.usb_current = di->usb_state.usb_current_tmp; in ab8500_charger_usb_state_changed_work()
2455 spin_unlock_irqrestore(&di->usb_state.usb_lock, flags); in ab8500_charger_usb_state_changed_work()
2457 dev_dbg(di->dev, "%s USB state: 0x%02x mA: %d\n", in ab8500_charger_usb_state_changed_work()
2458 __func__, di->usb_state.state, di->usb_state.usb_current); in ab8500_charger_usb_state_changed_work()
2460 switch (di->usb_state.state) { in ab8500_charger_usb_state_changed_work()
2465 ab8500_charger_set_usb_connected(di, false); in ab8500_charger_usb_state_changed_work()
2466 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_usb_state_changed_work()
2481 if (!ab8500_charger_get_usb_cur(di)) { in ab8500_charger_usb_state_changed_work()
2483 ret = ab8500_charger_set_vbus_in_curr(di, in ab8500_charger_usb_state_changed_work()
2484 di->max_usb_in_curr.usb_type_max); in ab8500_charger_usb_state_changed_work()
2488 ab8500_charger_set_usb_connected(di, true); in ab8500_charger_usb_state_changed_work()
2489 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_usb_state_changed_work()
2510 struct ab8500_charger *di = container_of(work, in ab8500_charger_check_usbchargernotok_work() local
2514 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_check_usbchargernotok_work()
2517 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_check_usbchargernotok_work()
2520 prev_status = di->flags.usbchargernotok; in ab8500_charger_check_usbchargernotok_work()
2523 di->flags.usbchargernotok = true; in ab8500_charger_check_usbchargernotok_work()
2525 queue_delayed_work(di->charger_wq, in ab8500_charger_check_usbchargernotok_work()
2526 &di->check_usbchgnotok_work, HZ); in ab8500_charger_check_usbchargernotok_work()
2528 di->flags.usbchargernotok = false; in ab8500_charger_check_usbchargernotok_work()
2529 di->flags.vbus_collapse = false; in ab8500_charger_check_usbchargernotok_work()
2532 if (prev_status != di->flags.usbchargernotok) in ab8500_charger_check_usbchargernotok_work()
2533 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_check_usbchargernotok_work()
2548 struct ab8500_charger *di = container_of(work, in ab8500_charger_check_main_thermal_prot_work() local
2552 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_check_main_thermal_prot_work()
2555 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_check_main_thermal_prot_work()
2559 di->flags.main_thermal_prot = true; in ab8500_charger_check_main_thermal_prot_work()
2561 di->flags.main_thermal_prot = false; in ab8500_charger_check_main_thermal_prot_work()
2563 ab8500_power_supply_changed(di, di->ac_chg.psy); in ab8500_charger_check_main_thermal_prot_work()
2578 struct ab8500_charger *di = container_of(work, in ab8500_charger_check_usb_thermal_prot_work() local
2582 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_check_usb_thermal_prot_work()
2585 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_check_usb_thermal_prot_work()
2589 di->flags.usb_thermal_prot = true; in ab8500_charger_check_usb_thermal_prot_work()
2591 di->flags.usb_thermal_prot = false; in ab8500_charger_check_usb_thermal_prot_work()
2593 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_check_usb_thermal_prot_work()
2605 struct ab8500_charger *di = _di; in ab8500_charger_mainchunplugdet_handler() local
2607 dev_dbg(di->dev, "Main charger unplugged\n"); in ab8500_charger_mainchunplugdet_handler()
2608 queue_work(di->charger_wq, &di->ac_work); in ab8500_charger_mainchunplugdet_handler()
2610 cancel_delayed_work_sync(&di->ac_charger_attached_work); in ab8500_charger_mainchunplugdet_handler()
2611 mutex_lock(&di->charger_attached_mutex); in ab8500_charger_mainchunplugdet_handler()
2612 mutex_unlock(&di->charger_attached_mutex); in ab8500_charger_mainchunplugdet_handler()
2626 struct ab8500_charger *di = _di; in ab8500_charger_mainchplugdet_handler() local
2628 dev_dbg(di->dev, "Main charger plugged\n"); in ab8500_charger_mainchplugdet_handler()
2629 queue_work(di->charger_wq, &di->ac_work); in ab8500_charger_mainchplugdet_handler()
2631 mutex_lock(&di->charger_attached_mutex); in ab8500_charger_mainchplugdet_handler()
2632 mutex_unlock(&di->charger_attached_mutex); in ab8500_charger_mainchplugdet_handler()
2634 if (is_ab8500(di->parent)) in ab8500_charger_mainchplugdet_handler()
2635 queue_delayed_work(di->charger_wq, in ab8500_charger_mainchplugdet_handler()
2636 &di->ac_charger_attached_work, in ab8500_charger_mainchplugdet_handler()
2650 struct ab8500_charger *di = _di; in ab8500_charger_mainextchnotok_handler() local
2652 dev_dbg(di->dev, "Main charger not ok\n"); in ab8500_charger_mainextchnotok_handler()
2653 di->flags.mainextchnotok = true; in ab8500_charger_mainextchnotok_handler()
2654 ab8500_power_supply_changed(di, di->ac_chg.psy); in ab8500_charger_mainextchnotok_handler()
2657 queue_delayed_work(di->charger_wq, &di->check_hw_failure_work, 0); in ab8500_charger_mainextchnotok_handler()
2672 struct ab8500_charger *di = _di; in ab8500_charger_mainchthprotr_handler() local
2674 dev_dbg(di->dev, in ab8500_charger_mainchthprotr_handler()
2676 queue_work(di->charger_wq, &di->check_main_thermal_prot_work); in ab8500_charger_mainchthprotr_handler()
2691 struct ab8500_charger *di = _di; in ab8500_charger_mainchthprotf_handler() local
2693 dev_dbg(di->dev, in ab8500_charger_mainchthprotf_handler()
2695 queue_work(di->charger_wq, &di->check_main_thermal_prot_work); in ab8500_charger_mainchthprotf_handler()
2702 struct ab8500_charger *di = container_of(work, in ab8500_charger_vbus_drop_end_work() local
2707 di->flags.vbus_drop_end = false; in ab8500_charger_vbus_drop_end_work()
2710 abx500_set_register_interruptible(di->dev, in ab8500_charger_vbus_drop_end_work()
2713 if (is_ab8540(di->parent)) in ab8500_charger_vbus_drop_end_work()
2714 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_vbus_drop_end_work()
2717 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_vbus_drop_end_work()
2720 dev_err(di->dev, "%s read failed\n", __func__); in ab8500_charger_vbus_drop_end_work()
2724 if (is_ab8540(di->parent)) in ab8500_charger_vbus_drop_end_work()
2725 curr = di->bm->chg_input_curr[ in ab8500_charger_vbus_drop_end_work()
2728 curr = di->bm->chg_input_curr[ in ab8500_charger_vbus_drop_end_work()
2731 if (di->max_usb_in_curr.calculated_max != curr) { in ab8500_charger_vbus_drop_end_work()
2733 di->max_usb_in_curr.calculated_max = curr; in ab8500_charger_vbus_drop_end_work()
2734 dev_dbg(di->dev, in ab8500_charger_vbus_drop_end_work()
2736 di->max_usb_in_curr.calculated_max); in ab8500_charger_vbus_drop_end_work()
2742 di->max_usb_in_curr.set_max = in ab8500_charger_vbus_drop_end_work()
2743 di->max_usb_in_curr.calculated_max; in ab8500_charger_vbus_drop_end_work()
2744 dev_dbg(di->dev, in ab8500_charger_vbus_drop_end_work()
2746 di->max_usb_in_curr.set_max); in ab8500_charger_vbus_drop_end_work()
2749 if (di->usb.charger_connected) in ab8500_charger_vbus_drop_end_work()
2750 ab8500_charger_set_vbus_in_curr(di, in ab8500_charger_vbus_drop_end_work()
2751 di->max_usb_in_curr.usb_type_max); in ab8500_charger_vbus_drop_end_work()
2763 struct ab8500_charger *di = _di; in ab8500_charger_vbusdetf_handler() local
2765 di->vbus_detected = false; in ab8500_charger_vbusdetf_handler()
2766 dev_dbg(di->dev, "VBUS falling detected\n"); in ab8500_charger_vbusdetf_handler()
2767 queue_work(di->charger_wq, &di->detect_usb_type_work); in ab8500_charger_vbusdetf_handler()
2781 struct ab8500_charger *di = _di; in ab8500_charger_vbusdetr_handler() local
2783 di->vbus_detected = true; in ab8500_charger_vbusdetr_handler()
2784 dev_dbg(di->dev, "VBUS rising detected\n"); in ab8500_charger_vbusdetr_handler()
2786 queue_work(di->charger_wq, &di->detect_usb_type_work); in ab8500_charger_vbusdetr_handler()
2800 struct ab8500_charger *di = _di; in ab8500_charger_usblinkstatus_handler() local
2802 dev_dbg(di->dev, "USB link status changed\n"); in ab8500_charger_usblinkstatus_handler()
2804 queue_work(di->charger_wq, &di->usb_link_status_work); in ab8500_charger_usblinkstatus_handler()
2819 struct ab8500_charger *di = _di; in ab8500_charger_usbchthprotr_handler() local
2821 dev_dbg(di->dev, in ab8500_charger_usbchthprotr_handler()
2823 queue_work(di->charger_wq, &di->check_usb_thermal_prot_work); in ab8500_charger_usbchthprotr_handler()
2838 struct ab8500_charger *di = _di; in ab8500_charger_usbchthprotf_handler() local
2840 dev_dbg(di->dev, in ab8500_charger_usbchthprotf_handler()
2842 queue_work(di->charger_wq, &di->check_usb_thermal_prot_work); in ab8500_charger_usbchthprotf_handler()
2856 struct ab8500_charger *di = _di; in ab8500_charger_usbchargernotokr_handler() local
2858 dev_dbg(di->dev, "Not allowed USB charger detected\n"); in ab8500_charger_usbchargernotokr_handler()
2859 queue_delayed_work(di->charger_wq, &di->check_usbchgnotok_work, 0); in ab8500_charger_usbchargernotokr_handler()
2873 struct ab8500_charger *di = _di; in ab8500_charger_chwdexp_handler() local
2875 dev_dbg(di->dev, "Charger watchdog expired\n"); in ab8500_charger_chwdexp_handler()
2881 if (di->ac.charger_online) { in ab8500_charger_chwdexp_handler()
2882 di->ac.wd_expired = true; in ab8500_charger_chwdexp_handler()
2883 ab8500_power_supply_changed(di, di->ac_chg.psy); in ab8500_charger_chwdexp_handler()
2885 if (di->usb.charger_online) { in ab8500_charger_chwdexp_handler()
2886 di->usb.wd_expired = true; in ab8500_charger_chwdexp_handler()
2887 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_chwdexp_handler()
2902 struct ab8500_charger *di = _di; in ab8500_charger_vbuschdropend_handler() local
2904 dev_dbg(di->dev, "VBUS charger drop ended\n"); in ab8500_charger_vbuschdropend_handler()
2905 di->flags.vbus_drop_end = true; in ab8500_charger_vbuschdropend_handler()
2911 queue_delayed_work(di->charger_wq, &di->vbus_drop_end_work, in ab8500_charger_vbuschdropend_handler()
2926 struct ab8500_charger *di = _di; in ab8500_charger_vbusovv_handler() local
2928 dev_dbg(di->dev, "VBUS overvoltage detected\n"); in ab8500_charger_vbusovv_handler()
2929 di->flags.vbus_ovv = true; in ab8500_charger_vbusovv_handler()
2930 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_vbusovv_handler()
2933 queue_delayed_work(di->charger_wq, &di->check_hw_failure_work, 0); in ab8500_charger_vbusovv_handler()
2956 struct ab8500_charger *di; in ab8500_charger_ac_get_property() local
2959 di = to_ab8500_charger_ac_device_info(psy_to_ux500_charger(psy)); in ab8500_charger_ac_get_property()
2963 if (di->flags.mainextchnotok) in ab8500_charger_ac_get_property()
2965 else if (di->ac.wd_expired || di->usb.wd_expired) in ab8500_charger_ac_get_property()
2967 else if (di->flags.main_thermal_prot) in ab8500_charger_ac_get_property()
2973 val->intval = di->ac.charger_online; in ab8500_charger_ac_get_property()
2976 val->intval = di->ac.charger_connected; in ab8500_charger_ac_get_property()
2979 ret = ab8500_charger_get_ac_voltage(di); in ab8500_charger_ac_get_property()
2981 di->ac.charger_voltage = ret; in ab8500_charger_ac_get_property()
2983 val->intval = di->ac.charger_voltage * 1000; in ab8500_charger_ac_get_property()
2990 di->ac.cv_active = ab8500_charger_ac_cv(di); in ab8500_charger_ac_get_property()
2991 val->intval = di->ac.cv_active; in ab8500_charger_ac_get_property()
2994 ret = ab8500_charger_get_ac_current(di); in ab8500_charger_ac_get_property()
2996 di->ac.charger_current = ret; in ab8500_charger_ac_get_property()
2997 val->intval = di->ac.charger_current * 1000; in ab8500_charger_ac_get_property()
3023 struct ab8500_charger *di; in ab8500_charger_usb_get_property() local
3026 di = to_ab8500_charger_usb_device_info(psy_to_ux500_charger(psy)); in ab8500_charger_usb_get_property()
3030 if (di->flags.usbchargernotok) in ab8500_charger_usb_get_property()
3032 else if (di->ac.wd_expired || di->usb.wd_expired) in ab8500_charger_usb_get_property()
3034 else if (di->flags.usb_thermal_prot) in ab8500_charger_usb_get_property()
3036 else if (di->flags.vbus_ovv) in ab8500_charger_usb_get_property()
3042 val->intval = di->usb.charger_online; in ab8500_charger_usb_get_property()
3045 val->intval = di->usb.charger_connected; in ab8500_charger_usb_get_property()
3048 ret = ab8500_charger_get_vbus_voltage(di); in ab8500_charger_usb_get_property()
3050 di->usb.charger_voltage = ret; in ab8500_charger_usb_get_property()
3051 val->intval = di->usb.charger_voltage * 1000; in ab8500_charger_usb_get_property()
3058 di->usb.cv_active = ab8500_charger_usb_cv(di); in ab8500_charger_usb_get_property()
3059 val->intval = di->usb.cv_active; in ab8500_charger_usb_get_property()
3062 ret = ab8500_charger_get_usb_current(di); in ab8500_charger_usb_get_property()
3064 di->usb.charger_current = ret; in ab8500_charger_usb_get_property()
3065 val->intval = di->usb.charger_current * 1000; in ab8500_charger_usb_get_property()
3072 if (di->flags.vbus_collapse) in ab8500_charger_usb_get_property()
3090 static int ab8500_charger_init_hw_registers(struct ab8500_charger *di) in ab8500_charger_init_hw_registers() argument
3096 if (!is_ab8500_1p1_or_earlier(di->parent)) { in ab8500_charger_init_hw_registers()
3097 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3101 dev_err(di->dev, in ab8500_charger_init_hw_registers()
3106 if (is_ab8540(di->parent)) in ab8500_charger_init_hw_registers()
3107 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3111 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3115 dev_err(di->dev, in ab8500_charger_init_hw_registers()
3121 if (is_ab9540_2p0(di->parent) || is_ab9540_3p0(di->parent) in ab8500_charger_init_hw_registers()
3122 || is_ab8505_2p0(di->parent) || is_ab8540(di->parent)) in ab8500_charger_init_hw_registers()
3123 ret = abx500_mask_and_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3132 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3137 dev_err(di->dev, in ab8500_charger_init_hw_registers()
3143 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3146 dev_err(di->dev, "failed to enable main WD in OTP\n"); in ab8500_charger_init_hw_registers()
3151 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3155 dev_err(di->dev, "faile to enable main watchdog\n"); in ab8500_charger_init_hw_registers()
3168 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3173 dev_err(di->dev, "failed to kick main watchdog\n"); in ab8500_charger_init_hw_registers()
3178 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3182 dev_err(di->dev, "failed to disable main watchdog\n"); in ab8500_charger_init_hw_registers()
3187 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_init_hw_registers()
3190 dev_err(di->dev, "failed to set charger watchdog timeout\n"); in ab8500_charger_init_hw_registers()
3194 ret = ab8500_charger_led_en(di, false); in ab8500_charger_init_hw_registers()
3196 dev_err(di->dev, "failed to disable LED\n"); in ab8500_charger_init_hw_registers()
3201 if (di->bm->bkup_bat_v > BUP_VCH_SEL_3P1V) in ab8500_charger_init_hw_registers()
3203 if (di->bm->bkup_bat_v == BUP_VCH_SEL_3P3V) in ab8500_charger_init_hw_registers()
3206 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3209 (di->bm->bkup_bat_v & 0x3) | di->bm->bkup_bat_i); in ab8500_charger_init_hw_registers()
3211 dev_err(di->dev, "failed to setup backup battery charging\n"); in ab8500_charger_init_hw_registers()
3214 if (is_ab8540(di->parent)) { in ab8500_charger_init_hw_registers()
3215 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3220 dev_err(di->dev, in ab8500_charger_init_hw_registers()
3227 abx500_mask_and_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3231 dev_err(di->dev, "%s mask and set failed\n", __func__); in ab8500_charger_init_hw_registers()
3233 if (is_ab8540(di->parent)) { in ab8500_charger_init_hw_registers()
3234 ret = abx500_mask_and_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3238 dev_err(di->dev, in ab8500_charger_init_hw_registers()
3242 ret = abx500_mask_and_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3246 dev_err(di->dev, in ab8500_charger_init_hw_registers()
3279 struct ab8500_charger *di = in ab8500_charger_usb_notifier_call() local
3284 if (!di) in ab8500_charger_usb_notifier_call()
3288 dev_dbg(di->dev, "not a standard host, returning\n"); in ab8500_charger_usb_notifier_call()
3295 if ((di->usb_state.usb_current == 2) && (mA > 2)) in ab8500_charger_usb_notifier_call()
3306 dev_dbg(di->dev, "%s usb_state: 0x%02x mA: %d\n", in ab8500_charger_usb_notifier_call()
3309 spin_lock(&di->usb_state.usb_lock); in ab8500_charger_usb_notifier_call()
3310 di->usb_state.state_tmp = bm_usb_state; in ab8500_charger_usb_notifier_call()
3311 di->usb_state.usb_current_tmp = mA; in ab8500_charger_usb_notifier_call()
3312 spin_unlock(&di->usb_state.usb_lock); in ab8500_charger_usb_notifier_call()
3318 queue_delayed_work(di->charger_wq, &di->usb_state_changed_work, HZ/2); in ab8500_charger_usb_notifier_call()
3327 struct ab8500_charger *di = platform_get_drvdata(pdev); in ab8500_charger_resume() local
3338 if (di->ac_conn && is_ab8500_1p1_or_earlier(di->parent)) { in ab8500_charger_resume()
3339 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_resume()
3342 dev_err(di->dev, "Failed to kick WD!\n"); in ab8500_charger_resume()
3345 queue_delayed_work(di->charger_wq, &di->kick_wd_work, in ab8500_charger_resume()
3350 if (di->flags.mainextchnotok || di->flags.vbus_ovv) { in ab8500_charger_resume()
3351 queue_delayed_work(di->charger_wq, in ab8500_charger_resume()
3352 &di->check_hw_failure_work, 0); in ab8500_charger_resume()
3355 if (di->flags.vbus_drop_end) in ab8500_charger_resume()
3356 queue_delayed_work(di->charger_wq, &di->vbus_drop_end_work, 0); in ab8500_charger_resume()
3364 struct ab8500_charger *di = platform_get_drvdata(pdev); in ab8500_charger_suspend() local
3367 cancel_delayed_work(&di->check_hw_failure_work); in ab8500_charger_suspend()
3368 cancel_delayed_work(&di->vbus_drop_end_work); in ab8500_charger_suspend()
3370 flush_delayed_work(&di->attach_work); in ab8500_charger_suspend()
3371 flush_delayed_work(&di->usb_charger_attached_work); in ab8500_charger_suspend()
3372 flush_delayed_work(&di->ac_charger_attached_work); in ab8500_charger_suspend()
3373 flush_delayed_work(&di->check_usbchgnotok_work); in ab8500_charger_suspend()
3374 flush_delayed_work(&di->check_vbat_work); in ab8500_charger_suspend()
3375 flush_delayed_work(&di->kick_wd_work); in ab8500_charger_suspend()
3377 flush_work(&di->usb_link_status_work); in ab8500_charger_suspend()
3378 flush_work(&di->ac_work); in ab8500_charger_suspend()
3379 flush_work(&di->detect_usb_type_work); in ab8500_charger_suspend()
3381 if (atomic_read(&di->current_stepping_sessions)) in ab8500_charger_suspend()
3397 struct ab8500_charger *di = platform_get_drvdata(pdev); in ab8500_charger_remove() local
3401 ab8500_charger_ac_en(&di->ac_chg, false, 0, 0); in ab8500_charger_remove()
3404 ab8500_charger_usb_en(&di->usb_chg, false, 0, 0); in ab8500_charger_remove()
3409 free_irq(irq, di); in ab8500_charger_remove()
3413 ret = abx500_mask_and_set_register_interruptible(di->dev, in ab8500_charger_remove()
3416 dev_err(di->dev, "%s mask and set failed\n", __func__); in ab8500_charger_remove()
3418 usb_unregister_notifier(di->usb_phy, &di->nb); in ab8500_charger_remove()
3419 usb_put_phy(di->usb_phy); in ab8500_charger_remove()
3422 destroy_workqueue(di->charger_wq); in ab8500_charger_remove()
3425 if (!di->ac_chg.enabled) in ab8500_charger_remove()
3430 if (di->usb_chg.enabled) in ab8500_charger_remove()
3431 power_supply_unregister(di->usb_chg.psy); in ab8500_charger_remove()
3433 if (di->ac_chg.enabled && !di->ac_chg.external) in ab8500_charger_remove()
3434 power_supply_unregister(di->ac_chg.psy); in ab8500_charger_remove()
3466 struct ab8500_charger *di; in ab8500_charger_probe() local
3469 di = devm_kzalloc(&pdev->dev, sizeof(*di), GFP_KERNEL); in ab8500_charger_probe()
3470 if (!di) { in ab8500_charger_probe()
3479 di->bm = plat; in ab8500_charger_probe()
3482 ret = ab8500_bm_of_probe(&pdev->dev, np, di->bm); in ab8500_charger_probe()
3487 di->autopower_cfg = of_property_read_bool(np, "autopower_cfg"); in ab8500_charger_probe()
3489 di->autopower_cfg = false; in ab8500_charger_probe()
3492 di->dev = &pdev->dev; in ab8500_charger_probe()
3493 di->parent = dev_get_drvdata(pdev->dev.parent); in ab8500_charger_probe()
3494 di->gpadc = ab8500_gpadc_get("ab8500-gpadc.0"); in ab8500_charger_probe()
3497 spin_lock_init(&di->usb_state.usb_lock); in ab8500_charger_probe()
3498 mutex_init(&di->usb_ipt_crnt_lock); in ab8500_charger_probe()
3500 di->autopower = false; in ab8500_charger_probe()
3501 di->invalid_charger_detect_state = 0; in ab8500_charger_probe()
3506 ac_psy_cfg.drv_data = &di->ac_chg; in ab8500_charger_probe()
3509 usb_psy_cfg.drv_data = &di->usb_chg; in ab8500_charger_probe()
3513 di->ac_chg.ops.enable = &ab8500_charger_ac_en; in ab8500_charger_probe()
3514 di->ac_chg.ops.check_enable = &ab8500_charger_ac_check_enable; in ab8500_charger_probe()
3515 di->ac_chg.ops.kick_wd = &ab8500_charger_watchdog_kick; in ab8500_charger_probe()
3516 di->ac_chg.ops.update_curr = &ab8500_charger_update_charger_current; in ab8500_charger_probe()
3517 di->ac_chg.max_out_volt = ab8500_charger_voltage_map[ in ab8500_charger_probe()
3519 di->ac_chg.max_out_curr = in ab8500_charger_probe()
3520 di->bm->chg_output_curr[di->bm->n_chg_out_curr - 1]; in ab8500_charger_probe()
3521 di->ac_chg.wdt_refresh = CHG_WD_INTERVAL; in ab8500_charger_probe()
3522 di->ac_chg.enabled = di->bm->ac_enabled; in ab8500_charger_probe()
3523 di->ac_chg.external = false; in ab8500_charger_probe()
3526 if (!di->ac_chg.enabled) in ab8500_charger_probe()
3532 di->usb_chg.ops.enable = &ab8500_charger_usb_en; in ab8500_charger_probe()
3533 di->usb_chg.ops.check_enable = &ab8500_charger_usb_check_enable; in ab8500_charger_probe()
3534 di->usb_chg.ops.kick_wd = &ab8500_charger_watchdog_kick; in ab8500_charger_probe()
3535 di->usb_chg.ops.update_curr = &ab8500_charger_update_charger_current; in ab8500_charger_probe()
3536 di->usb_chg.ops.pp_enable = &ab8540_charger_power_path_enable; in ab8500_charger_probe()
3537 di->usb_chg.ops.pre_chg_enable = &ab8540_charger_usb_pre_chg_enable; in ab8500_charger_probe()
3538 di->usb_chg.max_out_volt = ab8500_charger_voltage_map[ in ab8500_charger_probe()
3540 di->usb_chg.max_out_curr = in ab8500_charger_probe()
3541 di->bm->chg_output_curr[di->bm->n_chg_out_curr - 1]; in ab8500_charger_probe()
3542 di->usb_chg.wdt_refresh = CHG_WD_INTERVAL; in ab8500_charger_probe()
3543 di->usb_chg.enabled = di->bm->usb_enabled; in ab8500_charger_probe()
3544 di->usb_chg.external = false; in ab8500_charger_probe()
3545 di->usb_chg.power_path = di->bm->usb_power_path; in ab8500_charger_probe()
3546 di->usb_state.usb_current = -1; in ab8500_charger_probe()
3549 di->charger_wq = in ab8500_charger_probe()
3551 if (di->charger_wq == NULL) { in ab8500_charger_probe()
3552 dev_err(di->dev, "failed to create work queue\n"); in ab8500_charger_probe()
3556 mutex_init(&di->charger_attached_mutex); in ab8500_charger_probe()
3559 INIT_DEFERRABLE_WORK(&di->check_hw_failure_work, in ab8500_charger_probe()
3561 INIT_DEFERRABLE_WORK(&di->check_usbchgnotok_work, in ab8500_charger_probe()
3564 INIT_DELAYED_WORK(&di->ac_charger_attached_work, in ab8500_charger_probe()
3566 INIT_DELAYED_WORK(&di->usb_charger_attached_work, in ab8500_charger_probe()
3578 INIT_DEFERRABLE_WORK(&di->kick_wd_work, in ab8500_charger_probe()
3581 INIT_DEFERRABLE_WORK(&di->check_vbat_work, in ab8500_charger_probe()
3584 INIT_DELAYED_WORK(&di->attach_work, in ab8500_charger_probe()
3587 INIT_DELAYED_WORK(&di->usb_state_changed_work, in ab8500_charger_probe()
3590 INIT_DELAYED_WORK(&di->vbus_drop_end_work, in ab8500_charger_probe()
3594 INIT_WORK(&di->usb_link_status_work, in ab8500_charger_probe()
3596 INIT_WORK(&di->ac_work, ab8500_charger_ac_work); in ab8500_charger_probe()
3597 INIT_WORK(&di->detect_usb_type_work, in ab8500_charger_probe()
3601 INIT_WORK(&di->check_main_thermal_prot_work, in ab8500_charger_probe()
3603 INIT_WORK(&di->check_usb_thermal_prot_work, in ab8500_charger_probe()
3611 di->regu = devm_regulator_get(di->dev, "vddadc"); in ab8500_charger_probe()
3612 if (IS_ERR(di->regu)) { in ab8500_charger_probe()
3613 ret = PTR_ERR(di->regu); in ab8500_charger_probe()
3614 dev_err(di->dev, "failed to get vddadc regulator\n"); in ab8500_charger_probe()
3620 ret = ab8500_charger_init_hw_registers(di); in ab8500_charger_probe()
3622 dev_err(di->dev, "failed to initialize ABB registers\n"); in ab8500_charger_probe()
3627 if (di->ac_chg.enabled) { in ab8500_charger_probe()
3628 di->ac_chg.psy = power_supply_register(di->dev, in ab8500_charger_probe()
3631 if (IS_ERR(di->ac_chg.psy)) { in ab8500_charger_probe()
3632 dev_err(di->dev, "failed to register AC charger\n"); in ab8500_charger_probe()
3633 ret = PTR_ERR(di->ac_chg.psy); in ab8500_charger_probe()
3639 if (di->usb_chg.enabled) { in ab8500_charger_probe()
3640 di->usb_chg.psy = power_supply_register(di->dev, in ab8500_charger_probe()
3643 if (IS_ERR(di->usb_chg.psy)) { in ab8500_charger_probe()
3644 dev_err(di->dev, "failed to register USB charger\n"); in ab8500_charger_probe()
3645 ret = PTR_ERR(di->usb_chg.psy); in ab8500_charger_probe()
3650 di->usb_phy = usb_get_phy(USB_PHY_TYPE_USB2); in ab8500_charger_probe()
3651 if (IS_ERR_OR_NULL(di->usb_phy)) { in ab8500_charger_probe()
3652 dev_err(di->dev, "failed to get usb transceiver\n"); in ab8500_charger_probe()
3656 di->nb.notifier_call = ab8500_charger_usb_notifier_call; in ab8500_charger_probe()
3657 ret = usb_register_notifier(di->usb_phy, &di->nb); in ab8500_charger_probe()
3659 dev_err(di->dev, "failed to register usb notifier\n"); in ab8500_charger_probe()
3664 charger_status = ab8500_charger_detect_chargers(di, true); in ab8500_charger_probe()
3666 di->ac.charger_connected = 1; in ab8500_charger_probe()
3667 di->ac_conn = true; in ab8500_charger_probe()
3668 ab8500_power_supply_changed(di, di->ac_chg.psy); in ab8500_charger_probe()
3669 sysfs_notify(&di->ac_chg.psy->dev.kobj, NULL, "present"); in ab8500_charger_probe()
3673 di->vbus_detected = true; in ab8500_charger_probe()
3674 di->vbus_detected_start = true; in ab8500_charger_probe()
3675 queue_work(di->charger_wq, in ab8500_charger_probe()
3676 &di->detect_usb_type_work); in ab8500_charger_probe()
3684 ab8500_charger_irq[i].name, di); in ab8500_charger_probe()
3687 dev_err(di->dev, "failed to request %s IRQ %d: %d\n" in ab8500_charger_probe()
3691 dev_dbg(di->dev, "Requested %s IRQ %d: %d\n", in ab8500_charger_probe()
3695 platform_set_drvdata(pdev, di); in ab8500_charger_probe()
3697 mutex_lock(&di->charger_attached_mutex); in ab8500_charger_probe()
3699 ch_stat = ab8500_charger_detect_chargers(di, false); in ab8500_charger_probe()
3702 if (is_ab8500(di->parent)) in ab8500_charger_probe()
3703 queue_delayed_work(di->charger_wq, in ab8500_charger_probe()
3704 &di->ac_charger_attached_work, in ab8500_charger_probe()
3708 if (is_ab8500(di->parent)) in ab8500_charger_probe()
3709 queue_delayed_work(di->charger_wq, in ab8500_charger_probe()
3710 &di->usb_charger_attached_work, in ab8500_charger_probe()
3714 mutex_unlock(&di->charger_attached_mutex); in ab8500_charger_probe()
3719 usb_unregister_notifier(di->usb_phy, &di->nb); in ab8500_charger_probe()
3724 free_irq(irq, di); in ab8500_charger_probe()
3727 usb_put_phy(di->usb_phy); in ab8500_charger_probe()
3729 if (di->usb_chg.enabled) in ab8500_charger_probe()
3730 power_supply_unregister(di->usb_chg.psy); in ab8500_charger_probe()
3732 if (di->ac_chg.enabled) in ab8500_charger_probe()
3733 power_supply_unregister(di->ac_chg.psy); in ab8500_charger_probe()
3735 destroy_workqueue(di->charger_wq); in ab8500_charger_probe()