From: Takashi Iwai <tiwai@suse.de>
To: Huacai Chen <chenhuacai@loongson.cn>
Cc: Takashi Iwai <tiwai@suse.com>, Jaroslav Kysela <perex@perex.cz>,
Huacai Chen <chenhuacai@kernel.org>,
linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org,
Xuerui Wang <kernel@xen0n.name>,
Jiaxun Yang <jiaxun.yang@flygoat.com>,
stable@vger.kernel.org, Baoqi Zhang <zhangbaoqi@loongson.cn>,
Haowei Zheng <zhenghaowei@loongson.cn>
Subject: Re: [PATCH] ALSA: hda/hdmi: Use 'AC_PINSENSE_ELDV' to detect pinsense for Loongson
Date: Tue, 26 May 2026 16:31:04 +0200 [thread overview]
Message-ID: <87pl2ixmxj.wl-tiwai@suse.de> (raw)
In-Reply-To: <20260526111940.2347847-1-chenhuacai@loongson.cn>
On Tue, 26 May 2026 13:19:40 +0200,
Huacai Chen wrote:
>
> Due to a hardware defect, for Loongson PCI HDMI devices with a reversion
> ID of 2, the pin sense status must be determined via the ELD.
>
> Add a codec flag, eld_jack_detect, to indicate this case, and do special
> handlings in read_pin_sense().
>
> Cc: stable@vger.kernel.org
> Signed-off-by: Baoqi Zhang <zhangbaoqi@loongson.cn>
> Signed-off-by: Haowei Zheng <zhenghaowei@loongson.cn>
> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
> ---
> include/sound/hda_codec.h | 1 +
> sound/hda/codecs/hdmi/hdmi.c | 8 +++++++-
> sound/hda/common/jack.c | 4 ++++
> 3 files changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/include/sound/hda_codec.h b/include/sound/hda_codec.h
> index 24581080e26a..1a1fe7a904c3 100644
> --- a/include/sound/hda_codec.h
> +++ b/include/sound/hda_codec.h
> @@ -259,6 +259,7 @@ struct hda_codec {
> unsigned int forced_resume:1; /* forced resume for jack */
> unsigned int no_stream_clean_at_suspend:1; /* do not clean streams at suspend */
> unsigned int ctl_dev_id:1; /* old control element id build behaviour */
> + unsigned int eld_jack_detect:1; /* Machine jack-detection by ELD */
>
> unsigned long power_on_acct;
> unsigned long power_off_acct;
> diff --git a/sound/hda/codecs/hdmi/hdmi.c b/sound/hda/codecs/hdmi/hdmi.c
> index f20d1715da62..423cd9f683c6 100644
> --- a/sound/hda/codecs/hdmi/hdmi.c
> +++ b/sound/hda/codecs/hdmi/hdmi.c
> @@ -2285,6 +2285,7 @@ EXPORT_SYMBOL_NS_GPL(snd_hda_hdmi_acomp_init, "SND_HDA_CODEC_HDMI");
> enum {
> MODEL_GENERIC,
> MODEL_GF,
> + MODEL_LOONGSON,
> };
>
> static int generichdmi_probe(struct hda_codec *codec,
> @@ -2302,6 +2303,11 @@ static int generichdmi_probe(struct hda_codec *codec,
> if (id->driver_data == MODEL_GF)
> codec->no_sticky_stream = 1;
>
> + if (id->driver_data == MODEL_LOONGSON) {
> + if (codec->bus && codec->bus->pci->revision == 0x2)
> + codec->eld_jack_detect = 1; /* Jack-detection by ELD */
> + }
> +
> return 0;
> }
>
> @@ -2319,7 +2325,7 @@ static const struct hda_codec_ops generichdmi_codec_ops = {
> /*
> */
> static const struct hda_device_id snd_hda_id_generichdmi[] = {
> - HDA_CODEC_ID_MODEL(0x00147a47, "Loongson HDMI", MODEL_GENERIC),
> + HDA_CODEC_ID_MODEL(0x00147a47, "Loongson HDMI", MODEL_LOONGSON),
> HDA_CODEC_ID_MODEL(0x10951390, "SiI1390 HDMI", MODEL_GENERIC),
> HDA_CODEC_ID_MODEL(0x10951392, "SiI1392 HDMI", MODEL_GENERIC),
> HDA_CODEC_ID_MODEL(0x11069f84, "VX11 HDMI/DP", MODEL_GENERIC),
> diff --git a/sound/hda/common/jack.c b/sound/hda/common/jack.c
> index 98ba1c4d5ba4..1f0ebf9cd151 100644
> --- a/sound/hda/common/jack.c
> +++ b/sound/hda/common/jack.c
> @@ -58,6 +58,10 @@ static u32 read_pin_sense(struct hda_codec *codec, hda_nid_t nid, int dev_id)
> AC_VERB_GET_PIN_SENSE, dev_id);
> if (codec->inv_jack_detect)
> val ^= AC_PINSENSE_PRESENCE;
> + if (codec->eld_jack_detect) {
> + val &= ~AC_PINSENSE_PRESENCE;
> + val |= !!(val & AC_PINSENSE_ELDV) << 31;
> + }
IMO it's worth for a comment in the above; basically it's faking the
AC_PINSENSE_PRESENCE from AC_PINSENSE_ELDV bit, which explains the
magic shift number.
thanks,
Takashi
next prev parent reply other threads:[~2026-05-26 14:31 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-26 11:19 [PATCH] ALSA: hda/hdmi: Use 'AC_PINSENSE_ELDV' to detect pinsense for Loongson Huacai Chen
2026-05-26 14:31 ` Takashi Iwai [this message]
2026-05-26 16:42 ` Takashi Iwai
2026-05-27 8:34 ` Huacai Chen
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=87pl2ixmxj.wl-tiwai@suse.de \
--to=tiwai@suse.de \
--cc=chenhuacai@kernel.org \
--cc=chenhuacai@loongson.cn \
--cc=jiaxun.yang@flygoat.com \
--cc=kernel@xen0n.name \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=perex@perex.cz \
--cc=stable@vger.kernel.org \
--cc=tiwai@suse.com \
--cc=zhangbaoqi@loongson.cn \
--cc=zhenghaowei@loongson.cn \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.