From nobody Thu Apr 2 14:13:11 2026 Received: from mail-dy1-f169.google.com (mail-dy1-f169.google.com [74.125.82.169]) (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 7692F318ED7 for ; Sat, 28 Mar 2026 04:53:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774673626; cv=none; b=UcNna7juP2mFUzL8Lc/A9aCMtzvL8DwdgI7MwJ13nmPV12ilAe5E1DM2FXBpiXvcQZ+SjvZs/Nb3ZgWgfWGfSPCkQ2rED7WkwO/gM3XxeeCJEUSYA0Y24GoMlFoyc5ouRiFvQsdxRA8VXYGUY4bB2Cn1UCq61SqlKYPgTipYkg4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774673626; c=relaxed/simple; bh=zUUT8ULAWNosXjYUL6tV4aiDqB1v42lE04t7YEhqVDo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=aWiYAAiypvBev4pJao0dY5idszEH+x85vS15lT6sZCyeKPlEk6AKFu6E/JbeSgq6t5nwpFOhamNwZz6l90dDo5DpZUxSQdythEItwEG1UaadAKUWwpRtkQcF9WwUdYfyHYveD/fZ6VgieFsKSgWyc4DEYYlzN+GYUKMLzWRnVtQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=CZgCfcF3; arc=none smtp.client-ip=74.125.82.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CZgCfcF3" Received: by mail-dy1-f169.google.com with SMTP id 5a478bee46e88-2ba9c484e5eso2591729eec.1 for ; Fri, 27 Mar 2026 21:53:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774673624; x=1775278424; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=Q1sOfaLhztum4unJqG+/ZJIMHXn2G0D6GNK5mWedLkA=; b=CZgCfcF31Va+EQa88Ayme3Ow229hDb4bZTWmJwVNxaKzzrMzKbpVS+tVYWOZI3SnBq IUUtlKuq4MuiikCIF9YkKkenKM5Z58inT5egTVukWSrqyvpky0zlLY6n64jwsRCuV1xL xmY4pPRMVhAYB2sfvCPyTh3IiN4jhGDKcqsz9QjV0+PhLJdCAK5+qg39NhvtXeARkrP7 Aaox/yG4QfkJylxt5SSl7nalWZunBTNeJpalJr6+XufdIbaqZTkxbchr49/hy/JiRZbu WTdzUfOWV62UZj9P3hsjTtgS/ONsaegAcbZby8Icj6/dhke+4DT5xUlg3uWnvFFFE6tx 6+XA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774673624; x=1775278424; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Q1sOfaLhztum4unJqG+/ZJIMHXn2G0D6GNK5mWedLkA=; b=gNrFMOFOd4k49xEipvcKnLew3HXpI8Dk2/X1JJy425Adw4gObxK0J4uEyfVKCt9Eim Zsl1lSAU7ewJE2F3YkxI+BS3tgeorwuSoQQ1SO2e3J/nTGtVWsLrplzCo/KFtE/w1Tx7 x3WYwoOPqoNqVd/ooKYvFnTS2nc/kYUTSciTi8qtqf3eZd6/JEFl2mziaMN8yhgaxQjo RR7gESio9ydPiRlR8LmQcMwKbdoUcB8uSQrHm7RrvVtY6DFRmDPL86qbHqAU9Bqw50Oz 8IkOLKq7AYTICB3YcOv1QHWcAMuFClu5RmprWTL7rAD7k1aMEUU5vGmu/66tBJ99d+dy DGqw== X-Forwarded-Encrypted: i=1; AJvYcCW8W5d+F6zQD9/3yBV9Pre5CzRu4IPC7MuEPevxG4rV7hHK/00MfY1tw/NYy3ngIC9Wz+g9ZmQMNcEZCa8=@vger.kernel.org X-Gm-Message-State: AOJu0YwsKKh62bmkhIcXEMLdLbx4yG5ES5U4L9TC2PhSINGLQKf1WNHU KdiraznhK1QL1pVd1Kcd80dYr8EOAeDhImZNr61CoGeVQ03jYjkq0W+R X-Gm-Gg: ATEYQzzDiWGSSUTgRQkWJwGxzGEmC8NfgLBnHYRR8YJX+tU4jv7O/2dhwO8Rn2S46yF +m4XIbWiO+Ne1rFggH6qWaWhF55WCGQkq5fxkSEVHAyvQt1aOxZz5z3csVXKSqU/O177/KjnvIx PZk0OT9OMPTCeUnl7f7EH+MXDSbebKUnXNaCD0atQQHRnLg4UK4dXTmxeyUgI3P7VAANLQ3QfMS biEG6VVrBCFDUwUjA83xEKKi5sfOnH6wghgVWu99QewT9FZFuIVKGuC9nhNtJmnzUzNxbwQtf/N hJthQl1fSi4IxrZGXL/Q1/uAW6HWSyHGOM2KaTOXEOes4IWCrGDNvfjnTl2u5RRxx8qWTHldLkr P5zWfLnMzGfC7w3pZWBAp/J+3kdwdc/+lU+7WxaFlo6UBan3N9wtrcgiw3WmQ+sJzBmf48YM0kG Orwkz2iI0/rlgvUK80ZYhnNPIKg/RAMD8B6GowI5RJ7q5kJ55cM0FroWY+opVwrK8+N4Gvm8/tW g== X-Received: by 2002:a05:7022:4a3:b0:128:d562:26be with SMTP id a92af1059eb24-12ab284be7cmr3240616c88.9.1774673624118; Fri, 27 Mar 2026 21:53:44 -0700 (PDT) Received: from [192.168.1.18] (177-4-161-78.user3p.v-tal.net.br. [177.4.161.78]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12ab9895722sm1165707c88.15.2026.03.27.21.53.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Mar 2026 21:53:43 -0700 (PDT) From: =?utf-8?q?C=C3=A1ssio_Gabriel?= Date: Sat, 28 Mar 2026 01:53:35 -0300 Subject: [PATCH] ALSA: hda/proc: show GPI and GPO state in codec proc output 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: <20260328-hda-proc-gpi-gpo-v1-1-fabb36564bee@gmail.com> X-B4-Tracking: v=1; b=H4sIAAAAAAAC/yXMyw5AMBCF4VeRWZukKq6vIhZVg7HQpkUkjXdXL M7iW5w/gCfH5KFNAjg62bPZIrI0Ab2obSbkMRqkkKXIZY3LqNA6o3G2HGewKYQqspoqpUuIN+t o4utLdv1vfwwr6f3twH0/Vf2HG3QAAAA= X-Change-ID: 20260328-hda-proc-gpi-gpo-950a518e7ac6 To: Takashi Iwai , Jaroslav Kysela Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?C=C3=A1ssio_Gabriel?= X-Mailer: b4 0.15.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=6173; i=cassiogabrielcontato@gmail.com; h=from:subject:message-id; bh=zUUT8ULAWNosXjYUL6tV4aiDqB1v42lE04t7YEhqVDo=; b=owGbwMvMwCV2IdZeKur/u2bG02pJDJnH4y7u2+PkxbIyfMaO+qCNXG/sV7zcs7FEjLPuCl89e 52GdRJDRykLgxgXg6yYIsvqpEWWe7oeXK2PW+EBM4eVCWQIAxenAEwkQY3hf8j7fxHsUkp9C7Ud tM/uU95YJX1Hp5U5/2/KGdPcjiLNt4wMeyc0Xn6U9Dk19eQjozLT2YVH1qhcT0wtFGFuadN1ZW7 hAgA= X-Developer-Key: i=cassiogabrielcontato@gmail.com; a=openpgp; fpr=AB62A239BC8AE0D57F5EA848D05D3F1A5AFFEE83 print_gpio() prints the GPIO capability header and the bidirectional GPIO state, but it never reports the separate GPI and GPO pins even though AC_PAR_GPIO_CAP exposes their counts. The HD-audio specification defines dedicated GPI and GPO verbs alongside the GPIO ones, so codecs with input-only or output-only general-purpose pins currently lose that state from /proc/asound/card*/codec#* altogether. Add the missing read verb definitions and extend print_gpio() to dump the GPI and GPO pins, too, while leaving the existing IO[] output unchanged. Signed-off-by: C=C3=A1ssio Gabriel --- include/sound/hda_verbs.h | 7 +++- sound/hda/common/proc.c | 100 +++++++++++++++++++++++++++++++-----------= ---- 2 files changed, 74 insertions(+), 33 deletions(-) diff --git a/include/sound/hda_verbs.h b/include/sound/hda_verbs.h index 006d358acce2..127e7016e4fe 100644 --- a/include/sound/hda_verbs.h +++ b/include/sound/hda_verbs.h @@ -56,7 +56,12 @@ enum { #define AC_VERB_GET_DIGI_CONVERT_1 0x0f0d #define AC_VERB_GET_DIGI_CONVERT_2 0x0f0e /* unused */ #define AC_VERB_GET_VOLUME_KNOB_CONTROL 0x0f0f -/* f10-f1a: GPIO */ +/* f10-f1a: GPI/GPO/GPIO */ +#define AC_VERB_GET_GPI_DATA 0x0f10 +#define AC_VERB_GET_GPI_WAKE_MASK 0x0f11 +#define AC_VERB_GET_GPI_UNSOLICITED_RSP_MASK 0x0f12 +#define AC_VERB_GET_GPI_STICKY_MASK 0x0f13 +#define AC_VERB_GET_GPO_DATA 0x0f14 #define AC_VERB_GET_GPIO_DATA 0x0f15 #define AC_VERB_GET_GPIO_MASK 0x0f16 #define AC_VERB_GET_GPIO_DIRECTION 0x0f17 diff --git a/sound/hda/common/proc.c b/sound/hda/common/proc.c index 3bc33c5617b2..c83796b13d3d 100644 --- a/sound/hda/common/proc.c +++ b/sound/hda/common/proc.c @@ -640,41 +640,78 @@ static void print_gpio(struct snd_info_buffer *buffer, { unsigned int gpio =3D param_read(codec, codec->core.afg, AC_PAR_GPIO_CAP); - unsigned int enable, direction, wake, unsol, sticky, data; - int i, max; + int i, gpio_max, gpo_max, gpi_max; + + gpio_max =3D gpio & AC_GPIO_IO_COUNT; + gpo_max =3D (gpio & AC_GPIO_O_COUNT) >> AC_GPIO_O_COUNT_SHIFT; + gpi_max =3D (gpio & AC_GPIO_I_COUNT) >> AC_GPIO_I_COUNT_SHIFT; + snd_iprintf(buffer, "GPIO: io=3D%d, o=3D%d, i=3D%d, " "unsolicited=3D%d, wake=3D%d\n", - gpio & AC_GPIO_IO_COUNT, - (gpio & AC_GPIO_O_COUNT) >> AC_GPIO_O_COUNT_SHIFT, - (gpio & AC_GPIO_I_COUNT) >> AC_GPIO_I_COUNT_SHIFT, + gpio_max, gpo_max, gpi_max, (gpio & AC_GPIO_UNSOLICITED) ? 1 : 0, (gpio & AC_GPIO_WAKE) ? 1 : 0); - max =3D gpio & AC_GPIO_IO_COUNT; - if (!max || max > 8) - return; - enable =3D snd_hda_codec_read(codec, nid, 0, - AC_VERB_GET_GPIO_MASK, 0); - direction =3D snd_hda_codec_read(codec, nid, 0, - AC_VERB_GET_GPIO_DIRECTION, 0); - wake =3D snd_hda_codec_read(codec, nid, 0, - AC_VERB_GET_GPIO_WAKE_MASK, 0); - unsol =3D snd_hda_codec_read(codec, nid, 0, - AC_VERB_GET_GPIO_UNSOLICITED_RSP_MASK, 0); - sticky =3D snd_hda_codec_read(codec, nid, 0, - AC_VERB_GET_GPIO_STICKY_MASK, 0); - data =3D snd_hda_codec_read(codec, nid, 0, - AC_VERB_GET_GPIO_DATA, 0); - for (i =3D 0; i < max; ++i) - snd_iprintf(buffer, - " IO[%d]: enable=3D%d, dir=3D%d, wake=3D%d, " - "sticky=3D%d, data=3D%d, unsol=3D%d\n", i, - (enable & (1<mixers); print_nid_array(buffer, codec, nid, &codec->nids); } @@ -940,4 +977,3 @@ int snd_hda_codec_proc_new(struct hda_codec *codec) snprintf(name, sizeof(name), "codec#%d", codec->core.addr); return snd_card_ro_proc_new(codec->card, name, codec, print_codec_info); } - --- base-commit: 0ce5115cb8f38e23044b04644fce7661336c1efc change-id: 20260328-hda-proc-gpi-gpo-950a518e7ac6 Best regards, -- =20 C=C3=A1ssio Gabriel