Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] cx231xx: Add support for Hauppauge WinTV USB2-FM

This patch adds support for the "Hauppauge WinTV USB2-FM" Analog TV Stick.
It includes support for both the PAL and NTSC variants of the device.

Signed-off-by: Peter Moon <pomoon@gmail.com>
Reviewed-by: Devin Heitmueller <dheitmueller@hauppauge.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

authored by

Peter Moon and committed by
Mauro Carvalho Chehab
de8ae0d5 c3f305aa

+84
+4
drivers/media/video/cx231xx/cx231xx-avcore.c
··· 355 355 case CX231XX_BOARD_HAUPPAUGE_EXETER: 356 356 case CX231XX_BOARD_HAUPPAUGE_USBLIVE2: 357 357 case CX231XX_BOARD_PV_PLAYTV_USB_HYBRID: 358 + case CX231XX_BOARD_HAUPPAUGE_USB2_FM_PAL: 359 + case CX231XX_BOARD_HAUPPAUGE_USB2_FM_NTSC: 358 360 if (avmode == POLARIS_AVMODE_ANALOGT_TV) { 359 361 while (afe_power_status != (FLD_PWRDN_TUNING_BIAS | 360 362 FLD_PWRDN_ENABLE_PLL)) { ··· 1735 1733 break; 1736 1734 case CX231XX_BOARD_CNXT_RDE_253S: 1737 1735 case CX231XX_BOARD_CNXT_RDU_253S: 1736 + case CX231XX_BOARD_HAUPPAUGE_USB2_FM_PAL: 1737 + case CX231XX_BOARD_HAUPPAUGE_USB2_FM_NTSC: 1738 1738 func_mode = 0x01; 1739 1739 break; 1740 1740 default:
+74
drivers/media/video/cx231xx/cx231xx-cards.c
··· 532 532 .gpio = NULL, 533 533 } }, 534 534 }, 535 + [CX231XX_BOARD_HAUPPAUGE_USB2_FM_PAL] = { 536 + .name = "Hauppauge WinTV USB2 FM (PAL)", 537 + .tuner_type = TUNER_NXP_TDA18271, 538 + .tuner_addr = 0x60, 539 + .tuner_gpio = RDE250_XCV_TUNER, 540 + .tuner_sif_gpio = 0x05, 541 + .tuner_scl_gpio = 0x1a, 542 + .tuner_sda_gpio = 0x1b, 543 + .decoder = CX231XX_AVDECODER, 544 + .output_mode = OUT_MODE_VIP11, 545 + .ctl_pin_status_mask = 0xFFFFFFC4, 546 + .agc_analog_digital_select_gpio = 0x0c, 547 + .gpio_pin_status_mask = 0x4001000, 548 + .tuner_i2c_master = 1, 549 + .norm = V4L2_STD_PAL, 550 + 551 + .input = {{ 552 + .type = CX231XX_VMUX_TELEVISION, 553 + .vmux = CX231XX_VIN_3_1, 554 + .amux = CX231XX_AMUX_VIDEO, 555 + .gpio = NULL, 556 + }, { 557 + .type = CX231XX_VMUX_COMPOSITE1, 558 + .vmux = CX231XX_VIN_2_1, 559 + .amux = CX231XX_AMUX_LINE_IN, 560 + .gpio = NULL, 561 + }, { 562 + .type = CX231XX_VMUX_SVIDEO, 563 + .vmux = CX231XX_VIN_1_1 | 564 + (CX231XX_VIN_1_2 << 8) | 565 + CX25840_SVIDEO_ON, 566 + .amux = CX231XX_AMUX_LINE_IN, 567 + .gpio = NULL, 568 + } }, 569 + }, 570 + [CX231XX_BOARD_HAUPPAUGE_USB2_FM_NTSC] = { 571 + .name = "Hauppauge WinTV USB2 FM (NTSC)", 572 + .tuner_type = TUNER_NXP_TDA18271, 573 + .tuner_addr = 0x60, 574 + .tuner_gpio = RDE250_XCV_TUNER, 575 + .tuner_sif_gpio = 0x05, 576 + .tuner_scl_gpio = 0x1a, 577 + .tuner_sda_gpio = 0x1b, 578 + .decoder = CX231XX_AVDECODER, 579 + .output_mode = OUT_MODE_VIP11, 580 + .ctl_pin_status_mask = 0xFFFFFFC4, 581 + .agc_analog_digital_select_gpio = 0x0c, 582 + .gpio_pin_status_mask = 0x4001000, 583 + .tuner_i2c_master = 1, 584 + .norm = V4L2_STD_NTSC, 585 + 586 + .input = {{ 587 + .type = CX231XX_VMUX_TELEVISION, 588 + .vmux = CX231XX_VIN_3_1, 589 + .amux = CX231XX_AMUX_VIDEO, 590 + .gpio = NULL, 591 + }, { 592 + .type = CX231XX_VMUX_COMPOSITE1, 593 + .vmux = CX231XX_VIN_2_1, 594 + .amux = CX231XX_AMUX_LINE_IN, 595 + .gpio = NULL, 596 + }, { 597 + .type = CX231XX_VMUX_SVIDEO, 598 + .vmux = CX231XX_VIN_1_1 | 599 + (CX231XX_VIN_1_2 << 8) | 600 + CX25840_SVIDEO_ON, 601 + .amux = CX231XX_AMUX_LINE_IN, 602 + .gpio = NULL, 603 + } }, 604 + }, 535 605 }; 536 606 const unsigned int cx231xx_bcount = ARRAY_SIZE(cx231xx_boards); 537 607 ··· 623 553 .driver_info = CX231XX_BOARD_CNXT_RDE_250}, 624 554 {USB_DEVICE(0x0572, 0x58A0), 625 555 .driver_info = CX231XX_BOARD_CNXT_RDU_250}, 556 + {USB_DEVICE(0x2040, 0xb110), 557 + .driver_info = CX231XX_BOARD_HAUPPAUGE_USB2_FM_PAL}, 558 + {USB_DEVICE(0x2040, 0xb111), 559 + .driver_info = CX231XX_BOARD_HAUPPAUGE_USB2_FM_NTSC}, 626 560 {USB_DEVICE(0x2040, 0xb120), 627 561 .driver_info = CX231XX_BOARD_HAUPPAUGE_EXETER}, 628 562 {USB_DEVICE(0x2040, 0xb140),
+4
drivers/media/video/cx231xx/cx231xx-core.c
··· 742 742 case CX231XX_BOARD_CNXT_RDU_253S: 743 743 case CX231XX_BOARD_HAUPPAUGE_EXETER: 744 744 case CX231XX_BOARD_PV_PLAYTV_USB_HYBRID: 745 + case CX231XX_BOARD_HAUPPAUGE_USB2_FM_PAL: 746 + case CX231XX_BOARD_HAUPPAUGE_USB2_FM_NTSC: 745 747 errCode = cx231xx_set_agc_analog_digital_mux_select(dev, 0); 746 748 break; 747 749 default: ··· 1383 1381 case CX231XX_BOARD_CNXT_RDU_253S: 1384 1382 case CX231XX_BOARD_HAUPPAUGE_EXETER: 1385 1383 case CX231XX_BOARD_PV_PLAYTV_USB_HYBRID: 1384 + case CX231XX_BOARD_HAUPPAUGE_USB2_FM_PAL: 1385 + case CX231XX_BOARD_HAUPPAUGE_USB2_FM_NTSC: 1386 1386 errCode = cx231xx_set_agc_analog_digital_mux_select(dev, 0); 1387 1387 break; 1388 1388 default:
+2
drivers/media/video/cx231xx/cx231xx.h
··· 67 67 #define CX231XX_BOARD_PV_XCAPTURE_USB 11 68 68 #define CX231XX_BOARD_KWORLD_UB430_USB_HYBRID 12 69 69 #define CX231XX_BOARD_ICONBIT_U100 13 70 + #define CX231XX_BOARD_HAUPPAUGE_USB2_FM_PAL 14 71 + #define CX231XX_BOARD_HAUPPAUGE_USB2_FM_NTSC 15 70 72 71 73 /* Limits minimum and default number of buffers */ 72 74 #define CX231XX_MIN_BUF 4