aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx88
diff options
context:
space:
mode:
authorChris Pascoe <c.pascoe@itee.uq.edu.au>2008-04-22 13:45:15 -0400
committerMauro Carvalho Chehab <mchehab@infradead.org>2008-04-24 13:07:45 -0400
commit8765561fc88131bbc9a6246010c15b63595ec35e (patch)
tree305c2fe0c181e40ef9311c529c736e98914076e5 /drivers/media/video/cx88
parentb3fb91d20ca111316854a166ff88b0c8c0f2388b (diff)
V4L/DVB (7259): FusionHDTV DVB-T Pro tuning problem fixes
It seems that on this board, the demodulator provides the pullup on the I2C bus, which means that calling i2c_gate_ctrl crashes the bus. Turn this off and the xc3028 can talk OK. Also fix some GPIO related settings that became more clear through working on this. Some changes made by Mauro Chehab to allow merging it with some other xc3028 patches. Signed-off-by: Chris Pascoe <c.pascoe@itee.uq.edu.au> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/cx88')
-rw-r--r--drivers/media/video/cx88/cx88-cards.c16
-rw-r--r--drivers/media/video/cx88/cx88-dvb.c8
2 files changed, 18 insertions, 6 deletions
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c
index 1dc70f27f7f9..1fe6b9da9815 100644
--- a/drivers/media/video/cx88/cx88-cards.c
+++ b/drivers/media/video/cx88/cx88-cards.c
@@ -2038,11 +2038,9 @@ static int cx88_dvico_xc2028_callback(void *ptr, int command, int arg)
2038 2038
2039 switch (command) { 2039 switch (command) {
2040 case XC2028_TUNER_RESET: 2040 case XC2028_TUNER_RESET:
2041 cx_set(MO_GP0_IO, 0x0200); 2041 cx_write(MO_GP0_IO, 0x101000);
2042 cx_clear(MO_GP0_IO, 0x02); 2042 mdelay(5);
2043 mdelay(100); 2043 cx_set(MO_GP0_IO, 0x101010);
2044 cx_set(MO_GP0_IO, 0x02);
2045 mdelay(100);
2046 break; 2044 break;
2047 default: 2045 default:
2048 return -EINVAL; 2046 return -EINVAL;
@@ -2302,6 +2300,13 @@ static void cx88_card_setup(struct cx88_core *core)
2302 cx_write(MO_GP0_IO, 0x000007f8); 2300 cx_write(MO_GP0_IO, 0x000007f8);
2303 cx_write(MO_GP1_IO, 0x00000001); 2301 cx_write(MO_GP1_IO, 0x00000001);
2304 break; 2302 break;
2303 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO:
2304 /* GPIO0:0 is hooked to demod reset */
2305 /* GPIO0:4 is hooked to xc3028 reset */
2306 cx_write(MO_GP0_IO, 0x00111100);
2307 msleep(1);
2308 cx_write(MO_GP0_IO, 0x00111111);
2309 break;
2305 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL: 2310 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL:
2306 /* GPIO0:6 is hooked to FX2 reset pin */ 2311 /* GPIO0:6 is hooked to FX2 reset pin */
2307 cx_set(MO_GP0_IO, 0x00004040); 2312 cx_set(MO_GP0_IO, 0x00004040);
@@ -2312,7 +2317,6 @@ static void cx88_card_setup(struct cx88_core *core)
2312 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1: 2317 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1:
2313 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: 2318 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS:
2314 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID: 2319 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID:
2315 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO:
2316 /* GPIO0:0 is hooked to mt352 reset pin */ 2320 /* GPIO0:0 is hooked to mt352 reset pin */
2317 cx_set(MO_GP0_IO, 0x00000101); 2321 cx_set(MO_GP0_IO, 0x00000101);
2318 cx_clear(MO_GP0_IO, 0x00000001); 2322 cx_clear(MO_GP0_IO, 0x00000001);
diff --git a/drivers/media/video/cx88/cx88-dvb.c b/drivers/media/video/cx88/cx88-dvb.c
index 591037d8d14f..ae2a0f5f0806 100644
--- a/drivers/media/video/cx88/cx88-dvb.c
+++ b/drivers/media/video/cx88/cx88-dvb.c
@@ -588,6 +588,14 @@ static int dvb_register(struct cx8802_dev *dev)
588 dev->dvb.frontend = dvb_attach(mt352_attach, 588 dev->dvb.frontend = dvb_attach(mt352_attach,
589 &dvico_fusionhdtv_mt352_xc3028, 589 &dvico_fusionhdtv_mt352_xc3028,
590 &dev->core->i2c_adap); 590 &dev->core->i2c_adap);
591 /*
592 * On this board, the demod provides the I2C bus pullup.
593 * We must not permit gate_ctrl to be performed, or
594 * the xc3028 cannot communicate on the bus.
595 */
596 if (dev->dvb.frontend)
597 dev->dvb.frontend->ops.i2c_gate_ctrl = NULL;
598
591 attach_xc3028 = 1; 599 attach_xc3028 = 1;
592 break; 600 break;
593 case CX88_BOARD_PCHDTV_HD3000: 601 case CX88_BOARD_PCHDTV_HD3000: