From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Thomas Pugliese <thomas.pugliese@gmail.com>
Cc: linux-media@vger.kernel.org, linux-usb@vger.kernel.org
Subject: Re: [PATCH] uvc: update uvc_endpoint_max_bpi to handle USB_SPEED_WIRELESS devices
Date: Wed, 16 Apr 2014 13:06:04 +0200 [thread overview]
Message-ID: <1482714.CWOKDIksaK@avalon> (raw)
In-Reply-To: <alpine.DEB.2.10.1404151553310.8128@mint32-virtualbox>
Hi Thomas,
(CC'ing the linux-usb mailing list)
On Tuesday 15 April 2014 16:45:28 Thomas Pugliese wrote:
> On Tue, 15 Apr 2014, Laurent Pinchart wrote:
> > Hi Thomas,
> >
> > Could you please send me a proper revert patch with the above description
> > in the commit message and CC Mauro Carvalho Chehab <m.chehab@samsung.com>
> > ?
>
> Hi Laurent,
> I can submit a patch to revert but I should make a correction first. I
> had backported this change to an earlier kernel (2.6.39) which was before
> super speed support was added and the regression I described was based on
> that kernel. It was actually the addition of super speed support that
> broke windows compatible devices. My previous change fixed spec compliant
> devices but left windows compatible devices broken.
>
> Basically, the timeline of changes is this:
>
> 1. Prior to the addition of super speed support (commit
> 6fd90db8df379e215): all WUSB devices were treated as HIGH_SPEED devices.
> This is how Windows works so Windows compatible devices would work. For
> spec compliant WUSB devices, the max packet size would be incorrectly
> calculated which would result in high-bandwidth isoc streams being unable
> to find an alt setting that provided enough bandwidth.
>
> 2. After super speed support: all WUSB devices fell through to the
> default case of uvc_endpoint_max_bpi which would mask off the upper bits
> of the max packet size. This broke both WUSB spec compliant and non
> compliant devices because no endpoint with a large enough bpi would be
> found.
>
> 3. After 79af67e77f86404e77e: Spec compliant devices are fixed but
> non-spec compliant (although Windows compatible) devices are broken.
> Basically, this is the opposite of how it worked prior to super speed
> support.
>
> Given that, I can submit a patch to revert 79af67e77f86404e77e but that
> would go back to having all WUSB devices broken. Alternatively, the
> change below will revert the behavior back to scenario 1 where Windows
> compatible devices work but strictly spec complaint devices may not.
>
> I can send a proper patch for whichever scenario you prefer.
Thank you for the explanation.
Reverting 79af67e77f86404e77e doesn't seem like a very good idea, given that
all WUSB devices will be broken. We thus have two options:
- leaving the code as-is, with support for spec-compliant WUSB devices but not
for microsoft-specific devices
- applying the patch below, with support for microsoft-specific USB devices
but not for spec-compliant devices
This isn't the first time this kind of situation occurs. Microsoft didn't
support multiple configurations before Windows 8, making vendors come up with
lots of "creative" MS-specific solutions. I consider those devices non USB
compliant, and they should not be allowed to use the USB logo, but that would
require a strong political move from the USB Implementers Forum which is more
or less controlled by Microsoft... Welcome to the USB mafia.
Anyway, I have no experience with WUSB devices, so I don't know what's more
common in the wild. What would you suggest ? Would there be a way to support
both categories of devices ?
> diff --git a/drivers/media/usb/uvc/uvc_video.c
> b/drivers/media/usb/uvc/uvc_video.c index 8d52baf..ed594d6 100644
> --- a/drivers/media/usb/uvc/uvc_video.c
> +++ b/drivers/media/usb/uvc/uvc_video.c
> @@ -1451,11 +1451,9 @@ static unsigned int uvc_endpoint_max_bpi(struct
> usb_device *dev, case USB_SPEED_SUPER:
> return ep->ss_ep_comp.wBytesPerInterval;
> case USB_SPEED_HIGH:
> - psize = usb_endpoint_maxp(&ep->desc);
> - return (psize & 0x07ff) * (1 + ((psize >> 11) & 3));
> case USB_SPEED_WIRELESS:
> psize = usb_endpoint_maxp(&ep->desc);
> - return psize;
> + return (psize & 0x07ff) * (1 + ((psize >> 11) & 3));
> default:
> psize = usb_endpoint_maxp(&ep->desc);
> return psize & 0x07ff;
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2014-04-16 11:06 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-24 21:17 [PATCH] uvc: update uvc_endpoint_max_bpi to handle USB_SPEED_WIRELESS devices Thomas Pugliese
2014-01-26 23:12 ` Laurent Pinchart
2014-01-27 15:54 ` Thomas Pugliese
2014-01-27 21:49 ` Laurent Pinchart
2014-04-15 2:07 ` Thomas Pugliese
2014-04-15 15:16 ` Laurent Pinchart
2014-04-15 21:45 ` Thomas Pugliese
2014-04-16 11:06 ` Laurent Pinchart [this message]
2014-04-16 17:29 ` Thomas Pugliese
2014-04-17 14:34 ` Laurent Pinchart
2014-04-17 14:53 ` Thomas Pugliese
2014-04-17 21:59 ` Laurent Pinchart
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=1482714.CWOKDIksaK@avalon \
--to=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=thomas.pugliese@gmail.com \
/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.