On Mon, Oct 05, 2020 at 05:45:10PM -0700, Matthias Kaehlcke wrote:
I did some prototyping, it seems a binding like this would work for
case a) or b):
&usb_1_dwc3 {
hub_2_0: hub@1 {
compatible = "usbbda,5411";
reg = <1>;
};
hub_3_0: hub@2 {
compatible = "usbbda,411";
reg = <2>;
vdd-supply = <&pp3300_hub>;
companion-hubs = <&hub_2_0>;
};
};
It still requires specifying both hubs (which reflects the actual wiring).
Supporting something like "reg = <1 2>" seems more complex due to the need to
obtain the hub USB device at runtime (a DT node makes that trivial), possibly
this could be solved by adding new APIs.
In terms of implementation would I envision to keep a platform driver. This
would keep the hubby parts out of xhci-plat (except for populating the platform
devices), support systems with cascaded hubs and provide a device for the sysfs
attribute.
What will you do if a system has more than one of these power-regulated
hubs? That is, how will the user know which platform device handles the
power control for a particular hub (and vice versa)? You'd probably
have to create a pair of symlinks going back and forth in the sysfs
directories.
Wouldn't it be easier to put the power-control attribute directly in the
hub's sysfs directory (or .../power subdirectory)?
Alan Stern