# This is a BitKeeper generated patch for the following project: # Project Name: Linux kernel tree # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet 1.588 -> 1.589 # drivers/usb/ov511.c 1.12 -> 1.13 # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 02/08/20 greg@kroah.com 1.589 # USB: ov511 driver update to the latest version # -------------------------------------------- # diff -Nru a/drivers/usb/ov511.c b/drivers/usb/ov511.c --- a/drivers/usb/ov511.c Wed Aug 21 11:47:30 2002 +++ b/drivers/usb/ov511.c Wed Aug 21 11:47:30 2002 @@ -57,7 +57,7 @@ /* * Version Information */ -#define DRIVER_VERSION "v1.50 for Linux 2.4" +#define DRIVER_VERSION "v1.50.01 for Linux 2.4" #define EMAIL "mmcclell@bigfoot.com" #define DRIVER_AUTHOR "Mark McClelland & Bret Wallach \ & Orion Sky Lawlor & Kevin Moore & Charl P. Botha \ @@ -335,7 +335,7 @@ { -1, NULL } }; -static __devinitdata struct usb_device_id device_table [] = { +static struct usb_device_id device_table [] = { { USB_DEVICE(VEND_OMNIVISION, PROD_OV511) }, { USB_DEVICE(VEND_OMNIVISION, PROD_OV511PLUS) }, { USB_DEVICE(VEND_OMNIVISION, PROD_OV518) }, @@ -349,17 +349,17 @@ #if defined(CONFIG_PROC_FS) && defined(CONFIG_VIDEO_PROC_FS) static struct palette_list plist[] = { { VIDEO_PALETTE_GREY, "GREY" }, - { VIDEO_PALETTE_HI240, "HI240" }, - { VIDEO_PALETTE_RGB565, "RGB565" }, + { VIDEO_PALETTE_HI240, "HI240" }, + { VIDEO_PALETTE_RGB565, "RGB565" }, { VIDEO_PALETTE_RGB24, "RGB24" }, { VIDEO_PALETTE_RGB32, "RGB32" }, - { VIDEO_PALETTE_RGB555, "RGB555" }, - { VIDEO_PALETTE_YUV422, "YUV422" }, - { VIDEO_PALETTE_YUYV, "YUYV" }, - { VIDEO_PALETTE_UYVY, "UYVY" }, - { VIDEO_PALETTE_YUV420, "YUV420" }, - { VIDEO_PALETTE_YUV411, "YUV411" }, - { VIDEO_PALETTE_RAW, "RAW" }, + { VIDEO_PALETTE_RGB555, "RGB555" }, + { VIDEO_PALETTE_YUV422, "YUV422" }, + { VIDEO_PALETTE_YUYV, "YUYV" }, + { VIDEO_PALETTE_UYVY, "UYVY" }, + { VIDEO_PALETTE_YUV420, "YUV420" }, + { VIDEO_PALETTE_YUV411, "YUV411" }, + { VIDEO_PALETTE_RAW, "RAW" }, { VIDEO_PALETTE_YUV422P,"YUV422P" }, { VIDEO_PALETTE_YUV411P,"YUV411P" }, { VIDEO_PALETTE_YUV420P,"YUV420P" }, @@ -382,7 +382,7 @@ /* Here we want the physical address of the memory. * This is used when initializing the contents of the area. */ -static inline unsigned long +static inline unsigned long kvirt_to_pa(unsigned long adr) { unsigned long kva, ret; @@ -415,7 +415,7 @@ return mem; } -static void +static void rvfree(void *mem, unsigned long size) { unsigned long adr; @@ -449,7 +449,7 @@ #define YES_NO(x) ((x) ? "yes" : "no") /* /proc/video/ov511//info */ -static int +static int ov511_read_proc_info(char *page, char **start, off_t off, int count, int *eof, void *data) { @@ -544,13 +544,13 @@ * When the camera's button is pressed, the output of this will change from a * 0 to a 1 (ASCII). It will retain this value until it is read, after which * it will reset to zero. - * + * * SECURITY NOTE: Since reading this file can change the state of the snapshot * status, it is important for applications that open it to keep it locked * against access by other processes, using flock() or a similar mechanism. No * locking is provided by this driver. */ -static int +static int ov511_read_proc_button(char *page, char **start, off_t off, int count, int *eof, void *data) { @@ -582,7 +582,7 @@ return len; } -static void +static void create_proc_ov511_cam(struct usb_ov511 *ov511) { char dirname[10]; @@ -635,7 +635,7 @@ unlock_kernel(); } -static void +static void destroy_proc_ov511_cam(struct usb_ov511 *ov511) { char dirname[10]; @@ -672,7 +672,7 @@ ov511->proc_devdir = NULL; } -static void +static void proc_ov511_create(void) { /* No current standard here. Alan prefers /proc/video/ as it keeps @@ -693,7 +693,7 @@ err("Unable to create /proc/video/ov511"); } -static void +static void proc_ov511_destroy(void) { PDEBUG(3, "removing /proc/video/ov511"); @@ -712,7 +712,7 @@ **********************************************************************/ /* Write an OV51x register */ -static int +static int reg_w(struct usb_ov511 *ov, unsigned char reg, unsigned char value) { int rc; @@ -736,7 +736,7 @@ /* Read from an OV51x register */ /* returns: negative is error, pos or zero is data */ -static int +static int reg_r(struct usb_ov511 *ov, unsigned char reg) { int rc; @@ -763,10 +763,10 @@ /* * Writes bits at positions specified by mask to an OV51x reg. Bits that are in * the same position as 1's in "mask" are cleared and set to "value". Bits - * that are in the same position as 0's in "mask" are preserved, regardless + * that are in the same position as 0's in "mask" are preserved, regardless * of their respective state in "value". */ -static int +static int reg_w_mask(struct usb_ov511 *ov, unsigned char reg, unsigned char value, @@ -791,7 +791,7 @@ * Writes multiple (n) byte value to a single register. Only valid with certain * registers (0x30 and 0xc4 - 0xce). */ -static int +static int ov518_reg_w32(struct usb_ov511 *ov, unsigned char reg, u32 val, int n) { int rc; @@ -815,7 +815,7 @@ return rc; } -static int +static int ov511_upload_quan_tables(struct usb_ov511 *ov) { unsigned char *pYTable = yQuanTable511; @@ -825,10 +825,8 @@ PDEBUG(4, "Uploading quantization tables"); - for (i = 0; i < OV511_QUANTABLESIZE / 2; i++) - { - if (ENABLE_Y_QUANTABLE) - { + for (i = 0; i < OV511_QUANTABLESIZE / 2; i++) { + if (ENABLE_Y_QUANTABLE) { val0 = *pYTable++; val1 = *pYTable++; val0 &= 0x0f; @@ -839,8 +837,7 @@ return rc; } - if (ENABLE_UV_QUANTABLE) - { + if (ENABLE_UV_QUANTABLE) { val0 = *pUVTable++; val1 = *pUVTable++; val0 &= 0x0f; @@ -858,7 +855,7 @@ } /* OV518 quantization tables are 8x4 (instead of 8x8) */ -static int +static int ov518_upload_quan_tables(struct usb_ov511 *ov) { unsigned char *pYTable = yQuanTable518; @@ -868,10 +865,8 @@ PDEBUG(4, "Uploading quantization tables"); - for (i = 0; i < OV518_QUANTABLESIZE / 2; i++) - { - if (ENABLE_Y_QUANTABLE) - { + for (i = 0; i < OV518_QUANTABLESIZE / 2; i++) { + if (ENABLE_Y_QUANTABLE) { val0 = *pYTable++; val1 = *pYTable++; val0 &= 0x0f; @@ -882,8 +877,7 @@ return rc; } - if (ENABLE_UV_QUANTABLE) - { + if (ENABLE_UV_QUANTABLE) { val0 = *pUVTable++; val1 = *pUVTable++; val0 &= 0x0f; @@ -900,11 +894,11 @@ return 0; } -static int +static int ov51x_reset(struct usb_ov511 *ov, unsigned char reset_type) { int rc; - + /* Setting bit 0 not allowed on 518/518Plus */ if (ov->bclass == BCL_OV518) reset_type &= 0xfe; @@ -931,7 +925,7 @@ * This is normally only called from i2c_w(). Note that this function * always succeeds regardless of whether the sensor is present and working. */ -static int +static int ov518_i2c_write_internal(struct usb_ov511 *ov, unsigned char reg, unsigned char value) @@ -960,7 +954,7 @@ } /* NOTE: Do not call this function directly! */ -static int +static int ov511_i2c_write_internal(struct usb_ov511 *ov, unsigned char reg, unsigned char value) @@ -990,7 +984,7 @@ if ((rc&2) == 0) /* Ack? */ break; #if 0 - /* I2C abort */ + /* I2C abort */ reg_w(ov, R511_I2C_CTL, 0x10); #endif if (--retries < 0) { @@ -1012,7 +1006,7 @@ * This is normally only called from i2c_r(). Note that this function * always succeeds regardless of whether the sensor is present and working. */ -static int +static int ov518_i2c_read_internal(struct usb_ov511 *ov, unsigned char reg) { int rc, value; @@ -1042,7 +1036,7 @@ /* NOTE: Do not call this function directly! * returns: negative is error, pos or zero is data */ -static int +static int ov511_i2c_read_internal(struct usb_ov511 *ov, unsigned char reg) { int rc, value, retries; @@ -1064,7 +1058,7 @@ if ((rc&2) == 0) /* Ack? */ break; - /* I2C abort */ + /* I2C abort */ reg_w(ov, R511_I2C_CTL, 0x10); if (--retries < 0) { @@ -1087,7 +1081,7 @@ if ((rc&2) == 0) /* Ack? */ break; - /* I2C abort */ + /* I2C abort */ rc = reg_w(ov, R511_I2C_CTL, 0x10); if (rc < 0) goto error; @@ -1101,7 +1095,7 @@ value = reg_r(ov, R51x_I2C_DATA); PDEBUG(5, "0x%02X:0x%02X", reg, value); - + /* This is needed to make i2c_w() work */ rc = reg_w(ov, R511_I2C_CTL, 0x05); if (rc < 0) @@ -1115,7 +1109,7 @@ } /* returns: negative is error, pos or zero is data */ -static int +static int i2c_r(struct usb_ov511 *ov, unsigned char reg) { int rc; @@ -1132,7 +1126,7 @@ return rc; } -static int +static int i2c_w(struct usb_ov511 *ov, unsigned char reg, unsigned char value) { int rc; @@ -1150,7 +1144,7 @@ } /* Do not call this function directly! */ -static int +static int ov51x_i2c_write_mask_internal(struct usb_ov511 *ov, unsigned char reg, unsigned char value, @@ -1183,10 +1177,10 @@ /* Writes bits at positions specified by mask to an I2C reg. Bits that are in * the same position as 1's in "mask" are cleared and set to "value". Bits - * that are in the same position as 0's in "mask" are preserved, regardless + * that are in the same position as 0's in "mask" are preserved, regardless * of their respective state in "value". */ -static int +static int i2c_w_mask(struct usb_ov511 *ov, unsigned char reg, unsigned char value, @@ -1202,7 +1196,7 @@ } /* Write to a specific I2C slave ID and register, using the specified mask */ -static int +static int i2c_w_slave(struct usb_ov511 *ov, unsigned char slave, unsigned char reg, @@ -1245,7 +1239,7 @@ } /* Read from a specific I2C slave ID and register */ -static int +static int i2c_r_slave(struct usb_ov511 *ov, unsigned char slave, unsigned char reg) @@ -1289,7 +1283,7 @@ } /* Sets I2C read and write slave IDs. Returns <0 for error */ -static int +static int ov51x_set_slave_ids(struct usb_ov511 *ov, unsigned char sid) { down(&ov->i2c_lock); @@ -1308,7 +1302,7 @@ return 0; } -static int +static int write_regvals(struct usb_ov511 *ov, struct ov511_regvals * pRegvals) { int rc; @@ -1334,8 +1328,8 @@ return rc; } -#ifdef OV511_DEBUG -static void +#ifdef OV511_DEBUG +static void dump_i2c_range(struct usb_ov511 *ov, int reg1, int regn) { int i; @@ -1347,14 +1341,14 @@ } } -static void +static void dump_i2c_regs(struct usb_ov511 *ov) { info("I2C REGS"); dump_i2c_range(ov, 0x00, 0x7C); } -static void +static void dump_reg_range(struct usb_ov511 *ov, int reg1, int regn) { int i; @@ -1367,7 +1361,7 @@ } /* FIXME: Should there be an OV518 version of this? */ -static void +static void ov511_dump_regs(struct usb_ov511 *ov) { info("CAMERA INTERFACE REGS"); @@ -1401,7 +1395,7 @@ **********************************************************************/ /* For as-yet unimplemented I2C interface */ -static void +static void call_i2c_clients(struct usb_ov511 *ov, unsigned int cmd, void *arg) { @@ -1412,11 +1406,11 @@ /* Temporarily stops OV511 from functioning. Must do this before changing * registers while the camera is streaming */ -static inline int +static inline int ov51x_stop(struct usb_ov511 *ov) { PDEBUG(4, "stopping"); - ov->stopped = 1; + ov->stopped = 1; if (ov->bclass == BCL_OV518) return (reg_w(ov, R51x_SYS_RESET, 0x3a)); else @@ -1425,12 +1419,12 @@ /* Restarts OV511 after ov511_stop() is called. Has no effect if it is not * actually stopped (for performance). */ -static inline int +static inline int ov51x_restart(struct usb_ov511 *ov) { if (ov->stopped) { PDEBUG(4, "restarting"); - ov->stopped = 0; + ov->stopped = 0; /* Reinitialize the stream */ if (ov->bclass == BCL_OV518) @@ -1443,7 +1437,7 @@ } /* Resets the hardware snapshot button */ -static void +static void ov51x_clear_snapshot(struct usb_ov511 *ov) { if (ov->bclass == BCL_OV511) { @@ -1455,12 +1449,11 @@ } else { err("clear snap: invalid bridge type"); } - } /* Checks the status of the snapshot button. Returns 1 if it was pressed since * it was last cleared, and zero in all other cases (including errors) */ -static int +static int ov51x_check_snapshot(struct usb_ov511 *ov) { int ret, status = 0; @@ -1484,15 +1477,15 @@ /* This does an initial reset of an OmniVision sensor and ensures that I2C * is synchronized. Returns <0 for failure. */ -static int +static int init_ov_sensor(struct usb_ov511 *ov) { int i, success; - /* Reset the sensor */ + /* Reset the sensor */ if (i2c_w(ov, 0x12, 0x80) < 0) return -EIO; - /* Wait for it to initialize */ + /* Wait for it to initialize */ schedule_timeout (1 + 150 * HZ / 1000); for (i = 0, success = 0; i < i2c_detect_tries && !success; i++) { @@ -1502,9 +1495,9 @@ continue; } - /* Reset the sensor */ + /* Reset the sensor */ if (i2c_w(ov, 0x12, 0x80) < 0) return -EIO; - /* Wait for it to initialize */ + /* Wait for it to initialize */ schedule_timeout(1 + 150 * HZ / 1000); /* Dummy read to sync I2C */ if (i2c_r(ov, 0x00) < 0) return -EIO; @@ -1512,13 +1505,13 @@ if (!success) return -EIO; - + PDEBUG(1, "I2C synced in %d attempt(s)", i); return 0; } -static int +static int ov51x_set_packet_size(struct usb_ov511 *ov, int size) { int alt, mult; @@ -1578,7 +1571,7 @@ return -EIO; } } - + if (usb_set_interface(ov->dev, ov->iface, alt) < 0) { err("Set packet size: set interface error"); return -EBUSY; @@ -1608,7 +1601,6 @@ int rc = 0; if (!ov->compress_inited) { - reg_w(ov, 0x70, phy); reg_w(ov, 0x71, phuv); reg_w(ov, 0x72, pvy); @@ -1626,7 +1618,7 @@ } ov->compress_inited = 1; -out: +out: return rc; } @@ -1637,7 +1629,6 @@ int rc = 0; if (!ov->compress_inited) { - if (ov518_upload_quan_tables(ov) < 0) { err("Error uploading quantization tables"); rc = -EIO; @@ -1646,7 +1637,7 @@ } ov->compress_inited = 1; -out: +out: return rc; } @@ -2174,7 +2165,7 @@ } /* Turns on or off the LED. Only has an effect with OV511+/OV518(+) */ -static inline void +static inline void ov51x_led_control(struct usb_ov511 *ov, int enable) { PDEBUG(4, " (%s)", enable ? "turn on" : "turn off"); @@ -2225,7 +2216,7 @@ i2c_w_mask(ov, 0x2a, sixty?0x00:0x80, 0x80); i2c_w(ov, 0x2b, sixty?0x00:0xac); i2c_w_mask(ov, 0x76, 0x01, 0x01); - break; + break; case SEN_OV6620: case SEN_OV6630: i2c_w(ov, 0x2b, sixty?0xa8:0x28); @@ -2313,7 +2304,7 @@ */ static inline int sensor_set_auto_exposure(struct usb_ov511 *ov, int enable) -{ +{ PDEBUG(4, " (%s)", enable ? "turn on" : "turn off"); switch (ov->sensor) { @@ -2325,7 +2316,7 @@ case SEN_OV7620AE: case SEN_OV8600: i2c_w_mask(ov, 0x13, enable?0x01:0x00, 0x01); - break; + break; case SEN_OV6630: i2c_w_mask(ov, 0x28, enable?0x00:0x10, 0x10); break; @@ -2354,7 +2345,6 @@ static int sensor_set_backlight(struct usb_ov511 *ov, int enable) { - PDEBUG(4, " (%s)", enable ? "turn on" : "turn off"); switch (ov->sensor) { @@ -2363,7 +2353,7 @@ i2c_w_mask(ov, 0x68, enable?0xe0:0xc0, 0xe0); i2c_w_mask(ov, 0x29, enable?0x08:0x00, 0x08); i2c_w_mask(ov, 0x28, enable?0x02:0x00, 0x02); - break; + break; case SEN_OV6620: i2c_w_mask(ov, 0x4e, enable?0xe0:0xc0, 0xe0); i2c_w_mask(ov, 0x29, enable?0x08:0x00, 0x08); @@ -2394,13 +2384,13 @@ /* Returns number of bits per pixel (regardless of where they are located; * planar or not), or zero for unsupported format. */ -static inline int +static inline int get_depth(int palette) { switch (palette) { case VIDEO_PALETTE_GREY: return 8; case VIDEO_PALETTE_RGB565: return 16; - case VIDEO_PALETTE_RGB24: return 24; + case VIDEO_PALETTE_RGB24: return 24; case VIDEO_PALETTE_YUV422: return 16; case VIDEO_PALETTE_YUYV: return 16; case VIDEO_PALETTE_YUV420: return 12; @@ -2411,7 +2401,7 @@ } /* Bytes per frame. Used by read(). Return of 0 indicates error */ -static inline long int +static inline long int get_frame_length(struct ov511_frame *frame) { if (!frame) @@ -2701,8 +2691,8 @@ if (width == 320 && height == 240) { /* No need to do anything special */ } else if (width == 640 && height == 480) { - /* Set the OV511 up as 320x480, but keep the V4L - * resolution as 640x480 */ + /* Set the OV511 up as 320x480, but keep the + * V4L resolution as 640x480 */ width = 320; } else { err("SAA7111A only supports 320x240 or 640x480"); @@ -2814,7 +2804,7 @@ // reg_w(ov511, 0x12, pxcnt); // reg_w(ov511, 0x13, lncnt); - /******** Set the mode ********/ + /******** Set the mode ********/ /* Mode independent regs */ reg_w(ov, 0x2b, 0x00); @@ -2830,7 +2820,7 @@ reg_w(ov, 0x2a, mlist518[i].reg2a); reg_w(ov, 0x2c, mlist518[i].reg2c); reg_w(ov, 0x2e, mlist518[i].reg2e); - reg_w_mask(ov, 0x38, mlist518[i].reg28 + reg_w_mask(ov, 0x38, mlist518[i].reg28 | (mode == VIDEO_PALETTE_GREY) ? 0x80:0x00, 0x8f); reg_w(ov, 0x39, mlist518[i].reg29); reg_w(ov, 0x3a, mlist518[i].reg2a); @@ -2842,7 +2832,7 @@ /* Windows driver does this here; who knows why */ reg_w(ov, 0x2f, 0x80); - /******** Set the framerate (to 15 FPS) ********/ + /******** Set the framerate (to 15 FPS) ********/ /* Mode independent, but framerate dependent, regs */ /* These are for 15 FPS only */ @@ -2943,7 +2933,7 @@ rc = -EINVAL; break; case SEN_SAA7111A: -// rc = mode_init_saa_sensor_regs(ov, width, height, mode, +// rc = mode_init_saa_sensor_regs(ov, width, height, mode, // sub_flag); PDEBUG(1, "SAA status = 0X%x", i2c_r(ov, 0x1f)); @@ -2985,7 +2975,7 @@ /* This sets the default image parameters (Size = max, RGB24). This is * useful for apps that use read() and do not set these. */ -static int +static int ov51x_set_default_params(struct usb_ov511 *ov) { int i; @@ -3020,7 +3010,7 @@ **********************************************************************/ /* Set analog input port of decoder */ -static int +static int decoder_set_input(struct usb_ov511 *ov, int input) { PDEBUG(4, "port %d", input); @@ -3042,7 +3032,7 @@ } /* Get ASCII name of video input */ -static int +static int decoder_get_input_name(struct usb_ov511 *ov, int input, char *name) { switch (ov->sensor) { @@ -3054,7 +3044,6 @@ sprintf(name, "CVBS-%d", input); else // if (input < 8) sprintf(name, "S-Video-%d", input - 4); - break; } default: @@ -3065,7 +3054,7 @@ } /* Set norm (NTSC, PAL, SECAM, AUTO) */ -static int +static int decoder_set_norm(struct usb_ov511 *ov, int norm) { PDEBUG(4, "%d", norm); @@ -3080,7 +3069,7 @@ reg_e = 0x00; /* NTSC M / PAL BGHI */ } else if (norm == VIDEO_MODE_PAL) { reg_8 = 0x00; /* 50 Hz */ - reg_e = 0x00; /* NTSC M / PAL BGHI */ + reg_e = 0x00; /* NTSC M / PAL BGHI */ } else if (norm == VIDEO_MODE_AUTO) { reg_8 = 0x80; /* Auto field detect */ reg_e = 0x00; /* NTSC M / PAL BGHI */ @@ -3125,21 +3114,21 @@ * coefficients are scaled into 16.16 fixed-point integers. * They were determined as follows: * - * double brightness = 1.0; (0->black; 1->full scale) + * double brightness = 1.0; (0->black; 1->full scale) * double saturation = 1.0; (0->greyscale; 1->full color) * double fixScale = brightness * 256 * 256; * int rvScale = (int)(1.402 * saturation * fixScale); * int guScale = (int)(-0.344136 * saturation * fixScale); * int gvScale = (int)(-0.714136 * saturation * fixScale); * int buScale = (int)(1.772 * saturation * fixScale); - * int yScale = (int)(fixScale); + * int yScale = (int)(fixScale); */ /* LIMIT: convert a 16.16 fixed-point value to a byte, with clipping. */ #define LIMIT(x) ((x)>0xffffff?0xff: ((x)<=0xffff?0:((x)>>16))) static inline void -move_420_block(int yTL, int yTR, int yBL, int yBR, int u, int v, +move_420_block(int yTL, int yTR, int yBL, int yBR, int u, int v, int rowPixels, unsigned char * rgb, int bits) { const int rvScale = 91881; @@ -3178,14 +3167,14 @@ rgb[5] = LIMIT(r+yBR); } else if (bits == 16) { /* Write out top two pixels */ - rgb[0] = ((LIMIT(b+yTL) >> 3) & 0x1F) + rgb[0] = ((LIMIT(b+yTL) >> 3) & 0x1F) | ((LIMIT(g+yTL) << 3) & 0xE0); rgb[1] = ((LIMIT(g+yTL) >> 5) & 0x07) | (LIMIT(r+yTL) & 0xF8); - rgb[2] = ((LIMIT(b+yTR) >> 3) & 0x1F) + rgb[2] = ((LIMIT(b+yTR) >> 3) & 0x1F) | ((LIMIT(g+yTR) << 3) & 0xE0); - rgb[3] = ((LIMIT(g+yTR) >> 5) & 0x07) + rgb[3] = ((LIMIT(g+yTR) >> 5) & 0x07) | (LIMIT(r+yTR) & 0xF8); /* Skip down to next line to write out bottom two pixels */ @@ -3212,7 +3201,7 @@ /* Copies a 64-byte segment at pIn to an 8x8 block at pOut. The width of the * image at pOut is specified by w. */ -static inline void +static inline void make_8x8(unsigned char *pIn, unsigned char *pOut, int w) { unsigned char *pOut1 = pOut; @@ -3225,7 +3214,6 @@ } pOut += w; } - } /* @@ -3343,7 +3331,7 @@ * low, and the blue channel about 1 pixel high. After YUV->RGB * conversion, we can correct this easily. OSL 2/24/2000. */ -static void +static void fixFrameRGBoffset(struct ov511_frame *frame) { int x, y; @@ -3352,7 +3340,7 @@ const int shift = 1; /* Distance to shift pixels by, vertically */ /* Don't bother with little images */ - if (frame->width < 400) + if (frame->width < 400) return; /* This only works with RGB24 */ @@ -3386,7 +3374,7 @@ * accordingly. Returns -ENXIO if decompressor is not available, otherwise * returns 0 if no other error. */ -static int +static int request_decompressor(struct usb_ov511 *ov) { if (!ov) @@ -3442,7 +3430,7 @@ /* Unlocks decompression module and nulls ov->decomp_ops. Safe to call even * if ov->decomp_ops is NULL. */ -static void +static void release_decompressor(struct usb_ov511 *ov) { int released = 0; /* Did we actually do anything? */ @@ -3458,14 +3446,14 @@ } ov->decomp_ops = NULL; - + unlock_kernel(); if (released) PDEBUG(3, "Decompressor released"); } -static void +static void decompress(struct usb_ov511 *ov, struct ov511_frame *frame, unsigned char *pIn0, unsigned char *pOut0) { @@ -3475,7 +3463,7 @@ PDEBUG(4, "Decompressing %d bytes", frame->bytes_recvd); - if (frame->format == VIDEO_PALETTE_GREY + if (frame->format == VIDEO_PALETTE_GREY && ov->decomp_ops->decomp_400) { int ret = ov->decomp_ops->decomp_400( pIn0, @@ -3504,7 +3492,7 @@ **********************************************************************/ /* Converts from planar YUV420 to RGB24. */ -static void +static void yuv420p_to_rgb(struct ov511_frame *frame, unsigned char *pIn0, unsigned char *pOut0, int bits) { @@ -3527,10 +3515,9 @@ move_420_block(y00, y01, y10, y11, u, v, frame->width, pOut, bits); - + pY += 2; pOut += 2 * bytes; - } pY += frame->width; pOut += frame->width * bytes; @@ -3559,7 +3546,7 @@ for (i = 0; i <= frame->width - 2; i += 2) { int u = *pU++; int v = *pV++; - + *pOut = u; *(pOut+2) = v; *(pOut+frame->width*2) = u; @@ -3680,11 +3667,11 @@ * 3. Convert from YUV planar to destination format, if necessary * 4. Fix the RGB offset, if necessary */ -static void +static void ov51x_postprocess(struct usb_ov511 *ov, struct ov511_frame *frame) { if (dumppix) { - memset(frame->data, 0, + memset(frame->data, 0, MAX_DATA_SIZE(ov->maxwidth, ov->maxheight)); PDEBUG(4, "Dumping %d bytes", frame->bytes_recvd); memmove(frame->data, frame->rawdata, frame->bytes_recvd); @@ -3776,7 +3763,7 @@ * **********************************************************************/ -static int +static int ov511_move_data(struct usb_ov511 *ov, struct urb *urb) { unsigned char *cdata; @@ -3837,7 +3824,7 @@ /* Frame end */ if (cdata[8] & 0x80) { - ts = (struct timeval *)(frame->data + ts = (struct timeval *)(frame->data + MAX_FRAME_SIZE(ov->maxwidth, ov->maxheight)); do_gettimeofday(ts); @@ -3858,7 +3845,7 @@ /* Don't allow byte count to exceed buffer size */ RESTRICT_TO_RANGE(frame->bytes_recvd, - 8, + 8, MAX_RAW_DATA_SIZE(ov->maxwidth, ov->maxheight)); @@ -3924,7 +3911,7 @@ if (frame->compressed) { int b, skip = 1; - for (b = 0; b < 9; b++) { + for (b = 0; b < 9; b++) { if (cdata[b]) skip=0; } @@ -4009,7 +3996,7 @@ return totlen; } -static int +static int ov518_move_data(struct usb_ov511 *ov, struct urb *urb) { unsigned char *cdata; @@ -4056,7 +4043,7 @@ * the definitive SOF/EOF format */ if ((!(cdata[0] | cdata[1] | cdata[2] | cdata[3] | cdata[5])) && cdata[6]) { - + if (frame->scanstate == STATE_LINES) { PDEBUG(4, "Detected frame end/start"); goto eof; @@ -4068,7 +4055,7 @@ } else { goto check_middle; } - + eof: ts = (struct timeval *)(frame->data + MAX_FRAME_SIZE(ov->maxwidth, ov->maxheight)); @@ -4085,11 +4072,12 @@ /* Validate the header data */ RESTRICT_TO_RANGE(frame->rawwidth, ov->minwidth, ov->maxwidth); - RESTRICT_TO_RANGE(frame->rawheight, ov->minheight, ov->maxheight); + RESTRICT_TO_RANGE(frame->rawheight, ov->minheight, + ov->maxheight); /* Don't allow byte count to exceed buffer size */ RESTRICT_TO_RANGE(frame->bytes_recvd, - 8, + 8, MAX_RAW_DATA_SIZE(ov->maxwidth, ov->maxheight)); if (frame->scanstate == STATE_LINES) { @@ -4201,7 +4189,7 @@ return totlen; } -static void +static void ov51x_isoc_irq(struct urb *urb) { int len; @@ -4247,7 +4235,7 @@ * ***************************************************************************/ -static int +static int ov51x_init_isoc(struct usb_ov511 *ov) { struct urb *urb; @@ -4302,7 +4290,7 @@ for (n = 0; n < OV511_NUMSBUF; n++) { urb = usb_alloc_urb(FRAMES_PER_DESC); - + if (!urb) { err("init isoc: usb_alloc_urb ret. NULL"); return -ENOMEM; @@ -4338,7 +4326,7 @@ return 0; } -static void +static void ov51x_stop_isoc(struct usb_ov511 *ov) { int n; @@ -4363,7 +4351,7 @@ } } -static int +static int ov51x_new_frame(struct usb_ov511 *ov, int framenum) { struct ov511_frame *frame; @@ -4385,7 +4373,7 @@ frame = &ov->frame[framenum]; - PDEBUG(4, "framenum = %d, width = %d, height = %d", framenum, + PDEBUG(4, "framenum = %d, width = %d, height = %d", framenum, frame->width, frame->height); frame->grabstate = FRAME_GRABBING; @@ -4414,7 +4402,7 @@ * ***************************************************************************/ -static int +static int ov51x_alloc(struct usb_ov511 *ov) { int i; @@ -4478,9 +4466,9 @@ for (i = 0; i < OV511_NUMFRAMES; i++) { ov->frame[i].data = ov->fbuf + i * MAX_DATA_SIZE(w, h); - ov->frame[i].rawdata = ov->rawfbuf + ov->frame[i].rawdata = ov->rawfbuf + i * MAX_RAW_DATA_SIZE(w, h); - ov->frame[i].tempdata = ov->tempfbuf + ov->frame[i].tempdata = ov->tempfbuf + i * MAX_RAW_DATA_SIZE(w, h); PDEBUG(4, "frame[%d] @ %p", i, ov->frame[i].data); } @@ -4497,12 +4485,12 @@ return -ENOMEM; } -/* +/* * - You must acquire buf_lock before entering this function. * - Because this code will free any non-null pointer, you must be sure to null * them if you explicitly free them somewhere else! */ -static void +static void ov51x_do_dealloc(struct usb_ov511 *ov) { int i; @@ -4542,7 +4530,7 @@ PDEBUG(4, "leaving"); } -static void +static void ov51x_buf_callback(unsigned long data) { struct usb_ov511 *ov = (struct usb_ov511 *)data; @@ -4556,7 +4544,7 @@ PDEBUG(4, "leaving"); } -static void +static void ov51x_dealloc(struct usb_ov511 *ov, int now) { struct timer_list *bt = &(ov->buf_timer); @@ -4590,7 +4578,7 @@ * ***************************************************************************/ -static int +static int ov51x_v4l1_open(struct video_device *vdev, int flags) { struct usb_ov511 *ov = vdev->priv; @@ -4601,7 +4589,7 @@ down(&ov->lock); err = -EBUSY; - if (ov->user) + if (ov->user) goto out; err = -ENOMEM; @@ -4620,7 +4608,7 @@ ov->frame[i].bytes_read = 0; } - /* If compression is on, make sure now that a + /* If compression is on, make sure now that a * decompressor can be loaded */ if (ov->compress && !ov->decomp_ops) { err = request_decompressor(ov); @@ -4645,13 +4633,13 @@ return err; } -static void +static void ov51x_v4l1_close(struct video_device *vdev) { struct usb_ov511 *ov = vdev->priv; PDEBUG(4, "ov511_close"); - + down(&ov->lock); ov->user--; @@ -4682,7 +4670,7 @@ } } -static int +static int ov51x_v4l1_init_done(struct video_device *vdev) { #if defined(CONFIG_PROC_FS) && defined(CONFIG_VIDEO_PROC_FS) @@ -4700,7 +4688,7 @@ } /* Do not call this function directly! */ -static int +static int ov51x_v4l1_ioctl_internal(struct video_device *vdev, unsigned int cmd, void *arg) { @@ -4709,7 +4697,7 @@ PDEBUG(5, "IOCtl: 0x%X", cmd); if (!ov->dev) - return -EIO; + return -EIO; switch (cmd) { case VIDIOCGCAP: @@ -5103,7 +5091,7 @@ return ret; goto redo; } - /* Fall through */ + /* Fall through */ case FRAME_DONE: if (ov->snap_enabled && !frame->snapshot) { int ret; @@ -5268,7 +5256,7 @@ return 0; } -static int +static int ov51x_v4l1_ioctl(struct video_device *vdev, unsigned int cmd, void *arg) { int rc; @@ -5283,7 +5271,7 @@ return rc; } -static inline long +static inline long ov51x_v4l1_read(struct video_device *vdev, char *buf, unsigned long count, int noblock) { @@ -5346,7 +5334,7 @@ /* Wait while we're grabbing the image */ PDEBUG(4, "Waiting image grabbing"); - rc = wait_event_interruptible(frame->wq, + rc = wait_event_interruptible(frame->wq, (frame->grabstate == FRAME_DONE) || (frame->grabstate == FRAME_ERROR)); @@ -5393,7 +5381,7 @@ get_frame_length(frame)); /* copy bytes to user space; we allow for partials reads */ -// if ((count + frame->bytes_read) +// if ((count + frame->bytes_read) // > get_frame_length((struct ov511_frame *)frame)) // count = frame->scanlength - frame->bytes_read; @@ -5435,7 +5423,7 @@ return rc; } -static int +static int ov51x_v4l1_mmap(struct video_device *vdev, const char *adr, unsigned long size) { struct usb_ov511 *ov = vdev->priv; @@ -5489,7 +5477,7 @@ }; #if defined(CONFIG_PROC_FS) && defined(CONFIG_VIDEO_PROC_FS) -static int +static int ov51x_control_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long ularg) { @@ -5713,7 +5701,7 @@ /* This initializes the OV7610, OV7620, or OV7620AE sensor. The OV7620AE uses * the same register settings as the OV7610, since they are very similar. */ -static int +static int ov7xx0_configure(struct usb_ov511 *ov) { int i, success; @@ -5864,7 +5852,7 @@ err("this to " EMAIL); err("This is only a warning. You can attempt to use"); err("your camera anyway"); -// Only issue a warning for now +// Only issue a warning for now // return -1; } else { PDEBUG(1, "OV7xx0 initialized (method 2, %dx)", i+1); @@ -5930,7 +5918,7 @@ } /* This initializes the OV6620, OV6630, OV6630AE, or OV6630AF sensor. */ -static int +static int ov6xx0_configure(struct usb_ov511 *ov) { int rc; @@ -5958,7 +5946,7 @@ { OV511_I2C_BUS, 0x34, 0xd2 }, /* Max A/D range */ { OV511_I2C_BUS, 0x38, 0x8b }, { OV511_I2C_BUS, 0x39, 0x40 }, - + { OV511_I2C_BUS, 0x3c, 0x39 }, /* Enable AEC mode changing */ { OV511_I2C_BUS, 0x3c, 0x3c }, /* Change AEC mode */ { OV511_I2C_BUS, 0x3c, 0x24 }, /* Disable AEC mode changing */ @@ -6038,7 +6026,7 @@ * control the color balance */ // /*OK?*/ { OV511_I2C_BUS, 0x4a, 0x80 }, // Check these // /*OK?*/ { OV511_I2C_BUS, 0x4b, 0x80 }, -// /*U*/ { OV511_I2C_BUS, 0x4c, 0xd0 }, +// /*U*/ { OV511_I2C_BUS, 0x4c, 0xd0 }, /*d2?*/ { OV511_I2C_BUS, 0x4d, 0x10 }, /* This reduces noise a bit */ /*c1?*/ { OV511_I2C_BUS, 0x4e, 0x40 }, /*04?*/ { OV511_I2C_BUS, 0x4f, 0x07 }, @@ -6056,7 +6044,7 @@ }; PDEBUG(4, "starting sensor configuration"); - + if (init_ov_sensor(ov) < 0) { err("Failed to read sensor ID. You might not have an OV6xx0,"); err("or it may be not responding. Report this to " EMAIL); @@ -6106,7 +6094,7 @@ if (write_regvals(ov, aRegvalsNorm6x30)) return -1; } - + return 0; } @@ -6168,7 +6156,7 @@ } /* This initializes the SAA7111A video decoder. */ -static int +static int saa7111a_configure(struct usb_ov511 *ov511) { int rc; @@ -6345,7 +6333,7 @@ ov51x_set_packet_size(ov, 0); - ov->snap_enabled = snapshot; + ov->snap_enabled = snapshot; /* Test for 7xx0 */ PDEBUG(3, "Testing for 0V7xx0"); @@ -6422,7 +6410,7 @@ } /* This initializes the OV518/OV518+ and the sensor */ -static int +static int ov518_configure(struct usb_ov511 *ov) { static struct ov511_regvals aRegvalsInit518[] = { @@ -6807,7 +6795,7 @@ ***************************************************************************/ /* Returns 0 for success */ -int +int ov511_register_decomp_module(int ver, struct ov51x_decomp_ops *ops, int ov518, int mmx) { @@ -6864,7 +6852,7 @@ return -EBUSY; } -void +void ov511_deregister_decomp_module(int ov518, int mmx) { lock_kernel(); @@ -6880,13 +6868,13 @@ else ov511_decomp_ops = NULL; } - + MOD_DEC_USE_COUNT; unlock_kernel(); } -static int __init +static int __init usb_ov511_init(void) { #if defined(CONFIG_PROC_FS) && defined(CONFIG_VIDEO_PROC_FS) @@ -6909,7 +6897,7 @@ return 0; } -static void __exit +static void __exit usb_ov511_exit(void) { usb_deregister(&ov511_driver);