コード例 #1
0
ファイル: axp.c プロジェクト: Gucan/h3_lichee
/*
************************************************************************************************************
*
*                                             function
*
*    函数名称:
*
*    参数列表:
*
*    返回值  :
*
*    说明    :
*
*
************************************************************************************************************
*/
int axp_set_all_limit(void)
{
	int usbvol_limit = 0;
	int usbcur_limit = 0;

	script_parser_fetch(PMU_SCRIPT_NAME, "pmu_usbvol_limit", &usbvol_limit, 1);
	script_parser_fetch(PMU_SCRIPT_NAME, "pmu_usbcur_limit", &usbcur_limit, 1);
	script_parser_fetch(PMU_SCRIPT_NAME, "pmu_usbvol", (int *)&gd->limit_vol, 1);
	script_parser_fetch(PMU_SCRIPT_NAME, "pmu_usbcur", (int *)&gd->limit_cur, 1);
	script_parser_fetch(PMU_SCRIPT_NAME, "pmu_usbvol_pc", (int *)&gd->limit_pcvol, 1);
	script_parser_fetch(PMU_SCRIPT_NAME, "pmu_usbcur_pc", (int *)&gd->limit_pccur, 1);
#ifdef DEBUG
	printf("usbvol_limit = %d, limit_vol = %d\n", usbvol_limit, gd->limit_vol);
	printf("usbcur_limit = %d, limit_cur = %d\n", usbcur_limit, gd->limit_cur);
#endif
	if(!usbvol_limit)
	{
		gd->limit_vol = 0;

	}
	if(!usbcur_limit)
	{
		gd->limit_cur = 0;
	}

	axp_set_vbus_limit_pc();

	return 0;
}
コード例 #2
0
void power_limit_init(void)
{
	int battery_exist = 0;
	int dcin_exist = 0;
	int vbus_type = 0;
	int i = 0;

	do
	{
		#ifdef CONFIG_ARCH_HOMELET
			break;
		#endif
		axp_power_get_dcin_battery_exist(&dcin_exist, &battery_exist);//判断电池是否存在
		if(battery_exist >= 0)
		{
			break;
		}
		i ++;
		__msdelay(500);
	}
	while(i < 4);

	vbus_type = usb_probe_vbus_type();
	if(vbus_type == 1)								//属于dc类型电源
	{
		printf("vbus not exist\n");
		gd->vbus_status = SUNXI_VBUS_NOT_EXIST;
	}
	else
	{
		printf("vbus exist\n");
		gd->vbus_status = SUNXI_VBUS_EXIST;			//属于vbus类型
	}

	if(battery_exist != BATTERY_EXIST)			//电池不存在,则直接限流到DC模式
	{
		axp_set_vbus_limit_dc();
		puts("no battery, limit to dc\n");

		return ;
	}

	if(dcin_exist == AXP_DCIN_EXIST)		//如果普通外部电源存在,不是VBUS类型
	{
		axp_set_vbus_limit_dc();
		puts("normal dc exist, limit to dc\n");

		return ;
	}

	if(dcin_exist == AXP_VBUS_EXIST)		//如果VBUS电源存在
	{
		vbus_type = usb_probe_vbus_type();

		if(vbus_type == 1)					//属于dc类型电源
		{
			axp_set_vbus_limit_dc();    //dp_dm 拉高
			puts("vbus dc exist, limit to dc\n");
		}
		else
		{
			axp_set_vbus_limit_pc();    //dp_dm 拉低
			axp_set_charge_current(600);
			puts("vbus pc exist, limit to pc\n");
		}

		return ;
	}

	axp_set_vbus_limit_dc();				//只有电池存在
	puts("only battery exist, limit to dc\n");

	return ;
}