aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDevin Heitmueller <dheitmueller@hauppauge.com>2010-07-30 23:49:01 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-10-20 23:17:28 -0400
commit4270c3cac41e248ee339d18e01251989b74a30f1 (patch)
treee5b303f254fd41a70ee320fd57f87e0f9682c57b
parent8d4c20c960aa9325bd3b9995f518e1f05c374856 (diff)
[media] cx231xx: Add initial support for Hauppauge USB-Live2
Add initial support for the Hauppauge USBLive 2 (2040:c200). Note that I had to copy a bunch of the case statements used for the Conexant video grabber reference design (which also doesn't have a tuner). This will likely need to be refactored out into the board profile. Signed-off-by: Devin Heitmueller <dheitmueller@hauppauge.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/video/cx231xx/cx231xx-avcore.c1
-rw-r--r--drivers/media/video/cx231xx/cx231xx-cards.c33
-rw-r--r--drivers/media/video/cx231xx/cx231xx-core.c9
-rw-r--r--drivers/media/video/cx231xx/cx231xx-video.c9
-rw-r--r--drivers/media/video/cx231xx/cx231xx.h1
5 files changed, 41 insertions, 12 deletions
diff --git a/drivers/media/video/cx231xx/cx231xx-avcore.c b/drivers/media/video/cx231xx/cx231xx-avcore.c
index 0d358e675984..917812d6ab21 100644
--- a/drivers/media/video/cx231xx/cx231xx-avcore.c
+++ b/drivers/media/video/cx231xx/cx231xx-avcore.c
@@ -353,6 +353,7 @@ int cx231xx_afe_update_power_control(struct cx231xx *dev,
353 case CX231XX_BOARD_CNXT_RDU_253S: 353 case CX231XX_BOARD_CNXT_RDU_253S:
354 case CX231XX_BOARD_CNXT_VIDEO_GRABBER: 354 case CX231XX_BOARD_CNXT_VIDEO_GRABBER:
355 case CX231XX_BOARD_HAUPPAUGE_EXETER: 355 case CX231XX_BOARD_HAUPPAUGE_EXETER:
356 case CX231XX_BOARD_HAUPPAUGE_USBLIVE2:
356 if (avmode == POLARIS_AVMODE_ANALOGT_TV) { 357 if (avmode == POLARIS_AVMODE_ANALOGT_TV) {
357 while (afe_power_status != (FLD_PWRDN_TUNING_BIAS | 358 while (afe_power_status != (FLD_PWRDN_TUNING_BIAS |
358 FLD_PWRDN_ENABLE_PLL)) { 359 FLD_PWRDN_ENABLE_PLL)) {
diff --git a/drivers/media/video/cx231xx/cx231xx-cards.c b/drivers/media/video/cx231xx/cx231xx-cards.c
index ed8139acf19a..4d37cb7b0750 100644
--- a/drivers/media/video/cx231xx/cx231xx-cards.c
+++ b/drivers/media/video/cx231xx/cx231xx-cards.c
@@ -378,11 +378,29 @@ struct cx231xx_board cx231xx_boards[] = {
378 .gpio = 0, 378 .gpio = 0,
379 } }, 379 } },
380 }, 380 },
381 381 [CX231XX_BOARD_HAUPPAUGE_USBLIVE2] = {
382 382 .name = "Hauppauge USB Live 2",
383 383 .tuner_type = TUNER_ABSENT,
384 384 .decoder = CX231XX_AVDECODER,
385 385 .demod_xfer_mode = 0,
386 .ctl_pin_status_mask = 0xFFFFFFC4,
387 .agc_analog_digital_select_gpio = 0x0c,
388 .gpio_pin_status_mask = 0x4001000,
389 .norm = V4L2_STD_NTSC,
390 .input = {{
391 .type = CX231XX_VMUX_COMPOSITE1,
392 .vmux = CX231XX_VIN_2_1,
393 .amux = CX231XX_AMUX_LINE_IN,
394 .gpio = 0,
395 }, {
396 .type = CX231XX_VMUX_SVIDEO,
397 .vmux = CX231XX_VIN_1_1 |
398 (CX231XX_VIN_1_2 << 8) |
399 CX25840_SVIDEO_ON,
400 .amux = CX231XX_AMUX_LINE_IN,
401 .gpio = 0,
402 } },
403 },
386}; 404};
387const unsigned int cx231xx_bcount = ARRAY_SIZE(cx231xx_boards); 405const unsigned int cx231xx_bcount = ARRAY_SIZE(cx231xx_boards);
388 406
@@ -410,6 +428,8 @@ struct usb_device_id cx231xx_id_table[] = {
410 .driver_info = CX231XX_BOARD_HAUPPAUGE_EXETER}, 428 .driver_info = CX231XX_BOARD_HAUPPAUGE_EXETER},
411 {USB_DEVICE(0x2040, 0xb140), 429 {USB_DEVICE(0x2040, 0xb140),
412 .driver_info = CX231XX_BOARD_HAUPPAUGE_EXETER}, 430 .driver_info = CX231XX_BOARD_HAUPPAUGE_EXETER},
431 {USB_DEVICE(0x2040, 0xc200),
432 .driver_info = CX231XX_BOARD_HAUPPAUGE_USBLIVE2},
413 {}, 433 {},
414}; 434};
415 435
@@ -688,7 +708,8 @@ static int cx231xx_init_dev(struct cx231xx **devhandle, struct usb_device *udev,
688 708
689 /*To workaround error number=-71 on EP0 for VideoGrabber, 709 /*To workaround error number=-71 on EP0 for VideoGrabber,
690 need set alt here.*/ 710 need set alt here.*/
691 if (dev->model == CX231XX_BOARD_CNXT_VIDEO_GRABBER) { 711 if (dev->model == CX231XX_BOARD_CNXT_VIDEO_GRABBER ||
712 dev->model == CX231XX_BOARD_HAUPPAUGE_USBLIVE2) {
692 cx231xx_set_alt_setting(dev, INDEX_VIDEO, 3); 713 cx231xx_set_alt_setting(dev, INDEX_VIDEO, 3);
693 cx231xx_set_alt_setting(dev, INDEX_VANC, 1); 714 cx231xx_set_alt_setting(dev, INDEX_VANC, 1);
694 } 715 }
diff --git a/drivers/media/video/cx231xx/cx231xx-core.c b/drivers/media/video/cx231xx/cx231xx-core.c
index fe3d500424f3..5406ff28852e 100644
--- a/drivers/media/video/cx231xx/cx231xx-core.c
+++ b/drivers/media/video/cx231xx/cx231xx-core.c
@@ -628,7 +628,8 @@ int cx231xx_set_alt_setting(struct cx231xx *dev, u8 index, u8 alt)
628 usb_interface_index, alt); 628 usb_interface_index, alt);
629 /*To workaround error number=-71 on EP0 for videograbber, 629 /*To workaround error number=-71 on EP0 for videograbber,
630 need add following codes.*/ 630 need add following codes.*/
631 if (dev->model != CX231XX_BOARD_CNXT_VIDEO_GRABBER) 631 if (dev->model != CX231XX_BOARD_CNXT_VIDEO_GRABBER &&
632 dev->model != CX231XX_BOARD_HAUPPAUGE_USBLIVE2)
632 return -1; 633 return -1;
633 } 634 }
634 635
@@ -1327,7 +1328,8 @@ int cx231xx_dev_init(struct cx231xx *dev)
1327 /* init hardware */ 1328 /* init hardware */
1328 /* Note : with out calling set power mode function, 1329 /* Note : with out calling set power mode function,
1329 afe can not be set up correctly */ 1330 afe can not be set up correctly */
1330 if (dev->model == CX231XX_BOARD_CNXT_VIDEO_GRABBER) { 1331 if (dev->model == CX231XX_BOARD_CNXT_VIDEO_GRABBER ||
1332 dev->model == CX231XX_BOARD_HAUPPAUGE_USBLIVE2) {
1331 errCode = cx231xx_set_power_mode(dev, 1333 errCode = cx231xx_set_power_mode(dev,
1332 POLARIS_AVMODE_ENXTERNAL_AV); 1334 POLARIS_AVMODE_ENXTERNAL_AV);
1333 if (errCode < 0) { 1335 if (errCode < 0) {
@@ -1427,7 +1429,8 @@ int cx231xx_dev_init(struct cx231xx *dev)
1427 cx231xx_set_alt_setting(dev, INDEX_TS1, 0); 1429 cx231xx_set_alt_setting(dev, INDEX_TS1, 0);
1428 1430
1429 /* set the I2C master port to 3 on channel 1 */ 1431 /* set the I2C master port to 3 on channel 1 */
1430 if (dev->model != CX231XX_BOARD_CNXT_VIDEO_GRABBER) 1432 if (dev->model != CX231XX_BOARD_CNXT_VIDEO_GRABBER &&
1433 dev->model != CX231XX_BOARD_HAUPPAUGE_USBLIVE2)
1431 errCode = cx231xx_enable_i2c_for_tuner(dev, I2C_3); 1434 errCode = cx231xx_enable_i2c_for_tuner(dev, I2C_3);
1432 1435
1433 return errCode; 1436 return errCode;
diff --git a/drivers/media/video/cx231xx/cx231xx-video.c b/drivers/media/video/cx231xx/cx231xx-video.c
index 0880edd3a49b..38367ee07cc5 100644
--- a/drivers/media/video/cx231xx/cx231xx-video.c
+++ b/drivers/media/video/cx231xx/cx231xx-video.c
@@ -2256,7 +2256,8 @@ static int cx231xx_v4l2_open(struct file *filp)
2256 dev->height = norm_maxh(dev); 2256 dev->height = norm_maxh(dev);
2257 2257
2258 /* Power up in Analog TV mode */ 2258 /* Power up in Analog TV mode */
2259 if (dev->model == CX231XX_BOARD_CNXT_VIDEO_GRABBER) 2259 if (dev->model == CX231XX_BOARD_CNXT_VIDEO_GRABBER ||
2260 dev->model == CX231XX_BOARD_HAUPPAUGE_USBLIVE2)
2260 cx231xx_set_power_mode(dev, 2261 cx231xx_set_power_mode(dev,
2261 POLARIS_AVMODE_ENXTERNAL_AV); 2262 POLARIS_AVMODE_ENXTERNAL_AV);
2262 else 2263 else
@@ -2296,7 +2297,8 @@ static int cx231xx_v4l2_open(struct file *filp)
2296 if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE) { 2297 if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE) {
2297 /* Set the required alternate setting VBI interface works in 2298 /* Set the required alternate setting VBI interface works in
2298 Bulk mode only */ 2299 Bulk mode only */
2299 if (dev->model != CX231XX_BOARD_CNXT_VIDEO_GRABBER) 2300 if (dev->model != CX231XX_BOARD_CNXT_VIDEO_GRABBER &&
2301 dev->model != CX231XX_BOARD_HAUPPAUGE_USBLIVE2)
2300 cx231xx_set_alt_setting(dev, INDEX_VANC, 0); 2302 cx231xx_set_alt_setting(dev, INDEX_VANC, 0);
2301 2303
2302 videobuf_queue_vmalloc_init(&fh->vb_vidq, &cx231xx_vbi_qops, 2304 videobuf_queue_vmalloc_init(&fh->vb_vidq, &cx231xx_vbi_qops,
@@ -2371,7 +2373,8 @@ static int cx231xx_v4l2_close(struct file *filp)
2371 2373
2372 /*To workaround error number=-71 on EP0 for VideoGrabber, 2374 /*To workaround error number=-71 on EP0 for VideoGrabber,
2373 need exclude following.*/ 2375 need exclude following.*/
2374 if (dev->model != CX231XX_BOARD_CNXT_VIDEO_GRABBER) 2376 if (dev->model != CX231XX_BOARD_CNXT_VIDEO_GRABBER &&
2377 dev->model != CX231XX_BOARD_HAUPPAUGE_USBLIVE2)
2375 if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE) { 2378 if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE) {
2376 videobuf_stop(&fh->vb_vidq); 2379 videobuf_stop(&fh->vb_vidq);
2377 videobuf_mmap_free(&fh->vb_vidq); 2380 videobuf_mmap_free(&fh->vb_vidq);
diff --git a/drivers/media/video/cx231xx/cx231xx.h b/drivers/media/video/cx231xx/cx231xx.h
index aa273428d021..8d4fcf70387f 100644
--- a/drivers/media/video/cx231xx/cx231xx.h
+++ b/drivers/media/video/cx231xx/cx231xx.h
@@ -63,6 +63,7 @@
63#define CX231XX_BOARD_CNXT_RDE_250 6 63#define CX231XX_BOARD_CNXT_RDE_250 6
64#define CX231XX_BOARD_CNXT_RDU_250 7 64#define CX231XX_BOARD_CNXT_RDU_250 7
65#define CX231XX_BOARD_HAUPPAUGE_EXETER 8 65#define CX231XX_BOARD_HAUPPAUGE_EXETER 8
66#define CX231XX_BOARD_HAUPPAUGE_USBLIVE2 9
66 67
67/* Limits minimum and default number of buffers */ 68/* Limits minimum and default number of buffers */
68#define CX231XX_MIN_BUF 4 69#define CX231XX_MIN_BUF 4