MTK 平台修改或查看USB驱动能力有三种方法

 

 MTK 平台修改或查看USB驱动能力有三种方法:

 

 1、工模菜单

    通过"*#*#3646633#*#*"进入工程模式,通过如下菜单可以查看修改USB驱动能力:

    hardware testing-->USB-->USB PHY TUning-->USB_DRIVING_CAPABILITY;

 

 2、USB节点

     有ROOT权限image通过下面节点查看修改驱动能力:

     /sys/kernel/debug/usb20_phy/USB_DRIVING_CAPABILITY

 

 3、修改CODE:

    

                   

 

方法1、修改set_usb_phy_mode()函数

有时候device的驱动能力调整好,但手机作为host确存在连接不上device的问题,这时就需要单独调节device和host的驱动能力,以6765为例,可在如下位置进行修改:

        

/kernel-4.9/drivers/misc/mediatek/usb20/mt6765/usb20_phy.c
void set_usb_phy_mode(int mode)
{
 switch (mode) {
 case PHY_DEV_ACTIVE:
 /* VBUSVALID=1, AVALID=1, BVALID=1, SESSEND=0, IDDIG=1, IDPULLUP=1 */
 USBPHY_CLR32(0x6C, (0x10<<0));
 USBPHY_SET32(0x6C, (0x2F<<0));
 USBPHY_SET32(0x6C, (0x3F<<8));
 // device mode add here 其中u2_vrt_ref与u2_term_ref 最大为0x7,u2_enhance最大为0x3//
USBPHY_CLR32(OFFSET_RG_USB20_VRT_VREF_SEL,
	VAL_MAX_WIDTH_3 << SHFT_RG_USB20_VRT_VREF_SEL);
USBPHY_SET32(OFFSET_RG_USB20_VRT_VREF_SEL,
	u2_vrt_ref << SHFT_RG_USB20_VRT_VREF_SEL);
USBPHY_CLR32(OFFSET_RG_USB20_TERM_VREF_SEL,
        VAL_MAX_WIDTH_3 << SHFT_RG_USB20_TERM_VREF_SEL);
USBPHY_SET32(OFFSET_RG_USB20_TERM_VREF_SEL,
        u2_term_ref << SHFT_RG_USB20_TERM_VREF_SEL);
USBPHY_CLR32(OFFSET_RG_USB20_PHY_REV6,
        VAL_MAX_WIDTH_2 << SHFT_RG_USB20_PHY_REV6);
USBPHY_SET32(OFFSET_RG_USB20_PHY_REV6,
        u2_enhance<<SHFT_RG_USB20_PHY_REV6);
break;
 case PHY_HOST_ACTIVE:
 /* VBUSVALID=1, AVALID=1, BVALID=1, SESSEND=0, IDDIG=0, IDPULLUP=1 */
 USBPHY_CLR32(0x6c, (0x12<<0));
 USBPHY_SET32(0x6c, (0x2d<<0));
 USBPHY_SET32(0x6c, (0x3f<<8));
 //host mode add here,与device mode相同,但需设定不同的us_vrt_ref/u2_term_ref/u2_enhance//
 break;
 case PHY_IDLE_MODE:
 /* VBUSVALID=0, AVALID=0, BVALID=0, SESSEND=1, IDDIG=0, IDPULLUP=1 */
 USBPHY_SET32(0x6c, (0x11<<0));
 USBPHY_CLR32(0x6c, (0x2e<<0));
 USBPHY_SET32(0x6c, (0x3f<<8));
 break;
 default:
 DBG(0, "mode error %d\n", mode);
 }
 DBG(0, "force PHY to mode %d, 0x6c=%x\n", mode, USBPHY_READ32(0x6c));
}

 方法2、直接修改usb_phy_tuning(void)函数,修改为:

void usb_phy_tuning(void)
{
    printk("mtk_usb_phy_tuning is_host_mode:%d", mtk_musb->is_host_mode);
    if (mtk_musb->is_host_mode) {
	if (u2_vrt_ref != -1) {
		if (u2_vrt_ref <= VAL_MAX_WIDTH_3) {
			USBPHY_CLR32(OFFSET_RG_USB20_VRT_VREF_SEL,
				VAL_MAX_WIDTH_3 << SHFT_RG_USB20_VRT_VREF_SEL);
			USBPHY_SET32(OFFSET_RG_USB20_VRT_VREF_SEL,
				u2_vrt_ref << SHFT_RG_USB20_VRT_VREF_SEL);
		}
	}
	if (u2_term_ref != -1) {
		if (u2_term_ref <= VAL_MAX_WIDTH_3) {
			USBPHY_CLR32(OFFSET_RG_USB20_TERM_VREF_SEL,
				VAL_MAX_WIDTH_3 << SHFT_RG_USB20_TERM_VREF_SEL);
			USBPHY_SET32(OFFSET_RG_USB20_TERM_VREF_SEL,
				u2_term_ref << SHFT_RG_USB20_TERM_VREF_SEL);
		}
	}
	if (u2_enhance != -1) {
		if (u2_enhance <= VAL_MAX_WIDTH_2) {
			USBPHY_CLR32(OFFSET_RG_USB20_PHY_REV6,
				VAL_MAX_WIDTH_2 << SHFT_RG_USB20_PHY_REV6);
			USBPHY_SET32(OFFSET_RG_USB20_PHY_REV6,
					u2_enhance<<SHFT_RG_USB20_PHY_REV6);
		}
    } else {
      ..........
      与host_modecode一致,只是需要设定不同的参数
    }  
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值