]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - src/patches/suse-2.6.27.25/patches.drivers/v4l-dvb-uvcvideo-implement-the-usb-power-management-reset_resume-method.patch
Reenabled linux-xen and xen-image build
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.25 / patches.drivers / v4l-dvb-uvcvideo-implement-the-usb-power-management-reset_resume-method.patch
1 From 9b0ae867a6fd3035e97e6c33bc07a5bfd7c0f96c Mon Sep 17 00:00:00 2001
2 From: Laurent Pinchart <laurent.pinchart@skynet.be>
3 Date: Fri, 22 Aug 2008 17:25:10 -0300
4 Subject: [PATCH] V4L/DVB (8754): uvcvideo: Implement the USB power management reset_resume method.
5 References: bnc#486331
6
7 When a suspended device has been reset instead of being resumed, USB core
8 calls the reset_resume method if available instead of unbinding and rebinding
9 the device.
10
11 This patch implements reset_resume by reusing the current resume
12 implementation and simplifies the resume method by skipping the controls
13 restore stage. Resuming from autosuspend should be faster.
14
15 Signed-off-by: Laurent Pinchart <laurent.pinchart@skynet.be>
16 Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
17 Signed-off-by: Brandon Philips <bphilips@suse.de>
18 ---
19 drivers/media/video/uvc/uvc_driver.c | 15 +++++++++++++--
20 1 files changed, 13 insertions(+), 2 deletions(-)
21
22 diff --git a/drivers/media/video/uvc/uvc_driver.c b/drivers/media/video/uvc/uvc_driver.c
23 index 7e10203..4a2d099 100644
24 --- a/drivers/media/video/uvc/uvc_driver.c
25 +++ b/drivers/media/video/uvc/uvc_driver.c
26 @@ -1663,7 +1663,7 @@ static int uvc_suspend(struct usb_interface *intf, pm_message_t message)
27 return uvc_video_suspend(&dev->video);
28 }
29
30 -static int uvc_resume(struct usb_interface *intf)
31 +static int __uvc_resume(struct usb_interface *intf, int reset)
32 {
33 struct uvc_device *dev = usb_get_intfdata(intf);
34 int ret;
35 @@ -1672,7 +1672,7 @@ static int uvc_resume(struct usb_interface *intf)
36 intf->cur_altsetting->desc.bInterfaceNumber);
37
38 if (intf->cur_altsetting->desc.bInterfaceSubClass == SC_VIDEOCONTROL) {
39 - if ((ret = uvc_ctrl_resume_device(dev)) < 0)
40 + if (reset && (ret = uvc_ctrl_resume_device(dev)) < 0)
41 return ret;
42
43 return uvc_status_resume(dev);
44 @@ -1687,6 +1687,16 @@ static int uvc_resume(struct usb_interface *intf)
45 return uvc_video_resume(&dev->video);
46 }
47
48 +static int uvc_resume(struct usb_interface *intf)
49 +{
50 + return __uvc_resume(intf, 0);
51 +}
52 +
53 +static int uvc_reset_resume(struct usb_interface *intf)
54 +{
55 + return __uvc_resume(intf, 1);
56 +}
57 +
58 /* ------------------------------------------------------------------------
59 * Driver initialization and cleanup
60 */
61 @@ -1952,6 +1962,7 @@ struct uvc_driver uvc_driver = {
62 .disconnect = uvc_disconnect,
63 .suspend = uvc_suspend,
64 .resume = uvc_resume,
65 + .reset_resume = uvc_reset_resume,
66 .id_table = uvc_ids,
67 .supports_autosuspend = 1,
68 },
69 --
70 1.6.2
71