]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/media/video/cx88/cx88-cards.c
V4L/DVB (10201): Fixes cx88 compilation bug
[linux-2.6-omap-h63xx.git] / drivers / media / video / cx88 / cx88-cards.c
index 5da04e811ca20b3941b086e73566c91d081d27e6..733ede34f93a43151db923d962e51cc225b0a0eb 100644 (file)
@@ -1237,7 +1237,6 @@ static const struct cx88_board cx88_boards[] = {
                },
        },
        [CX88_BOARD_WINFAST_DTV2000H] = {
-               /* video inputs and radio still in testing */
                .name           = "WinFast DTV2000 H",
                .tuner_type     = TUNER_PHILIPS_FMD1216ME_MK3,
                .radio_type     = UNSET,
@@ -1251,7 +1250,35 @@ static const struct cx88_board cx88_boards[] = {
                        .gpio1  = 0x00008203,
                        .gpio2  = 0x00017304,
                        .gpio3  = 0x02000000,
+               }, {
+                       .type   = CX88_VMUX_COMPOSITE1,
+                       .vmux   = 1,
+                       .gpio0  = 0x0001d701,
+                       .gpio1  = 0x0000b207,
+                       .gpio2  = 0x0001d701,
+                       .gpio3  = 0x02000000,
+               }, {
+                       .type   = CX88_VMUX_COMPOSITE2,
+                       .vmux   = 2,
+                       .gpio0  = 0x0001d503,
+                       .gpio1  = 0x0000b207,
+                       .gpio2  = 0x0001d503,
+                       .gpio3  = 0x02000000,
+               }, {
+                       .type   = CX88_VMUX_SVIDEO,
+                       .vmux   = 3,
+                       .gpio0  = 0x0001d701,
+                       .gpio1  = 0x0000b207,
+                       .gpio2  = 0x0001d701,
+                       .gpio3  = 0x02000000,
                }},
+               .radio = {
+                        .type  = CX88_RADIO,
+                        .gpio0 = 0x00015702,
+                        .gpio1 = 0x0000f207,
+                        .gpio2 = 0x00015702,
+                        .gpio3 = 0x02000000,
+               },
                .mpeg           = CX88_MPEG_DVB,
        },
        [CX88_BOARD_GENIATECH_DVBS] = {
@@ -1270,27 +1297,40 @@ static const struct cx88_board cx88_boards[] = {
                .mpeg           = CX88_MPEG_DVB,
        },
        [CX88_BOARD_HAUPPAUGE_HVR3000] = {
-               /* FIXME: Add dvb & radio support */
                .name           = "Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T",
                .tuner_type     = TUNER_PHILIPS_FMD1216ME_MK3,
                .radio_type     = UNSET,
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
                .tda9887_conf   = TDA9887_PRESENT,
+               .audio_chip     = V4L2_IDENT_WM8775,
                .input          = {{
                        .type   = CX88_VMUX_TELEVISION,
                        .vmux   = 0,
                        .gpio0  = 0x84bf,
+                       /* 1: TV Audio / FM Mono */
+                       .audioroute = 1,
                },{
                        .type   = CX88_VMUX_COMPOSITE1,
                        .vmux   = 1,
                        .gpio0  = 0x84bf,
+                       /* 2: Line-In */
+                       .audioroute = 2,
                },{
                        .type   = CX88_VMUX_SVIDEO,
                        .vmux   = 2,
                        .gpio0  = 0x84bf,
+                       /* 2: Line-In */
+                       .audioroute = 2,
                }},
+               .radio = {
+                       .type   = CX88_RADIO,
+                       .gpio0  = 0x84bf,
+                       /* 4: FM Stereo (untested) */
+                       .audioroute = 8,
+               },
                .mpeg           = CX88_MPEG_DVB,
+               .num_frontends  = 2,
        },
        [CX88_BOARD_NORWOOD_MICRO] = {
                .name           = "Norwood Micro TV Tuner",
@@ -1356,23 +1396,27 @@ static const struct cx88_board cx88_boards[] = {
                        .type   = CX88_VMUX_TELEVISION,
                        .vmux   = 0,
                        .gpio0  = 0xef88,
+                       /* 1: TV Audio / FM Mono */
                        .audioroute = 1,
                },{
                        .type   = CX88_VMUX_COMPOSITE1,
                        .vmux   = 1,
                        .gpio0  = 0xef88,
+                       /* 2: Line-In */
                        .audioroute = 2,
                },{
                        .type   = CX88_VMUX_SVIDEO,
                        .vmux   = 2,
                        .gpio0  = 0xef88,
+                       /* 2: Line-In */
                        .audioroute = 2,
                }},
-               /* fixme: Add radio support */
                .mpeg           = CX88_MPEG_DVB | CX88_MPEG_BLACKBIRD,
                .radio = {
                        .type   = CX88_RADIO,
                        .gpio0  = 0xef88,
+                       /* 4: FM Stereo (untested) */
+                       .audioroute = 8,
                },
        },
        [CX88_BOARD_ADSTECH_PTV_390] = {
@@ -1716,6 +1760,7 @@ static const struct cx88_board cx88_boards[] = {
                .tuner_addr     = ADDR_UNSET,
                .radio_addr     = ADDR_UNSET,
                .tda9887_conf   = TDA9887_PRESENT,
+               .audio_chip     = V4L2_IDENT_WM8775,
                /*
                 * GPIO0 (WINTV2000)
                 *
@@ -1729,7 +1774,7 @@ static const struct cx88_board cx88_boards[] = {
                 * BIT  VALUE   FUNCTION GP{x}_IO
                 * 0    1       I:?
                 * 1    1       I:?
-                * 2    1       O:DVB-T DEMOD ENABLE LOW/ANALOG DEMOD ENABLE HIGH
+                * 2    1       O:MPEG PORT 0=DVB-T 1=DVB-S
                 * 3    1       I:?
                 * 4    1       I:?
                 * 5    1       I:?
@@ -1745,22 +1790,41 @@ static const struct cx88_board cx88_boards[] = {
                 * d    0       I
                 * e    1       O
                 * f    1       O
+                *
+                * WM8775 ADC
+                *
+                * 1: TV Audio / FM Mono
+                * 2: Line-In
+                * 3: Line-In Expansion
+                * 4: FM Stereo
                 */
                .input          = {{
                        .type   = CX88_VMUX_TELEVISION,
                        .vmux   = 0,
                        .gpio0  = 0xc4bf,
+                       /* 1: TV Audio / FM Mono */
+                       .audioroute = 1,
                }, {
                        .type   = CX88_VMUX_COMPOSITE1,
                        .vmux   = 1,
                        .gpio0  = 0xc4bf,
+                       /* 2: Line-In */
+                       .audioroute = 2,
                }, {
                        .type   = CX88_VMUX_SVIDEO,
                        .vmux   = 2,
                        .gpio0  = 0xc4bf,
+                       /* 2: Line-In */
+                       .audioroute = 2,
                } },
-               /* fixme: Add radio support */
+               .radio = {
+                       .type   = CX88_RADIO,
+                       .gpio0  = 0xc4bf,
+                       /* 4: FM Stereo */
+                       .audioroute = 8,
+               },
                .mpeg           = CX88_MPEG_DVB,
+               .num_frontends  = 2,
        },
        [CX88_BOARD_HAUPPAUGE_HVR4000LITE] = {
                .name           = "Hauppauge WinTV-HVR4000(Lite) DVB-S/S2",
@@ -1810,6 +1874,18 @@ static const struct cx88_board cx88_boards[] = {
                } },
                .mpeg           = CX88_MPEG_DVB,
        },
+       [CX88_BOARD_TBS_8910] = {
+               .name           = "TBS 8910 DVB-S",
+               .tuner_type     = UNSET,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               .input          = {{
+                       .type   = CX88_VMUX_DVB,
+                       .vmux   = 0,
+               } },
+               .mpeg           = CX88_MPEG_DVB,
+       },
        [CX88_BOARD_TBS_8920] = {
                .name           = "TBS 8920 DVB-S/S2",
                .tuner_type     = TUNER_ABSENT,
@@ -1822,6 +1898,18 @@ static const struct cx88_board cx88_boards[] = {
                } },
                .mpeg           = CX88_MPEG_DVB,
        },
+       [CX88_BOARD_PROF_6200] = {
+               .name           = "Prof 6200 DVB-S",
+               .tuner_type     = UNSET,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               .input          = {{
+                       .type   = CX88_VMUX_DVB,
+                       .vmux   = 0,
+               } },
+               .mpeg           = CX88_MPEG_DVB,
+       },
        [CX88_BOARD_PROF_7300] = {
                .name           = "PROF 7300 DVB-S/S2",
                .tuner_type     = UNSET,
@@ -1834,6 +1922,18 @@ static const struct cx88_board cx88_boards[] = {
                } },
                .mpeg           = CX88_MPEG_DVB,
        },
+       [CX88_BOARD_SATTRADE_ST4200] = {
+               .name           = "SATTRADE ST4200 DVB-S/S2",
+               .tuner_type     = UNSET,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               .input          = {{
+                       .type   = CX88_VMUX_DVB,
+                       .vmux   = 0,
+               } },
+               .mpeg           = CX88_MPEG_DVB,
+       },
 };
 
 /* ------------------------------------------------------------------ */
@@ -1860,7 +1960,11 @@ static const struct cx88_subid cx88_subids[] = {
                .subvendor = PCI_VENDOR_ID_ATI,
                .subdevice = 0x00f8,
                .card      = CX88_BOARD_ATI_WONDER_PRO,
-       },{
+       }, {
+               .subvendor = PCI_VENDOR_ID_ATI,
+               .subdevice = 0x00f9,
+               .card      = CX88_BOARD_ATI_WONDER_PRO,
+       }, {
                .subvendor = 0x107d,
                .subdevice = 0x6611,
                .card      = CX88_BOARD_WINFAST2000XP_EXPERT,
@@ -2219,14 +2323,26 @@ static const struct cx88_subid cx88_subids[] = {
                .subvendor = 0xA044,
                .subdevice = 0x2011,
                .card      = CX88_BOARD_OMICOM_SS4_PCI,
+       }, {
+               .subvendor = 0x8910,
+               .subdevice = 0x8888,
+               .card      = CX88_BOARD_TBS_8910,
        }, {
                .subvendor = 0x8920,
                .subdevice = 0x8888,
                .card      = CX88_BOARD_TBS_8920,
+       }, {
+               .subvendor = 0xb022,
+               .subdevice = 0x3022,
+               .card      = CX88_BOARD_PROF_6200,
        }, {
                .subvendor = 0xB033,
                .subdevice = 0x3033,
                .card      = CX88_BOARD_PROF_7300,
+       }, {
+               .subvendor = 0xb200,
+               .subdevice = 0x4200,
+               .card      = CX88_BOARD_SATTRADE_ST4200,
        },
 };
 
@@ -2662,10 +2778,13 @@ static void cx88_card_setup_pre_i2c(struct cx88_core *core)
 
        case CX88_BOARD_HAUPPAUGE_HVR3000:
        case CX88_BOARD_HAUPPAUGE_HVR4000:
-       case CX88_BOARD_HAUPPAUGE_HVR4000LITE:
                /* Init GPIO */
                cx_write(MO_GP0_IO, core->board.input[0].gpio0);
                udelay(1000);
+               cx_clear(MO_GP0_IO, 0x00000080);
+               udelay(50);
+               cx_set(MO_GP0_IO, 0x00000080); /* 702 out of reset */
+               udelay(1000);
                break;
        }
 }
@@ -2834,8 +2953,11 @@ static void cx88_card_setup(struct cx88_core *core)
        case  CX88_BOARD_TEVII_S420:
        case  CX88_BOARD_TEVII_S460:
        case  CX88_BOARD_OMICOM_SS4_PCI:
+       case  CX88_BOARD_TBS_8910:
        case  CX88_BOARD_TBS_8920:
+       case  CX88_BOARD_PROF_6200:
        case  CX88_BOARD_PROF_7300:
+       case  CX88_BOARD_SATTRADE_ST4200:
                cx_write(MO_SRST_IO, 0);
                msleep(100);
                cx_write(MO_SRST_IO, 1);
@@ -3004,10 +3126,14 @@ struct cx88_core *cx88_core_create(struct pci_dev *pci, int nr)
 
        memcpy(&core->board, &cx88_boards[core->boardnr], sizeof(core->board));
 
-       info_printk(core, "subsystem: %04x:%04x, board: %s [card=%d,%s]\n",
+       if (!core->board.num_frontends && (core->board.mpeg & CX88_MPEG_DVB))
+               core->board.num_frontends = 1;
+
+       info_printk(core, "subsystem: %04x:%04x, board: %s [card=%d,%s], frontend(s): %d\n",
                pci->subsystem_vendor, pci->subsystem_device, core->board.name,
                core->boardnr, card[core->nr] == core->boardnr ?
-               "insmod option" : "autodetected");
+               "insmod option" : "autodetected",
+               core->board.num_frontends);
 
        if (tuner[core->nr] != UNSET)
                core->board.tuner_type = tuner[core->nr];