summaryrefslogtreecommitdiff
path: root/drivers/media/video/zoran/zoran_card.c
diff options
context:
space:
mode:
authorTrent Piepho <xyzzy@speakeasy.org>2009-01-12 13:09:46 -0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-01-29 08:35:38 -0200
commit601139e08339b15997c6ae638dc5bf42c51ea204 (patch)
tree42e8e2b998b3f020ed7049ec9bc03f3439e79c0a /drivers/media/video/zoran/zoran_card.c
parent45bdcefea25cad2d7443f5b45a5319e2bd201048 (diff)
V4L/DVB (10223): zoran: Remove global device array
The driver was keeping a global array with an entry for each zoran device probed. It was a leftover from when the driver didn't dynamically allocate the driver data for each device. There was only one use left, in the video device's ->open() method, looking up the struct zoran for the opened device from the minor number. This can be done better with video_get_drvdata(). Since zoran_num is now only used in the pci driver's ->probe() method, it doesn't need to be an atomic_t and be static. There is a race if multiple zoran cards could be probed at the same time, but currently the probe method for a given driver is single threaded. Signed-off-by: Trent Piepho <xyzzy@speakeasy.org> Acked-by: Jean Delvare <khali@linux-fr.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/zoran/zoran_card.c')
-rw-r--r--drivers/media/video/zoran/zoran_card.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/drivers/media/video/zoran/zoran_card.c b/drivers/media/video/zoran/zoran_card.c
index ae96de08759d..117650fecd89 100644
--- a/drivers/media/video/zoran/zoran_card.c
+++ b/drivers/media/video/zoran/zoran_card.c
@@ -159,8 +159,7 @@ static struct pci_device_id zr36067_pci_tbl[] = {
};
MODULE_DEVICE_TABLE(pci, zr36067_pci_tbl);
-atomic_t zoran_num = ATOMIC_INIT(0); /* number of Buzs in use */
-struct zoran *zoran[BUZ_MAX];
+static unsigned int zoran_num; /* number of cards found */
/* videocodec bus functions ZR36060 */
static u32
@@ -1144,6 +1143,7 @@ zr36057_init (struct zoran *zr)
err = video_register_device(zr->video_dev, VFL_TYPE_GRABBER, video_nr[zr->id]);
if (err < 0)
goto exit_free;
+ video_set_drvdata(zr->video_dev, zr);
zoran_init_hardware(zr);
if (zr36067_debug > 2)
@@ -1275,7 +1275,7 @@ static int __devinit zoran_probe(struct pci_dev *pdev,
unsigned int nr;
- nr = atomic_inc_return(&zoran_num) - 1;
+ nr = zoran_num++;
if (nr >= BUZ_MAX) {
dprintk(1,
KERN_ERR
@@ -1291,7 +1291,6 @@ static int __devinit zoran_probe(struct pci_dev *pdev,
KERN_ERR
"%s: find_zr36057() - kzalloc failed\n",
ZORAN_NAME);
- /* The entry in zoran[] gets leaked */
return -ENOMEM;
}
zr->pci_dev = pdev;
@@ -1547,7 +1546,6 @@ static int __devinit zoran_probe(struct pci_dev *pdev,
goto zr_detach_vfe;
}
}
- zoran[nr] = zr;
/* take care of Natoma chipset and a revision 1 zr36057 */
if ((pci_pci_problems & PCIPCI_NATOMA) && zr->revision <= 1) {
@@ -1599,7 +1597,6 @@ static int __init zoran_init(void)
{
int res;
- memset(zoran, 0, sizeof(zoran));
printk(KERN_INFO "Zoran MJPEG board driver version %d.%d.%d\n",
MAJOR_VERSION, MINOR_VERSION, RELEASE_VERSION);