Re: Policy to keep USB ports powered in low-power states

From: Greg Kroah-Hartman
Date: Wed Aug 14 2019 - 17:20:23 EST


On Wed, Aug 14, 2019 at 02:12:07PM -0600, Nick Crews wrote:
> Thanks for the fast response!
>
> On Tue, Aug 13, 2019 at 12:02 AM Greg Kroah-Hartman
> <gregkh@xxxxxxxxxxxxxxxxxxx> wrote:
> >
> > On Mon, Aug 12, 2019 at 06:08:43PM -0600, Nick Crews wrote:
> > > Hi Greg!
> >
> > Hi!
> >
> > First off, please fix your email client to not send html so that vger
> > does not reject your messages :)
>
> Thanks, should be good now.
>
> >
> > > I am working on a Chrome OS device that supports a policy called "USB Power
> > > Share," which allows users to turn the laptop into a charge pack for their
> > > phone. When the policy is enabled, power will be supplied to the USB ports
> > > even when the system is in low power states such as S3 and S5. When
> > > disabled, then no power will be supplied in S3 and S5. I wrote a driver
> > > <https://lore.kernel.org/patchwork/patch/1062995/> for this already as part
> > > of drivers/platform/chrome/, but Enric Balletbo i Serra, the maintainer,
> > > had the reasonable suggestion of trying to move this into the USB subsystem.
> >
> > Correct suggestion.
> >
> > > Has anything like this been done before? Do you have any preliminary
> > > thoughts on this before I start writing code? A few things that I haven't
> > > figured out yet:
> > > - How to make this feature only available on certain devices. Using device
> > > tree? Kconfig? Making a separate driver just for this device that plugs
> > > into the USB core?
> > > - The feature is only supported on some USB ports, so we need a way of
> > > filtering on a per-port basis.
> >
> > Look at the drivers/usb/typec/ code, I think that should do everything
> > you need here as this is a typec standard functionality, right?
>
> Unfortunately this is for USB 2.0 ports, so it's not type-C.
> Is the type-C code still worth looking at?

If this is for USB 2, does it use the "non-standard" hub commands to
turn on and off power? If so, why not just use the usbreset userspace
program for that?

And how are you turning a USB 2 port into a power source? That feels
really odd given the spec. Is this part of the standard somewhere or
just a firmware/hardware hack that you are adding to a device?

Is there some port information in the firmware that describes this
functionality? If so, can you expose it through sysfs to the port that
way?

thanks,

greg k-h