Commit 79392737 authored by Darron Broad's avatar Darron Broad Committed by Mauro Carvalho Chehab

V4L/DVB (9918): cx88: advise/acquire clean-up for HVR-1300/3000/4000

This cleans-up the advise/acquire methods.

This has been tested on the hvr-1300/4000 and assumed to be
correct on the hvr-3000.

This update also fixes analogue tuning on the hvr-1300
when in blackbird mode.
Signed-off-by: default avatarDarron Broad <darron@kewl.org>
Cc: Steven Toth <stoth@hauppauge.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 6639f1e0
...@@ -1244,8 +1244,16 @@ static int cx8802_blackbird_advise_acquire(struct cx8802_driver *drv) ...@@ -1244,8 +1244,16 @@ static int cx8802_blackbird_advise_acquire(struct cx8802_driver *drv)
* We're being given access to re-arrange the GPIOs. * We're being given access to re-arrange the GPIOs.
* Take the bus off the cx22702 and put the cx23416 on it. * Take the bus off the cx22702 and put the cx23416 on it.
*/ */
cx_clear(MO_GP0_IO, 0x00000080); /* cx22702 in reset */ /* Toggle reset on cx22702 leaving i2c active */
cx_set(MO_GP0_IO, 0x00000004); /* Disable the cx22702 */ cx_set(MO_GP0_IO, 0x00000080);
udelay(1000);
cx_clear(MO_GP0_IO, 0x00000080);
udelay(50);
cx_set(MO_GP0_IO, 0x00000080);
udelay(1000);
/* tri-state the cx22702 pins */
cx_set(MO_GP0_IO, 0x00000004);
udelay(1000);
break; break;
default: default:
err = -ENODEV; err = -ENODEV;
......
...@@ -1128,40 +1128,44 @@ static int cx8802_dvb_advise_acquire(struct cx8802_driver *drv) ...@@ -1128,40 +1128,44 @@ static int cx8802_dvb_advise_acquire(struct cx8802_driver *drv)
* on the bus. Take the bus from the cx23416 and enable the * on the bus. Take the bus from the cx23416 and enable the
* cx22702 demod * cx22702 demod
*/ */
cx_set(MO_GP0_IO, 0x00000080); /* cx22702 out of reset and enable */ /* Toggle reset on cx22702 leaving i2c active */
cx_set(MO_GP0_IO, 0x00000080);
udelay(1000);
cx_clear(MO_GP0_IO, 0x00000080);
udelay(50);
cx_set(MO_GP0_IO, 0x00000080);
udelay(1000);
/* enable the cx22702 pins */
cx_clear(MO_GP0_IO, 0x00000004); cx_clear(MO_GP0_IO, 0x00000004);
udelay(1000); udelay(1000);
break; break;
case CX88_BOARD_HAUPPAUGE_HVR3000: case CX88_BOARD_HAUPPAUGE_HVR3000:
case CX88_BOARD_HAUPPAUGE_HVR4000: case CX88_BOARD_HAUPPAUGE_HVR4000:
if(core->dvbdev->frontends.active_fe_id == 1) { /* Toggle reset on cx22702 leaving i2c active */
/* DVB-S/S2 Enabled */ cx_set(MO_GP0_IO, 0x00000080);
udelay(1000);
/* Toggle reset on cx22702 leaving i2c active */ cx_clear(MO_GP0_IO, 0x00000080);
cx_write(MO_GP0_IO, (core->board.input[0].gpio0 & 0x0000ff00) | 0x00000080); udelay(50);
udelay(1000); cx_set(MO_GP0_IO, 0x00000080);
cx_clear(MO_GP0_IO, 0x00000080); udelay(1000);
udelay(50); switch (core->dvbdev->frontends.active_fe_id) {
cx_set(MO_GP0_IO, 0x00000080); /* cx22702 out of reset */ case 1: /* DVB-S/S2 Enabled */
cx_set(MO_GP0_IO, 0x00000004); /* tri-state the cx22702 pins */ /* tri-state the cx22702 pins */
udelay(1000); cx_set(MO_GP0_IO, 0x00000004);
/* Take the cx24116/cx24123 out of reset */
cx_write(MO_SRST_IO, 1); /* Take the cx24116/cx24123 out of reset */ cx_write(MO_SRST_IO, 1);
core->dvbdev->ts_gen_cntrl = 0x02; /* Parallel IO */ core->dvbdev->ts_gen_cntrl = 0x02; /* Parallel IO */
} else break;
if (core->dvbdev->frontends.active_fe_id == 2) { case 2: /* DVB-T Enabled */
/* DVB-T Enabled */
/* Put the cx24116/cx24123 into reset */ /* Put the cx24116/cx24123 into reset */
cx_write(MO_SRST_IO, 0); cx_write(MO_SRST_IO, 0);
/* enable the cx22702 pins */
/* cx22702 out of reset and enable it */
cx_set(MO_GP0_IO, 0x00000080);
cx_clear(MO_GP0_IO, 0x00000004); cx_clear(MO_GP0_IO, 0x00000004);
core->dvbdev->ts_gen_cntrl = 0x0c; /* Serial IO */ core->dvbdev->ts_gen_cntrl = 0x0c; /* Serial IO */
udelay(1000); break;
} }
udelay(1000);
break; break;
default: default:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment