コード例 #1
0
ファイル: rt9536.c プロジェクト: John677/Kernal_k3note
// USB500 mode charging
void charging_ic_active_default(void)
{
    u32 wait;

    if(charging_ic_status == POWER_SUPPLY_TYPE_USB)
    {
		battery_log(BAT_LOG_CRTI,  "[charger_rt9536] :: it's already %s mode!!\n", __func__);
        return;
    }

    if(charging_ic_status != POWER_SUPPLY_TYPE_BATTERY)
    {
        charging_ic_deactive();
    }

    mutex_lock(&charging_lock);

    // USB500 mode
#if (1)
    charging_ic_set_chargingmode(CHR_USB_500_MODE);
#else
    mt_set_gpio_out(CHG_EN_SET_N, GPIO_OUT_ZERO);
    udelay(1500);
#endif /* 1 */

    charging_ic_status = POWER_SUPPLY_TYPE_USB;

    mutex_unlock(&charging_lock);

	battery_log(BAT_LOG_CRTI,  "[charger_rt9536] :: %s :\n", __func__);

}
コード例 #2
0
static void pchr_sw_cv_charing_current_check(void)
{
	kal_bool charging_enable = KAL_TRUE;
	kal_uint32 csdac_full_flag = KAL_TRUE;

	battery_charging_control(CHARGING_CMD_SET_CURRENT,&ulc_cv_charging_current);
	battery_charging_control(CHARGING_CMD_ENABLE,&charging_enable);

	msleep(192); 

	battery_charging_control(CHARGING_CMD_GET_CSDAC_FALL_FLAG,&csdac_full_flag);

	if(csdac_full_flag == KAL_TRUE) {
		ulc_cv_charging_current = battery_meter_get_charging_current() * 100;	/* get immedeate charging current and align to enum value */
	}	
	
	while(csdac_full_flag == KAL_TRUE &&  ulc_cv_charging_current !=CHARGE_CURRENT_0_00_MA) {
		set_bat_sw_cv_charging_current_limit(ulc_cv_charging_current);
		battery_charging_control(CHARGING_CMD_SET_CURRENT,&ulc_cv_charging_current);
		ulc_cv_charging_current_flag = KAL_TRUE;

		msleep(192);	/* large than 512 code x 0.25ms */
		
		battery_charging_control(CHARGING_CMD_GET_CSDAC_FALL_FLAG,&csdac_full_flag);

		battery_log(BAT_LOG_CRTI, "[BATTERY] Sw CV set charging current, csdac_full_flag=%d, current=%d !\n",csdac_full_flag,ulc_cv_charging_current);
	}

	if(ulc_cv_charging_current == CHARGE_CURRENT_0_00_MA)
		battery_log(BAT_LOG_CRTI, "[BATTERY] Sw CV set charging current Error!\n");
}
コード例 #3
0
ファイル: charging_hw_6333.c プロジェクト: Elnter/j608_kernel
static kal_uint32 charging_hw_init(void *data)
{
    kal_uint32 status = STATUS_OK;
    int polling_timeout_value = 10;
    int polling_time = 0;

    mt6333_set_rg_usbdl_mode_b(1);

    //0729 chenyap
    mt6333_set_rg_force_non_oc(1);
    mt6333_set_rg_strup_ther_rg_th(0x8);

    while(mt6333_get_rgs_power_on_ready() != 1)
    {
        if(polling_time++ >= polling_timeout_value)
        {
            battery_log(BAT_LOG_FULL, "check rgs_power_on_ready fail\n");
            break;
        }
    }
    battery_log(BAT_LOG_CRTI, "polling_time=%d of rgs_power_on_ready\n", polling_time);

#if defined(HIGH_BATTERY_VOLTAGE_SUPPORT)
    mt6333_set_rg_cv_sel(0);
    battery_log(BAT_LOG_CRTI, "HIGH_BATTERY_VOLTAGE_SUPPORT\n");
#endif

    return status;
}
コード例 #4
0
ファイル: rt9536.c プロジェクト: John677/Kernal_k3note
void charging_ic_deactive(void)
{

    if(charging_ic_status == POWER_SUPPLY_TYPE_BATTERY)
    {
		battery_log(BAT_LOG_CRTI,  "[charger_rt9536] :: it's already %s mode!! :\n", __func__);
        return;
    }

    mutex_lock(&charging_lock);

#if 1
    charging_ic_set_chargingmode(CHR_DENACTIVE_MODE);
#else
    mt_set_gpio_out(CHG_EN_SET_N, GPIO_OUT_ONE);

    udelay(2000);
#endif /* 0 */

    charging_ic_status = POWER_SUPPLY_TYPE_BATTERY;

    mutex_unlock(&charging_lock);

	battery_log(BAT_LOG_CRTI,  "[charger_rt9536] :: %s :\n", __func__);
}
コード例 #5
0
int hw_charging_get_charger_type(void)
{
#if 0
    return STANDARD_HOST;
    //return STANDARD_CHARGER; //adaptor
#else
    CHARGER_TYPE CHR_Type_num = CHARGER_UNKNOWN;


    /********* Step initial  ***************/
    hw_bc11_init();

    /********* Step DCD ***************/
    if(1 == hw_bc11_DCD())
    {
         /********* Step A1 ***************/
         if(1 == hw_bc11_stepA1())
         {
             CHR_Type_num = APPLE_2_1A_CHARGER;
             battery_log(BAT_LOG_CRTI, "step A1 : Apple 2.1A CHARGER!\r\n");
         }
         else
         {
             CHR_Type_num = NONSTANDARD_CHARGER;
             battery_log(BAT_LOG_CRTI, "step A1 : Non STANDARD CHARGER!\r\n");
         }
    }
    else
    {
         /********* Step A2 ***************/
         if(1 == hw_bc11_stepA2())
         {
             /********* Step B2 ***************/
             if(1 == hw_bc11_stepB2())
             {
                // is_dcp_type = true;
                 CHR_Type_num = STANDARD_CHARGER;
                 battery_log(BAT_LOG_CRTI, "step B2 : STANDARD CHARGER!\r\n");
             }
             else
             {
                 CHR_Type_num = CHARGING_HOST;
                 battery_log(BAT_LOG_CRTI, "step B2 :  Charging Host!\r\n");
             }
         }
         else
         {
             CHR_Type_num = STANDARD_HOST;
             battery_log(BAT_LOG_CRTI, "step A2 : Standard USB Host!\r\n");
         }

    }

    /********* Finally setting *******************************/
    hw_bc11_done();

    return CHR_Type_num;
#endif
}
コード例 #6
0
void select_charging_curret(void)
{
	if (g_ftm_battery_flag) {
		battery_log(BAT_LOG_CRTI, "[BATTERY] FTM charging : %d\r\n",
				    charging_level_data[0]);
		g_temp_CC_value = charging_level_data[0];
	} else {
		if (BMT_status.charger_type == STANDARD_HOST) {
#ifdef CONFIG_USB_IF
			{
				if (g_usb_state == USB_SUSPEND) {
					g_temp_CC_value = batt_cust_data.usb_charger_current_suspend;
				} else if (g_usb_state == USB_UNCONFIGURED) {
					g_temp_CC_value = batt_cust_data.usb_charger_current_unconfigured;
				} else if (g_usb_state == USB_CONFIGURED) {
					g_temp_CC_value = batt_cust_data.usb_charger_current_configured;
				} else {
					g_temp_CC_value = batt_cust_data.usb_charger_current_unconfigured;
				}

				battery_log(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_CC_value = batt_cust_data.usb_charger_current;
			}
#endif
		} else if (BMT_status.charger_type == NONSTANDARD_CHARGER) {
			g_temp_CC_value = batt_cust_data.non_std_ac_charger_current;
		} else if (BMT_status.charger_type == STANDARD_CHARGER) {
			g_temp_CC_value = batt_cust_data.ac_charger_current;
#if defined(CONFIG_MTK_PUMP_EXPRESS_SUPPORT)
			if(is_ta_connect == KAL_TRUE && ta_vchr_tuning == KAL_TRUE)
				g_temp_CC_value = CHARGE_CURRENT_1500_00_MA;
#endif
		} else if (BMT_status.charger_type == CHARGING_HOST) 
		{	
			g_temp_CC_value = batt_cust_data.charging_host_charger_current;	
		} else if (BMT_status.charger_type == APPLE_2_1A_CHARGER) {
			g_temp_CC_value = batt_cust_data.apple_2_1a_charger_current;
		} else if (BMT_status.charger_type == APPLE_1_0A_CHARGER) {
			g_temp_CC_value = batt_cust_data.apple_1_0a_charger_current;
		} else if (BMT_status.charger_type == APPLE_0_5A_CHARGER) {
			g_temp_CC_value = batt_cust_data.apple_0_5a_charger_current;
		} else {
			g_temp_CC_value = CHARGE_CURRENT_70_00_MA;
		}

		/* battery_log(BAT_LOG_CRTI, "[BATTERY] Default CC mode charging : %d\r\n",
				    g_temp_CC_value); */

#if defined(CONFIG_MTK_JEITA_STANDARD_SUPPORT)
		set_jeita_charging_current();
#endif
	}
}
コード例 #7
0
static void mtk_ta_vchr_select(int i,int ta_v_chr_candidate[], int ta_charging_current_candidate[], int *max_charging_current, int *max_charging_current_i)
{
 	int current_vchr;
	kal_bool retransmit = KAL_TRUE;
	kal_uint32 retransmit_count=0;

	current_vchr = battery_meter_get_charger_voltage();
	if(ta_current_level != 5000 && current_vchr >= 4900) {	/* pattern error before, so reset vchr to 5V */
		battery_log(BAT_LOG_CRTI, "mtk_ta_vchr_select() : curr_VChr=%d, ta_current_level=%d\n",current_vchr,ta_current_level);

		mtk_ta_reset_vchr();
	}

	do {
		mtk_tuning_voltage(ta_current_level, ta_v_chr_candidate[i]);

		current_vchr = battery_meter_get_charger_voltage();
		if((abs(current_vchr - ta_current_level) > 300) && (ta_cable_out_occur == KAL_FALSE)) {		/* variation > 0.3V, error occur */
			retransmit_count++;
		
			battery_log(BAT_LOG_CRTI, "mtk_ta_vchr_select(): retransmit_count =%d, cur_chr=%d, ta_current_level=%d\n", 
				retransmit_count, current_vchr, ta_current_level);
			
			mtk_ta_reset_vchr(); 
		} else {
			retransmit = KAL_FALSE;
		}

		if((retransmit_count == 2) || (ta_cable_out_occur == KAL_TRUE)) {
			retransmit = KAL_FALSE;
		}

	} while((retransmit == KAL_TRUE) && (ta_cable_out_occur == KAL_FALSE));		

	battery_charging_control(CHARGING_CMD_SET_CURRENT,&ta_charging_current);	//1.5A

	battery_log(BAT_LOG_CRTI, "mtk_ta_vchr_select() : use 1.5A for select max current\n");
	msleep(900); // over 800ms to avoid interference pattern
	 
	ta_charging_current_candidate[i] = battery_meter_get_charging_current_imm();

	/* we hope to choose the less VChr if the current difference between 2 step is not large, so we add weighting for different VChr step */
	if(i == 1)
		ta_charging_current_candidate[i] += 100;	// weighting, plus 120mA for Vbat+0.4V
	else if(i == 2)
		ta_charging_current_candidate[i] += 50;	// weighting, plug 60mA for Vbat+0.6V

	if(ta_charging_current_candidate[i] > *max_charging_current) {
		*max_charging_current = ta_charging_current_candidate[i];
		*max_charging_current_i = i;
	}
}
コード例 #8
0
ファイル: rt9536.c プロジェクト: John677/Kernal_k3note
static int __init charging_ic_init(void)
{
    int ret=0;

	battery_log(BAT_LOG_CRTI, "[charger_rt9536] Charging IC Driver Init\n");

    ret = platform_device_register(&charger_ic_dev);
    if (ret) {
		battery_log(BAT_LOG_CRTI, "[charger_rt9536] Unable to device register(%d)\n", ret);
        return ret;
    }

    return platform_driver_register(&charging_ic_driver);
}
コード例 #9
0
ファイル: rt9536.c プロジェクト: John677/Kernal_k3note
void charging_ic_set_factory_mode(void)
{
    u32 wait;

#if 0
    if(charging_ic_status == POWER_SUPPLY_TYPE_FACTORY)
    {
		battery_log(BAT_LOG_CRTI,  "[charger_rt9536] :: it's already %s mode!! :\n", __func__);
        return;
    }
#endif /* 0 */

	battery_log(BAT_LOG_CRTI,  "[charger_rt9536] :: charging_ic_set_factory_mode\n");

    if(charging_ic_status != POWER_SUPPLY_TYPE_BATTERY)
    {
        charging_ic_deactive();
    }

    mutex_lock(&charging_lock);

#if (1)
    charging_ic_set_chargingmode(CHR_PTM_MODE);
#else
    mt_set_gpio_out(CHG_EN_SET_N, GPIO_OUT_ZERO);
    udelay(400);
    mt_set_gpio_out(CHG_EN_SET_N, GPIO_OUT_ONE);
    udelay(400);
    mt_set_gpio_out(CHG_EN_SET_N, GPIO_OUT_ZERO);
    udelay(400);
    mt_set_gpio_out(CHG_EN_SET_N, GPIO_OUT_ONE);
    udelay(400);
    mt_set_gpio_out(CHG_EN_SET_N, GPIO_OUT_ZERO);
    udelay(400);
    mt_set_gpio_out(CHG_EN_SET_N, GPIO_OUT_ONE);
    udelay(400);
    mt_set_gpio_out(CHG_EN_SET_N, GPIO_OUT_ZERO);
    udelay(1500);
#endif /* 0 */

#if 0
    charging_ic_status = POWER_SUPPLY_TYPE_FACTORY;
#endif /* 0 */

    mutex_unlock(&charging_lock);

	battery_log(BAT_LOG_CRTI,  "[charger_rt9536] :: %s :\n", __func__);
}
コード例 #10
0
PMU_STATUS BAT_BatteryStatusFailAction(void)
{
	kal_uint32 charging_enable;

	battery_log(BAT_LOG_CRTI, "[BATTERY] BAD Battery status... Charging Stop !!\n\r");

#if defined(CONFIG_MTK_JEITA_STANDARD_SUPPORT)
	if ((g_temp_status == TEMP_ABOVE_POS_60) || (g_temp_status == TEMP_BELOW_NEG_10)) {
		temp_error_recovery_chr_flag = KAL_FALSE;
	}
	if ((temp_error_recovery_chr_flag == KAL_FALSE) && (g_temp_status != TEMP_ABOVE_POS_60)
	    && (g_temp_status != TEMP_BELOW_NEG_10)) {
		temp_error_recovery_chr_flag = KAL_TRUE;
		BMT_status.bat_charging_state = CHR_PRE;
	}
#endif

	BMT_status.total_charging_time = 0;
	BMT_status.PRE_charging_time = 0;
	BMT_status.CC_charging_time = 0;
	BMT_status.TOPOFF_charging_time = 0;
	BMT_status.POSTFULL_charging_time = 0;

	/*  Disable charger */
	charging_enable = KAL_FALSE;
	battery_charging_control(CHARGING_CMD_ENABLE, &charging_enable);

	return PMU_STATUS_OK;
}
コード例 #11
0
PMU_STATUS BAT_ConstantCurrentModeAction(void)
{
	battery_log(BAT_LOG_CRTI, "[BATTERY] CC mode charge, timer=%d on %d !!\n\r",
			    BMT_status.CC_charging_time, BMT_status.total_charging_time);

	BMT_status.PRE_charging_time = 0;
	BMT_status.CC_charging_time += BAT_TASK_PERIOD;
	BMT_status.TOPOFF_charging_time = 0;
	BMT_status.total_charging_time += BAT_TASK_PERIOD;

	ulc_cv_charging_current_flag = KAL_FALSE;
	ulc_cv_charging_current = g_temp_CC_value;

	if (BMT_status.bat_vol > v_cc2topoff_threshold) {
		BMT_status.bat_charging_state = CHR_TOP_OFF;
	}

#if defined(CONFIG_MTK_PUMP_EXPRESS_SUPPORT)//defined(MTK_LINEAR_CHARGER_NO_DISCHARGE)
	// no disable charging#else
#else
	{
		kal_bool charging_enable = KAL_FALSE;

		/* Charging 9s and discharging 1s : start */
		battery_charging_control(CHARGING_CMD_ENABLE, &charging_enable);
		msleep(1000);
	}	
#endif

	charging_current_calibration();

	pchr_turn_on_charging();

	return PMU_STATUS_OK;
}
コード例 #12
0
PMU_STATUS BAT_TopOffModeAction(void)
{
	kal_uint32 charging_enable = KAL_FALSE;
#ifdef HIGH_BATTERY_VOLTAGE_SUPPORT
	kal_uint32 cv_voltage = 4350;
#else
	kal_uint32 cv_voltage = 4200;
#endif

	battery_log(BAT_LOG_CRTI, "[BATTERY] Top Off mode charge, timer=%d on %d !!\n\r",
			    BMT_status.TOPOFF_charging_time, BMT_status.total_charging_time);

	BMT_status.PRE_charging_time = 0;
	BMT_status.CC_charging_time = 0;
	BMT_status.TOPOFF_charging_time += BAT_TASK_PERIOD;
	BMT_status.total_charging_time += BAT_TASK_PERIOD;


	if(BMT_status.bat_vol > (cv_voltage-CV_CHECK_DELAT_FOR_BANDGAP)) {	/* CV - 0.08V */
		pchr_sw_cv_charing_current_check();
	}
	pchr_turn_on_charging();

	if ((BMT_status.TOPOFF_charging_time >= MAX_CV_CHARGING_TIME)
	    || (charging_full_check() == KAL_TRUE)) {
		BMT_status.bat_charging_state = CHR_BATFULL;
		BMT_status.bat_full = KAL_TRUE;
		g_charging_full_reset_bat_meter = KAL_TRUE;

		/*  Disable charging */
		battery_charging_control(CHARGING_CMD_ENABLE, &charging_enable);
	}

	return PMU_STATUS_OK;
}
コード例 #13
0
ファイル: charging_hw_6333.c プロジェクト: Elnter/j608_kernel
static kal_uint32 charging_reset_watch_dog_timer(void *data)
{
    kal_uint32 status = STATUS_OK;
    kal_uint32 ret = 0;
    kal_uint8 val=0;
    int vbat_bal = 0;
    int check_vbat = 3950;

#if 1
    // cable plug-out sw workaround
    ret=mt6333_read_interface(0x04, (&val),0x1, 0);
    if(val==1)
    {
        vbat_bal = PMIC_IMM_GetOneChannelValue(7,3,1);
        if(vbat_bal > check_vbat)
        {
            ret=mt6333_config_interface(0x04, 0x94, 0xFF, 0x0);
            mdelay(50);
            ret=mt6333_config_interface(0x04, 0x95, 0xFF, 0x0);
        }
    }
    battery_log(BAT_LOG_CRTI, "chr_en=%d, curr_vbat=%d, check_vbat=%d\n", val, vbat_bal, check_vbat);
#endif

    mt6333_set_rg_chrwdt_wr(1); // write 1 to kick chr wdt
    mt6333_set_rg_chrwdt_td(1); // 32s
    mt6333_set_rg_chrwdt_en(1);

    return status;
}
コード例 #14
0
static U32 hw_bc11_stepA1(void)
{
   U32 wChargerAvail = 0;
     
   //RG_bc11_IPD_EN[1.0] = 01
   bc11_set_register_value(PMIC_RG_BC11_IPD_EN,0x1);
   //RG_bc11_VREF_VTH = [1:0]=00
   bc11_set_register_value(PMIC_RG_BC11_VREF_VTH,0x0);
   //RG_bc11_CMP_EN[1.0] = 01
   bc11_set_register_value(PMIC_RG_BC11_CMP_EN,0x1);

   msleep(80);
   //mdelay(80);

   wChargerAvail = bc11_get_register_value(PMIC_RGS_BC11_CMP_OUT);
				
   if(Enable_BATDRV_LOG == BAT_LOG_FULL)
   {
       battery_log(BAT_LOG_FULL, "hw_bc11_stepA1() \r\n");
       hw_bc11_dump_register();
   }

   //RG_bc11_IPD_EN[1.0] = 00
   bc11_set_register_value(PMIC_RG_BC11_IPD_EN,0x0);
   //RG_bc11_CMP_EN[1.0] = 00
   bc11_set_register_value(PMIC_RG_BC11_CMP_EN,0x0);

   return  wChargerAvail;
}
コード例 #15
0
static void hw_bc11_init(void)
{
    msleep(200);
    Charger_Detect_Init();
        
    //RG_bc11_BIAS_EN=1
    bc11_set_register_value(PMIC_RG_BC11_BIAS_EN,1);
    //RG_bc11_VSRC_EN[1:0]=00
    bc11_set_register_value(PMIC_RG_BC11_VSRC_EN,0);
    //RG_bc11_VREF_VTH = [1:0]=00
    bc11_set_register_value(PMIC_RG_BC11_VREF_VTH,0);
    //RG_bc11_CMP_EN[1.0] = 00
    bc11_set_register_value(PMIC_RG_BC11_CMP_EN,0);
    //RG_bc11_IPU_EN[1.0] = 00
    bc11_set_register_value(PMIC_RG_BC11_IPU_EN,0);
    //RG_bc11_IPD_EN[1.0] = 00
    bc11_set_register_value(PMIC_RG_BC11_IPD_EN,0);
    //bc11_RST=1
    bc11_set_register_value(PMIC_RG_BC11_RST,1);
    //bc11_BB_CTRL=1
    bc11_set_register_value(PMIC_RG_BC11_BB_CTRL,1);

    msleep(50);
    //mdelay(50);
    
    if(Enable_BATDRV_LOG == BAT_LOG_FULL)
    {
        battery_log(BAT_LOG_FULL, "hw_bc11_init() \r\n");
        hw_bc11_dump_register();
    }    

}
コード例 #16
0
 kal_uint32 charging_parameter_to_value(const kal_uint32 *parameter, const kal_uint32 array_size, const kal_uint32 val)
{
	kal_uint32 i;

    for(i=0;i<array_size;i++)
    {
    	if (*(parameter) > *(parameter+1)) {
	        if (val >= *(parameter + i))
	        {
	            if (abs(val - *(parameter + i)) < abs(val - *(parameter + i-1)))
	                return i;
				else
					return i-1;
	        }
		} else {
			if (val <= *(parameter + i)) {
				if (abs(val - *(parameter + i)) < abs(val - *(parameter + i-1)))
	                return i;
				else
					return i-1;
			}
        }
    }

    battery_log(BAT_LOG_CRTI, "NO register value match \r\n");
	//TODO: ASSERT(0);	// not find the value
	return 0;
}
コード例 #17
0
static void hw_bc11_done(void)
{
   //RG_bc11_VSRC_EN[1:0]=00
   bc11_set_register_value(PMIC_RG_BC11_VSRC_EN,0x0);
   //RG_bc11_VREF_VTH = [1:0]=0
   bc11_set_register_value(PMIC_RG_BC11_VREF_VTH,0x0);
   //RG_bc11_CMP_EN[1.0] = 00
   bc11_set_register_value(PMIC_RG_BC11_CMP_EN,0x0);
   //RG_bc11_IPU_EN[1.0] = 00
   bc11_set_register_value(PMIC_RG_BC11_IPU_EN,0x0);
   //RG_bc11_IPD_EN[1.0] = 00
   bc11_set_register_value(PMIC_RG_BC11_IPD_EN,0x0);
   //RG_bc11_BIAS_EN=0
   bc11_set_register_value(PMIC_RG_BC11_BIAS_EN,0x0);


   Charger_Detect_Release();

   if(Enable_BATDRV_LOG == BAT_LOG_FULL)
   {
       battery_log(BAT_LOG_FULL, "hw_bc11_done() \r\n");
       hw_bc11_dump_register();
   }
   
}
コード例 #18
0
static void hw_bc11_done(void)
{
   //RG_bc11_VSRC_EN[1:0]=00
   mt6325_upmu_set_rg_bc11_vsrc_en(0x0);
   //RG_bc11_VREF_VTH = [1:0]=0
   mt6325_upmu_set_rg_bc11_vref_vth(0x0);
   //RG_bc11_CMP_EN[1.0] = 00
   mt6325_upmu_set_rg_bc11_cmp_en(0x0);
   //RG_bc11_IPU_EN[1.0] = 00
   mt6325_upmu_set_rg_bc11_ipu_en(0x0);
   //RG_bc11_IPD_EN[1.0] = 00
   mt6325_upmu_set_rg_bc11_ipd_en(0x0);
   //RG_bc11_BIAS_EN=0
   mt6325_upmu_set_rg_bc11_bias_en(0x0);

  // if (!is_dcp_type)
   Charger_Detect_Release();

   if(Enable_BATDRV_LOG == BAT_LOG_FULL)
   {
       battery_log(BAT_LOG_FULL, "hw_bc11_done() \r\n");
       hw_bc11_dump_register();
   }

}
コード例 #19
0
 static kal_uint32 charging_hw_init(void *data)
 {
 	kal_uint32 status = STATUS_OK;
	static bool charging_init_flag = KAL_FALSE;

	mt_set_gpio_mode(gpio_number,gpio_on_mode);
	mt_set_gpio_dir(gpio_number,gpio_on_dir);
	mt_set_gpio_out(gpio_number,gpio_on_out);
#if defined(MTK_WIRELESS_CHARGER_SUPPORT)
	mt_set_gpio_mode(wireless_charger_gpio_number,0); // 0:GPIO mode
	mt_set_gpio_dir(wireless_charger_gpio_number,0); // 0: input, 1: output
#endif

	battery_log(BAT_LOG_FULL, "gpio_number=0x%x,gpio_on_mode=%d,gpio_off_mode=%d\n", gpio_number, gpio_on_mode, gpio_off_mode);

	upmu_set_rg_usbdl_set(0);       //force leave USBDL mode
	upmu_set_rg_usbdl_rst(1);		//force leave USBDL mode

	#if defined(HIGH_BATTERY_VOLTAGE_SUPPORT)
	fan5405_reg_config_interface(0x06,0x77); // ISAFE = 1250mA, VSAFE = 4.34V
	#else
	fan5405_reg_config_interface(0x06,0x70);
	#endif

	fan5405_reg_config_interface(0x00,0xC0);	//kick chip watch dog
	fan5405_reg_config_interface(0x01,0xb8);	//TE=1, CE=0, HZ_MODE=0, OPA_MODE=0
	fan5405_reg_config_interface(0x05,0x03);
	if ( !charging_init_flag ) {
		fan5405_reg_config_interface(0x04,0x1A); //146mA
		charging_init_flag = KAL_TRUE;
	}
 	return status;
 }
コード例 #20
0
void BATTERY_SetUSBState(int usb_state_value)
{
#if defined(CONFIG_POWER_EXT)
	battery_log(BAT_LOG_CRTI, "[BATTERY_SetUSBState] in FPGA/EVB, no service\r\n");
#else
	if ((usb_state_value < USB_SUSPEND) || ((usb_state_value > USB_CONFIGURED))) {
		battery_log(BAT_LOG_CRTI,
				    "[BATTERY] BAT_SetUSBState Fail! Restore to default value\r\n");
		usb_state_value = USB_UNCONFIGURED;
	} else {
		battery_log(BAT_LOG_CRTI, "[BATTERY] BAT_SetUSBState Success! Set %d\r\n",
				    usb_state_value);
		g_usb_state = usb_state_value;
	}
#endif
}
コード例 #21
0
ファイル: charging_hw_6333.c プロジェクト: Elnter/j608_kernel
 static void hw_bc11_init(void)
 {
	 msleep(300);
	 Charger_Detect_Init();

	 //RG_BC11_BIAS_EN=1
	 upmu_set_rg_bc11_bias_en(0x1);
	 //RG_BC11_VSRC_EN[1:0]=00
	 upmu_set_rg_bc11_vsrc_en(0x0);
	 //RG_BC11_VREF_VTH = [1:0]=00
	 upmu_set_rg_bc11_vref_vth(0x0);
	 //RG_BC11_CMP_EN[1.0] = 00
	 upmu_set_rg_bc11_cmp_en(0x0);
	 //RG_BC11_IPU_EN[1.0] = 00
	 upmu_set_rg_bc11_ipu_en(0x0);
	 //RG_BC11_IPD_EN[1.0] = 00
	 upmu_set_rg_bc11_ipd_en(0x0);
	 //BC11_RST=1
	 upmu_set_rg_bc11_rst(0x1);
	 //BC11_BB_CTRL=1
	 upmu_set_rg_bc11_bb_ctrl(0x1);

 	 //msleep(10);
 	 mdelay(50);

	 if(Enable_BATDRV_LOG == BAT_LOG_FULL)
	 {
    		battery_log(BAT_LOG_FULL, "hw_bc11_init() \r\n");
		hw_bc11_dump_register();
	 }

 }
コード例 #22
0
ファイル: charging_hw_6333.c プロジェクト: Elnter/j608_kernel
 static U32 hw_bc11_stepB2(void)
 {
	U32 wChargerAvail = 0;

	//RG_BC11_IPU_EN[1:0]=10
	upmu_set_rg_bc11_ipu_en(0x2);
	//RG_BC11_VREF_VTH = [1:0]=10
	upmu_set_rg_bc11_vref_vth(0x1);
	//RG_BC11_CMP_EN[1.0] = 01
	upmu_set_rg_bc11_cmp_en(0x1);

	//msleep(80);
	mdelay(80);

	wChargerAvail = upmu_get_rgs_bc11_cmp_out();

	if(Enable_BATDRV_LOG == BAT_LOG_FULL)
	{
		battery_log(BAT_LOG_FULL, "hw_bc11_stepB2() \r\n");
		hw_bc11_dump_register();
	}

	//RG_BC11_IPU_EN[1.0] = 00
	upmu_set_rg_bc11_ipu_en(0x0);
	//RG_BC11_CMP_EN[1.0] = 00
	upmu_set_rg_bc11_cmp_en(0x0);
	//RG_BC11_VREF_VTH = [1:0]=00
	upmu_set_rg_bc11_vref_vth(0x0);

	return  wChargerAvail;
 }
コード例 #23
0
static void hw_bc11_dump_register(void)
{
    battery_log(BAT_LOG_FULL, "Reg[0x%x]=0x%x,Reg[0x%x]=0x%x\n",
        MT6325_CHR_CON20, upmu_get_reg_value(MT6325_CHR_CON20),
        MT6325_CHR_CON21, upmu_get_reg_value(MT6325_CHR_CON21)
        );
}
コード例 #24
0
static kal_uint32 charging_enable(void *data)
{
	kal_uint32 status = STATUS_OK;
	kal_uint32 enable = *(kal_uint32*)(data);

	if(KAL_TRUE == enable)
	{
		bq24196_set_en_hiz(0x0);	            	
		bq24196_set_chg_config(0x1); // charger enable
	}
	else
	{
		#if defined(CONFIG_USB_MTK_HDRC_HCD)
		if(mt_usb_is_device())
		#endif 			
		{
			bq24196_set_chg_config(0x0);
			if (charging_get_error_state()) {
				battery_log(BAT_LOG_CRTI, "[charging_enable] bq24196_set_hz_mode(0x1)\n");
				bq24196_set_en_hiz(0x1);	// disable power path
			}
		}
		#if defined(CONFIG_MTK_DUAL_INPUT_CHARGER_SUPPORT)
		bq24196_set_chg_config(0x0);
		bq24196_set_en_hiz(0x1);	// disable power path
		#endif
	}

	return status;
}
コード例 #25
0
 static kal_uint32 charging_enable(void *data)
 {
 	kal_uint32 status = STATUS_OK;
	kal_uint32 enable = *(kal_uint32*)(data);

	if(KAL_TRUE == enable)
	{
		ncp1854_set_chg_en(0x1); // charger enable
		//Set SPM = 1
		mt_set_gpio_mode(GPIO_CHR_SPM_PIN, GPIO_MODE_00);
		mt_set_gpio_dir(GPIO_CHR_SPM_PIN, GPIO_DIR_OUT);
		mt_set_gpio_out(GPIO_CHR_SPM_PIN, GPIO_OUT_ONE);
	}
	else
	{
#if defined(CONFIG_USB_MTK_HDRC_HCD)
   		if(mt_usb_is_device())
#endif
    	{
			if(charging_get_error_state())
			{
				ncp1854_set_chg_en(0x0); // charger disable
				battery_log(BAT_LOG_CRTI,"[charging_enable] ncp1854_set_pwr_path(0)\n");
				ncp1854_set_pwr_path(0);	// disable power path
			}
    	}
	}

	return status;
 }
コード例 #26
0
static kal_uint32 charging_full_check(void)
{
	kal_uint32 status = KAL_FALSE;

#if defined(POST_TIME_ENABLE)
	static kal_uint32 post_charging_time = 0; 

	if (post_charging_time >= POST_CHARGING_TIME) {
		status = KAL_TRUE;
		post_charging_time = 0;

		battery_log(BAT_LOG_CRTI,
				    "[BATTERY] Battery real full and disable charging on %d mA\n",
				    BMT_status.ICharging);
	} else if (post_charging_time > 0) {
		post_charging_time += BAT_TASK_PERIOD;
		battery_log(BAT_LOG_CRTI,
				    "[BATTERY] post_charging_time=%d,POST_CHARGING_TIME=%d\n",
				    post_charging_time, POST_CHARGING_TIME);
	} else if ((BMT_status.TOPOFF_charging_time > 60)
		   && (BMT_status.ICharging <= charging_full_current)) {
		post_charging_time = BAT_TASK_PERIOD;
		battery_log(BAT_LOG_CRTI,
				    "[BATTERY] Enter Post charge, post_charging_time=%d,POST_CHARGING_TIME=%d\n",
				    post_charging_time, POST_CHARGING_TIME);
	} else {
		post_charging_time = 0;
	}
#else
	static kal_uint8 full_check_count = 0;

	if (BMT_status.ICharging <= charging_full_current) {
		full_check_count++;
		if (6 == full_check_count) {
			status = KAL_TRUE;
			full_check_count = 0;
			battery_log(BAT_LOG_CRTI,
					    "[BATTERY] Battery full and disable charging on %d mA\n",
					    BMT_status.ICharging);
		}
	} else {
		full_check_count = 0;
	}
#endif

	return status;
}
コード例 #27
0
static kal_uint32 is_chr_det(void)
{
	kal_uint32 val=0;
	val = mt6325_upmu_get_rgs_chrdet();
	battery_log(BAT_LOG_CRTI, "[is_chr_det] %d\n", val);
 
	return val;
}
コード例 #28
0
static kal_uint32 charging_dump_register(void *data)
{
    kal_uint32 status = STATUS_OK;

    kal_uint32 reg_val = 0;    
    kal_uint32 i = 0;

    for(i=MT6328_CHR_CON0 ; i<=MT6328_CHR_CON40 ; i+=2)
    {
        reg_val = upmu_get_reg_value(i);
        battery_log(BAT_LOG_CRTI, "[0x%x]=0x%x,", i, reg_val);
    }

    battery_log(BAT_LOG_CRTI, "\n");

    return status;
}
コード例 #29
0
ファイル: rt9536.c プロジェクト: John677/Kernal_k3note
unsigned char rt9536_check_eoc_status(void)
{
    unsigned char reg_val = 0;
    unsigned char eoc_status = 0;

    // TO DO
    eoc_status = mt_get_gpio_in(CHG_EOC_N);;

    if( eoc_status == 1 )
    {
		battery_log(BAT_LOG_CRTI, "[charger_rt9536] :: (%s) eoc_status(%d)\n", __func__, eoc_status);
        return 1;
    }

	battery_log(BAT_LOG_CRTI, "[charger_rt9536] :: (%s) eoc_status(%d)\n", __func__, eoc_status);
    return 0;
}
コード例 #30
0
static void mtk_tuning_voltage(int curr_level, int target_level)
{
	int is_increase = 0;
	int exec_level = 0;
	CHR_CURRENT_ENUM	chr_current = CHARGE_CURRENT_70_00_MA;
	
	/* if(BMT_status.charger_exist == KAL_TRUE) */
	if(ta_cable_out_occur == KAL_FALSE) {
		battery_log(BAT_LOG_CRTI, "mtk_tuning_voltage() start\n");
	 
		if(curr_level >= target_level) {
			exec_level = (curr_level-target_level)/200;
			is_increase = 0;		 
		} else {
			exec_level = (target_level-curr_level)/200;
			is_increase = 1;
		}

		if(exec_level == 0) {	/* curr_level == target_level */
			battery_charging_control(CHARGING_CMD_SET_CURRENT,&chr_current);
			msleep(50);	// for VChr reading to check error occur or not
		}

		 
		battery_log(BAT_LOG_CRTI, "mtk_tuning_voltage() before : ta_current_level=%d, real_v_chr=%d, is_ta_connect=%d, is_increase=%d, exec_level=%d\n", 
			ta_current_level, battery_meter_get_charger_voltage(), is_ta_connect, is_increase, exec_level);
	 
		while((exec_level > 0) && (ta_cable_out_occur == KAL_FALSE)) {
			if(is_increase == 1)
				mtk_ta_increase();
			else
				mtk_ta_decrease();
			battery_log(BAT_LOG_CRTI, "mtk_tuning_voltage() after ta_current_level=%d, real_v_chr=%d, is_ta_connect=%d, is_increase=%d, exec_level=%d\n", 
				ta_current_level, battery_meter_get_charger_voltage(), is_ta_connect, is_increase, exec_level);
	 
			exec_level--;
		}
	 	 
		battery_log(BAT_LOG_CRTI, "mtk_tuning_voltage() end\n");
 	} else {
		ta_check_chr_type = KAL_TRUE;
		//is_ta_connect = KAL_FALSE; 
		battery_log(BAT_LOG_CRTI, "mtk_tuning_voltage(), Cable Out\n");
	}
}