static kal_uint32 charging_hw_init(void *data)
 {
 	kal_uint32 status = STATUS_OK;
	
	upmu_set_rg_bc11_bb_ctrl(1);    //BC11_BB_CTRL    
    upmu_set_rg_bc11_rst(1);        //BC11_RST
	
#if 0 //no use
    //pull PSEL low
    mt_set_gpio_mode(GPIO_CHR_PSEL_PIN,GPIO_MODE_GPIO);  
    mt_set_gpio_dir(GPIO_CHR_PSEL_PIN,GPIO_DIR_OUT);
    mt_set_gpio_out(GPIO_CHR_PSEL_PIN,GPIO_OUT_ZERO);
#endif    
    
    //pull CE low
    mt_set_gpio_mode(GPIO_SWCHARGER_EN_PIN,GPIO_MODE_GPIO);  
    mt_set_gpio_dir(GPIO_SWCHARGER_EN_PIN,GPIO_DIR_OUT);
    mt_set_gpio_out(GPIO_SWCHARGER_EN_PIN,GPIO_OUT_ZERO);    

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

	bq24196_set_en_hiz(0x0);
	if (get_usb_current_unlimited()) {
		bq24196_set_vindpm(0x7); //VIN DPM check 4.44V
		battery_xlog_printk(BAT_LOG_CRTI, "[charging_hw_init] VIN DPM check 4.44V\n");
	}else{
		bq24196_set_vindpm(0xA); //VIN DPM check 4.68V
	}    
	bq24196_set_reg_rst(0x0);
	bq24196_set_wdt_rst(0x1); //Kick watchdog	
	bq24196_set_sys_min(0x5); //Minimum system voltage 3.5V	
	bq24196_set_iprechg(0x3); //Precharge current 512mA
	bq24196_set_iterm(0x0); //Termination current 128mA

	bq24196_set_batlowv(0x1); //BATLOWV 3.0V
	bq24196_set_vrechg(0x0); //VRECHG 0.1V (4.108V)
	bq24196_set_en_term(0x1); //Enable termination
	bq24196_set_term_stat(0x0); //Match ITERM
	bq24196_set_watchdog(0x1); //WDT 40s
	bq24196_set_en_timer(0x0); //Disable charge timer
	bq24196_set_int_mask(0x0); //Disable fault interrupt
    
	return status;
 }
static void pchr_turn_on_charging(void)
{
#if !defined(CONFIG_MTK_JEITA_STANDARD_SUPPORT)
	BATTERY_VOLTAGE_ENUM cv_voltage;
#endif
	kal_uint32 charging_enable = KAL_TRUE;

	battery_log(BAT_LOG_FULL, "[BATTERY] pchr_turn_on_charging()!\r\n");

	if (BMT_status.bat_charging_state == CHR_ERROR) {
		battery_log(BAT_LOG_CRTI, "[BATTERY] Charger Error, turn OFF charging !\n");

		charging_enable = KAL_FALSE;
	} else if ((g_platform_boot_mode == META_BOOT) || (g_platform_boot_mode == ADVMETA_BOOT)) {
		battery_log(BAT_LOG_CRTI,
				    "[BATTERY] In meta or advanced meta mode, disable charging.\n");
		charging_enable = KAL_FALSE;
	} else {
		/*HW initialization */
		battery_log(BAT_LOG_FULL, "charging_hw_init\n");
		battery_charging_control(CHARGING_CMD_INIT, NULL);

#if defined(CONFIG_MTK_PUMP_EXPRESS_SUPPORT)
		battery_pump_express_algorithm_start();
#endif

		/* Set Charging Current */
		if (get_usb_current_unlimited()) {
			g_temp_CC_value = batt_cust_data.ac_charger_current;
			battery_log(BAT_LOG_FULL, "USB_CURRENT_UNLIMITED, use AC_CHARGER_CURRENT\n" );
		} else {
			if (g_bcct_flag == 1) {
				battery_log(BAT_LOG_FULL,
					    "[BATTERY] select_charging_curret_bcct !\n");
				select_charging_curret_bcct();
			} else {
				battery_log(BAT_LOG_FULL, "[BATTERY] select_charging_current !\n");
				select_charging_curret();
			}
		}

		if (g_temp_CC_value == CHARGE_CURRENT_0_00_MA) {
			charging_enable = KAL_FALSE;
			battery_log(BAT_LOG_CRTI,
					"[BATTERY] charging current is set 0mA, turn off charging !\r\n");
		} else {
#if defined(CONFIG_MTK_PUMP_EXPRESS_SUPPORT)
			if(ta_check_ta_control == KAL_FALSE)
#endif	
			{
				if(ulc_cv_charging_current_flag == KAL_TRUE)
					battery_charging_control(CHARGING_CMD_SET_CURRENT,&ulc_cv_charging_current);
				else
					battery_charging_control(CHARGING_CMD_SET_CURRENT,&g_temp_CC_value);
			}

			/* Set CV */
#if !defined(CONFIG_MTK_JEITA_STANDARD_SUPPORT)
	if(batt_cust_data.high_battery_voltage_support)
			cv_voltage = BATTERY_VOLT_04_350000_V;
	else
			cv_voltage = BATTERY_VOLT_04_200000_V;

			battery_charging_control(CHARGING_CMD_SET_CV_VOLTAGE, &cv_voltage);
#endif
		}
	}

	/* enable/disable charging */
	battery_log(BAT_LOG_CRTI, "[BATTERY] pchr_turn_on_charging(), enable =%d \r\n",
			    charging_enable);
	battery_charging_control(CHARGING_CMD_ENABLE, &charging_enable);


}
Ejemplo n.º 3
0
static void pchr_turn_on_charging (void)
{
#if !defined(MTK_JEITA_STANDARD_SUPPORT)
    BATTERY_VOLTAGE_ENUM cv_voltage;
#endif
    kal_uint32 charging_enable = KAL_TRUE;

#if defined(MTK_DUAL_INPUT_CHARGER_SUPPORT)
    if(KAL_TRUE == BMT_status.charger_exist)
        charging_enable = KAL_TRUE;
    else
        charging_enable = KAL_FALSE;
#endif

    if ( BMT_status.bat_charging_state == CHR_ERROR )
    {
        battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Charger Error, turn OFF charging !\n");

        charging_enable = KAL_FALSE;

    }
    else if( (g_platform_boot_mode==META_BOOT) || (g_platform_boot_mode==ADVMETA_BOOT) )
    {
        battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] In meta or advanced meta mode, disable charging.\n");
        charging_enable = KAL_FALSE;
    }
    else
    {
        /*HW initialization*/
        battery_charging_control(CHARGING_CMD_INIT,NULL);

        battery_xlog_printk(BAT_LOG_FULL, "charging_hw_init\n" );

#if defined(MTK_PUMP_EXPRESS_PLUS_SUPPORT)
        battery_pump_express_algorithm_start();
#endif

        /* Set Charging Current */
        if (get_usb_current_unlimited()) {
            g_temp_input_CC_value = AC_CHARGER_CURRENT;
            g_temp_CC_value = AC_CHARGER_CURRENT;
            battery_xlog_printk(BAT_LOG_FULL, "USB_CURRENT_UNLIMITED, use AC_CHARGER_CURRENT\n" );
        }
        else {
            if (g_bcct_flag == 1)
            {
                select_charging_curret_bcct();

                battery_xlog_printk(BAT_LOG_FULL, "[BATTERY] select_charging_curret_bcct !\n");
            }
            else
            {
                select_charging_curret();

                battery_xlog_printk(BAT_LOG_FULL, "[BATTERY] select_charging_curret !\n");
            }
        }
//modify by willcai 2014-5-29 begin
#ifdef X2_CHARGING_STANDARD_SUPPORT
        lenovo_get_charging_curret(&g_temp_CC_value);
#endif
//end
        battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] Default CC mode charging : %d, input current = %d\r\n", g_temp_CC_value,g_temp_input_CC_value);
        if( g_temp_CC_value == CHARGE_CURRENT_0_00_MA || g_temp_input_CC_value == CHARGE_CURRENT_0_00_MA)
        {

            charging_enable = KAL_FALSE;

            battery_xlog_printk(BAT_LOG_CRTI, "[BATTERY] charging current is set 0mA, turn off charging !\r\n");
        }
        else
        {
            battery_charging_control(CHARGING_CMD_SET_INPUT_CURRENT,&g_temp_input_CC_value);
            battery_charging_control(CHARGING_CMD_SET_CURRENT,&g_temp_CC_value);

            /*Set CV Voltage*/
#if !defined(MTK_JEITA_STANDARD_SUPPORT)
#ifdef HIGH_BATTERY_VOLTAGE_SUPPORT
            cv_voltage = BATTERY_VOLT_04_340000_V;
#else
            cv_voltage = BATTERY_VOLT_04_200000_V;
#endif
            battery_charging_control(CHARGING_CMD_SET_CV_VOLTAGE,&cv_voltage);
#endif
        }
    }

    /* enable/disable charging */
    battery_charging_control(CHARGING_CMD_ENABLE,&charging_enable);

    battery_xlog_printk(BAT_LOG_FULL, "[BATTERY] pchr_turn_on_charging(), enable =%d !\r\n", charging_enable);
}