* [PATCH 0/6] ASoC: rt-sdw: always cancel jack work on remove
@ 2026-09-25 14:50 Jiale Yao
2026-09-25 14:50 ` [PATCH 1/6] ASoC: rt5682-sdw: " Jiale Yao
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Jiale Yao @ 2026-09-25 14:50 UTC (permalink / raw)
To: Oder Chiou, Liam Girdwood, Mark Brown, Jaroslav Kysela,
Takashi Iwai, Pierre-Louis Bossart, Rander Wang, Bard Liao,
Shuming Fan, Jack Yu, linux-sound, linux-kernel
Cc: Jiale Yao
The Realtek SoundWire codec remove callbacks cancel jack work only while
hw_init is true. hw_init is cleared by update_status() when the slave
becomes unattached, but jack work can already have been queued by the
interrupt callback or jack initialization path. If remove runs after that
state transition, the pending work is not drained and can run after the
codec private data has been freed.
The same lifecycle problem can be triggered in each codec:
1. init queues jack work;
2. update_status(UNATTACHED) clears hw_init;
3. remove sees hw_init false and skips the cancel;
4. the work runs after private data teardown.
Each codec initializes its work objects during probe, so the remove paths
can cancel them unconditionally and pair the work lifetime with the codec
private data lifetime instead of the mutable hw_init state.
The series fixes rt5682-sdw, rt711-sdw, rt711-sdca-sdw, rt712-sdca-sdw,
rt721-sdca-sdw and rt722-sdca-sdw. Each patch is independent and applies
to the same baseline.
Jiale Yao (6):
ASoC: rt5682-sdw: always cancel jack work on remove
ASoC: rt711-sdw: always cancel jack work on remove
ASoC: rt711-sdca: always cancel jack work on remove
ASoC: rt712-sdca: always cancel jack work on remove
ASoC: rt721-sdca: always cancel jack work on remove
ASoC: rt722-sdca: always cancel jack work on remove
sound/soc/codecs/rt5682-sdw.c | 3 +--
sound/soc/codecs/rt711-sdca-sdw.c | 6 ++----
sound/soc/codecs/rt711-sdw.c | 8 +++-----
sound/soc/codecs/rt712-sdca-sdw.c | 6 ++----
sound/soc/codecs/rt721-sdca-sdw.c | 6 ++----
sound/soc/codecs/rt722-sdca-sdw.c | 6 ++----
6 files changed, 12 insertions(+), 23 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/6] ASoC: rt5682-sdw: always cancel jack work on remove
2026-09-25 14:50 [PATCH 0/6] ASoC: rt-sdw: always cancel jack work on remove Jiale Yao
@ 2026-09-25 14:50 ` Jiale Yao
2026-09-25 14:50 ` [PATCH 2/6] ASoC: rt711-sdw: " Jiale Yao
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Jiale Yao @ 2026-09-25 14:50 UTC (permalink / raw)
To: Oder Chiou, Liam Girdwood, Mark Brown, Jaroslav Kysela,
Takashi Iwai, Pierre-Louis Bossart, Bard Liao, Rander Wang,
linux-sound, linux-kernel
Cc: Jiale Yao
rt5682_sdw_remove() cancels jack_detect_work only when hw_init is true.
rt5682_update_status() clears hw_init when the SoundWire slave becomes
unattached, but jack_detect_work may already have been queued by
rt5682_interrupt_callback() or the jack initialization path.
A remove after that status update can therefore skip the cancellation and
leave delayed work pending after the codec private data has been freed.
The work object is initialized during probe, so cancel it unconditionally
instead of relying on the mutable hw_init state.
Fixes: ac63716da307 ("ASoC: Realtek/Maxim SoundWire codecs: disable pm_runtime on remove")
Signed-off-by: Jiale Yao <yaojiale02@163.com>
---
sound/soc/codecs/rt5682-sdw.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/sound/soc/codecs/rt5682-sdw.c b/sound/soc/codecs/rt5682-sdw.c
index 23c7d2a9dbee..5f2897c58ad7 100644
--- a/sound/soc/codecs/rt5682-sdw.c
+++ b/sound/soc/codecs/rt5682-sdw.c
@@ -704,8 +704,7 @@ static void rt5682_sdw_remove(struct sdw_slave *slave)
{
struct rt5682_priv *rt5682 = dev_get_drvdata(&slave->dev);
- if (rt5682->hw_init)
- cancel_delayed_work_sync(&rt5682->jack_detect_work);
+ cancel_delayed_work_sync(&rt5682->jack_detect_work);
pm_runtime_disable(&slave->dev);
}
--
2.34.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/6] ASoC: rt711-sdw: always cancel jack work on remove
2026-09-25 14:50 [PATCH 0/6] ASoC: rt-sdw: always cancel jack work on remove Jiale Yao
2026-09-25 14:50 ` [PATCH 1/6] ASoC: rt5682-sdw: " Jiale Yao
@ 2026-09-25 14:50 ` Jiale Yao
2026-09-25 14:50 ` [PATCH 3/6] ASoC: rt711-sdca: " Jiale Yao
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Jiale Yao @ 2026-09-25 14:50 UTC (permalink / raw)
To: Oder Chiou, Liam Girdwood, Mark Brown, Jaroslav Kysela,
Takashi Iwai, Pierre-Louis Bossart, Rander Wang, Bard Liao,
linux-sound, linux-kernel
Cc: Jiale Yao
rt711_sdw_remove() cancels the jack and calibration work only when
hw_init is true. rt711_update_status() clears hw_init when the SoundWire
slave becomes unattached, but work may already have been queued by
rt711_interrupt_callback() or the jack initialization path.
A remove after that status update can therefore skip the cancellation and
leave work pending after the codec private data has been freed.
The work objects are initialized during probe, so cancel them
unconditionally instead of relying on the mutable hw_init state.
Fixes: ac63716da307 ("ASoC: Realtek/Maxim SoundWire codecs: disable pm_runtime on remove")
Signed-off-by: Jiale Yao <yaojiale02@163.com>
---
sound/soc/codecs/rt711-sdw.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/sound/soc/codecs/rt711-sdw.c b/sound/soc/codecs/rt711-sdw.c
index 4ad2b1da1954..798d181d5c90 100644
--- a/sound/soc/codecs/rt711-sdw.c
+++ b/sound/soc/codecs/rt711-sdw.c
@@ -461,11 +461,9 @@ static void rt711_sdw_remove(struct sdw_slave *slave)
{
struct rt711_priv *rt711 = dev_get_drvdata(&slave->dev);
- if (rt711->hw_init) {
- cancel_delayed_work_sync(&rt711->jack_detect_work);
- cancel_delayed_work_sync(&rt711->jack_btn_check_work);
- cancel_work_sync(&rt711->calibration_work);
- }
+ cancel_delayed_work_sync(&rt711->jack_detect_work);
+ cancel_delayed_work_sync(&rt711->jack_btn_check_work);
+ cancel_work_sync(&rt711->calibration_work);
pm_runtime_disable(&slave->dev);
--
2.34.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 3/6] ASoC: rt711-sdca: always cancel jack work on remove
2026-09-25 14:50 [PATCH 0/6] ASoC: rt-sdw: always cancel jack work on remove Jiale Yao
2026-09-25 14:50 ` [PATCH 1/6] ASoC: rt5682-sdw: " Jiale Yao
2026-09-25 14:50 ` [PATCH 2/6] ASoC: rt711-sdw: " Jiale Yao
@ 2026-09-25 14:50 ` Jiale Yao
2026-09-25 14:50 ` [PATCH 4/6] ASoC: rt712-sdca: " Jiale Yao
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Jiale Yao @ 2026-09-25 14:50 UTC (permalink / raw)
To: Oder Chiou, Liam Girdwood, Mark Brown, Jaroslav Kysela,
Takashi Iwai, Pierre-Louis Bossart, Bard Liao, Rander Wang,
linux-sound, linux-kernel
Cc: Jiale Yao
rt711_sdca_sdw_remove() cancels the jack work only when hw_init is true.
rt711_sdca_update_status() clears hw_init when the SoundWire slave
becomes unattached, but jack work may already have been queued by
rt711_sdca_interrupt_callback() or the jack initialization path.
A remove after that status update can therefore skip the cancellation and
leave delayed work pending after the codec private data has been freed.
The work objects are initialized during probe, so cancel them
unconditionally instead of relying on the mutable hw_init state.
Fixes: ac63716da307 ("ASoC: Realtek/Maxim SoundWire codecs: disable pm_runtime on remove")
Signed-off-by: Jiale Yao <yaojiale02@163.com>
---
sound/soc/codecs/rt711-sdca-sdw.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/sound/soc/codecs/rt711-sdca-sdw.c b/sound/soc/codecs/rt711-sdca-sdw.c
index e292b28b029e..f74b193c720d 100644
--- a/sound/soc/codecs/rt711-sdca-sdw.c
+++ b/sound/soc/codecs/rt711-sdca-sdw.c
@@ -369,10 +369,8 @@ static void rt711_sdca_sdw_remove(struct sdw_slave *slave)
{
struct rt711_sdca_priv *rt711 = dev_get_drvdata(&slave->dev);
- if (rt711->hw_init) {
- cancel_delayed_work_sync(&rt711->jack_detect_work);
- cancel_delayed_work_sync(&rt711->jack_btn_check_work);
- }
+ cancel_delayed_work_sync(&rt711->jack_detect_work);
+ cancel_delayed_work_sync(&rt711->jack_btn_check_work);
pm_runtime_disable(&slave->dev);
--
2.34.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 4/6] ASoC: rt712-sdca: always cancel jack work on remove
2026-09-25 14:50 [PATCH 0/6] ASoC: rt-sdw: always cancel jack work on remove Jiale Yao
` (2 preceding siblings ...)
2026-09-25 14:50 ` [PATCH 3/6] ASoC: rt711-sdca: " Jiale Yao
@ 2026-09-25 14:50 ` Jiale Yao
2026-09-25 14:50 ` [PATCH 5/6] ASoC: rt721-sdca: " Jiale Yao
2026-09-25 14:50 ` [PATCH 6/6] ASoC: rt722-sdca: " Jiale Yao
5 siblings, 0 replies; 7+ messages in thread
From: Jiale Yao @ 2026-09-25 14:50 UTC (permalink / raw)
To: Oder Chiou, Liam Girdwood, Mark Brown, Jaroslav Kysela,
Takashi Iwai, Shuming Fan, linux-sound, linux-kernel
Cc: Jiale Yao
rt712_sdca_sdw_remove() cancels the jack work only when hw_init is true.
rt712_sdca_update_status() clears hw_init when the SoundWire slave
becomes unattached, but jack work may already have been queued by
rt712_sdca_interrupt_callback() or the jack initialization path.
A remove after that status update can therefore skip the cancellation and
leave delayed work pending after the codec private data has been freed.
The work objects are initialized during probe, so cancel them
unconditionally instead of relying on the mutable hw_init state.
Fixes: 6c39710da75c ("ASoC: rt712-sdca: Add RT712 SDCA driver for Jack and Amp topology")
Signed-off-by: Jiale Yao <yaojiale02@163.com>
---
sound/soc/codecs/rt712-sdca-sdw.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/sound/soc/codecs/rt712-sdca-sdw.c b/sound/soc/codecs/rt712-sdca-sdw.c
index edba0367d9ce..a9d4e0795175 100644
--- a/sound/soc/codecs/rt712-sdca-sdw.c
+++ b/sound/soc/codecs/rt712-sdca-sdw.c
@@ -386,10 +386,8 @@ static void rt712_sdca_sdw_remove(struct sdw_slave *slave)
{
struct rt712_sdca_priv *rt712 = dev_get_drvdata(&slave->dev);
- if (rt712->hw_init) {
- cancel_delayed_work_sync(&rt712->jack_detect_work);
- cancel_delayed_work_sync(&rt712->jack_btn_check_work);
- }
+ cancel_delayed_work_sync(&rt712->jack_detect_work);
+ cancel_delayed_work_sync(&rt712->jack_btn_check_work);
pm_runtime_disable(&slave->dev);
--
2.34.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 5/6] ASoC: rt721-sdca: always cancel jack work on remove
2026-09-25 14:50 [PATCH 0/6] ASoC: rt-sdw: always cancel jack work on remove Jiale Yao
` (3 preceding siblings ...)
2026-09-25 14:50 ` [PATCH 4/6] ASoC: rt712-sdca: " Jiale Yao
@ 2026-09-25 14:50 ` Jiale Yao
2026-09-25 14:50 ` [PATCH 6/6] ASoC: rt722-sdca: " Jiale Yao
5 siblings, 0 replies; 7+ messages in thread
From: Jiale Yao @ 2026-09-25 14:50 UTC (permalink / raw)
To: Oder Chiou, Liam Girdwood, Mark Brown, Jaroslav Kysela,
Takashi Iwai, Jack Yu, linux-sound, linux-kernel
Cc: Jiale Yao
rt721_sdca_sdw_remove() cancels the jack work only when hw_init is true.
rt721_sdca_update_status() clears hw_init when the SoundWire slave
becomes unattached, but jack work may already have been queued by
rt721_sdca_interrupt_callback() or the jack initialization path.
A remove after that status update can therefore skip the cancellation and
leave delayed work pending after the codec private data has been freed.
The work objects are initialized during probe, so cancel them
unconditionally instead of relying on the mutable hw_init state.
Fixes: 86ce355c1f9a ("ASoC: rt721-sdca: Add RT721 SDCA driver")
Signed-off-by: Jiale Yao <yaojiale02@163.com>
---
sound/soc/codecs/rt721-sdca-sdw.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/sound/soc/codecs/rt721-sdca-sdw.c b/sound/soc/codecs/rt721-sdca-sdw.c
index 910583162d3e..c65e4d1369c9 100644
--- a/sound/soc/codecs/rt721-sdca-sdw.c
+++ b/sound/soc/codecs/rt721-sdca-sdw.c
@@ -422,10 +422,8 @@ static void rt721_sdca_sdw_remove(struct sdw_slave *slave)
{
struct rt721_sdca_priv *rt721 = dev_get_drvdata(&slave->dev);
- if (rt721->hw_init) {
- cancel_delayed_work_sync(&rt721->jack_detect_work);
- cancel_delayed_work_sync(&rt721->jack_btn_check_work);
- }
+ cancel_delayed_work_sync(&rt721->jack_detect_work);
+ cancel_delayed_work_sync(&rt721->jack_btn_check_work);
if (rt721->first_hw_init)
pm_runtime_disable(&slave->dev);
--
2.34.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 6/6] ASoC: rt722-sdca: always cancel jack work on remove
2026-09-25 14:50 [PATCH 0/6] ASoC: rt-sdw: always cancel jack work on remove Jiale Yao
` (4 preceding siblings ...)
2026-09-25 14:50 ` [PATCH 5/6] ASoC: rt721-sdca: " Jiale Yao
@ 2026-09-25 14:50 ` Jiale Yao
5 siblings, 0 replies; 7+ messages in thread
From: Jiale Yao @ 2026-09-25 14:50 UTC (permalink / raw)
To: Oder Chiou, Liam Girdwood, Mark Brown, Jaroslav Kysela,
Takashi Iwai, Jack Yu, linux-sound, linux-kernel
Cc: Jiale Yao
rt722_sdca_sdw_remove() cancels the jack work only when hw_init is true.
rt722_sdca_update_status() clears hw_init when the SoundWire slave
becomes unattached, but jack work may already have been queued by
rt722_sdca_interrupt_callback() or the jack initialization path.
A remove after that status update can therefore skip the cancellation and
leave delayed work pending after the codec private data has been freed.
The work objects are initialized during probe, so cancel them
unconditionally instead of relying on the mutable hw_init state.
Fixes: 7f5d6036ca00 ("ASoC: rt722-sdca: Add RT722 SDCA driver")
Signed-off-by: Jiale Yao <yaojiale02@163.com>
---
sound/soc/codecs/rt722-sdca-sdw.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/sound/soc/codecs/rt722-sdca-sdw.c b/sound/soc/codecs/rt722-sdca-sdw.c
index 5bc9aed58d14..078255fbe1fc 100644
--- a/sound/soc/codecs/rt722-sdca-sdw.c
+++ b/sound/soc/codecs/rt722-sdca-sdw.c
@@ -471,10 +471,8 @@ static void rt722_sdca_sdw_remove(struct sdw_slave *slave)
{
struct rt722_sdca_priv *rt722 = dev_get_drvdata(&slave->dev);
- if (rt722->hw_init) {
- cancel_delayed_work_sync(&rt722->jack_detect_work);
- cancel_delayed_work_sync(&rt722->jack_btn_check_work);
- }
+ cancel_delayed_work_sync(&rt722->jack_detect_work);
+ cancel_delayed_work_sync(&rt722->jack_btn_check_work);
if (rt722->first_hw_init)
pm_runtime_disable(&slave->dev);
--
2.34.1
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-09-25 14:53 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-25 14:50 [PATCH 0/6] ASoC: rt-sdw: always cancel jack work on remove Jiale Yao
2026-09-25 14:50 ` [PATCH 1/6] ASoC: rt5682-sdw: " Jiale Yao
2026-09-25 14:50 ` [PATCH 2/6] ASoC: rt711-sdw: " Jiale Yao
2026-09-25 14:50 ` [PATCH 3/6] ASoC: rt711-sdca: " Jiale Yao
2026-09-25 14:50 ` [PATCH 4/6] ASoC: rt712-sdca: " Jiale Yao
2026-09-25 14:50 ` [PATCH 5/6] ASoC: rt721-sdca: " Jiale Yao
2026-09-25 14:50 ` [PATCH 6/6] ASoC: rt722-sdca: " Jiale Yao
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®