From nobody Mon Jun 8 21:52:46 2026 Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9A500352018; Tue, 26 May 2026 11:19:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=114.242.206.163 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779794398; cv=none; b=ZcNM1qFDdC73p6FrEYgU/TA2clpx5xlGfYhC1J8j4gnNRiEX1AxlRGFwW5fT8PUsiOtXbz2CIytfcUkufCFdvpR4AWdeov6LT38Mh2MUJD7i9eeglYwY7Qo/1YkjeqItuFy0tbtiVoSHrmOWpKzPKqd/K+D6knOn8Jw24Jn7h2c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779794398; c=relaxed/simple; bh=WQ4SdafjrpdwH5ugIfFTqVp5aZ5MRpu9oaEXrPEbYjk=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=CvyQOvPmG886tnC+dorbWwq2aBpxUb8+zrDrmXr8/G/4PTljxHgSP6+TVXcmzqZY01y3zr/PVYCVw/0yhVwKRVnD/FRSc+cW5KDtPjRJHbsAqEeSwTtZHaCJiO9eO+9dM8NCBDGMwCBIPk90hVJ8Zujh3h/WpDoCjj0w+n+d31g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn; spf=pass smtp.mailfrom=loongson.cn; arc=none smtp.client-ip=114.242.206.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [223.64.68.59]) by gateway (Coremail) with SMTP id _____8CxRXjYgRVqQGENAA--.13838S3; Tue, 26 May 2026 19:19:52 +0800 (CST) Received: from kernelserver (unknown [223.64.68.59]) by front1 (Coremail) with SMTP id qMiowJBx58DTgRVqGomRAA--.57362S2; Tue, 26 May 2026 19:19:51 +0800 (CST) From: Huacai Chen To: Takashi Iwai , Jaroslav Kysela , Huacai Chen Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, Xuerui Wang , Jiaxun Yang , Huacai Chen , stable@vger.kernel.org, Baoqi Zhang , Haowei Zheng Subject: [PATCH] ALSA: hda/hdmi: Use 'AC_PINSENSE_ELDV' to detect pinsense for Loongson Date: Tue, 26 May 2026 19:19:40 +0800 Message-ID: <20260526111940.2347847-1-chenhuacai@loongson.cn> X-Mailer: git-send-email 2.52.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: qMiowJBx58DTgRVqGomRAA--.57362S2 X-CM-SenderInfo: hfkh0x5xdftxo6or00hjvr0hdfq/ X-Coremail-Antispam: 1Uk129KBj93XoWxZr17Cw48tr43GryxAF1rZrc_yoW5Aw1xpF n5urWxKrW3tr4Iyrs5ArykuF1SkayrC3W7K34xt34UZrs5KrWrXw1qqrWUXF4akr9IgFyx Zry2gr95tay3JabCm3ZEXasCq-sJn29KB7ZKAUJUUUUr529EdanIXcx71UUUUU7KY7ZEXa sCq-sGcSsGvfJ3Ic02F40EFcxC0VAKzVAqx4xG6I80ebIjqfuFe4nvWSU5nxnvy29KBjDU 0xBIdaVrnRJUUU9Yb4IE77IF4wAFF20E14v26r1j6r4UM7CY07I20VC2zVCF04k26cxKx2 IYs7xG6rWj6s0DM7CIcVAFz4kK6r1Y6r17M28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48v e4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_JFI_Gr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI 0_Jr0_Gr1l84ACjcxK6I8E87Iv67AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVCY1x0267AK xVW8Jr0_Cr1UM2kKe7AKxVWUXVWUAwAS0I0E0xvYzxvE52x082IY62kv0487Mc804VCY07 AIYIkI8VC2zVCFFI0UMc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWU XVWUAwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7V AKI48JMxAIw28IcxkI7VAKI48JMxC20s026xCaFVCjc4AY6r1j6r4UMxCIbckI1I0E14v2 6r1Y6r17MI8I3I0E5I8CrVAFwI0_Jr0_Jr4lx2IqxVCjr7xvwVAFwI0_JrI_JrWlx4CE17 CEb7AF67AKxVWUtVW8ZwCIc40Y0x0EwIxGrwCI42IY6xIIjxv20xvE14v26r1j6r1xMIIF 0xvE2Ix0cI8IcVCY1x0267AKxVWUJVW8JwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIx AIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z280aVCY1x0267AKxVWUJVW8JbIYCTnIWIev Ja73UjIFyTuYvjxU2MKZDUUUU Content-Type: text/plain; charset="utf-8" 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 Signed-off-by: Haowei Zheng Signed-off-by: Huacai Chen --- 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 sus= pend */ unsigned int ctl_dev_id:1; /* old control element id build behaviour */ + unsigned int eld_jack_detect:1; /* Machine jack-detection by ELD */ =20 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_HD= A_CODEC_HDMI"); enum { MODEL_GENERIC, MODEL_GF, + MODEL_LOONGSON, }; =20 static int generichdmi_probe(struct hda_codec *codec, @@ -2302,6 +2303,11 @@ static int generichdmi_probe(struct hda_codec *codec, if (id->driver_data =3D=3D MODEL_GF) codec->no_sticky_stream =3D 1; =20 + if (id->driver_data =3D=3D MODEL_LOONGSON) { + if (codec->bus && codec->bus->pci->revision =3D=3D 0x2) + codec->eld_jack_detect =3D 1; /* Jack-detection by ELD */ + } + return 0; } =20 @@ -2319,7 +2325,7 @@ static const struct hda_codec_ops generichdmi_codec_o= ps =3D { /* */ static const struct hda_device_id snd_hda_id_generichdmi[] =3D { - 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_n= id_t nid, int dev_id) AC_VERB_GET_PIN_SENSE, dev_id); if (codec->inv_jack_detect) val ^=3D AC_PINSENSE_PRESENCE; + if (codec->eld_jack_detect) { + val &=3D ~AC_PINSENSE_PRESENCE; + val |=3D !!(val & AC_PINSENSE_ELDV) << 31; + } return val; } =20 --=20 2.52.0