Skip to content

Commit

Permalink
V4L/DVB (8017): Ensure em28xx extensions only get run against devs th…
Browse files Browse the repository at this point in the history
…at support them

em28xx-audio.c
em28xx-dvb.c
 - Em28xx extensions should ensure they are being only loaded against devices
   that support them.  Deals with case where there are multiple em28xx
   devices, some of which have DVB (or ALSA) support and some do not.

Signed-off-by: Devin Heitmueller <devin.heitmueller@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
  • Loading branch information
Devin Heitmueller authored and Mauro Carvalho Chehab committed Jun 26, 2008
1 parent 1a78db8 commit df61918
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
12 changes: 12 additions & 0 deletions drivers/media/video/em28xx/em28xx-audio.c
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,12 @@ static int em28xx_audio_init(struct em28xx *dev)
static int devnr;
int ret, err;

if (dev->has_audio_class) {
/* This device does not support the extension (in this case
the device is expecting the snd-usb-audio module */
return 0;
}

printk(KERN_INFO "em28xx-audio.c: probing for em28x1 "
"non standard usbaudio\n");
printk(KERN_INFO "em28xx-audio.c: Copyright (C) 2006 Markus "
Expand Down Expand Up @@ -458,6 +464,12 @@ static int em28xx_audio_fini(struct em28xx *dev)
if (dev == NULL)
return 0;

if (dev->has_audio_class) {
/* This device does not support the extension (in this case
the device is expecting the snd-usb-audio module */
return 0;
}

if (dev->adev) {
snd_card_free(dev->adev->sndcard);
kfree(dev->adev);
Expand Down
10 changes: 10 additions & 0 deletions drivers/media/video/em28xx/em28xx-dvb.c
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,11 @@ static int dvb_init(struct em28xx *dev)
int result = 0;
struct em28xx_dvb *dvb;

if (!dev->has_dvb) {
/* This device does not support the extension */
return 0;
}

dvb = kzalloc(sizeof(struct em28xx_dvb), GFP_KERNEL);

if (dvb == NULL) {
Expand Down Expand Up @@ -444,6 +449,11 @@ static int dvb_init(struct em28xx *dev)

static int dvb_fini(struct em28xx *dev)
{
if (!dev->has_dvb) {
/* This device does not support the extension */
return 0;
}

if (dev->dvb) {
unregister_dvb(dev->dvb);
dev->dvb = NULL;
Expand Down

0 comments on commit df61918

Please sign in to comment.