Hello Ahmad, On Thursday, 24 August 2023, 15:23:17 CEST, Ahmad Fatoum wrote: > Hello Christian, > > On 24.08.23 14:04, Christian Eggers wrote: > > ok, I should better read the manuals ... > > > > "Once a specific mode has been selected it can't be changed later anymore." > > > > In the past I used two OTG cores, one as device and one as host. So both > > OTGs were set to a fixed drmode in the device tree. > > > > No I need to implement both features via a single OTG. But probably > > I can use another criteria for choosing the correct boot methods instead of > > trying both. > > Obvious choices is checking [ "$bootsource" = serial ] or checking if device > is gadget through ID pin or Type C controller. > > Is that possible in your case? I currently check for $bootsource which is sufficient. But using the USB-C CC lines (that's why I am working on the ADC driver) sounds event better. Currently I use the ADC only for checking whether a device is connected (I am allowed to enable VBUS), but not for determining whether a host is connected (activate USB gadget). regards, Christian > > Cheers, > Ahmad > > > > > > > On Thursday, 24 August 2023, 13:30:46 CEST, Christian Eggers wrote: > >> Application: > >> > >> 1. Try to boot via fastboot (usb device) > >> 2. Try to boot via usb drive (usb host) > >> > >> Problem: > >> > >> barebox@i.MX6ULL:/ setenv otg.mode=host > >> imx-usb 2184000.usb@xxxxxxxxxx: USB EHCI 1.00 > >> barebox@i.MX6ULL:/ setenv otg.mode=peripheral > >> Cannot set parameter otg.mode: Device or resource busy > >> > >> Analysis: > >> > >> The otgdev core maintains one `struct otg_mode` per device. The function > >> checks whether the current mode is equal to USB_DR_MODE_OTG. If not, it > >> returns -EBUSY. There is currently no way to reset the current mode back to > >> USB_DR_MODE_OTG after it has been set to peripheral or host mode once. > >> > >> > > > > > > > > > > > > > >