机器接笔记本电脑有的usb口无法识别设备adb
- 问题描述
mt6789平台 android14机器接笔记本电脑有的usb口无法识别设备 - 问题分析
接有的usb口不识别,目前验证用测试那边那台联想笔记本,右侧2个usb口无法识别
用我们软件笔记本,usb口都能识别,但是接上typec转usb hub,机器连接hub,会出现有的hub能识别
有的hub不能识别
通过分析log
比较明显的能看到,不识别log里面,有识别usb hub log
<6>[ 326.143366][ T5398] kworker/0:3: usb 2-1: [name:usbcore&]new high-speed USB device number 11 using musb-hdrc
<6>[ 326.298794][ T5398] kworker/0:3: usb 2-1: [name:usbcore&]New USB device found, idVendor=1a40, idProduct=0101, bcdDevice= 1.11
<6>[ 326.298830][ T5398] kworker/0:3: usb 2-1: [name:usbcore&]New USB device strings: Mfr=0, Product=1, SerialNumber=0
<6>[ 326.298840][ T5398] kworker/0:3: usb 2-1: [name:usbcore&]Product: USB 2.0 Hub
<6>[ 326.301294][ T5398] kworker/0:3: hub 2-1:1.0: [name:usbcore&]USB hub found
识别log里面,最终是usb断开log,没有usb识别log
<6>[ 125.579186][ T3523] kworker/0:3: usb 2-1: [name:usbcore&]USB disconnect, device number 7
从这里可以猜测,不识别设备时,应该是设备做了host,没有做device
进一步分析log
//不识别
<6>[ 325.568481][T305207] kworker/u16:14: mt_usb mt_usb: [name:musb_hdrc&]role_sx_set role 1, latest_role: 0
//识别
<6>[ 126.233551][T400263] kworker/u16:5: mt_usb mt_usb: [name:musb_hdrc&]role_sx_set role 2, latest_role: 0
role值不一样,1表示host,2表示device,但是mt_usb_role_sx_set这个函数被那里调用,没有查出来
继续看log
//不识别
<6>[ 325.567580][T305207] kworker/u16:14: mtk-extcon-usb soc:extcon_usb: [name:extcon_mtk_usb&]cur_dr(0) new_dr(1)
//识别
<6>[ 126.232738][T400263] kworker/u16:5: mtk-extcon-usb soc:extcon_usb: [name:extcon_mtk_usb&]cur_dr(0) new_dr(2)
new_dr这个值不一样,这个值1也表示host,2表示device
分析这个值是从哪里传过来
extcon-mtk-usb.c mtk_usb_extcon_set_role -> droi_set_usb_mode -> mt6366_dummy_chr_type_det.c do_charger_detect
do_charger_detect里面chg_type来决定是走host还是走device,chg_type是从这个函数里面得来hw_charging_get_charger_type
这个函数里面调用charger_dev_enable_chg_type_det获取chg_type,最终是调用到充电ic驱动
enable_chg_type_det,实际对应sgm4154x_2_ext_chgdet
这个函数里面通过读取充电ic寄存器,来获取当前typec充电类型,正常识别时,读取类型是SDP
不能识别时,读取类似是CDP,SDP类型等于STANDARD_HOST,CDP类型等于CHARGING_HOST
do_charger_detect里面判断,STANDARD_HOST才去设置device,其他都会设置成host
不识别
<4>[ 325.558738][ T244] irq/152-mt6366-: mv01 droi_usb_dc 1,2
识别
<4>[ 126.232369][ T244] irq/152-mt6366-: mv01 droi_usb_dc 1,1
if(STANDARD_HOST == ddata->chg_type)
{
droi_set_usb_mode(2);//device mode
}else if( STANDARD_CHARGER == ddata->chg_type )
{
droi_usb_hub_switch(1);
droi_set_usb_mode(1);//host mode
}else
{
droi_usb_hub_switch(1);
droi_set_usb_mode(1);//host mode
}
这里没有对CDP进行判断,所以添加对CDP判断就可以正常了
具体修改如下
+++ b/ANDROID.VND/droi/mv01/mv0144/mv0144_yd_t86x/override/kernel-5.10/drivers/power/supply/mt6366_dummy_chr_type_det.c
@@ -327,7 +327,7 @@ static void do_charger_detect(struct mt6366_chrdet_data *ddata)
break;
case 0://dc in, usb in
case 1://dc out ,usb in
- if(STANDARD_HOST == ddata->chg_type)
+ if(STANDARD_HOST == ddata->chg_type || CHARGING_HOST == ddata->chg_type)
{
droi_set_usb_mode(2);//device mode
}else if( STANDARD_CHARGER == ddata->chg_type )