V4L/DVB (9023): cx88: HVR3000 / 4000 GPIO related changes
authorSteven Toth <stoth@linuxtv.org>
Mon, 22 Sep 2008 04:48:13 +0000 (01:48 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sun, 12 Oct 2008 11:37:07 +0000 (09:37 -0200)
Patch by Darron Broad.

Signed-off-by: Steven Toth <stoth@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/cx88/cx88-cards.c

index a0e6156bc20fb9f06f29f6485c765068deec8211..0203c7579a327d3ec8601cb0be23844ae3cf25a3 100644 (file)
@@ -1349,27 +1349,30 @@ static const struct cx88_board cx88_boards[] = {
                .radio_addr     = ADDR_UNSET,
                .tda9887_conf   = TDA9887_PRESENT,
                .audio_chip     = V4L2_IDENT_WM8775,
+               /*
+                * gpio0 as reported by Mike Crash <mike AT mikecrash.com>
+                */
                .input          = {{
                        .type   = CX88_VMUX_TELEVISION,
                        .vmux   = 0,
-                       .gpio0  = 0xe780,
+                       .gpio0  = 0xef88,
                        .audioroute = 1,
                },{
                        .type   = CX88_VMUX_COMPOSITE1,
                        .vmux   = 1,
-                       .gpio0  = 0xe780,
+                       .gpio0  = 0xef88,
                        .audioroute = 2,
                },{
                        .type   = CX88_VMUX_SVIDEO,
                        .vmux   = 2,
-                       .gpio0  = 0xe780,
+                       .gpio0  = 0xef88,
                        .audioroute = 2,
                }},
                /* fixme: Add radio support */
                .mpeg           = CX88_MPEG_DVB | CX88_MPEG_BLACKBIRD,
                .radio = {
                        .type   = CX88_RADIO,
-                       .gpio0  = 0xe780,
+                       .gpio0  = 0xef88,
                },
        },
        [CX88_BOARD_ADSTECH_PTV_390] = {
@@ -1680,6 +1683,26 @@ static const struct cx88_board cx88_boards[] = {
                 * S-Video      0xc4bf  0xc4bb
                 * Composite1   0xc4ff  0xc4fb
                 * S-Video1     0xc4ff  0xc4fb
+                *
+                * BIT  VALUE   FUNCTION GP{x}_IO
+                * 0    1       I:?
+                * 1    1       I:?
+                * 2    1       O:DVB-T DEMOD ENABLE LOW/ANALOG DEMOD ENABLE HIGH
+                * 3    1       I:?
+                * 4    1       I:?
+                * 5    1       I:?
+                * 6    0       O:INPUT SELECTOR 0=INTERNAL 1=EXPANSION
+                * 7    1       O:DVB-T DEMOD RESET LOW
+                *
+                * BIT  VALUE   FUNCTION GP{x}_OE
+                * 8    0       I
+                * 9    0       I
+                * a    1       O
+                * b    0       I
+                * c    0       I
+                * d    0       I
+                * e    1       O
+                * f    1       O
                 */
                .input          = {{
                        .type   = CX88_VMUX_TELEVISION,
@@ -2512,13 +2535,18 @@ static void cx88_card_setup_pre_i2c(struct cx88_core *core)
 {
        switch (core->boardnr) {
        case CX88_BOARD_HAUPPAUGE_HVR1300:
-               /* Bring the 702 demod up before i2c scanning/attach or devices are hidden */
-               /* We leave here with the 702 on the bus */
-               cx_write(MO_GP0_IO, 0x0000e780);
+               /*
+                * Bring the 702 demod up before i2c scanning/attach or devices are hidden
+                * We leave here with the 702 on the bus
+                *
+                * "reset the IR receiver on GPIO[3]"
+                * Reported by Mike Crash <mike AT mikecrash.com>
+                */
+               cx_write(MO_GP0_IO, 0x0000ef88);
                udelay(1000);
-               cx_clear(MO_GP0_IO, 0x00000080);
+               cx_clear(MO_GP0_IO, 0x00000088);
                udelay(50);
-               cx_set(MO_GP0_IO, 0x00000080); /* 702 out of reset */
+               cx_set(MO_GP0_IO, 0x00000088); /* 702 out of reset */
                udelay(1000);
                break;
 
@@ -2531,15 +2559,18 @@ static void cx88_card_setup_pre_i2c(struct cx88_core *core)
                msleep(10);
                break;
 
-        case CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD:
+       case CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD:
                /* Enable the xc5000 tuner */
                cx_set(MO_GP0_IO, 0x00001010);
                break;
+
+       case CX88_BOARD_HAUPPAUGE_HVR3000:
        case CX88_BOARD_HAUPPAUGE_HVR4000:
        case CX88_BOARD_HAUPPAUGE_HVR4000LITE:
-               /* Init GPIO to allow tuner to attach */
-               cx_write(MO_GP0_IO, 0x0000c4bf);
+               /* Init GPIO */
+               cx_write(MO_GP0_IO, core->board.input[0].gpio0);
                udelay(1000);
+               break;
        }
 }