All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ming Lei <tom.leiming@gmail.com>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Ming Lei <ming.lei@canonical.com>,
	linux-media@vger.kernel.org, linux-usb@vger.kernel.org,
	Jeremy Kerr <jeremy.kerr@canonical.com>,
	Mauro Carvalho Chehab <mchehab@redhat.com>
Subject: Re: [PATCH] uvcvideo: add fix suspend/resume quirk for Microdia camera
Date: Fri, 15 Jul 2011 21:53:34 +0800	[thread overview]
Message-ID: <CACVXFVM=P7dongW660zmcSdapyqYz3Yr0R4DUGbQtQEKUG_tcw@mail.gmail.com> (raw)
In-Reply-To: <Pine.LNX.4.44L0.1107141055270.1983-100000@iolanthe.rowland.org>

Hi,

On Thu, Jul 14, 2011 at 11:03 PM, Alan Stern <stern@rowland.harvard.edu> wrote:

> More likely, the reset erases some device setting that uvcvideo
> installed while binding.  Evidently uvcvideo does not re-install the
> setting during reset-resume; this is probably a bug in the driver.

Alan, you are right.

I think I have found the root cause. Given many devices can't
handle set_interface(0) if the interfaces were already in altsetting 0,
usb_reset_and_verify_device does not run set_interface(0). So we
need to do it in .reset_resume handler of uvc driver and it is always
safe for uvc devices.

I have tested the below patch, and it can make the uvc device work
well after rpm resume and system resume(reset resume), both in
streaming on and off case.

Alan, Laurent, if you have no objections, I will submit a formal one.

diff --git a/drivers/media/video/uvc/uvc_driver.c
b/drivers/media/video/uvc/uvc_driver.c
index b6eae48..4055dfc 100644
--- a/drivers/media/video/uvc/uvc_driver.c
+++ b/drivers/media/video/uvc/uvc_driver.c
@@ -1959,8 +1959,12 @@ 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) {
+			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 "



thanks,
-- 
Ming Lei

  parent reply	other threads:[~2011-07-15 13:53 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-11  9:48 [PATCH] uvcvideo: add fix suspend/resume quirk for Microdia camera Ming Lei
2011-07-11 10:44 ` Laurent Pinchart
2011-07-12  1:21   ` Ming Lei
2011-07-12 10:52     ` Ming Lei
2011-07-12 15:44       ` Alan Stern
2011-07-13  7:43         ` Ming Lei
2011-07-13 15:20           ` Alan Stern
2011-07-13 15:30             ` Ming Lei
2011-07-13 15:59               ` Alan Stern
2011-07-14  9:16                 ` Ming Lei
2011-07-14 15:03                   ` Alan Stern
2011-07-15  2:08                     ` Ming Lei
2011-07-15 13:53                     ` Ming Lei [this message]
2011-07-15 14:27                       ` Alan Stern
2011-07-15 14:44                         ` Ming Lei
2011-07-15 15:25                           ` Alan Stern
2011-07-16  3:51                             ` [PATCH] uvcvideo: add SetInterface(0) in .reset_resume handler Ming Lei
2011-07-31 15:38                               ` Laurent Pinchart
2011-08-01  0:56                                 ` Ming Lei
2011-08-01 11:26                                   ` Laurent Pinchart
2011-08-01 17:39                                     ` Mauro Carvalho Chehab
2011-08-01 22:19                                       ` [GIT PATCH FOR v3.1] uvcvideo: Set alternate setting 0 on resume if the bus has been reset Laurent Pinchart
2011-07-13  8:35         ` [PATCH] uvcvideo: add fix suspend/resume quirk for Microdia camera Ming Lei
2011-07-13  8:38     ` Laurent Pinchart
2011-07-13  8:51       ` Ming Lei
2011-07-13  8:55         ` Oliver Neukum
2011-07-13  8:59         ` Laurent Pinchart
2011-07-13  9:07           ` Ming Lei
2011-07-11 10:51 ` Sergei Shtylyov

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='CACVXFVM=P7dongW660zmcSdapyqYz3Yr0R4DUGbQtQEKUG_tcw@mail.gmail.com' \
    --to=tom.leiming@gmail.com \
    --cc=jeremy.kerr@canonical.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=mchehab@redhat.com \
    --cc=ming.lei@canonical.com \
    --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.