diff mbox

[Natty,SRU] UBUNTU: SAUCE: uvcvideo: add SetInterface(0) in .reset_resume handler

Message ID 20110726113956.17e7acf3@tom-ThinkPad-T410
State New
Headers show

Commit Message

Ming Lei July 26, 2011, 3:39 a.m. UTC
From 2f485a24a5732b980f2d1c7097469f07cb848c70 Mon Sep 17 00:00:00 2001
From: Ming Lei <ming.lei@canonical.com>
Date: Sat, 16 Jul 2011 11:29:45 +0800
Subject: [PATCH][Natty SRU] UBUNTU: SAUCE: uvcvideo: add SetInterface(0) in .reset_resume handler

As commented in uvc_video_init,

	/* Alternate setting 0 should be the default, yet the XBox Live Vision
	 * Cam (and possibly other devices) crash or otherwise misbehave if
	 * they don't receive a SET_INTERFACE request before any other video
	 * control request.
	 */

so it does make sense to add the SetInterface(0) in .reset_resume
handler so that this kind of devices can work well if they are reseted
during resume from system or runtime suspend.

We have found, without the patch, Microdia camera(0c45:6437) can't send
stream data any longer after it is reseted during resume from
system suspend.

SRU Justification:

Impact:
	- without the patch, the Microdia camera(0c45:6437) can't
	work after system resume

Fix:
        - After applying the patch, the camera can work well after
	system resume

BugLink: http://bugs.launchpad.net/bugs/733509

upstream discusstion:  http://marc.info/?t=131037773100002&r=1&w=2

Signed-off-by: Ming Lei <ming.lei@canonical.com>
Cc: Jeremy Kerr <jeremy.kerr@canonical.com>
---
BTW: The patch will enter 3.1-rc later, not sure how Oneiric will merge
the patch. 
---
 drivers/media/video/uvc/uvc_driver.c |   14 +++++++++++++-
 1 files changed, 13 insertions(+), 1 deletions(-)

Comments

Andy Whitcroft July 26, 2011, 12:53 p.m. UTC | #1
On Tue, Jul 26, 2011 at 11:39:56AM +0800, Ming Lei wrote:
> From 2f485a24a5732b980f2d1c7097469f07cb848c70 Mon Sep 17 00:00:00 2001
> From: Ming Lei <ming.lei@canonical.com>
> Date: Sat, 16 Jul 2011 11:29:45 +0800
> Subject: [PATCH][Natty SRU] UBUNTU: SAUCE: uvcvideo: add SetInterface(0) in .reset_resume handler
> 
> As commented in uvc_video_init,
> 
> 	/* Alternate setting 0 should be the default, yet the XBox Live Vision
> 	 * Cam (and possibly other devices) crash or otherwise misbehave if
> 	 * they don't receive a SET_INTERFACE request before any other video
> 	 * control request.
> 	 */
> 
> so it does make sense to add the SetInterface(0) in .reset_resume
> handler so that this kind of devices can work well if they are reseted
> during resume from system or runtime suspend.
> 
> We have found, without the patch, Microdia camera(0c45:6437) can't send
> stream data any longer after it is reseted during resume from
> system suspend.
> 
> SRU Justification:
> 
> Impact:
> 	- without the patch, the Microdia camera(0c45:6437) can't
> 	work after system resume
> 
> Fix:
>         - After applying the patch, the camera can work well after
> 	system resume
> 
> BugLink: http://bugs.launchpad.net/bugs/733509
> 
> upstream discusstion:  http://marc.info/?t=131037773100002&r=1&w=2
> 
> Signed-off-by: Ming Lei <ming.lei@canonical.com>
> Cc: Jeremy Kerr <jeremy.kerr@canonical.com>
> ---
> BTW: The patch will enter 3.1-rc later, not sure how Oneiric will merge
> the patch. 
> ---
>  drivers/media/video/uvc/uvc_driver.c |   14 +++++++++++++-
>  1 files changed, 13 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/media/video/uvc/uvc_driver.c b/drivers/media/video/uvc/uvc_driver.c
> index b6eae48..41c6d1a 100644
> --- a/drivers/media/video/uvc/uvc_driver.c
> +++ b/drivers/media/video/uvc/uvc_driver.c
> @@ -1959,8 +1959,20 @@ static int __uvc_resume(struct usb_interface *intf, int reset)
>  	}
>  
>  	list_for_each_entry(stream, &dev->streams, list) {
> -		if (stream->intf == intf)
> +		if (stream->intf == intf) {
> +			/*
> +			 * After usb bus reset, some devices may
> +			 * misbehave if SetInterface(0) is not done, for
> +			 * example, Microdia camera(0c45:6437) will stop
> +			 * sending streaming data. Looks like XBox Live
> +			 * Vision Cam needs it too, as commented in
> +			 * uvc_video_init.
> +			 */
> +			if (reset)
> +				usb_set_interface(stream->dev->udev,
> +					stream->intfnum, 0);
>  			return uvc_video_resume(stream);
> +		}
>  	}
>  
>  	uvc_trace(UVC_TRACE_SUSPEND, "Resume: video streaming USB interface "

That is going to need some careful testing as it is applied to all
devices.  It appears to be sane however and do what it claims and
upstream seems happy with the new behaviour.  As I say this will need
careful monitoring in testing.

I am unsure if this might make it to Oneiric via stable, but for our
purposes it might make sense to apply this there and see what fallout we
get before committing it for Natty.

Overally I guess:

Acked-by: Andy Whitcroft <apw@canonical.com>

-apw
Tim Gardner July 26, 2011, 1:04 p.m. UTC | #2
On 07/25/2011 09:39 PM, Ming Lei wrote:
>  From 2f485a24a5732b980f2d1c7097469f07cb848c70 Mon Sep 17 00:00:00 2001
> From: Ming Lei<ming.lei@canonical.com>
> Date: Sat, 16 Jul 2011 11:29:45 +0800
> Subject: [PATCH][Natty SRU] UBUNTU: SAUCE: uvcvideo: add SetInterface(0) in .reset_resume handler
>
> As commented in uvc_video_init,
>
> 	/* Alternate setting 0 should be the default, yet the XBox Live Vision
> 	 * Cam (and possibly other devices) crash or otherwise misbehave if
> 	 * they don't receive a SET_INTERFACE request before any other video
> 	 * control request.
> 	 */
>
> so it does make sense to add the SetInterface(0) in .reset_resume
> handler so that this kind of devices can work well if they are reseted
> during resume from system or runtime suspend.
>
> We have found, without the patch, Microdia camera(0c45:6437) can't send
> stream data any longer after it is reseted during resume from
> system suspend.
>
> SRU Justification:
>
> Impact:
> 	- without the patch, the Microdia camera(0c45:6437) can't
> 	work after system resume
>
> Fix:
>          - After applying the patch, the camera can work well after
> 	system resume
>
> BugLink: http://bugs.launchpad.net/bugs/733509
>
> upstream discusstion:  http://marc.info/?t=131037773100002&r=1&w=2
>
> Signed-off-by: Ming Lei<ming.lei@canonical.com>
> Cc: Jeremy Kerr<jeremy.kerr@canonical.com>
> ---
> BTW: The patch will enter 3.1-rc later, not sure how Oneiric will merge
> the patch.
> ---
>   drivers/media/video/uvc/uvc_driver.c |   14 +++++++++++++-
>   1 files changed, 13 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/media/video/uvc/uvc_driver.c b/drivers/media/video/uvc/uvc_driver.c
> index b6eae48..41c6d1a 100644
> --- a/drivers/media/video/uvc/uvc_driver.c
> +++ b/drivers/media/video/uvc/uvc_driver.c
> @@ -1959,8 +1959,20 @@ static int __uvc_resume(struct usb_interface *intf, int reset)
>   	}
>
>   	list_for_each_entry(stream,&dev->streams, list) {
> -		if (stream->intf == intf)
> +		if (stream->intf == intf) {
> +			/*
> +			 * After usb bus reset, some devices may
> +			 * misbehave if SetInterface(0) is not done, for
> +			 * example, Microdia camera(0c45:6437) will stop
> +			 * sending streaming data. Looks like XBox Live
> +			 * Vision Cam needs it too, as commented in
> +			 * uvc_video_init.
> +			 */
> +			if (reset)
> +				usb_set_interface(stream->dev->udev,
> +					stream->intfnum, 0);
>   			return uvc_video_resume(stream);
> +		}
>   	}
>
>   	uvc_trace(UVC_TRACE_SUSPEND, "Resume: video streaming USB interface "

Its best if you remind us when its been merged in Linus' tree so we can 
just cherry-pick it in its final form.

rtg
Ming Lei July 26, 2011, 2:02 p.m. UTC | #3
On Tue, 26 Jul 2011 07:04:00 -0600
Tim Gardner <tim.gardner@canonical.com> wrote:
> >
> >   	uvc_trace(UVC_TRACE_SUSPEND, "Resume: video streaming USB interface "
> 
> Its best if you remind us when its been merged in Linus' tree so we can 
> just cherry-pick it in its final form.

No problem, I will put an eye on it, and let you know if the patch is
merged into linus tree.


thanks,
Ming Lei Sept. 29, 2011, 3:53 a.m. UTC | #4
Hi,

On Tue, 26 Jul 2011 22:02:45 +0800
Ming Lei <ming.lei@canonical.com> wrote:

> On Tue, 26 Jul 2011 07:04:00 -0600
> Tim Gardner <tim.gardner@canonical.com> wrote:
> > >
> > >   	uvc_trace(UVC_TRACE_SUSPEND, "Resume: video streaming USB interface "
> > 
> > Its best if you remind us when its been merged in Linus' tree so we can 
> > just cherry-pick it in its final form.
> 
> No problem, I will put an eye on it, and let you know if the patch is
> merged into linus tree.

The patch has been in -next tree and media tree for some days, so could you
take the patch now so that it won't block hw certification any longer.

This one is OK for Natty, but for Oneric, you may need to take the one from
-next or media tree.


thanks,
Brad Figg Sept. 29, 2011, 5:34 a.m. UTC | #5
On 07/25/2011 08:39 PM, Ming Lei wrote:
>  From 2f485a24a5732b980f2d1c7097469f07cb848c70 Mon Sep 17 00:00:00 2001
> From: Ming Lei<ming.lei@canonical.com>
> Date: Sat, 16 Jul 2011 11:29:45 +0800
> Subject: [PATCH][Natty SRU] UBUNTU: SAUCE: uvcvideo: add SetInterface(0) in .reset_resume handler
>
> As commented in uvc_video_init,
>
> 	/* Alternate setting 0 should be the default, yet the XBox Live Vision
> 	 * Cam (and possibly other devices) crash or otherwise misbehave if
> 	 * they don't receive a SET_INTERFACE request before any other video
> 	 * control request.
> 	 */
>
> so it does make sense to add the SetInterface(0) in .reset_resume
> handler so that this kind of devices can work well if they are reseted
> during resume from system or runtime suspend.
>
> We have found, without the patch, Microdia camera(0c45:6437) can't send
> stream data any longer after it is reseted during resume from
> system suspend.
>
> SRU Justification:
>
> Impact:
> 	- without the patch, the Microdia camera(0c45:6437) can't
> 	work after system resume
>
> Fix:
>          - After applying the patch, the camera can work well after
> 	system resume
>
> BugLink: http://bugs.launchpad.net/bugs/733509
>
> upstream discusstion:  http://marc.info/?t=131037773100002&r=1&w=2
>
> Signed-off-by: Ming Lei<ming.lei@canonical.com>
> Cc: Jeremy Kerr<jeremy.kerr@canonical.com>
> ---
> BTW: The patch will enter 3.1-rc later, not sure how Oneiric will merge
> the patch.
> ---
>   drivers/media/video/uvc/uvc_driver.c |   14 +++++++++++++-
>   1 files changed, 13 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/media/video/uvc/uvc_driver.c b/drivers/media/video/uvc/uvc_driver.c
> index b6eae48..41c6d1a 100644
> --- a/drivers/media/video/uvc/uvc_driver.c
> +++ b/drivers/media/video/uvc/uvc_driver.c
> @@ -1959,8 +1959,20 @@ static int __uvc_resume(struct usb_interface *intf, int reset)
>   	}
>
>   	list_for_each_entry(stream,&dev->streams, list) {
> -		if (stream->intf == intf)
> +		if (stream->intf == intf) {
> +			/*
> +			 * After usb bus reset, some devices may
> +			 * misbehave if SetInterface(0) is not done, for
> +			 * example, Microdia camera(0c45:6437) will stop
> +			 * sending streaming data. Looks like XBox Live
> +			 * Vision Cam needs it too, as commented in
> +			 * uvc_video_init.
> +			 */
> +			if (reset)
> +				usb_set_interface(stream->dev->udev,
> +					stream->intfnum, 0);
>   			return uvc_video_resume(stream);
> +		}
>   	}
>
>   	uvc_trace(UVC_TRACE_SUSPEND, "Resume: video streaming USB interface "

Please note that the buglink referred to in the commit is a Private bug.

Brad
Ming Lei Sept. 29, 2011, 7:04 a.m. UTC | #6
On Thu, Sep 29, 2011 at 1:34 PM, Brad Figg <brad.figg@canonical.com> wrote:
> On 07/25/2011 08:39 PM, Ming Lei wrote:
>>
>>  From 2f485a24a5732b980f2d1c7097469f07cb848c70 Mon Sep 17 00:00:00 2001
>> From: Ming Lei<ming.lei@canonical.com>
>> Date: Sat, 16 Jul 2011 11:29:45 +0800
>> Subject: [PATCH][Natty SRU] UBUNTU: SAUCE: uvcvideo: add SetInterface(0)
>> in .reset_resume handler
>>
>> As commented in uvc_video_init,
>>
>>        /* Alternate setting 0 should be the default, yet the XBox Live
>> Vision
>>         * Cam (and possibly other devices) crash or otherwise misbehave if
>>         * they don't receive a SET_INTERFACE request before any other
>> video
>>         * control request.
>>         */
>>
>> so it does make sense to add the SetInterface(0) in .reset_resume
>> handler so that this kind of devices can work well if they are reseted
>> during resume from system or runtime suspend.
>>
>> We have found, without the patch, Microdia camera(0c45:6437) can't send
>> stream data any longer after it is reseted during resume from
>> system suspend.
>>
>> SRU Justification:
>>
>> Impact:
>>        - without the patch, the Microdia camera(0c45:6437) can't
>>        work after system resume
>>
>> Fix:
>>         - After applying the patch, the camera can work well after
>>        system resume
>>
>> BugLink: http://bugs.launchpad.net/bugs/733509
>>
>> upstream discusstion:  http://marc.info/?t=131037773100002&r=1&w=2
>>
>> Signed-off-by: Ming Lei<ming.lei@canonical.com>
>> Cc: Jeremy Kerr<jeremy.kerr@canonical.com>
>> ---
>> BTW: The patch will enter 3.1-rc later, not sure how Oneiric will merge
>> the patch.
>> ---
>>  drivers/media/video/uvc/uvc_driver.c |   14 +++++++++++++-
>>  1 files changed, 13 insertions(+), 1 deletions(-)
>>
>> diff --git a/drivers/media/video/uvc/uvc_driver.c
>> b/drivers/media/video/uvc/uvc_driver.c
>> index b6eae48..41c6d1a 100644
>> --- a/drivers/media/video/uvc/uvc_driver.c
>> +++ b/drivers/media/video/uvc/uvc_driver.c
>> @@ -1959,8 +1959,20 @@ static int __uvc_resume(struct usb_interface *intf,
>> int reset)
>>        }
>>
>>        list_for_each_entry(stream,&dev->streams, list) {
>> -               if (stream->intf == intf)
>> +               if (stream->intf == intf) {
>> +                       /*
>> +                        * After usb bus reset, some devices may
>> +                        * misbehave if SetInterface(0) is not done, for
>> +                        * example, Microdia camera(0c45:6437) will stop
>> +                        * sending streaming data. Looks like XBox Live
>> +                        * Vision Cam needs it too, as commented in
>> +                        * uvc_video_init.
>> +                        */
>> +                       if (reset)
>> +                               usb_set_interface(stream->dev->udev,
>> +                                       stream->intfnum, 0);
>>                        return uvc_video_resume(stream);
>> +               }
>>        }
>>
>>        uvc_trace(UVC_TRACE_SUSPEND, "Resume: video streaming USB interface
>> "
>
> Please note that the buglink referred to in the commit is a Private bug.

We has a public butlink for it already:

           https://bugs.launchpad.net/bugs/816484

thanks,
--
Ming Lei
Ming Lei Sept. 29, 2011, 7:13 a.m. UTC | #7
Hi,

On Thu, Sep 29, 2011 at 3:04 PM, Ming Lei <ming.lei@canonical.com> wrote:
> On Thu, Sep 29, 2011 at 1:34 PM, Brad Figg <brad.figg@canonical.com>
>> Please note that the buglink referred to in the commit is a Private bug.
>
> We has a public butlink for it already:
>
>           https://bugs.launchpad.net/bugs/816484

Today we have another report on the same bug:

         https://bugs.launchpad.net/bugs/861685

thanks,
--
Ming Lei
Andy Whitcroft Sept. 29, 2011, 9:03 a.m. UTC | #8
On Thu, Sep 29, 2011 at 11:53:35AM +0800, Ming Lei wrote:
> 
> Hi,
> 
> On Tue, 26 Jul 2011 22:02:45 +0800
> Ming Lei <ming.lei@canonical.com> wrote:
> 
> > On Tue, 26 Jul 2011 07:04:00 -0600
> > Tim Gardner <tim.gardner@canonical.com> wrote:
> > > >
> > > >   	uvc_trace(UVC_TRACE_SUSPEND, "Resume: video streaming USB interface "
> > > 
> > > Its best if you remind us when its been merged in Linus' tree so we can 
> > > just cherry-pick it in its final form.
> > 
> > No problem, I will put an eye on it, and let you know if the patch is
> > merged into linus tree.
> 
> The patch has been in -next tree and media tree for some days, so could you
> take the patch now so that it won't block hw certification any longer.
> 
> This one is OK for Natty, but for Oneric, you may need to take the one from
> -next or media tree.

Could you point us at the patch in those trees?  With the kernel.org
debackle its hard to know even where to look for the tree let alone the
patch.

-apw
Ming Lei Sept. 29, 2011, 9:27 a.m. UTC | #9
Hi,

On Thu, Sep 29, 2011 at 5:03 PM, Andy Whitcroft <apw@canonical.com>
> Could you point us at the patch in those trees?  With the kernel.org
> debackle its hard to know even where to look for the tree let alone the
> patch.

You may find the patch in the tree[1], and the pull request from maintainer
in link[2].


[1],http://git.linuxtv.org/media_tree.git/commit/dd182e5416e872e30d90cf071758eec1cf6340d5

[2], http://marc.info/?l=linux-usb&m=131223713719091&w=2

thanks,
--
Ming Lei
Leann Ogasawara Sept. 29, 2011, 4:42 p.m. UTC | #10
On Thu, 2011-09-29 at 17:27 +0800, Ming Lei wrote:
> Hi,
> 
> On Thu, Sep 29, 2011 at 5:03 PM, Andy Whitcroft <apw@canonical.com>
> > Could you point us at the patch in those trees?  With the kernel.org
> > debackle its hard to know even where to look for the tree let alone the
> > patch.
> 
> You may find the patch in the tree[1], and the pull request from maintainer
> in link[2].
> 
> 
> [1],http://git.linuxtv.org/media_tree.git/commit/dd182e5416e872e30d90cf071758eec1cf6340d5

This patch cherry-picks cleanly into Oneiric from the above repo.  This
does appear to have a higher risk of regression as it affects all
devices.  However, given the current upstream status and testing:

Acked-by: Leann Ogasawara <leann.ogasawara@canonical.com>

> [2], http://marc.info/?l=linux-usb&m=131223713719091&w=2
> 
> thanks,
> --
> Ming Lei
>
Tim Gardner Sept. 30, 2011, 8:11 p.m. UTC | #11
On 09/28/2011 09:53 PM, Ming Lei wrote:
>
> Hi,
>
> On Tue, 26 Jul 2011 22:02:45 +0800
> Ming Lei<ming.lei@canonical.com>  wrote:
>
>> On Tue, 26 Jul 2011 07:04:00 -0600
>> Tim Gardner<tim.gardner@canonical.com>  wrote:
>>>>
>>>>    	uvc_trace(UVC_TRACE_SUSPEND, "Resume: video streaming USB interface "
>>>
>>> Its best if you remind us when its been merged in Linus' tree so we can
>>> just cherry-pick it in its final form.
>>
>> No problem, I will put an eye on it, and let you know if the patch is
>> merged into linus tree.
>
> The patch has been in -next tree and media tree for some days, so could you
> take the patch now so that it won't block hw certification any longer.
>
> This one is OK for Natty, but for Oneric, you may need to take the one from
> -next or media tree.
>
>
> thanks,

Applied to Natty, Oneiric, and P
Ming Lei Oct. 12, 2011, 1:11 a.m. UTC | #12
On Fri, Sep 30, 2011 at 12:42 AM, Leann Ogasawara
<leann.ogasawara@canonical.com> wrote:
> On Thu, 2011-09-29 at 17:27 +0800, Ming Lei wrote:
>> Hi,
>>
>> On Thu, Sep 29, 2011 at 5:03 PM, Andy Whitcroft <apw@canonical.com>
>> > Could you point us at the patch in those trees?  With the kernel.org
>> > debackle its hard to know even where to look for the tree let alone the
>> > patch.
>>
>> You may find the patch in the tree[1], and the pull request from maintainer
>> in link[2].
>>
>>
>> [1],http://git.linuxtv.org/media_tree.git/commit/dd182e5416e872e30d90cf071758eec1cf6340d5
>
> This patch cherry-picks cleanly into Oneiric from the above repo.  This
> does appear to have a higher risk of regression as it affects all
> devices.  However, given the current upstream status and testing:
>
> Acked-by: Leann Ogasawara <leann.ogasawara@canonical.com>
>
>> [2], http://marc.info/?l=linux-usb&m=131223713719091&w=2

The patch has been merged into upstream v3.1-rc9, so could it
be merged into Oneiric now?

Our certification team is waiting for it [1], :-)

[1], https://bugs.launchpad.net/bugs/816484.

thanks,
--
Ming Lei
Leann Ogasawara Oct. 12, 2011, 3:46 a.m. UTC | #13
On Wed, 2011-10-12 at 09:11 +0800, Ming Lei wrote:
> On Fri, Sep 30, 2011 at 12:42 AM, Leann Ogasawara
> <leann.ogasawara@canonical.com> wrote:
> > On Thu, 2011-09-29 at 17:27 +0800, Ming Lei wrote:
> >> Hi,
> >>
> >> On Thu, Sep 29, 2011 at 5:03 PM, Andy Whitcroft <apw@canonical.com>
> >> > Could you point us at the patch in those trees?  With the kernel.org
> >> > debackle its hard to know even where to look for the tree let alone the
> >> > patch.
> >>
> >> You may find the patch in the tree[1], and the pull request from maintainer
> >> in link[2].
> >>
> >>
> >> [1],http://git.linuxtv.org/media_tree.git/commit/dd182e5416e872e30d90cf071758eec1cf6340d5
> >
> > This patch cherry-picks cleanly into Oneiric from the above repo.  This
> > does appear to have a higher risk of regression as it affects all
> > devices.  However, given the current upstream status and testing:
> >
> > Acked-by: Leann Ogasawara <leann.ogasawara@canonical.com>
> >
> >> [2], http://marc.info/?l=linux-usb&m=131223713719091&w=2
> 
> The patch has been merged into upstream v3.1-rc9, so could it
> be merged into Oneiric now?

It was applied to Oneiric back on Sept 30:

https://lists.ubuntu.com/archives/kernel-team/2011-September/017199.html

~/ubuntu-oneiric$ git show 13bede6cf7c329a3037d2dfbd5a7889bd1e6a016
commit 13bede6cf7c329a3037d2dfbd5a7889bd1e6a016
Author: Ming Lei <tom.leiming@gmail.com>
Date:   Sat Jul 16 00:51:00 2011 -0300

    UBUNTU: SAUCE: [media] uvcvideo: Set alternate setting 0 on resume if the bus has been reset

I would note that it's in the Oneiric master-next branch in our git
repo.  It will be released with the first Oneiric kernel SRU.

Thanks,
Leann

> Our certification team is waiting for it [1], :-)
> 
> [1], https://bugs.launchpad.net/bugs/816484.
> 
> thanks,
> --
> Ming Lei
Ming Lei Oct. 12, 2011, 4 a.m. UTC | #14
Hi,

On Wed, Oct 12, 2011 at 11:46 AM, Leann Ogasawara
> I would note that it's in the Oneiric master-next branch in our git
> repo.  It will be released with the first Oneiric kernel SRU.

Thanks.

Sorry for not being aware of master-next branch, :-)


thanks,
--
Ming Lei
diff mbox

Patch

diff --git a/drivers/media/video/uvc/uvc_driver.c b/drivers/media/video/uvc/uvc_driver.c
index b6eae48..41c6d1a 100644
--- a/drivers/media/video/uvc/uvc_driver.c
+++ b/drivers/media/video/uvc/uvc_driver.c
@@ -1959,8 +1959,20 @@  static int __uvc_resume(struct usb_interface *intf, int reset)
 	}
 
 	list_for_each_entry(stream, &dev->streams, list) {
-		if (stream->intf == intf)
+		if (stream->intf == intf) {
+			/*
+			 * After usb bus reset, some devices may
+			 * misbehave if SetInterface(0) is not done, for
+			 * example, Microdia camera(0c45:6437) will stop
+			 * sending streaming data. Looks like XBox Live
+			 * Vision Cam needs it too, as commented in
+			 * uvc_video_init.
+			 */
+			if (reset)
+				usb_set_interface(stream->dev->udev,
+					stream->intfnum, 0);
 			return uvc_video_resume(stream);
+		}
 	}
 
 	uvc_trace(UVC_TRACE_SUSPEND, "Resume: video streaming USB interface "