USB peripheral mode failure

Hi all,

I’m working on a device designed base on BeagleBoneBlack, but there is something wrong in OTG mode.

First of all, the hardware is modified for ID pin and I also can get the right state in both host & peripheral mode. I modify the dts file in kernel/arch/arm/boot/dts/, and re-define the USB mode as:

&usb0 {
status = “okay”;
dr_mode = “otg”;
};

  1. In my device, the host mode( it means I hardcode it to ‘host’ in dts file), it work fine.

  2. In my device, both peripheral & otg (also means the config in dts), the USB can’t work at all.

  3. In beagleboneblack, USB0 peripheral work fine with a release TF card system I downloaded.

  4. In beagleboneblack, USB0 peripheral can NOT work with my kernel.

  5. In beagleboneblack, USB0 peripheral can NOT work even with the kernel I rebuild just clone from git.

Case2 shows it is not related with OTG switch, and case3-5 shows that there has difference between the release code and binary. It looks like something wrong with the release source code in github, but I think the release version should be OK. Maybe I missed any details?

When the USB0 peripheral worked fine, kernel log as:

gadget: high-speed config #1: Multifunction with RNDIS
IPv6: ADDRCONF(NETDEV_CHANGE): usb0: link becomes ready

But there is nothing printed in my kernel when I plug-in the USB. I think it must be some configs missing so kernel can’t get any interruption. Any suggestion about this?