Skip to content

Commit

Permalink
[media] gspca - main: Correct use of interval in bandwidth calculation
Browse files Browse the repository at this point in the history
The calculated bandwidth should not be multiplied by the interval, but be
divided by it. Also bInterbval should be interpreted as a power of 2
for isochronous endpoints.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Jean-François Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Hans de Goede authored and Mauro Carvalho Chehab committed Jan 6, 2012
1 parent 66957b8 commit d0d3435
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion drivers/media/video/gspca/gspca.c
Original file line number Diff line number Diff line change
Expand Up @@ -698,12 +698,17 @@ static int build_isoc_ep_tb(struct gspca_dev *gspca_dev,
USB_ENDPOINT_XFER_ISOC);
if (ep == NULL)
continue;
if (ep->desc.bInterval == 0) {
pr_err("alt %d iso endp with 0 interval\n", j);
continue;
}
psize = le16_to_cpu(ep->desc.wMaxPacketSize);
psize = (psize & 0x07ff) * (1 + ((psize >> 11) & 3));
bandwidth = psize * ep->desc.bInterval * 1000;
bandwidth = psize * 1000;
if (gspca_dev->dev->speed == USB_SPEED_HIGH
|| gspca_dev->dev->speed == USB_SPEED_SUPER)
bandwidth *= 8;
bandwidth /= 1 << (ep->desc.bInterval - 1);
if (bandwidth <= last_bw)
continue;
if (bandwidth < ep_tb->bandwidth) {
Expand Down

0 comments on commit d0d3435

Please sign in to comment.