All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mayuresh Kulkarni <mkulkarni@opensource.cirrus.com>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: <linux-usb@vger.kernel.org>
Subject: Re: About usb_new_device() API
Date: Mon, 5 Aug 2019 09:43:14 +0100	[thread overview]
Message-ID: <1564994594.2877.12.camel@opensource.cirrus.com> (raw)
In-Reply-To: <Pine.LNX.4.44L0.1908021221120.1645-100000@iolanthe.rowland.org>

On Fri, 2019-08-02 at 12:27 -0400, Alan Stern wrote:
> On Fri, 2 Aug 2019, Mayuresh Kulkarni wrote:
> 
> > 
> > Hi Alan,
> > 
> > Thanks a lot for clearing out the confusion.
> > 
> > Our USB device can operate in 2 mutually exclusive modes: one is
> > normal
> > composite USB audio mode and other is vendor specific HID device
> > mode.
> > 
> > On the same platform (Android based):
> > - When the device is in normal composite USB audio mode,
> > "cat /sys/bus/usb/devices/.../power/control" show "auto".
> > - When the device is in vendor specific HID device mode,
> > "cat /sys/bus/usb/devices/.../power/control" show "on".
> > 
> > And hence as per your comment, I am unable to see USB-2.0 L2 for
> > vendor
> > specific HID device mode.
> > 
> > I guess I need to find out "who" is setting the /power/control =
> > "auto"
> > when composite USB audio device is detected. And explore if it could
> > be
> > moved to a more generic place.
> I'm pretty sure this is done by some program, not automatically done
> by 
> the kernel.

I think I found what is happening here:
- Looks like, the USB audio class driver is
calling usb_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?
OR
2. Is it recommended to call usb_enable_autosuspend() from user-space by
writing "auto" to "cat /sys/bus/usb/devices/.../power/control"?

In my opinion, both should be fine.

Thanks,

> 
> > 
> > Is there any module parameter (or some other means) by which,
> > power/control (or deprecated power/level) will always be "auto", by
> > default?
> No, there isn't.  The power/control (or power/level) attribute has to 
> be set by the user or a program.
> 
> Alan Stern
> 

  reply	other threads:[~2019-08-05  8:43 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-01 14:49 About usb_new_device() API Mayuresh Kulkarni
2019-08-01 17:51 ` Alan Stern
2019-08-02 15:43   ` Mayuresh Kulkarni
2019-08-02 16:27     ` Alan Stern
2019-08-05  8:43       ` Mayuresh Kulkarni [this message]
2019-08-05 14:07         ` Alan Stern
2019-08-05 16:30           ` Mayuresh Kulkarni

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1564994594.2877.12.camel@opensource.cirrus.com \
    --to=mkulkarni@opensource.cirrus.com \
    --cc=linux-usb@vger.kernel.org \
    --cc=stern@rowland.harvard.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.