Re: About usb_new_device() API

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 5 Aug 2019, Mayuresh Kulkarni wrote:

> I think I found what is happening here:
> - Looks like, the USB audio class driver is
> calling usb_enable_autosuspend().

The audio maintainers must have some good reason for doing that, but I 
don't know what it is.  Normally kernel drivers are not supposed to 
enable autosuspend.

> - Please check $KERNEL_SRC/sound/usb, card.c, usb_audio_probe().
> - It is using interface_to_usbdev() to get the parent of its interface
> device, which is the USB device allocated by the hub driver.
> And hence, in above use-case, I can see L2 when our device is in
> composite USB-audio mode.
> 
> Moreover, the HID-class driver doesn't seem to call
> usb_enable_autosuspend() on its parent and hence I don't see L2 when our
> device operates as a vendor specific HID device.
> So a simple fix would be to call usb_enable_autosuspend() from HID class
> driver as well.
> 
> With that said, what would be your recommendation here, Alan -
> 1. Is it OK for USB-class drivers to call usb_enable_autosuspend() on
> their parent device to ensure low power state is entered?

Generally it is _not_ okay.  Especially not for the HID class driver -- 
there are far too many HID devices (like mice and keyboards) that don't 
work correctly when they go to low power.

> OR
> 2. Is it recommended to call usb_enable_autosuspend() from user-space by
> writing "auto" to "cat /sys/bus/usb/devices/.../power/control"?

That is the recommended approach.

> In my opinion, both should be fine.

Alan Stern




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux