讯为的精英版使用一个Hub,分出了2路USB和一路网口,另外有一路"OTG",但是却只能当作Device使用,不能作为Host.经过沟通,技术支持说能够支持,但是并没有告知如何修改,只让看三星提供的手册.(大写的尼玛).
USB设备应该说相当复杂,完全摸不到头绪.但还是咬着牙看源码.发现在arch/arm/mach-exynos/中有个setup-usb-phy.c文件.里面有关于物理设备的操作,然后继续找
有如图函数和我画框的部分.再顺着画框部分找
可以看到这个就是主从模式选择功能.
再看exynos4_usb_phy0_init函数,在exynos_usb_mux_change函数前,有个USB_HOST_MODE_ONLY宏,在这声明
通过printk可以知道,USB_HOST_MODE_ONLY这个宏是定义了的.也就是说exynos_usb_mux_change(pdev, 0);这个函数执行了.执行的结果就是,让OTG运行在从模式,所以软件上面的更改只需要把这个地方的0改成1,就结束了.
而硬件上面,我们都知道OTG作为主模式使用的话,是需要给设备供电的,而讯为的vbus引脚通过一个10K的电阻直接连接cpu和这个OTG接插件.而三星提供的文档里面有这样的结构
图不是很清楚,通过下面一张图可以猜出来和vbus相连的是vdd50
所以,硬件上的解决方案,如果不使用Device模式的话,直接弄个5V电源上来就可以了.然后重新编译内核,烧写进去,你会见证奇迹.
我水平有限,也没太多时间更详细的去学习相关驱动,所以只是做了这样的一个取巧的方式,完全可以使用.以后有时间再去纠结如何更漂亮的完成这个功能.(说实话技术支持真的不怎么样,可能是太忙了).我这也算是技术支持了,不知道能给点提成不!!开个玩笑.
如果说还想通过ID线来控制主从模式,这个就比较麻烦了.暂时不研究了.不过大概知道怎么修改.
转载地址:http://blog.csdn.net/aifei7320/article/details/54143647