From: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
To: linux-sound@vger.kernel.org
Cc: Takashi Iwai <tiwai@suse.de>, Jaroslav Kysela <perex@perex.cz>,
Pietro Caruso <pietrocaruso50@gmail.com>
Subject: [PATCH 01/10] ALSA: emu10k1: fix E-MU card dock presence monitoring
Date: Sun, 21 Apr 2024 22:46:58 +0200 [thread overview]
Message-ID: <20240421204707.2487686-2-oswald.buddenhagen@gmx.de> (raw)
In-Reply-To: <20240421204707.2487686-1-oswald.buddenhagen@gmx.de>
While there are two separate IRQ status bits for dock attach and detach,
the hardware appears to mix them up more or less randomly, making them
useless for tracking what actually happened. It is much safer to check
the dock status separately and proceed based on that, as the old polling
code did.
Note that the code assumes that only the dock can be hot-plugged - if
other option card bits changed, the logic would break.
Fixes: fbb64eedf5a3 (ALSA: emu10k1: make E-MU dock monitoring interrupt-driven)
Link: https://bugzilla.kernel.org/show_bug.cgi?id=218584
Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
---
sound/pci/emu10k1/emu10k1_main.c | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c
index de5c41e578e1..85f70368a27d 100644
--- a/sound/pci/emu10k1/emu10k1_main.c
+++ b/sound/pci/emu10k1/emu10k1_main.c
@@ -778,6 +778,11 @@ static void emu1010_firmware_work(struct work_struct *work)
msleep(10);
/* Unmute all. Default is muted after a firmware load */
snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE);
+ } else if (!(reg & EMU_HANA_OPTION_DOCK_ONLINE)) {
+ /* Audio Dock removed */
+ dev_info(emu->card->dev, "emu1010: Audio Dock detached\n");
+ /* The hardware auto-mutes all, so we unmute again */
+ snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE);
}
}
@@ -810,14 +815,12 @@ static void emu1010_interrupt(struct snd_emu10k1 *emu)
u32 sts;
snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, &sts);
- if (sts & EMU_HANA_IRQ_DOCK_LOST) {
- /* Audio Dock removed */
- dev_info(emu->card->dev, "emu1010: Audio Dock detached\n");
- /* The hardware auto-mutes all, so we unmute again */
- snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE);
- } else if (sts & EMU_HANA_IRQ_DOCK) {
+
+ // The distinction of the IRQ status bits is unreliable,
+ // so we dispatch later based on option card status.
+ if (sts & (EMU_HANA_IRQ_DOCK | EMU_HANA_IRQ_DOCK_LOST))
schedule_work(&emu->emu1010.firmware_work);
- }
+
if (sts & EMU_HANA_IRQ_WCLK_CHANGED)
schedule_work(&emu->emu1010.clock_work);
}
--
2.44.0.701.g2cf7baacf3.dirty
next prev parent reply other threads:[~2024-04-21 20:47 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-21 20:46 [PATCH 00/10] ALSA: emu10k1: fixes related to uploading firmware to the E-MU dock Oswald Buddenhagen
2024-04-21 20:46 ` Oswald Buddenhagen [this message]
2024-04-21 20:46 ` [PATCH 02/10] ALSA: emu10k1: factor out snd_emu1010_load_dock_firmware() Oswald Buddenhagen
2024-04-21 20:47 ` [PATCH 03/10] ALSA: emu10k1: move the whole GPIO event handling to the workqueue Oswald Buddenhagen
2024-04-21 20:47 ` [PATCH 04/10] ALSA: emu10k1: use mutex for E-MU FPGA access locking Oswald Buddenhagen
2024-04-21 20:47 ` [PATCH 05/10] ALSA: emu10k1: fix E-MU dock initialization Oswald Buddenhagen
2024-04-21 20:47 ` [PATCH 06/10] ALSA: emu10k1: simplify E-MU card FPGA reset sequence Oswald Buddenhagen
2024-04-21 20:47 ` [PATCH 07/10] ALSA: emu10k1: make snd_emu1010_load_firmware_entry() void Oswald Buddenhagen
2024-04-21 20:47 ` [PATCH 08/10] ALSA: emu10k1: move entering E-MU card FPGA programming mode Oswald Buddenhagen
2024-04-21 20:47 ` [PATCH 09/10] ALSA: emu10k1: move snd_emu1010_load_firmware_entry() to io.c Oswald Buddenhagen
2024-04-21 20:47 ` [PATCH 10/10] ALSA: emu10k1: make E-MU FPGA writes potentially more reliable Oswald Buddenhagen
2024-04-22 19:29 ` [PATCH 00/10] ALSA: emu10k1: fixes related to uploading firmware to the E-MU dock Takashi Iwai
2024-04-23 7:21 ` Oswald Buddenhagen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240421204707.2487686-2-oswald.buddenhagen@gmx.de \
--to=oswald.buddenhagen@gmx.de \
--cc=linux-sound@vger.kernel.org \
--cc=perex@perex.cz \
--cc=pietrocaruso50@gmail.com \
--cc=tiwai@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox