aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorMichael Krufky <mkrufky@m1k.net>2005-07-07 20:58:39 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2005-07-07 21:24:04 -0400
commitf1798495592c1bcd7871abdc1ef2985d65c34224 (patch)
tree3496ce6e2c6318fbd09b5d9cbfcb51e2ebd87cfa /drivers
parent9ac4c158b0090462bc356b934024cf0c5d7c8526 (diff)
[PATCH] v4l: add DVB support for DViCO FusionHDTV3 Gold-Q
Add dvb support in v4l for DViCO FusionHDTV3 Gold-Q using lgdt3302 frontend. Signed-off-by: Mac Michaels <wmichaels1@earthlink.net> Signed-off-by: Michael Krufky <mkrufky@m1k.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/video/cx88/cx88-cards.c1
-rw-r--r--drivers/media/video/cx88/cx88-dvb.c43
-rw-r--r--drivers/media/video/cx88/cx88-i2c.c3
-rw-r--r--drivers/media/video/cx88/cx88-mpeg.c13
4 files changed, 53 insertions, 7 deletions
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c
index f9e4cb19687..75de9cab4db 100644
--- a/drivers/media/video/cx88/cx88-cards.c
+++ b/drivers/media/video/cx88/cx88-cards.c
@@ -485,6 +485,7 @@ struct cx88_board cx88_boards[] = {
485 .vmux = 2, 485 .vmux = 2,
486 .gpio0 = 0x0f00, 486 .gpio0 = 0x0f00,
487 }}, 487 }},
488 .dvb = 1,
488 }, 489 },
489 [CX88_BOARD_HAUPPAUGE_DVB_T1] = { 490 [CX88_BOARD_HAUPPAUGE_DVB_T1] = {
490 .name = "Hauppauge Nova-T DVB-T", 491 .name = "Hauppauge Nova-T DVB-T",
diff --git a/drivers/media/video/cx88/cx88-dvb.c b/drivers/media/video/cx88/cx88-dvb.c
index 82cc1538c10..206c6a0980e 100644
--- a/drivers/media/video/cx88/cx88-dvb.c
+++ b/drivers/media/video/cx88/cx88-dvb.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * $Id: cx88-dvb.c,v 1.36 2005/06/21 06:08:12 mkrufky Exp $ 2 * $Id: cx88-dvb.c,v 1.37 2005/06/28 23:41:47 mkrufky Exp $
3 * 3 *
4 * device driver for Conexant 2388x based TV cards 4 * device driver for Conexant 2388x based TV cards
5 * MPEG Transport Stream (DVB) routines 5 * MPEG Transport Stream (DVB) routines
@@ -30,9 +30,10 @@
30#include <linux/file.h> 30#include <linux/file.h>
31#include <linux/suspend.h> 31#include <linux/suspend.h>
32 32
33/* those two frontends need merging via linuxtv cvs ... */ 33/* these three frontends need merging via linuxtv cvs ... */
34#define HAVE_CX22702 1 34#define HAVE_CX22702 1
35#define HAVE_OR51132 1 35#define HAVE_OR51132 1
36#define HAVE_LGDT3302 1
36 37
37#include "cx88.h" 38#include "cx88.h"
38#include "dvb-pll.h" 39#include "dvb-pll.h"
@@ -44,6 +45,9 @@
44#if HAVE_OR51132 45#if HAVE_OR51132
45# include "or51132.h" 46# include "or51132.h"
46#endif 47#endif
48#if HAVE_LGDT3302
49# include "lgdt3302.h"
50#endif
47 51
48MODULE_DESCRIPTION("driver for cx2388x based DVB cards"); 52MODULE_DESCRIPTION("driver for cx2388x based DVB cards");
49MODULE_AUTHOR("Chris Pascoe <c.pascoe@itee.uq.edu.au>"); 53MODULE_AUTHOR("Chris Pascoe <c.pascoe@itee.uq.edu.au>");
@@ -199,6 +203,25 @@ static struct or51132_config pchdtv_hd3000 = {
199}; 203};
200#endif 204#endif
201 205
206#if HAVE_LGDT3302
207static int lgdt3302_set_ts_param(struct dvb_frontend* fe, int is_punctured)
208{
209 struct cx8802_dev *dev= fe->dvb->priv;
210 if (is_punctured)
211 dev->ts_gen_cntrl |= 0x04;
212 else
213 dev->ts_gen_cntrl &= ~0x04;
214 return 0;
215}
216
217static struct lgdt3302_config fusionhdtv_3_gold_q = {
218 .demod_address = 0x0e,
219 .pll_address = 0x61,
220 .pll_desc = &dvb_pll_microtune_4042,
221 .set_ts_params = lgdt3302_set_ts_param,
222};
223#endif
224
202static int dvb_register(struct cx8802_dev *dev) 225static int dvb_register(struct cx8802_dev *dev)
203{ 226{
204 /* init struct videobuf_dvb */ 227 /* init struct videobuf_dvb */
@@ -243,6 +266,22 @@ static int dvb_register(struct cx8802_dev *dev)
243 &dev->core->i2c_adap); 266 &dev->core->i2c_adap);
244 break; 267 break;
245#endif 268#endif
269#if HAVE_LGDT3302
270 case CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q:
271 dev->ts_gen_cntrl = 0x08;
272 {
273 /* Do a hardware reset of chip before using it. */
274 struct cx88_core *core = dev->core;
275
276 cx_clear(MO_GP0_IO, 1);
277 mdelay(100);
278 cx_set(MO_GP0_IO, 9); // ANT connector too FIXME
279 mdelay(200);
280 dev->dvb.frontend = lgdt3302_attach(&fusionhdtv_3_gold_q,
281 &dev->core->i2c_adap);
282 }
283 break;
284#endif
246 default: 285 default:
247 printk("%s: The frontend of your DVB/ATSC card isn't supported yet\n", 286 printk("%s: The frontend of your DVB/ATSC card isn't supported yet\n",
248 dev->core->name); 287 dev->core->name);
diff --git a/drivers/media/video/cx88/cx88-i2c.c b/drivers/media/video/cx88/cx88-i2c.c
index e20adefcfc6..b5342234b30 100644
--- a/drivers/media/video/cx88/cx88-i2c.c
+++ b/drivers/media/video/cx88/cx88-i2c.c
@@ -1,5 +1,5 @@
1/* 1/*
2 $Id: cx88-i2c.c,v 1.23 2005/06/12 04:19:19 mchehab Exp $ 2 $Id: cx88-i2c.c,v 1.24 2005/06/17 18:46:23 mkrufky Exp $
3 3
4 cx88-i2c.c -- all the i2c code is here 4 cx88-i2c.c -- all the i2c code is here
5 5
@@ -157,6 +157,7 @@ static struct i2c_client cx8800_i2c_client_template = {
157}; 157};
158 158
159static char *i2c_devs[128] = { 159static char *i2c_devs[128] = {
160 [ 0x1c >> 1 ] = "lgdt3302",
160 [ 0x86 >> 1 ] = "tda9887/cx22702", 161 [ 0x86 >> 1 ] = "tda9887/cx22702",
161 [ 0xa0 >> 1 ] = "eeprom", 162 [ 0xa0 >> 1 ] = "eeprom",
162 [ 0xc0 >> 1 ] = "tuner (analog)", 163 [ 0xc0 >> 1 ] = "tuner (analog)",
diff --git a/drivers/media/video/cx88/cx88-mpeg.c b/drivers/media/video/cx88/cx88-mpeg.c
index 9ade2ae91e9..c5f4c595239 100644
--- a/drivers/media/video/cx88/cx88-mpeg.c
+++ b/drivers/media/video/cx88/cx88-mpeg.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * $Id: cx88-mpeg.c,v 1.26 2005/06/03 13:31:51 mchehab Exp $ 2 * $Id: cx88-mpeg.c,v 1.28 2005/06/20 03:36:00 mkrufky Exp $
3 * 3 *
4 * Support for the mpeg transport stream transfers 4 * Support for the mpeg transport stream transfers
5 * PCI function #2 of the cx2388x. 5 * PCI function #2 of the cx2388x.
@@ -70,11 +70,16 @@ static int cx8802_start_dma(struct cx8802_dev *dev,
70 70
71 if (cx88_boards[core->board].dvb) { 71 if (cx88_boards[core->board].dvb) {
72 /* negedge driven & software reset */ 72 /* negedge driven & software reset */
73 cx_write(TS_GEN_CNTRL, 0x40); 73 cx_write(TS_GEN_CNTRL, 0x0040 | dev->ts_gen_cntrl);
74 udelay(100); 74 udelay(100);
75 cx_write(MO_PINMUX_IO, 0x00); 75 cx_write(MO_PINMUX_IO, 0x00);
76 cx_write(TS_HW_SOP_CNTRL,47<<16|188<<4|0x00); 76 if (core->board == CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q) {
77 cx_write(TS_SOP_STAT,0x00); 77 cx_write(TS_HW_SOP_CNTRL,0x47<<16 | 188<<4 | 0x00);
78 cx_write(TS_SOP_STAT, 0<<16 | 0<<14 | 1<<13 | 0<<12);
79 } else {
80 cx_write(TS_HW_SOP_CNTRL,47<<16|188<<4|0x00);
81 cx_write(TS_SOP_STAT,0x00);
82 }
78 cx_write(TS_GEN_CNTRL, dev->ts_gen_cntrl); 83 cx_write(TS_GEN_CNTRL, dev->ts_gen_cntrl);
79 udelay(100); 84 udelay(100);
80 } 85 }