From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: usb: musb: Support gadget mode when the port is set to dual role From: Bin Liu Message-Id: <20190322132846.GD25852@uda0271908> Date: Fri, 22 Mar 2019 08:28:46 -0500 To: Maxime Ripard Cc: Greg Kroah-Hartman , Paul Kocialkowski , Paul Kocialkowski , linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Chen-Yu Tsai List-ID: T24gRnJpLCBNYXIgMjIsIDIwMTkgYXQgMDI6MDk6NTNQTSArMDEwMCwgTWF4aW1lIFJpcGFyZCB3 cm90ZToKPiBPbiBGcmksIE1hciAyMiwgMjAxOSBhdCAwNzo0NjoyMkFNIC0wNTAwLCBCaW4gTGl1 IHdyb3RlOgo+ID4gT24gVGh1LCBNYXIgMjEsIDIwMTkgYXQgMDU6NDE6MzhQTSArMDEwMCwgR3Jl ZyBLcm9haC1IYXJ0bWFuIHdyb3RlOgo+ID4gPiBPbiBUaHUsIE1hciAyMSwgMjAxOSBhdCAwMjow MTozM1BNICswMTAwLCBNYXhpbWUgUmlwYXJkIHdyb3RlOgo+ID4gPiA+IEhpLAo+ID4gPiA+Cj4g PiA+ID4gSSdtIHJldml2aW5nIHRoaXMgdGhyZWFkIGEgYml0LCBiZWNhdXNlIEkgZW5jb3VudGVy ZWQgdGhpcyBidWcgdG9kYXkuCj4gPiA+ID4KPiA+ID4gPiBPbiBUaHUsIE1hciAyMSwgMjAxOSBh dCAxMTowMjoxMEFNICswMTAwLCBCaW4gTGl1IHdyb3RlOgo+ID4gPiA+ID4gT24gU2F0LCBBcHIg MjEsIDIwMTggYXQgMTI6NTk6MjNQTSArMDIwMCwgUGF1bCBLb2NpYWxrb3dza2kgd3JvdGU6Cj4g PiA+ID4gPiA+IEhpLAo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBMZSB2ZW5kcmVkaSAyMCBhdnJp bCAyMDE4IMOgIDA5OjI1IC0wNTAwLCBCaW4gTGl1IGEgw6ljcml0IDoKPiA+ID4gPiA+ID4gPiBP biBUaHUsIE1hciAyOSwgMjAxOCBhdCAwMTo1NzoyNFBNICswMjAwLCBQYXVsIEtvY2lhbGtvd3Nr aSB3cm90ZToKPiA+ID4gPiA+ID4gPiA+IEhpLAo+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4g PiA+IE9uIFRodSwgMjAxOC0wMy0yOSBhdCAxMToyMyArMDIwMCwgTWF4aW1lIFJpcGFyZCB3cm90 ZToKPiA+ID4gPiA+ID4gPiA+ID4gT24gV2VkLCBNYXIgMjgsIDIwMTggYXQgMTE6NTI6MTNQTSAr MDIwMCwgUGF1bCBLb2NpYWxrb3dza2kgd3JvdGU6Cj4gPiA+ID4gPiA+ID4gPiA+ID4gVGhpcyBh bGxvd3MgZHVhbC1yb2xlIHBvcnRzIHRvIGJlIHJlcG9ydGVkIGFzIGhhdmluZyBnYWRnZXQgbW9k ZQo+ID4gPiA+ID4gPiA+ID4gPiA+IGJ5Cj4gPiA+ID4gPiA+ID4gPiA+ID4gdGhlCj4gPiA+ID4g PiA+ID4gPiA+ID4gbXVzYl9oYXNfZ2FkZ2V0IGhlbHBlci4gVGhpcyBpcyByZXF1aXJlZCB0byBl bmFibGUgTVVTQiBhdCBhbGwKPiA+ID4gPiA+ID4gPiA+ID4gPiB3aXRoCj4gPiA+ID4gPiA+ID4g PiA+ID4gTVVTQgo+ID4gPiA+ID4gPiA+ID4gPiA+IGdsdWUgbGF5ZXJzIHRoYXQgc2V0IHRoZSBw b3J0IG1vZGUgdG8gTVVTQl9QT1JUX01PREVfRFVBTF9ST0xFCj4gPiA+ID4gPiA+ID4gPiA+ID4g YXQKPiA+ID4gPiA+ID4gPiA+ID4gPiBpbml0Lgo+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+ID4gPiA+ID4gTW9zdCBub3RhYmx5LCB0aGlzIGFsbG93cyBjYWxsaW5nIG11c2Jfc3RhcnQg d2hlbiBuZWVkZWQgaW4gdGhlCj4gPiA+ID4gPiA+ID4gPiA+ID4gdmlydHVhbAo+ID4gPiA+ID4g PiA+ID4gPiA+IE1VU0Igcm9vdCBIVUIsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgY3VycmVu dCBtb2RlIHNob3VsZCBiZQo+ID4gPiA+ID4gPiA+ID4gPiA+IGdhZGdldAo+ID4gPiA+ID4gPiA+ ID4gPiA+IG9yIGhvc3QuCj4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiBU aGlzIGZpeGVzIFVTQiBPVEcgb24gQWxsd2lubmVyIGRldmljZXMgdGhhdCBJIGNvdWxkIHRlc3Qg aXQKPiA+ID4gPiA+ID4gPiA+ID4gPiB3aXRoLAo+ID4gPiA+ID4gPiA+ID4gPiA+IG1haW5seSBB MjAgZGV2aWNlcy4KPiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiA+IFNpZ25l ZC1vZmYtYnk6IFBhdWwgS29jaWFsa293c2tpIDxjb250YWN0QHBhdWxrLmZyPgo+ID4gPiA+ID4g PiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiBTdXJlbHkgdGhlcmUncyBtb3JlIHRvIGl0IHRoYW4g dGhhdC4gVGhlIGdhZGdldCBtb2RlIG9mIEEyMCBib2FyZHMKPiA+ID4gPiA+ID4gPiA+ID4gaGF2 ZSBiZWVuIHdvcmtpbmcgaW4gdGhlIHBhc3QsIGluY2x1ZGluZyB3aGVuIGNvbXBpbGluZyB3aXRo IG1VU0IKPiA+ID4gPiA+ID4gPiA+ID4gc2V0dXAgYXMgZHVhbCByb2xlLgo+ID4gPiA+ID4gPiA+ ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiBJcyB0aGlzIGEgcmVncmVzc2lvbiBzaW5jZSBhIHBhcnRp Y3VsYXIgY29tbWl0PyBPciBpcyB0aGVyZQo+ID4gPiA+ID4gPiA+ID4gPiBhbm90aGVyLAo+ID4g PiA+ID4gPiA+ID4gPiBkZWVwZXIgaXNzdWUgb3Zlcmxvb2tlZCBpbiB0aGUgY29tbWl0IGxvZz8K PiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiBUaGUgcm9vdCBvZiB0aGUgaXNzdWUgaGVy ZSBpcyB0aGF0IG11c2Jfc3RhcnQgaXMgbm90IGNhbGxlZCBhdCBhbnkKPiA+ID4gPiA+ID4gPiA+ IHBvaW50Cj4gPiA+ID4gPiA+ID4gPiB3aXRob3V0IHRoaXMgcGF0Y2guIE15IHVuZGVyc3RhbmRp bmcgb2YgdGhlIGZsb3cgaXMgdGhlIGZvbGxvd2luZzoKPiA+ID4gPiA+ID4gPiA+IHdoZW4KPiA+ ID4gPiA+ID4gPiA+IHRoZSBQSFkgZGV0ZWN0cyB0aGF0IHRoZXJlIHdhcyBhIFZCVVMvSUQgY2hh bmdlLCBpdCB3aWxsIG5vdGlmeSBpdHMKPiA+ID4gPiA+ID4gPiA+IGxpc3RlbmVycyAobWFpbmx5 IHRoZSBtdXNiIHN1bnhpIGdsdWUgbGF5ZXIpLiBUaGlzIHdpbGwgdGhlbgo+ID4gPiA+ID4gPiA+ ID4gc2NoZWR1bGUKPiA+ID4gPiA+ID4gPiA+IHRoZSBkcml2ZXIncyB3b3JrIChzdW54aV9tdXNi X3dvcmspLCB3aGljaCBkb2VzIG5vdGhpbmcgc2luY2UgdGhlCj4gPiA+ID4gPiA+ID4gPiBTVU5Y SV9NVVNCX0ZMX0VOQUJMRUQgYml0IHdhcyBuZXZlciBzZXQuIFRoaXMgYml0IGlzIG9ubHkgc2V0 IGFmdGVyCj4gPiA+ID4gPiA+ID4gPiBjYWxsaW5nIHN1bnhpX211c2JfZW5hYmxlLCB3aGljaCBp cyBjYWxsZWQgZnJvbQo+ID4gPiA+ID4gPiA+ID4gbXVzYl9wbGF0Zm9ybV9lbmFibGUsCj4gPiA+ ID4gPiA+ID4gPiB0aGF0IG9yaWdpbmF0ZXMgZnJvbSBtdXNiX3N0YXJ0Lgo+ID4gPiA+ID4gPiA+ ID4KPiA+ID4gPiA+ID4gPiA+IEN1cnJlbnRseSBJIHNlZSB0d28gcGxhY2VzIHdoZXJlIG11c2Jf c3RhcnQgaXMgY2FsbGVkOgo+ID4gPiA+ID4gPiA+ID4gKiBtdXNiX3ZpcnRodWIKPiA+ID4gPiA+ ID4gPiA+ICogbXVzYl9nYWRnZXQKPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiBJbiB0 aGUgbGF0dGVyIGNhc2UsIGl0IGlzIGluIHR1cm4gY2FsbGVkIGZyb20gdWRjX3N0YXJ0LCB3aGlj aAo+ID4gPiA+ID4gPiA+ID4gc2hvdWxkCj4gPiA+ID4gPiA+ID4gPiBwcm9iYWJseSAoY29ycmVj dCBtZSBpZiBJJ20gd3JvbmcpIGhhcHBlbiBsYXRlciBpbiB0aGUgY2FsbCBjaGFpbgo+ID4gPiA+ ID4gPiA+ID4gdGhhbgo+ID4gPiA+ID4gPiA+ID4gSUQvVkJVUyBjaGFuZ2Ugbm90aWZpY2F0aW9u IHRpbWUuCj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBJIGRvbid0IHRoaW5rIGl0IGlzIGNv cnJlY3QgdGhhdCB1ZGNfc3RhcnQoKSBpcyB0cmlnZ2VyZWQgYnkgSUQvVkJVUwo+ID4gPiA+ID4g PiA+IGV2ZW50cywgYnV0IEkgZG9uJ3QgaGF2ZSBhbiBBbGx3aW5uZXIgcGxhdGZvcm0gdG8gdmVy aWZ5IHRoZSBjYWxsZmxvdy4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gWWVzIHlvdSdyZSByaWdo dCwgSSBkaWRuJ3QgbWFrZSBteXNlbGYgdmVyeSBjbGVhciBoZXJlLiBJIGRpZG4ndAo+ID4gPiA+ ID4gPiBpbnZlc3RpZ2F0ZSB0aGUgdWRjX3N0YXJ0IGNhbGwgcGF0aCBtdWNoIHNpbmNlIGl0IHdh cyBhcHBhcmVudGx5IG5vdCB0aGUKPiA+ID4gPiA+ID4gY3VscHJpdC4KPiA+ID4gPiA+ID4KPiA+ ID4gPiA+ID4gPiBIYXZlIHlvdSB0cmllZCB0byBsb2FkIHdpdGggYSBnYWRnZXQgZHJpdmVyPyBX aGVuIGEgZ2FkZ2V0IGZ1bmN0aW9uIGlzCj4gPiA+ID4gPiA+ID4gYm91bmQgdG8gVURDLCB1ZGNf c3RhcnQoKSBpcyB0cmlnZ2VyZWQsIHdoaWNoIGluIHR1cm4gY2FsbHMKPiA+ID4gPiA+ID4gPiBt dXNiX3N0YXJ0KCkuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IEl0IGRvZXMgd29yayB1bmRlciB0 aGF0IHNjZW5hcmlvLCBhbHRob3VnaCBteSB1c2VkIGNhc2UgaGVyZSBpcyB1c2luZwo+ID4gPiA+ ID4gPiBtdXNiIHdpdGggRFVBTF9ST0xFIGJ1dCBubyBnYWRnZXQgZHJpdmVyIGxvYWRlZC4gVGhh dCBpdCwgSSB3YW50IHRoZQo+ID4gPiA+ID4gPiBtdXNiX3N0YXJ0IGNhbGwgdG8gb3JpZ2luYXRl IGZyb20gdGhlIHZpcnR1YWwgaHViLCBub3QgZnJvbSB0aGUgZ2FkZ2V0Cj4gPiA+ID4gPiA+IHNp ZGUuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiBJbiB0aGUgZm9ybWVyIGNhc2UsIG11c2Jf c3RhcnQgaXMgY2FsbGVkIGluIHRoZSByb290IGNvbnRyb2xsZXIgaHViCj4gPiA+ID4gPiA+ID4g PiBjb250cm9sLCB3aGVuIHNldHRpbmcgdGhlIFVTQl9QT1JUX0ZFQVRfUE9XRVIgZmVhdHVyZS4g VGhpcyBsb29rcwo+ID4gPiA+ID4gPiA+ID4gcGVyZmVjdGx5IGxlZ2l0IGFuZCBJTU8gdGhpcyBp cyB3aGVyZSBpdCBzaG91bGQgYmUgaW5pdGlhbGx5IGNhbGxpbmcKPiA+ID4gPiA+ID4gPiA+IG11 c2Jfc3RhcnQgaW4gdGhlIGR1YWwgcm9sZSBjYXNlLiBUaGUga2VybmVsIGlzIGluZGVlZCBzZXR0 aW5nIHRoZQo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gTm8gYWN0dWFsbHkuIEEgZHVhbC1y b2xlIHBvcnQgc2hvdWxkIGJlIGluIGJfaWRsZSBzdGF0ZSBieSBkZWZhdWx0LCBzbwo+ID4gPiA+ ID4gPiA+IGxvZ2ljYWxseSBhbGwgYWN0aW9ucyBzaG91bGQgZ28gdG8gdGhlIGdhZGdldCBwYXRo IHVudGlsIHRoZSBwb3J0Cj4gPiA+ID4gPiA+ID4gc3dpdGNoZXMgdG8gaG9zdCBtb2RlLgo+ID4g PiA+ID4gPgo+ID4gPiA+ID4gPiBJdCBtYWtlcyBzZW5zZSB0aGF0IHRoZSBwb3J0IHNob3VsZCBi ZSBpbiBiX2lkbGUgc3RhdGUgYnkgZGVmYXVsdCwgYnV0Cj4gPiA+ID4gPiA+IGhlcmUgaXQgZmFp bHMgdG8gc3dpdGNoIHRvIGhvc3QgbW9kZSB3aGVuIHRoZSBJRCBwaW4gZGV0ZWN0cyB0aGF0IGl0 Cj4gPiA+ID4gPiA+IHNob3VsZC4gT3IgZG9lcyBiX2lkbGUgc3RhdGUgZW50YWlsIHRoYXQgYSBn YWRnZXQgbXVzdCBiZSBsb2FkZWQgKHBlcgo+ID4gPiA+ID4gPiB0aGUgVVNCIHNwZWMpLCBhbmQg dGh1cyBub3RoaW5nIHNob3VsZCAoZXZlcikgaGFwcGVuIHVudGlsIHRoYXQgaGFwcGVucz8KPiA+ ID4gPiA+ID4KPiA+ID4gPiA+ID4gSSBmaW5kIGl0IHJlYWxseSBvZGQgdG8gbmVlZCBhIGdhZGdl dCBkZXZpY2UgdG8gdHJpZ2dlciBob3N0IG1vZGUuCj4gPiA+ID4gPiA+IFRoaXMgcGF0Y2ggZG9l cyBmaXggdGhlIGlzc3VlLCBidXQgSSBhbSBwdXp6bGVkIGFzIHRvIHdoeSBpdCBpcyBuZWVkZWQK PiA+ID4gPiA+ID4gaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGUgY29tbWVudCBhYm92ZSBpdCBtZW50 aW9ucyB0aGF0ICJJbiBPVEcgbW9kZSB3ZQo+ID4gPiA+ID4gPiBoYXZlIHRvIHdhaXQgdW50aWwg d2UgbG9hZGVkIGEgZ2FkZ2V0LiBXZSBkb24ndCByZWFsbHkgbmVlZCBhIGdhZGdldCBpZgo+ID4g PiA+ID4gPiB3ZSBvcGVyYXRlIGFzIGEgaG9zdCBidXQgd2Ugc2hvdWxkIG5vdCBzdGFydCBhIHNl c3Npb24gYXMgYSBkZXZpY2UKPiA+ID4gPiA+ID4gd2l0aG91dCBhIGdhZGdldCBvciBlbHNlIHdl IGV4cGxvZGUuIiwgd2hpY2ggaXMgYXBwYXJlbnRseSBjb21wYXRpYmxlCj4gPiA+ID4gPiA+IHdp dGggbXkgdXNlIGNhc2U6IGEgZ2FkZ2V0IGlzIG5vdCByZWFsbHkgbmVlZGVkIGFuZCBJJ20gbm90 IHRyeWluZyB0bwo+ID4gPiA+ID4gPiBzdGFydCBhIHNlc3Npb24gYXMgYSBkZXZpY2Ugd2l0aG91 dCBhIGdhZGdldCBsb2FkZWQuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IFdoYXQgZG8geW91IHRo aW5rPwo+ID4gPiA+ID4KPiA+ID4gPiA+IE9rYXksIHRoaXMgY2FtZSBkb3duIHRvIGFuIGFyZ3Vt ZW50IHRoYXQgd2hldGhlciB3ZSBzaG91bGQgcmVxdWlyZQo+ID4gPiA+ID4gbG9hZGluZyBhIGdh ZGdldCBkcml2ZXIgb24gYSBkdWFsLXJvbGUgcG9ydCB0byB3b3JrIGluIGhvc3QgbW9kZSwKPiA+ ID4gPiA+IHdoaWNoIGlzIGN1cnJlbnRseSByZXF1aXJlZCBvbiBtdXNiIHNpbmNlIGEgbG9uZyBs b25nIHRpbWUgYWdvLgo+ID4gPiA+ID4KPiA+ID4gPiA+IEkgdW5kZXJzdGFuZCB0aGUgcmVxdWly ZW1lbnQgaXMga2luZGEgdW5uZWNlc3NhcnksIGJ1dCBzaW5jZSBpdCBhbHJlYWR5Cj4gPiA+ID4g PiBleGlzdHMgb24gbXVzYiBzdGFjayBmb3IgYSBsb25nIHRpbWUsIEkgZG9uJ3QgcGxhbiB0byBj aGFuZ2UgaXQuIEJlY2F1c2UgSQo+ID4gPiA+ID4gY2Fubm90IHRoaW5rIG9mIGEgdXNlIGNhc2Ug aW4gcmVhbCBwcm9kdWN0cyB0aGF0IGRvZXNuJ3QgYXV0b21hdGljYWxseQo+ID4gPiA+ID4gbG9h ZCBhIGdhZGdldCBmdW5jdGlvbiBvbiB0aGUgZHVhbC1yb2xlIHBvcnQuCj4gPiA+ID4gPgo+ID4g PiA+ID4gSWYgeW91IGNhbiBleHBsYWluIGEgdXNlIGNhc2UgaW4gcmVhbCB3b3JsZCAobm90IGEg ZW5naW5lZXJpbmcgbGFiKSB0aGF0Cj4gPiA+ID4gPiB0aGUgZ2FkZ2V0IGRyaXZlciB3aWxsIG5v dCBiZSBsb2FkZWQgYXQgbGludXggYm9vdGluZyB1cCwgYnV0IGxhdGVyCj4gPiA+ID4gPiBiYXNl ZCBvbiB1c2VyJ3MgaW5wdXQsIEkgd2lsbCByZWNvbnNpZGVyIG15IGRlY2lzaW9uLiBUbyByZW1v dmUgdGhpcwo+ID4gPiA+ID4gcmVxdWlyZW1lbnQgZnJvbSBtdXNiIHN0YWNrLCB0aGUgd29yayBp cyBtb3JlIHRoYW4gdGhpcyBwYXRjaC4KPiA+ID4gPgo+ID4gPiA+IEkgaGF2ZSBvbmUgZm9yIHlv dTogd2UncmUgd29ya2luZyBvbiBhIGRldmljZSB0aGF0IGJvb3RzIHByZXR0eSBmYXN0LAo+ID4g PiA+IGFuZCB0aGVyZWZvcmUgYXJlIHB1c2hpbmcgYXMgbXVjaCB0aGluZ3MgYXMgd2UgY2FuIHRv IG1vZHVsZXMuIEl0Cj4gPiA+ID4gaW5jbHVkZXMgZ2FkZ2V0cywgdGhlIG11c2IgZHJpdmVyIGFu ZCBnbHVlLCBldGMuIFRoYXQgZG9lc24ndCBzb3VuZAo+ID4gPiA+IHdheSB2ZXJ5IGRpZmZlcmVu dCBmcm9tIHdoYXQgYSBnZW5lcmljIGRpc3RybyB3b3VsZCBkbyBhcyB3ZWxsLgo+ID4gPiA+Cj4g PiA+ID4gQXQgYm9vdCwgdGhlIHZhcmlvdXMgbW9kdWxlcyBmb3IgdGhlIGhhcmR3YXJlIGFyZSBs b2FkZWQKPiA+ID4gPiBhdXRvbWF0aWNhbGx5OiB0aGUgbXVzYiBnbHVlLCB0aGUgbXVzYiBjb3Jl LCBvdXIgVVNCIFBIWSwgZXRjLiBXZSBlbmQKPiA+ID4gPiB1cCBpbiBhIHNpdHVhdGlvbiB3aGVy ZSB0aGUgbXVzYiBkcml2ZXIgaXMgbG9hZGVkIGFuZCByZXBvcnRlZCB0byB3b3JrCj4gPiA+ID4g cHJvcGVybHkuIFRoZSBVU0IgY2FibGUgdG8gdGhlIE9URyBwb3J0IChpbiBwZXJpcGhlcmFsKSBt aWdodCBvciBtaWdodAo+ID4gPiA+IG5vdCBiZSBjb25uZWN0ZWQsIGl0J3Mga2luZCBvZiBpcnJl bGV2YW50Lgo+ID4gPiA+Cj4gPiA+ID4gVGhlIGdhZGdldHMsIGhvd2V2ZXIsIGFyZSBub3QgbG9h ZGVkIGF1dG9tYXRpY2FsbHkuCj4gPiA+ID4KPiA+ID4gPiBOb3cgY29tZXMgYSB1c2VyIHRoYXQg d2FudHMgdG8gdXNlIG11c2IgYXMgYSBob3N0LCBhbmQgY29ubmVjdCBhCj4gPiA+ID4gcHJvcGVy IFVTQiBhZGFwdGVyLCB0aGF0IHdpcmVzIHRoZSBJRCBwaW4gcHJvcGVybHkuIEluIG91ciBjYXNl LCB0aGUKPiA+ID4gPiBwaHkgZGV0ZWN0cyBpdCwgcmVwb3J0cyB0aGUgbW9kZSBjaGFuZ2UsIGFu ZCAuLi4uIG5vdGhpbmcuCj4gPiA+ID4KPiA+ID4gPiBUaGF0IGRvZXNuJ3QgcmVhbGx5IGxvb2sg bGlrZSBhbiBlbmdpbmVlcmluZyBsYWIgc2V0dXAgdG8gbWUuCj4gPiA+Cj4gPiA+IEkgYWdyZWUs IHRoYXQgc291bmRzIGxpa2UgYSB2YWxpZCBzZXR1cC4KPiA+ID4KPiA+ID4gQWxzbyByZWFsaXpl IHRoYXQgQW5kcm9pZCBpcyBwdXNoaW5nIHRvIGhhdmUgYWxsIGRyaXZlcnMgYXMgbW9kdWxlcywg c28KPiA+ID4geW91IHdpbGwgc3RhcnQgdG8gc2VlIGEgd2hvbGUgbG90IG1vcmUgZGV2aWNlcyBv dXQgdGhlcmUgYmUgbW9kdWxhcgo+ID4gPiBpbnN0ZWFkIG9mIHN0YXRpY2FsbHkgYnVpbHQga2Vy bmVscy4gIFNvIGlzc3VlcyBsaWtlIHRoaXMgYXJlIGdvb2QgdG8KPiA+ID4gcmVzb2x2ZSA6KQo+ ID4KPiA+IFRoaXMgaXNzdWUgaGVyZSBpcyBub3QgcmVsYXRlZCB0byBidWlsZGluZyBhbGwgZHJp dmVycyBhcyBtb2R1bGVzLiBUb2RheQo+ID4gd2UgYWxyZWFkeSBoYXZlIGFsbCBtdXNiIHJlbGF0 ZWQgZHJpdmVycyBpbmNsdWRpbmcgZ2FkZ2V0IGRyaXZlcnMgaW4KPiA+IG1vZHVsZXMuCj4gPgo+ ID4gVGhlIGlzc3VlIGRpc2N1c3NlZCBoZXJlIGlzIHRoYXQgd2hlbiBtdXNiIGlzIGNvbmZpZ3Vy ZWQgaW4gZHVhbC1yb2xlCj4gPiBtb2RlIChkcl9tb2RlID0gJ290ZycgaW4gZHRzKSwgYSBnYWRn ZXQgZHJpdmVyIGhhcyB0byBiZSBib3VuZCB0byB0aGUKPiA+IHVkYyB0byBtYWtlIG11c2Igd29y a2luZyBpbiBob3N0IG1vZGUuCj4gPgo+ID4gSSBuZXZlciBkaXNhZ3JlZSBpdCBpcyBub3QgaWRl YWwsIGJ1dCBJIGNvbnNpZGVyIGl0IGlzIG1pbm9yIC0gc2luY2UgdGhlCj4gPiBwb3J0IGlzIGNv bmZpZ3VyZWQgdG8gZHVhbC1yb2xlIG1vZGUsIGl0IGlzIGludGVuZGVkIHRvIHdvcmsgaW4KPiA+ IHBlcmlwaGVyYWwgbW9kZSwgdGhlbiB3aHkgbm90IGF1dG9tYXRpY2FsbHkgbG9hZCB0aGUgZ2Fk Z2V0IGRyaXZlciB3aGVuCj4gPiBsaW51eCBib290cyB1cC4KCkFnYWluLCB0aGluayBhYm91dCBh biBlbWJlZGRlZCBwcm9kdWN0LCBpZiBkcl9tb2RlIGlzICdvdGcnIHdoaWNoCmluZGljYXRlcyB0 aGUgcGVyaXBoZXJhbCBtb2RlIHdpbGwgYmUgdXNlZCBhdCBzb21lIHBvaW50LCB3aGVuIGFuZCBo b3cKdG8gbG9hZCB0aGUgZ2FkZ2V0IGRyaXZlciBpZiBpdCBpcyBub3QgbG9hZGVkIGF1dG9tYXRp Y2FsbHkgd2hlbiBMaW51eApib290cyB1cD8gdGhlIGVuZCB1c2VyIGRvZXNuJ3QgaGF2ZSBhY2Nl c3MgdG8gdGhlIGNvbnNvbGUuCgo+IEJlY2F1c2Ugbm8gb3RoZXIgY29udHJvbGxlciByZXF1aXJl cyBpdCBhbmQgdGhlcmVmb3JlIGl0J3Mgbm90Cj4gc3RhbmRhcmQgYW5kIHZpb2xhdGVzIHRoZSBw cmluY2lwbGUgb2YgbGVhc3Qgc3VycHJpc2U/CgpJIGtub3cgbm8gb3RoZXIgY29udHJvbGxlciBk b2VzIHRoaXMsIGJ1dCB0aGlzIGRvZXNuJ3QgbWVhbiBpdCBpcyBub3QKc3RhbmRhcmQuCgo+IEFu ZCBldmVuIHdpdGhvdXQgdGFraW5nIHRoaXMgaW50byBhY2NvdW50LCB0aGVyZSdzIGFsc28gdGhl IGZhY3QgdGhhdAo+IHdoaWxlIHRoZSAqaGFyZHdhcmUqIGNhbiBkbyBkdWFsIHJvbGUsIHRoZSBz b2Z0d2FyZSBtaWdodCBkZWNpZGUKPiBvdGhlcndpc2UuIElmIEkgZG9uJ3Qgd2FudCB0byBoYXZl IHN1cHBvcnQgZm9yIGFueSBnYWRnZXQgKGF0IGFsbCkgaW4KPiB0aGUgZW5kIHN5c3RlbSwgdGhl biB3aHkgc2hvdWxkIEkgYmUgZm9yY2VkIHRvIGNvbXBpbGUgYW5kIGxvYWQKPiBzb21ldGhpbmcg SSBkb24ndCBldmVuIHdhbnQgdG8gdXNlIGluIHRoZSBmaXJzdCBwbGFjZT8KCnRoZW4gZHJfbW9k ZSBzaG91bGQgYmUgc2V0IHRvICdob3N0JyBpbnN0ZWFkLCB5b3UgZG9uJ3QgaGF2ZSB0byBsb2Fk IGEKZ2FkZ2V0IGlmIHBlcmlwaGVyYWwgbW9kZSB3aWxsIG5ldmVyIGJlIHVzZWQuCgo+IFRoZSBz YW1lIHN0b3J5IGdvZXMgd2l0aCBjb2xkIGJvb3Rpbmcgd2l0aCBhIGRldmljZSBwbHVnZ2VkIGlu LCBhbmQKPiB0aGVyZWZvcmUgYWN0aW5nIGFzIGEgaG9zdCBmcm9tIHRoZSB2ZXJ5IGJlZ2lubmlu Zy4gSXQgd2lsbCBuZXZlciBldmVyCj4gYmUgY29uZmlndXJlZCBhcyBhIHBlcmlwaGVyYWwsIGV2 ZW4gdGhvdWdoIHlvdSBtaWdodCBoYXZlIGxvYWRlZCBhCj4gbW9kdWxlLgoKSSBkb24ndCB1bmRl cnN0YW5kIHRoZSBwcm9ibGVtIGluIHRoaXMgY2FzZSAtIHdpbGwgdGhlIGRldmljZSBldmVyIGJl CnJlbW92ZWQ/IHdpbGwgdGhlIHBvcnQgZXZlciBiZSB1c2VkIGluIHBlcmlwaGVyYWwgbW9kZT8g SWYgc28sIHRoZQpnYWRnZXQgZHJpdmVyIHdpbGwgYmUgbmVlZGVkLiBJZiBub3QsIGRyX21vZGUg c2hvdWxkIGJlICdob3N0JyB0aGVuIGEKZ2FkZ2V0IGRyaXZlciBpcyBub3QgbmVlZGVkLgoKPiA+ IFRvIHN1bW1hcmllcyBteSBjb21tZW50cyBvbiB0aGlzIGFnYWluLCBzaW5jZSBpdCBpcyBtaW5v ciBpbiBteSBvcGluaW9uLAo+ID4gSSB3b24ndCBzcGVuZCB0aW1lIHRvIHNvbHZlIGl0IG15c2Vs ZiAoaW4gYSBuZWFyIGZ1dHVyZSksIGJ1dCBJIGFtIG1vcmUKPiA+IHRoYW4gaGFwcHkgdG8gcmV2 aWV3IGFuZCB0YWtlIGFueSBwYXRjaCB3aGljaCBzb2x2ZSBpdC4KPiAKPiBQYXVsIHByb3ZpZGVk IGEgcGF0Y2ggdGhhdCBzdGFydGVkIHRoaXMgZGlzY3Vzc2lvbi4gWW91IG1lbnRpb25uZWQKPiB0 aGF0IGl0J3Mgbm90IGVub3VnaCBhbmQgb3RoZXIgcGFydHMgc2hvdWxkIGJlIG1pc3NpbmcuIFdo YXQgYXJlCj4gdGhvc2U/CgpUaGUgcHJldmlvdXMgZGlzY3Vzc2lvbiBoYXMgYmVlbiBhIHdoaWxl IGFnbywgYnV0IEkgcmV2aWV3ZCB0aGUgdGhyZWFkCmFnYWluLCBhdCBsZWFzdCBJIG1lbnRpb25l ZCBtdXNiX3N0YXJ0KCkgd2lsbCBiZSBjYWxsZWQgdHdpY2Ugd2l0aCB0aGlzCnBhdGNoLCBmaXJz dCBieSB0aGlzIHBhdGNoLCB0aGVuIHdoZW4gYSBnYWRnZXQgZHJpdmVyIGlzIGJvdW5kLgoKUmVn YXJkcywKLUJpbi4K From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.6 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED,USER_AGENT_MUTT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 122CCC43381 for ; Fri, 22 Mar 2019 13:29:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B78D42083D for ; Fri, 22 Mar 2019 13:29:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="bmpVEfZD" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728654AbfCVN3I (ORCPT ); Fri, 22 Mar 2019 09:29:08 -0400 Received: from fllv0015.ext.ti.com ([198.47.19.141]:39420 "EHLO fllv0015.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728106AbfCVN3H (ORCPT ); Fri, 22 Mar 2019 09:29:07 -0400 Received: from fllv0034.itg.ti.com ([10.64.40.246]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id x2MDSlmV014621; Fri, 22 Mar 2019 08:28:47 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1553261327; bh=GrcFBQrF8nyGzz82sFxVM033AJc2K9Gg0fwLh6oCOu0=; h=Date:From:To:CC:Subject:References:In-Reply-To; b=bmpVEfZDiBwcJ9yZGukaI+6IaHU/BZA6pTpBn9A3jpKseDCfyqPA509hy/XDF9JEm LWZaIkzrsX4/KFBXiyxQiIg4ZB94er78Fzl0IIv619/lthAztxXOZKs7dXo5TKwmq8 MlyZhtBdVmSYvoSC/0TZcY231Vw0x2OSsQSGzplU= Received: from DLEE105.ent.ti.com (dlee105.ent.ti.com [157.170.170.35]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x2MDSlfm121662 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 22 Mar 2019 08:28:47 -0500 Received: from DLEE103.ent.ti.com (157.170.170.33) by DLEE105.ent.ti.com (157.170.170.35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Fri, 22 Mar 2019 08:28:46 -0500 Received: from dflp33.itg.ti.com (10.64.6.16) by DLEE103.ent.ti.com (157.170.170.33) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1713.5 via Frontend Transport; Fri, 22 Mar 2019 08:28:47 -0500 Received: from localhost (ileax41-snat.itg.ti.com [10.172.224.153]) by dflp33.itg.ti.com (8.14.3/8.13.8) with ESMTP id x2MDSkBj011297; Fri, 22 Mar 2019 08:28:46 -0500 Date: Fri, 22 Mar 2019 08:28:46 -0500 From: Bin Liu To: Maxime Ripard CC: Greg Kroah-Hartman , Paul Kocialkowski , Paul Kocialkowski , , , Chen-Yu Tsai Subject: Re: [PATCH] usb: musb: Support gadget mode when the port is set to dual role Message-ID: <20190322132846.GD25852@uda0271908> Mail-Followup-To: Bin Liu , Maxime Ripard , Greg Kroah-Hartman , Paul Kocialkowski , Paul Kocialkowski , linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Chen-Yu Tsai References: <20180328215213.29538-1-contact@paulk.fr> <20180329092326.dayuccomq5zrywqo@flea> <1522324644.1746.19.camel@bootlin.com> <20180420142524.GB29011@uda0271908> <2db056d6f65ecbcdc4f31a37fe2e1b1ddfb93c87.camel@paulk.fr> <20180421143426.GA10632@LTA0271908.dhcp.ti.com> <20190321130133.zllt5pqbrhiecoch@flea> <20190321164138.GB11121@kroah.com> <20190322124622.GB25852@uda0271908> <20190322130953.kb4llrtz2nriyfbu@flea> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20190322130953.kb4llrtz2nriyfbu@flea> User-Agent: Mutt/1.5.21 (2010-09-15) X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Mar 22, 2019 at 02:09:53PM +0100, Maxime Ripard wrote: > On Fri, Mar 22, 2019 at 07:46:22AM -0500, Bin Liu wrote: > > On Thu, Mar 21, 2019 at 05:41:38PM +0100, Greg Kroah-Hartman wrote: > > > On Thu, Mar 21, 2019 at 02:01:33PM +0100, Maxime Ripard wrote: > > > > Hi, > > > > > > > > I'm reviving this thread a bit, because I encountered this bug today. > > > > > > > > On Thu, Mar 21, 2019 at 11:02:10AM +0100, Bin Liu wrote: > > > > > On Sat, Apr 21, 2018 at 12:59:23PM +0200, Paul Kocialkowski wrote: > > > > > > Hi, > > > > > > > > > > > > Le vendredi 20 avril 2018 à 09:25 -0500, Bin Liu a écrit : > > > > > > > On Thu, Mar 29, 2018 at 01:57:24PM +0200, Paul Kocialkowski wrote: > > > > > > > > Hi, > > > > > > > > > > > > > > > > On Thu, 2018-03-29 at 11:23 +0200, Maxime Ripard wrote: > > > > > > > > > On Wed, Mar 28, 2018 at 11:52:13PM +0200, Paul Kocialkowski wrote: > > > > > > > > > > This allows dual-role ports to be reported as having gadget mode > > > > > > > > > > by > > > > > > > > > > the > > > > > > > > > > musb_has_gadget helper. This is required to enable MUSB at all > > > > > > > > > > with > > > > > > > > > > MUSB > > > > > > > > > > glue layers that set the port mode to MUSB_PORT_MODE_DUAL_ROLE > > > > > > > > > > at > > > > > > > > > > init. > > > > > > > > > > > > > > > > > > > > Most notably, this allows calling musb_start when needed in the > > > > > > > > > > virtual > > > > > > > > > > MUSB root HUB, regardless of whether the current mode should be > > > > > > > > > > gadget > > > > > > > > > > or host. > > > > > > > > > > > > > > > > > > > > This fixes USB OTG on Allwinner devices that I could test it > > > > > > > > > > with, > > > > > > > > > > mainly A20 devices. > > > > > > > > > > > > > > > > > > > > Signed-off-by: Paul Kocialkowski > > > > > > > > > > > > > > > > > > Surely there's more to it than that. The gadget mode of A20 boards > > > > > > > > > have been working in the past, including when compiling with mUSB > > > > > > > > > setup as dual role. > > > > > > > > > > > > > > > > > > Is this a regression since a particular commit? Or is there > > > > > > > > > another, > > > > > > > > > deeper issue overlooked in the commit log? > > > > > > > > > > > > > > > > The root of the issue here is that musb_start is not called at any > > > > > > > > point > > > > > > > > without this patch. My understanding of the flow is the following: > > > > > > > > when > > > > > > > > the PHY detects that there was a VBUS/ID change, it will notify its > > > > > > > > listeners (mainly the musb sunxi glue layer). This will then > > > > > > > > schedule > > > > > > > > the driver's work (sunxi_musb_work), which does nothing since the > > > > > > > > SUNXI_MUSB_FL_ENABLED bit was never set. This bit is only set after > > > > > > > > calling sunxi_musb_enable, which is called from > > > > > > > > musb_platform_enable, > > > > > > > > that originates from musb_start. > > > > > > > > > > > > > > > > Currently I see two places where musb_start is called: > > > > > > > > * musb_virthub > > > > > > > > * musb_gadget > > > > > > > > > > > > > > > > In the latter case, it is in turn called from udc_start, which > > > > > > > > should > > > > > > > > probably (correct me if I'm wrong) happen later in the call chain > > > > > > > > than > > > > > > > > ID/VBUS change notification time. > > > > > > > > > > > > > > I don't think it is correct that udc_start() is triggered by ID/VBUS > > > > > > > events, but I don't have an Allwinner platform to verify the callflow. > > > > > > > > > > > > Yes you're right, I didn't make myself very clear here. I didn't > > > > > > investigate the udc_start call path much since it was apparently not the > > > > > > culprit. > > > > > > > > > > > > > Have you tried to load with a gadget driver? When a gadget function is > > > > > > > bound to UDC, udc_start() is triggered, which in turn calls > > > > > > > musb_start(). > > > > > > > > > > > > It does work under that scenario, although my used case here is using > > > > > > musb with DUAL_ROLE but no gadget driver loaded. That it, I want the > > > > > > musb_start call to originate from the virtual hub, not from the gadget > > > > > > side. > > > > > > > > > > > > > > In the former case, musb_start is called in the root controller hub > > > > > > > > control, when setting the USB_PORT_FEAT_POWER feature. This looks > > > > > > > > perfectly legit and IMO this is where it should be initially calling > > > > > > > > musb_start in the dual role case. The kernel is indeed setting the > > > > > > > > > > > > > > No actually. A dual-role port should be in b_idle state by default, so > > > > > > > logically all actions should go to the gadget path until the port > > > > > > > switches to host mode. > > > > > > > > > > > > It makes sense that the port should be in b_idle state by default, but > > > > > > here it fails to switch to host mode when the ID pin detects that it > > > > > > should. Or does b_idle state entail that a gadget must be loaded (per > > > > > > the USB spec), and thus nothing should (ever) happen until that happens? > > > > > > > > > > > > I find it really odd to need a gadget device to trigger host mode. > > > > > > This patch does fix the issue, but I am puzzled as to why it is needed > > > > > > in the first place. The comment above it mentions that "In OTG mode we > > > > > > have to wait until we loaded a gadget. We don't really need a gadget if > > > > > > we operate as a host but we should not start a session as a device > > > > > > without a gadget or else we explode.", which is apparently compatible > > > > > > with my use case: a gadget is not really needed and I'm not trying to > > > > > > start a session as a device without a gadget loaded. > > > > > > > > > > > > What do you think? > > > > > > > > > > Okay, this came down to an argument that whether we should require > > > > > loading a gadget driver on a dual-role port to work in host mode, > > > > > which is currently required on musb since a long long time ago. > > > > > > > > > > I understand the requirement is kinda unnecessary, but since it already > > > > > exists on musb stack for a long time, I don't plan to change it. Because I > > > > > cannot think of a use case in real products that doesn't automatically > > > > > load a gadget function on the dual-role port. > > > > > > > > > > If you can explain a use case in real world (not a engineering lab) that > > > > > the gadget driver will not be loaded at linux booting up, but later > > > > > based on user's input, I will reconsider my decision. To remove this > > > > > requirement from musb stack, the work is more than this patch. > > > > > > > > I have one for you: we're working on a device that boots pretty fast, > > > > and therefore are pushing as much things as we can to modules. It > > > > includes gadgets, the musb driver and glue, etc. That doesn't sound > > > > way very different from what a generic distro would do as well. > > > > > > > > At boot, the various modules for the hardware are loaded > > > > automatically: the musb glue, the musb core, our USB PHY, etc. We end > > > > up in a situation where the musb driver is loaded and reported to work > > > > properly. The USB cable to the OTG port (in peripheral) might or might > > > > not be connected, it's kind of irrelevant. > > > > > > > > The gadgets, however, are not loaded automatically. > > > > > > > > Now comes a user that wants to use musb as a host, and connect a > > > > proper USB adapter, that wires the ID pin properly. In our case, the > > > > phy detects it, reports the mode change, and .... nothing. > > > > > > > > That doesn't really look like an engineering lab setup to me. > > > > > > I agree, that sounds like a valid setup. > > > > > > Also realize that Android is pushing to have all drivers as modules, so > > > you will start to see a whole lot more devices out there be modular > > > instead of statically built kernels. So issues like this are good to > > > resolve :) > > > > This issue here is not related to building all drivers as modules. Today > > we already have all musb related drivers including gadget drivers in > > modules. > > > > The issue discussed here is that when musb is configured in dual-role > > mode (dr_mode = 'otg' in dts), a gadget driver has to be bound to the > > udc to make musb working in host mode. > > > > I never disagree it is not ideal, but I consider it is minor - since the > > port is configured to dual-role mode, it is intended to work in > > peripheral mode, then why not automatically load the gadget driver when > > linux boots up. Again, think about an embedded product, if dr_mode is 'otg' which indicates the peripheral mode will be used at some point, when and how to load the gadget driver if it is not loaded automatically when Linux boots up? the end user doesn't have access to the console. > Because no other controller requires it and therefore it's not > standard and violates the principle of least surprise? I know no other controller does this, but this doesn't mean it is not standard. > And even without taking this into account, there's also the fact that > while the *hardware* can do dual role, the software might decide > otherwise. If I don't want to have support for any gadget (at all) in > the end system, then why should I be forced to compile and load > something I don't even want to use in the first place? then dr_mode should be set to 'host' instead, you don't have to load a gadget if peripheral mode will never be used. > The same story goes with cold booting with a device plugged in, and > therefore acting as a host from the very beginning. It will never ever > be configured as a peripheral, even though you might have loaded a > module. I don't understand the problem in this case - will the device ever be removed? will the port ever be used in peripheral mode? If so, the gadget driver will be needed. If not, dr_mode should be 'host' then a gadget driver is not needed. > > To summaries my comments on this again, since it is minor in my opinion, > > I won't spend time to solve it myself (in a near future), but I am more > > than happy to review and take any patch which solve it. > > Paul provided a patch that started this discussion. You mentionned > that it's not enough and other parts should be missing. What are > those? The previous discussion has been a while ago, but I reviewd the thread again, at least I mentioned musb_start() will be called twice with this patch, first by this patch, then when a gadget driver is bound. Regards, -Bin.