aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx23885
diff options
context:
space:
mode:
authorMichael Krufky <mkrufky@linuxtv.org>2008-05-07 00:43:10 -0400
committerMauro Carvalho Chehab <mchehab@infradead.org>2008-07-20 06:08:09 -0400
commit335377b73dd0b0af1fbd283ceae6fcb87a747885 (patch)
tree2ecb0b76ec3e86a8902e1282cd9f3e026ebc3132 /drivers/media/video/cx23885
parent26151c32d3d001f64e75871588acd0aff3f216d7 (diff)
V4L/DVB (7986): cx23885: add initial support for DViCO FusionHDTV7 Dual Express
Only one frontend is enabled right now. The second frontend can lock, but transport doesn't work yet. The device will be supported as a single tuner device until the second frontend is working. Signed-off-by: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/cx23885')
-rw-r--r--drivers/media/video/cx23885/cx23885-cards.c13
-rw-r--r--drivers/media/video/cx23885/cx23885-dvb.c27
-rw-r--r--drivers/media/video/cx23885/cx23885.h1
3 files changed, 41 insertions, 0 deletions
diff --git a/drivers/media/video/cx23885/cx23885-cards.c b/drivers/media/video/cx23885/cx23885-cards.c
index 20e05f230546..fd7112c11d35 100644
--- a/drivers/media/video/cx23885/cx23885-cards.c
+++ b/drivers/media/video/cx23885/cx23885-cards.c
@@ -143,6 +143,10 @@ struct cx23885_board cx23885_boards[] = {
143 .name = "Hauppauge WinTV-HVR1400", 143 .name = "Hauppauge WinTV-HVR1400",
144 .portc = CX23885_MPEG_DVB, 144 .portc = CX23885_MPEG_DVB,
145 }, 145 },
146 [CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP] = {
147 .name = "DViCO FusionHDTV7 Dual Express",
148 .portc = CX23885_MPEG_DVB,
149 },
146}; 150};
147const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards); 151const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards);
148 152
@@ -210,6 +214,10 @@ struct cx23885_subid cx23885_subids[] = {
210 .subvendor = 0x0070, 214 .subvendor = 0x0070,
211 .subdevice = 0x8010, 215 .subdevice = 0x8010,
212 .card = CX23885_BOARD_HAUPPAUGE_HVR1400, 216 .card = CX23885_BOARD_HAUPPAUGE_HVR1400,
217 },{
218 .subvendor = 0x18ac,
219 .subdevice = 0xd618,
220 .card = CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP,
213 }, 221 },
214}; 222};
215const unsigned int cx23885_idcount = ARRAY_SIZE(cx23885_subids); 223const unsigned int cx23885_idcount = ARRAY_SIZE(cx23885_subids);
@@ -477,6 +485,11 @@ void cx23885_card_setup(struct cx23885_dev *dev)
477 } 485 }
478 486
479 switch (dev->board) { 487 switch (dev->board) {
488 case CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP:
489 ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */
490 ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
491 ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
492 /* break omitted intentionally */
480 case CX23885_BOARD_DVICO_FUSIONHDTV_5_EXP: 493 case CX23885_BOARD_DVICO_FUSIONHDTV_5_EXP:
481 ts1->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ 494 ts1->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */
482 ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ 495 ts1->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 022aa391937a..51dedb182c99 100644
--- a/drivers/media/video/cx23885/cx23885-dvb.c
+++ b/drivers/media/video/cx23885/cx23885-dvb.c
@@ -164,12 +164,28 @@ static struct s5h1409_config hauppauge_hvr1500q_config = {
164 .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK, 164 .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK,
165}; 165};
166 166
167static struct s5h1409_config dvico_s5h1409_config = {
168 .demod_address = 0x32 >> 1,
169 .output_mode = S5H1409_SERIAL_OUTPUT,
170 .gpio = S5H1409_GPIO_ON,
171 .qam_if = 44000,
172 .inversion = S5H1409_INVERSION_OFF,
173 .status_mode = S5H1409_DEMODLOCKING,
174 .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK,
175};
176
167static struct xc5000_config hauppauge_hvr1500q_tunerconfig = { 177static struct xc5000_config hauppauge_hvr1500q_tunerconfig = {
168 .i2c_address = 0x61, 178 .i2c_address = 0x61,
169 .if_khz = 5380, 179 .if_khz = 5380,
170 .tuner_callback = cx23885_tuner_callback 180 .tuner_callback = cx23885_tuner_callback
171}; 181};
172 182
183static struct xc5000_config dvico_xc5000_tunerconfig = {
184 .i2c_address = 0x64,
185 .if_khz = 5380,
186 .tuner_callback = cx23885_tuner_callback
187};
188
173static struct tda829x_config tda829x_no_probe = { 189static struct tda829x_config tda829x_no_probe = {
174 .probe_tuner = TDA829X_DONT_PROBE, 190 .probe_tuner = TDA829X_DONT_PROBE,
175}; 191};
@@ -453,6 +469,17 @@ static int dvb_register(struct cx23885_tsport *port)
453 fe->ops.tuner_ops.set_config(fe, &ctl); 469 fe->ops.tuner_ops.set_config(fe, &ctl);
454 } 470 }
455 break; 471 break;
472 case CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP:
473 i2c_bus = &dev->i2c_bus[port->nr - 1];
474
475 port->dvb.frontend = dvb_attach(s5h1409_attach,
476 &dvico_s5h1409_config,
477 &i2c_bus->i2c_adap);
478 if (port->dvb.frontend != NULL)
479 dvb_attach(xc5000_attach, port->dvb.frontend,
480 &i2c_bus->i2c_adap,
481 &dvico_xc5000_tunerconfig, i2c_bus);
482 break;
456 default: 483 default:
457 printk("%s: The frontend of your DVB/ATSC card isn't supported yet\n", 484 printk("%s: The frontend of your DVB/ATSC card isn't supported yet\n",
458 dev->name); 485 dev->name);
diff --git a/drivers/media/video/cx23885/cx23885.h b/drivers/media/video/cx23885/cx23885.h
index 32af87f25e7b..00dfdc89d641 100644
--- a/drivers/media/video/cx23885/cx23885.h
+++ b/drivers/media/video/cx23885/cx23885.h
@@ -63,6 +63,7 @@
63#define CX23885_BOARD_HAUPPAUGE_HVR1200 7 63#define CX23885_BOARD_HAUPPAUGE_HVR1200 7
64#define CX23885_BOARD_HAUPPAUGE_HVR1700 8 64#define CX23885_BOARD_HAUPPAUGE_HVR1700 8
65#define CX23885_BOARD_HAUPPAUGE_HVR1400 9 65#define CX23885_BOARD_HAUPPAUGE_HVR1400 9
66#define CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP 10
66 67
67/* Currently unsupported by the driver: PAL/H, NTSC/Kr, SECAM B/G/H/LC */ 68/* Currently unsupported by the driver: PAL/H, NTSC/Kr, SECAM B/G/H/LC */
68#define CX23885_NORMS (\ 69#define CX23885_NORMS (\