bool sec_bat_check_jig_status(void) { #if defined(CONFIG_SM5502_MUIC) return check_sm5502_jig_state(); #elif defined(CONFIG_SM5504_MUIC) return check_sm5504_jig_state(); #else return false; #endif }
bool sec_bat_check_jig_status(void) { #if defined(CONFIG_SM5502_MUIC) return check_sm5502_jig_state(); #elif defined(CONFIG_SM5504_MUIC) return check_sm5504_jig_state(); #elif defined(CONFIG_SM5703_MUIC) return check_sm5703_muic_jig_state(); #elif defined(CONFIG_EXTCON_MAX77849) return get_jig_state(); #else return false; #endif }
void sm5504_callback(enum cable_type_t cable_type, int attached) { union power_supply_propval value; struct power_supply *psy = power_supply_get_by_name("battery"); struct power_supply *psy_ps = power_supply_get_by_name("ps"); static enum cable_type_t previous_cable_type = CABLE_TYPE_NONE; #if defined(CONFIG_USB_NOTIFY_LAYER) struct otg_notify *n = get_otg_notify(); #endif pr_info("%s, called : cable_type :%d \n",__func__, cable_type); set_cable_status = attached ? cable_type : CABLE_TYPE_NONE; switch (cable_type) { case CABLE_TYPE_USB: #if defined(USE_TSP_TA_CALLBACKS) if (charger_callbacks && charger_callbacks->inform_charger) charger_callbacks->inform_charger(charger_callbacks, attached); #endif #if defined(DEBUG_STATUS) if (attached) { status_count = status_count+1; pr_err("%s USB Cable status attached (%d) \n",__func__, status_count); } else { status_count = status_count-1; pr_err("%s USB Cable Status detached (%d) \n", __func__,status_count); } #endif #if defined(CONFIG_USB_NOTIFY_LAYER) send_otg_notify(n, NOTIFY_EVENT_VBUS, attached); #else sec_otg_set_vbus_state(attached); #endif break; case CABLE_TYPE_AC: #if defined(USE_TSP_TA_CALLBACKS) if (charger_callbacks && charger_callbacks->inform_charger) charger_callbacks->inform_charger(charger_callbacks, attached); #endif #if defined(DEBUG_STATUS) if (attached) { status_count = status_count+1; pr_err("%s Charger status attached (%d) \n",__func__, status_count); } else { status_count = status_count-1; pr_err("%s charger status detached (%d) \n", __func__,status_count); } #endif break; case CABLE_TYPE_UARTOFF: #if defined(DEBUG_STATUS) if (attached) { status_count = status_count+1; pr_err("%s UART Status attached (%d) \n",__func__, status_count); } else { status_count = status_count-1; pr_err("%s UART status detached (%d) \n", __func__,status_count); } #endif switch_set_state(&switch_uart3, attached); break; case CABLE_TYPE_JIG_UART_OFF_VB: #if defined(DEBUG_STATUS) if (attached) { status_count = status_count+1; pr_err("%s UART OFF VBUS Status attached (%d) \n",__func__, status_count); } else { status_count = status_count-1; pr_err("%s UART OFF VBUS status detached (%d) \n", __func__,status_count); } #endif switch_set_state(&switch_uart3, attached); break; case CABLE_TYPE_JIG: #if defined(DEBUG_STATUS) if (attached) { status_count = status_count+1; pr_err("%s JIG cable status attached (%d) \n",__func__, status_count); } else { status_count = status_count-1; pr_err("%s JIG cable status detached (%d) \n", __func__,status_count); } #endif return; case CABLE_TYPE_CDP: #if defined(USE_TSP_TA_CALLBACKS) if (charger_callbacks && charger_callbacks->inform_charger) charger_callbacks->inform_charger(charger_callbacks, attached); #endif #if defined(DEBUG_STATUS) if (attached) { status_count = status_count+1; pr_err("%s CDP status attached (%d) \n",__func__, status_count); } else { status_count = status_count-1; pr_err("%s CDP Status detached (%d) \n", __func__,status_count); } #endif #if defined(CONFIG_USB_NOTIFY_LAYER) send_otg_notify(n, NOTIFY_EVENT_VBUS, attached); #else sec_otg_set_vbus_state(attached); #endif break; case CABLE_TYPE_OTG: #if defined(DEBUG_STATUS) if (attached) { status_count = status_count+1; pr_err("%s OTG status attached (%d) \n",__func__, status_count); } else { status_count = status_count-1; pr_err("%s OTG status detached (%d) \n", __func__,status_count); } #endif #if defined(CONFIG_USB_HOST_NOTIFY) if (attached) { send_otg_notify(n, NOTIFY_EVENT_DRIVE_VBUS, 1); send_otg_notify(n, NOTIFY_EVENT_HOST, 1); } else { send_otg_notify(n, NOTIFY_EVENT_HOST, 0); send_otg_notify(n, NOTIFY_EVENT_DRIVE_VBUS, 0); } #endif return; case CABLE_TYPE_AUDIO_DOCK: #if defined(DEBUG_STATUS) if (attached) { status_count = status_count+1; pr_err("%s Audiodock status attached (%d) \n",__func__, status_count); } else { status_count = status_count-1; pr_err("%s Audiodock status detached (%d) \n", __func__,status_count); } #endif #if defined(CONFIG_USB_HOST_NOTIFY) if (attached) { send_otg_notify(n, NOTIFY_EVENT_AUDIODOCK, 1); } else { send_otg_notify(n, NOTIFY_EVENT_AUDIODOCK, 0); } #endif switch_set_state(&switch_dock, attached); break; case CABLE_TYPE_CARDOCK: #if defined(DEBUG_STATUS) if (attached) { status_count = status_count+1; pr_err("%s Cardock status attached (%d) \n",__func__, status_count); } else { status_count = status_count-1; pr_err("%s Cardock status detached (%d) \n", __func__,status_count); } #endif switch_set_state(&switch_dock, attached ? 2 : 0); switch_set_state(&switch_uart3, attached); break; case CABLE_TYPE_UARTON: #if defined(DEBUG_STATUS) if (attached) { status_count = status_count+1; pr_err("%s Uart On status attached (%d)\n", __func__, status_count); } else { status_count = status_count-1; pr_err("%s Uart On status detached (%d)\n", __func__, status_count); } #endif switch_set_state(&switch_uart3, attached); break; case CABLE_TYPE_DESK_DOCK: case CABLE_TYPE_DESK_DOCK_NO_VB: #if defined(DEBUG_STATUS) if (attached) { status_count = status_count+1; pr_err("%s Deskdock %s status attached (%d) \n",__func__, ((cable_type == CABLE_TYPE_DESK_DOCK)? "VBUS" : "NOVBUS"),status_count); } else { status_count = status_count-1; pr_err("%s Deskdock %s status detached (%d) \n", __func__, ((cable_type == CABLE_TYPE_DESK_DOCK)? "VBUS" : "NOVBUS"),status_count); } #endif switch_set_state(&switch_dock, attached); break; case CABLE_TYPE_SMART_DOCK: case CABLE_TYPE_SMART_DOCK_NO_VB: #if defined(DEBUG_STATUS) if (attached) { status_count = status_count+1; pr_err("%s Smartdock %s status attached (%d)\n", __func__, ((cable_type == CABLE_TYPE_SMART_DOCK) ? "VBUS" : "NOVBUS"), status_count); } else { status_count = status_count-1; pr_err("%s Smartdock %s status detached (%d)\n", __func__, ((cable_type == CABLE_TYPE_SMART_DOCK) ? "VBUS" : "NOVBUS"), status_count); } #endif switch_set_state(&switch_dock, attached ? 5 : 0); break; case CABLE_TYPE_219KUSB: #if defined(DEBUG_STATUS) if (attached) { status_count = status_count+1; pr_err("%s 219K USB status attached (%d) \n",__func__, status_count); } else { status_count = status_count-1; pr_err("%s 219K USB status detached (%d) \n", __func__,status_count); } #endif #if defined(CONFIG_USB_NOTIFY_LAYER) send_otg_notify(n, NOTIFY_EVENT_VBUS, attached); #else sec_otg_set_vbus_state(attached); #endif break; case CABLE_TYPE_INCOMPATIBLE: #if defined(DEBUG_STATUS) if (attached) { status_count = status_count+1; pr_err("%s Incompatible Charger status attached (%d) \n",__func__, status_count); } else { status_count = status_count-1; pr_err("%s Incomabtible Charger status detached (%d) \n", __func__,status_count); } #endif break; #if defined(CONFIG_MUIC_SUPPORT_CHARGING_CABLE) case CABLE_TYPE_CHARGING_CABLE: if (attached) value.intval = POWER_SUPPLY_TYPE_POWER_SHARING; else value.intval = POWER_SUPPLY_TYPE_BATTERY; #if defined(DEBUG_STATUS) if (attached) { status_count = status_count+1; pr_err("%s Charging Cable status attached (%d) \n",__func__, status_count); } else { status_count = status_count-1; pr_err("%s Charging Cable status detached (%d) \n", __func__,status_count); } #endif break; #endif default: break; } if (previous_cable_type == set_cable_status) { pr_info("%s: SKIP cable setting\n", __func__); return; } #if defined(CONFIG_FUELGAUGE_MAX17050) if(check_sm5504_jig_state()) { struct power_supply *fuel_psy = power_supply_get_by_name("sec-fuelgauge"); if (!fuel_psy || !fuel_psy->set_property) pr_err("%s: fail to get sec-fuelgauge psy\n", __func__); else { fuel_psy->set_property(fuel_psy, POWER_SUPPLY_PROP_CHARGE_TYPE, &value); } } #endif #if defined(CONFIG_QPNP_BMS) if(check_sm5504_jig_state()) { struct power_supply *fuel_psy = power_supply_get_by_name("bms"); if (!fuel_psy || !fuel_psy->set_property) pr_err("%s: fail to get BMS psy\n", __func__); else { fuel_psy->set_property(fuel_psy, POWER_SUPPLY_PROP_CHARGE_TYPE, &value); } } #endif #if defined(CONFIG_FUELGAUGE_RT5033) if (check_sm5504_jig_state()) { struct power_supply *fuel_psy = power_supply_get_by_name("rt5033-fuelgauge"); if (!fuel_psy || !fuel_psy->set_property) pr_err("%s: fail to get rt5033-fuelgauge psy\n", __func__); else fuel_psy->set_property(fuel_psy, POWER_SUPPLY_PROP_CHARGE_TYPE, &value); } #endif switch (set_cable_status) { case CABLE_TYPE_MISC: value.intval = POWER_SUPPLY_TYPE_MISC; break; case CABLE_TYPE_USB: value.intval = POWER_SUPPLY_TYPE_USB; break; case CABLE_TYPE_219KUSB: case CABLE_TYPE_AC: case CABLE_TYPE_AUDIO_DOCK: case CABLE_TYPE_UNDEFINED: value.intval = POWER_SUPPLY_TYPE_MAINS; break; case CABLE_TYPE_CARDOCK: value.intval = POWER_SUPPLY_TYPE_CARDOCK; break; case CABLE_TYPE_CDP: value.intval = POWER_SUPPLY_TYPE_USB_CDP; break; case CABLE_TYPE_INCOMPATIBLE: value.intval = POWER_SUPPLY_TYPE_UNKNOWN; break; case CABLE_TYPE_DESK_DOCK: case CABLE_TYPE_SMART_DOCK: value.intval = POWER_SUPPLY_TYPE_MAINS; break; case CABLE_TYPE_JIG_UART_OFF_VB: value.intval = POWER_SUPPLY_TYPE_UARTOFF; break; case CABLE_TYPE_DESK_DOCK_NO_VB: case CABLE_TYPE_SMART_DOCK_NO_VB: case CABLE_TYPE_UARTOFF: case CABLE_TYPE_UARTON: case CABLE_TYPE_NONE: value.intval = POWER_SUPPLY_TYPE_BATTERY; break; case CABLE_TYPE_CHARGING_CABLE: value.intval = POWER_SUPPLY_TYPE_POWER_SHARING; break; default: pr_err("%s: invalid cable :%d\n", __func__, set_cable_status); return; } current_cable_type = value.intval; pr_info("%s:MUIC setting the cable type as (%d)\n",__func__,value.intval); if (!psy || !psy->set_property || !psy_ps->set_property) pr_err("%s: fail to get battery ps/psy\n", __func__); else { if (current_cable_type == POWER_SUPPLY_TYPE_POWER_SHARING) { value.intval = current_cable_type; psy_ps->set_property(psy_ps, POWER_SUPPLY_PROP_ONLINE, &value); } else { if (previous_cable_type == CABLE_TYPE_CHARGING_CABLE) { value.intval = current_cable_type; psy_ps->set_property(psy_ps, POWER_SUPPLY_PROP_ONLINE, &value); } else { value.intval = current_cable_type; psy->set_property(psy, POWER_SUPPLY_PROP_ONLINE, &value); } } } previous_cable_type = set_cable_status; }