static kal_uint32 charging_get_charger_type(void *data) { kal_uint32 status = STATUS_OK; #if defined(CONFIG_POWER_EXT) || defined(CONFIG_MTK_FPGA) *(CHARGER_TYPE*)(data) = STANDARD_HOST; #else #if defined(MTK_WIRELESS_CHARGER_SUPPORT) int wireless_state = 0; if(wireless_charger_gpio_number!=0) { wireless_state = mt_get_gpio_in(wireless_charger_gpio_number); if(wireless_state == WIRELESS_CHARGER_EXIST_STATE) { *(CHARGER_TYPE*)(data) = WIRELESS_CHARGER; battery_xlog_printk(BAT_LOG_CRTI, "WIRELESS_CHARGER!\n"); return status; } } else { battery_xlog_printk(BAT_LOG_CRTI, "wireless_charger_gpio_number=%d\n", wireless_charger_gpio_number); } if(g_charger_type!=CHARGER_UNKNOWN && g_charger_type!=WIRELESS_CHARGER) { *(CHARGER_TYPE*)(data) = g_charger_type; battery_xlog_printk(BAT_LOG_CRTI, "return %d!\n", g_charger_type); return status; } #endif if(is_chr_det()==0) { g_charger_type = CHARGER_UNKNOWN; *(CHARGER_TYPE*)(data) = CHARGER_UNKNOWN; battery_xlog_printk(BAT_LOG_CRTI, "[charging_get_charger_type] return CHARGER_UNKNOWN\n"); return status; } charging_type_det_done = KAL_FALSE; *(CHARGER_TYPE*)(data) = hw_charging_get_charger_type(); //*(CHARGER_TYPE*)(data) = STANDARD_HOST; //*(CHARGER_TYPE*)(data) = STANDARD_CHARGER; charging_type_det_done = KAL_TRUE; g_charger_type = *(CHARGER_TYPE*)(data); #endif return status; }
static kal_uint32 charging_get_charger_type(void *data) { if(mz_has_muic()) // 1: Has tsu6721; 0 : No tsu6721 { //use tsu6721 detect charer type kal_uint32 status = STATUS_OK; #if defined(CONFIG_POWER_EXT) *(CHARGER_TYPE*)(data) = STANDARD_HOST; #else msleep(200); tsu6721_charger_type(&g_charger_type); *(CHARGER_TYPE*)(data) = g_charger_type; printk("%s:*********charger_type %d,%d\n", __func__, g_charger_type, *(CHARGER_TYPE*)(data)); charging_type_det_done = KAL_TRUE; #endif return status; } else {//use mt6325 bc1.1 detect charer type kal_uint32 status = STATUS_OK; #if defined(CONFIG_POWER_EXT) || defined(CONFIG_MTK_FPGA) *(CHARGER_TYPE*)(data) = STANDARD_HOST; #else if(is_chr_det()==0) { g_charger_type = CHARGER_UNKNOWN; *(CHARGER_TYPE*)(data) = CHARGER_UNKNOWN; battery_xlog_printk(BAT_LOG_CRTI, "[charging_get_charger_type] return CHARGER_UNKNOWN\n"); return status; } charging_type_det_done = KAL_FALSE; *(CHARGER_TYPE*)(data) = hw_charging_get_charger_type(); //*(CHARGER_TYPE*)(data) = STANDARD_HOST; //*(CHARGER_TYPE*)(data) = STANDARD_CHARGER; charging_type_det_done = KAL_TRUE; g_charger_type = *(CHARGER_TYPE*)(data); battery_xlog_printk(BAT_LOG_CRTI, "[charging_get_charger_type] return g_charger_type =%d\n",g_charger_type); #endif return status; } }
int upmu_is_chr_det_hal(void) { if(is_chr_det() == 0) { return 0; } else { if( mt_usb_is_device() ) { battery_xlog_printk(BAT_LOG_CRTI, "[upmu_is_chr_det_hal] Charger exist and USB is not host\n"); return 1; } else { battery_xlog_printk(BAT_LOG_CRTI, "[upmu_is_chr_det_hal] Charger exist but USB is host\n"); return 0; } } }
void sw_plug_out_check(void) { // chr_plug_out_sw_detect #if 1 if(upmu_is_chr_det_hal()==1) //sync USB device/otg state { kal_uint32 cv_val = 0; kal_uint32 ich_low_val = 0; kal_uint32 is_charge_complete = 0; pmic_read_interface(0x805E, &cv_val, 0x1, 0); if(cv_val == 1) { battery_xlog_printk(BAT_LOG_FULL,"[chr_plug_out_sw_detect] in CV\n"); pmic_config_interface(0x8074, 0x1, 0x1, 9); pmic_config_interface(0x8166, 0x1, 0x1,12); pmic_config_interface(0x8D36, 0x3, 0x3,11); //[12:11]=0x3 } else { battery_xlog_printk(BAT_LOG_FULL,"[chr_plug_out_sw_detect] not in CV\n"); pmic_config_interface(0x8074, 0x0, 0x1, 9); pmic_config_interface(0x8166, 0x1, 0x1,12); pmic_config_interface(0x8D36, 0x0, 0x3,11); //[12:11]=0x0 } #if 1 battery_xlog_printk(BAT_LOG_FULL,"[chr_plug_out_sw_detect] Reg[0x%x]=0x%x\n", 0x8074, upmu_get_reg_value(0x8074) ); pmic_read_interface(0x8054, &ich_low_val, 0x1, 1); pmic_read_interface(0x805E, &is_charge_complete, 0x1, 10); battery_xlog_printk(BAT_LOG_CRTI,"[chr_plug_out_sw_detect] ich_low_val=%d, is_charge_complete=%d\n", ich_low_val, is_charge_complete); //if( (ich_low_val==1) || (is_charge_complete==1) ) if(is_chr_det()==1) // for evb { set_usb_dc_in_mode(0,0); set_usb_dc_in_mode(0,1); battery_xlog_printk(BAT_LOG_CRTI,"[chr_plug_out_sw_detect] Reg[0x%x]=0x%x\n", 0x816C, upmu_get_reg_value(0x816C) ); // msleep(10); if(is_chr_det()==1) { set_usb_dc_in_mode(0,0); } } else { set_usb_dc_in_mode(0,0); } #endif //debug swchr_dump_register(); mt_swchr_debug_msg(); battery_xlog_printk(BAT_LOG_FULL,"[chr_plug_out_sw_detect] Reg[0x%x]=0x%x, Reg[0x%x]=0x%x, Reg[0x%x]=0x%x\n", 0x8D1E, upmu_get_reg_value(0x8D1E), 0x8D2C, upmu_get_reg_value(0x8D2C), 0x816C, upmu_get_reg_value(0x816C) ); } else { battery_xlog_printk(BAT_LOG_FULL,"[chr_plug_out_sw_detect] no cable\n"); } #endif }
static kal_uint32 charging_get_charger_type(void *data) { kal_uint32 status = STATUS_OK; #if defined(CONFIG_POWER_EXT) *(CHARGER_TYPE*)(data) = STANDARD_HOST; #else kal_uint8 val=0; kal_uint8 dpdm_bit=1; kal_uint32 i =0; kal_uint32 i_timeout=10000000; #if defined(MTK_WIRELESS_CHARGER_SUPPORT) int wireless_state = 0; if(wireless_charger_gpio_number!=0) { wireless_state = mt_get_gpio_in(wireless_charger_gpio_number); if(wireless_state == WIRELESS_CHARGER_EXIST_STATE) { *(CHARGER_TYPE*)(data) = WIRELESS_CHARGER; battery_xlog_printk(BAT_LOG_CRTI, "WIRELESS_CHARGER!\n"); return status; } } else { battery_xlog_printk(BAT_LOG_CRTI, "wireless_charger_gpio_number=%d\n", wireless_charger_gpio_number); } if(g_charger_type!=CHARGER_UNKNOWN && g_charger_type!=WIRELESS_CHARGER) { *(CHARGER_TYPE*)(data) = g_charger_type; battery_xlog_printk(BAT_LOG_CRTI, "return %d!\n", g_charger_type); return status; } #endif if(is_chr_det()==0) { g_charger_type = CHARGER_UNKNOWN; *(CHARGER_TYPE*)(data) = CHARGER_UNKNOWN; battery_xlog_printk(BAT_LOG_CRTI, "[charging_get_charger_type] return CHARGER_UNKNOWN\n"); return status; } charging_type_det_done = KAL_FALSE; if(get_pmic_mt6332_cid()==PMIC6332_E1_CID_CODE) { msleep(300); Charger_Detect_Init(); //----------------------------------------------------- bq24160_config_interface(bq24160_CON3, 0x1, 0x1, 0); dpdm_bit=1; while(dpdm_bit!=0) { bq24160_read_interface(bq24160_CON3, &dpdm_bit, 0x1, 0); battery_xlog_printk(BAT_LOG_CRTI,"[charging_get_charger_type] bq24160_CON3[0]=%d\n", dpdm_bit); msleep(10); i++; if(i > i_timeout) break; } if(i > i_timeout) { *(CHARGER_TYPE*)(data) = STANDARD_HOST; battery_xlog_printk(BAT_LOG_CRTI,"[charging_get_charger_type] timeout(%d) : step=STANDARD_HOST\n", i); } else { bq24160_read_interface(bq24160_CON2, &val, 0x7, 4); if(val==0) { *(CHARGER_TYPE*)(data) = STANDARD_HOST; battery_xlog_printk(BAT_LOG_CRTI,"[charging_get_charger_type] E1 workaround (%d), step=STANDARD_HOST\n", val); } else { *(CHARGER_TYPE*)(data) = STANDARD_CHARGER; battery_xlog_printk(BAT_LOG_CRTI,"[charging_get_charger_type] E1 workaround (%d), step=STANDARD_CHARGER\n", val); } } //----------------------------------------------------- Charger_Detect_Release(); } else { *(CHARGER_TYPE*)(data) = hw_charging_get_charger_type(); } charging_type_det_done = KAL_TRUE; g_charger_type = *(CHARGER_TYPE*)(data); #endif return status; }