Thread (6 messages) flat view 6 messages, 3 authors, 2011-10-10

Re: [PATCH V2] input: Fix USB autosuspend on bcm5974

From: Oliver Neukum <hidden>
Date: 2011-10-10 14:34:23

Am Montag, 10. Oktober 2011, 16:16:35 schrieb Matthew Garrett:
On Mon, Oct 10, 2011 at 04:06:37PM +0200, Oliver Neukum wrote:
quoted
This is odd, because the hardware shouldn't generate remote wakeups unless you
request them, like this (usbhid)
I thought needs_remote_wakeup was a hint to the kernel that remote 
wakeup ability was required for the hardware to autosuspend? In theory I
It fulfills that role, but it is not its sole function.
guess it should be set, but in practice all the hardware supported by 
this driver generates them so it'd be a noop. No objection to adding it 
in the name of correctness (or if some future version is broken, I 
guess...), though.
It is used in usb_port_suspend in form of do_remote_wakeup which
is computed from it. And we send a real control message.

	Regards
		Oliver

int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
{
        struct usb_hub  *hub = hdev_to_hub(udev->parent);
        int             port1 = udev->portnum;
        int             status;

        // dev_dbg(hub->intfdev, "suspend port %d\n", port1);

        /* enable remote wakeup when appropriate; this lets the device
         * wake up the upstream hub (including maybe the root hub).
         *
         * NOTE:  OTG devices may issue remote wakeup (or SRP) even when
         * we don't explicitly enable it here.
         */
        if (udev->do_remote_wakeup) {
                status = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
                                USB_REQ_SET_FEATURE, USB_RECIP_DEVICE,
                                USB_DEVICE_REMOTE_WAKEUP, 0,
                                NULL, 0,
                                USB_CTRL_SET_TIMEOUT);
                if (status) {
                        dev_dbg(&udev->dev, "won't remote wakeup, status %d\n",
                                        status);
                        /* bail if autosuspend is requested */
                        if (msg.event & PM_EVENT_AUTO)
                                return status;
                }
        }


-- 
Matthew Garrett | mjg59@srcf.ucam.org
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

-- 
- - - 
SUSE LINUX Products GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB 16746 (AG Nürnberg) 
Maxfeldstraße 5                         
90409 Nürnberg 
Germany 
- - - 
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help