Ejemplo n.º 1
0
static int get_bat_sense_volt(int times)
{
	if(g_bat_init_flag != 0)
	{
	    return battery_meter_get_battery_voltage();
	}

	return 0;
}
Ejemplo n.º 2
0
static void charging_current_calibration(void)
{
	kal_int32 bat_isense_offset;
#if 0	
	kal_int32 bat_vol = battery_meter_get_battery_voltage();
	kal_int32 Vsense = battery_meter_get_VSense();

	bat_isense_offset = bat_vol - Vsense;

	battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] bat_vol=%d, Vsense=%d, offset=%d \r\n",bat_vol,Vsense,bat_isense_offset);
#else
	bat_isense_offset = 0;
#endif

	battery_meter_sync(bat_isense_offset);
}
static void mtk_ta_BJT_check(void)
{
	int curr_vbat = 0;
	int curr_current = 0;
	int vchr = 0;
	int watt = 0;
	int i=0,cnt=0;

	for(i=0;i<3;i++)
	{
		vchr = battery_meter_get_charger_voltage();
		curr_vbat = battery_meter_get_battery_voltage(KAL_TRUE);
		curr_current = battery_meter_get_charging_current_imm();
		
		watt = ((vchr - curr_vbat)*curr_current);

		battery_log(BAT_LOG_CRTI, "mtk_ta_BJT_check() vchr=%d, vbat=%d, current=%d, Watt=%d, ta_current_level=%d\n",
			vchr,curr_vbat,curr_current,watt, ta_current_level);
	
		if(watt > BJT_LIMIT)//1.2W
		{
			cnt++;
		}
		else
		{
			break;
		}
		msleep(200);
		
	}

	if(cnt>=3)
	{
		is_ta_connect = KAL_FALSE;
	}

	battery_log(BAT_LOG_CRTI, "mtk_ta_BJT_check() vchr=%d, vbat=%d, current=%d, Watt=%d, ta_current_level=%d cnt=%d\n",
		vchr,curr_vbat,curr_current,watt, ta_current_level,cnt);
}				
Ejemplo n.º 4
0
void select_charging_curret(void)
{
#ifdef MEIZU_M71
	kal_uint32 charger_voltage = 0, sum_voltage = 0;
	int i;
#endif
    if (g_ftm_battery_flag)
    {
        battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] FTM charging : %d\r\n", charging_level_data[0]);
        g_temp_CC_value = charging_level_data[0];

        if(g_temp_CC_value == CHARGE_CURRENT_450_00_MA)
        {
			g_temp_input_CC_value = CHARGE_CURRENT_500_00_MA;
        }
        else
        {
			g_temp_input_CC_value = CHARGE_CURRENT_MAX;
		#ifdef MEIZU_M71
			g_temp_CC_value = STANDARD_CHARGER_CURRENT;
		#else
			g_temp_CC_value = AC_CHARGER_CURRENT;
		#endif
            battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] set_ac_current \r\n");
        }
    }
    else
    {
        if ( BMT_status.charger_type == STANDARD_HOST )
        {
           #ifdef CONFIG_USB_IF
            {
            	g_temp_input_CC_value = CHARGE_CURRENT_MAX;
                if (g_usb_state == USB_SUSPEND)
                {
                    g_temp_CC_value = USB_CHARGER_CURRENT_SUSPEND;
                }
                else if (g_usb_state == USB_UNCONFIGURED)
                {
                    g_temp_CC_value = USB_CHARGER_CURRENT_UNCONFIGURED;
                }
                else if (g_usb_state == USB_CONFIGURED)
                {
                    g_temp_CC_value = USB_CHARGER_CURRENT_CONFIGURED;
                }
                else
                {
                    g_temp_CC_value = USB_CHARGER_CURRENT_UNCONFIGURED;
                }

                 battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] STANDARD_HOST CC mode charging : %d on %d state\r\n", g_temp_CC_value, g_usb_state);
            }
	#else
            {
                g_temp_input_CC_value = USB_CHARGER_CURRENT;
                g_temp_CC_value = USB_CHARGER_CURRENT;
            }
	#endif
        }
        else if (BMT_status.charger_type == NONSTANDARD_CHARGER)
        {
			g_temp_input_CC_value = NON_STD_AC_CHARGER_CURRENT;
			g_temp_CC_value = NON_STD_AC_CHARGER_CURRENT;

        }
#ifdef MEIZU_M71
#ifdef MEIZU_M79
        else if (BMT_status.charger_type == MEIZU_2_0A_CHARGER)
        {
			g_temp_input_CC_value = MEIZU_2_0A_CHARGER_CURRENT;
			g_temp_CC_value = MEIZU_2_0A_CHARGER_CURRENT;
        }
        else if (BMT_status.charger_type == STANDARD_CHARGER)
        {
			g_temp_input_CC_value = MEIZU_1_5A_CHARGER_CURRENT;
			g_temp_CC_value = MEIZU_1_5A_CHARGER_CURRENT;	
			battery_charging_control(CHARGING_CMD_SET_CURRENT,&g_temp_CC_value);
			msleep(100);
			for (i=0; i<5; i++) {
				battery_meter_get_battery_voltage(TRUE);
				charger_voltage = battery_meter_get_charger_voltage();
				sum_voltage += charger_voltage;
				msleep(10);
			}
			charger_voltage = sum_voltage / 5;

			if (charger_voltage <= CHARGER_CURRENT_1_2A_THRESHOLD) {
				g_temp_CC_value = STANDARD_CHARGER_CURRENT;
			} else {
				g_temp_CC_value = MEIZU_1_5A_CHARGER_CURRENT;
				g_temp_input_CC_value = MEIZU_1_5A_CHARGER_CURRENT ;
			}
        }
        else if (BMT_status.charger_type == CHARGING_HOST)
        {
	    	g_temp_input_CC_value = CHARGING_HOST_CHARGER_CURRENT;
            g_temp_CC_value = CHARGING_HOST_CHARGER_CURRENT;
        }
		else if (BMT_status.charger_type == APPLE_CHARGER)
        {
            g_temp_input_CC_value = APPLE_2_1A_CHARGER_CURRENT;
            g_temp_CC_value = APPLE_2_1A_CHARGER_CURRENT;
	    	battery_charging_control(CHARGING_CMD_SET_CURRENT,&g_temp_CC_value);
	    	msleep(100);
		    for (i=0; i<5; i++) {
			    charger_voltage = battery_meter_get_charger_voltage();
			    sum_voltage += charger_voltage;
			    msleep(10);
		    }
		    charger_voltage = sum_voltage / 5;

		    if (charger_voltage < CHARGER_CURRENT_1_2A_THRESHOLD) {
			    g_temp_CC_value = APPLE_1_0A_CHARGER_CURRENT;
		    } else {
			    g_temp_CC_value = APPLE_2_1A_CHARGER_CURRENT;
				g_temp_input_CC_value = APPLE_2_1A_CHARGER_CURRENT ;
		    }
        }
		else if (BMT_status.charger_type == U200_CHARGER)
        {
            g_temp_input_CC_value = U200_1A_CHARGER_CURRENT;
            g_temp_CC_value = U200_1A_CHARGER_CURRENT;
		}
        else
        {
	    g_temp_input_CC_value = USB_CHARGER_CURRENT;
            g_temp_CC_value = USB_CHARGER_CURRENT;
        }

#else
	else if (BMT_status.charger_type == MEIZU_2_0A_CHARGER)
	{
		g_temp_input_CC_value = MEIZU_2_0A_CHARGER_CURRENT;
		g_temp_CC_value = MEIZU_2_0A_CHARGER_CURRENT;
	}
	else if (BMT_status.charger_type == STANDARD_CHARGER)
	{
		g_temp_input_CC_value = MEIZU_2_0A_CHARGER_CURRENT;
		g_temp_CC_value = MEIZU_2_0A_CHARGER_CURRENT;
		battery_charging_control(CHARGING_CMD_SET_CURRENT,&g_temp_CC_value);
		msleep(100);
		for (i=0; i<5; i++) {
			battery_meter_get_battery_voltage(TRUE);
			charger_voltage = battery_meter_get_charger_voltage();
			sum_voltage += charger_voltage;
			msleep(10);
		}
		charger_voltage = sum_voltage / 5;
		if(mz_get_hw_version() >= 20)
			charger_voltage -= 15 ;
		if(mz_get_operator_type() == 1)
			charger_voltage += 30 ; 	//for china mobile
		if (charger_voltage <= CHARGER_CURRENT_1A_THRESHOLD) {
			g_temp_CC_value = STANDARD_CHARGER_CURRENT;
		} else if (charger_voltage <= CHARGER_CURRENT_1_2A_THRESHOLD){
			g_temp_CC_value = MEIZU_1_5A_CHARGER_CURRENT;
		} else {
			g_temp_CC_value = MEIZU_2_0A_CHARGER_CURRENT;
			g_temp_input_CC_value = CHARGE_CURRENT_2000_00_MA ;
		}
	}
	else if (BMT_status.charger_type == CHARGING_HOST)
	{
		g_temp_input_CC_value = CHARGING_HOST_CHARGER_CURRENT;
		g_temp_CC_value = CHARGING_HOST_CHARGER_CURRENT;
	}
	else if (BMT_status.charger_type == APPLE_CHARGER)
	{
		g_temp_input_CC_value = APPLE_2_1A_CHARGER_CURRENT;
		g_temp_CC_value = APPLE_2_1A_CHARGER_CURRENT;
		battery_charging_control(CHARGING_CMD_SET_CURRENT,&g_temp_CC_value);
		msleep(100);
		for (i=0; i<5; i++) {
			charger_voltage = battery_meter_get_charger_voltage();
			sum_voltage += charger_voltage;
			msleep(10);
		}
		charger_voltage = sum_voltage / 5;
		if(mz_get_hw_version() >= 20)
			charger_voltage -= 15 ;
		if(mz_get_operator_type() == 1)
			charger_voltage += 30 ; 	//for china mobile
		charger_voltage += 5 ;
		if (charger_voltage < CHARGER_CURRENT_1A_THRESHOLD) {
			g_temp_CC_value = APPLE_1_0A_CHARGER_CURRENT;
		} else {
			g_temp_CC_value = APPLE_2_1A_CHARGER_CURRENT;
			g_temp_input_CC_value = CHARGE_CURRENT_2000_00_MA ;
		}
	}
	else if (BMT_status.charger_type == U200_CHARGER)
	{
		g_temp_input_CC_value = U200_1A_CHARGER_CURRENT;
		g_temp_CC_value = U200_1A_CHARGER_CURRENT;
	}
	else
	{
		g_temp_input_CC_value = USB_CHARGER_CURRENT;
		g_temp_CC_value = USB_CHARGER_CURRENT;
	}     

#endif
#else
        else if (BMT_status.charger_type == STANDARD_CHARGER)
static void battery_pump_express_algorithm_start(void)
{
	int ta_v_chr_candidate[4]={0,0,0,0};
	int ta_charging_current_candidate[4]={0,0,0,0};
	int max_charging_current = 0;
	int max_charging_current_i = 0;
	int curr_vbat = 0;
	int i = 0;
	int ta_cv_vchr;
	kal_uint32 cv_voltage;
	
if(batt_cust_data.high_battery_voltage_support)
		cv_voltage = 4350;
else
		cv_voltage = 4200;
	
	mutex_lock(&ta_mutex);
	wake_lock(&TA_charger_suspend_lock);
 
	if(is_ta_connect == KAL_TRUE) {
		battery_log(BAT_LOG_CRTI, "mtk_ta_algorithm() start\n");
				 	 
		curr_vbat = battery_meter_get_battery_voltage(KAL_TRUE);
		if( ((curr_vbat-ta_pre_vbat)>100) && (curr_vbat < (cv_voltage - (CV_CHECK_DELAT_FOR_BANDGAP+20))) && (curr_vbat > TA_START_VCHR_TUNUNG_VOLTAGE) ) {		/*cv -0.12V && to avoid screen flash( VBAT less than 3.7V) */
			ta_pre_vbat = curr_vbat;
		 
			select_v_chr_candidate(curr_vbat, ta_v_chr_candidate);

			if(first_vchr_det == KAL_TRUE) {
				for(i=3 ; i>=1 ; i--) {		/* measure  VBAT+0.8V, VBAT+0.6V then VBAT+0.4V */
					if(ta_cable_out_occur == KAL_FALSE)
						mtk_ta_vchr_select(i,ta_v_chr_candidate,ta_charging_current_candidate,&max_charging_current,&max_charging_current_i);
				}

				first_vchr_det = KAL_FALSE;
			} else {
			 	for(i=1 ; i<=3 ; i++) {		/* measure VBAT+0.4V,VBAT+0.6V then VBAT+0.8V */
					if(ta_cable_out_occur == KAL_FALSE)
						mtk_ta_vchr_select(i,ta_v_chr_candidate,ta_charging_current_candidate,&max_charging_current,&max_charging_current_i);
				}
			}
 
			battery_log(BAT_LOG_CRTI, "mtk_ta_algorithm() candidate=%d,%d,%d,%d ; i=%d,%d,%d,%d ; max_charging_current_i=%d\n",
				ta_v_chr_candidate[0], ta_v_chr_candidate[1], ta_v_chr_candidate[2], ta_v_chr_candidate[3],
				ta_charging_current_candidate[0], ta_charging_current_candidate[1], ta_charging_current_candidate[2],ta_charging_current_candidate[3],
				max_charging_current_i
				);
 
			mtk_tuning_voltage(ta_current_level, ta_v_chr_candidate[max_charging_current_i]);

			ta_vchr_tuning = KAL_TRUE;
			ta_check_ta_control = KAL_TRUE;
		} else if(curr_vbat >= (cv_voltage - (CV_CHECK_DELAT_FOR_BANDGAP+20))) {
			if(cv_voltage == 4200)
				ta_cv_vchr = 4800;
			else	// cv 4.35V
				ta_cv_vchr = 5000;

			if(ta_current_level != ta_cv_vchr) {
				mtk_tuning_voltage(ta_current_level, ta_cv_vchr);
			}	

			ta_vchr_tuning = KAL_TRUE;
			ta_check_ta_control = KAL_FALSE;

			battery_log(BAT_LOG_CRTI, "mtk_ta_algorithm(),curr_vbat > cv_voltage, ta_current_level=%d, cv_voltage=%d, ta_cv_vchr=%d,",ta_current_level,cv_voltage,ta_cv_vchr);
		}

		/* --for normal charging */
		if((is_ta_connect == KAL_TRUE) && (curr_vbat > TA_START_VCHR_TUNUNG_VOLTAGE) &&(ta_check_ta_control == KAL_TRUE)) {	/* to avoid screen flash( VBAT less than 3.7V) */
		 	battery_charging_control(CHARGING_CMD_SET_CURRENT,&ta_charging_current);	/* 1.5A */
			battery_log(BAT_LOG_CRTI, "mtk_ta_algorithm() : detect TA, use 1.5A for normal charging, curr_vbat=%d, ta_pre_vbat=%d, ta_current_level=%d\n",
				curr_vbat, ta_pre_vbat, ta_current_level);
			//msleep(1500);
		}
		//------------------------
		 
		mtk_ta_BJT_check();
		battery_log(BAT_LOG_CRTI, "mtk_ta_algorithm() end\n");
	} else {
		battery_log(BAT_LOG_CRTI, "It's not a TA charger, bypass TA algorithm\n");
	}

	wake_unlock(&TA_charger_suspend_lock);
	mutex_unlock(&ta_mutex);
}