static int board_probe_power_level(void)
{
	int power_status;
	int power_start;

	//清除power按键
	axp_probe_key();
	//获取电源状态
	power_status = axp_get_power_vol_level();
	debug("power status = %d\n", power_status);
	if(power_status == BATTERY_RATIO_TOO_LOW_WITHOUT_DCIN)
	{
		tick_printf("battery power is low without no dc or ac, should be set off\n");
		sunxi_bmp_display("bat\\low_pwr.bmp");
		__msdelay(3000);

		return -1;
	}
	power_start = 0;
	//power_start的含义
	//0: 不允许插火牛直接开机,必须通过判断:满足以下条件可以直接开机:长按power按键,前次是系统状态,如果电池电量过低,则不允许开机
	//1: 任意状态下,允许插火牛直接开机,同时要求电池电量足够高
	//2: 不允许插火牛直接开机,必须通过判断:满足以下条件可以直接开机:长按power按键,前次是系统状态,不要求电池电量
	//3: 任意状态下,允许插火牛直接开机,不要求电池电量
	script_parser_fetch(PMU_SCRIPT_NAME, "power_start", &power_start, 1);
	debug("power start cause = %d\n", power_start);
	if(power_status == BATTERY_RATIO_TOO_LOW_WITH_DCIN)//低电,同时带外部电源状态下
	{
		if(!(power_start & 0x02))	//需要判断当前电池电量,要求power_start的第1bit的值为0
		{							//此种情况下,直接关机
			tick_printf("battery low power with dc or ac, should charge longer\n");
			sunxi_bmp_display("bat\\bempty.bmp");
			__msdelay(3000);

			return -2;
		}
		else
		{
			if(power_start == 3)	//不需要判断当前电池电量,如果为3,则进入系统,如果为0,则进行后续判断
			{
				return 0;
			}
		}
	}
	else							//电池电量足够情况下,或者没有电池
	{
		if(power_start & 0x01)		//如果第0bit的值为1,则进入系统
		{
			return 0;
		}
	}

	return 1;
}
Esempio n. 2
0
static int board_probe_power_level(void)
{
	int power_status;
	int power_start;

	//清除power按键
	axp_probe_key();
	//获取电源状态
	power_status = axp_get_power_vol_level();
	debug("power status = %d\n", power_status);
	if(power_status == BATTERY_RATIO_TOO_LOW_WITHOUT_DCIN)
	{
		tick_printf("battery power is low without no dc or ac, should be set off\n");
		sunxi_bmp_display("bat\\low_pwr.bmp");
		__msdelay(3000);
        if(!efex_test)
		    return -1;
        else
            return 0;
	}
	power_start = 0;
	//power_start的含义
	//0: 不允许插火牛直接开机,必须通过判断:满足以下条件可以直接开机:长按power按键,前次是系统状态,如果电池电量过低,则不允许开机
	//1: 任意状态下,允许插火牛直接开机,同时要求电池电量足够高
	//2: 不允许插火牛直接开机,必须通过判断:满足以下条件可以直接开机:长按power按键,前次是系统状态,不要求电池电量
	//3: 任意状态下,允许插火牛直接开机,不要求电池电量
	script_parser_fetch(PMU_SCRIPT_NAME, "power_start", &power_start, 1);
	debug("power start cause = %d\n", power_start);
	if(power_start == 3)
	{
		return 0;
	}
	if(power_status == BATTERY_RATIO_TOO_LOW_WITH_DCIN_VOL_TOO_LOW)//低电量低电压,带外部电源状态
	{
		if(!(power_start & 0x02))	//根据配置,低电状态下不允许开机, power_start==0 | power_start==1
		{
			tick_printf("battery low power and vol with dc or ac, should charge longer\n");
			sunxi_bmp_display("bat\\bempty.bmp");
			__msdelay(3000);

			return -1;
		}
		//低电池低电量,此时配置为2,进入检测,按键则进入系统,插入火牛则待机
		return 1;
	}
	if(power_status == BATTERY_RATIO_TOO_LOW_WITH_DCIN)//低电量高电压,带外部电源状态
	{
		//如果配置为0,进入检测,按键则显示低电图标然后关机,插入火牛则待机
		//如果配置为1,进入检测,按键则显示低电图标然后关机,插入火牛则待机
		//如果配置为2,进入检测,按键则进入系统,插入火牛则待机
		if(!(power_start & 0x02))	//根据配置,低电状态下不允许开机, power_start==0 | power_start==1
		{
			tick_printf("battery low power with dc or ac\n");

			return 2;
		}
		//低电池低电量,此时配置为2,进入检测,按键则进入系统,插入火牛则待机
		return 1;
	}
	//电池电压电流都足够
	if(power_start == 0x01)		//如果第0bit的值为1,则进入系统
	{
		return 0;
	}

	return 1;
}