vserver 1.9.3
[linux-2.6.git] / drivers / usb / media / konicawc.c
index 8fafc27..3376654 100644 (file)
@@ -68,7 +68,7 @@ static const int debug = 0;
 /* Some default values for initial camera settings,
    can be set by modprobe */
 
-static enum frame_sizes size;  
+static int size;       
 static int speed = 6;          /* Speed (fps) 0 (slowest) to 6 (fastest) */
 static int brightness =        MAX_BRIGHTNESS/2;
 static int contrast =  MAX_CONTRAST/2;
@@ -324,7 +324,7 @@ static void resubmit_urb(struct uvd *uvd, struct urb *urb)
         }
         urb->dev = uvd->dev;
         urb->status = 0;
-        ret = usb_submit_urb(urb, GFP_KERNEL);
+       ret = usb_submit_urb(urb, GFP_ATOMIC);
        DEBUG(3, "submitting urb of length %d", urb->transfer_buffer_length);
         if(ret)
                 err("usb_submit_urb error (%d)", ret);
@@ -362,8 +362,8 @@ static void konicawc_isoc_irq(struct urb *urb, struct pt_regs *regs)
                else if (!urb->status && !cam->last_data_urb->status)
                        len = konicawc_compress_iso(uvd, cam->last_data_urb, urb);
 
-               resubmit_urb(uvd, urb);
                resubmit_urb(uvd, cam->last_data_urb);
+               resubmit_urb(uvd, urb);
                cam->last_data_urb = NULL;
                uvd->stats.urb_length = len;
                uvd->stats.data_count += len;
@@ -381,9 +381,15 @@ static int konicawc_start_data(struct uvd *uvd)
        int i, errFlag;
        struct konicawc *cam = (struct konicawc *)uvd->user_data;
        int pktsz;
-       struct usb_host_interface *interface;
-
-       interface = &dev->actconfig->interface[uvd->iface]->altsetting[spd_to_iface[cam->speed]];
+       struct usb_interface *intf;
+       struct usb_host_interface *interface = NULL;
+
+       intf = usb_ifnum_to_if(dev, uvd->iface);
+       if (intf)
+               interface = usb_altnum_to_altsetting(intf,
+                               spd_to_iface[cam->speed]);
+       if (!interface)
+               return -ENXIO;
        pktsz = interface->endpoint[1].desc.wMaxPacketSize;
        DEBUG(1, "pktsz = %d", pktsz);
        if (!CAMERA_IS_OPERATIONAL(uvd)) {
@@ -721,7 +727,7 @@ static int konicawc_probe(struct usb_interface *intf, const struct usb_device_id
 {
        struct usb_device *dev = interface_to_usbdev(intf);
        struct uvd *uvd = NULL;
-       int i, nas;
+       int ix, i, nas;
        int actInterface=-1, inactInterface=-1, maxPS=0;
        unsigned char video_ep = 0;
 
@@ -741,11 +747,12 @@ static int konicawc_probe(struct usb_interface *intf, const struct usb_device_id
                return -ENODEV;
        }
        /* Validate all alternate settings */
-       for (i=0; i < nas; i++) {
+       for (ix=0; ix < nas; ix++) {
                const struct usb_host_interface *interface;
                const struct usb_endpoint_descriptor *endpoint;
 
-               interface = &intf->altsetting[i];
+               interface = &intf->altsetting[ix];
+               i = interface->desc.bAlternateSetting;
                if (interface->desc.bNumEndpoints != 2) {
                        err("Interface %d. has %u. endpoints!",
                            interface->desc.bInterfaceNumber,
@@ -921,23 +928,23 @@ MODULE_DEVICE_TABLE(usb, id_table);
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Simon Evans <spse@secret.org.uk>");
 MODULE_DESCRIPTION(DRIVER_DESC);
-MODULE_PARM(speed, "i");
+module_param(speed, int, 0);
 MODULE_PARM_DESC(speed, "Initial speed: 0 (slowest) - 6 (fastest)");
-MODULE_PARM(size, "i");
+module_param(size, int, 0);
 MODULE_PARM_DESC(size, "Initial Size 0: 160x120 1: 160x136 2: 176x144 3: 320x240");
-MODULE_PARM(brightness, "i");
+module_param(brightness, int, 0);
 MODULE_PARM_DESC(brightness, "Initial brightness 0 - 108");
-MODULE_PARM(contrast, "i");
+module_param(contrast, int, 0);
 MODULE_PARM_DESC(contrast, "Initial contrast 0 - 108");
-MODULE_PARM(saturation, "i");
+module_param(saturation, int, 0);
 MODULE_PARM_DESC(saturation, "Initial saturation 0 - 108");
-MODULE_PARM(sharpness, "i");
+module_param(sharpness, int, 0);
 MODULE_PARM_DESC(sharpness, "Initial brightness 0 - 108");
-MODULE_PARM(whitebal, "i");
+module_param(whitebal, int, 0);
 MODULE_PARM_DESC(whitebal, "Initial white balance 0 - 363");
 
 #ifdef CONFIG_USB_DEBUG
-MODULE_PARM(debug, "i");
+module_param(debug, int, S_IRUGO | S_IWUSR);
 MODULE_PARM_DESC(debug, "Debug level: 0-9 (default=0)");
 #endif