From nobody Sat Jul 25 04:56:51 2026 Received: from mail-yx1-f53.google.com (mail-yx1-f53.google.com [74.125.224.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 366E135972 for ; Sat, 18 Jul 2026 02:05:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784340349; cv=none; b=DMTx2EIbr4q48T6WQb7Of4GE+g420PK9/uAucZorkIoFQ/wyEVu2fgEI1L4h11pefJ7JnZOFNoiX9v5Wr/ro1hmBhaqQeiDY+107lahyzYqyG9bZDlpyv+Wt4H8HuFfrZqRa9WRZNz7hsoEVHzIaYT+JCJuR8aoqA1NLFwtymhI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784340349; c=relaxed/simple; bh=0yUauwAuo7KwsaNZd38tPwSx5JIY9Ik380N6sogF4ig=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=X/zrJyIb5rg+5HisgN09BF/0EUXtshsq/QZ+ppyMHvt+B2T6OcPXpRZO1mUc/a6B0ULN7wdKkDShj1JnNdKnlje5hOtTdQtBkcEfMl/QTzK8703lv0QzsOBHWw0fHW/QzHT82y2+c7D/gZ9sDTk70nV3PMj9gyIKMKHObSj/ORg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=lHKRFxQT; arc=none smtp.client-ip=74.125.224.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="lHKRFxQT" Received: by mail-yx1-f53.google.com with SMTP id 956f58d0204a3-664ce3000e6so4386007d50.0 for ; Fri, 17 Jul 2026 19:05:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1784340345; x=1784945145; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:content-type :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to:content-type; bh=iOqNUcr0RPgPISLKJza4GrzUf3x35l3B/ya5sMd3KB8=; b=lHKRFxQTajnGdEMo88VC4JiiKSsEuBJYfuXpPLxVHsjBTz7zahMbegMgheVBf+U34c DCMD6J+ox7mG++X7OqIjszf7gomgleeicXzr1BJ8tIjGkKKc46LU4wdKJDolCp2H4Pg8 MGVs7dIBXXVWBKjIvxwULj41FlzY5/vCtb/Bk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784340345; x=1784945145; h=cc:to:message-id:content-transfer-encoding:content-type :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to:content-type; bh=iOqNUcr0RPgPISLKJza4GrzUf3x35l3B/ya5sMd3KB8=; b=fHiMCc9zWhH80ZxM2iQRtiv5Pvg5n/6afwEiZ+bR187tpM4vtm/vG7s/XQYbnETi+n O6Np+WhcmH+s/D6XxhsYTMcMLNfx9LyZohVAj9RVUuiKg014TxREv9bXYW04qwBBx/cj MZc8/Ny4vfGBnkWB474+EPLVnJPsBaoSNPRC+TQgCvZ7zvY85QuPjP1L3ERLLrQKrK0I sASPpF9VzQIJ1aF78IkxaWExT68kXbVo0QrzQXYDdKarCNsqgCJfRqhUB0Kh5pgUJw3y aYg9g/i/UUuBytUTnq1oNEJl6hLYqd2G3ILYqiddpwT5Oud3e/5ypeGFzWTp3N1evVXt vDqQ== X-Forwarded-Encrypted: i=1; AHgh+RoRBUqsUNjAmGT9/mJsTi0uz7XjK68WvpbCadmOCp3Kr1PRyrWZ6/OOrVfMto49ilKj/djTSu+CgcqvRyk=@vger.kernel.org X-Gm-Message-State: AOJu0YytIM6/l1PInJkZgICJXby6aoD/FP/7yWzFAFqrHp5PPL1njou3 InNZR2NxnvUslT3IEhYkaIvEUkc6t5TyU/FL+nTMJuO5gGpi82viA8mGuzluCnS5Ow== X-Gm-Gg: AfdE7cm7vnGeCGw/THMrsaZaPAWBo4tXTjPrDfiLht8zHkIcCtE+7nq3avVtbUinOk9 BVKrSZzsg4d+3DI+on7t07E6e7oCQ9Sw9RqzVFWOdvzwlOuugj92PSfhYdU1miCu7HqI7OjW7qS 6ZmdxJOKc9PtSqEvh7Ry3uiPKoSNSESzlE79VGZfcvAXaOPKxb+ndnL0zgzAN1pNyNp6sKnyo6I rBYbcnvrKvWwF7MwBbg0d5HmSuqo9X5ynMR4dBx/6yLZiV00izj+n4uq7FbYRPLnVEEtfVfNW1t dA6aC0MOgxr2b+ld15CiuL+RvtZwCAZX0axle7v4UlioK3CIrk9KZClqpC0Zo2rOn21O1DGhGee US3HirTq8BN0tWEVyd3CQhals3oMAaB/uP/REBmi7L0ifaUJaNGtPekbNh69f/qVJ8T5oMQfQs6 RQflkeqcU3SExM0wkxdstH+MWLZKwRlN5p5PnDv57h4utRHhjKNzpFDPmj7Ek8 X-Received: by 2002:a05:690e:80a:10b0:667:b08e:2a2 with SMTP id 956f58d0204a3-6683bc1d92bmr1125722d50.27.1784340345091; Fri, 17 Jul 2026 19:05:45 -0700 (PDT) Received: from ripwilburliny.c.googlers.com (188.63.48.34.bc.googleusercontent.com. [34.48.63.188]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-6683b80eb49sm2809821d50.11.2026.07.17.19.05.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jul 2026 19:05:44 -0700 (PDT) From: Steven 'Steve' Kendall Date: Sat, 18 Jul 2026 02:05:41 +0000 Subject: [PATCH v2] ALSA: hda/cs8409: Fix for Dell Cirrus audio jack detect Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260718-fix-headphone-plug-cirrus-dell-v2-1-f88121570d62@chromium.org> X-B4-Tracking: v=1; b=H4sIAHXfWmoC/4WNQQ6CMBBFr0Jm7RhaqERX3MOwwHagkwAlUyEaw t2tJK5dvp/89zaIJEwRbtkGQitHDlMCfcrA+nbqCdklBp3rS16pHDt+oafWzT5MhPOw9GhZZIn oaBjQUPEor641ndGQJLNQehyBe5PYc3wGeR+9VX3Xn7r4p14VKiysUaayrjTW1dZLGHkZz0F6a PZ9/wAQnHsMzwAAAA== X-Change-ID: 20260710-fix-headphone-plug-cirrus-dell-5e3b49da5f52 To: Jaroslav Kysela , Takashi Iwai Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, Steven 'Steve' Kendall X-Mailer: b4 0.15.2 On some models like the Dell Inspiron 15 3520, jack detection does not work. This patch switches to delayed work to fix jack plug on Chrome OS. --- This patch switches to a delayed work method for a specific Dell machine (Inspiron 15 3520). This fixes jack detection for this model. Signed-off-by: Steven 'Steve' Kendall --- Changes in v2: - Changes from v1 have been removed. - New approach uses delayed work and also solves the issue on this machine. - I'm now using the latest release of b4. Hopefully this addresses the form= atting issues I was having! - Link to v1: https://lore.kernel.org/r/20260713-fix-headphone-plug-cirrus-= dell-v1-1-3c5157cd45cd@chromium.org To: Jaroslav Kysela To: Takashi Iwai Cc: linux-sound@vger.kernel.org Cc: linux-kernel@vger.kernel.org --- sound/hda/codecs/cirrus/cs8409.c | 32 ++++++++++++++++++++++++++++++-- sound/hda/codecs/cirrus/cs8409.h | 1 + 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/sound/hda/codecs/cirrus/cs8409.c b/sound/hda/codecs/cirrus/cs8= 409.c index c43ff3ef75b6e..785946e29ce30 100644 --- a/sound/hda/codecs/cirrus/cs8409.c +++ b/sound/hda/codecs/cirrus/cs8409.c @@ -56,6 +56,10 @@ static int cs8409_parse_auto_config(struct hda_codec *co= dec) } =20 static void cs8409_disable_i2c_clock_worker(struct work_struct *work); +static void cs8409_jack_detect_work(struct work_struct *work); +static void cs42l42_run_jack_detect(struct sub_codec *cs42l42); +static int cs8409_i2c_read(struct sub_codec *scodec, unsigned int addr); +static int cs8409_i2c_write(struct sub_codec *scodec, unsigned int addr, u= nsigned int value); =20 static struct cs8409_spec *cs8409_alloc_spec(struct hda_codec *codec) { @@ -69,6 +73,7 @@ static struct cs8409_spec *cs8409_alloc_spec(struct hda_c= odec *codec) codec->power_save_node =3D 1; mutex_init(&spec->i2c_mux); INIT_DELAYED_WORK(&spec->i2c_clk_work, cs8409_disable_i2c_clock_worker); + INIT_DELAYED_WORK(&spec->jack_detect_work, cs8409_jack_detect_work); snd_hda_gen_spec_init(&spec->gen); =20 return spec; @@ -115,6 +120,27 @@ static void cs8409_disable_i2c_clock_worker(struct wor= k_struct *work) cs8409_disable_i2c_clock(spec->codec); } =20 +static void cs8409_jack_detect_work(struct work_struct *work) +{ + struct cs8409_spec *spec =3D container_of(work, struct cs8409_spec, jack_= detect_work.work); + struct sub_codec *cs42l42 =3D spec->scodecs[CS8409_CODEC0]; + + if (spec->init_done && spec->build_ctrl_done && !cs42l42->hp_jack_in) { + int reg_ts_status =3D cs8409_i2c_read(cs42l42, CS42L42_TSRS_PLUG_STATUS); + + if (reg_ts_status < 0) + return; + + if (((reg_ts_status & (CS42L42_TS_PLUG_MASK | CS42L42_TS_UNPLUG_MASK)) + >> CS42L42_TS_PLUG_SHIFT) =3D=3D CS42L42_TS_PLUG) { + cs42l42_run_jack_detect(cs42l42); + } else { + /* Make sure Tip Sense interrupts are unmasked */ + cs8409_i2c_write(cs42l42, CS42L42_TSRS_PLUG_INT_MASK, 0xF3); + } + } +} + /* * cs8409_enable_i2c_clock - Enable I2C clocks * @codec: the codec instance @@ -953,6 +979,7 @@ static void cs8409_remove(struct hda_codec *codec) =20 /* Cancel i2c clock disable timer, and disable clock if left enabled */ cancel_delayed_work_sync(&spec->i2c_clk_work); + cancel_delayed_work_sync(&spec->jack_detect_work); cs8409_disable_i2c_clock(codec); =20 snd_hda_gen_remove(codec); @@ -1025,6 +1052,7 @@ static int cs8409_cs42l42_suspend(struct hda_codec *c= odec) =20 /* Cancel i2c clock disable timer, and disable clock if left enabled */ cancel_delayed_work_sync(&spec->i2c_clk_work); + cancel_delayed_work_sync(&spec->jack_detect_work); cs8409_disable_i2c_clock(codec); =20 snd_hda_shutup_pins(codec); @@ -1198,7 +1226,7 @@ void cs8409_cs42l42_fixups(struct hda_codec *codec, c= onst struct hda_fixup *fix, spec->init_done =3D 1; if (spec->init_done && spec->build_ctrl_done && !spec->scodecs[CS8409_CODEC0]->hp_jack_in) - cs42l42_run_jack_detect(spec->scodecs[CS8409_CODEC0]); + schedule_delayed_work(&spec->jack_detect_work, msecs_to_jiffies(100)); break; case HDA_FIXUP_ACT_BUILD: spec->build_ctrl_done =3D 1; @@ -1209,7 +1237,7 @@ void cs8409_cs42l42_fixups(struct hda_codec *codec, c= onst struct hda_fixup *fix, */ if (spec->init_done && spec->build_ctrl_done && !spec->scodecs[CS8409_CODEC0]->hp_jack_in) - cs42l42_run_jack_detect(spec->scodecs[CS8409_CODEC0]); + schedule_delayed_work(&spec->jack_detect_work, msecs_to_jiffies(2000)); break; default: break; diff --git a/sound/hda/codecs/cirrus/cs8409.h b/sound/hda/codecs/cirrus/cs8= 409.h index be1714a84fff4..19ea0affb9764 100644 --- a/sound/hda/codecs/cirrus/cs8409.h +++ b/sound/hda/codecs/cirrus/cs8409.h @@ -339,6 +339,7 @@ struct cs8409_spec { unsigned int i2c_clck_enabled; unsigned int dev_addr; struct delayed_work i2c_clk_work; + struct delayed_work jack_detect_work; =20 unsigned int playback_started:1; unsigned int capture_started:1; --- base-commit: a13c140cc289c0b7b3770bce5b3ad42ab35074aa change-id: 20260710-fix-headphone-plug-cirrus-dell-5e3b49da5f52 Best regards, -- =20 Steven 'Steve' Kendall