On Mon, 2019-08-12 at 16:04 +0300, Roger Quadros wrote: > > On 12/08/2019 15:46, Felipe Balbi wrote: > > > > Hi, > > > > Roger Quadros <rogerq@xxxxxx> writes: > >>> The sysfs file we expose from the class for the role switches is > >>> primarily meant for supporting proprietary protocols that require us > >>> to basically override the connector USB data role. The default role > >>> should always be selected in the drivers. > >> > >> OK. Let's take this example > >> - Port is dual-role port micro AB. > >> - microAB to type-A adapter is connected which pulls ID low. port transitions > >> to "host" role by the controller driver. > >> - proprietary protocol want to switch role to device role so writes "device" to > >> mode switch sysfs. port transitions to "device" role. > >> > >> Now, how does controller driver know to fall back to HW based role switching? > > > > Use a 'disconnect' or 'suspend' event to go reset it? But that should, > > probably, be done at kernel space, no? > > > > Yes that could be one option. > So after a disconnect, sysfs role should reflect actual hardware role. correct? Maybe it's difficult to support both HW based role switch and SW based role switch by sysfs at the same if the HW's FSM rely on, such as, the state of Vbus pin or ID pin. Likes the upper example, when user writes "device" to mode switch sysfs, the driver should skip the HW state of ID pin, due to it's state is Low, or force it as High. Another option way is that introduces a property in DTS to indicate the way the driver want to use (HW based or SW based, usb_role_switch doesn't provide this information for the controller driver), but is not flexible enough. > > cheers, > -roger