Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 13455
b: refs/heads/master
c: 9d4d9c0
h: refs/heads/master
i:
  13453: 67cfc6c
  13451: 702c0dc
  13447: 572633c
  13439: 93e7cd1
v: v3
  • Loading branch information
Mauro Carvalho Chehab authored and Linus Torvalds committed Nov 9, 2005
1 parent 9a6846a commit 3026940
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 25 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 7f7e846ca552c4cf2e04b4666cea18dc26b36b59
refs/heads/master: 9d4d9c05c807ab8a49ac0024987b223bb32c022d
9 changes: 4 additions & 5 deletions trunk/drivers/media/video/em28xx/em28xx-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -797,20 +797,19 @@ int em28xx_set_alternate(struct em28xx *dev)
dev->alt = alt;
if (dev->alt == 0) {
int i;
for(i=0;i< EM28XX_MAX_ALT; i++)
for(i=0;i< dev->num_alt; i++)
if(dev->alt_max_pkt_size[i]>dev->alt_max_pkt_size[dev->alt])
dev->alt=i;
}

if (dev->alt != prev_alt) {
dev->max_pkt_size = dev->alt_max_pkt_size[dev->alt];
em28xx_coredbg("setting alternate %d with wMaxPacketSize=%u", dev->alt,
em28xx_coredbg("setting alternate %d with wMaxPacketSize=%u\n", dev->alt,
dev->max_pkt_size);
errCode = usb_set_interface(dev->udev, 0, dev->alt);
if (errCode < 0) {
em28xx_errdev
("cannot change alternate number to %d (error=%i)\n",
dev->alt, errCode);
em28xx_errdev ("cannot change alternate number to %d (error=%i)\n",
dev->alt, errCode);
return errCode;
}
}
Expand Down
45 changes: 28 additions & 17 deletions trunk/drivers/media/video/em28xx/em28xx-video.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,7 @@ MODULE_LICENSE("GPL");

static LIST_HEAD(em28xx_devlist);

static unsigned int card[] = {[0 ... (EM28XX_MAXBOARDS - 1)] = UNSET };

static unsigned int card[] = {[0 ... (EM28XX_MAXBOARDS - 1)] = UNSET };
module_param_array(card, int, NULL, 0444);
MODULE_PARM_DESC(card,"card type");

Expand Down Expand Up @@ -1591,7 +1590,6 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev,
int retval = -ENOMEM;
int errCode, i;
unsigned int maxh, maxw;
struct usb_interface *uif;

dev->udev = udev;
dev->model = model;
Expand Down Expand Up @@ -1651,17 +1649,6 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev,
dev->vpic.depth = 16;
dev->vpic.palette = VIDEO_PALETTE_YUV422;

/* compute alternate max packet sizes */
uif = dev->udev->actconfig->interface[0];
dev->alt_max_pkt_size[0] = 0;
for (i = 1; i <= EM28XX_MAX_ALT && i < uif->num_altsetting ; i++) {
u16 tmp =
le16_to_cpu(uif->altsetting[i].endpoint[1].desc.
wMaxPacketSize);
dev->alt_max_pkt_size[i] =
(tmp & 0x07ff) * (((tmp & 0x1800) >> 11) + 1);
}

#ifdef CONFIG_MODULES
/* request some modules */
if (dev->decoder == EM28XX_SAA7113 || dev->decoder == EM28XX_SAA7114)
Expand Down Expand Up @@ -1756,6 +1743,7 @@ static int em28xx_usb_probe(struct usb_interface *interface,
{
const struct usb_endpoint_descriptor *endpoint;
struct usb_device *udev;
struct usb_interface *uif;
struct em28xx *dev = NULL;
int retval = -ENODEV;
int model,i,nr,ifnum;
Expand Down Expand Up @@ -1795,7 +1783,7 @@ static int em28xx_usb_probe(struct usb_interface *interface,
nr=interface->minor;

if (nr>EM28XX_MAXBOARDS) {
printk ("em28xx: Supports only %i em28xx boards.\n",EM28XX_MAXBOARDS);
printk (DRIVER_NAME ": Supports only %i em28xx boards.\n",EM28XX_MAXBOARDS);
return -ENOMEM;
}

Expand All @@ -1807,6 +1795,28 @@ static int em28xx_usb_probe(struct usb_interface *interface,
}
memset(dev, 0, sizeof(*dev));

/* compute alternate max packet sizes */
uif = udev->actconfig->interface[0];

dev->num_alt=uif->num_altsetting;
printk(DRIVER_NAME ": Alternate settings: %i\n",dev->num_alt);
// dev->alt_max_pkt_size = kmalloc(sizeof(*dev->alt_max_pkt_size)*
dev->alt_max_pkt_size = kmalloc(32*
dev->num_alt,GFP_KERNEL);
if (dev->alt_max_pkt_size == NULL) {
em28xx_err(DRIVER_NAME ": out of memory!\n");
return -ENOMEM;
}

for (i = 0; i < dev->num_alt ; i++) {
u16 tmp = le16_to_cpu(uif->altsetting[i].endpoint[1].desc.
wMaxPacketSize);
dev->alt_max_pkt_size[i] =
(tmp & 0x07ff) * (((tmp & 0x1800) >> 11) + 1);
printk(DRIVER_NAME ": Alternate setting %i, max size= %i\n",i,
dev->alt_max_pkt_size[i]);
}

snprintf(dev->name, 29, "em28xx #%d", nr);

if ((card[nr]>=0)&&(card[nr]<em28xx_bcount))
Expand Down Expand Up @@ -1876,11 +1886,12 @@ static void em28xx_usb_disconnect(struct usb_interface *interface)

up(&dev->lock);

if (!dev->users)
if (!dev->users) {
kfree(dev->alt_max_pkt_size);
kfree(dev);
}

up_write(&em28xx_disconnect);

}

static struct usb_driver em28xx_usb_driver = {
Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/media/video/em28xx/em28xx.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@

/* default alternate; 0 means choose the best */
#define EM28XX_PINOUT 0
#define EM28XX_MAX_ALT 7

#define EM28XX_INTERLACED_DEFAULT 1

Expand Down Expand Up @@ -267,7 +266,8 @@ struct em28xx {
struct usb_device *udev; /* the usb device */
int alt; /* alternate */
int max_pkt_size; /* max packet size of isoc transaction */
unsigned int alt_max_pkt_size[EM28XX_MAX_ALT + 1]; /* array of wMaxPacketSize */
int num_alt; /* Number of alternative settings */
unsigned int *alt_max_pkt_size; /* array of wMaxPacketSize */
struct urb *urb[EM28XX_NUM_BUFS]; /* urb for isoc transfers */
char *transfer_buffer[EM28XX_NUM_BUFS]; /* transfer buffers for isoc transfer */
/* helper funcs that call usb_control_msg */
Expand Down

0 comments on commit 3026940

Please sign in to comment.