Hi,

On 06-06-18 23:36, Mats Karrman wrote:
Hello Gentlemen,

I'm trying to get my head around USB role switches in connection with Type-C 
ports
and device-trees. So far I have not found much documentation, e.g. there are no
device-tree bindings documented and really no good examples in existing device
trees, although there has been some attempts, e.g. [1] and [2]. Anyway, so I 
send
you a couple of questions instead:

1) tcpm uses the port device struct to find a single usb_role_switch but there 
is
room for three USB busses in the Type-C connector; one high speed and two (?) 
super-
speed. These would not all come from the same controller (there might even be
separate controllers for host and device mode for each bus).

AFAIK the 2nd superspeed USB bus is never used as such. There really is only 1
USB bus on the Type-C connector, the combined USB-2 + the 1st superspeed bus,
physically these are 2 separate busses but that is purely for compatibility
reasons, logically there really only is 1 bus, just like a superspeed Type-A
connector has both busses physically but logically represents a single bus/port.

The case I am working on now only have a single USB2 otg controller so it should
be possible to make that driver register a role switch but for other cases?

I guess theoretically a device could use separate role switches / muxes for
the USB-2 and USB-3 busses, but that would be weird. So lets cross that bridge
when we reach it.

I imagine it would be possible to create a composite driver as a proxy for all 
role
switches but that would probably be different for every platform/product - not
very elegant. Could the role switch infrastructure be extended to handle 
arbitrary
sets of coordinated switches?

As said lets cross that bridge when we reach it.

2) How should the connection between the Type-C port and the switches best be
expressed in a device tree? Using graph I presume, but should it be mixed into 
the
existing "usb-connector" or should this be a separate block?
I think it is unfortunate that the graph use numeric addresses that need to be
fixed by documentation and already I see problems with the current assignment
(0=HS, 1=SS, 2=SBU), e.g. if the host and device mode are handled by different
controllers. Graph do support multiple endpoints for one port but then we have
another level of magic numbers which does not exactly make things easier
(e.g. 0=dual or host controller, 1=device controller, 2=mode switch).

The graph stuff is more Heikki's specialty so I will let Heikki answer this.

Regards,

Hans

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to