ALSA: emu10k1: handle dock disconnects
authorMichael Gernoth <michael@gernoth.net>
Sat, 11 Apr 2015 12:34:44 +0000 (14:34 +0200)
committerTakashi Iwai <tiwai@suse.de>
Sat, 11 Apr 2015 15:29:19 +0000 (17:29 +0200)
When the dock on an E-mu 1010 card is disconnected, all outputs get
muted by the hardware. Add logic to detect a disconnect and unmute.

Signed-off-by: Michael Gernoth <michael@gernoth.net>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/emu10k1/emu10k1_main.c

index 4887299011efcccb157466ea4d01f91b1eb43cbc..54079f5d5673951ad739c81e2e679d3864f0ea79 100644 (file)
@@ -707,6 +707,7 @@ static int emu1010_firmware_thread(void *data)
 {
        struct snd_emu10k1 *emu = data;
        u32 tmp, tmp2, reg;
+       u32 last_reg = 0;
        int err;
 
        for (;;) {
@@ -782,7 +783,15 @@ static int emu1010_firmware_thread(void *data)
                        msleep(10);
                        /* Unmute all. Default is muted after a firmware load */
                        snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE);
+               } else if (!reg && last_reg) {
+                       /* Audio Dock removed */
+                       dev_info(emu->card->dev,
+                                "emu1010: Audio Dock detached\n");
+                       /* Unmute all */
+                       snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE);
                }
+
+               last_reg = reg;
        }
        dev_info(emu->card->dev, "emu1010: firmware thread stopping\n");
        return 0;