提交 8765561f 编写于 作者: C Chris Pascoe 提交者: Mauro Carvalho Chehab

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: NChris Pascoe <c.pascoe@itee.uq.edu.au>
Signed-off-by: NMauro Carvalho Chehab <mchehab@infradead.org>
上级 b3fb91d2
...@@ -2038,11 +2038,9 @@ static int cx88_dvico_xc2028_callback(void *ptr, int command, int arg) ...@@ -2038,11 +2038,9 @@ static int cx88_dvico_xc2028_callback(void *ptr, int command, int arg)
switch (command) { switch (command) {
case XC2028_TUNER_RESET: case XC2028_TUNER_RESET:
cx_set(MO_GP0_IO, 0x0200); cx_write(MO_GP0_IO, 0x101000);
cx_clear(MO_GP0_IO, 0x02); mdelay(5);
mdelay(100); cx_set(MO_GP0_IO, 0x101010);
cx_set(MO_GP0_IO, 0x02);
mdelay(100);
break; break;
default: default:
return -EINVAL; return -EINVAL;
...@@ -2302,6 +2300,13 @@ static void cx88_card_setup(struct cx88_core *core) ...@@ -2302,6 +2300,13 @@ static void cx88_card_setup(struct cx88_core *core)
cx_write(MO_GP0_IO, 0x000007f8); cx_write(MO_GP0_IO, 0x000007f8);
cx_write(MO_GP1_IO, 0x00000001); cx_write(MO_GP1_IO, 0x00000001);
break; break;
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO:
/* GPIO0:0 is hooked to demod reset */
/* GPIO0:4 is hooked to xc3028 reset */
cx_write(MO_GP0_IO, 0x00111100);
msleep(1);
cx_write(MO_GP0_IO, 0x00111111);
break;
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL: case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL:
/* GPIO0:6 is hooked to FX2 reset pin */ /* GPIO0:6 is hooked to FX2 reset pin */
cx_set(MO_GP0_IO, 0x00004040); cx_set(MO_GP0_IO, 0x00004040);
...@@ -2312,7 +2317,6 @@ static void cx88_card_setup(struct cx88_core *core) ...@@ -2312,7 +2317,6 @@ static void cx88_card_setup(struct cx88_core *core)
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1: case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1:
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS:
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID: case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID:
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO:
/* GPIO0:0 is hooked to mt352 reset pin */ /* GPIO0:0 is hooked to mt352 reset pin */
cx_set(MO_GP0_IO, 0x00000101); cx_set(MO_GP0_IO, 0x00000101);
cx_clear(MO_GP0_IO, 0x00000001); cx_clear(MO_GP0_IO, 0x00000001);
......
...@@ -588,6 +588,14 @@ static int dvb_register(struct cx8802_dev *dev) ...@@ -588,6 +588,14 @@ static int dvb_register(struct cx8802_dev *dev)
dev->dvb.frontend = dvb_attach(mt352_attach, dev->dvb.frontend = dvb_attach(mt352_attach,
&dvico_fusionhdtv_mt352_xc3028, &dvico_fusionhdtv_mt352_xc3028,
&dev->core->i2c_adap); &dev->core->i2c_adap);
/*
* On this board, the demod provides the I2C bus pullup.
* We must not permit gate_ctrl to be performed, or
* the xc3028 cannot communicate on the bus.
*/
if (dev->dvb.frontend)
dev->dvb.frontend->ops.i2c_gate_ctrl = NULL;
attach_xc3028 = 1; attach_xc3028 = 1;
break; break;
case CX88_BOARD_PCHDTV_HD3000: case CX88_BOARD_PCHDTV_HD3000:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册