diff options
Diffstat (limited to 'drivers/media/video/usbvision')
-rw-r--r-- | drivers/media/video/usbvision/usbvision-cards.c | 11 | ||||
-rw-r--r-- | drivers/media/video/usbvision/usbvision-core.c | 83 | ||||
-rw-r--r-- | drivers/media/video/usbvision/usbvision-i2c.c | 35 | ||||
-rw-r--r-- | drivers/media/video/usbvision/usbvision-video.c | 150 | ||||
-rw-r--r-- | drivers/media/video/usbvision/usbvision.h | 27 |
5 files changed, 139 insertions, 167 deletions
diff --git a/drivers/media/video/usbvision/usbvision-cards.c b/drivers/media/video/usbvision/usbvision-cards.c index 134eb9865df..a40e5838515 100644 --- a/drivers/media/video/usbvision/usbvision-cards.c +++ b/drivers/media/video/usbvision/usbvision-cards.c @@ -39,8 +39,8 @@ struct usbvision_device_data_st usbvision_device_data[] = { {0x0573, 0x0400, -1, CODEC_SAA7113, 4, V4L2_STD_NTSC, 0, 0, 1, 0, 0, -1, -1, 0, 3, 7, "D-Link V100"}, {0x0573, 0x2000, -1, CODEC_SAA7111, 2, V4L2_STD_NTSC, 1, 0, 1, 0, 0, -1, -1, -1, -1, -1, "X10 USB Camera"}, {0x0573, 0x2d00, -1, CODEC_SAA7111, 2, V4L2_STD_PAL, 1, 0, 1, 0, 0, -1, -1, -1, 3, 7, "Osprey 50"}, - {0x0573, 0x2d01, -1, CODEC_SAA7113, 2, V4L2_STD_NTSC, 0, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Hauppauge USB-Live Model 600"}, - {0x0573, 0x2101, -1, CODEC_SAA7113, 2, V4L2_STD_PAL, 2, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Zoran Co. PMD (Nogatech) AV-grabber Manhattan"}, + {0x0573, 0x2d01, -1, CODEC_SAA7113, 2, V4L2_STD_NTSC, 0, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Hauppauge USB-Live Model 600"}, + {0x0573, 0x2101, -1, CODEC_SAA7113, 2, V4L2_STD_PAL, 2, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Zoran Co. PMD (Nogatech) AV-grabber Manhattan"}, {0x0573, 0x4100, -1, CODEC_SAA7111, 3, V4L2_STD_NTSC, 1, 1, 1, 1, TUNER_PHILIPS_NTSC_M, -1, -1, -1, 20, -1, "Nogatech USB-TV (NTSC) FM"}, {0x0573, 0x4110, -1, CODEC_SAA7111, 3, V4L2_STD_NTSC, 1, 1, 1, 1, TUNER_PHILIPS_NTSC_M, -1, -1, -1, 20, -1, "PNY USB-TV (NTSC) FM"}, {0x0573, 0x4450, 0, CODEC_SAA7113, 3, V4L2_STD_PAL, 1, 1, 1, 1, TUNER_PHILIPS_PAL, -1, -1, 0, 3, 7, "PixelView PlayTv-USB PRO (PAL) FM"}, @@ -71,10 +71,10 @@ struct usbvision_device_data_st usbvision_device_data[] = { {0x0573, 0x4d37, 0, CODEC_SAA7113, 3, V4L2_STD_PAL, 1, 1, 1, 1, TUNER_PHILIPS_FM1216ME_MK3, -1, -1, 0, 3, 7, "Hauppauge WinTV USB device Model 40219 Rev E189"}, {0x0768, 0x0006, -1, CODEC_SAA7113, 3, V4L2_STD_NTSC, 1, 1, 1, 1, TUNER_PHILIPS_NTSC_M, -1, -1, 5, 5, -1, "Camtel Technology USB TV Genie Pro FM Model TVB330"}, {0x07d0, 0x0001, -1, CODEC_SAA7113, 2, V4L2_STD_PAL, 0, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Digital Video Creator I"}, - {0x07d0, 0x0002, -1, CODEC_SAA7111, 2, V4L2_STD_NTSC, 0, 0, 1, 0, 0, -1, -1, 82, 20, 7, "Global Village GV-007 (NTSC)"}, + {0x07d0, 0x0002, -1, CODEC_SAA7111, 2, V4L2_STD_NTSC, 0, 0, 1, 0, 0, -1, -1, 82, 20, 7, "Global Village GV-007 (NTSC)"}, {0x07d0, 0x0003, 0, CODEC_SAA7113, 2, V4L2_STD_NTSC, 0, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Dazzle Fusion Model DVC-50 Rev 1 (NTSC)"}, {0x07d0, 0x0004, 0, CODEC_SAA7113, 2, V4L2_STD_PAL, 0, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Dazzle Fusion Model DVC-80 Rev 1 (PAL)"}, - {0x07d0, 0x0005, 0, CODEC_SAA7113, 2, V4L2_STD_SECAM, 0, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Dazzle Fusion Model DVC-90 Rev 1 (SECAM)"}, + {0x07d0, 0x0005, 0, CODEC_SAA7113, 2, V4L2_STD_SECAM, 0, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Dazzle Fusion Model DVC-90 Rev 1 (SECAM)"}, {0x2304, 0x010d, -1, CODEC_SAA7111, 3, V4L2_STD_PAL, 1, 0, 0, 1, TUNER_TEMIC_4066FY5_PAL_I, -1, -1, -1, -1, -1, "Pinnacle Studio PCTV USB (PAL)"}, {0x2304, 0x0109, -1, CODEC_SAA7111, 3, V4L2_STD_SECAM, 1, 0, 1, 1, TUNER_PHILIPS_SECAM, -1, -1, -1, -1, -1, "Pinnacle Studio PCTV USB (SECAM)"}, {0x2304, 0x0110, -1, CODEC_SAA7111, 3, V4L2_STD_PAL, 1, 1, 1, 1, TUNER_PHILIPS_PAL, -1, -1,128, 23, -1, "Pinnacle Studio PCTV USB (PAL) FM"}, @@ -86,7 +86,7 @@ struct usbvision_device_data_st usbvision_device_data[] = { {0x2304, 0x0300, -1, CODEC_SAA7113, 2, V4L2_STD_NTSC, 1, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Pinnacle Studio Linx Video input cable (NTSC)"}, {0x2304, 0x0301, -1, CODEC_SAA7113, 2, V4L2_STD_PAL, 1, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Pinnacle Studio Linx Video input cable (PAL)"}, {0x2304, 0x0419, -1, CODEC_SAA7113, 3, V4L2_STD_PAL, 1, 1, 1, 1, TUNER_TEMIC_4009FR5_PAL, -1, -1, 0, 3, 7, "Pinnacle PCTV Bungee USB (PAL) FM"}, - {0x2400, 0x4200, -1, CODEC_SAA7111, 3, VIDEO_MODE_NTSC, 1, 0, 1, 1, TUNER_PHILIPS_NTSC_M, -1, -1, -1, -1, -1, "Hauppauge WinTv-USB"}, + {0x2400, 0x4200, -1, CODEC_SAA7111, 3, V4L2_STD_NTSC, 1, 0, 1, 1, TUNER_PHILIPS_NTSC_M, -1, -1, -1, -1, -1, "Hauppauge WinTv-USB"}, {} /* Terminating entry */ }; @@ -148,7 +148,6 @@ struct usb_device_id usbvision_table [] = { { USB_DEVICE(0x2304, 0x0300) }, /* Pinnacle Studio Linx Video input cable (NTSC) */ { USB_DEVICE(0x2304, 0x0301) }, /* Pinnacle Studio Linx Video input cable (PAL) */ { USB_DEVICE(0x2304, 0x0419) }, /* Pinnacle PCTV Bungee USB (PAL) FM */ - { USB_DEVICE(0x2400, 0x4200) }, /* Hauppauge WinTv-USB2 Model 42012 */ { } /* Terminating entry */ diff --git a/drivers/media/video/usbvision/usbvision-core.c b/drivers/media/video/usbvision/usbvision-core.c index 797b97baf9e..a807d971e27 100644 --- a/drivers/media/video/usbvision/usbvision-core.c +++ b/drivers/media/video/usbvision/usbvision-core.c @@ -118,7 +118,7 @@ static int usbvision_measure_bandwidth (struct usb_usbvision *usbvision); * This is used when initializing the contents of the area. */ -void *usbvision_rvmalloc(unsigned long size) +static void *usbvision_rvmalloc(unsigned long size) { void *mem; unsigned long adr; @@ -181,7 +181,7 @@ static void usbvision_hexdump(const unsigned char *data, int len) /******************************** * scratch ring buffer handling ********************************/ -int scratch_len(struct usb_usbvision *usbvision) /*This returns the amount of data actually in the buffer */ +static int scratch_len(struct usb_usbvision *usbvision) /*This returns the amount of data actually in the buffer */ { int len = usbvision->scratch_write_ptr - usbvision->scratch_read_ptr; if (len < 0) { @@ -194,7 +194,7 @@ int scratch_len(struct usb_usbvision *usbvision) /*This returns the amount of /* This returns the free space left in the buffer */ -int scratch_free(struct usb_usbvision *usbvision) +static int scratch_free(struct usb_usbvision *usbvision) { int free = usbvision->scratch_read_ptr - usbvision->scratch_write_ptr; if (free <= 0) { @@ -211,7 +211,8 @@ int scratch_free(struct usb_usbvision *usbvision) /* This puts data into the buffer */ -int scratch_put(struct usb_usbvision *usbvision, unsigned char *data, int len) +static int scratch_put(struct usb_usbvision *usbvision, unsigned char *data, + int len) { int len_part; @@ -237,7 +238,7 @@ int scratch_put(struct usb_usbvision *usbvision, unsigned char *data, int len) } /* This marks the write_ptr as position of new frame header */ -void scratch_mark_header(struct usb_usbvision *usbvision) +static void scratch_mark_header(struct usb_usbvision *usbvision) { PDEBUG(DBG_SCRATCH, "header at write_ptr=%d\n", usbvision->scratch_headermarker_write_ptr); @@ -248,7 +249,8 @@ void scratch_mark_header(struct usb_usbvision *usbvision) } /* This gets data from the buffer at the given "ptr" position */ -int scratch_get_extra(struct usb_usbvision *usbvision, unsigned char *data, int *ptr, int len) +static int scratch_get_extra(struct usb_usbvision *usbvision, + unsigned char *data, int *ptr, int len) { int len_part; if (*ptr + len < scratch_buf_size) { @@ -274,7 +276,8 @@ int scratch_get_extra(struct usb_usbvision *usbvision, unsigned char *data, int /* This sets the scratch extra read pointer */ -void scratch_set_extra_ptr(struct usb_usbvision *usbvision, int *ptr, int len) +static void scratch_set_extra_ptr(struct usb_usbvision *usbvision, int *ptr, + int len) { *ptr = (usbvision->scratch_read_ptr + len)%scratch_buf_size; @@ -283,7 +286,7 @@ void scratch_set_extra_ptr(struct usb_usbvision *usbvision, int *ptr, int len) /*This increments the scratch extra read pointer */ -void scratch_inc_extra_ptr(int *ptr, int len) +static void scratch_inc_extra_ptr(int *ptr, int len) { *ptr = (*ptr + len) % scratch_buf_size; @@ -292,7 +295,8 @@ void scratch_inc_extra_ptr(int *ptr, int len) /* This gets data from the buffer */ -int scratch_get(struct usb_usbvision *usbvision, unsigned char *data, int len) +static int scratch_get(struct usb_usbvision *usbvision, unsigned char *data, + int len) { int len_part; if (usbvision->scratch_read_ptr + len < scratch_buf_size) { @@ -318,7 +322,8 @@ int scratch_get(struct usb_usbvision *usbvision, unsigned char *data, int len) /* This sets read pointer to next header and returns it */ -int scratch_get_header(struct usb_usbvision *usbvision,struct usbvision_frame_header *header) +static int scratch_get_header(struct usb_usbvision *usbvision, + struct usbvision_frame_header *header) { int errCode = 0; @@ -346,7 +351,7 @@ int scratch_get_header(struct usb_usbvision *usbvision,struct usbvision_frame_he /*This removes len bytes of old data from the buffer */ -void scratch_rm_old(struct usb_usbvision *usbvision, int len) +static void scratch_rm_old(struct usb_usbvision *usbvision, int len) { usbvision->scratch_read_ptr += len; @@ -356,7 +361,7 @@ void scratch_rm_old(struct usb_usbvision *usbvision, int len) /*This resets the buffer - kills all data in it too */ -void scratch_reset(struct usb_usbvision *usbvision) +static void scratch_reset(struct usb_usbvision *usbvision) { PDEBUG(DBG_SCRATCH, "\n"); @@ -369,7 +374,7 @@ void scratch_reset(struct usb_usbvision *usbvision) int usbvision_scratch_alloc(struct usb_usbvision *usbvision) { - usbvision->scratch = vmalloc(scratch_buf_size); + usbvision->scratch = vmalloc_32(scratch_buf_size); scratch_reset(usbvision); if(usbvision->scratch == NULL) { err("%s: unable to allocate %d bytes for scratch", @@ -399,8 +404,8 @@ void usbvision_scratch_free(struct usb_usbvision *usbvision) * 1: Draw a colored grid * */ -void usbvision_testpattern(struct usb_usbvision *usbvision, int fullframe, - int pmode) +static void usbvision_testpattern(struct usb_usbvision *usbvision, + int fullframe, int pmode) { static const char proc[] = "usbvision_testpattern"; struct usbvision_frame *frame; @@ -480,7 +485,7 @@ void usbvision_testpattern(struct usb_usbvision *usbvision, int fullframe, int usbvision_decompress_alloc(struct usb_usbvision *usbvision) { int IFB_size = MAX_FRAME_WIDTH * MAX_FRAME_HEIGHT * 3 / 2; - usbvision->IntraFrameBuffer = vmalloc(IFB_size); + usbvision->IntraFrameBuffer = vmalloc_32(IFB_size); if (usbvision->IntraFrameBuffer == NULL) { err("%s: unable to allocate %d for compr. frame buffer", __FUNCTION__, IFB_size); return -ENOMEM; @@ -2199,6 +2204,7 @@ int usbvision_power_on(struct usb_usbvision *usbvision) usbvision_write_reg(usbvision, USBVISION_PWR_REG, USBVISION_SSPND_EN); usbvision_write_reg(usbvision, USBVISION_PWR_REG, USBVISION_SSPND_EN | USBVISION_RES2); + usbvision_write_reg(usbvision, USBVISION_PWR_REG, USBVISION_SSPND_EN | USBVISION_PWR_VID); errCode = usbvision_write_reg(usbvision, USBVISION_PWR_REG, @@ -2305,7 +2311,7 @@ int usbvision_restart_isoc(struct usb_usbvision *usbvision) usbvision->Vin_Reg2_Preset)) < 0) return ret; /* TODO: schedule timeout */ - while ((usbvision_read_reg(usbvision, USBVISION_STATUS_REG) && 0x01) != 1); + while ((usbvision_read_reg(usbvision, USBVISION_STATUS_REG) & 0x01) != 1); return 0; } @@ -2346,40 +2352,6 @@ int usbvision_setup(struct usb_usbvision *usbvision,int format) return USBVISION_IS_OPERATIONAL(usbvision); } - -int usbvision_sbuf_alloc(struct usb_usbvision *usbvision) -{ - int i, errCode = 0; - const int sb_size = USBVISION_URB_FRAMES * USBVISION_MAX_ISOC_PACKET_SIZE; - - /* Clean pointers so we know if we allocated something */ - for (i = 0; i < USBVISION_NUMSBUF; i++) - usbvision->sbuf[i].data = NULL; - - for (i = 0; i < USBVISION_NUMSBUF; i++) { - usbvision->sbuf[i].data = kzalloc(sb_size, GFP_KERNEL); - if (usbvision->sbuf[i].data == NULL) { - err("%s: unable to allocate %d bytes for sbuf", __FUNCTION__, sb_size); - errCode = -ENOMEM; - break; - } - } - return errCode; -} - - -void usbvision_sbuf_free(struct usb_usbvision *usbvision) -{ - int i; - - for (i = 0; i < USBVISION_NUMSBUF; i++) { - if (usbvision->sbuf[i].data != NULL) { - kfree(usbvision->sbuf[i].data); - usbvision->sbuf[i].data = NULL; - } - } -} - /* * usbvision_init_isoc() * @@ -2388,6 +2360,7 @@ int usbvision_init_isoc(struct usb_usbvision *usbvision) { struct usb_device *dev = usbvision->dev; int bufIdx, errCode, regValue; + const int sb_size = USBVISION_URB_FRAMES * USBVISION_MAX_ISOC_PACKET_SIZE; if (!USBVISION_IS_OPERATIONAL(usbvision)) return -EFAULT; @@ -2423,6 +2396,7 @@ int usbvision_init_isoc(struct usb_usbvision *usbvision) return -ENOMEM; } usbvision->sbuf[bufIdx].urb = urb; + usbvision->sbuf[bufIdx].data = usb_buffer_alloc(usbvision->dev, sb_size, GFP_KERNEL,&urb->transfer_dma); urb->dev = dev; urb->context = usbvision; urb->pipe = usb_rcvisocpipe(dev, usbvision->video_endp); @@ -2464,6 +2438,7 @@ int usbvision_init_isoc(struct usb_usbvision *usbvision) void usbvision_stop_isoc(struct usb_usbvision *usbvision) { int bufIdx, errCode, regValue; + const int sb_size = USBVISION_URB_FRAMES * USBVISION_MAX_ISOC_PACKET_SIZE; if ((usbvision->streaming == Stream_Off) || (usbvision->dev == NULL)) return; @@ -2471,6 +2446,12 @@ void usbvision_stop_isoc(struct usb_usbvision *usbvision) /* Unschedule all of the iso td's */ for (bufIdx = 0; bufIdx < USBVISION_NUMSBUF; bufIdx++) { usb_kill_urb(usbvision->sbuf[bufIdx].urb); + if (usbvision->sbuf[bufIdx].data){ + usb_buffer_free(usbvision->dev, + sb_size, + usbvision->sbuf[bufIdx].data, + usbvision->sbuf[bufIdx].urb->transfer_dma); + } usb_free_urb(usbvision->sbuf[bufIdx].urb); usbvision->sbuf[bufIdx].urb = NULL; } diff --git a/drivers/media/video/usbvision/usbvision-i2c.c b/drivers/media/video/usbvision/usbvision-i2c.c index 0f3fba7ea6f..858252c1508 100644 --- a/drivers/media/video/usbvision/usbvision-i2c.c +++ b/drivers/media/video/usbvision/usbvision-i2c.c @@ -58,7 +58,6 @@ static int usbvision_i2c_read(void *data, unsigned char addr, char *buf, static inline int try_write_address(struct i2c_adapter *i2c_adap, unsigned char addr, int retries) { - struct i2c_algo_usb_data *adap = i2c_adap->algo_data; void *data; int i, ret = -1; char buf[4]; @@ -69,10 +68,10 @@ static inline int try_write_address(struct i2c_adapter *i2c_adap, ret = (usbvision_i2c_write(data, addr, buf, 1)); if (ret == 1) break; /* success! */ - udelay(5 /*adap->udelay */ ); + udelay(5); if (i == retries) /* no success */ break; - udelay(adap->udelay); + udelay(10); } if (i) { PDEBUG(DBG_ALGO,"Needed %d retries for address %#2x", i, addr); @@ -84,7 +83,6 @@ static inline int try_write_address(struct i2c_adapter *i2c_adap, static inline int try_read_address(struct i2c_adapter *i2c_adap, unsigned char addr, int retries) { - struct i2c_algo_usb_data *adap = i2c_adap->algo_data; void *data; int i, ret = -1; char buf[4]; @@ -94,10 +92,10 @@ static inline int try_read_address(struct i2c_adapter *i2c_adap, ret = (usbvision_i2c_read(data, addr, buf, 1)); if (ret == 1) break; /* success! */ - udelay(5 /*adap->udelay */ ); + udelay(5); if (i == retries) /* no success */ break; - udelay(adap->udelay); + udelay(10); } if (i) { PDEBUG(DBG_ALGO,"Needed %d retries for address %#2x", i, addr); @@ -213,7 +211,7 @@ static struct i2c_algorithm i2c_usb_algo = { /* * registering functions to load algorithms at runtime */ -int usbvision_i2c_usb_add_bus(struct i2c_adapter *adap) +static int usbvision_i2c_usb_add_bus(struct i2c_adapter *adap) { PDEBUG(DBG_I2C, "I2C debugging is enabled [i2c]"); PDEBUG(DBG_ALGO, "ALGO debugging is enabled [i2c]"); @@ -248,15 +246,12 @@ int usbvision_i2c_usb_del_bus(struct i2c_adapter *adap) /* usbvision specific I2C functions */ /* ----------------------------------------------------------------------- */ static struct i2c_adapter i2c_adap_template; -static struct i2c_algo_usb_data i2c_algo_template; static struct i2c_client i2c_client_template; int usbvision_init_i2c(struct usb_usbvision *usbvision) { memcpy(&usbvision->i2c_adap, &i2c_adap_template, sizeof(struct i2c_adapter)); - memcpy(&usbvision->i2c_algo, &i2c_algo_template, - sizeof(struct i2c_algo_usb_data)); memcpy(&usbvision->i2c_client, &i2c_client_template, sizeof(struct i2c_client)); @@ -266,9 +261,7 @@ int usbvision_init_i2c(struct usb_usbvision *usbvision) i2c_set_adapdata(&usbvision->i2c_adap, usbvision); i2c_set_clientdata(&usbvision->i2c_client, usbvision); - i2c_set_algo_usb_data(&usbvision->i2c_algo, usbvision); - usbvision->i2c_adap.algo_data = &usbvision->i2c_algo; usbvision->i2c_client.adapter = &usbvision->i2c_adap; if (usbvision_write_reg(usbvision, USBVISION_SER_MODE, USBVISION_IIC_LRNACK) < 0) { @@ -297,7 +290,6 @@ int usbvision_init_i2c(struct usb_usbvision *usbvision) void call_i2c_clients(struct usb_usbvision *usbvision, unsigned int cmd, void *arg) { - BUG_ON(NULL == usbvision->i2c_adap.algo_data); i2c_clients_command(&usbvision->i2c_adap, cmd, arg); } @@ -327,6 +319,9 @@ static int attach_inform(struct i2c_client *client) case 0x4a: PDEBUG(DBG_I2C,"attach_inform: saa7113 detected."); break; + case 0x48: + PDEBUG(DBG_I2C,"attach_inform: saa7111 detected."); + break; case 0xa0: PDEBUG(DBG_I2C,"attach_inform: eeprom detected."); break; @@ -531,21 +526,10 @@ static int usbvision_i2c_read(void *data, unsigned char addr, char *buf, return rdcount; } -static struct i2c_algo_usb_data i2c_algo_template = { - .data = NULL, - .inb = usbvision_i2c_read, - .outb = usbvision_i2c_write, - .udelay = 10, - .mdelay = 10, - .timeout = 100, -}; - static struct i2c_adapter i2c_adap_template = { .owner = THIS_MODULE, .name = "usbvision", .id = I2C_HW_B_BT848, /* FIXME */ - .algo = NULL, - .algo_data = NULL, .client_register = attach_inform, .client_unregister = detach_inform, #ifdef I2C_ADAP_CLASS_TV_ANALOG @@ -559,9 +543,6 @@ static struct i2c_client i2c_client_template = { .name = "usbvision internal", }; -EXPORT_SYMBOL(usbvision_i2c_usb_add_bus); -EXPORT_SYMBOL(usbvision_i2c_usb_del_bus); - /* * Overrides for Emacs so that we follow Linus's tabbing style. * --------------------------------------------------------------------------- diff --git a/drivers/media/video/usbvision/usbvision-video.c b/drivers/media/video/usbvision/usbvision-video.c index 864446c012e..8c7eba2a728 100644 --- a/drivers/media/video/usbvision/usbvision-video.c +++ b/drivers/media/video/usbvision/usbvision-video.c @@ -204,7 +204,7 @@ MODULE_ALIAS(DRIVER_ALIAS); static inline struct usb_usbvision *cd_to_usbvision(struct class_device *cd) { - struct video_device *vdev = to_video_device(cd); + struct video_device *vdev = container_of(cd, struct video_device, class_dev); return video_get_drvdata(vdev); } @@ -214,81 +214,85 @@ static ssize_t show_version(struct class_device *cd, char *buf) } static CLASS_DEVICE_ATTR(version, S_IRUGO, show_version, NULL); -static ssize_t show_model(struct class_device *class_dev, char *buf) +static ssize_t show_model(struct class_device *cd, char *buf) { - struct video_device *vdev = to_video_device(class_dev); + struct video_device *vdev = container_of(cd, struct video_device, class_dev); struct usb_usbvision *usbvision = video_get_drvdata(vdev); return sprintf(buf, "%s\n", usbvision_device_data[usbvision->DevModel].ModelString); } static CLASS_DEVICE_ATTR(model, S_IRUGO, show_model, NULL); -static ssize_t show_hue(struct class_device *class_dev, char *buf) +static ssize_t show_hue(struct class_device *cd, char *buf) { - struct video_device *vdev = to_video_device(class_dev); + struct video_device *vdev = container_of(cd, struct video_device, class_dev); struct usb_usbvision *usbvision = video_get_drvdata(vdev); struct v4l2_control ctrl; ctrl.id = V4L2_CID_HUE; ctrl.value = 0; - call_i2c_clients(usbvision, VIDIOC_G_CTRL, &ctrl); + if(usbvision->user) + call_i2c_clients(usbvision, VIDIOC_G_CTRL, &ctrl); return sprintf(buf, "%d\n", ctrl.value >> 8); } static CLASS_DEVICE_ATTR(hue, S_IRUGO, show_hue, NULL); -static ssize_t show_contrast(struct class_device *class_dev, char *buf) +static ssize_t show_contrast(struct class_device *cd, char *buf) { - struct video_device *vdev = to_video_device(class_dev); + struct video_device *vdev = container_of(cd, struct video_device, class_dev); struct usb_usbvision *usbvision = video_get_drvdata(vdev); struct v4l2_control ctrl; ctrl.id = V4L2_CID_CONTRAST; ctrl.value = 0; - call_i2c_clients(usbvision, VIDIOC_G_CTRL, &ctrl); + if(usbvision->user) + call_i2c_clients(usbvision, VIDIOC_G_CTRL, &ctrl); return sprintf(buf, "%d\n", ctrl.value >> 8); } static CLASS_DEVICE_ATTR(contrast, S_IRUGO, show_contrast, NULL); -static ssize_t show_brightness(struct class_device *class_dev, char *buf) +static ssize_t show_brightness(struct class_device *cd, char *buf) { - struct video_device *vdev = to_video_device(class_dev); + struct video_device *vdev = container_of(cd, struct video_device, class_dev); struct usb_usbvision *usbvision = video_get_drvdata(vdev); struct v4l2_control ctrl; ctrl.id = V4L2_CID_BRIGHTNESS; ctrl.value = 0; - call_i2c_clients(usbvision, VIDIOC_G_CTRL, &ctrl); + if(usbvision->user) + call_i2c_clients(usbvision, VIDIOC_G_CTRL, &ctrl); return sprintf(buf, "%d\n", ctrl.value >> 8); } static CLASS_DEVICE_ATTR(brightness, S_IRUGO, show_brightness, NULL); -static ssize_t show_saturation(struct class_device *class_dev, char *buf) +static ssize_t show_saturation(struct class_device *cd, char *buf) { - struct video_device *vdev = to_video_device(class_dev); + struct video_device *vdev = container_of(cd, struct video_device, class_dev); struct usb_usbvision *usbvision = video_get_drvdata(vdev); struct v4l2_control ctrl; ctrl.id = V4L2_CID_SATURATION; ctrl.value = 0; - call_i2c_clients(usbvision, VIDIOC_G_CTRL, &ctrl); + if(usbvision->user) + call_i2c_clients(usbvision, VIDIOC_G_CTRL, &ctrl); return sprintf(buf, "%d\n", ctrl.value >> 8); } static CLASS_DEVICE_ATTR(saturation, S_IRUGO, show_saturation, NULL); -static ssize_t show_streaming(struct class_device *class_dev, char *buf) +static ssize_t show_streaming(struct class_device *cd, char *buf) { - struct video_device *vdev = to_video_device(class_dev); + struct video_device *vdev = container_of(cd, struct video_device, class_dev); struct usb_usbvision *usbvision = video_get_drvdata(vdev); return sprintf(buf, "%s\n", YES_NO(usbvision->streaming==Stream_On?1:0)); } static CLASS_DEVICE_ATTR(streaming, S_IRUGO, show_streaming, NULL); -static ssize_t show_compression(struct class_device *class_dev, char *buf) +static ssize_t show_compression(struct class_device *cd, char *buf) { - struct video_device *vdev = to_video_device(class_dev); + struct video_device *vdev = container_of(cd, struct video_device, class_dev); struct usb_usbvision *usbvision = video_get_drvdata(vdev); return sprintf(buf, "%s\n", YES_NO(usbvision->isocMode==ISOC_MODE_COMPRESS)); } static CLASS_DEVICE_ATTR(compression, S_IRUGO, show_compression, NULL); -static ssize_t show_device_bridge(struct class_device *class_dev, char *buf) +static ssize_t show_device_bridge(struct class_device *cd, char *buf) { - struct video_device *vdev = to_video_device(class_dev); + struct video_device *vdev = container_of(cd, struct video_device, class_dev); struct usb_usbvision *usbvision = video_get_drvdata(vdev); return sprintf(buf, "%d\n", usbvision->bridgeType); } @@ -297,31 +301,71 @@ static CLASS_DEVICE_ATTR(bridge, S_IRUGO, show_device_bridge, NULL); static void usbvision_create_sysfs(struct video_device *vdev) { int res; - if (vdev) { - res=video_device_create_file(vdev, &class_device_attr_version); - res=video_device_create_file(vdev, &class_device_attr_model); - res=video_device_create_file(vdev, &class_device_attr_hue); - res=video_device_create_file(vdev, &class_device_attr_contrast); - res=video_device_create_file(vdev, &class_device_attr_brightness); - res=video_device_create_file(vdev, &class_device_attr_saturation); - res=video_device_create_file(vdev, &class_device_attr_streaming); - res=video_device_create_file(vdev, &class_device_attr_compression); - res=video_device_create_file(vdev, &class_device_attr_bridge); - } + if (!vdev) + return; + do { + res=class_device_create_file(&vdev->class_dev, + &class_device_attr_version); + if (res<0) + break; + res=class_device_create_file(&vdev->class_dev, + &class_device_attr_model); + if (res<0) + break; + res=class_device_create_file(&vdev->class_dev, + &class_device_attr_hue); + if (res<0) + break; + res=class_device_create_file(&vdev->class_dev, + &class_device_attr_contrast); + if (res<0) + break; + res=class_device_create_file(&vdev->class_dev, + &class_device_attr_brightness); + if (res<0) + break; + res=class_device_create_file(&vdev->class_dev, + &class_device_attr_saturation); + if (res<0) + break; + res=class_device_create_file(&vdev->class_dev, + &class_device_attr_streaming); + if (res<0) + break; + res=class_device_create_file(&vdev->class_dev, + &class_device_attr_compression); + if (res<0) + break; + res=class_device_create_file(&vdev->class_dev, + &class_device_attr_bridge); + if (res>=0) + return; + } while (0); + + err("%s error: %d\n", __FUNCTION__, res); } static void usbvision_remove_sysfs(struct video_device *vdev) { if (vdev) { - video_device_remove_file(vdev, &class_device_attr_version); - video_device_remove_file(vdev, &class_device_attr_model); - video_device_remove_file(vdev, &class_device_attr_hue); - video_device_remove_file(vdev, &class_device_attr_contrast); - video_device_remove_file(vdev, &class_device_attr_brightness); - video_device_remove_file(vdev, &class_device_attr_saturation); - video_device_remove_file(vdev, &class_device_attr_streaming); - video_device_remove_file(vdev, &class_device_attr_compression); - video_device_remove_file(vdev, &class_device_attr_bridge); + class_device_remove_file(&vdev->class_dev, + &class_device_attr_version); + class_device_remove_file(&vdev->class_dev, + &class_device_attr_model); + class_device_remove_file(&vdev->class_dev, + &class_device_attr_hue); + class_device_remove_file(&vdev->class_dev, + &class_device_attr_contrast); + class_device_remove_file(&vdev->class_dev, + &class_device_attr_brightness); + class_device_remove_file(&vdev->class_dev, + &class_device_attr_saturation); + class_device_remove_file(&vdev->class_dev, + &class_device_attr_streaming); + class_device_remove_file(&vdev->class_dev, + &class_device_attr_compression); + class_device_remove_file(&vdev->class_dev, + &class_device_attr_bridge); } } @@ -353,20 +397,15 @@ static int usbvision_v4l2_open(struct inode *inode, struct file *file) if(!errCode) { /* Allocate memory for the scratch ring buffer */ errCode = usbvision_scratch_alloc(usbvision); - if(!errCode) { - /* Allocate memory for the USB S buffers */ - errCode = usbvision_sbuf_alloc(usbvision); - if ((!errCode) && (usbvision->isocMode==ISOC_MODE_COMPRESS)) { - /* Allocate intermediate decompression buffers only if needed */ - errCode = usbvision_decompress_alloc(usbvision); - } + if ((!errCode) && (isocMode==ISOC_MODE_COMPRESS)) { + /* Allocate intermediate decompression buffers only if needed */ + errCode = usbvision_decompress_alloc(usbvision); } } if (errCode) { /* Deallocate all buffers if trouble */ usbvision_frames_free(usbvision); usbvision_scratch_free(usbvision); - usbvision_sbuf_free(usbvision); usbvision_decompress_free(usbvision); } } @@ -437,9 +476,8 @@ static int usbvision_v4l2_close(struct inode *inode, struct file *file) usbvision_stop_isoc(usbvision); usbvision_decompress_free(usbvision); - usbvision_rvfree(usbvision->fbuf, usbvision->fbuf_size); + usbvision_frames_free(usbvision); usbvision_scratch_free(usbvision); - usbvision_sbuf_free(usbvision); usbvision->user--; @@ -1884,7 +1922,7 @@ static struct usb_driver usbvision_driver = { * This procedure preprocesses CustomDevice parameter if any * */ -void customdevice_process(void) +static void customdevice_process(void) { usbvision_device_data[0]=usbvision_device_data[1]; usbvision_table[0]=usbvision_table[1]; @@ -1939,22 +1977,22 @@ void customdevice_process(void) { case 'P': PDEBUG(DBG_PROBE, "VideoNorm=PAL"); - usbvision_device_data[0].VideoNorm=VIDEO_MODE_PAL; + usbvision_device_data[0].VideoNorm=V4L2_STD_PAL; break; case 'S': PDEBUG(DBG_PROBE, "VideoNorm=SECAM"); - usbvision_device_data[0].VideoNorm=VIDEO_MODE_SECAM; + usbvision_device_data[0].VideoNorm=V4L2_STD_SECAM; break; case 'N': PDEBUG(DBG_PROBE, "VideoNorm=NTSC"); - usbvision_device_data[0].VideoNorm=VIDEO_MODE_NTSC; + usbvision_device_data[0].VideoNorm=V4L2_STD_NTSC; break; default: PDEBUG(DBG_PROBE, "VideoNorm=PAL (by default)"); - usbvision_device_data[0].VideoNorm=VIDEO_MODE_PAL; + usbvision_device_data[0].VideoNorm=V4L2_STD_PAL; break; } goto2next(parse); diff --git a/drivers/media/video/usbvision/usbvision.h b/drivers/media/video/usbvision/usbvision.h index 0e7e3d653ca..e2bcaba9387 100644 --- a/drivers/media/video/usbvision/usbvision.h +++ b/drivers/media/video/usbvision/usbvision.h @@ -219,18 +219,6 @@ enum { ((udevice)->last_error == 0) && \ (!(udevice)->remove_pending)) -/* I2C structures */ -struct i2c_algo_usb_data { - void *data; /* private data for lowlevel routines */ - int (*inb) (void *data, unsigned char addr, char *buf, short len); - int (*outb) (void *data, unsigned char addr, char *buf, short len); - - /* local settings */ - int udelay; - int mdelay; - int timeout; -}; - #define I2C_USB_ADAP_MAX 16 /* ----------------------------------------------------------------- */ @@ -383,7 +371,6 @@ struct usb_usbvision { /* i2c Declaration Section*/ struct i2c_adapter i2c_adap; - struct i2c_algo_usb_data i2c_algo; struct i2c_client i2c_client; struct urb *ctrlUrb; @@ -489,19 +476,8 @@ struct usb_usbvision { /* i2c-algo-usb declaration */ /* --------------------------------------------------------------- */ -int usbvision_i2c_usb_add_bus(struct i2c_adapter *); int usbvision_i2c_usb_del_bus(struct i2c_adapter *); -static inline void *i2c_get_algo_usb_data (struct i2c_algo_usb_data *dev) -{ - return dev->data; -} - -static inline void i2c_set_algo_usb_data (struct i2c_algo_usb_data *dev, void *data) -{ - dev->data = data; -} - /* ----------------------------------------------------------------------- */ /* usbvision specific I2C functions */ @@ -510,7 +486,6 @@ int usbvision_init_i2c(struct usb_usbvision *usbvision); void call_i2c_clients(struct usb_usbvision *usbvision, unsigned int cmd,void *arg); /* defined in usbvision-core.c */ -void *usbvision_rvmalloc(unsigned long size); void usbvision_rvfree(void *mem, unsigned long size); int usbvision_read_reg(struct usb_usbvision *usbvision, unsigned char reg); int usbvision_write_reg(struct usb_usbvision *usbvision, unsigned char reg, @@ -520,8 +495,6 @@ int usbvision_frames_alloc(struct usb_usbvision *usbvision); void usbvision_frames_free(struct usb_usbvision *usbvision); int usbvision_scratch_alloc(struct usb_usbvision *usbvision); void usbvision_scratch_free(struct usb_usbvision *usbvision); -int usbvision_sbuf_alloc(struct usb_usbvision *usbvision); -void usbvision_sbuf_free(struct usb_usbvision *usbvision); int usbvision_decompress_alloc(struct usb_usbvision *usbvision); void usbvision_decompress_free(struct usb_usbvision *usbvision); |