Merge master.kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb

* master.kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb:
V4L/DVB (4712): Fix warning when compiling on x86_i64
V4L/DVB (4711): Radio: No need to return void
V4L/DVB (4708): Add tveeprom support for Philips FM1236/FM1216ME MK5
V4L/DVB (4707): 4linux: complete conversion to hotplug safe PCI API
V4L/DVB (4706): Do not enable VIDEO_V4L2 unconditionally
V4L/DVB (4704): SAA713x: fixed compile warning in SECAM fixup
V4L/DVB (4703): Add support for the ASUS EUROPA2 OEM board
V4L/DVB (4702): Fix: set antenna input for DVB-T for Asus P7131 Dual hybrid
V4L/DVB (4701): Saa713x audio fixes
V4L/DVB (4676a): Remove Kconfig item for DiB7000M support

+203 -78
+1
Documentation/video4linux/CARDLIST.saa7134
··· 98 98 97 -> LifeView FlyDVB-S /Acorp TV134DS [5168:0300,4e42:0300] 99 99 98 -> Proteus Pro 2309 [0919:2003] 100 100 99 -> AVerMedia TV Hybrid A16AR [1461:2c00] 101 + 100 -> Asus Europa2 OEM [1043:4860]
+1
drivers/media/Kconfig
··· 54 54 55 55 config VIDEO_V4L2 56 56 bool 57 + depends on VIDEO_DEV 57 58 default y 58 59 59 60 source "drivers/media/video/Kconfig"
-1
drivers/media/dvb/dvb-usb/Kconfig
··· 69 69 config DVB_USB_DIB0700 70 70 tristate "DiBcom DiB0700 USB DVB devices (see help for supported devices)" 71 71 depends on DVB_USB 72 - select DVB_DIB7000M 73 72 select DVB_DIB3000MC 74 73 select DVB_TUNER_MT2060 75 74 help
+3 -2
drivers/media/dvb/dvb-usb/usb-urb.c
··· 122 122 usb_free_stream_buffers(stream); 123 123 return -ENOMEM; 124 124 } 125 - deb_mem("buffer %d: %p (dma: %u)\n", 126 - stream->buf_num, stream->buf_list[stream->buf_num], stream->dma_addr[stream->buf_num]); 125 + deb_mem("buffer %d: %p (dma: %Lu)\n", 126 + stream->buf_num, 127 + stream->buf_list[stream->buf_num], (long long)stream->dma_addr[stream->buf_num]); 127 128 memset(stream->buf_list[stream->buf_num],0,size); 128 129 stream->state |= USB_STATE_URB_BUF; 129 130 }
+1 -1
drivers/media/radio/radio-gemtek-pci.c
··· 449 449 450 450 static void __exit gemtek_pci_cleanup_module( void ) 451 451 { 452 - return pci_unregister_driver( &gemtek_pci_driver ); 452 + pci_unregister_driver(&gemtek_pci_driver); 453 453 } 454 454 455 455 MODULE_AUTHOR( "Vladimir Shebordaev <vshebordaev@mail.ru>" );
+35
drivers/media/video/saa7134/saa7134-cards.c
··· 2994 2994 .amux = LINE1, 2995 2995 }, 2996 2996 }, 2997 + [SAA7134_BOARD_ASUS_EUROPA2_HYBRID] = { 2998 + .name = "Asus Europa2 OEM", 2999 + .audio_clock = 0x00187de7, 3000 + .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, 3001 + .radio_type = UNSET, 3002 + .tuner_addr = ADDR_UNSET, 3003 + .radio_addr = ADDR_UNSET, 3004 + .tda9887_conf = TDA9887_PRESENT| TDA9887_PORT1_ACTIVE | TDA9887_PORT2_ACTIVE, 3005 + .mpeg = SAA7134_MPEG_DVB, 3006 + .inputs = {{ 3007 + .name = name_tv, 3008 + .vmux = 3, 3009 + .amux = TV, 3010 + .tv = 1, 3011 + },{ 3012 + .name = name_comp1, 3013 + .vmux = 4, 3014 + .amux = LINE2, 3015 + },{ 3016 + .name = name_svideo, 3017 + .vmux = 8, 3018 + .amux = LINE2, 3019 + }}, 3020 + .radio = { 3021 + .name = name_radio, 3022 + .amux = LINE1, 3023 + }, 3024 + }, 2997 3025 }; 2998 3026 2999 3027 const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards); ··· 3625 3597 .subdevice = 0x2c00, 3626 3598 .driver_data = SAA7134_BOARD_AVERMEDIA_A16AR, 3627 3599 },{ 3600 + .vendor = PCI_VENDOR_ID_PHILIPS, 3601 + .device = PCI_DEVICE_ID_PHILIPS_SAA7134, 3602 + .subvendor = 0x1043, 3603 + .subdevice = 0x4860, 3604 + .driver_data = SAA7134_BOARD_ASUS_EUROPA2_HYBRID, 3605 + },{ 3628 3606 /* --- boards without eeprom + subsystem ID --- */ 3629 3607 .vendor = PCI_VENDOR_ID_PHILIPS, 3630 3608 .device = PCI_DEVICE_ID_PHILIPS_SAA7134, ··· 3905 3871 break; 3906 3872 case SAA7134_BOARD_PHILIPS_EUROPA: 3907 3873 case SAA7134_BOARD_VIDEOMATE_DVBT_300: 3874 + case SAA7134_BOARD_ASUS_EUROPA2_HYBRID: 3908 3875 /* The Philips EUROPA based hybrid boards have the tuner connected through 3909 3876 * the channel decoder. We have to make it transparent to find it 3910 3877 */
+42 -2
drivers/media/video/saa7134/saa7134-dvb.c
··· 874 874 875 875 /* ------------------------------------------------------------------ */ 876 876 877 + static int asus_p7131_dual_tuner_init(struct dvb_frontend *fe) 878 + { 879 + struct saa7134_dev *dev = fe->dvb->priv; 880 + static u8 data[] = { 0x3c, 0x33, 0x6a}; 881 + struct i2c_msg msg = {.addr=0x08, .flags=0, .buf=data, .len = sizeof(data)}; 882 + 883 + if (i2c_transfer(&dev->i2c_adap, &msg, 1) != 1) 884 + return -EIO; 885 + /* make sure the DVB-T antenna input is set */ 886 + saa_setl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x0200000); 887 + return 0; 888 + } 889 + 890 + static int asus_p7131_dual_tuner_sleep(struct dvb_frontend *fe) 891 + { 892 + struct saa7134_dev *dev = fe->dvb->priv; 893 + static u8 data[] = { 0x3c, 0x33, 0x68}; 894 + struct i2c_msg msg = {.addr=0x08, .flags=0, .buf=data, .len = sizeof(data)}; 895 + 896 + i2c_transfer(&dev->i2c_adap, &msg, 1); 897 + philips_tda827xa_tuner_sleep( 0x61, fe); 898 + /* reset antenna inputs for analog usage */ 899 + saa_clearl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x0200000); 900 + return 0; 901 + } 902 + 903 + /* ------------------------------------------------------------------ */ 904 + 877 905 static int lifeview_trio_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params) 878 906 { 879 907 int ret; ··· 1176 1148 &philips_tiger_config, 1177 1149 &dev->i2c_adap); 1178 1150 if (dev->dvb.frontend) { 1179 - dev->dvb.frontend->ops.tuner_ops.init = philips_tiger_tuner_init; 1180 - dev->dvb.frontend->ops.tuner_ops.sleep = philips_tiger_tuner_sleep; 1151 + dev->dvb.frontend->ops.tuner_ops.init = asus_p7131_dual_tuner_init; 1152 + dev->dvb.frontend->ops.tuner_ops.sleep = asus_p7131_dual_tuner_sleep; 1181 1153 dev->dvb.frontend->ops.tuner_ops.set_params = philips_tiger_tuner_set_params; 1182 1154 } 1183 1155 break; ··· 1268 1240 } 1269 1241 } 1270 1242 break; 1243 + case SAA7134_BOARD_ASUS_EUROPA2_HYBRID: 1244 + dev->dvb.frontend = tda10046_attach(&medion_cardbus, 1245 + &dev->i2c_adap); 1246 + if (dev->dvb.frontend) { 1247 + dev->original_demod_sleep = dev->dvb.frontend->ops.sleep; 1248 + dev->dvb.frontend->ops.sleep = philips_europa_demod_sleep; 1249 + dev->dvb.frontend->ops.tuner_ops.init = philips_fmd1216_tuner_init; 1250 + dev->dvb.frontend->ops.tuner_ops.sleep = philips_fmd1216_tuner_sleep; 1251 + dev->dvb.frontend->ops.tuner_ops.set_params = philips_fmd1216_tuner_set_params; 1252 + } 1253 + break; 1254 + 1271 1255 default: 1272 1256 printk("%s: Huh? unknown DVB card?\n",dev->name); 1273 1257 break;
+41 -54
drivers/media/video/saa7134/saa7134-tvaudio.c
··· 72 72 int carr; 73 73 } mainscan[] = { 74 74 { 75 - .name = "M", 76 - .std = V4L2_STD_NTSC | V4L2_STD_PAL_M, 75 + .name = "MN", 76 + .std = V4L2_STD_MN, 77 77 .carr = 4500, 78 78 },{ 79 - .name = "BG", 80 - .std = V4L2_STD_PAL_BG, 79 + .name = "BGH", 80 + .std = V4L2_STD_B | V4L2_STD_GH, 81 81 .carr = 5500, 82 82 },{ 83 83 .name = "I", ··· 85 85 .carr = 6000, 86 86 },{ 87 87 .name = "DKL", 88 - .std = V4L2_STD_PAL_DK | V4L2_STD_SECAM, 88 + .std = V4L2_STD_DK | V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC, 89 89 .carr = 6500, 90 90 } 91 91 }; ··· 93 93 static struct saa7134_tvaudio tvaudio[] = { 94 94 { 95 95 .name = "PAL-B/G FM-stereo", 96 - .std = V4L2_STD_PAL, 96 + .std = V4L2_STD_PAL_BG, 97 97 .mode = TVAUDIO_FM_BG_STEREO, 98 98 .carr1 = 5500, 99 99 .carr2 = 5742, 100 100 },{ 101 101 .name = "PAL-D/K1 FM-stereo", 102 - .std = V4L2_STD_PAL, 102 + .std = V4L2_STD_PAL_DK, 103 103 .carr1 = 6500, 104 104 .carr2 = 6258, 105 105 .mode = TVAUDIO_FM_BG_STEREO, 106 106 },{ 107 107 .name = "PAL-D/K2 FM-stereo", 108 - .std = V4L2_STD_PAL, 108 + .std = V4L2_STD_PAL_DK, 109 109 .carr1 = 6500, 110 110 .carr2 = 6742, 111 111 .mode = TVAUDIO_FM_BG_STEREO, 112 112 },{ 113 113 .name = "PAL-D/K3 FM-stereo", 114 - .std = V4L2_STD_PAL, 114 + .std = V4L2_STD_PAL_DK, 115 115 .carr1 = 6500, 116 116 .carr2 = 5742, 117 117 .mode = TVAUDIO_FM_BG_STEREO, 118 118 },{ 119 119 .name = "PAL-B/G NICAM", 120 - .std = V4L2_STD_PAL, 120 + .std = V4L2_STD_PAL_BG, 121 121 .carr1 = 5500, 122 122 .carr2 = 5850, 123 123 .mode = TVAUDIO_NICAM_FM, 124 124 },{ 125 125 .name = "PAL-I NICAM", 126 - .std = V4L2_STD_PAL, 126 + .std = V4L2_STD_PAL_I, 127 127 .carr1 = 6000, 128 128 .carr2 = 6552, 129 129 .mode = TVAUDIO_NICAM_FM, 130 130 },{ 131 131 .name = "PAL-D/K NICAM", 132 - .std = V4L2_STD_PAL, 132 + .std = V4L2_STD_PAL_DK, 133 133 .carr1 = 6500, 134 134 .carr2 = 5850, 135 135 .mode = TVAUDIO_NICAM_FM, 136 136 },{ 137 137 .name = "SECAM-L NICAM", 138 - .std = V4L2_STD_SECAM, 138 + .std = V4L2_STD_SECAM_L, 139 139 .carr1 = 6500, 140 140 .carr2 = 5850, 141 141 .mode = TVAUDIO_NICAM_AM, 142 142 },{ 143 - .name = "SECAM-L MONO", 144 - .std = V4L2_STD_SECAM, 143 + .name = "SECAM-D/K NICAM", 144 + .std = V4L2_STD_SECAM_DK, 145 145 .carr1 = 6500, 146 - .carr2 = -1, 147 - .mode = TVAUDIO_AM_MONO, 148 - },{ 149 - .name = "SECAM-D/K", 150 - .std = V4L2_STD_SECAM, 151 - .carr1 = 6500, 152 - .carr2 = -1, 153 - .mode = TVAUDIO_FM_MONO, 154 - },{ 155 - .name = "NTSC-M", 156 - .std = V4L2_STD_NTSC, 157 - .carr1 = 4500, 158 - .carr2 = -1, 159 - .mode = TVAUDIO_FM_MONO, 146 + .carr2 = 5850, 147 + .mode = TVAUDIO_NICAM_FM, 160 148 },{ 161 149 .name = "NTSC-A2 FM-stereo", 162 150 .std = V4L2_STD_NTSC, 163 151 .carr1 = 4500, 164 152 .carr2 = 4724, 165 153 .mode = TVAUDIO_FM_K_STEREO, 154 + },{ 155 + .name = "NTSC-M", 156 + .std = V4L2_STD_NTSC, 157 + .carr1 = 4500, 158 + .carr2 = -1, 159 + .mode = TVAUDIO_FM_MONO, 166 160 } 167 161 }; 168 162 #define TVAUDIO (sizeof(tvaudio)/sizeof(struct saa7134_tvaudio)) ··· 334 340 saa_writeb(SAA7134_STEREO_DAC_OUTPUT_SELECT, 0xa1); 335 341 saa_writeb(SAA7134_NICAM_CONFIG, 0x00); 336 342 break; 337 - case TVAUDIO_AM_MONO: 338 - saa_writeb(SAA7134_DEMODULATOR, 0x12); 339 - saa_writeb(SAA7134_DCXO_IDENT_CTRL, 0x00); 340 - saa_writeb(SAA7134_FM_DEEMPHASIS, 0x44); 341 - saa_writeb(SAA7134_STEREO_DAC_OUTPUT_SELECT, 0xa0); 342 - break; 343 343 case TVAUDIO_FM_SAT_STEREO: 344 344 /* not implemented (yet) */ 345 345 break; ··· 378 390 } 379 391 printk("\n"); 380 392 } 381 - 382 393 if (dev->tvnorm->id & scan->std) { 383 394 tvaudio_setcarrier(dev,scan->carr-90,scan->carr-90); 384 395 saa_readl(SAA7134_LEVEL_READOUT1 >> 2); ··· 413 426 414 427 switch (audio->mode) { 415 428 case TVAUDIO_FM_MONO: 416 - case TVAUDIO_AM_MONO: 417 429 return V4L2_TUNER_SUB_MONO; 418 430 case TVAUDIO_FM_K_STEREO: 419 431 case TVAUDIO_FM_BG_STEREO: ··· 481 495 482 496 switch (audio->mode) { 483 497 case TVAUDIO_FM_MONO: 484 - case TVAUDIO_AM_MONO: 485 498 /* nothing to do ... */ 486 499 break; 487 500 case TVAUDIO_FM_K_STEREO: ··· 541 556 542 557 if (1 == nscan) { 543 558 /* only one candidate -- skip scan ;) */ 559 + dprintk("only one main carrier candidate - skipping scan\n"); 544 560 max1 = 12345; 545 561 carrier = default_carrier; 546 562 } else { ··· 589 603 dev->automute = 0; 590 604 saa_andorb(SAA7134_STEREO_DAC_OUTPUT_SELECT, 0x30, 0x00); 591 605 saa7134_tvaudio_setmute(dev); 592 - 593 606 /* find the exact tv audio norm */ 594 607 for (audio = UNSET, i = 0; i < TVAUDIO; i++) { 595 608 if (dev->tvnorm->id != UNSET && ··· 596 611 continue; 597 612 if (tvaudio[i].carr1 != carrier) 598 613 continue; 599 - 614 + /* Note: at least the primary carrier is right here */ 600 615 if (UNSET == audio) 601 616 audio = i; 602 617 tvaudio_setmode(dev,&tvaudio[i],"trying"); ··· 611 626 if (UNSET == audio) 612 627 continue; 613 628 tvaudio_setmode(dev,&tvaudio[audio],"using"); 629 + 614 630 tvaudio_setstereo(dev,&tvaudio[audio],V4L2_TUNER_MODE_MONO); 615 631 dev->tvaudio = &tvaudio[audio]; 616 632 ··· 736 750 int mask; 737 751 struct saa7134_input *in; 738 752 739 - /* Hac 0506 route OSS sound simultanously */ 740 753 xbarin = 0x03; 741 754 switch (dev->input->amux) { 742 755 case TV: ··· 819 834 } else { 820 835 /* (let chip) scan for sound carrier */ 821 836 norms = 0; 822 - if (dev->tvnorm->id & V4L2_STD_PAL) { 823 - dprintk("PAL scan\n"); 824 - norms |= 0x2c; /* B/G + D/K + I */ 825 - } 826 - if (dev->tvnorm->id & V4L2_STD_NTSC) { 827 - dprintk("NTSC scan\n"); 828 - norms |= 0x40; /* M */ 829 - } 830 - if (dev->tvnorm->id & V4L2_STD_SECAM) { 831 - dprintk("SECAM scan\n"); 832 - norms |= 0x18; /* L + D/K */ 833 - } 837 + if (dev->tvnorm->id & (V4L2_STD_B | V4L2_STD_GH)) 838 + norms |= 0x04; 839 + if (dev->tvnorm->id & V4L2_STD_PAL_I) 840 + norms |= 0x20; 841 + if (dev->tvnorm->id & V4L2_STD_DK) 842 + norms |= 0x08; 843 + if (dev->tvnorm->id & V4L2_STD_MN) 844 + norms |= 0x40; 845 + if (dev->tvnorm->id & (V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC)) 846 + norms |= 0x10; 834 847 if (0 == norms) 835 848 norms = 0x7c; /* all */ 836 849 dprintk("scanning:%s%s%s%s%s\n", ··· 1017 1034 1018 1035 int saa7134_tvaudio_do_scan(struct saa7134_dev *dev) 1019 1036 { 1020 - if (dev->thread.pid >= 0) { 1037 + if (dev->input->amux != TV) { 1038 + dprintk("sound IF not in use, skipping scan\n"); 1039 + dev->automute = 0; 1040 + saa7134_tvaudio_setmute(dev); 1041 + } else if (dev->thread.pid >= 0) { 1021 1042 dev->thread.mode = UNSET; 1022 1043 dev->thread.scan2++; 1023 1044 wake_up_interruptible(&dev->thread.wq);
+58 -2
drivers/media/video/saa7134/saa7134-video.c
··· 43 43 static unsigned int noninterlaced = 1; 44 44 static unsigned int gbufsize = 720*576*4; 45 45 static unsigned int gbufsize_max = 720*576*4; 46 + static char secam[] = "--"; 46 47 module_param(video_debug, int, 0644); 47 48 MODULE_PARM_DESC(video_debug,"enable debug messages [video]"); 48 49 module_param(gbuffers, int, 0444); 49 50 MODULE_PARM_DESC(gbuffers,"number of capture buffers, range 2-32"); 50 51 module_param(noninterlaced, int, 0644); 51 52 MODULE_PARM_DESC(noninterlaced,"capture non interlaced video"); 53 + module_param_string(secam, secam, sizeof(secam), 0644); 54 + MODULE_PARM_DESC(secam, "force SECAM variant, either DK,L or Lc"); 55 + 52 56 53 57 #define dprintk(fmt, arg...) if (video_debug) \ 54 58 printk(KERN_DEBUG "%s/video: " fmt, dev->name , ## arg) ··· 283 279 .id = V4L2_STD_SECAM, 284 280 NORM_625_50, 285 281 286 - .sync_control = 0x18, /* old: 0x58, */ 282 + .sync_control = 0x18, 283 + .luma_control = 0x1b, 284 + .chroma_ctrl1 = 0xd1, 285 + .chroma_gain = 0x80, 286 + .chroma_ctrl2 = 0x00, 287 + .vgate_misc = 0x1c, 288 + 289 + },{ 290 + .name = "SECAM-DK", 291 + .id = V4L2_STD_SECAM_DK, 292 + NORM_625_50, 293 + 294 + .sync_control = 0x18, 295 + .luma_control = 0x1b, 296 + .chroma_ctrl1 = 0xd1, 297 + .chroma_gain = 0x80, 298 + .chroma_ctrl2 = 0x00, 299 + .vgate_misc = 0x1c, 300 + 301 + },{ 302 + .name = "SECAM-L", 303 + .id = V4L2_STD_SECAM_L, 304 + NORM_625_50, 305 + 306 + .sync_control = 0x18, 307 + .luma_control = 0x1b, 308 + .chroma_ctrl1 = 0xd1, 309 + .chroma_gain = 0x80, 310 + .chroma_ctrl2 = 0x00, 311 + .vgate_misc = 0x1c, 312 + 313 + },{ 314 + .name = "SECAM-Lc", 315 + .id = V4L2_STD_SECAM_LC, 316 + NORM_625_50, 317 + 318 + .sync_control = 0x18, 287 319 .luma_control = 0x1b, 288 320 .chroma_ctrl1 = 0xd1, 289 321 .chroma_gain = 0x80, ··· 1809 1769 { 1810 1770 v4l2_std_id *id = arg; 1811 1771 unsigned int i; 1772 + v4l2_std_id fixup; 1812 1773 1813 1774 for (i = 0; i < TVNORMS; i++) 1814 1775 if (*id == tvnorms[i].id) ··· 1820 1779 break; 1821 1780 if (i == TVNORMS) 1822 1781 return -EINVAL; 1823 - 1782 + if ((*id & V4L2_STD_SECAM) && (secam[0] != '-')) { 1783 + if (secam[0] == 'L' || secam[0] == 'l') { 1784 + if (secam[1] == 'C' || secam[1] == 'c') 1785 + fixup = V4L2_STD_SECAM_LC; 1786 + else 1787 + fixup = V4L2_STD_SECAM_L; 1788 + } else { 1789 + if (secam[0] == 'D' || secam[0] == 'd') 1790 + fixup = V4L2_STD_SECAM_DK; 1791 + else 1792 + fixup = V4L2_STD_SECAM; 1793 + } 1794 + for (i = 0; i < TVNORMS; i++) 1795 + if (fixup == tvnorms[i].id) 1796 + break; 1797 + } 1824 1798 mutex_lock(&dev->lock); 1825 1799 if (res_check(fh, RESOURCE_OVERLAY)) { 1826 1800 spin_lock_irqsave(&dev->slock,flags);
+1 -1
drivers/media/video/saa7134/saa7134.h
··· 61 61 TVAUDIO_FM_K_STEREO = 4, 62 62 TVAUDIO_NICAM_AM = 5, 63 63 TVAUDIO_NICAM_FM = 6, 64 - TVAUDIO_AM_MONO = 7 65 64 }; 66 65 67 66 enum saa7134_audio_in { ··· 226 227 #define SAA7134_BOARD_FLYDVBS_LR300 97 227 228 #define SAA7134_BOARD_PROTEUS_2309 98 228 229 #define SAA7134_BOARD_AVERMEDIA_A16AR 99 230 + #define SAA7134_BOARD_ASUS_EUROPA2_HYBRID 100 229 231 230 232 #define SAA7134_MAXBOARDS 8 231 233 #define SAA7134_INPUT_MAX 8
+2 -2
drivers/media/video/tveeprom.c
··· 222 222 { TUNER_TCL_2002MB, "TCL M2523_3DB_E"}, 223 223 { TUNER_ABSENT, "Philips 8275A"}, 224 224 { TUNER_ABSENT, "Microtune MT2060"}, 225 - { TUNER_ABSENT, "Philips FM1236 MK5"}, 226 - { TUNER_ABSENT, "Philips FM1216ME MK5"}, 225 + { TUNER_PHILIPS_FM1236_MK3, "Philips FM1236 MK5"}, 226 + { TUNER_PHILIPS_FM1216ME_MK3, "Philips FM1216ME MK5"}, 227 227 { TUNER_ABSENT, "TCL M2523_3DI_E"}, 228 228 { TUNER_ABSENT, "Samsung THPD5222FG30A"}, 229 229 /* 120-129 */
+6 -4
drivers/media/video/zoran_card.c
··· 1278 1278 1279 1279 zoran_num = 0; 1280 1280 while (zoran_num < BUZ_MAX && 1281 - (dev = 1282 - pci_find_device(PCI_VENDOR_ID_ZORAN, 1283 - PCI_DEVICE_ID_ZORAN_36057, dev)) != NULL) { 1281 + (dev = pci_get_device(PCI_VENDOR_ID_ZORAN, PCI_DEVICE_ID_ZORAN_36057, dev)) != NULL) { 1284 1282 card_num = card[zoran_num]; 1285 1283 zr = &zoran[zoran_num]; 1286 1284 memset(zr, 0, sizeof(struct zoran)); // Just in case if previous cycle failed ··· 1539 1541 goto zr_detach_vfe; 1540 1542 } 1541 1543 } 1542 - 1544 + /* Success so keep the pci_dev referenced */ 1545 + pci_dev_get(zr->pci_dev); 1543 1546 zoran_num++; 1544 1547 continue; 1545 1548 ··· 1562 1563 iounmap(zr->zr36057_mem); 1563 1564 continue; 1564 1565 } 1566 + if (dev) /* Clean up ref count on early exit */ 1567 + pci_dev_put(dev); 1568 + 1565 1569 if (zoran_num == 0) { 1566 1570 dprintk(1, KERN_INFO "No known MJPEG cards found.\n"); 1567 1571 }
+12 -9
drivers/media/video/zr36120.c
··· 1840 1840 struct zoran *ztv; 1841 1841 struct pci_dev *dev = NULL; 1842 1842 unsigned char revision; 1843 - int zoran_num=0; 1843 + int zoran_num = 0; 1844 1844 1845 - while ((dev = pci_find_device(PCI_VENDOR_ID_ZORAN,PCI_DEVICE_ID_ZORAN_36120, dev))) 1845 + while ((dev = pci_get_device(PCI_VENDOR_ID_ZORAN,PCI_DEVICE_ID_ZORAN_36120, dev))) 1846 1846 { 1847 1847 /* Ok, a ZR36120/ZR36125 found! */ 1848 1848 ztv = &zorans[zoran_num]; 1849 1849 ztv->dev = dev; 1850 1850 1851 1851 if (pci_enable_device(dev)) 1852 - return -EIO; 1852 + continue; 1853 1853 1854 1854 pci_read_config_byte(dev, PCI_CLASS_REVISION, &revision); 1855 1855 printk(KERN_INFO "zoran: Zoran %x (rev %d) ", ··· 1867 1867 { 1868 1868 iounmap(ztv->zoran_mem); 1869 1869 printk(KERN_ERR "zoran: Bad irq number or handler\n"); 1870 - return -EINVAL; 1870 + continue; 1871 1871 } 1872 1872 if (result==-EBUSY) 1873 1873 printk(KERN_ERR "zoran: IRQ %d busy, change your PnP config in BIOS\n",dev->irq); 1874 1874 if (result < 0) { 1875 1875 iounmap(ztv->zoran_mem); 1876 - return result; 1876 + continue; 1877 1877 } 1878 1878 /* Enable bus-mastering */ 1879 1879 pci_set_master(dev); 1880 - 1880 + /* Keep a reference */ 1881 + pci_dev_get(dev); 1881 1882 zoran_num++; 1882 1883 } 1883 1884 if(zoran_num) ··· 2042 2041 if (ztv->zoran_mem) 2043 2042 iounmap(ztv->zoran_mem); 2044 2043 2044 + /* Drop PCI device */ 2045 + pci_dev_put(ztv->dev); 2046 + 2045 2047 video_unregister_device(&ztv->video_dev); 2046 2048 video_unregister_device(&ztv->vbi_dev); 2047 2049 } ··· 2061 2057 2062 2058 handle_chipset(); 2063 2059 zoran_cards = find_zoran(); 2064 - if (zoran_cards<0) 2065 - /* no cards found, no need for a driver */ 2060 + if (zoran_cards <= 0) 2066 2061 return -EIO; 2067 2062 2068 2063 /* initialize Zorans */ 2069 2064 for (card=0; card<zoran_cards; card++) { 2070 - if (init_zoran(card)<0) { 2065 + if (init_zoran(card) < 0) { 2071 2066 /* only release the zorans we have registered */ 2072 2067 release_zoran(card); 2073 2068 return -EIO;