diff options
| author | Michael Gernoth <michael@gernoth.net> | 2015-04-11 08:34:44 -0400 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2015-04-11 11:29:19 -0400 |
| commit | fa863b2d5e62e2ea7d86ccfa9a888bd28dd79ebe (patch) | |
| tree | d5e0b32cd80f676e4e995a44173c52a76239cfd1 | |
| parent | 3e21a19d1d6775591415efd5617375ba42c41bbd (diff) | |
ALSA: emu10k1: handle dock disconnects
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>
| -rw-r--r-- | sound/pci/emu10k1/emu10k1_main.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c index 4887299011ef..54079f5d5673 100644 --- a/sound/pci/emu10k1/emu10k1_main.c +++ b/sound/pci/emu10k1/emu10k1_main.c | |||
| @@ -707,6 +707,7 @@ static int emu1010_firmware_thread(void *data) | |||
| 707 | { | 707 | { |
| 708 | struct snd_emu10k1 *emu = data; | 708 | struct snd_emu10k1 *emu = data; |
| 709 | u32 tmp, tmp2, reg; | 709 | u32 tmp, tmp2, reg; |
| 710 | u32 last_reg = 0; | ||
| 710 | int err; | 711 | int err; |
| 711 | 712 | ||
| 712 | for (;;) { | 713 | for (;;) { |
| @@ -782,7 +783,15 @@ static int emu1010_firmware_thread(void *data) | |||
| 782 | msleep(10); | 783 | msleep(10); |
| 783 | /* Unmute all. Default is muted after a firmware load */ | 784 | /* Unmute all. Default is muted after a firmware load */ |
| 784 | snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE); | 785 | snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE); |
| 786 | } else if (!reg && last_reg) { | ||
| 787 | /* Audio Dock removed */ | ||
| 788 | dev_info(emu->card->dev, | ||
| 789 | "emu1010: Audio Dock detached\n"); | ||
| 790 | /* Unmute all */ | ||
| 791 | snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE); | ||
| 785 | } | 792 | } |
| 793 | |||
| 794 | last_reg = reg; | ||
| 786 | } | 795 | } |
| 787 | dev_info(emu->card->dev, "emu1010: firmware thread stopping\n"); | 796 | dev_info(emu->card->dev, "emu1010: firmware thread stopping\n"); |
| 788 | return 0; | 797 | return 0; |
