aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/video4linux/CARDLIST.cx238851
-rw-r--r--drivers/media/video/cx23885/cx23885-cards.c20
-rw-r--r--drivers/media/video/cx23885/cx23885-dvb.c24
-rw-r--r--drivers/media/video/cx23885/cx23885.h1
4 files changed, 44 insertions, 2 deletions
diff --git a/Documentation/video4linux/CARDLIST.cx23885 b/Documentation/video4linux/CARDLIST.cx23885
index e7ed710f7ea..948e436108b 100644
--- a/Documentation/video4linux/CARDLIST.cx23885
+++ b/Documentation/video4linux/CARDLIST.cx23885
@@ -19,3 +19,4 @@
19 18 -> Hauppauge WinTV-HVR1270 [0070:2211] 19 18 -> Hauppauge WinTV-HVR1270 [0070:2211]
20 19 -> Hauppauge WinTV-HVR1275 [0070:2215] 20 19 -> Hauppauge WinTV-HVR1275 [0070:2215]
21 20 -> Hauppauge WinTV-HVR1255 [0070:2251] 21 20 -> Hauppauge WinTV-HVR1255 [0070:2251]
22 21 -> Hauppauge WinTV-HVR1210 [0070:2291,0070:2295]
diff --git a/drivers/media/video/cx23885/cx23885-cards.c b/drivers/media/video/cx23885/cx23885-cards.c
index 604ceb18052..82fc2577b5e 100644
--- a/drivers/media/video/cx23885/cx23885-cards.c
+++ b/drivers/media/video/cx23885/cx23885-cards.c
@@ -193,6 +193,10 @@ struct cx23885_board cx23885_boards[] = {
193 .name = "Hauppauge WinTV-HVR1255", 193 .name = "Hauppauge WinTV-HVR1255",
194 .portc = CX23885_MPEG_DVB, 194 .portc = CX23885_MPEG_DVB,
195 }, 195 },
196 [CX23885_BOARD_HAUPPAUGE_HVR1210] = {
197 .name = "Hauppauge WinTV-HVR1210",
198 .portc = CX23885_MPEG_DVB,
199 },
196}; 200};
197const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards); 201const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards);
198 202
@@ -304,6 +308,14 @@ struct cx23885_subid cx23885_subids[] = {
304 .subvendor = 0x0070, 308 .subvendor = 0x0070,
305 .subdevice = 0x2251, 309 .subdevice = 0x2251,
306 .card = CX23885_BOARD_HAUPPAUGE_HVR1255, 310 .card = CX23885_BOARD_HAUPPAUGE_HVR1255,
311 }, {
312 .subvendor = 0x0070,
313 .subdevice = 0x2291,
314 .card = CX23885_BOARD_HAUPPAUGE_HVR1210,
315 }, {
316 .subvendor = 0x0070,
317 .subdevice = 0x2295,
318 .card = CX23885_BOARD_HAUPPAUGE_HVR1210,
307 }, 319 },
308}; 320};
309const unsigned int cx23885_idcount = ARRAY_SIZE(cx23885_subids); 321const unsigned int cx23885_idcount = ARRAY_SIZE(cx23885_subids);
@@ -646,9 +658,10 @@ void cx23885_gpio_setup(struct cx23885_dev *dev)
646 case CX23885_BOARD_HAUPPAUGE_HVR1270: 658 case CX23885_BOARD_HAUPPAUGE_HVR1270:
647 case CX23885_BOARD_HAUPPAUGE_HVR1275: 659 case CX23885_BOARD_HAUPPAUGE_HVR1275:
648 case CX23885_BOARD_HAUPPAUGE_HVR1255: 660 case CX23885_BOARD_HAUPPAUGE_HVR1255:
661 case CX23885_BOARD_HAUPPAUGE_HVR1210:
649 /* GPIO-5 RF Control: 0 = RF1 Terrestrial, 1 = RF2 Cable */ 662 /* GPIO-5 RF Control: 0 = RF1 Terrestrial, 1 = RF2 Cable */
650 /* GPIO-6 I2C Gate which can isolate the 3305 from the bus */ 663 /* GPIO-6 I2C Gate which can isolate the demod from the bus */
651 /* GPIO-9 LG3305 reset */ 664 /* GPIO-9 Demod reset */
652 665
653 /* Put the parts into reset and back */ 666 /* Put the parts into reset and back */
654 cx23885_gpio_enable(dev, GPIO_9 | GPIO_6 | GPIO_5, 1); 667 cx23885_gpio_enable(dev, GPIO_9 | GPIO_6 | GPIO_5, 1);
@@ -672,6 +685,7 @@ int cx23885_ir_init(struct cx23885_dev *dev)
672 case CX23885_BOARD_HAUPPAUGE_HVR1270: 685 case CX23885_BOARD_HAUPPAUGE_HVR1270:
673 case CX23885_BOARD_HAUPPAUGE_HVR1275: 686 case CX23885_BOARD_HAUPPAUGE_HVR1275:
674 case CX23885_BOARD_HAUPPAUGE_HVR1255: 687 case CX23885_BOARD_HAUPPAUGE_HVR1255:
688 case CX23885_BOARD_HAUPPAUGE_HVR1210:
675 /* FIXME: Implement me */ 689 /* FIXME: Implement me */
676 break; 690 break;
677 case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP: 691 case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP:
@@ -710,6 +724,7 @@ void cx23885_card_setup(struct cx23885_dev *dev)
710 case CX23885_BOARD_HAUPPAUGE_HVR1270: 724 case CX23885_BOARD_HAUPPAUGE_HVR1270:
711 case CX23885_BOARD_HAUPPAUGE_HVR1275: 725 case CX23885_BOARD_HAUPPAUGE_HVR1275:
712 case CX23885_BOARD_HAUPPAUGE_HVR1255: 726 case CX23885_BOARD_HAUPPAUGE_HVR1255:
727 case CX23885_BOARD_HAUPPAUGE_HVR1210:
713 if (dev->i2c_bus[0].i2c_rc == 0) 728 if (dev->i2c_bus[0].i2c_rc == 0)
714 hauppauge_eeprom(dev, eeprom+0xc0); 729 hauppauge_eeprom(dev, eeprom+0xc0);
715 break; 730 break;
@@ -770,6 +785,7 @@ void cx23885_card_setup(struct cx23885_dev *dev)
770 case CX23885_BOARD_HAUPPAUGE_HVR1270: 785 case CX23885_BOARD_HAUPPAUGE_HVR1270:
771 case CX23885_BOARD_HAUPPAUGE_HVR1275: 786 case CX23885_BOARD_HAUPPAUGE_HVR1275:
772 case CX23885_BOARD_HAUPPAUGE_HVR1255: 787 case CX23885_BOARD_HAUPPAUGE_HVR1255:
788 case CX23885_BOARD_HAUPPAUGE_HVR1210:
773 default: 789 default:
774 ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ 790 ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */
775 ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 791 ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
diff --git a/drivers/media/video/cx23885/cx23885-dvb.c b/drivers/media/video/cx23885/cx23885-dvb.c
index b440b55f22c..22d1aefc0bf 100644
--- a/drivers/media/video/cx23885/cx23885-dvb.c
+++ b/drivers/media/video/cx23885/cx23885-dvb.c
@@ -128,6 +128,15 @@ static struct tda10048_config hauppauge_hvr1200_config = {
128 .clk_freq_khz = TDA10048_CLK_16000, 128 .clk_freq_khz = TDA10048_CLK_16000,
129}; 129};
130 130
131static struct tda10048_config hauppauge_hvr1210_config = {
132 .demod_address = 0x10 >> 1,
133 .output_mode = TDA10048_SERIAL_OUTPUT,
134 .fwbulkwritelen = TDA10048_BULKWRITE_200,
135 .inversion = TDA10048_INVERSION_ON,
136 .if_freq_khz = TDA10048_IF_4000,
137 .clk_freq_khz = TDA10048_CLK_16000,
138};
139
131static struct s5h1409_config hauppauge_ezqam_config = { 140static struct s5h1409_config hauppauge_ezqam_config = {
132 .demod_address = 0x32 >> 1, 141 .demod_address = 0x32 >> 1,
133 .output_mode = S5H1409_SERIAL_OUTPUT, 142 .output_mode = S5H1409_SERIAL_OUTPUT,
@@ -237,6 +246,10 @@ static struct tda18271_config hauppauge_hvr1200_tuner_config = {
237 .gate = TDA18271_GATE_ANALOG, 246 .gate = TDA18271_GATE_ANALOG,
238}; 247};
239 248
249static struct tda18271_config hauppauge_hvr1210_tuner_config = {
250 .gate = TDA18271_GATE_DIGITAL,
251};
252
240static struct tda18271_std_map hcw_lgdt3305_tda18271_std_map = { 253static struct tda18271_std_map hcw_lgdt3305_tda18271_std_map = {
241 .atsc_6 = { .if_freq = 3250, .agc_mode = 3, .std = 4, 254 .atsc_6 = { .if_freq = 3250, .agc_mode = 3, .std = 4,
242 .if_lvl = 1, .rfagc_top = 0x58 }, 255 .if_lvl = 1, .rfagc_top = 0x58 },
@@ -554,6 +567,17 @@ static int dvb_register(struct cx23885_tsport *port)
554 &hauppauge_hvr1200_tuner_config); 567 &hauppauge_hvr1200_tuner_config);
555 } 568 }
556 break; 569 break;
570 case CX23885_BOARD_HAUPPAUGE_HVR1210:
571 i2c_bus = &dev->i2c_bus[0];
572 fe0->dvb.frontend = dvb_attach(tda10048_attach,
573 &hauppauge_hvr1210_config,
574 &i2c_bus->i2c_adap);
575 if (fe0->dvb.frontend != NULL) {
576 dvb_attach(tda18271_attach, fe0->dvb.frontend,
577 0x60, &dev->i2c_bus[1].i2c_adap,
578 &hauppauge_hvr1210_tuner_config);
579 }
580 break;
557 case CX23885_BOARD_HAUPPAUGE_HVR1400: 581 case CX23885_BOARD_HAUPPAUGE_HVR1400:
558 i2c_bus = &dev->i2c_bus[0]; 582 i2c_bus = &dev->i2c_bus[0];
559 fe0->dvb.frontend = dvb_attach(dib7000p_attach, 583 fe0->dvb.frontend = dvb_attach(dib7000p_attach,
diff --git a/drivers/media/video/cx23885/cx23885.h b/drivers/media/video/cx23885/cx23885.h
index 9b42e41f30f..5067c19b659 100644
--- a/drivers/media/video/cx23885/cx23885.h
+++ b/drivers/media/video/cx23885/cx23885.h
@@ -74,6 +74,7 @@
74#define CX23885_BOARD_HAUPPAUGE_HVR1270 18 74#define CX23885_BOARD_HAUPPAUGE_HVR1270 18
75#define CX23885_BOARD_HAUPPAUGE_HVR1275 19 75#define CX23885_BOARD_HAUPPAUGE_HVR1275 19
76#define CX23885_BOARD_HAUPPAUGE_HVR1255 20 76#define CX23885_BOARD_HAUPPAUGE_HVR1255 20
77#define CX23885_BOARD_HAUPPAUGE_HVR1210 21
77 78
78#define GPIO_0 0x00000001 79#define GPIO_0 0x00000001
79#define GPIO_1 0x00000002 80#define GPIO_1 0x00000002