From nobody Sun Sep 14 22:52:05 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9FDAAC001DF for ; Wed, 2 Aug 2023 17:59:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234364AbjHBR73 (ORCPT ); Wed, 2 Aug 2023 13:59:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47320 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234234AbjHBR6q (ORCPT ); Wed, 2 Aug 2023 13:58:46 -0400 Received: from mail-wm1-x336.google.com (mail-wm1-x336.google.com [IPv6:2a00:1450:4864:20::336]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 42CB326A6 for ; Wed, 2 Aug 2023 10:58:30 -0700 (PDT) Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-3fe24dd8898so1327695e9.2 for ; Wed, 02 Aug 2023 10:58:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1690999108; x=1691603908; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9tKsk9a4HVB+S55ZghOAU5wwthWw0fqP95yqfmB/mNM=; b=ckvh3W+OUeJ7+Uj1dkezwP69ylQ4jMSPMBJAdJM8Qlk7PWfAU/iOqdG1Rto7DD6h55 TqRRRZA6G96XtSZG/TvqpfP6S9xE34giI8AiFf/cvdIOe2WM2PzJbA2f8KMxQLeZA8NY MJEbnD9jaQlUV98eo+bRqc/UNiDvhIOVbwUZBwB7ZFOUwvos6y8dLPgXEIczMURVTOTx IKKPpCOBg+PaSefqX/zuPfeiKXa6OaEXDj9aus9LSPN8rybAFjnO0PZZB79gr66Zce9l qkjZZTH2ZzDQprQEK+4EjTVTp2lyz7Hh0Q8BjMu5YsnBEIMMahrRrKNXkZ+ZWRFduINF AvuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690999108; x=1691603908; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9tKsk9a4HVB+S55ZghOAU5wwthWw0fqP95yqfmB/mNM=; b=igmRZXdTq7Bn20TN9Y9QGFsXJR/d1jySHN6195PSj42mKUD/1VpqDhjIvI+gvTkHdg 1u8BfHA+CzuH7YIKF+ghBuch5lpIOCodSNN75L5AaZD7tVtmS2f5JvbMxKWFcaOCDn0C T2+AUBK9aDDt6Dg/E1QRSUsvQ4MZzKkcyBPOCmtg49gr2NHiXy9QAR8kpMYAWPq3z4cE bxnaU6HOx/ocY5q3nnKDBHiuUjzpy8fWTaN+Cd7xCwLPzErb6i71ozfAMUAyGgnKVXcI bTCD4MX4m+QVGWk249iKMm+TZVZMZ3/iM6T1gWotU3i7WRzNCIytILpRzu5yvPl4GPaM lNrw== X-Gm-Message-State: ABy/qLazXhRvdyHOVaZ2aPt55GcVCgjQp5Fm2kZ5TBOyp9ODAlokwN1T +urN/3GBnV/aX02FQ/A9SKw= X-Google-Smtp-Source: APBJJlEF8cOYoAUKlqHUoCLkwAgJHMLQWtyJ153NH2rnGdVlOoGWexOb01jQilkY+8Ksa0H6pPGIwQ== X-Received: by 2002:a05:600c:2297:b0:3fe:6f7:60aa with SMTP id 23-20020a05600c229700b003fe06f760aamr5661333wmf.12.1690999107976; Wed, 02 Aug 2023 10:58:27 -0700 (PDT) Received: from ALPER-PC.. ([178.233.24.1]) by smtp.gmail.com with ESMTPSA id l23-20020a7bc457000000b003fe20db88ebsm2192439wmi.31.2023.08.02.10.58.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 10:58:27 -0700 (PDT) From: Alper Nebi Yasak To: alsa-devel@alsa-project.org Cc: Cezary Rojewski , Alper Nebi Yasak , Mark Brown , Liam Girdwood , Takashi Iwai , AngeloGioacchino Del Regno , Jaroslav Kysela , linux-kernel@vger.kernel.org, Akihiko Odaki , Pierre-Louis Bossart , Matthias Brugger , =?UTF-8?q?N=C3=ADcolas=20F=20=2E=20R=20=2E=20A=20=2E=20Prado?= Subject: [PATCH 17/27] ASoC: mediatek: mt8183-mt6358-ts3a227-max98357: Map missing jack kcontrols Date: Wed, 2 Aug 2023 20:57:27 +0300 Message-Id: <20230802175737.263412-18-alpernebiyasak@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230802175737.263412-1-alpernebiyasak@gmail.com> References: <20230802175737.263412-1-alpernebiyasak@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This driver does not properly map jack pins to kcontrols that PulseAudio and PipeWire need to handle jack detection events. The TS3A227 component used here can detect Headphones and Headset Mic connections. Expose each to userspace as kcontrols and add the necessary widgets. Signed-off-by: Alper Nebi Yasak --- Tested on a "Cozmo" Chromebook. .../mt8183/mt8183-mt6358-ts3a227-max98357.c | 53 ++++++++++++++++--- 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/sound/soc/mediatek/mt8183/mt8183-mt6358-ts3a227-max98357.c b/s= ound/soc/mediatek/mt8183/mt8183-mt6358-ts3a227-max98357.c index ce9aedde7e1e..850f4d949d97 100644 --- a/sound/soc/mediatek/mt8183/mt8183-mt6358-ts3a227-max98357.c +++ b/sound/soc/mediatek/mt8183/mt8183-mt6358-ts3a227-max98357.c @@ -592,11 +592,38 @@ static struct snd_soc_dai_link mt8183_mt6358_ts3a227_= dai_links[] =3D { }, }; =20 +static const +struct snd_kcontrol_new mt8183_mt6358_ts3a227_max98357_snd_controls[] =3D { + SOC_DAPM_PIN_SWITCH("Headphone"), + SOC_DAPM_PIN_SWITCH("Headset Mic"), +}; + +static const +struct snd_soc_dapm_widget mt8183_mt6358_ts3a227_max98357_dapm_widgets[] = =3D { + SND_SOC_DAPM_HP("Headphone", NULL), + SND_SOC_DAPM_MIC("Headset Mic", NULL), +}; + +static struct snd_soc_jack_pin mt8183_mt6358_ts3a227_max98357_jack_pins[] = =3D { + { + .pin =3D "Headphone", + .mask =3D SND_JACK_HEADPHONE, + }, + { + .pin =3D "Headset Mic", + .mask =3D SND_JACK_MICROPHONE, + }, +}; + static struct snd_soc_card mt8183_mt6358_ts3a227_max98357_card =3D { .name =3D "mt8183_mt6358_ts3a227_max98357", .owner =3D THIS_MODULE, .dai_link =3D mt8183_mt6358_ts3a227_dai_links, .num_links =3D ARRAY_SIZE(mt8183_mt6358_ts3a227_dai_links), + .controls =3D mt8183_mt6358_ts3a227_max98357_snd_controls, + .num_controls =3D ARRAY_SIZE(mt8183_mt6358_ts3a227_max98357_snd_controls), + .dapm_widgets =3D mt8183_mt6358_ts3a227_max98357_dapm_widgets, + .num_dapm_widgets =3D ARRAY_SIZE(mt8183_mt6358_ts3a227_max98357_dapm_widg= ets), }; =20 static struct snd_soc_card mt8183_mt6358_ts3a227_max98357b_card =3D { @@ -604,6 +631,10 @@ static struct snd_soc_card mt8183_mt6358_ts3a227_max98= 357b_card =3D { .owner =3D THIS_MODULE, .dai_link =3D mt8183_mt6358_ts3a227_dai_links, .num_links =3D ARRAY_SIZE(mt8183_mt6358_ts3a227_dai_links), + .controls =3D mt8183_mt6358_ts3a227_max98357_snd_controls, + .num_controls =3D ARRAY_SIZE(mt8183_mt6358_ts3a227_max98357_snd_controls), + .dapm_widgets =3D mt8183_mt6358_ts3a227_max98357_dapm_widgets, + .num_dapm_widgets =3D ARRAY_SIZE(mt8183_mt6358_ts3a227_max98357_dapm_widg= ets), }; =20 static struct snd_soc_codec_conf mt8183_mt6358_ts3a227_rt1015_amp_conf[] = =3D { @@ -624,6 +655,10 @@ static struct snd_soc_card mt8183_mt6358_ts3a227_rt101= 5_card =3D { .num_links =3D ARRAY_SIZE(mt8183_mt6358_ts3a227_dai_links), .codec_conf =3D mt8183_mt6358_ts3a227_rt1015_amp_conf, .num_configs =3D ARRAY_SIZE(mt8183_mt6358_ts3a227_rt1015_amp_conf), + .controls =3D mt8183_mt6358_ts3a227_max98357_snd_controls, + .num_controls =3D ARRAY_SIZE(mt8183_mt6358_ts3a227_max98357_snd_controls), + .dapm_widgets =3D mt8183_mt6358_ts3a227_max98357_dapm_widgets, + .num_dapm_widgets =3D ARRAY_SIZE(mt8183_mt6358_ts3a227_max98357_dapm_widg= ets), }; =20 static struct snd_soc_card mt8183_mt6358_ts3a227_rt1015p_card =3D { @@ -631,6 +666,10 @@ static struct snd_soc_card mt8183_mt6358_ts3a227_rt101= 5p_card =3D { .owner =3D THIS_MODULE, .dai_link =3D mt8183_mt6358_ts3a227_dai_links, .num_links =3D ARRAY_SIZE(mt8183_mt6358_ts3a227_dai_links), + .controls =3D mt8183_mt6358_ts3a227_max98357_snd_controls, + .num_controls =3D ARRAY_SIZE(mt8183_mt6358_ts3a227_max98357_snd_controls), + .dapm_widgets =3D mt8183_mt6358_ts3a227_max98357_dapm_widgets, + .num_dapm_widgets =3D ARRAY_SIZE(mt8183_mt6358_ts3a227_max98357_dapm_widg= ets), }; =20 static int @@ -641,12 +680,14 @@ mt8183_mt6358_ts3a227_max98357_headset_init(struct sn= d_soc_component *component) snd_soc_card_get_drvdata(component->card); =20 /* Enable Headset and 4 Buttons Jack detection */ - ret =3D snd_soc_card_jack_new(component->card, - "Headset Jack", - SND_JACK_HEADSET | - SND_JACK_BTN_0 | SND_JACK_BTN_1 | - SND_JACK_BTN_2 | SND_JACK_BTN_3, - &priv->headset_jack); + ret =3D snd_soc_card_jack_new_pins(component->card, + "Headset Jack", + SND_JACK_HEADSET | + SND_JACK_BTN_0 | SND_JACK_BTN_1 | + SND_JACK_BTN_2 | SND_JACK_BTN_3, + &priv->headset_jack, + mt8183_mt6358_ts3a227_max98357_jack_pins, + ARRAY_SIZE(mt8183_mt6358_ts3a227_max98357_jack_pins)); if (ret) return ret; =20 --=20 2.40.1