]>
Commit | Line | Data |
---|---|---|
53c49429 GKH |
1 | From b0786b430c982dffbb44d8030e6b6088671ce745 Mon Sep 17 00:00:00 2001 |
2 | From: Ming Lei <tom.leiming@gmail.com> | |
3 | Date: Mon, 1 Nov 2010 07:11:54 -0700 | |
4 | Subject: usbnet: fix usb_autopm_get_interface failure(v1) | |
5 | ||
6 | From: Ming Lei <tom.leiming@gmail.com> | |
7 | ||
8 | commit b0786b430c982dffbb44d8030e6b6088671ce745 upstream. | |
9 | ||
10 | Since usbnet already took usb runtime pm, we have to | |
11 | enable runtime pm for usb interface of usbnet, otherwise | |
12 | usb_autopm_get_interface may return failure and cause | |
13 | 'ifconfig usb0 up' failed if USB_SUSPEND(RUNTIME_PM) is | |
14 | enabled. | |
15 | ||
16 | Cc: David Brownell <dbrownell@users.sourceforge.net> | |
17 | Cc: "David S. Miller" <davem@davemloft.net> | |
18 | Cc: Ben Hutchings <ben@decadent.org.uk> | |
19 | Cc: Joe Perches <joe@perches.com> | |
20 | Cc: Oliver Neukum <oliver@neukum.org> | |
21 | Cc: Andy Shevchenko <andy.shevchenko@gmail.com> | |
22 | Signed-off-by: Ming Lei <tom.leiming@gmail.com> | |
23 | Signed-off-by: David S. Miller <davem@davemloft.net> | |
24 | Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> | |
25 | ||
26 | --- | |
27 | drivers/net/usb/usbnet.c | 11 +++++++++++ | |
28 | 1 file changed, 11 insertions(+) | |
29 | ||
30 | --- a/drivers/net/usb/usbnet.c | |
31 | +++ b/drivers/net/usb/usbnet.c | |
32 | @@ -45,6 +45,7 @@ | |
33 | #include <linux/usb/usbnet.h> | |
34 | #include <linux/slab.h> | |
35 | #include <linux/kernel.h> | |
36 | +#include <linux/pm_runtime.h> | |
37 | ||
38 | #define DRIVER_VERSION "22-Aug-2005" | |
39 | ||
40 | @@ -1273,6 +1274,16 @@ usbnet_probe (struct usb_interface *udev | |
41 | struct usb_device *xdev; | |
42 | int status; | |
43 | const char *name; | |
44 | + struct usb_driver *driver = to_usb_driver(udev->dev.driver); | |
45 | + | |
46 | + /* usbnet already took usb runtime pm, so have to enable the feature | |
47 | + * for usb interface, otherwise usb_autopm_get_interface may return | |
48 | + * failure if USB_SUSPEND(RUNTIME_PM) is enabled. | |
49 | + */ | |
50 | + if (!driver->supports_autosuspend) { | |
51 | + driver->supports_autosuspend = 1; | |
52 | + pm_runtime_enable(&udev->dev); | |
53 | + } | |
54 | ||
55 | name = udev->dev.driver->name; | |
56 | info = (struct driver_info *) prod->driver_info; |