static enum dwc_otg_state do_charger_detection(struct dwc_otg2 *otg) { enum dwc_otg_state state = DWC_STATE_INVALID; enum power_supply_charger_cable_type charger = POWER_SUPPLY_CHARGER_TYPE_NONE; unsigned long flags, ma = 0; charger = get_charger_type(otg); switch (charger) { case POWER_SUPPLY_CHARGER_TYPE_ACA_A: case POWER_SUPPLY_CHARGER_TYPE_ACA_B: case POWER_SUPPLY_CHARGER_TYPE_ACA_C: otg_err(otg, "Ignore micro ACA charger.\n"); charger = POWER_SUPPLY_CHARGER_TYPE_NONE; break; case POWER_SUPPLY_CHARGER_TYPE_USB_SDP: case POWER_SUPPLY_CHARGER_TYPE_USB_CDP: state = DWC_STATE_B_PERIPHERAL; break; case POWER_SUPPLY_CHARGER_TYPE_ACA_DOCK: state = DWC_STATE_A_HOST; break; case POWER_SUPPLY_CHARGER_TYPE_USB_DCP: case POWER_SUPPLY_CHARGER_TYPE_SE1: state = DWC_STATE_CHARGING; break; case POWER_SUPPLY_CHARGER_TYPE_NONE: default: if (is_self_powered_b_device(otg)) { state = DWC_STATE_A_HOST; charger = POWER_SUPPLY_CHARGER_TYPE_B_DEVICE; break; } }; switch (charger) { case POWER_SUPPLY_CHARGER_TYPE_ACA_DOCK: case POWER_SUPPLY_CHARGER_TYPE_ACA_A: case POWER_SUPPLY_CHARGER_TYPE_ACA_B: case POWER_SUPPLY_CHARGER_TYPE_ACA_C: case POWER_SUPPLY_CHARGER_TYPE_USB_DCP: case POWER_SUPPLY_CHARGER_TYPE_USB_CDP: case POWER_SUPPLY_CHARGER_TYPE_SE1: ma = 1500; break; case POWER_SUPPLY_CHARGER_TYPE_USB_SDP: break; default: otg_err(otg, "Charger type is not valid to notify battery\n"); return -EINVAL; } spin_lock_irqsave(&otg->lock, flags); otg->charging_cap.chrg_type = charger; otg->charging_cap.ma = ma; spin_unlock_irqrestore(&otg->lock, flags); switch (charger) { case POWER_SUPPLY_CHARGER_TYPE_ACA_DOCK: case POWER_SUPPLY_CHARGER_TYPE_USB_DCP: case POWER_SUPPLY_CHARGER_TYPE_USB_CDP: case POWER_SUPPLY_CHARGER_TYPE_SE1: if (dwc_otg_notify_charger_type(otg, POWER_SUPPLY_CHARGER_EVENT_CONNECT) < 0) otg_err(otg, "Notify battery type failed!\n"); break; case POWER_SUPPLY_CHARGER_TYPE_USB_SDP: /* SDP is complicate, it will be handle in set_power */ default: break; } return state; }
static ssize_t msm_batt_chgr_status_show(struct device* dev, struct device_attribute* attr, char* buf) { int chg_type; chg_type = get_charger_type(); return sprintf(buf,"%d\n", (chg_type == USB_CHG_TYPE__WALLCHARGER) ? 1 : (chg_type == USB_CHG_TYPE__SDP) ? 1 : 0); }