diff options
-rw-r--r-- | drivers/media/video/cx88/cx88-blackbird.c | 18 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-cards.c | 27 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-core.c | 45 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-dvb.c | 10 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-i2c.c | 24 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-input.c | 11 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-mpeg.c | 22 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-tvaudio.c | 4 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-video.c | 63 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-vp3054-i2c.c | 4 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88.h | 13 |
11 files changed, 112 insertions, 129 deletions
diff --git a/drivers/media/video/cx88/cx88-blackbird.c b/drivers/media/video/cx88/cx88-blackbird.c index f2fcdb92ecce..74e3eb945751 100644 --- a/drivers/media/video/cx88/cx88-blackbird.c +++ b/drivers/media/video/cx88/cx88-blackbird.c | |||
@@ -734,14 +734,14 @@ static int vidioc_querycap (struct file *file, void *priv, | |||
734 | struct cx88_core *core = dev->core; | 734 | struct cx88_core *core = dev->core; |
735 | 735 | ||
736 | strcpy(cap->driver, "cx88_blackbird"); | 736 | strcpy(cap->driver, "cx88_blackbird"); |
737 | strlcpy(cap->card, cx88_boards[core->board].name,sizeof(cap->card)); | 737 | strlcpy(cap->card, core->board.name, sizeof(cap->card)); |
738 | sprintf(cap->bus_info,"PCI:%s",pci_name(dev->pci)); | 738 | sprintf(cap->bus_info,"PCI:%s",pci_name(dev->pci)); |
739 | cap->version = CX88_VERSION_CODE; | 739 | cap->version = CX88_VERSION_CODE; |
740 | cap->capabilities = | 740 | cap->capabilities = |
741 | V4L2_CAP_VIDEO_CAPTURE | | 741 | V4L2_CAP_VIDEO_CAPTURE | |
742 | V4L2_CAP_READWRITE | | 742 | V4L2_CAP_READWRITE | |
743 | V4L2_CAP_STREAMING; | 743 | V4L2_CAP_STREAMING; |
744 | if (UNSET != core->tuner_type) | 744 | if (UNSET != core->board.tuner_type) |
745 | cap->capabilities |= V4L2_CAP_TUNER; | 745 | cap->capabilities |= V4L2_CAP_TUNER; |
746 | return 0; | 746 | return 0; |
747 | } | 747 | } |
@@ -990,7 +990,7 @@ static int vidioc_g_frequency (struct file *file, void *priv, | |||
990 | struct cx8802_fh *fh = priv; | 990 | struct cx8802_fh *fh = priv; |
991 | struct cx88_core *core = fh->dev->core; | 991 | struct cx88_core *core = fh->dev->core; |
992 | 992 | ||
993 | if (unlikely(UNSET == core->tuner_type)) | 993 | if (unlikely(UNSET == core->board.tuner_type)) |
994 | return -EINVAL; | 994 | return -EINVAL; |
995 | 995 | ||
996 | f->type = V4L2_TUNER_ANALOG_TV; | 996 | f->type = V4L2_TUNER_ANALOG_TV; |
@@ -1028,7 +1028,7 @@ static int vidioc_g_tuner (struct file *file, void *priv, | |||
1028 | struct cx88_core *core = ((struct cx8802_fh *)priv)->dev->core; | 1028 | struct cx88_core *core = ((struct cx8802_fh *)priv)->dev->core; |
1029 | u32 reg; | 1029 | u32 reg; |
1030 | 1030 | ||
1031 | if (unlikely(UNSET == core->tuner_type)) | 1031 | if (unlikely(UNSET == core->board.tuner_type)) |
1032 | return -EINVAL; | 1032 | return -EINVAL; |
1033 | if (0 != t->index) | 1033 | if (0 != t->index) |
1034 | return -EINVAL; | 1034 | return -EINVAL; |
@@ -1049,7 +1049,7 @@ static int vidioc_s_tuner (struct file *file, void *priv, | |||
1049 | { | 1049 | { |
1050 | struct cx88_core *core = ((struct cx8802_fh *)priv)->dev->core; | 1050 | struct cx88_core *core = ((struct cx8802_fh *)priv)->dev->core; |
1051 | 1051 | ||
1052 | if (UNSET == core->tuner_type) | 1052 | if (UNSET == core->board.tuner_type) |
1053 | return -EINVAL; | 1053 | return -EINVAL; |
1054 | if (0 != t->index) | 1054 | if (0 != t->index) |
1055 | return -EINVAL; | 1055 | return -EINVAL; |
@@ -1246,7 +1246,7 @@ static int cx8802_blackbird_advise_acquire(struct cx8802_driver *drv) | |||
1246 | struct cx88_core *core = drv->core; | 1246 | struct cx88_core *core = drv->core; |
1247 | int err = 0; | 1247 | int err = 0; |
1248 | 1248 | ||
1249 | switch (core->board) { | 1249 | switch (core->boardnr) { |
1250 | case CX88_BOARD_HAUPPAUGE_HVR1300: | 1250 | case CX88_BOARD_HAUPPAUGE_HVR1300: |
1251 | /* By default, core setup will leave the cx22702 out of reset, on the bus. | 1251 | /* By default, core setup will leave the cx22702 out of reset, on the bus. |
1252 | * We left the hardware on power up with the cx22702 active. | 1252 | * We left the hardware on power up with the cx22702 active. |
@@ -1268,7 +1268,7 @@ static int cx8802_blackbird_advise_release(struct cx8802_driver *drv) | |||
1268 | struct cx88_core *core = drv->core; | 1268 | struct cx88_core *core = drv->core; |
1269 | int err = 0; | 1269 | int err = 0; |
1270 | 1270 | ||
1271 | switch (core->board) { | 1271 | switch (core->boardnr) { |
1272 | case CX88_BOARD_HAUPPAUGE_HVR1300: | 1272 | case CX88_BOARD_HAUPPAUGE_HVR1300: |
1273 | /* Exit leaving the cx23416 on the bus */ | 1273 | /* Exit leaving the cx23416 on the bus */ |
1274 | break; | 1274 | break; |
@@ -1316,13 +1316,13 @@ static int cx8802_blackbird_probe(struct cx8802_driver *drv) | |||
1316 | 1316 | ||
1317 | dprintk( 1, "%s\n", __FUNCTION__); | 1317 | dprintk( 1, "%s\n", __FUNCTION__); |
1318 | dprintk( 1, " ->being probed by Card=%d Name=%s, PCI %02x:%02x\n", | 1318 | dprintk( 1, " ->being probed by Card=%d Name=%s, PCI %02x:%02x\n", |
1319 | core->board, | 1319 | core->boardnr, |
1320 | core->name, | 1320 | core->name, |
1321 | core->pci_bus, | 1321 | core->pci_bus, |
1322 | core->pci_slot); | 1322 | core->pci_slot); |
1323 | 1323 | ||
1324 | err = -ENODEV; | 1324 | err = -ENODEV; |
1325 | if (!(cx88_boards[core->board].mpeg & CX88_MPEG_BLACKBIRD)) | 1325 | if (!(core->board.mpeg & CX88_MPEG_BLACKBIRD)) |
1326 | goto fail_core; | 1326 | goto fail_core; |
1327 | 1327 | ||
1328 | dev->width = 720; | 1328 | dev->width = 720; |
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c index 1fc71a78b926..8be90ad4e910 100644 --- a/drivers/media/video/cx88/cx88-cards.c +++ b/drivers/media/video/cx88/cx88-cards.c | |||
@@ -30,7 +30,7 @@ | |||
30 | /* ------------------------------------------------------------------ */ | 30 | /* ------------------------------------------------------------------ */ |
31 | /* board config info */ | 31 | /* board config info */ |
32 | 32 | ||
33 | struct cx88_board cx88_boards[] = { | 33 | const struct cx88_board cx88_boards[] = { |
34 | [CX88_BOARD_UNKNOWN] = { | 34 | [CX88_BOARD_UNKNOWN] = { |
35 | .name = "UNKNOWN/GENERIC", | 35 | .name = "UNKNOWN/GENERIC", |
36 | .tuner_type = UNSET, | 36 | .tuner_type = UNSET, |
@@ -1687,12 +1687,12 @@ static void leadtek_eeprom(struct cx88_core *core, u8 *eeprom_data) | |||
1687 | return; | 1687 | return; |
1688 | } | 1688 | } |
1689 | 1689 | ||
1690 | core->has_radio = 1; | 1690 | core->board.tuner_type = (eeprom_data[6] == 0x13) ? |
1691 | core->tuner_type = (eeprom_data[6] == 0x13) ? 43 : 38; | 1691 | TUNER_PHILIPS_FM1236_MK3 : TUNER_PHILIPS_FM1216ME_MK3; |
1692 | 1692 | ||
1693 | printk(KERN_INFO "%s: Leadtek Winfast 2000XP Expert config: " | 1693 | printk(KERN_INFO "%s: Leadtek Winfast 2000XP Expert config: " |
1694 | "tuner=%d, eeprom[0]=0x%02x\n", | 1694 | "tuner=%d, eeprom[0]=0x%02x\n", |
1695 | core->name, core->tuner_type, eeprom_data[0]); | 1695 | core->name, core->board.tuner_type, eeprom_data[0]); |
1696 | } | 1696 | } |
1697 | 1697 | ||
1698 | static void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data) | 1698 | static void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data) |
@@ -1700,9 +1700,9 @@ static void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data) | |||
1700 | struct tveeprom tv; | 1700 | struct tveeprom tv; |
1701 | 1701 | ||
1702 | tveeprom_hauppauge_analog(&core->i2c_client, &tv, eeprom_data); | 1702 | tveeprom_hauppauge_analog(&core->i2c_client, &tv, eeprom_data); |
1703 | core->tuner_type = tv.tuner_type; | 1703 | core->board.tuner_type = tv.tuner_type; |
1704 | core->tuner_formats = tv.tuner_formats; | 1704 | core->tuner_formats = tv.tuner_formats; |
1705 | core->has_radio = tv.has_radio; | 1705 | core->board.radio.type = tv.has_radio ? CX88_RADIO : 0; |
1706 | 1706 | ||
1707 | /* Make sure we support the board model */ | 1707 | /* Make sure we support the board model */ |
1708 | switch (tv.model) | 1708 | switch (tv.model) |
@@ -1792,8 +1792,9 @@ static void gdi_eeprom(struct cx88_core *core, u8 *eeprom_data) | |||
1792 | name ? name : "unknown"); | 1792 | name ? name : "unknown"); |
1793 | if (NULL == name) | 1793 | if (NULL == name) |
1794 | return; | 1794 | return; |
1795 | core->tuner_type = gdi_tuner[eeprom_data[0x0d]].id; | 1795 | core->board.tuner_type = gdi_tuner[eeprom_data[0x0d]].id; |
1796 | core->has_radio = gdi_tuner[eeprom_data[0x0d]].fm; | 1796 | core->board.radio.type = gdi_tuner[eeprom_data[0x0d]].fm ? |
1797 | CX88_RADIO : 0; | ||
1797 | } | 1798 | } |
1798 | 1799 | ||
1799 | /* ----------------------------------------------------------------------- */ | 1800 | /* ----------------------------------------------------------------------- */ |
@@ -1860,7 +1861,7 @@ void cx88_card_list(struct cx88_core *core, struct pci_dev *pci) | |||
1860 | 1861 | ||
1861 | void cx88_card_setup_pre_i2c(struct cx88_core *core) | 1862 | void cx88_card_setup_pre_i2c(struct cx88_core *core) |
1862 | { | 1863 | { |
1863 | switch (core->board) { | 1864 | switch (core->boardnr) { |
1864 | case CX88_BOARD_HAUPPAUGE_HVR1300: | 1865 | case CX88_BOARD_HAUPPAUGE_HVR1300: |
1865 | /* Bring the 702 demod up before i2c scanning/attach or devices are hidden */ | 1866 | /* Bring the 702 demod up before i2c scanning/attach or devices are hidden */ |
1866 | /* We leave here with the 702 on the bus */ | 1867 | /* We leave here with the 702 on the bus */ |
@@ -1883,7 +1884,7 @@ void cx88_card_setup(struct cx88_core *core) | |||
1883 | tveeprom_read(&core->i2c_client,eeprom,sizeof(eeprom)); | 1884 | tveeprom_read(&core->i2c_client,eeprom,sizeof(eeprom)); |
1884 | } | 1885 | } |
1885 | 1886 | ||
1886 | switch (core->board) { | 1887 | switch (core->boardnr) { |
1887 | case CX88_BOARD_HAUPPAUGE: | 1888 | case CX88_BOARD_HAUPPAUGE: |
1888 | case CX88_BOARD_HAUPPAUGE_ROSLYN: | 1889 | case CX88_BOARD_HAUPPAUGE_ROSLYN: |
1889 | if (0 == core->i2c_rc) | 1890 | if (0 == core->i2c_rc) |
@@ -1927,7 +1928,7 @@ void cx88_card_setup(struct cx88_core *core) | |||
1927 | msleep(1); | 1928 | msleep(1); |
1928 | cx_set(MO_GP0_IO, 0x00000101); | 1929 | cx_set(MO_GP0_IO, 0x00000101); |
1929 | if (0 == core->i2c_rc && | 1930 | if (0 == core->i2c_rc && |
1930 | core->board == CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID) | 1931 | core->boardnr == CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID) |
1931 | dvico_fusionhdtv_hybrid_init(core); | 1932 | dvico_fusionhdtv_hybrid_init(core); |
1932 | break; | 1933 | break; |
1933 | case CX88_BOARD_KWORLD_DVB_T: | 1934 | case CX88_BOARD_KWORLD_DVB_T: |
@@ -1965,14 +1966,10 @@ void cx88_card_setup(struct cx88_core *core) | |||
1965 | } | 1966 | } |
1966 | break; | 1967 | break; |
1967 | } | 1968 | } |
1968 | if (cx88_boards[core->board].radio.type == CX88_RADIO) | ||
1969 | core->has_radio = 1; | ||
1970 | } | 1969 | } |
1971 | 1970 | ||
1972 | /* ------------------------------------------------------------------ */ | 1971 | /* ------------------------------------------------------------------ */ |
1973 | 1972 | ||
1974 | EXPORT_SYMBOL(cx88_boards); | ||
1975 | |||
1976 | /* | 1973 | /* |
1977 | * Local variables: | 1974 | * Local variables: |
1978 | * c-basic-offset: 8 | 1975 | * c-basic-offset: 8 |
diff --git a/drivers/media/video/cx88/cx88-core.c b/drivers/media/video/cx88/cx88-core.c index 055264b9cd61..ece788bd3d55 100644 --- a/drivers/media/video/cx88/cx88-core.c +++ b/drivers/media/video/cx88/cx88-core.c | |||
@@ -738,7 +738,7 @@ int cx88_set_scale(struct cx88_core *core, unsigned int width, unsigned int heig | |||
738 | value |= (1 << 15); | 738 | value |= (1 << 15); |
739 | value |= (1 << 16); | 739 | value |= (1 << 16); |
740 | } | 740 | } |
741 | if (INPUT(core->input)->type == CX88_VMUX_SVIDEO) | 741 | if (INPUT(core->input).type == CX88_VMUX_SVIDEO) |
742 | value |= (1 << 13) | (1 << 5); | 742 | value |= (1 << 13) | (1 << 5); |
743 | if (V4L2_FIELD_INTERLACED == field) | 743 | if (V4L2_FIELD_INTERLACED == field) |
744 | value |= (1 << 3); // VINT (interlaced vertical scaling) | 744 | value |= (1 << 3); // VINT (interlaced vertical scaling) |
@@ -833,7 +833,7 @@ static int set_tvaudio(struct cx88_core *core) | |||
833 | { | 833 | { |
834 | v4l2_std_id norm = core->tvnorm; | 834 | v4l2_std_id norm = core->tvnorm; |
835 | 835 | ||
836 | if (CX88_VMUX_TELEVISION != INPUT(core->input)->type) | 836 | if (CX88_VMUX_TELEVISION != INPUT(core->input).type) |
837 | return 0; | 837 | return 0; |
838 | 838 | ||
839 | if (V4L2_STD_PAL_BG & norm) { | 839 | if (V4L2_STD_PAL_BG & norm) { |
@@ -1067,7 +1067,7 @@ struct video_device *cx88_vdev_init(struct cx88_core *core, | |||
1067 | vfd->dev = &pci->dev; | 1067 | vfd->dev = &pci->dev; |
1068 | vfd->release = video_device_release; | 1068 | vfd->release = video_device_release; |
1069 | snprintf(vfd->name, sizeof(vfd->name), "%s %s (%s)", | 1069 | snprintf(vfd->name, sizeof(vfd->name), "%s %s (%s)", |
1070 | core->name, type, cx88_boards[core->board].name); | 1070 | core->name, type, core->board.name); |
1071 | return vfd; | 1071 | return vfd; |
1072 | } | 1072 | } |
1073 | 1073 | ||
@@ -1130,39 +1130,34 @@ struct cx88_core* cx88_core_get(struct pci_dev *pci) | |||
1130 | core->bmmio = (u8 __iomem *)core->lmmio; | 1130 | core->bmmio = (u8 __iomem *)core->lmmio; |
1131 | 1131 | ||
1132 | /* board config */ | 1132 | /* board config */ |
1133 | core->board = UNSET; | 1133 | core->boardnr = UNSET; |
1134 | if (card[core->nr] < cx88_bcount) | 1134 | if (card[core->nr] < cx88_bcount) |
1135 | core->board = card[core->nr]; | 1135 | core->boardnr = card[core->nr]; |
1136 | for (i = 0; UNSET == core->board && i < cx88_idcount; i++) | 1136 | for (i = 0; UNSET == core->boardnr && i < cx88_idcount; i++) |
1137 | if (pci->subsystem_vendor == cx88_subids[i].subvendor && | 1137 | if (pci->subsystem_vendor == cx88_subids[i].subvendor && |
1138 | pci->subsystem_device == cx88_subids[i].subdevice) | 1138 | pci->subsystem_device == cx88_subids[i].subdevice) |
1139 | core->board = cx88_subids[i].card; | 1139 | core->boardnr = cx88_subids[i].card; |
1140 | if (UNSET == core->board) { | 1140 | if (UNSET == core->boardnr) { |
1141 | core->board = CX88_BOARD_UNKNOWN; | 1141 | core->boardnr = CX88_BOARD_UNKNOWN; |
1142 | cx88_card_list(core,pci); | 1142 | cx88_card_list(core,pci); |
1143 | } | 1143 | } |
1144 | |||
1145 | memcpy(&core->board, &cx88_boards[core->boardnr], sizeof(core->board)); | ||
1146 | |||
1144 | printk(KERN_INFO "CORE %s: subsystem: %04x:%04x, board: %s [card=%d,%s]\n", | 1147 | printk(KERN_INFO "CORE %s: subsystem: %04x:%04x, board: %s [card=%d,%s]\n", |
1145 | core->name,pci->subsystem_vendor, | 1148 | core->name,pci->subsystem_vendor, |
1146 | pci->subsystem_device,cx88_boards[core->board].name, | 1149 | pci->subsystem_device, core->board.name, |
1147 | core->board, card[core->nr] == core->board ? | 1150 | core->boardnr, card[core->nr] == core->boardnr ? |
1148 | "insmod option" : "autodetected"); | 1151 | "insmod option" : "autodetected"); |
1149 | 1152 | ||
1150 | core->tuner_type = tuner[core->nr]; | 1153 | if (tuner[core->nr] != UNSET) |
1151 | core->radio_type = radio[core->nr]; | 1154 | core->board.tuner_type = tuner[core->nr]; |
1152 | if (UNSET == core->tuner_type) | 1155 | if (radio[core->nr] != UNSET) |
1153 | core->tuner_type = cx88_boards[core->board].tuner_type; | 1156 | core->board.radio_type = radio[core->nr]; |
1154 | if (UNSET == core->radio_type) | ||
1155 | core->radio_type = cx88_boards[core->board].radio_type; | ||
1156 | if (!core->tuner_addr) | ||
1157 | core->tuner_addr = cx88_boards[core->board].tuner_addr; | ||
1158 | if (!core->radio_addr) | ||
1159 | core->radio_addr = cx88_boards[core->board].radio_addr; | ||
1160 | 1157 | ||
1161 | printk(KERN_INFO "TV tuner %d at 0x%02x, Radio tuner %d at 0x%02x\n", | 1158 | printk(KERN_INFO "TV tuner %d at 0x%02x, Radio tuner %d at 0x%02x\n", |
1162 | core->tuner_type, core->tuner_addr<<1, | 1159 | core->board.tuner_type, core->board.tuner_addr<<1, |
1163 | core->radio_type, core->radio_addr<<1); | 1160 | core->board.radio_type, core->board.radio_addr<<1); |
1164 | |||
1165 | core->tda9887_conf = cx88_boards[core->board].tda9887_conf; | ||
1166 | 1161 | ||
1167 | /* init hardware */ | 1162 | /* init hardware */ |
1168 | cx88_reset(core); | 1163 | cx88_reset(core); |
diff --git a/drivers/media/video/cx88/cx88-dvb.c b/drivers/media/video/cx88/cx88-dvb.c index 1773b40467dc..d98b90721019 100644 --- a/drivers/media/video/cx88/cx88-dvb.c +++ b/drivers/media/video/cx88/cx88-dvb.c | |||
@@ -378,7 +378,7 @@ static int dvb_register(struct cx8802_dev *dev) | |||
378 | dev->ts_gen_cntrl = 0x0c; | 378 | dev->ts_gen_cntrl = 0x0c; |
379 | 379 | ||
380 | /* init frontend */ | 380 | /* init frontend */ |
381 | switch (dev->core->board) { | 381 | switch (dev->core->boardnr) { |
382 | case CX88_BOARD_HAUPPAUGE_DVB_T1: | 382 | case CX88_BOARD_HAUPPAUGE_DVB_T1: |
383 | dev->dvb.frontend = dvb_attach(cx22702_attach, | 383 | dev->dvb.frontend = dvb_attach(cx22702_attach, |
384 | &connexant_refboard_config, | 384 | &connexant_refboard_config, |
@@ -653,7 +653,7 @@ static int cx8802_dvb_advise_acquire(struct cx8802_driver *drv) | |||
653 | int err = 0; | 653 | int err = 0; |
654 | dprintk( 1, "%s\n", __FUNCTION__); | 654 | dprintk( 1, "%s\n", __FUNCTION__); |
655 | 655 | ||
656 | switch (core->board) { | 656 | switch (core->boardnr) { |
657 | case CX88_BOARD_HAUPPAUGE_HVR1300: | 657 | case CX88_BOARD_HAUPPAUGE_HVR1300: |
658 | /* We arrive here with either the cx23416 or the cx22702 | 658 | /* We arrive here with either the cx23416 or the cx22702 |
659 | * on the bus. Take the bus from the cx23416 and enable the | 659 | * on the bus. Take the bus from the cx23416 and enable the |
@@ -676,7 +676,7 @@ static int cx8802_dvb_advise_release(struct cx8802_driver *drv) | |||
676 | int err = 0; | 676 | int err = 0; |
677 | dprintk( 1, "%s\n", __FUNCTION__); | 677 | dprintk( 1, "%s\n", __FUNCTION__); |
678 | 678 | ||
679 | switch (core->board) { | 679 | switch (core->boardnr) { |
680 | case CX88_BOARD_HAUPPAUGE_HVR1300: | 680 | case CX88_BOARD_HAUPPAUGE_HVR1300: |
681 | /* Do Nothing, leave the cx22702 on the bus. */ | 681 | /* Do Nothing, leave the cx22702 on the bus. */ |
682 | break; | 682 | break; |
@@ -694,13 +694,13 @@ static int cx8802_dvb_probe(struct cx8802_driver *drv) | |||
694 | 694 | ||
695 | dprintk( 1, "%s\n", __FUNCTION__); | 695 | dprintk( 1, "%s\n", __FUNCTION__); |
696 | dprintk( 1, " ->being probed by Card=%d Name=%s, PCI %02x:%02x\n", | 696 | dprintk( 1, " ->being probed by Card=%d Name=%s, PCI %02x:%02x\n", |
697 | core->board, | 697 | core->boardnr, |
698 | core->name, | 698 | core->name, |
699 | core->pci_bus, | 699 | core->pci_bus, |
700 | core->pci_slot); | 700 | core->pci_slot); |
701 | 701 | ||
702 | err = -ENODEV; | 702 | err = -ENODEV; |
703 | if (!(cx88_boards[core->board].mpeg & CX88_MPEG_DVB)) | 703 | if (!(core->board.mpeg & CX88_MPEG_DVB)) |
704 | goto fail_core; | 704 | goto fail_core; |
705 | 705 | ||
706 | /* If vp3054 isn't enabled, a stub will just return 0 */ | 706 | /* If vp3054 isn't enabled, a stub will just return 0 */ |
diff --git a/drivers/media/video/cx88/cx88-i2c.c b/drivers/media/video/cx88/cx88-i2c.c index 78bbcfab9670..6b42dea860fd 100644 --- a/drivers/media/video/cx88/cx88-i2c.c +++ b/drivers/media/video/cx88/cx88-i2c.c | |||
@@ -108,28 +108,28 @@ static int attach_inform(struct i2c_client *client) | |||
108 | if (!client->driver->command) | 108 | if (!client->driver->command) |
109 | return 0; | 109 | return 0; |
110 | 110 | ||
111 | if (core->radio_type != UNSET) { | 111 | if (core->board.radio_type != UNSET) { |
112 | if ((core->radio_addr==ADDR_UNSET)||(core->radio_addr==client->addr)) { | 112 | if ((core->board.radio_addr==ADDR_UNSET)||(core->board.radio_addr==client->addr)) { |
113 | tun_setup.mode_mask = T_RADIO; | 113 | tun_setup.mode_mask = T_RADIO; |
114 | tun_setup.type = core->radio_type; | 114 | tun_setup.type = core->board.radio_type; |
115 | tun_setup.addr = core->radio_addr; | 115 | tun_setup.addr = core->board.radio_addr; |
116 | 116 | ||
117 | client->driver->command (client, TUNER_SET_TYPE_ADDR, &tun_setup); | 117 | client->driver->command (client, TUNER_SET_TYPE_ADDR, &tun_setup); |
118 | } | 118 | } |
119 | } | 119 | } |
120 | if (core->tuner_type != UNSET) { | 120 | if (core->board.tuner_type != UNSET) { |
121 | if ((core->tuner_addr==ADDR_UNSET)||(core->tuner_addr==client->addr)) { | 121 | if ((core->board.tuner_addr==ADDR_UNSET)||(core->board.tuner_addr==client->addr)) { |
122 | 122 | ||
123 | tun_setup.mode_mask = T_ANALOG_TV; | 123 | tun_setup.mode_mask = T_ANALOG_TV; |
124 | tun_setup.type = core->tuner_type; | 124 | tun_setup.type = core->board.tuner_type; |
125 | tun_setup.addr = core->tuner_addr; | 125 | tun_setup.addr = core->board.tuner_addr; |
126 | 126 | ||
127 | client->driver->command (client,TUNER_SET_TYPE_ADDR, &tun_setup); | 127 | client->driver->command (client,TUNER_SET_TYPE_ADDR, &tun_setup); |
128 | } | 128 | } |
129 | } | 129 | } |
130 | 130 | ||
131 | if (core->tda9887_conf) | 131 | if (core->board.tda9887_conf) |
132 | client->driver->command(client, TDA9887_SET_CONFIG, &core->tda9887_conf); | 132 | client->driver->command(client, TDA9887_SET_CONFIG, &core->board.tda9887_conf); |
133 | return 0; | 133 | return 0; |
134 | } | 134 | } |
135 | 135 | ||
@@ -204,9 +204,9 @@ int cx88_i2c_init(struct cx88_core *core, struct pci_dev *pci) | |||
204 | memcpy(&core->i2c_algo, &cx8800_i2c_algo_template, | 204 | memcpy(&core->i2c_algo, &cx8800_i2c_algo_template, |
205 | sizeof(core->i2c_algo)); | 205 | sizeof(core->i2c_algo)); |
206 | 206 | ||
207 | if (core->tuner_type != TUNER_ABSENT) | 207 | if (core->board.tuner_type != TUNER_ABSENT) |
208 | core->i2c_adap.class |= I2C_CLASS_TV_ANALOG; | 208 | core->i2c_adap.class |= I2C_CLASS_TV_ANALOG; |
209 | if (cx88_boards[core->board].mpeg & CX88_MPEG_DVB) | 209 | if (core->board.mpeg & CX88_MPEG_DVB) |
210 | core->i2c_adap.class |= I2C_CLASS_TV_DIGITAL; | 210 | core->i2c_adap.class |= I2C_CLASS_TV_DIGITAL; |
211 | 211 | ||
212 | core->i2c_adap.dev.parent = &pci->dev; | 212 | core->i2c_adap.dev.parent = &pci->dev; |
diff --git a/drivers/media/video/cx88/cx88-input.c b/drivers/media/video/cx88/cx88-input.c index f5d4a565346e..120f56857f0e 100644 --- a/drivers/media/video/cx88/cx88-input.c +++ b/drivers/media/video/cx88/cx88-input.c | |||
@@ -74,7 +74,7 @@ static void cx88_ir_handle_key(struct cx88_IR *ir) | |||
74 | 74 | ||
75 | /* read gpio value */ | 75 | /* read gpio value */ |
76 | gpio = cx_read(ir->gpio_addr); | 76 | gpio = cx_read(ir->gpio_addr); |
77 | switch (core->board) { | 77 | switch (core->boardnr) { |
78 | case CX88_BOARD_NPGTECH_REALTV_TOP10FM: | 78 | case CX88_BOARD_NPGTECH_REALTV_TOP10FM: |
79 | /* This board apparently uses a combination of 2 GPIO | 79 | /* This board apparently uses a combination of 2 GPIO |
80 | to represent the keys. Additionally, the second GPIO | 80 | to represent the keys. Additionally, the second GPIO |
@@ -113,7 +113,7 @@ static void cx88_ir_handle_key(struct cx88_IR *ir) | |||
113 | (gpio & ir->mask_keydown) ? " down" : "", | 113 | (gpio & ir->mask_keydown) ? " down" : "", |
114 | (gpio & ir->mask_keyup) ? " up" : ""); | 114 | (gpio & ir->mask_keyup) ? " up" : ""); |
115 | 115 | ||
116 | if (ir->core->board == CX88_BOARD_NORWOOD_MICRO) { | 116 | if (ir->core->boardnr == CX88_BOARD_NORWOOD_MICRO) { |
117 | u32 gpio_key = cx_read(MO_GP0_IO); | 117 | u32 gpio_key = cx_read(MO_GP0_IO); |
118 | 118 | ||
119 | data = (data << 4) | ((gpio_key & 0xf0) >> 4); | 119 | data = (data << 4) | ((gpio_key & 0xf0) >> 4); |
@@ -204,7 +204,7 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci) | |||
204 | ir->input = input_dev; | 204 | ir->input = input_dev; |
205 | 205 | ||
206 | /* detect & configure */ | 206 | /* detect & configure */ |
207 | switch (core->board) { | 207 | switch (core->boardnr) { |
208 | case CX88_BOARD_DNTV_LIVE_DVB_T: | 208 | case CX88_BOARD_DNTV_LIVE_DVB_T: |
209 | case CX88_BOARD_KWORLD_DVB_T: | 209 | case CX88_BOARD_KWORLD_DVB_T: |
210 | case CX88_BOARD_KWORLD_DVB_T_CX22702: | 210 | case CX88_BOARD_KWORLD_DVB_T_CX22702: |
@@ -314,8 +314,7 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci) | |||
314 | } | 314 | } |
315 | 315 | ||
316 | /* init input device */ | 316 | /* init input device */ |
317 | snprintf(ir->name, sizeof(ir->name), "cx88 IR (%s)", | 317 | snprintf(ir->name, sizeof(ir->name), "cx88 IR (%s)", core->board.name); |
318 | cx88_boards[core->board].name); | ||
319 | snprintf(ir->phys, sizeof(ir->phys), "pci-%s/ir0", pci_name(pci)); | 318 | snprintf(ir->phys, sizeof(ir->phys), "pci-%s/ir0", pci_name(pci)); |
320 | 319 | ||
321 | ir_input_init(input_dev, &ir->ir, ir_type, ir_codes); | 320 | ir_input_init(input_dev, &ir->ir, ir_type, ir_codes); |
@@ -406,7 +405,7 @@ void cx88_ir_irq(struct cx88_core *core) | |||
406 | ir_dump_samples(ir->samples, ir->scount); | 405 | ir_dump_samples(ir->samples, ir->scount); |
407 | 406 | ||
408 | /* decode it */ | 407 | /* decode it */ |
409 | switch (core->board) { | 408 | switch (core->boardnr) { |
410 | case CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1: | 409 | case CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1: |
411 | case CX88_BOARD_DNTV_LIVE_DVB_T_PRO: | 410 | case CX88_BOARD_DNTV_LIVE_DVB_T_PRO: |
412 | ircode = ir_decode_pulsedistance(ir->samples, ir->scount, 1, 4); | 411 | ircode = ir_decode_pulsedistance(ir->samples, ir->scount, 1, 4); |
diff --git a/drivers/media/video/cx88/cx88-mpeg.c b/drivers/media/video/cx88/cx88-mpeg.c index c34158d9dcc1..1df245ace2d0 100644 --- a/drivers/media/video/cx88/cx88-mpeg.c +++ b/drivers/media/video/cx88/cx88-mpeg.c | |||
@@ -55,9 +55,9 @@ static void request_module_async(struct work_struct *work) | |||
55 | { | 55 | { |
56 | struct cx8802_dev *dev=container_of(work, struct cx8802_dev, request_module_wk); | 56 | struct cx8802_dev *dev=container_of(work, struct cx8802_dev, request_module_wk); |
57 | 57 | ||
58 | if (cx88_boards[dev->core->board].mpeg & CX88_MPEG_DVB) | 58 | if (dev->core->board.mpeg & CX88_MPEG_DVB) |
59 | request_module("cx88-dvb"); | 59 | request_module("cx88-dvb"); |
60 | if (cx88_boards[dev->core->board].mpeg & CX88_MPEG_BLACKBIRD) | 60 | if (dev->core->board.mpeg & CX88_MPEG_BLACKBIRD) |
61 | request_module("cx88-blackbird"); | 61 | request_module("cx88-blackbird"); |
62 | } | 62 | } |
63 | 63 | ||
@@ -95,7 +95,7 @@ static int cx8802_start_dma(struct cx8802_dev *dev, | |||
95 | dprintk( 1, "core->active_type_id = 0x%08x\n", core->active_type_id); | 95 | dprintk( 1, "core->active_type_id = 0x%08x\n", core->active_type_id); |
96 | 96 | ||
97 | if ( (core->active_type_id == CX88_MPEG_DVB) && | 97 | if ( (core->active_type_id == CX88_MPEG_DVB) && |
98 | (cx88_boards[core->board].mpeg & CX88_MPEG_DVB) ) { | 98 | (core->board.mpeg & CX88_MPEG_DVB) ) { |
99 | 99 | ||
100 | dprintk( 1, "cx8802_start_dma doing .dvb\n"); | 100 | dprintk( 1, "cx8802_start_dma doing .dvb\n"); |
101 | /* negedge driven & software reset */ | 101 | /* negedge driven & software reset */ |
@@ -103,7 +103,7 @@ static int cx8802_start_dma(struct cx8802_dev *dev, | |||
103 | udelay(100); | 103 | udelay(100); |
104 | cx_write(MO_PINMUX_IO, 0x00); | 104 | cx_write(MO_PINMUX_IO, 0x00); |
105 | cx_write(TS_HW_SOP_CNTRL,0x47<<16|188<<4|0x01); | 105 | cx_write(TS_HW_SOP_CNTRL,0x47<<16|188<<4|0x01); |
106 | switch (core->board) { | 106 | switch (core->boardnr) { |
107 | case CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q: | 107 | case CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q: |
108 | case CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T: | 108 | case CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T: |
109 | case CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD: | 109 | case CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD: |
@@ -124,7 +124,7 @@ static int cx8802_start_dma(struct cx8802_dev *dev, | |||
124 | cx_write(TS_GEN_CNTRL, dev->ts_gen_cntrl); | 124 | cx_write(TS_GEN_CNTRL, dev->ts_gen_cntrl); |
125 | udelay(100); | 125 | udelay(100); |
126 | } else if ( (core->active_type_id == CX88_MPEG_BLACKBIRD) && | 126 | } else if ( (core->active_type_id == CX88_MPEG_BLACKBIRD) && |
127 | (cx88_boards[core->board].mpeg & CX88_MPEG_BLACKBIRD) ) { | 127 | (core->board.mpeg & CX88_MPEG_BLACKBIRD) ) { |
128 | dprintk( 1, "cx8802_start_dma doing .blackbird\n"); | 128 | dprintk( 1, "cx8802_start_dma doing .blackbird\n"); |
129 | cx_write(MO_PINMUX_IO, 0x88); /* enable MPEG parallel IO */ | 129 | cx_write(MO_PINMUX_IO, 0x88); /* enable MPEG parallel IO */ |
130 | 130 | ||
@@ -138,7 +138,7 @@ static int cx8802_start_dma(struct cx8802_dev *dev, | |||
138 | udelay(100); | 138 | udelay(100); |
139 | } else { | 139 | } else { |
140 | printk( "%s() Failed. Unsupported value in .mpeg (0x%08x)\n", __FUNCTION__, | 140 | printk( "%s() Failed. Unsupported value in .mpeg (0x%08x)\n", __FUNCTION__, |
141 | cx88_boards[core->board].mpeg ); | 141 | core->board.mpeg ); |
142 | return -EINVAL; | 142 | return -EINVAL; |
143 | } | 143 | } |
144 | 144 | ||
@@ -689,8 +689,8 @@ int cx8802_register_driver(struct cx8802_driver *drv) | |||
689 | 689 | ||
690 | printk(KERN_INFO "CORE %s: subsystem: %04x:%04x, board: %s [card=%d]\n", | 690 | printk(KERN_INFO "CORE %s: subsystem: %04x:%04x, board: %s [card=%d]\n", |
691 | h->core->name,h->pci->subsystem_vendor, | 691 | h->core->name,h->pci->subsystem_vendor, |
692 | h->pci->subsystem_device,cx88_boards[h->core->board].name, | 692 | h->pci->subsystem_device,h->core->board.name, |
693 | h->core->board); | 693 | h->core->boardnr); |
694 | 694 | ||
695 | /* Bring up a new struct for each driver instance */ | 695 | /* Bring up a new struct for each driver instance */ |
696 | driver = kzalloc(sizeof(*drv),GFP_KERNEL); | 696 | driver = kzalloc(sizeof(*drv),GFP_KERNEL); |
@@ -741,8 +741,8 @@ int cx8802_unregister_driver(struct cx8802_driver *drv) | |||
741 | 741 | ||
742 | printk(KERN_INFO "CORE %s: subsystem: %04x:%04x, board: %s [card=%d]\n", | 742 | printk(KERN_INFO "CORE %s: subsystem: %04x:%04x, board: %s [card=%d]\n", |
743 | h->core->name,h->pci->subsystem_vendor, | 743 | h->core->name,h->pci->subsystem_vendor, |
744 | h->pci->subsystem_device,cx88_boards[h->core->board].name, | 744 | h->pci->subsystem_device,h->core->board.name, |
745 | h->core->board); | 745 | h->core->boardnr); |
746 | 746 | ||
747 | list_for_each_safe(list2, q, &h->drvlist.devlist) { | 747 | list_for_each_safe(list2, q, &h->drvlist.devlist) { |
748 | d = list_entry(list2, struct cx8802_driver, devlist); | 748 | d = list_entry(list2, struct cx8802_driver, devlist); |
@@ -782,7 +782,7 @@ static int __devinit cx8802_probe(struct pci_dev *pci_dev, | |||
782 | printk("%s/2: cx2388x 8802 Driver Manager\n", core->name); | 782 | printk("%s/2: cx2388x 8802 Driver Manager\n", core->name); |
783 | 783 | ||
784 | err = -ENODEV; | 784 | err = -ENODEV; |
785 | if (!cx88_boards[core->board].mpeg) | 785 | if (!core->board.mpeg) |
786 | goto fail_core; | 786 | goto fail_core; |
787 | 787 | ||
788 | err = -ENOMEM; | 788 | err = -ENOMEM; |
diff --git a/drivers/media/video/cx88/cx88-tvaudio.c b/drivers/media/video/cx88/cx88-tvaudio.c index 1cc2d286a1cb..99e120483ecd 100644 --- a/drivers/media/video/cx88/cx88-tvaudio.c +++ b/drivers/media/video/cx88/cx88-tvaudio.c | |||
@@ -140,7 +140,7 @@ static void set_audio_finish(struct cx88_core *core, u32 ctl) | |||
140 | cx_write(AUD_RATE_THRES_DMD, 0x000000C0); | 140 | cx_write(AUD_RATE_THRES_DMD, 0x000000C0); |
141 | cx88_start_audio_dma(core); | 141 | cx88_start_audio_dma(core); |
142 | 142 | ||
143 | if (cx88_boards[core->board].mpeg & CX88_MPEG_BLACKBIRD) { | 143 | if (core->board.mpeg & CX88_MPEG_BLACKBIRD) { |
144 | cx_write(AUD_I2SINPUTCNTL, 4); | 144 | cx_write(AUD_I2SINPUTCNTL, 4); |
145 | cx_write(AUD_BAUDRATE, 1); | 145 | cx_write(AUD_BAUDRATE, 1); |
146 | /* 'pass-thru mode': this enables the i2s output to the mpeg encoder */ | 146 | /* 'pass-thru mode': this enables the i2s output to the mpeg encoder */ |
@@ -149,7 +149,7 @@ static void set_audio_finish(struct cx88_core *core, u32 ctl) | |||
149 | cx_write(AUD_I2SCNTL, 0); | 149 | cx_write(AUD_I2SCNTL, 0); |
150 | /* cx_write(AUD_APB_IN_RATE_ADJ, 0); */ | 150 | /* cx_write(AUD_APB_IN_RATE_ADJ, 0); */ |
151 | } | 151 | } |
152 | if ((always_analog) || (!(cx88_boards[core->board].mpeg & CX88_MPEG_BLACKBIRD))) { | 152 | if ((always_analog) || (!(core->board.mpeg & CX88_MPEG_BLACKBIRD))) { |
153 | ctl |= EN_DAC_ENABLE; | 153 | ctl |= EN_DAC_ENABLE; |
154 | cx_write(AUD_CTL, ctl); | 154 | cx_write(AUD_CTL, ctl); |
155 | } | 155 | } |
diff --git a/drivers/media/video/cx88/cx88-video.c b/drivers/media/video/cx88/cx88-video.c index 58ec76be436c..b0dd4313a841 100644 --- a/drivers/media/video/cx88/cx88-video.c +++ b/drivers/media/video/cx88/cx88-video.c | |||
@@ -368,17 +368,17 @@ int cx88_video_mux(struct cx88_core *core, unsigned int input) | |||
368 | /* struct cx88_core *core = dev->core; */ | 368 | /* struct cx88_core *core = dev->core; */ |
369 | 369 | ||
370 | dprintk(1,"video_mux: %d [vmux=%d,gpio=0x%x,0x%x,0x%x,0x%x]\n", | 370 | dprintk(1,"video_mux: %d [vmux=%d,gpio=0x%x,0x%x,0x%x,0x%x]\n", |
371 | input, INPUT(input)->vmux, | 371 | input, INPUT(input).vmux, |
372 | INPUT(input)->gpio0,INPUT(input)->gpio1, | 372 | INPUT(input).gpio0,INPUT(input).gpio1, |
373 | INPUT(input)->gpio2,INPUT(input)->gpio3); | 373 | INPUT(input).gpio2,INPUT(input).gpio3); |
374 | core->input = input; | 374 | core->input = input; |
375 | cx_andor(MO_INPUT_FORMAT, 0x03 << 14, INPUT(input)->vmux << 14); | 375 | cx_andor(MO_INPUT_FORMAT, 0x03 << 14, INPUT(input).vmux << 14); |
376 | cx_write(MO_GP3_IO, INPUT(input)->gpio3); | 376 | cx_write(MO_GP3_IO, INPUT(input).gpio3); |
377 | cx_write(MO_GP0_IO, INPUT(input)->gpio0); | 377 | cx_write(MO_GP0_IO, INPUT(input).gpio0); |
378 | cx_write(MO_GP1_IO, INPUT(input)->gpio1); | 378 | cx_write(MO_GP1_IO, INPUT(input).gpio1); |
379 | cx_write(MO_GP2_IO, INPUT(input)->gpio2); | 379 | cx_write(MO_GP2_IO, INPUT(input).gpio2); |
380 | 380 | ||
381 | switch (INPUT(input)->type) { | 381 | switch (INPUT(input).type) { |
382 | case CX88_VMUX_SVIDEO: | 382 | case CX88_VMUX_SVIDEO: |
383 | cx_set(MO_AFECFG_IO, 0x00000001); | 383 | cx_set(MO_AFECFG_IO, 0x00000001); |
384 | cx_set(MO_INPUT_FORMAT, 0x00010010); | 384 | cx_set(MO_INPUT_FORMAT, 0x00010010); |
@@ -393,9 +393,9 @@ int cx88_video_mux(struct cx88_core *core, unsigned int input) | |||
393 | break; | 393 | break; |
394 | } | 394 | } |
395 | 395 | ||
396 | if (cx88_boards[core->board].mpeg & CX88_MPEG_BLACKBIRD) { | 396 | if (core->board.mpeg & CX88_MPEG_BLACKBIRD) { |
397 | /* sets sound input from external adc */ | 397 | /* sets sound input from external adc */ |
398 | if (INPUT(input)->extadc) | 398 | if (INPUT(input).extadc) |
399 | cx_set(AUD_CTL, EN_I2SIN_ENABLE); | 399 | cx_set(AUD_CTL, EN_I2SIN_ENABLE); |
400 | else | 400 | else |
401 | cx_clear(AUD_CTL, EN_I2SIN_ENABLE); | 401 | cx_clear(AUD_CTL, EN_I2SIN_ENABLE); |
@@ -767,12 +767,11 @@ static int video_open(struct inode *inode, struct file *file) | |||
767 | fh); | 767 | fh); |
768 | 768 | ||
769 | if (fh->radio) { | 769 | if (fh->radio) { |
770 | int board = core->board; | ||
771 | dprintk(1,"video_open: setting radio device\n"); | 770 | dprintk(1,"video_open: setting radio device\n"); |
772 | cx_write(MO_GP3_IO, cx88_boards[board].radio.gpio3); | 771 | cx_write(MO_GP3_IO, core->board.radio.gpio3); |
773 | cx_write(MO_GP0_IO, cx88_boards[board].radio.gpio0); | 772 | cx_write(MO_GP0_IO, core->board.radio.gpio0); |
774 | cx_write(MO_GP1_IO, cx88_boards[board].radio.gpio1); | 773 | cx_write(MO_GP1_IO, core->board.radio.gpio1); |
775 | cx_write(MO_GP2_IO, cx88_boards[board].radio.gpio2); | 774 | cx_write(MO_GP2_IO, core->board.radio.gpio2); |
776 | core->tvaudio = WW_FM; | 775 | core->tvaudio = WW_FM; |
777 | cx88_set_tvaudio(core); | 776 | cx88_set_tvaudio(core); |
778 | cx88_set_stereo(core,V4L2_TUNER_MODE_STEREO,1); | 777 | cx88_set_stereo(core,V4L2_TUNER_MODE_STEREO,1); |
@@ -1078,8 +1077,7 @@ static int vidioc_querycap (struct file *file, void *priv, | |||
1078 | struct cx88_core *core = dev->core; | 1077 | struct cx88_core *core = dev->core; |
1079 | 1078 | ||
1080 | strcpy(cap->driver, "cx8800"); | 1079 | strcpy(cap->driver, "cx8800"); |
1081 | strlcpy(cap->card, cx88_boards[core->board].name, | 1080 | strlcpy(cap->card, core->board.name, sizeof(cap->card)); |
1082 | sizeof(cap->card)); | ||
1083 | sprintf(cap->bus_info,"PCI:%s",pci_name(dev->pci)); | 1081 | sprintf(cap->bus_info,"PCI:%s",pci_name(dev->pci)); |
1084 | cap->version = CX88_VERSION_CODE; | 1082 | cap->version = CX88_VERSION_CODE; |
1085 | cap->capabilities = | 1083 | cap->capabilities = |
@@ -1087,7 +1085,7 @@ static int vidioc_querycap (struct file *file, void *priv, | |||
1087 | V4L2_CAP_READWRITE | | 1085 | V4L2_CAP_READWRITE | |
1088 | V4L2_CAP_STREAMING | | 1086 | V4L2_CAP_STREAMING | |
1089 | V4L2_CAP_VBI_CAPTURE; | 1087 | V4L2_CAP_VBI_CAPTURE; |
1090 | if (UNSET != core->tuner_type) | 1088 | if (UNSET != core->board.tuner_type) |
1091 | cap->capabilities |= V4L2_CAP_TUNER; | 1089 | cap->capabilities |= V4L2_CAP_TUNER; |
1092 | return 0; | 1090 | return 0; |
1093 | } | 1091 | } |
@@ -1221,14 +1219,14 @@ int cx88_enum_input (struct cx88_core *core,struct v4l2_input *i) | |||
1221 | n = i->index; | 1219 | n = i->index; |
1222 | if (n >= 4) | 1220 | if (n >= 4) |
1223 | return -EINVAL; | 1221 | return -EINVAL; |
1224 | if (0 == INPUT(n)->type) | 1222 | if (0 == INPUT(n).type) |
1225 | return -EINVAL; | 1223 | return -EINVAL; |
1226 | memset(i,0,sizeof(*i)); | 1224 | memset(i,0,sizeof(*i)); |
1227 | i->index = n; | 1225 | i->index = n; |
1228 | i->type = V4L2_INPUT_TYPE_CAMERA; | 1226 | i->type = V4L2_INPUT_TYPE_CAMERA; |
1229 | strcpy(i->name,iname[INPUT(n)->type]); | 1227 | strcpy(i->name,iname[INPUT(n).type]); |
1230 | if ((CX88_VMUX_TELEVISION == INPUT(n)->type) || | 1228 | if ((CX88_VMUX_TELEVISION == INPUT(n).type) || |
1231 | (CX88_VMUX_CABLE == INPUT(n)->type)) | 1229 | (CX88_VMUX_CABLE == INPUT(n).type)) |
1232 | i->type = V4L2_INPUT_TYPE_TUNER; | 1230 | i->type = V4L2_INPUT_TYPE_TUNER; |
1233 | i->std = CX88_NORMS; | 1231 | i->std = CX88_NORMS; |
1234 | return 0; | 1232 | return 0; |
@@ -1297,7 +1295,7 @@ static int vidioc_g_tuner (struct file *file, void *priv, | |||
1297 | struct cx88_core *core = ((struct cx8800_fh *)priv)->dev->core; | 1295 | struct cx88_core *core = ((struct cx8800_fh *)priv)->dev->core; |
1298 | u32 reg; | 1296 | u32 reg; |
1299 | 1297 | ||
1300 | if (unlikely(UNSET == core->tuner_type)) | 1298 | if (unlikely(UNSET == core->board.tuner_type)) |
1301 | return -EINVAL; | 1299 | return -EINVAL; |
1302 | if (0 != t->index) | 1300 | if (0 != t->index) |
1303 | return -EINVAL; | 1301 | return -EINVAL; |
@@ -1318,7 +1316,7 @@ static int vidioc_s_tuner (struct file *file, void *priv, | |||
1318 | { | 1316 | { |
1319 | struct cx88_core *core = ((struct cx8800_fh *)priv)->dev->core; | 1317 | struct cx88_core *core = ((struct cx8800_fh *)priv)->dev->core; |
1320 | 1318 | ||
1321 | if (UNSET == core->tuner_type) | 1319 | if (UNSET == core->board.tuner_type) |
1322 | return -EINVAL; | 1320 | return -EINVAL; |
1323 | if (0 != t->index) | 1321 | if (0 != t->index) |
1324 | return -EINVAL; | 1322 | return -EINVAL; |
@@ -1333,7 +1331,7 @@ static int vidioc_g_frequency (struct file *file, void *priv, | |||
1333 | struct cx8800_fh *fh = priv; | 1331 | struct cx8800_fh *fh = priv; |
1334 | struct cx88_core *core = fh->dev->core; | 1332 | struct cx88_core *core = fh->dev->core; |
1335 | 1333 | ||
1336 | if (unlikely(UNSET == core->tuner_type)) | 1334 | if (unlikely(UNSET == core->board.tuner_type)) |
1337 | return -EINVAL; | 1335 | return -EINVAL; |
1338 | 1336 | ||
1339 | /* f->type = fh->radio ? V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV; */ | 1337 | /* f->type = fh->radio ? V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV; */ |
@@ -1348,7 +1346,7 @@ static int vidioc_g_frequency (struct file *file, void *priv, | |||
1348 | int cx88_set_freq (struct cx88_core *core, | 1346 | int cx88_set_freq (struct cx88_core *core, |
1349 | struct v4l2_frequency *f) | 1347 | struct v4l2_frequency *f) |
1350 | { | 1348 | { |
1351 | if (unlikely(UNSET == core->tuner_type)) | 1349 | if (unlikely(UNSET == core->board.tuner_type)) |
1352 | return -EINVAL; | 1350 | return -EINVAL; |
1353 | if (unlikely(f->tuner != 0)) | 1351 | if (unlikely(f->tuner != 0)) |
1354 | return -EINVAL; | 1352 | return -EINVAL; |
@@ -1419,8 +1417,7 @@ static int radio_querycap (struct file *file, void *priv, | |||
1419 | struct cx88_core *core = dev->core; | 1417 | struct cx88_core *core = dev->core; |
1420 | 1418 | ||
1421 | strcpy(cap->driver, "cx8800"); | 1419 | strcpy(cap->driver, "cx8800"); |
1422 | strlcpy(cap->card, cx88_boards[core->board].name, | 1420 | strlcpy(cap->card, core->board.name, sizeof(cap->card)); |
1423 | sizeof(cap->card)); | ||
1424 | sprintf(cap->bus_info,"PCI:%s", pci_name(dev->pci)); | 1421 | sprintf(cap->bus_info,"PCI:%s", pci_name(dev->pci)); |
1425 | cap->version = CX88_VERSION_CODE; | 1422 | cap->version = CX88_VERSION_CODE; |
1426 | cap->capabilities = V4L2_CAP_TUNER; | 1423 | cap->capabilities = V4L2_CAP_TUNER; |
@@ -1828,10 +1825,10 @@ static int __devinit cx8800_initdev(struct pci_dev *pci_dev, | |||
1828 | cx_set(MO_PCI_INTMSK, core->pci_irqmask); | 1825 | cx_set(MO_PCI_INTMSK, core->pci_irqmask); |
1829 | 1826 | ||
1830 | /* load and configure helper modules */ | 1827 | /* load and configure helper modules */ |
1831 | if (TUNER_ABSENT != core->tuner_type) | 1828 | if (TUNER_ABSENT != core->board.tuner_type) |
1832 | request_module("tuner"); | 1829 | request_module("tuner"); |
1833 | 1830 | ||
1834 | if (cx88_boards[ core->board ].audio_chip == AUDIO_CHIP_WM8775) | 1831 | if (core->board.audio_chip == AUDIO_CHIP_WM8775) |
1835 | request_module("wm8775"); | 1832 | request_module("wm8775"); |
1836 | 1833 | ||
1837 | /* register v4l devices */ | 1834 | /* register v4l devices */ |
@@ -1858,7 +1855,7 @@ static int __devinit cx8800_initdev(struct pci_dev *pci_dev, | |||
1858 | printk(KERN_INFO "%s/0: registered device vbi%d\n", | 1855 | printk(KERN_INFO "%s/0: registered device vbi%d\n", |
1859 | core->name,dev->vbi_dev->minor & 0x1f); | 1856 | core->name,dev->vbi_dev->minor & 0x1f); |
1860 | 1857 | ||
1861 | if (core->has_radio) { | 1858 | if (core->board.radio.type == CX88_RADIO) { |
1862 | dev->radio_dev = cx88_vdev_init(core,dev->pci, | 1859 | dev->radio_dev = cx88_vdev_init(core,dev->pci, |
1863 | &cx8800_radio_template,"radio"); | 1860 | &cx8800_radio_template,"radio"); |
1864 | err = video_register_device(dev->radio_dev,VFL_TYPE_RADIO, | 1861 | err = video_register_device(dev->radio_dev,VFL_TYPE_RADIO, |
@@ -1884,7 +1881,7 @@ static int __devinit cx8800_initdev(struct pci_dev *pci_dev, | |||
1884 | mutex_unlock(&core->lock); | 1881 | mutex_unlock(&core->lock); |
1885 | 1882 | ||
1886 | /* start tvaudio thread */ | 1883 | /* start tvaudio thread */ |
1887 | if (core->tuner_type != TUNER_ABSENT) { | 1884 | if (core->board.tuner_type != TUNER_ABSENT) { |
1888 | core->kthread = kthread_run(cx88_audio_thread, core, "cx88 tvaudio"); | 1885 | core->kthread = kthread_run(cx88_audio_thread, core, "cx88 tvaudio"); |
1889 | if (IS_ERR(core->kthread)) { | 1886 | if (IS_ERR(core->kthread)) { |
1890 | err = PTR_ERR(core->kthread); | 1887 | err = PTR_ERR(core->kthread); |
diff --git a/drivers/media/video/cx88/cx88-vp3054-i2c.c b/drivers/media/video/cx88/cx88-vp3054-i2c.c index cd0877636a32..f76ca9e2eebf 100644 --- a/drivers/media/video/cx88/cx88-vp3054-i2c.c +++ b/drivers/media/video/cx88/cx88-vp3054-i2c.c | |||
@@ -111,7 +111,7 @@ int vp3054_i2c_probe(struct cx8802_dev *dev) | |||
111 | struct vp3054_i2c_state *vp3054_i2c; | 111 | struct vp3054_i2c_state *vp3054_i2c; |
112 | int rc; | 112 | int rc; |
113 | 113 | ||
114 | if (core->board != CX88_BOARD_DNTV_LIVE_DVB_T_PRO) | 114 | if (core->boardnr != CX88_BOARD_DNTV_LIVE_DVB_T_PRO) |
115 | return 0; | 115 | return 0; |
116 | 116 | ||
117 | dev->card_priv = kzalloc(sizeof(*vp3054_i2c), GFP_KERNEL); | 117 | dev->card_priv = kzalloc(sizeof(*vp3054_i2c), GFP_KERNEL); |
@@ -152,7 +152,7 @@ void vp3054_i2c_remove(struct cx8802_dev *dev) | |||
152 | struct vp3054_i2c_state *vp3054_i2c = dev->card_priv; | 152 | struct vp3054_i2c_state *vp3054_i2c = dev->card_priv; |
153 | 153 | ||
154 | if (vp3054_i2c == NULL || | 154 | if (vp3054_i2c == NULL || |
155 | dev->core->board != CX88_BOARD_DNTV_LIVE_DVB_T_PRO) | 155 | dev->core->boardnr != CX88_BOARD_DNTV_LIVE_DVB_T_PRO) |
156 | return; | 156 | return; |
157 | 157 | ||
158 | i2c_del_adapter(&vp3054_i2c->adap); | 158 | i2c_del_adapter(&vp3054_i2c->adap); |
diff --git a/drivers/media/video/cx88/cx88.h b/drivers/media/video/cx88/cx88.h index 78486f90327a..3636ec26de59 100644 --- a/drivers/media/video/cx88/cx88.h +++ b/drivers/media/video/cx88/cx88.h | |||
@@ -250,7 +250,7 @@ struct cx88_subid { | |||
250 | u32 card; | 250 | u32 card; |
251 | }; | 251 | }; |
252 | 252 | ||
253 | #define INPUT(nr) (&cx88_boards[core->board].input[nr]) | 253 | #define INPUT(nr) (core->board.input[nr]) |
254 | 254 | ||
255 | /* ----------------------------------------------------------- */ | 255 | /* ----------------------------------------------------------- */ |
256 | /* device / file handle status */ | 256 | /* device / file handle status */ |
@@ -304,13 +304,8 @@ struct cx88_core { | |||
304 | u32 i2c_state, i2c_rc; | 304 | u32 i2c_state, i2c_rc; |
305 | 305 | ||
306 | /* config info -- analog */ | 306 | /* config info -- analog */ |
307 | unsigned int board; | 307 | unsigned int boardnr; |
308 | unsigned int tuner_type; | 308 | struct cx88_board board; |
309 | unsigned int radio_type; | ||
310 | unsigned char tuner_addr; | ||
311 | unsigned char radio_addr; | ||
312 | unsigned int tda9887_conf; | ||
313 | unsigned int has_radio; | ||
314 | 309 | ||
315 | /* Supported V4L _STD_ tuner formats */ | 310 | /* Supported V4L _STD_ tuner formats */ |
316 | unsigned int tuner_formats; | 311 | unsigned int tuner_formats; |
@@ -585,7 +580,7 @@ extern void cx88_call_i2c_clients(struct cx88_core *core, | |||
585 | /* ----------------------------------------------------------- */ | 580 | /* ----------------------------------------------------------- */ |
586 | /* cx88-cards.c */ | 581 | /* cx88-cards.c */ |
587 | 582 | ||
588 | extern struct cx88_board cx88_boards[]; | 583 | extern const struct cx88_board cx88_boards[]; |
589 | extern const unsigned int cx88_bcount; | 584 | extern const unsigned int cx88_bcount; |
590 | 585 | ||
591 | extern struct cx88_subid cx88_subids[]; | 586 | extern struct cx88_subid cx88_subids[]; |