mmc: Add MMC_PROGRESS_*
[pandora-kernel.git] / drivers / staging / usbvideo / vicam.c
index ecdb121..38a373a 100644 (file)
 #include <linux/ihex.h>
 #include "usbvideo.h"
 
-// #define VICAM_DEBUG
+/* #define VICAM_DEBUG */
 
 #ifdef VICAM_DEBUG
-#define ADBG(lineno,fmt,args...) printk(fmt, jiffies, __func__, lineno, ##args)
-#define DBG(fmt,args...) ADBG((__LINE__),KERN_DEBUG __FILE__"(%ld):%s (%d):"fmt,##args)
+#define ADBG(lineno, fmt, args...) printk(fmt, jiffies, __func__, lineno, ##args)
+#define DBG(fmt, args...) ADBG((__LINE__), KERN_DEBUG __FILE__"(%ld):%s (%d):"fmt, ##args)
 #else
-#define DBG(fmn,args...) do {} while(0)
+#define DBG(fmn, args...) do {} while (0)
 #endif
 
 #define DRIVER_AUTHOR           "Joe Burks, jburks@wavicle.org"
@@ -118,15 +118,15 @@ static void rvfree(void *mem, unsigned long size)
 }
 
 struct vicam_camera {
-       u16 shutter_speed;      // capture shutter speed
-       u16 gain;               // capture gain
+       u16 shutter_speed;      /* capture shutter speed */
+       u16 gain;               /* capture gain */
 
-       u8 *raw_image;          // raw data captured from the camera
-       u8 *framebuf;           // processed data in RGB24 format
-       u8 *cntrlbuf;           // area used to send control msgs
+       u8 *raw_image;          /* raw data captured from the camera */
+       u8 *framebuf;           /* processed data in RGB24 format */
+       u8 *cntrlbuf;           /* area used to send control msgs */
 
-       struct video_device vdev;       // v4l video device
-       struct usb_device *udev;        // usb device
+       struct video_device vdev;       /* v4l video device */
+       struct usb_device *udev;        /* usb device */
 
        /* guard against simultaneous accesses to the camera */
        struct mutex cam_lock;
@@ -137,7 +137,7 @@ struct vicam_camera {
        int needsDummyRead;
 };
 
-static int vicam_probe( struct usb_interface *intf, const struct usb_device_id *id);
+static int vicam_probe(struct usb_interface *intf, const struct usb_device_id *id);
 static void vicam_disconnect(struct usb_interface *intf);
 static void read_frame(struct vicam_camera *cam, int framenum);
 static void vicam_decode_color(const u8 *, u8 *);
@@ -219,12 +219,12 @@ set_camera_power(struct vicam_camera *cam, int state)
 {
        int status;
 
-       if ((status = send_control_msg(cam, 0x50, state, 0, NULL, 0)) < 0)
+       status = send_control_msg(cam, 0x50, state, 0, NULL, 0);
+       if (status < 0)
                return status;
 
-       if (state) {
+       if (state)
                send_control_msg(cam, 0x55, 1, 0, NULL, 0);
-       }
 
        return 0;
 }
@@ -307,11 +307,11 @@ vicam_ioctl(struct file *file, unsigned int ioctlnr, unsigned long arg)
                {
                        struct video_picture vp;
                        DBG("VIDIOCGPICT\n");
-                       memset(&vp, 0, sizeof (struct video_picture));
+                       memset(&vp, 0, sizeof(struct video_picture));
                        vp.brightness = cam->gain << 8;
                        vp.depth = 24;
                        vp.palette = VIDEO_PALETTE_RGB24;
-                       if (copy_to_user(user_arg, &vp, sizeof (struct video_picture)))
+                       if (copy_to_user(user_arg, &vp, sizeof(struct video_picture)))
                                retval = -EFAULT;
                        break;
                }
@@ -355,8 +355,8 @@ vicam_ioctl(struct file *file, unsigned int ioctlnr, unsigned long arg)
                        if (copy_to_user(user_arg, (void *)&vw, sizeof(vw)))
                                retval = -EFAULT;
 
-                       // I'm not sure what the deal with a capture window is, it is very poorly described
-                       // in the doc.  So I won't support it now.
+                       /* I'm not sure what the deal with a capture window is, it is very poorly described
+                        * in the doc.  So I won't support it now. */
                        break;
                }
 
@@ -372,7 +372,7 @@ vicam_ioctl(struct file *file, unsigned int ioctlnr, unsigned long arg)
 
                        DBG("VIDIOCSWIN %d x %d\n", vw.width, vw.height);
 
-                       if ( vw.width != 320 || vw.height != 240 )
+                       if (vw.width != 320 || vw.height != 240)
                                retval = -EFAULT;
 
                        break;
@@ -385,7 +385,7 @@ vicam_ioctl(struct file *file, unsigned int ioctlnr, unsigned long arg)
                        int i;
 
                        DBG("VIDIOCGMBUF\n");
-                       memset(&vm, 0, sizeof (vm));
+                       memset(&vm, 0, sizeof(vm));
                        vm.size =
                            VICAM_MAX_FRAME_SIZE * VICAM_FRAMES;
                        vm.frames = VICAM_FRAMES;
@@ -401,23 +401,24 @@ vicam_ioctl(struct file *file, unsigned int ioctlnr, unsigned long arg)
        case VIDIOCMCAPTURE:
                {
                        struct video_mmap vm;
-                       // int video_size;
+                       /* int video_size; */
 
                        if (copy_from_user((void *)&vm, user_arg, sizeof(vm))) {
                                retval = -EFAULT;
                                break;
                        }
 
-                       DBG("VIDIOCMCAPTURE frame=%d, height=%d, width=%d, format=%d.\n",vm.frame,vm.width,vm.height,vm.format);
+                       DBG("VIDIOCMCAPTURE frame=%d, height=%d, width=%d, format=%d.\n",
+                           vm.frame, vm.width, vm.height, vm.format);
 
-                       if ( vm.frame >= VICAM_FRAMES || vm.format != VIDEO_PALETTE_RGB24 )
+                       if (vm.frame >= VICAM_FRAMES || vm.format != VIDEO_PALETTE_RGB24)
                                retval = -EINVAL;
 
-                       // in theory right here we'd start the image capturing
-                       // (fill in a bulk urb and submit it asynchronously)
-                       //
-                       // Instead we're going to do a total hack job for now and
-                       // retrieve the frame in VIDIOCSYNC
+                       /* in theory right here we'd start the image capturing
+                        * (fill in a bulk urb and submit it asynchronously)
+                        *
+                        * Instead we're going to do a total hack job for now and
+                        * retrieve the frame in VIDIOCSYNC */
 
                        break;
                }
@@ -435,7 +436,7 @@ vicam_ioctl(struct file *file, unsigned int ioctlnr, unsigned long arg)
                        read_frame(cam, frame);
                        vicam_decode_color(cam->raw_image,
                                           cam->framebuf +
-                                          frame * VICAM_MAX_FRAME_SIZE );
+                                          frame * VICAM_MAX_FRAME_SIZE);
 
                        break;
                }
@@ -522,7 +523,7 @@ vicam_open(struct file *file)
        mutex_unlock(&cam->cam_lock);
 
 
-       // First upload firmware, then turn the camera on
+       /* First upload firmware, then turn the camera on */
 
        if (!cam->is_initialized) {
                initialize_camera(cam);
@@ -562,9 +563,8 @@ vicam_close(struct file *file)
 
        mutex_unlock(&cam->cam_lock);
 
-       if (!open_count && !udev) {
+       if (!open_count && !udev)
                kfree(cam);
-       }
 
        return 0;
 }
@@ -582,57 +582,55 @@ static void vicam_decode_color(const u8 *data, u8 *rgb)
 
        data += VICAM_HEADER_SIZE;
 
-       for( i = 0; i < 240; i++, data += 512 ) {
-               const int y = ( i * 242 ) / 240;
+       for (i = 0; i < 240; i++, data += 512) {
+               const int y = (i * 242) / 240;
 
                int j, prevX, nextX;
                int Y, Cr, Cb;
 
-               if ( y == 242 - 1 ) {
+               if (y == 242 - 1)
                        nextY = -512;
-               }
 
                prevX = 1;
                nextX = 1;
 
-               for ( j = 0; j < 320; j++, rgb += 3 ) {
-                       const int x = ( j * 512 ) / 320;
+               for (j = 0; j < 320; j++, rgb += 3) {
+                       const int x = (j * 512) / 320;
                        const u8 * const src = &data[x];
 
-                       if ( x == 512 - 1 ) {
+                       if (x == 512 - 1)
                                nextX = -1;
-                       }
 
-                       Cr = ( src[prevX] - src[0] ) +
-                               ( src[nextX] - src[0] );
+                       Cr = (src[prevX] - src[0]) +
+                               (src[nextX] - src[0]);
                        Cr /= 2;
 
-                       Cb = ( src[prevY] - src[prevX + prevY] ) +
-                               ( src[prevY] - src[nextX + prevY] ) +
-                               ( src[nextY] - src[prevX + nextY] ) +
-                               ( src[nextY] - src[nextX + nextY] );
+                       Cb = (src[prevY] - src[prevX + prevY]) +
+                               (src[prevY] - src[nextX + prevY]) +
+                               (src[nextY] - src[prevX + nextY]) +
+                               (src[nextY] - src[nextX + nextY]);
                        Cb /= 4;
 
-                       Y = 1160 * ( src[0] + ( Cr / 2 ) - 16 );
+                       Y = 1160 * (src[0] + (Cr / 2) - 16);
 
-                       if ( i & 1 ) {
+                       if (i & 1) {
                                int Ct = Cr;
                                Cr = Cb;
                                Cb = Ct;
                        }
 
-                       if ( ( x ^ i ) & 1 ) {
+                       if ((x ^ i) & 1) {
                                Cr = -Cr;
                                Cb = -Cb;
                        }
 
-                       rgb[0] = clamp( ( ( Y + ( 2017 * Cb ) ) +
-                                       500 ) / 900, 0, 255 );
-                       rgb[1] = clamp( ( ( Y - ( 392 * Cb ) -
-                                         ( 813 * Cr ) ) +
-                                         500 ) / 1000, 0, 255 );
-                       rgb[2] = clamp( ( ( Y + ( 1594 * Cr ) ) +
-                                       500 ) / 1300, 0, 255 );
+                       rgb[0] = clamp(((Y + (2017 * Cb)) +
+                                       500) / 900, 0, 255);
+                       rgb[1] = clamp(((Y - (392 * Cb) -
+                                         (813 * Cr)) +
+                                         500) / 1000, 0, 255);
+                       rgb[2] = clamp(((Y + (1594 * Cr)) +
+                                       500) / 1300, 0, 255);
 
                        prevX = -1;
                }
@@ -655,15 +653,15 @@ read_frame(struct vicam_camera *cam, int framenum)
        }
 
        memset(request, 0, 16);
-       request[0] = cam->gain; // 0 = 0% gain, FF = 100% gain
+       request[0] = cam->gain; /* 0 = 0% gain, FF = 100% gain */
 
-       request[1] = 0; // 512x242 capture
+       request[1] = 0; /* 512x242 capture */
 
-       request[2] = 0x90;      // the function of these two bytes
-       request[3] = 0x07;      // is not yet understood
+       request[2] = 0x90;      /* the function of these two bytes */
+       request[3] = 0x07;      /* is not yet understood */
 
        if (cam->shutter_speed > 60) {
-               // Short exposure
+               /* Short exposure */
                realShutter =
                    ((-15631900 / cam->shutter_speed) + 260533) / 1000;
                request[4] = realShutter & 0xFF;
@@ -671,7 +669,7 @@ read_frame(struct vicam_camera *cam, int framenum)
                request[6] = 0x03;
                request[7] = 0x01;
        } else {
-               // Long exposure
+               /* Long exposure */
                realShutter = 15600 / cam->shutter_speed - 1;
                request[4] = 0;
                request[5] = 0;
@@ -679,15 +677,14 @@ read_frame(struct vicam_camera *cam, int framenum)
                request[7] = realShutter >> 8;
        }
 
-       // Per John Markus Bjørndalen, byte at index 8 causes problems if it isn't 0
+       /* Per John Markus Bjørndalen, byte at index 8 causes problems if it isn't 0*/
        request[8] = 0;
-       // bytes 9-15 do not seem to affect exposure or image quality
+       /* bytes 9-15 do not seem to affect exposure or image quality */
 
        mutex_lock(&cam->cam_lock);
 
-       if (!cam->udev) {
+       if (!cam->udev)
                goto done;
-       }
 
        n = __send_control_msg(cam, 0x51, 0x80, 0, request, 16);
 
@@ -712,7 +709,7 @@ read_frame(struct vicam_camera *cam, int framenum)
 }
 
 static ssize_t
-vicam_read( struct file *file, char __user *buf, size_t count, loff_t *ppos )
+vicam_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
 {
        struct vicam_camera *cam = file->private_data;
 
@@ -732,15 +729,13 @@ vicam_read( struct file *file, char __user *buf, size_t count, loff_t *ppos )
 
        count = min_t(size_t, count, VICAM_MAX_FRAME_SIZE - *ppos);
 
-       if (copy_to_user(buf, &cam->framebuf[*ppos], count)) {
+       if (copy_to_user(buf, &cam->framebuf[*ppos], count))
                count = -EFAULT;
-       } else {
+       else
                *ppos += count;
-       }
 
-       if (count == VICAM_MAX_FRAME_SIZE) {
+       if (count == VICAM_MAX_FRAME_SIZE)
                *ppos = 0;
-       }
 
        return count;
 }
@@ -749,7 +744,7 @@ vicam_read( struct file *file, char __user *buf, size_t count, loff_t *ppos )
 static int
 vicam_mmap(struct file *file, struct vm_area_struct *vma)
 {
-       // TODO: allocate the raw frame buffer if necessary
+       /* TODO: allocate the raw frame buffer if necessary */
        unsigned long page, pos;
        unsigned long start = vma->vm_start;
        unsigned long size  = vma->vm_end-vma->vm_start;
@@ -793,9 +788,9 @@ static const struct v4l2_file_operations vicam_fops = {
 };
 
 static struct video_device vicam_template = {
-       .name           = "ViCam-based USB Camera",
-       .fops           = &vicam_fops,
-       .release        = video_device_release_empty,
+       .name           = "ViCam-based USB Camera",
+       .fops           = &vicam_fops,
+       .release        = video_device_release_empty,
 };
 
 /* table of devices that work with this driver */
@@ -823,7 +818,7 @@ static struct usb_driver vicam_driver = {
  *     this driver might be interested in.
  */
 static int
-vicam_probe( struct usb_interface *intf, const struct usb_device_id *id)
+vicam_probe(struct usb_interface *intf, const struct usb_device_id *id)
 {
        struct usb_device *dev = interface_to_usbdev(intf);
        int bulkEndpoint = 0;
@@ -847,8 +842,8 @@ vicam_probe( struct usb_interface *intf, const struct usb_device_id *id)
                       "No bulk in endpoint was found ?! (this is bad)\n");
        }
 
-       if ((cam =
-            kzalloc(sizeof (struct vicam_camera), GFP_KERNEL)) == NULL) {
+       cam = kzalloc(sizeof(struct vicam_camera), GFP_KERNEL);
+       if (cam == NULL) {
                printk(KERN_WARNING
                       "could not allocate kernel memory for vicam_camera struct\n");
                return -ENOMEM;
@@ -874,7 +869,7 @@ vicam_probe( struct usb_interface *intf, const struct usb_device_id *id)
        printk(KERN_INFO "ViCam webcam driver now controlling device %s\n",
                video_device_node_name(&cam->vdev));
 
-       usb_set_intfdata (intf, cam);
+       usb_set_intfdata(intf, cam);
 
        return 0;
 }
@@ -883,8 +878,8 @@ static void
 vicam_disconnect(struct usb_interface *intf)
 {
        int open_count;
-       struct vicam_camera *cam = usb_get_intfdata (intf);
-       usb_set_intfdata (intf, NULL);
+       struct vicam_camera *cam = usb_get_intfdata(intf);
+       usb_set_intfdata(intf, NULL);
 
        /* we must unregister the device before taking its
         * cam_lock. This is because the video open call
@@ -914,9 +909,8 @@ vicam_disconnect(struct usb_interface *intf)
 
        mutex_unlock(&cam->cam_lock);
 
-       if (!open_count) {
+       if (!open_count)
                kfree(cam);
-       }
 
        printk(KERN_DEBUG "ViCam-based WebCam disconnected\n");
 }