On Mon, Sep 14, 2020 at 11:27:49AM -0700, Matthias Kaehlcke wrote: > The main issue this driver addresses is that a USB hub needs to be > powered before it can be discovered. For onboard hubs this is often > solved by supplying the hub with an 'always-on' regulator, which is > kind of a hack. Some onboard hubs may require further initialization > steps, like changing the state of a GPIO or enabling a clock, which > requires further hacks. This driver creates a platform device > representing the hub which performs the necessary initialization. > Currently it only supports switching on a single regulator, support > for multiple regulators or other actions can be added as needed. > Different initialization sequences can be supported based on the > compatible string. > > Besides performing the initialization the driver can be configured > to power the hub off during system suspend. This can help to extend > battery life on battery powered devices, which have no requirements > to keep the hub powered during suspend. The driver can also be > configured to leave the hub powered when a wakeup capable USB device > is connected when suspending, and keeping it powered otherwise. > > Technically the driver consists of two drivers, the platform driver > described above and a very thin USB driver that subclasses the > generic hub driver. Actually it subclasses the generic usb device driver, not the hub driver. > The purpose of this driver is to provide the > platform driver with the USB devices corresponding to the hub(s) > (a hub controller may provide multiple 'logical' hubs, e.g. one > to support USB 2.0 and another for USB 3.x). > > Co-developed-by: Ravi Chandra Sadineni <ravisadineni@xxxxxxxxxxxx> > Signed-off-by: Ravi Chandra Sadineni <ravisadineni@xxxxxxxxxxxx> > Signed-off-by: Matthias Kaehlcke <mka@xxxxxxxxxxxx> > --- > This is an evolution of '[RFC] USB: misc: Add usb_hub_pwr driver' > (https://lore.kernel.org/patchwork/patch/1299239/). > > Changes in v1: > - renamed the driver to 'onboard_usb_hub' > - single file for platform and USB driver > - USB hub devices register with the platform device > - the DT includes a phandle of the platform device > - the platform device now controls when power is turned off > - the USB driver became a very thin subclass of the generic hub > driver > - enabled autosuspend support See https://marc.info/?l=linux-usb&m=159914635920888&w=2 and the accompanying submissions. You'll probably want to include those updates in your driver. Alan Stern