Lines Matching refs:di

350 static void ab8500_enable_disable_sw_fallback(struct ab8500_charger *di,  in ab8500_enable_disable_sw_fallback()  argument
359 dev_dbg(di->dev, "SW Fallback: %d\n", fallback); in ab8500_enable_disable_sw_fallback()
361 if (is_ab8500(di->parent)) { in ab8500_enable_disable_sw_fallback()
372 ret = abx500_get_register_interruptible(di->dev, bank, reg, &val); in ab8500_enable_disable_sw_fallback()
374 dev_err(di->dev, "%d read failed\n", __LINE__); in ab8500_enable_disable_sw_fallback()
378 if (is_ab8500(di->parent)) { in ab8500_enable_disable_sw_fallback()
380 ret = abx500_set_register_interruptible(di->dev, 0x11, 0x00, 0x2); in ab8500_enable_disable_sw_fallback()
382 dev_err(di->dev, "%d write failed\n", __LINE__); in ab8500_enable_disable_sw_fallback()
393 ret = abx500_set_register_interruptible(di->dev, bank, reg, val); in ab8500_enable_disable_sw_fallback()
395 dev_err(di->dev, "%d write failed\n", __LINE__); in ab8500_enable_disable_sw_fallback()
399 if (is_ab8500(di->parent)) { in ab8500_enable_disable_sw_fallback()
401 ret = abx500_set_register_interruptible(di->dev, 0x11, 0x00, 0x0); in ab8500_enable_disable_sw_fallback()
403 dev_err(di->dev, "%d write failed\n", __LINE__); in ab8500_enable_disable_sw_fallback()
415 static void ab8500_power_supply_changed(struct ab8500_charger *di, in ab8500_power_supply_changed() argument
426 if (di->autopower_cfg) { in ab8500_power_supply_changed()
427 if (!di->usb.charger_connected && in ab8500_power_supply_changed()
428 !di->ac.charger_connected && in ab8500_power_supply_changed()
429 di->autopower) { in ab8500_power_supply_changed()
430 di->autopower = false; in ab8500_power_supply_changed()
431 ab8500_enable_disable_sw_fallback(di, false); in ab8500_power_supply_changed()
432 } else if (!di->autopower && in ab8500_power_supply_changed()
433 (di->ac.charger_connected || in ab8500_power_supply_changed()
434 di->usb.charger_connected)) { in ab8500_power_supply_changed()
435 di->autopower = true; in ab8500_power_supply_changed()
436 ab8500_enable_disable_sw_fallback(di, true); in ab8500_power_supply_changed()
442 static void ab8500_charger_set_usb_connected(struct ab8500_charger *di, in ab8500_charger_set_usb_connected() argument
445 if (connected != di->usb.charger_connected) { in ab8500_charger_set_usb_connected()
446 dev_dbg(di->dev, "USB connected:%i\n", connected); in ab8500_charger_set_usb_connected()
447 di->usb.charger_connected = connected; in ab8500_charger_set_usb_connected()
450 di->flags.vbus_drop_end = false; in ab8500_charger_set_usb_connected()
457 if (di->usb_chg.psy) { in ab8500_charger_set_usb_connected()
458 sysfs_notify(&di->usb_chg.psy->dev.kobj, NULL, in ab8500_charger_set_usb_connected()
463 mutex_lock(&di->charger_attached_mutex); in ab8500_charger_set_usb_connected()
464 mutex_unlock(&di->charger_attached_mutex); in ab8500_charger_set_usb_connected()
466 if (is_ab8500(di->parent)) in ab8500_charger_set_usb_connected()
467 queue_delayed_work(di->charger_wq, in ab8500_charger_set_usb_connected()
468 &di->usb_charger_attached_work, in ab8500_charger_set_usb_connected()
471 cancel_delayed_work_sync(&di->usb_charger_attached_work); in ab8500_charger_set_usb_connected()
472 mutex_lock(&di->charger_attached_mutex); in ab8500_charger_set_usb_connected()
473 mutex_unlock(&di->charger_attached_mutex); in ab8500_charger_set_usb_connected()
484 static int ab8500_charger_get_ac_voltage(struct ab8500_charger *di) in ab8500_charger_get_ac_voltage() argument
489 if (di->ac.charger_connected) { in ab8500_charger_get_ac_voltage()
490 ret = iio_read_channel_processed(di->adc_main_charger_v, &vch); in ab8500_charger_get_ac_voltage()
492 dev_err(di->dev, "%s ADC conv failed,\n", __func__); in ab8500_charger_get_ac_voltage()
506 static int ab8500_charger_ac_cv(struct ab8500_charger *di) in ab8500_charger_ac_cv() argument
512 if (di->ac.charger_online) { in ab8500_charger_ac_cv()
513 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_ac_cv()
516 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_ac_cv()
536 static int ab8500_charger_get_vbus_voltage(struct ab8500_charger *di) in ab8500_charger_get_vbus_voltage() argument
541 if (di->usb.charger_connected) { in ab8500_charger_get_vbus_voltage()
542 ret = iio_read_channel_processed(di->adc_vbus_v, &vch); in ab8500_charger_get_vbus_voltage()
544 dev_err(di->dev, "%s ADC conv failed,\n", __func__); in ab8500_charger_get_vbus_voltage()
559 static int ab8500_charger_get_usb_current(struct ab8500_charger *di) in ab8500_charger_get_usb_current() argument
564 if (di->usb.charger_online) { in ab8500_charger_get_usb_current()
565 ret = iio_read_channel_processed(di->adc_usb_charger_c, &ich); in ab8500_charger_get_usb_current()
567 dev_err(di->dev, "%s ADC conv failed,\n", __func__); in ab8500_charger_get_usb_current()
582 static int ab8500_charger_get_ac_current(struct ab8500_charger *di) in ab8500_charger_get_ac_current() argument
587 if (di->ac.charger_online) { in ab8500_charger_get_ac_current()
588 ret = iio_read_channel_processed(di->adc_main_charger_c, &ich); in ab8500_charger_get_ac_current()
590 dev_err(di->dev, "%s ADC conv failed,\n", __func__); in ab8500_charger_get_ac_current()
604 static int ab8500_charger_usb_cv(struct ab8500_charger *di) in ab8500_charger_usb_cv() argument
610 if (di->usb.charger_online) { in ab8500_charger_usb_cv()
611 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_usb_cv()
614 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_usb_cv()
646 static int ab8500_charger_detect_chargers(struct ab8500_charger *di, bool probe) in ab8500_charger_detect_chargers() argument
653 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_detect_chargers()
656 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_detect_chargers()
674 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_detect_chargers()
677 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_detect_chargers()
680 dev_dbg(di->dev, in ab8500_charger_detect_chargers()
698 static int ab8500_charger_max_usb_curr(struct ab8500_charger *di, in ab8500_charger_max_usb_curr() argument
703 di->usb_device_is_unrecognised = false; in ab8500_charger_max_usb_curr()
716 dev_dbg(di->dev, "USB Type - Standard host is " in ab8500_charger_max_usb_curr()
718 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5; in ab8500_charger_max_usb_curr()
719 di->is_aca_rid = 0; in ab8500_charger_max_usb_curr()
722 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5; in ab8500_charger_max_usb_curr()
723 di->is_aca_rid = 0; in ab8500_charger_max_usb_curr()
726 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5; in ab8500_charger_max_usb_curr()
727 di->is_aca_rid = 0; in ab8500_charger_max_usb_curr()
730 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P9; in ab8500_charger_max_usb_curr()
731 di->is_aca_rid = 0; in ab8500_charger_max_usb_curr()
738 dev_dbg(di->dev, "USB_STAT_ACA_RID_A detected\n"); in ab8500_charger_max_usb_curr()
739 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5; in ab8500_charger_max_usb_curr()
740 di->is_aca_rid = 1; in ab8500_charger_max_usb_curr()
747 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_1P3; in ab8500_charger_max_usb_curr()
748 dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d", link_status, in ab8500_charger_max_usb_curr()
749 di->max_usb_in_curr.usb_type_max_ua); in ab8500_charger_max_usb_curr()
750 di->is_aca_rid = 1; in ab8500_charger_max_usb_curr()
753 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5; in ab8500_charger_max_usb_curr()
754 di->is_aca_rid = 0; in ab8500_charger_max_usb_curr()
757 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_1P5; in ab8500_charger_max_usb_curr()
758 di->is_aca_rid = 0; in ab8500_charger_max_usb_curr()
762 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_1P5; in ab8500_charger_max_usb_curr()
763 di->is_aca_rid = 1; in ab8500_charger_max_usb_curr()
766 if (di->vbus_detected) { in ab8500_charger_max_usb_curr()
767 di->usb_device_is_unrecognised = true; in ab8500_charger_max_usb_curr()
768 dev_dbg(di->dev, "USB Type - Legacy charger.\n"); in ab8500_charger_max_usb_curr()
769 di->max_usb_in_curr.usb_type_max_ua = in ab8500_charger_max_usb_curr()
775 dev_err(di->dev, "USB Type - Charging not allowed\n"); in ab8500_charger_max_usb_curr()
776 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P05; in ab8500_charger_max_usb_curr()
780 if (is_ab8500(di->parent)) { in ab8500_charger_max_usb_curr()
781 di->flags.vbus_collapse = true; in ab8500_charger_max_usb_curr()
782 dev_err(di->dev, "USB Type - USB_STAT_RESERVED " in ab8500_charger_max_usb_curr()
787 dev_dbg(di->dev, "USB Type - Charging not allowed\n"); in ab8500_charger_max_usb_curr()
788 di->max_usb_in_curr.usb_type_max_ua = in ab8500_charger_max_usb_curr()
790 dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d", in ab8500_charger_max_usb_curr()
792 di->max_usb_in_curr.usb_type_max_ua); in ab8500_charger_max_usb_curr()
800 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5; in ab8500_charger_max_usb_curr()
801 dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d", link_status, in ab8500_charger_max_usb_curr()
802 di->max_usb_in_curr.usb_type_max_ua); in ab8500_charger_max_usb_curr()
805 dev_err(di->dev, "USB Type invalid - try charging anyway\n"); in ab8500_charger_max_usb_curr()
806 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5; in ab8500_charger_max_usb_curr()
810 dev_err(di->dev, "USB Type - Unknown\n"); in ab8500_charger_max_usb_curr()
811 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P05; in ab8500_charger_max_usb_curr()
816 di->max_usb_in_curr.set_max_ua = di->max_usb_in_curr.usb_type_max_ua; in ab8500_charger_max_usb_curr()
817 dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d", in ab8500_charger_max_usb_curr()
818 link_status, di->max_usb_in_curr.set_max_ua); in ab8500_charger_max_usb_curr()
830 static int ab8500_charger_read_usb_type(struct ab8500_charger *di) in ab8500_charger_read_usb_type() argument
835 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_read_usb_type()
838 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_read_usb_type()
841 if (is_ab8500(di->parent)) in ab8500_charger_read_usb_type()
842 ret = abx500_get_register_interruptible(di->dev, AB8500_USB, in ab8500_charger_read_usb_type()
845 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_read_usb_type()
848 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_read_usb_type()
853 if (is_ab8500(di->parent)) in ab8500_charger_read_usb_type()
857 ret = ab8500_charger_max_usb_curr(di, in ab8500_charger_read_usb_type()
870 static int ab8500_charger_detect_usb_type(struct ab8500_charger *di) in ab8500_charger_detect_usb_type() argument
882 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_detect_usb_type()
885 dev_dbg(di->dev, "%s AB8500_IT_SOURCE21_REG %x\n", in ab8500_charger_detect_usb_type()
888 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_detect_usb_type()
892 if (is_ab8500(di->parent)) in ab8500_charger_detect_usb_type()
893 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_detect_usb_type()
896 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_detect_usb_type()
899 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_detect_usb_type()
902 dev_dbg(di->dev, "%s AB8500_USB_LINE_STAT_REG %x\n", __func__, in ab8500_charger_detect_usb_type()
911 if (is_ab8500(di->parent)) in ab8500_charger_detect_usb_type()
920 ret = ab8500_charger_max_usb_curr(di, in ab8500_charger_detect_usb_type()
1044 static int ab8500_current_to_regval(struct ab8500_charger *di, int curr_ua) in ab8500_current_to_regval() argument
1064 static int ab8500_vbus_in_curr_to_regval(struct ab8500_charger *di, int curr_ua) in ab8500_vbus_in_curr_to_regval() argument
1093 static int ab8500_charger_get_usb_cur(struct ab8500_charger *di) in ab8500_charger_get_usb_cur() argument
1096 switch (di->usb_state.usb_current_ua) { in ab8500_charger_get_usb_cur()
1098 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P09; in ab8500_charger_get_usb_cur()
1101 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P19; in ab8500_charger_get_usb_cur()
1104 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P29; in ab8500_charger_get_usb_cur()
1107 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P38; in ab8500_charger_get_usb_cur()
1110 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P5; in ab8500_charger_get_usb_cur()
1113 di->max_usb_in_curr.usb_type_max_ua = USB_CH_IP_CUR_LVL_0P05; in ab8500_charger_get_usb_cur()
1117 di->max_usb_in_curr.set_max_ua = di->max_usb_in_curr.usb_type_max_ua; in ab8500_charger_get_usb_cur()
1130 static bool ab8500_charger_check_continue_stepping(struct ab8500_charger *di, in ab8500_charger_check_continue_stepping() argument
1134 return !di->flags.vbus_drop_end; in ab8500_charger_check_continue_stepping()
1152 static int ab8500_charger_set_current(struct ab8500_charger *di, in ab8500_charger_set_current() argument
1161 atomic_inc(&di->current_stepping_sessions); in ab8500_charger_set_current()
1163 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_set_current()
1166 dev_err(di->dev, "%s read failed\n", __func__); in ab8500_charger_set_current()
1174 curr_index = ab8500_current_to_regval(di, ich_ua); in ab8500_charger_set_current()
1176 if (!di->ac.charger_connected) in ab8500_charger_set_current()
1182 curr_index = ab8500_vbus_in_curr_to_regval(di, ich_ua); in ab8500_charger_set_current()
1185 if (!di->usb.charger_connected) in ab8500_charger_set_current()
1191 curr_index = ab8500_current_to_regval(di, ich_ua); in ab8500_charger_set_current()
1196 if (!di->usb.charger_connected && !di->ac.charger_connected) in ab8500_charger_set_current()
1201 dev_err(di->dev, "%s current register not valid\n", __func__); in ab8500_charger_set_current()
1207 dev_err(di->dev, "requested current limit out-of-range\n"); in ab8500_charger_set_current()
1214 dev_dbg(di->dev, "%s current not changed for reg: 0x%02x\n", in ab8500_charger_set_current()
1220 dev_dbg(di->dev, "%s set charger current: %d uA for reg: 0x%02x\n", in ab8500_charger_set_current()
1224 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_set_current()
1227 dev_err(di->dev, "%s write failed\n", __func__); in ab8500_charger_set_current()
1230 dev_dbg(di->dev, "curr change_1 to: %x for 0x%02x\n", in ab8500_charger_set_current()
1232 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_set_current()
1235 dev_err(di->dev, "%s write failed\n", __func__); in ab8500_charger_set_current()
1244 dev_dbg(di->dev, "curr change_2 to: %x for 0x%02x\n", in ab8500_charger_set_current()
1246 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_set_current()
1249 dev_err(di->dev, "%s write failed\n", __func__); in ab8500_charger_set_current()
1255 allow = ab8500_charger_check_continue_stepping(di, reg); in ab8500_charger_set_current()
1260 atomic_dec(&di->current_stepping_sessions); in ab8500_charger_set_current()
1273 static int ab8500_charger_set_vbus_in_curr(struct ab8500_charger *di, in ab8500_charger_set_vbus_in_curr() argument
1280 min_value = min(di->bm->chg_params->usb_curr_max_ua, ich_in_ua); in ab8500_charger_set_vbus_in_curr()
1281 if (di->max_usb_in_curr.set_max_ua > 0) in ab8500_charger_set_vbus_in_curr()
1282 min_value = min(di->max_usb_in_curr.set_max_ua, min_value); in ab8500_charger_set_vbus_in_curr()
1284 if (di->usb_state.usb_current_ua >= 0) in ab8500_charger_set_vbus_in_curr()
1285 min_value = min(di->usb_state.usb_current_ua, min_value); in ab8500_charger_set_vbus_in_curr()
1289 if (di->vbat < VBAT_TRESH_IP_CUR_RED) in ab8500_charger_set_vbus_in_curr()
1293 if (di->vbat < VBAT_TRESH_IP_CUR_RED) in ab8500_charger_set_vbus_in_curr()
1300 dev_info(di->dev, "VBUS input current limit set to %d uA\n", min_value); in ab8500_charger_set_vbus_in_curr()
1302 mutex_lock(&di->usb_ipt_crnt_lock); in ab8500_charger_set_vbus_in_curr()
1303 ret = ab8500_charger_set_current(di, min_value, in ab8500_charger_set_vbus_in_curr()
1305 mutex_unlock(&di->usb_ipt_crnt_lock); in ab8500_charger_set_vbus_in_curr()
1318 static int ab8500_charger_set_main_in_curr(struct ab8500_charger *di, in ab8500_charger_set_main_in_curr() argument
1321 return ab8500_charger_set_current(di, ich_in_ua, in ab8500_charger_set_main_in_curr()
1333 static int ab8500_charger_set_output_curr(struct ab8500_charger *di, in ab8500_charger_set_output_curr() argument
1336 return ab8500_charger_set_current(di, ich_out_ua, in ab8500_charger_set_output_curr()
1348 static int ab8500_charger_led_en(struct ab8500_charger *di, int on) in ab8500_charger_led_en() argument
1354 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_led_en()
1358 dev_err(di->dev, "Power ON LED failed\n"); in ab8500_charger_led_en()
1362 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_led_en()
1366 dev_err(di->dev, "Set LED PWM duty cycle failed\n"); in ab8500_charger_led_en()
1371 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_led_en()
1375 dev_err(di->dev, "Power-off LED failed\n"); in ab8500_charger_led_en()
1402 struct ab8500_charger *di = to_ab8500_charger_ac_device_info(charger); in ab8500_charger_ac_en() local
1406 if (!di->ac.charger_connected) { in ab8500_charger_ac_en()
1407 dev_err(di->dev, "AC charger not connected\n"); in ab8500_charger_ac_en()
1412 dev_dbg(di->dev, "Enable AC: %duV %duA\n", vset_uv, iset_ua); in ab8500_charger_ac_en()
1424 if (!di->vddadc_en_ac) { in ab8500_charger_ac_en()
1425 ret = regulator_enable(di->regu); in ab8500_charger_ac_en()
1427 dev_warn(di->dev, in ab8500_charger_ac_en()
1430 di->vddadc_en_ac = true; in ab8500_charger_ac_en()
1435 curr_index = ab8500_current_to_regval(di, iset_ua); in ab8500_charger_ac_en()
1436 input_curr_index = ab8500_current_to_regval(di, in ab8500_charger_ac_en()
1437 di->bm->chg_params->ac_curr_max_ua); in ab8500_charger_ac_en()
1439 dev_err(di->dev, in ab8500_charger_ac_en()
1446 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_ac_en()
1449 dev_err(di->dev, "%s write failed\n", __func__); in ab8500_charger_ac_en()
1453 ret = ab8500_charger_set_main_in_curr(di, in ab8500_charger_ac_en()
1454 di->bm->chg_params->ac_curr_max_ua); in ab8500_charger_ac_en()
1456 dev_err(di->dev, "%s Failed to set MainChInputCurr\n", in ab8500_charger_ac_en()
1461 ret = ab8500_charger_set_output_curr(di, iset_ua); in ab8500_charger_ac_en()
1463 dev_err(di->dev, "%s " in ab8500_charger_ac_en()
1470 if (!di->bm->enable_overshoot) in ab8500_charger_ac_en()
1474 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_ac_en()
1477 dev_err(di->dev, "%s write failed\n", __func__); in ab8500_charger_ac_en()
1482 ret = ab8500_charger_led_en(di, true); in ab8500_charger_ac_en()
1484 dev_err(di->dev, "failed to enable LED\n"); in ab8500_charger_ac_en()
1486 di->ac.charger_online = 1; in ab8500_charger_ac_en()
1489 if (is_ab8500_1p1_or_earlier(di->parent)) { in ab8500_charger_ac_en()
1500 if (di->ac_conn) { in ab8500_charger_ac_en()
1501 queue_delayed_work(di->charger_wq, in ab8500_charger_ac_en()
1502 &di->kick_wd_work, in ab8500_charger_ac_en()
1513 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_ac_en()
1517 dev_err(di->dev, in ab8500_charger_ac_en()
1522 ret = ab8500_charger_set_output_curr(di, 0); in ab8500_charger_ac_en()
1524 dev_err(di->dev, "%s " in ab8500_charger_ac_en()
1530 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_ac_en()
1534 dev_err(di->dev, in ab8500_charger_ac_en()
1540 ret = ab8500_charger_led_en(di, false); in ab8500_charger_ac_en()
1542 dev_err(di->dev, "failed to disable LED\n"); in ab8500_charger_ac_en()
1544 di->ac.charger_online = 0; in ab8500_charger_ac_en()
1545 di->ac.wd_expired = false; in ab8500_charger_ac_en()
1548 if (di->vddadc_en_ac) { in ab8500_charger_ac_en()
1549 regulator_disable(di->regu); in ab8500_charger_ac_en()
1550 di->vddadc_en_ac = false; in ab8500_charger_ac_en()
1553 dev_dbg(di->dev, "%s Disabled AC charging\n", __func__); in ab8500_charger_ac_en()
1555 ab8500_power_supply_changed(di, di->ac_chg.psy); in ab8500_charger_ac_en()
1578 struct ab8500_charger *di = to_ab8500_charger_usb_device_info(charger); in ab8500_charger_usb_en() local
1582 if (!di->usb.charger_connected) { in ab8500_charger_usb_en()
1583 dev_err(di->dev, "USB charger not connected\n"); in ab8500_charger_usb_en()
1597 if (!di->vddadc_en_usb) { in ab8500_charger_usb_en()
1598 ret = regulator_enable(di->regu); in ab8500_charger_usb_en()
1600 dev_warn(di->dev, in ab8500_charger_usb_en()
1603 di->vddadc_en_usb = true; in ab8500_charger_usb_en()
1607 dev_dbg(di->dev, "Enable USB: %d uV %d uA\n", vset_uv, ich_out_ua); in ab8500_charger_usb_en()
1611 curr_index = ab8500_current_to_regval(di, ich_out_ua); in ab8500_charger_usb_en()
1613 dev_err(di->dev, in ab8500_charger_usb_en()
1623 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_usb_en()
1626 dev_err(di->dev, "%s write failed\n", __func__); in ab8500_charger_usb_en()
1630 if (!di->bm->enable_overshoot) in ab8500_charger_usb_en()
1634 dev_dbg(di->dev, in ab8500_charger_usb_en()
1636 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_usb_en()
1639 dev_err(di->dev, "%s write failed\n", __func__); in ab8500_charger_usb_en()
1644 ret = ab8500_charger_led_en(di, true); in ab8500_charger_usb_en()
1646 dev_err(di->dev, "failed to enable LED\n"); in ab8500_charger_usb_en()
1648 di->usb.charger_online = 1; in ab8500_charger_usb_en()
1651 ret = ab8500_charger_set_vbus_in_curr(di, in ab8500_charger_usb_en()
1652 di->max_usb_in_curr.usb_type_max_ua); in ab8500_charger_usb_en()
1654 dev_err(di->dev, "setting USBChInputCurr failed\n"); in ab8500_charger_usb_en()
1659 ret = ab8500_charger_set_output_curr(di, ich_out_ua); in ab8500_charger_usb_en()
1661 dev_err(di->dev, "%s " in ab8500_charger_usb_en()
1667 queue_delayed_work(di->charger_wq, &di->check_vbat_work, HZ); in ab8500_charger_usb_en()
1671 dev_dbg(di->dev, "%s Disabled USB charging\n", __func__); in ab8500_charger_usb_en()
1672 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_usb_en()
1676 dev_err(di->dev, in ab8500_charger_usb_en()
1681 ret = ab8500_charger_led_en(di, false); in ab8500_charger_usb_en()
1683 dev_err(di->dev, "failed to disable LED\n"); in ab8500_charger_usb_en()
1685 ret = ab8500_charger_set_vbus_in_curr(di, 0); in ab8500_charger_usb_en()
1687 dev_err(di->dev, "setting USBChInputCurr failed\n"); in ab8500_charger_usb_en()
1692 ret = ab8500_charger_set_output_curr(di, 0); in ab8500_charger_usb_en()
1694 dev_err(di->dev, "%s " in ab8500_charger_usb_en()
1699 di->usb.charger_online = 0; in ab8500_charger_usb_en()
1700 di->usb.wd_expired = false; in ab8500_charger_usb_en()
1703 if (di->vddadc_en_usb) { in ab8500_charger_usb_en()
1704 regulator_disable(di->regu); in ab8500_charger_usb_en()
1705 di->vddadc_en_usb = false; in ab8500_charger_usb_en()
1708 dev_dbg(di->dev, "%s Disabled USB charging\n", __func__); in ab8500_charger_usb_en()
1711 cancel_delayed_work(&di->check_vbat_work); in ab8500_charger_usb_en()
1714 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_usb_en()
1734 struct ab8500_charger *di = to_ab8500_charger_usb_device_info(charger); in ab8500_charger_usb_check_enable() local
1736 if (!di->usb.charger_connected) in ab8500_charger_usb_check_enable()
1739 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_usb_check_enable()
1742 dev_err(di->dev, "ab8500 read failed %d\n", __LINE__); in ab8500_charger_usb_check_enable()
1745 dev_dbg(di->dev, "USB charger ctrl: 0x%02x\n", usbch_ctrl1); in ab8500_charger_usb_check_enable()
1748 dev_info(di->dev, "Charging has been disabled abnormally and will be re-enabled\n"); in ab8500_charger_usb_check_enable()
1750 ret = abx500_mask_and_set_register_interruptible(di->dev, in ab8500_charger_usb_check_enable()
1754 dev_err(di->dev, "ab8500 write failed %d\n", __LINE__); in ab8500_charger_usb_check_enable()
1758 ret = ab8500_charger_usb_en(&di->usb_chg, true, vset_uv, iset_ua); in ab8500_charger_usb_check_enable()
1760 dev_err(di->dev, "Failed to enable VBUS charger %d\n", in ab8500_charger_usb_check_enable()
1783 struct ab8500_charger *di = to_ab8500_charger_ac_device_info(charger); in ab8500_charger_ac_check_enable() local
1785 if (!di->ac.charger_connected) in ab8500_charger_ac_check_enable()
1788 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_ac_check_enable()
1791 dev_err(di->dev, "ab8500 read failed %d\n", __LINE__); in ab8500_charger_ac_check_enable()
1794 dev_dbg(di->dev, "AC charger ctrl: 0x%02x\n", mainch_ctrl1); in ab8500_charger_ac_check_enable()
1797 dev_info(di->dev, "Charging has been disabled abnormally and will be re-enabled\n"); in ab8500_charger_ac_check_enable()
1799 ret = abx500_mask_and_set_register_interruptible(di->dev, in ab8500_charger_ac_check_enable()
1804 dev_err(di->dev, "ab8500 write failed %d\n", __LINE__); in ab8500_charger_ac_check_enable()
1808 ret = ab8500_charger_ac_en(&di->usb_chg, true, vset_uv, iset_ua); in ab8500_charger_ac_check_enable()
1810 dev_err(di->dev, "failed to enable AC charger %d\n", in ab8500_charger_ac_check_enable()
1828 struct ab8500_charger *di; in ab8500_charger_watchdog_kick() local
1831 di = to_ab8500_charger_ac_device_info(charger); in ab8500_charger_watchdog_kick()
1833 di = to_ab8500_charger_usb_device_info(charger); in ab8500_charger_watchdog_kick()
1837 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_watchdog_kick()
1840 dev_err(di->dev, "Failed to kick WD!\n"); in ab8500_charger_watchdog_kick()
1857 struct ab8500_charger *di; in ab8500_charger_update_charger_current() local
1860 di = to_ab8500_charger_ac_device_info(charger); in ab8500_charger_update_charger_current()
1862 di = to_ab8500_charger_usb_device_info(charger); in ab8500_charger_update_charger_current()
1866 ret = ab8500_charger_set_output_curr(di, ich_out_ua); in ab8500_charger_update_charger_current()
1868 dev_err(di->dev, "%s " in ab8500_charger_update_charger_current()
1875 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_update_charger_current()
1878 dev_err(di->dev, "%s write failed\n", __func__); in ab8500_charger_update_charger_current()
1890 struct ab8500_charger *di; in ab8500_charger_get_ext_psy_data() local
1898 di = to_ab8500_charger_usb_device_info(usb_chg); in ab8500_charger_get_ext_psy_data()
1922 dev_dbg(di->dev, "get VBAT from %s\n", in ab8500_charger_get_ext_psy_data()
1924 di->vbat = ret.intval; in ab8500_charger_get_ext_psy_data()
1949 struct ab8500_charger *di = container_of(work, in ab8500_charger_check_vbat_work() local
1953 &di->usb_chg, ab8500_charger_get_ext_psy_data); in ab8500_charger_check_vbat_work()
1956 if (di->old_vbat == 0) in ab8500_charger_check_vbat_work()
1957 di->old_vbat = di->vbat; in ab8500_charger_check_vbat_work()
1959 if (!((di->old_vbat <= VBAT_TRESH_IP_CUR_RED && in ab8500_charger_check_vbat_work()
1960 di->vbat <= VBAT_TRESH_IP_CUR_RED) || in ab8500_charger_check_vbat_work()
1961 (di->old_vbat > VBAT_TRESH_IP_CUR_RED && in ab8500_charger_check_vbat_work()
1962 di->vbat > VBAT_TRESH_IP_CUR_RED))) { in ab8500_charger_check_vbat_work()
1964 dev_dbg(di->dev, "Vbat did cross threshold, curr: %d, new: %d," in ab8500_charger_check_vbat_work()
1965 " old: %d\n", di->max_usb_in_curr.usb_type_max_ua, in ab8500_charger_check_vbat_work()
1966 di->vbat, di->old_vbat); in ab8500_charger_check_vbat_work()
1967 ab8500_charger_set_vbus_in_curr(di, in ab8500_charger_check_vbat_work()
1968 di->max_usb_in_curr.usb_type_max_ua); in ab8500_charger_check_vbat_work()
1969 power_supply_changed(di->usb_chg.psy); in ab8500_charger_check_vbat_work()
1972 di->old_vbat = di->vbat; in ab8500_charger_check_vbat_work()
1978 if (di->vbat < (VBAT_TRESH_IP_CUR_RED + 100000) && in ab8500_charger_check_vbat_work()
1979 (di->vbat > (VBAT_TRESH_IP_CUR_RED - 100000))) in ab8500_charger_check_vbat_work()
1982 queue_delayed_work(di->charger_wq, &di->check_vbat_work, t * HZ); in ab8500_charger_check_vbat_work()
1996 struct ab8500_charger *di = container_of(work, in ab8500_charger_check_hw_failure_work() local
2000 if (di->flags.mainextchnotok) { in ab8500_charger_check_hw_failure_work()
2001 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_check_hw_failure_work()
2004 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_check_hw_failure_work()
2008 di->flags.mainextchnotok = false; in ab8500_charger_check_hw_failure_work()
2009 ab8500_power_supply_changed(di, di->ac_chg.psy); in ab8500_charger_check_hw_failure_work()
2012 if (di->flags.vbus_ovv) { in ab8500_charger_check_hw_failure_work()
2013 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_check_hw_failure_work()
2017 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_check_hw_failure_work()
2021 di->flags.vbus_ovv = false; in ab8500_charger_check_hw_failure_work()
2022 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_check_hw_failure_work()
2026 if (di->flags.mainextchnotok || di->flags.vbus_ovv) { in ab8500_charger_check_hw_failure_work()
2027 queue_delayed_work(di->charger_wq, in ab8500_charger_check_hw_failure_work()
2028 &di->check_hw_failure_work, round_jiffies(HZ)); in ab8500_charger_check_hw_failure_work()
2050 struct ab8500_charger *di = container_of(work, in ab8500_charger_kick_watchdog_work() local
2053 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_kick_watchdog_work()
2056 dev_err(di->dev, "Failed to kick WD!\n"); in ab8500_charger_kick_watchdog_work()
2059 queue_delayed_work(di->charger_wq, in ab8500_charger_kick_watchdog_work()
2060 &di->kick_wd_work, round_jiffies(WD_KICK_INTERVAL)); in ab8500_charger_kick_watchdog_work()
2073 struct ab8500_charger *di = container_of(work, in ab8500_charger_ac_work() local
2081 ret = ab8500_charger_detect_chargers(di, false); in ab8500_charger_ac_work()
2086 di->ac.charger_connected = 1; in ab8500_charger_ac_work()
2087 di->ac_conn = true; in ab8500_charger_ac_work()
2089 di->ac.charger_connected = 0; in ab8500_charger_ac_work()
2092 ab8500_power_supply_changed(di, di->ac_chg.psy); in ab8500_charger_ac_work()
2093 sysfs_notify(&di->ac_chg.psy->dev.kobj, NULL, "present"); in ab8500_charger_ac_work()
2098 struct ab8500_charger *di = container_of(work, in ab8500_charger_usb_attached_work() local
2106 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_usb_attached_work()
2111 dev_err(di->dev, "ab8500 read failed %d\n", __LINE__); in ab8500_charger_usb_attached_work()
2120 ab8500_charger_usb_en(&di->usb_chg, 0, 0, 0); in ab8500_charger_usb_attached_work()
2122 mutex_lock(&di->charger_attached_mutex); in ab8500_charger_usb_attached_work()
2123 mutex_unlock(&di->charger_attached_mutex); in ab8500_charger_usb_attached_work()
2128 queue_delayed_work(di->charger_wq, in ab8500_charger_usb_attached_work()
2129 &di->usb_charger_attached_work, in ab8500_charger_usb_attached_work()
2136 struct ab8500_charger *di = container_of(work, in ab8500_charger_ac_attached_work() local
2145 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_ac_attached_work()
2150 dev_err(di->dev, "ab8500 read failed %d\n", __LINE__); in ab8500_charger_ac_attached_work()
2160 ab8500_charger_ac_en(&di->ac_chg, 0, 0, 0); in ab8500_charger_ac_attached_work()
2161 queue_work(di->charger_wq, &di->ac_work); in ab8500_charger_ac_attached_work()
2163 mutex_lock(&di->charger_attached_mutex); in ab8500_charger_ac_attached_work()
2164 mutex_unlock(&di->charger_attached_mutex); in ab8500_charger_ac_attached_work()
2169 queue_delayed_work(di->charger_wq, in ab8500_charger_ac_attached_work()
2170 &di->ac_charger_attached_work, in ab8500_charger_ac_attached_work()
2184 struct ab8500_charger *di = container_of(work, in ab8500_charger_detect_usb_type_work() local
2192 ret = ab8500_charger_detect_chargers(di, false); in ab8500_charger_detect_usb_type_work()
2197 dev_dbg(di->dev, "%s di->vbus_detected = false\n", __func__); in ab8500_charger_detect_usb_type_work()
2198 di->vbus_detected = false; in ab8500_charger_detect_usb_type_work()
2199 ab8500_charger_set_usb_connected(di, false); in ab8500_charger_detect_usb_type_work()
2200 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_detect_usb_type_work()
2202 dev_dbg(di->dev, "%s di->vbus_detected = true\n", __func__); in ab8500_charger_detect_usb_type_work()
2203 di->vbus_detected = true; in ab8500_charger_detect_usb_type_work()
2205 if (is_ab8500_1p1_or_earlier(di->parent)) { in ab8500_charger_detect_usb_type_work()
2206 ret = ab8500_charger_detect_usb_type(di); in ab8500_charger_detect_usb_type_work()
2208 ab8500_charger_set_usb_connected(di, true); in ab8500_charger_detect_usb_type_work()
2209 ab8500_power_supply_changed(di, in ab8500_charger_detect_usb_type_work()
2210 di->usb_chg.psy); in ab8500_charger_detect_usb_type_work()
2220 if (di->vbus_detected_start) { in ab8500_charger_detect_usb_type_work()
2221 di->vbus_detected_start = false; in ab8500_charger_detect_usb_type_work()
2222 ret = ab8500_charger_detect_usb_type(di); in ab8500_charger_detect_usb_type_work()
2224 ab8500_charger_set_usb_connected(di, in ab8500_charger_detect_usb_type_work()
2226 ab8500_power_supply_changed(di, in ab8500_charger_detect_usb_type_work()
2227 di->usb_chg.psy); in ab8500_charger_detect_usb_type_work()
2242 struct ab8500_charger *di = in ab8500_charger_usb_link_attach_work() local
2247 if (!di->usb.charger_online) { in ab8500_charger_usb_link_attach_work()
2248 ret = ab8500_charger_set_vbus_in_curr(di, in ab8500_charger_usb_link_attach_work()
2249 di->max_usb_in_curr.usb_type_max_ua); in ab8500_charger_usb_link_attach_work()
2254 ab8500_charger_set_usb_connected(di, true); in ab8500_charger_usb_link_attach_work()
2255 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_usb_link_attach_work()
2271 struct ab8500_charger *di = container_of(work, in ab8500_charger_usb_link_status_work() local
2279 detected_chargers = ab8500_charger_detect_chargers(di, false); in ab8500_charger_usb_link_status_work()
2289 if (is_ab8500(di->parent)) in ab8500_charger_usb_link_status_work()
2290 ret = abx500_get_register_interruptible(di->dev, AB8500_USB, in ab8500_charger_usb_link_status_work()
2293 ret = abx500_get_register_interruptible(di->dev, AB8500_USB, in ab8500_charger_usb_link_status_work()
2297 dev_dbg(di->dev, "UsbLineStatus register = 0x%02x\n", val); in ab8500_charger_usb_link_status_work()
2299 dev_dbg(di->dev, "Error reading USB link status\n"); in ab8500_charger_usb_link_status_work()
2301 if (is_ab8500(di->parent)) in ab8500_charger_usb_link_status_work()
2309 di->invalid_charger_detect_state == 0) { in ab8500_charger_usb_link_status_work()
2310 dev_dbg(di->dev, in ab8500_charger_usb_link_status_work()
2313 abx500_mask_and_set_register_interruptible(di->dev, in ab8500_charger_usb_link_status_work()
2317 abx500_mask_and_set_register_interruptible(di->dev, in ab8500_charger_usb_link_status_work()
2320 di->invalid_charger_detect_state = 1; in ab8500_charger_usb_link_status_work()
2325 if (di->invalid_charger_detect_state == 1) { in ab8500_charger_usb_link_status_work()
2326 dev_dbg(di->dev, in ab8500_charger_usb_link_status_work()
2329 abx500_mask_and_set_register_interruptible(di->dev, in ab8500_charger_usb_link_status_work()
2333 if (is_ab8500(di->parent)) in ab8500_charger_usb_link_status_work()
2334 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_usb_link_status_work()
2338 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_usb_link_status_work()
2342 dev_dbg(di->dev, "USB link status= 0x%02x\n", in ab8500_charger_usb_link_status_work()
2344 di->invalid_charger_detect_state = 2; in ab8500_charger_usb_link_status_work()
2347 di->invalid_charger_detect_state = 0; in ab8500_charger_usb_link_status_work()
2351 di->vbus_detected = false; in ab8500_charger_usb_link_status_work()
2352 ab8500_charger_set_usb_connected(di, false); in ab8500_charger_usb_link_status_work()
2353 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_usb_link_status_work()
2357 dev_dbg(di->dev,"%s di->vbus_detected = true\n",__func__); in ab8500_charger_usb_link_status_work()
2358 di->vbus_detected = true; in ab8500_charger_usb_link_status_work()
2359 ret = ab8500_charger_read_usb_type(di); in ab8500_charger_usb_link_status_work()
2363 ab8500_charger_set_usb_connected(di, false); in ab8500_charger_usb_link_status_work()
2364 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_usb_link_status_work()
2369 if (di->usb_device_is_unrecognised) { in ab8500_charger_usb_link_status_work()
2370 dev_dbg(di->dev, in ab8500_charger_usb_link_status_work()
2375 queue_delayed_work(di->charger_wq, in ab8500_charger_usb_link_status_work()
2376 &di->attach_work, in ab8500_charger_usb_link_status_work()
2378 } else if (di->is_aca_rid == 1) { in ab8500_charger_usb_link_status_work()
2380 di->is_aca_rid++; in ab8500_charger_usb_link_status_work()
2381 dev_dbg(di->dev, in ab8500_charger_usb_link_status_work()
2384 queue_delayed_work(di->charger_wq, in ab8500_charger_usb_link_status_work()
2385 &di->attach_work, in ab8500_charger_usb_link_status_work()
2388 queue_delayed_work(di->charger_wq, in ab8500_charger_usb_link_status_work()
2389 &di->attach_work, in ab8500_charger_usb_link_status_work()
2399 struct ab8500_charger *di = container_of(work, in ab8500_charger_usb_state_changed_work() local
2402 if (!di->vbus_detected) { in ab8500_charger_usb_state_changed_work()
2403 dev_dbg(di->dev, in ab8500_charger_usb_state_changed_work()
2409 spin_lock_irqsave(&di->usb_state.usb_lock, flags); in ab8500_charger_usb_state_changed_work()
2410 di->usb_state.state = di->usb_state.state_tmp; in ab8500_charger_usb_state_changed_work()
2411 di->usb_state.usb_current_ua = di->usb_state.usb_current_tmp_ua; in ab8500_charger_usb_state_changed_work()
2412 spin_unlock_irqrestore(&di->usb_state.usb_lock, flags); in ab8500_charger_usb_state_changed_work()
2414 dev_dbg(di->dev, "%s USB state: 0x%02x uA: %d\n", in ab8500_charger_usb_state_changed_work()
2415 __func__, di->usb_state.state, di->usb_state.usb_current_ua); in ab8500_charger_usb_state_changed_work()
2417 switch (di->usb_state.state) { in ab8500_charger_usb_state_changed_work()
2422 ab8500_charger_set_usb_connected(di, false); in ab8500_charger_usb_state_changed_work()
2423 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_usb_state_changed_work()
2438 if (!ab8500_charger_get_usb_cur(di)) { in ab8500_charger_usb_state_changed_work()
2440 ret = ab8500_charger_set_vbus_in_curr(di, in ab8500_charger_usb_state_changed_work()
2441 di->max_usb_in_curr.usb_type_max_ua); in ab8500_charger_usb_state_changed_work()
2445 ab8500_charger_set_usb_connected(di, true); in ab8500_charger_usb_state_changed_work()
2446 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_usb_state_changed_work()
2467 struct ab8500_charger *di = container_of(work, in ab8500_charger_check_usbchargernotok_work() local
2471 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_check_usbchargernotok_work()
2474 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_check_usbchargernotok_work()
2477 prev_status = di->flags.usbchargernotok; in ab8500_charger_check_usbchargernotok_work()
2480 di->flags.usbchargernotok = true; in ab8500_charger_check_usbchargernotok_work()
2482 queue_delayed_work(di->charger_wq, in ab8500_charger_check_usbchargernotok_work()
2483 &di->check_usbchgnotok_work, HZ); in ab8500_charger_check_usbchargernotok_work()
2485 di->flags.usbchargernotok = false; in ab8500_charger_check_usbchargernotok_work()
2486 di->flags.vbus_collapse = false; in ab8500_charger_check_usbchargernotok_work()
2489 if (prev_status != di->flags.usbchargernotok) in ab8500_charger_check_usbchargernotok_work()
2490 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_check_usbchargernotok_work()
2505 struct ab8500_charger *di = container_of(work, in ab8500_charger_check_main_thermal_prot_work() local
2509 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_check_main_thermal_prot_work()
2512 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_check_main_thermal_prot_work()
2516 di->flags.main_thermal_prot = true; in ab8500_charger_check_main_thermal_prot_work()
2518 di->flags.main_thermal_prot = false; in ab8500_charger_check_main_thermal_prot_work()
2520 ab8500_power_supply_changed(di, di->ac_chg.psy); in ab8500_charger_check_main_thermal_prot_work()
2535 struct ab8500_charger *di = container_of(work, in ab8500_charger_check_usb_thermal_prot_work() local
2539 ret = abx500_get_register_interruptible(di->dev, in ab8500_charger_check_usb_thermal_prot_work()
2542 dev_err(di->dev, "%s ab8500 read failed\n", __func__); in ab8500_charger_check_usb_thermal_prot_work()
2546 di->flags.usb_thermal_prot = true; in ab8500_charger_check_usb_thermal_prot_work()
2548 di->flags.usb_thermal_prot = false; in ab8500_charger_check_usb_thermal_prot_work()
2550 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_check_usb_thermal_prot_work()
2562 struct ab8500_charger *di = _di; in ab8500_charger_mainchunplugdet_handler() local
2564 dev_dbg(di->dev, "Main charger unplugged\n"); in ab8500_charger_mainchunplugdet_handler()
2565 queue_work(di->charger_wq, &di->ac_work); in ab8500_charger_mainchunplugdet_handler()
2567 cancel_delayed_work_sync(&di->ac_charger_attached_work); in ab8500_charger_mainchunplugdet_handler()
2568 mutex_lock(&di->charger_attached_mutex); in ab8500_charger_mainchunplugdet_handler()
2569 mutex_unlock(&di->charger_attached_mutex); in ab8500_charger_mainchunplugdet_handler()
2583 struct ab8500_charger *di = _di; in ab8500_charger_mainchplugdet_handler() local
2585 dev_dbg(di->dev, "Main charger plugged\n"); in ab8500_charger_mainchplugdet_handler()
2586 queue_work(di->charger_wq, &di->ac_work); in ab8500_charger_mainchplugdet_handler()
2588 mutex_lock(&di->charger_attached_mutex); in ab8500_charger_mainchplugdet_handler()
2589 mutex_unlock(&di->charger_attached_mutex); in ab8500_charger_mainchplugdet_handler()
2591 if (is_ab8500(di->parent)) in ab8500_charger_mainchplugdet_handler()
2592 queue_delayed_work(di->charger_wq, in ab8500_charger_mainchplugdet_handler()
2593 &di->ac_charger_attached_work, in ab8500_charger_mainchplugdet_handler()
2607 struct ab8500_charger *di = _di; in ab8500_charger_mainextchnotok_handler() local
2609 dev_dbg(di->dev, "Main charger not ok\n"); in ab8500_charger_mainextchnotok_handler()
2610 di->flags.mainextchnotok = true; in ab8500_charger_mainextchnotok_handler()
2611 ab8500_power_supply_changed(di, di->ac_chg.psy); in ab8500_charger_mainextchnotok_handler()
2614 queue_delayed_work(di->charger_wq, &di->check_hw_failure_work, 0); in ab8500_charger_mainextchnotok_handler()
2629 struct ab8500_charger *di = _di; in ab8500_charger_mainchthprotr_handler() local
2631 dev_dbg(di->dev, in ab8500_charger_mainchthprotr_handler()
2633 queue_work(di->charger_wq, &di->check_main_thermal_prot_work); in ab8500_charger_mainchthprotr_handler()
2648 struct ab8500_charger *di = _di; in ab8500_charger_mainchthprotf_handler() local
2650 dev_dbg(di->dev, in ab8500_charger_mainchthprotf_handler()
2652 queue_work(di->charger_wq, &di->check_main_thermal_prot_work); in ab8500_charger_mainchthprotf_handler()
2659 struct ab8500_charger *di = container_of(work, in ab8500_charger_vbus_drop_end_work() local
2664 di->flags.vbus_drop_end = false; in ab8500_charger_vbus_drop_end_work()
2667 abx500_set_register_interruptible(di->dev, in ab8500_charger_vbus_drop_end_work()
2670 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_vbus_drop_end_work()
2673 dev_err(di->dev, "%s read failed\n", __func__); in ab8500_charger_vbus_drop_end_work()
2680 if (di->max_usb_in_curr.calculated_max_ua != curr_ua) { in ab8500_charger_vbus_drop_end_work()
2682 di->max_usb_in_curr.calculated_max_ua = curr_ua; in ab8500_charger_vbus_drop_end_work()
2683 dev_dbg(di->dev, in ab8500_charger_vbus_drop_end_work()
2685 di->max_usb_in_curr.calculated_max_ua); in ab8500_charger_vbus_drop_end_work()
2691 di->max_usb_in_curr.set_max_ua = in ab8500_charger_vbus_drop_end_work()
2692 di->max_usb_in_curr.calculated_max_ua; in ab8500_charger_vbus_drop_end_work()
2693 dev_dbg(di->dev, in ab8500_charger_vbus_drop_end_work()
2695 di->max_usb_in_curr.set_max_ua); in ab8500_charger_vbus_drop_end_work()
2698 if (di->usb.charger_connected) in ab8500_charger_vbus_drop_end_work()
2699 ab8500_charger_set_vbus_in_curr(di, in ab8500_charger_vbus_drop_end_work()
2700 di->max_usb_in_curr.usb_type_max_ua); in ab8500_charger_vbus_drop_end_work()
2712 struct ab8500_charger *di = _di; in ab8500_charger_vbusdetf_handler() local
2714 di->vbus_detected = false; in ab8500_charger_vbusdetf_handler()
2715 dev_dbg(di->dev, "VBUS falling detected\n"); in ab8500_charger_vbusdetf_handler()
2716 queue_work(di->charger_wq, &di->detect_usb_type_work); in ab8500_charger_vbusdetf_handler()
2730 struct ab8500_charger *di = _di; in ab8500_charger_vbusdetr_handler() local
2732 di->vbus_detected = true; in ab8500_charger_vbusdetr_handler()
2733 dev_dbg(di->dev, "VBUS rising detected\n"); in ab8500_charger_vbusdetr_handler()
2735 queue_work(di->charger_wq, &di->detect_usb_type_work); in ab8500_charger_vbusdetr_handler()
2749 struct ab8500_charger *di = _di; in ab8500_charger_usblinkstatus_handler() local
2751 dev_dbg(di->dev, "USB link status changed\n"); in ab8500_charger_usblinkstatus_handler()
2753 queue_work(di->charger_wq, &di->usb_link_status_work); in ab8500_charger_usblinkstatus_handler()
2768 struct ab8500_charger *di = _di; in ab8500_charger_usbchthprotr_handler() local
2770 dev_dbg(di->dev, in ab8500_charger_usbchthprotr_handler()
2772 queue_work(di->charger_wq, &di->check_usb_thermal_prot_work); in ab8500_charger_usbchthprotr_handler()
2787 struct ab8500_charger *di = _di; in ab8500_charger_usbchthprotf_handler() local
2789 dev_dbg(di->dev, in ab8500_charger_usbchthprotf_handler()
2791 queue_work(di->charger_wq, &di->check_usb_thermal_prot_work); in ab8500_charger_usbchthprotf_handler()
2805 struct ab8500_charger *di = _di; in ab8500_charger_usbchargernotokr_handler() local
2807 dev_dbg(di->dev, "Not allowed USB charger detected\n"); in ab8500_charger_usbchargernotokr_handler()
2808 queue_delayed_work(di->charger_wq, &di->check_usbchgnotok_work, 0); in ab8500_charger_usbchargernotokr_handler()
2822 struct ab8500_charger *di = _di; in ab8500_charger_chwdexp_handler() local
2824 dev_dbg(di->dev, "Charger watchdog expired\n"); in ab8500_charger_chwdexp_handler()
2830 if (di->ac.charger_online) { in ab8500_charger_chwdexp_handler()
2831 di->ac.wd_expired = true; in ab8500_charger_chwdexp_handler()
2832 ab8500_power_supply_changed(di, di->ac_chg.psy); in ab8500_charger_chwdexp_handler()
2834 if (di->usb.charger_online) { in ab8500_charger_chwdexp_handler()
2835 di->usb.wd_expired = true; in ab8500_charger_chwdexp_handler()
2836 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_chwdexp_handler()
2851 struct ab8500_charger *di = _di; in ab8500_charger_vbuschdropend_handler() local
2853 dev_dbg(di->dev, "VBUS charger drop ended\n"); in ab8500_charger_vbuschdropend_handler()
2854 di->flags.vbus_drop_end = true; in ab8500_charger_vbuschdropend_handler()
2860 queue_delayed_work(di->charger_wq, &di->vbus_drop_end_work, in ab8500_charger_vbuschdropend_handler()
2875 struct ab8500_charger *di = _di; in ab8500_charger_vbusovv_handler() local
2877 dev_dbg(di->dev, "VBUS overvoltage detected\n"); in ab8500_charger_vbusovv_handler()
2878 di->flags.vbus_ovv = true; in ab8500_charger_vbusovv_handler()
2879 ab8500_power_supply_changed(di, di->usb_chg.psy); in ab8500_charger_vbusovv_handler()
2882 queue_delayed_work(di->charger_wq, &di->check_hw_failure_work, 0); in ab8500_charger_vbusovv_handler()
2905 struct ab8500_charger *di; in ab8500_charger_ac_get_property() local
2908 di = to_ab8500_charger_ac_device_info(psy_to_ux500_charger(psy)); in ab8500_charger_ac_get_property()
2912 if (di->flags.mainextchnotok) in ab8500_charger_ac_get_property()
2914 else if (di->ac.wd_expired || di->usb.wd_expired) in ab8500_charger_ac_get_property()
2916 else if (di->flags.main_thermal_prot) in ab8500_charger_ac_get_property()
2922 val->intval = di->ac.charger_online; in ab8500_charger_ac_get_property()
2925 val->intval = di->ac.charger_connected; in ab8500_charger_ac_get_property()
2928 ret = ab8500_charger_get_ac_voltage(di); in ab8500_charger_ac_get_property()
2930 di->ac.charger_voltage_uv = ret; in ab8500_charger_ac_get_property()
2932 val->intval = di->ac.charger_voltage_uv; in ab8500_charger_ac_get_property()
2939 di->ac.cv_active = ab8500_charger_ac_cv(di); in ab8500_charger_ac_get_property()
2940 val->intval = di->ac.cv_active; in ab8500_charger_ac_get_property()
2943 ret = ab8500_charger_get_ac_current(di); in ab8500_charger_ac_get_property()
2945 di->ac.charger_current_ua = ret; in ab8500_charger_ac_get_property()
2946 val->intval = di->ac.charger_current_ua; in ab8500_charger_ac_get_property()
2972 struct ab8500_charger *di; in ab8500_charger_usb_get_property() local
2975 di = to_ab8500_charger_usb_device_info(psy_to_ux500_charger(psy)); in ab8500_charger_usb_get_property()
2979 if (di->flags.usbchargernotok) in ab8500_charger_usb_get_property()
2981 else if (di->ac.wd_expired || di->usb.wd_expired) in ab8500_charger_usb_get_property()
2983 else if (di->flags.usb_thermal_prot) in ab8500_charger_usb_get_property()
2985 else if (di->flags.vbus_ovv) in ab8500_charger_usb_get_property()
2991 val->intval = di->usb.charger_online; in ab8500_charger_usb_get_property()
2994 val->intval = di->usb.charger_connected; in ab8500_charger_usb_get_property()
2997 ret = ab8500_charger_get_vbus_voltage(di); in ab8500_charger_usb_get_property()
2999 di->usb.charger_voltage_uv = ret; in ab8500_charger_usb_get_property()
3000 val->intval = di->usb.charger_voltage_uv; in ab8500_charger_usb_get_property()
3007 di->usb.cv_active = ab8500_charger_usb_cv(di); in ab8500_charger_usb_get_property()
3008 val->intval = di->usb.cv_active; in ab8500_charger_usb_get_property()
3011 ret = ab8500_charger_get_usb_current(di); in ab8500_charger_usb_get_property()
3013 di->usb.charger_current_ua = ret; in ab8500_charger_usb_get_property()
3014 val->intval = di->usb.charger_current_ua; in ab8500_charger_usb_get_property()
3021 if (di->flags.vbus_collapse) in ab8500_charger_usb_get_property()
3039 static int ab8500_charger_init_hw_registers(struct ab8500_charger *di) in ab8500_charger_init_hw_registers() argument
3044 if (!is_ab8500_1p1_or_earlier(di->parent)) { in ab8500_charger_init_hw_registers()
3045 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3049 dev_err(di->dev, in ab8500_charger_init_hw_registers()
3054 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3058 dev_err(di->dev, in ab8500_charger_init_hw_registers()
3064 if (is_ab8505_2p0(di->parent)) in ab8500_charger_init_hw_registers()
3065 ret = abx500_mask_and_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3074 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3079 dev_err(di->dev, in ab8500_charger_init_hw_registers()
3085 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3088 dev_err(di->dev, "failed to enable main WD in OTP\n"); in ab8500_charger_init_hw_registers()
3093 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3097 dev_err(di->dev, "failed to enable main watchdog\n"); in ab8500_charger_init_hw_registers()
3110 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3115 dev_err(di->dev, "failed to kick main watchdog\n"); in ab8500_charger_init_hw_registers()
3120 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3124 dev_err(di->dev, "failed to disable main watchdog\n"); in ab8500_charger_init_hw_registers()
3129 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_init_hw_registers()
3132 dev_err(di->dev, "failed to set charger watchdog timeout\n"); in ab8500_charger_init_hw_registers()
3136 ret = ab8500_charger_led_en(di, false); in ab8500_charger_init_hw_registers()
3138 dev_err(di->dev, "failed to disable LED\n"); in ab8500_charger_init_hw_registers()
3142 ret = abx500_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3145 (di->bm->bkup_bat_v & 0x3) | di->bm->bkup_bat_i); in ab8500_charger_init_hw_registers()
3147 dev_err(di->dev, "failed to setup backup battery charging\n"); in ab8500_charger_init_hw_registers()
3152 ret = abx500_mask_and_set_register_interruptible(di->dev, in ab8500_charger_init_hw_registers()
3156 dev_err(di->dev, "%s mask and set failed\n", __func__); in ab8500_charger_init_hw_registers()
3187 struct ab8500_charger *di = in ab8500_charger_usb_notifier_call() local
3198 dev_dbg(di->dev, "not a standard host, returning\n"); in ab8500_charger_usb_notifier_call()
3205 if ((di->usb_state.usb_current_ua == 2000) && (mA > 2)) in ab8500_charger_usb_notifier_call()
3216 dev_dbg(di->dev, "%s usb_state: 0x%02x mA: %d\n", in ab8500_charger_usb_notifier_call()
3219 spin_lock(&di->usb_state.usb_lock); in ab8500_charger_usb_notifier_call()
3220 di->usb_state.state_tmp = bm_usb_state; in ab8500_charger_usb_notifier_call()
3222 di->usb_state.usb_current_tmp_ua = mA * 1000; in ab8500_charger_usb_notifier_call()
3223 spin_unlock(&di->usb_state.usb_lock); in ab8500_charger_usb_notifier_call()
3229 queue_delayed_work(di->charger_wq, &di->usb_state_changed_work, HZ/2); in ab8500_charger_usb_notifier_call()
3237 struct ab8500_charger *di = dev_get_drvdata(dev); in ab8500_charger_resume() local
3248 if (di->ac_conn && is_ab8500_1p1_or_earlier(di->parent)) { in ab8500_charger_resume()
3249 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, in ab8500_charger_resume()
3252 dev_err(di->dev, "Failed to kick WD!\n"); in ab8500_charger_resume()
3255 queue_delayed_work(di->charger_wq, &di->kick_wd_work, in ab8500_charger_resume()
3260 if (di->flags.mainextchnotok || di->flags.vbus_ovv) { in ab8500_charger_resume()
3261 queue_delayed_work(di->charger_wq, in ab8500_charger_resume()
3262 &di->check_hw_failure_work, 0); in ab8500_charger_resume()
3265 if (di->flags.vbus_drop_end) in ab8500_charger_resume()
3266 queue_delayed_work(di->charger_wq, &di->vbus_drop_end_work, 0); in ab8500_charger_resume()
3273 struct ab8500_charger *di = dev_get_drvdata(dev); in ab8500_charger_suspend() local
3276 cancel_delayed_work(&di->check_hw_failure_work); in ab8500_charger_suspend()
3277 cancel_delayed_work(&di->vbus_drop_end_work); in ab8500_charger_suspend()
3279 flush_delayed_work(&di->attach_work); in ab8500_charger_suspend()
3280 flush_delayed_work(&di->usb_charger_attached_work); in ab8500_charger_suspend()
3281 flush_delayed_work(&di->ac_charger_attached_work); in ab8500_charger_suspend()
3282 flush_delayed_work(&di->check_usbchgnotok_work); in ab8500_charger_suspend()
3283 flush_delayed_work(&di->check_vbat_work); in ab8500_charger_suspend()
3284 flush_delayed_work(&di->kick_wd_work); in ab8500_charger_suspend()
3286 flush_work(&di->usb_link_status_work); in ab8500_charger_suspend()
3287 flush_work(&di->ac_work); in ab8500_charger_suspend()
3288 flush_work(&di->detect_usb_type_work); in ab8500_charger_suspend()
3290 if (atomic_read(&di->current_stepping_sessions)) in ab8500_charger_suspend()
3320 struct ab8500_charger *di = dev_get_drvdata(dev); in ab8500_charger_bind() local
3325 di->charger_wq = alloc_ordered_workqueue("ab8500_charger_wq", in ab8500_charger_bind()
3327 if (di->charger_wq == NULL) { in ab8500_charger_bind()
3332 ch_stat = ab8500_charger_detect_chargers(di, false); in ab8500_charger_bind()
3335 if (is_ab8500(di->parent)) in ab8500_charger_bind()
3336 queue_delayed_work(di->charger_wq, in ab8500_charger_bind()
3337 &di->ac_charger_attached_work, in ab8500_charger_bind()
3341 if (is_ab8500(di->parent)) in ab8500_charger_bind()
3342 queue_delayed_work(di->charger_wq, in ab8500_charger_bind()
3343 &di->usb_charger_attached_work, in ab8500_charger_bind()
3345 di->vbus_detected = true; in ab8500_charger_bind()
3346 di->vbus_detected_start = true; in ab8500_charger_bind()
3347 queue_work(di->charger_wq, in ab8500_charger_bind()
3348 &di->detect_usb_type_work); in ab8500_charger_bind()
3351 ret = component_bind_all(dev, di); in ab8500_charger_bind()
3354 destroy_workqueue(di->charger_wq); in ab8500_charger_bind()
3363 struct ab8500_charger *di = dev_get_drvdata(dev); in ab8500_charger_unbind() local
3367 ab8500_charger_ac_en(&di->ac_chg, false, 0, 0); in ab8500_charger_unbind()
3370 ab8500_charger_usb_en(&di->usb_chg, false, 0, 0); in ab8500_charger_unbind()
3373 ret = abx500_mask_and_set_register_interruptible(di->dev, in ab8500_charger_unbind()
3376 dev_err(di->dev, "%s mask and set failed\n", __func__); in ab8500_charger_unbind()
3379 destroy_workqueue(di->charger_wq); in ab8500_charger_unbind()
3382 component_unbind_all(dev, di); in ab8500_charger_unbind()
3402 struct ab8500_charger *di; in ab8500_charger_probe() local
3407 di = devm_kzalloc(dev, sizeof(*di), GFP_KERNEL); in ab8500_charger_probe()
3408 if (!di) in ab8500_charger_probe()
3411 di->bm = &ab8500_bm_data; in ab8500_charger_probe()
3413 di->autopower_cfg = of_property_read_bool(np, "autopower_cfg"); in ab8500_charger_probe()
3416 di->dev = dev; in ab8500_charger_probe()
3417 di->parent = dev_get_drvdata(pdev->dev.parent); in ab8500_charger_probe()
3420 if (!is_ab8505(di->parent)) { in ab8500_charger_probe()
3421 di->adc_main_charger_v = devm_iio_channel_get(dev, "main_charger_v"); in ab8500_charger_probe()
3422 if (IS_ERR(di->adc_main_charger_v)) { in ab8500_charger_probe()
3423 ret = dev_err_probe(dev, PTR_ERR(di->adc_main_charger_v), in ab8500_charger_probe()
3427 di->adc_main_charger_c = devm_iio_channel_get(dev, "main_charger_c"); in ab8500_charger_probe()
3428 if (IS_ERR(di->adc_main_charger_c)) { in ab8500_charger_probe()
3429 ret = dev_err_probe(dev, PTR_ERR(di->adc_main_charger_c), in ab8500_charger_probe()
3434 di->adc_vbus_v = devm_iio_channel_get(dev, "vbus_v"); in ab8500_charger_probe()
3435 if (IS_ERR(di->adc_vbus_v)) { in ab8500_charger_probe()
3436 ret = dev_err_probe(dev, PTR_ERR(di->adc_vbus_v), in ab8500_charger_probe()
3440 di->adc_usb_charger_c = devm_iio_channel_get(dev, "usb_charger_c"); in ab8500_charger_probe()
3441 if (IS_ERR(di->adc_usb_charger_c)) { in ab8500_charger_probe()
3442 ret = dev_err_probe(dev, PTR_ERR(di->adc_usb_charger_c), in ab8500_charger_probe()
3452 di->regu = devm_regulator_get(dev, "vddadc"); in ab8500_charger_probe()
3453 if (IS_ERR(di->regu)) { in ab8500_charger_probe()
3454 ret = PTR_ERR(di->regu); in ab8500_charger_probe()
3468 ab8500_charger_irq[i].name, di); in ab8500_charger_probe()
3480 spin_lock_init(&di->usb_state.usb_lock); in ab8500_charger_probe()
3481 mutex_init(&di->usb_ipt_crnt_lock); in ab8500_charger_probe()
3483 di->autopower = false; in ab8500_charger_probe()
3484 di->invalid_charger_detect_state = 0; in ab8500_charger_probe()
3490 ac_psy_cfg.drv_data = &di->ac_chg; in ab8500_charger_probe()
3494 usb_psy_cfg.drv_data = &di->usb_chg; in ab8500_charger_probe()
3498 di->ac_chg.ops.enable = &ab8500_charger_ac_en; in ab8500_charger_probe()
3499 di->ac_chg.ops.check_enable = &ab8500_charger_ac_check_enable; in ab8500_charger_probe()
3500 di->ac_chg.ops.kick_wd = &ab8500_charger_watchdog_kick; in ab8500_charger_probe()
3501 di->ac_chg.ops.update_curr = &ab8500_charger_update_charger_current; in ab8500_charger_probe()
3502 di->ac_chg.max_out_volt_uv = ab8500_charger_voltage_map[ in ab8500_charger_probe()
3504 di->ac_chg.max_out_curr_ua = in ab8500_charger_probe()
3506 di->ac_chg.wdt_refresh = CHG_WD_INTERVAL; in ab8500_charger_probe()
3513 if (!is_ab8505(di->parent)) in ab8500_charger_probe()
3514 di->ac_chg.enabled = true; in ab8500_charger_probe()
3518 di->usb_chg.ops.enable = &ab8500_charger_usb_en; in ab8500_charger_probe()
3519 di->usb_chg.ops.check_enable = &ab8500_charger_usb_check_enable; in ab8500_charger_probe()
3520 di->usb_chg.ops.kick_wd = &ab8500_charger_watchdog_kick; in ab8500_charger_probe()
3521 di->usb_chg.ops.update_curr = &ab8500_charger_update_charger_current; in ab8500_charger_probe()
3522 di->usb_chg.max_out_volt_uv = ab8500_charger_voltage_map[ in ab8500_charger_probe()
3524 di->usb_chg.max_out_curr_ua = in ab8500_charger_probe()
3526 di->usb_chg.wdt_refresh = CHG_WD_INTERVAL; in ab8500_charger_probe()
3527 di->usb_state.usb_current_ua = -1; in ab8500_charger_probe()
3529 mutex_init(&di->charger_attached_mutex); in ab8500_charger_probe()
3532 INIT_DEFERRABLE_WORK(&di->check_hw_failure_work, in ab8500_charger_probe()
3534 INIT_DEFERRABLE_WORK(&di->check_usbchgnotok_work, in ab8500_charger_probe()
3537 INIT_DELAYED_WORK(&di->ac_charger_attached_work, in ab8500_charger_probe()
3539 INIT_DELAYED_WORK(&di->usb_charger_attached_work, in ab8500_charger_probe()
3551 INIT_DEFERRABLE_WORK(&di->kick_wd_work, in ab8500_charger_probe()
3554 INIT_DEFERRABLE_WORK(&di->check_vbat_work, in ab8500_charger_probe()
3557 INIT_DELAYED_WORK(&di->attach_work, in ab8500_charger_probe()
3560 INIT_DELAYED_WORK(&di->usb_state_changed_work, in ab8500_charger_probe()
3563 INIT_DELAYED_WORK(&di->vbus_drop_end_work, in ab8500_charger_probe()
3567 INIT_WORK(&di->usb_link_status_work, in ab8500_charger_probe()
3569 INIT_WORK(&di->ac_work, ab8500_charger_ac_work); in ab8500_charger_probe()
3570 INIT_WORK(&di->detect_usb_type_work, in ab8500_charger_probe()
3574 INIT_WORK(&di->check_main_thermal_prot_work, in ab8500_charger_probe()
3576 INIT_WORK(&di->check_usb_thermal_prot_work, in ab8500_charger_probe()
3581 ret = ab8500_charger_init_hw_registers(di); in ab8500_charger_probe()
3588 if (di->ac_chg.enabled) { in ab8500_charger_probe()
3589 di->ac_chg.psy = devm_power_supply_register(dev, in ab8500_charger_probe()
3592 if (IS_ERR(di->ac_chg.psy)) { in ab8500_charger_probe()
3594 return PTR_ERR(di->ac_chg.psy); in ab8500_charger_probe()
3599 di->usb_chg.psy = devm_power_supply_register(dev, in ab8500_charger_probe()
3602 if (IS_ERR(di->usb_chg.psy)) { in ab8500_charger_probe()
3604 return PTR_ERR(di->usb_chg.psy); in ab8500_charger_probe()
3611 ret = ab8500_bm_of_probe(di->usb_chg.psy, di->bm); in ab8500_charger_probe()
3617 charger_status = ab8500_charger_detect_chargers(di, true); in ab8500_charger_probe()
3619 di->ac.charger_connected = 1; in ab8500_charger_probe()
3620 di->ac_conn = true; in ab8500_charger_probe()
3621 ab8500_power_supply_changed(di, di->ac_chg.psy); in ab8500_charger_probe()
3622 sysfs_notify(&di->ac_chg.psy->dev.kobj, NULL, "present"); in ab8500_charger_probe()
3625 platform_set_drvdata(pdev, di); 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()
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()
3674 usb_unregister_notifier(di->usb_phy, &di->nb); in ab8500_charger_probe()
3676 usb_put_phy(di->usb_phy); in ab8500_charger_probe()
3678 ab8500_bm_of_remove(di->usb_chg.psy, di->bm); in ab8500_charger_probe()
3684 struct ab8500_charger *di = platform_get_drvdata(pdev); in ab8500_charger_remove() local
3688 usb_unregister_notifier(di->usb_phy, &di->nb); in ab8500_charger_remove()
3689 ab8500_bm_of_remove(di->usb_chg.psy, di->bm); in ab8500_charger_remove()
3690 usb_put_phy(di->usb_phy); in ab8500_charger_remove()