V4L/DVB (11979): em28xx: don't create audio device if not supported
authorDevin Heitmueller <dheitmueller@kernellabs.com>
Wed, 10 Jun 2009 02:40:39 +0000 (23:40 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 16 Jun 2009 22:07:46 +0000 (19:07 -0300)
In cases where the device does not actually provide a USB audio class *or*
vendor audio, do not load the driver that provides vendor audio support (such
as the KWorld 2800d).  Otherwise, the /dev/audio1 device file gets created and
users get confused.

Also, reworks the logic a bit so that we don't try to inspect the register
content if the register read failed entirely.

Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/em28xx/em28xx-core.c

index b7a2fed..c8d7ce8 100644 (file)
@@ -500,18 +500,21 @@ int em28xx_audio_setup(struct em28xx *dev)
 
        /* See how this device is configured */
        cfg = em28xx_read_reg(dev, EM28XX_R00_CHIPCFG);
-       if (cfg < 0)
+       em28xx_info("Config register raw data: 0x%02x\n", cfg);
+       if (cfg < 0) {
+               /* Register read error?  */
                cfg = EM28XX_CHIPCFG_AC97; /* Be conservative */
-       else
-               em28xx_info("Config register raw data: 0x%02x\n", cfg);
-
-       if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) ==
-                   EM28XX_CHIPCFG_I2S_3_SAMPRATES) {
+       } else if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) == 0x00) {
+               /* The device doesn't have vendor audio at all */
+               dev->has_alsa_audio = 0;
+               dev->audio_mode.has_audio = 0;
+               return 0;
+       } else if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) ==
+                  EM28XX_CHIPCFG_I2S_3_SAMPRATES) {
                em28xx_info("I2S Audio (3 sample rates)\n");
                dev->audio_mode.i2s_3rates = 1;
-       }
-       if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) ==
-                   EM28XX_CHIPCFG_I2S_5_SAMPRATES) {
+       } else if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) ==
+                  EM28XX_CHIPCFG_I2S_5_SAMPRATES) {
                em28xx_info("I2S Audio (5 sample rates)\n");
                dev->audio_mode.i2s_5rates = 1;
        }