diff options
author | Alan Cox <alan@lxorguk.ukuu.org.uk> | 2006-10-03 19:44:12 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2006-10-04 07:06:50 -0400 |
commit | e491cbc8b2eabc8856bf890006604edd91b1cce2 (patch) | |
tree | ded403fd4d2a7e159ba001c66a4373695629df42 /drivers/media/video/zr36120.c | |
parent | a868b45dad04854e07bb1c7c81a73930098bc370 (diff) |
V4L/DVB (4707): 4linux: complete conversion to hotplug safe PCI API
Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/zr36120.c')
-rw-r--r-- | drivers/media/video/zr36120.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/drivers/media/video/zr36120.c b/drivers/media/video/zr36120.c index 9240638a0134..b5ffe53c40d8 100644 --- a/drivers/media/video/zr36120.c +++ b/drivers/media/video/zr36120.c | |||
@@ -1840,16 +1840,16 @@ int __init find_zoran(void) | |||
1840 | struct zoran *ztv; | 1840 | struct zoran *ztv; |
1841 | struct pci_dev *dev = NULL; | 1841 | struct pci_dev *dev = NULL; |
1842 | unsigned char revision; | 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 | /* Ok, a ZR36120/ZR36125 found! */ | 1847 | /* Ok, a ZR36120/ZR36125 found! */ |
1848 | ztv = &zorans[zoran_num]; | 1848 | ztv = &zorans[zoran_num]; |
1849 | ztv->dev = dev; | 1849 | ztv->dev = dev; |
1850 | 1850 | ||
1851 | if (pci_enable_device(dev)) | 1851 | if (pci_enable_device(dev)) |
1852 | return -EIO; | 1852 | continue; |
1853 | 1853 | ||
1854 | pci_read_config_byte(dev, PCI_CLASS_REVISION, &revision); | 1854 | pci_read_config_byte(dev, PCI_CLASS_REVISION, &revision); |
1855 | printk(KERN_INFO "zoran: Zoran %x (rev %d) ", | 1855 | printk(KERN_INFO "zoran: Zoran %x (rev %d) ", |
@@ -1867,17 +1867,18 @@ int __init find_zoran(void) | |||
1867 | { | 1867 | { |
1868 | iounmap(ztv->zoran_mem); | 1868 | iounmap(ztv->zoran_mem); |
1869 | printk(KERN_ERR "zoran: Bad irq number or handler\n"); | 1869 | printk(KERN_ERR "zoran: Bad irq number or handler\n"); |
1870 | return -EINVAL; | 1870 | continue; |
1871 | } | 1871 | } |
1872 | if (result==-EBUSY) | 1872 | if (result==-EBUSY) |
1873 | printk(KERN_ERR "zoran: IRQ %d busy, change your PnP config in BIOS\n",dev->irq); | 1873 | printk(KERN_ERR "zoran: IRQ %d busy, change your PnP config in BIOS\n",dev->irq); |
1874 | if (result < 0) { | 1874 | if (result < 0) { |
1875 | iounmap(ztv->zoran_mem); | 1875 | iounmap(ztv->zoran_mem); |
1876 | return result; | 1876 | continue; |
1877 | } | 1877 | } |
1878 | /* Enable bus-mastering */ | 1878 | /* Enable bus-mastering */ |
1879 | pci_set_master(dev); | 1879 | pci_set_master(dev); |
1880 | 1880 | /* Keep a reference */ | |
1881 | pci_dev_get(dev); | ||
1881 | zoran_num++; | 1882 | zoran_num++; |
1882 | } | 1883 | } |
1883 | if(zoran_num) | 1884 | if(zoran_num) |
@@ -2041,6 +2042,9 @@ void release_zoran(int max) | |||
2041 | if (ztv->zoran_mem) | 2042 | if (ztv->zoran_mem) |
2042 | iounmap(ztv->zoran_mem); | 2043 | iounmap(ztv->zoran_mem); |
2043 | 2044 | ||
2045 | /* Drop PCI device */ | ||
2046 | pci_dev_put(ztv->dev); | ||
2047 | |||
2044 | video_unregister_device(&ztv->video_dev); | 2048 | video_unregister_device(&ztv->video_dev); |
2045 | video_unregister_device(&ztv->vbi_dev); | 2049 | video_unregister_device(&ztv->vbi_dev); |
2046 | } | 2050 | } |
@@ -2057,13 +2061,12 @@ int __init zr36120_init(void) | |||
2057 | 2061 | ||
2058 | handle_chipset(); | 2062 | handle_chipset(); |
2059 | zoran_cards = find_zoran(); | 2063 | zoran_cards = find_zoran(); |
2060 | if (zoran_cards<0) | 2064 | if (zoran_cards <= 0) |
2061 | /* no cards found, no need for a driver */ | ||
2062 | return -EIO; | 2065 | return -EIO; |
2063 | 2066 | ||
2064 | /* initialize Zorans */ | 2067 | /* initialize Zorans */ |
2065 | for (card=0; card<zoran_cards; card++) { | 2068 | for (card=0; card<zoran_cards; card++) { |
2066 | if (init_zoran(card)<0) { | 2069 | if (init_zoran(card) < 0) { |
2067 | /* only release the zorans we have registered */ | 2070 | /* only release the zorans we have registered */ |
2068 | release_zoran(card); | 2071 | release_zoran(card); |
2069 | return -EIO; | 2072 | return -EIO; |