其他分享
首页 > 其他分享> > A133连接pc板子掉电

A133连接pc板子掉电

作者:互联网

平台:A133+AXP717
系统:Android11
内核:Linux5.4
现象:在板子不接电池的情况下,连接电脑板子掉电(该项目不需要电池),用示波器抓到的波形显示reset一直为低。

使用逻辑分析仪测量pmu和主控在掉电前的通讯,发现其对pmu进行写0x17 0x88

通过查阅axp717数据手册我们发现这是一个限流操作,限制为500ma。

我们将屏幕和喇叭去掉,发现其能正常开机了,说明猜想正确。

	pmu_usbpc_vol = <4600>;
	pmu_usbpc_cur = <1500>;//将其改为1.5A
	pmu_usbad_vol = <4600>;
	pmu_usbad_cur = <2500>;
	pmu_usb_typec_used = <0>;
	wakeup_usb_in;
	wakeup_usb_out;
};

我们将dts中的pmu_usbpc_cur设为1500后进行测试,发现仍然起不来,逻辑分析仪显示仍然是下0x17 0x88,没办法我们只好去跟代码了。
通过compatible查找到文件为axp2202_usb_power.c
函数axp2202_set_iin_limit为限流函数,添加打印后发现其当连接pc时下了500ma的参数

static int axp2202_set_iin_limit(struct regmap *regmap, int mA)
{
	printk("axp2202_set_iin_limit mA = %d\n",mA);
	unsigned int data;
	int ret = 0;
	data = mA;
     printk("pmu_debug: data = %d",data);

	if (data > 3250)
		data = 3250;
	if	(data < 100)
		data = 100;
	data = ((data - 100) / 50);
	ret = regmap_update_bits(regmap, AXP2202_IIN_LIM, GENMASK(5, 0),
				 data);
	if (ret < 0)
		return ret;

	return 0;
}

在文件中共有3处调用

static int axp2202_usb_set_property(struct power_supply *psy,
				enum power_supply_property psp,
				const union power_supply_propval *val)
    
static irqreturn_t axp2202_irq_handler_usb_in(int irq, void *data)   

static void axp2202_usb_set_current_fsm(struct work_struct *work) 

通过再次添加打印,我们发现axp2202_usb_set_property为该次调用函数

	.set_property = axp2202_usb_set_property,
 static int ps_set_cur_charge_cntl_limit(struct thermal_cooling_device *tcd,
					unsigned long state)
     {	ret = psy->desc->set_property(psy,
		POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT, &val);}
  	.set_cur_state = ps_set_cur_charge_cntl_limit,

最后发现为sunxi_udc.c下的sunxi_set_cur_vol_work调用

void sunxi_set_cur_vol_work(struct work_struct *work)
{
#if !defined(SUNXI_USB_FPGA) && defined(CONFIG_POWER_SUPPLY)
	struct power_supply *psy = NULL;
	union power_supply_propval temp;

	if (of_find_property(g_udc_pdev->dev.of_node, "det_vbus_supply", NULL))
		psy = devm_power_supply_get_by_phandle(&g_udc_pdev->dev,
						     "det_vbus_supply");

	if (!psy || IS_ERR(psy)) {
		DMSG_PANIC("%s()%d WARN: get power supply failed\n",
			   __func__, __LINE__);
	} else {
		temp.intval = 2500;//改大到2500

		power_supply_set_property(psy,
					POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT, &temp);
	}
#endif
}

标签:pmu,set,usb,power,supply,掉电,pc,A133,data
来源: https://blog.csdn.net/qq_45362097/article/details/120710425