From nobody Tue Dec 2 01:30:10 2025 Received: from mail-qt1-f174.google.com (mail-qt1-f174.google.com [209.85.160.174]) (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 232E82836BE for ; Fri, 21 Nov 2025 06:06:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763705173; cv=none; b=DaSvD4dkTkz7Fr1UtUHwhZGpc/vO9WDo6+ywmz/P8SU0DiDBSKnG7iSdyMQUMWUsWITImW5K/B27F0tdVBQjcdIGzzf+Zz+yqfTmT7oGZxpcBmPy/II+O2rjfITXD7ePXOEpcZtWfl+z9Mg8tzcHqW+NI5NUlMK66RPC+fNl9Dg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763705173; c=relaxed/simple; bh=GcROR96JF5hCwBimwpg3lqL3nafgW194peOGSoR1pUA=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=eOug0YXycSzce038ef7J0tUrTAU8Zzy22PVNtyWpFVh+WxZNXGr3MI1pCZorTsNrvXg8DnsCCu5w4DW25yjFpd01L551aLcwcIV7i9kxLw5dXYhEGsFyHk5XnoVmkxS0aFQACna96pQdLmkA6urzAEwG9mc8j070JKFpmuei4RM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=marek.ca; spf=pass smtp.mailfrom=marek.ca; dkim=pass (2048-bit key) header.d=marek.ca header.i=@marek.ca header.b=HASdJYUk; arc=none smtp.client-ip=209.85.160.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=marek.ca Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=marek.ca Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=marek.ca header.i=@marek.ca header.b="HASdJYUk" Received: by mail-qt1-f174.google.com with SMTP id d75a77b69052e-4eddfb8c7f5so13940851cf.1 for ; Thu, 20 Nov 2025 22:06:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marek.ca; s=google; t=1763705170; x=1764309970; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=La5vJNM1jWM5YiAHSf9v+V5WGA4ndFbbe8gW9RIdiFU=; b=HASdJYUkgCBJXUhfrnr5RVJ+DI+K7lQxO4c6FhtW0J+dJUD7pr4vvtslEvKOu8+VLU XHX9LLS7XAthXRnYTw+unVASUbHamogMwiQG5axrizfj+u/DOZBtSU+qloUCVzuXGtbD xOUcV2YEAls0Jh0GX+ArnUCUN0hf9/5xeip2s3J+YIDrdtt4eRPuKaD6O6IINLMFelEt Q43vQHMpbxeDnbcxvvVD/hO3nHFYC7NbmQpxnnaR5fBQcJTLnaiXGgC105dsiAhi+Lpv JUq/K4p5Yrz2XMQfQF12yXvinXM/Cc62xZICiQV0/BRdRTK82GikzZkbuQC6qejJ4UkF RspQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763705170; x=1764309970; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=La5vJNM1jWM5YiAHSf9v+V5WGA4ndFbbe8gW9RIdiFU=; b=ZY78dGrT+q3tH/2PR3Kq+vg3L4G3WgNX1S2iUF0sleoE5n9J+sfYipXp77wjgWGLkb mw3iq1kmPVge1jVTlb2mYdoCUyZhkn5xuipYwOzpQGTOh4R1RdRDDxaDbneiRERA6+7K UUzWF7YdyUXTBaz/DRw/h/TGaUsspxF284o/LghhJxOFgScWeSauHZzcCXaaAeuMNO94 VjFkLAaoSx9wQU3cwnSL5pnNp6UqnIUHft8WW6h4ddLmXFC8VoTJGMnRBgcqyAJ1guxO 90YnmblpvXgH/3z+vYAeuVTNimrScvL28oi8fsH5tcJrUWMHMyYGamOWBHpe6zcVOyzi VpKg== X-Forwarded-Encrypted: i=1; AJvYcCVFW4Hz7HsgneO/iSi8l3H9bK6HftUtdjFQCBd7dBRudKwQUJF982noSwr5nNVhVcaqntRf2MuUTLY1VBE=@vger.kernel.org X-Gm-Message-State: AOJu0Yw0Bib0EYEGPyT63gDHrIQohzz3DjwAz5gDouuIy3fNCsZq+Ijg hmH4x+cN9JXDshzorfZIToQtUsuxwbHuEWiQDpbQIPjuM2WzwOUjporzkfsYNCyyV4I= X-Gm-Gg: ASbGnctcmPI5Bq3y8IvLk8pE69F24nJ7GIJJCKnP3egojS7U7TClvB+wkszgurS+3j2 nd45KUHxToqu/monbUu9mDuTgzZdD2xFVQjmCCaOn9UKm1MBP13gbZjff11yk78X0kGY1fEPgrW xV3jom225GtsIZFakG3VtMPQPOhcD5ga5z630zdr+113cgZceDlWWlnw8d3AFTyiEBEcNNToW6r UqPTVtdBfGzG9IGovw24kCXoLGR/PPJQfoyv95FnCo9V4EjSxB4LKZZDcdAXauDX1scGaYyUkn5 NyHM1USu+kzuMI3axjtvO3DtpZZ7Vvfz7zT0k6NGtoXK8NBOebTyN1buXVc/vyTa0ZtbECwdCUt AQ9zSmmDTKgZ+/yWHNDhAHp3fPNU4tTvWnQiyjUTsNxL3X6TCCzoArnoUEhZXKCbtfhi9WopJSM gUU+/xa7cLZakWNKYfiwf20cC8LxBbEZXLG0gSiS/9UjevFa090NUEZF/ooLSdkmJu6t2esYuLE Z66 X-Google-Smtp-Source: AGHT+IFQdwMnwbIyaAZ09s2AcuDIc3ln2beikKLvPXoaLdoe4d+jYtLW2a8X7J1WM977sGr1YJ8SNA== X-Received: by 2002:ac8:5846:0:b0:4ed:213c:1582 with SMTP id d75a77b69052e-4ee588194e0mr19087991cf.7.1763705169906; Thu, 20 Nov 2025 22:06:09 -0800 (PST) Received: from localhost.localdomain (modemcable125.110-19-135.mc.videotron.ca. [135.19.110.125]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-4ee48d6aab4sm30245831cf.15.2025.11.20.22.06.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Nov 2025 22:06:08 -0800 (PST) From: Jonathan Marek To: linux-arm-msm@vger.kernel.org Cc: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , linux-sound@vger.kernel.org (open list:QCOM AUDIO (ASoC) DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v2] ASoC: codecs: lpass-wsa-macro: add RX4/RX5/RX6/RX7/RX8 Date: Fri, 21 Nov 2025 01:03:30 -0500 Message-ID: <20251121060437.26704-1-jonathan@marek.ca> X-Mailer: git-send-email 2.51.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 Content-Type: text/plain; charset="utf-8" This allows playback using the WSA_2CH AIF, which feeds RX4 and RX5 on both WSA and WSA2. RX6/RX7/RX8 can be tested with the regular WSA AIF (the 3rd intf is RX8, the 5th intf is RX6/7). Signed-off-by: Jonathan Marek --- v2: added RX6/RX7/RX8 this depends on the other patches from the original series sound/soc/codecs/lpass-wsa-macro.c | 96 +++++++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 2 deletions(-) diff --git a/sound/soc/codecs/lpass-wsa-macro.c b/sound/soc/codecs/lpass-ws= a-macro.c index e2e78ff6dd54e..5d440a839e733 100644 --- a/sound/soc/codecs/lpass-wsa-macro.c +++ b/sound/soc/codecs/lpass-wsa-macro.c @@ -300,6 +300,11 @@ enum { WSA_MACRO_RX_MIX, WSA_MACRO_RX_MIX0 =3D WSA_MACRO_RX_MIX, WSA_MACRO_RX_MIX1, + WSA_MACRO_RX4, + WSA_MACRO_RX5, + WSA_MACRO_RX6, + WSA_MACRO_RX7, + WSA_MACRO_RX8, WSA_MACRO_RX_MAX, }; =20 @@ -2228,6 +2233,16 @@ static const struct snd_kcontrol_new rx_mux[WSA_MACR= O_RX_MAX] =3D { wsa_macro_rx_mux_get, wsa_macro_rx_mux_put), SOC_DAPM_ENUM_EXT("WSA RX_MIX1 Mux", rx_mux_enum, wsa_macro_rx_mux_get, wsa_macro_rx_mux_put), + SOC_DAPM_ENUM_EXT("WSA RX4 Mux", rx_mux_enum, + wsa_macro_rx_mux_get, wsa_macro_rx_mux_put), + SOC_DAPM_ENUM_EXT("WSA RX5 Mux", rx_mux_enum, + wsa_macro_rx_mux_get, wsa_macro_rx_mux_put), + SOC_DAPM_ENUM_EXT("WSA RX6 Mux", rx_mux_enum, + wsa_macro_rx_mux_get, wsa_macro_rx_mux_put), + SOC_DAPM_ENUM_EXT("WSA RX7 Mux", rx_mux_enum, + wsa_macro_rx_mux_get, wsa_macro_rx_mux_put), + SOC_DAPM_ENUM_EXT("WSA RX8 Mux", rx_mux_enum, + wsa_macro_rx_mux_get, wsa_macro_rx_mux_put), }; =20 static int wsa_macro_vi_feed_mixer_get(struct snd_kcontrol *kcontrol, @@ -2410,6 +2425,16 @@ static const struct snd_soc_dapm_widget wsa_macro_da= pm_widgets_v2_5[] =3D { SND_SOC_DAPM_MUX("WSA_RX1 INP1", SND_SOC_NOPM, 0, 0, &rx1_prim_inp1_mux_v= 2_5), SND_SOC_DAPM_MUX("WSA_RX1 INP2", SND_SOC_NOPM, 0, 0, &rx1_prim_inp2_mux_v= 2_5), SND_SOC_DAPM_MUX("WSA_RX1 MIX INP", SND_SOC_NOPM, 0, 0, &rx1_mix_mux_v2_5= ), + SND_SOC_DAPM_MIXER("WSA RX4", SND_SOC_NOPM, 0, 0, NULL, 0), + SND_SOC_DAPM_MIXER("WSA RX5", SND_SOC_NOPM, 0, 0, NULL, 0), + SND_SOC_DAPM_MIXER("WSA RX6", SND_SOC_NOPM, 0, 0, NULL, 0), + SND_SOC_DAPM_MIXER("WSA RX7", SND_SOC_NOPM, 0, 0, NULL, 0), + SND_SOC_DAPM_MIXER("WSA RX8", SND_SOC_NOPM, 0, 0, NULL, 0), + SND_SOC_DAPM_MUX("WSA RX4 MUX", SND_SOC_NOPM, WSA_MACRO_RX4, 0, &rx_mux[W= SA_MACRO_RX4]), + SND_SOC_DAPM_MUX("WSA RX5 MUX", SND_SOC_NOPM, WSA_MACRO_RX5, 0, &rx_mux[W= SA_MACRO_RX5]), + SND_SOC_DAPM_MUX("WSA RX6 MUX", SND_SOC_NOPM, WSA_MACRO_RX6, 0, &rx_mux[W= SA_MACRO_RX6]), + SND_SOC_DAPM_MUX("WSA RX7 MUX", SND_SOC_NOPM, WSA_MACRO_RX7, 0, &rx_mux[W= SA_MACRO_RX7]), + SND_SOC_DAPM_MUX("WSA RX8 MUX", SND_SOC_NOPM, WSA_MACRO_RX8, 0, &rx_mux[W= SA_MACRO_RX8]), }; =20 static const struct snd_soc_dapm_route wsa_audio_map[] =3D { @@ -2529,6 +2554,64 @@ static const struct snd_soc_dapm_route wsa_audio_map= [] =3D { {"WSA_SPK2 OUT", NULL, "WSA_MCLK"}, }; =20 +static const struct snd_soc_dapm_route wsa_audio_map_v2_5[] =3D { + {"WSA RX4 MUX", "AIF1_PB", "WSA AIF1 PB"}, + {"WSA RX5 MUX", "AIF1_PB", "WSA AIF1 PB"}, + {"WSA RX6 MUX", "AIF1_PB", "WSA AIF1 PB"}, + {"WSA RX7 MUX", "AIF1_PB", "WSA AIF1 PB"}, + {"WSA RX8 MUX", "AIF1_PB", "WSA AIF1 PB"}, + {"WSA RX4 MUX", "AIF_MIX1_PB", "WSA AIF_MIX1 PB"}, + {"WSA RX5 MUX", "AIF_MIX1_PB", "WSA AIF_MIX1 PB"}, + {"WSA RX6 MUX", "AIF_MIX1_PB", "WSA AIF_MIX1 PB"}, + {"WSA RX7 MUX", "AIF_MIX1_PB", "WSA AIF_MIX1 PB"}, + {"WSA RX8 MUX", "AIF_MIX1_PB", "WSA AIF_MIX1 PB"}, + {"WSA RX4", NULL, "WSA RX4 MUX"}, + {"WSA RX5", NULL, "WSA RX5 MUX"}, + {"WSA RX6", NULL, "WSA RX6 MUX"}, + {"WSA RX7", NULL, "WSA RX7 MUX"}, + {"WSA RX8", NULL, "WSA RX8 MUX"}, + {"WSA_RX0 INP0", "RX4", "WSA RX4"}, + {"WSA_RX0 INP0", "RX5", "WSA RX5"}, + {"WSA_RX0 INP0", "RX6", "WSA RX6"}, + {"WSA_RX0 INP0", "RX7", "WSA RX7"}, + {"WSA_RX0 INP0", "RX8", "WSA RX8"}, + {"WSA_RX0 INP1", "RX4", "WSA RX4"}, + {"WSA_RX0 INP1", "RX5", "WSA RX5"}, + {"WSA_RX0 INP1", "RX6", "WSA RX6"}, + {"WSA_RX0 INP1", "RX7", "WSA RX7"}, + {"WSA_RX0 INP1", "RX8", "WSA RX8"}, + {"WSA_RX0 INP2", "RX4", "WSA RX4"}, + {"WSA_RX0 INP2", "RX5", "WSA RX5"}, + {"WSA_RX0 INP2", "RX6", "WSA RX6"}, + {"WSA_RX0 INP2", "RX7", "WSA RX7"}, + {"WSA_RX0 INP2", "RX8", "WSA RX8"}, + {"WSA_RX0 MIX INP", "RX4", "WSA RX4"}, + {"WSA_RX0 MIX INP", "RX5", "WSA RX5"}, + {"WSA_RX0 MIX INP", "RX6", "WSA RX6"}, + {"WSA_RX0 MIX INP", "RX7", "WSA RX7"}, + {"WSA_RX0 MIX INP", "RX8", "WSA RX8"}, + {"WSA_RX1 INP0", "RX4", "WSA RX4"}, + {"WSA_RX1 INP0", "RX5", "WSA RX5"}, + {"WSA_RX1 INP0", "RX6", "WSA RX6"}, + {"WSA_RX1 INP0", "RX7", "WSA RX7"}, + {"WSA_RX1 INP0", "RX8", "WSA RX8"}, + {"WSA_RX1 INP1", "RX4", "WSA RX4"}, + {"WSA_RX1 INP1", "RX5", "WSA RX5"}, + {"WSA_RX1 INP1", "RX6", "WSA RX6"}, + {"WSA_RX1 INP1", "RX7", "WSA RX7"}, + {"WSA_RX1 INP1", "RX8", "WSA RX8"}, + {"WSA_RX1 INP2", "RX4", "WSA RX4"}, + {"WSA_RX1 INP2", "RX5", "WSA RX5"}, + {"WSA_RX1 INP2", "RX6", "WSA RX6"}, + {"WSA_RX1 INP2", "RX7", "WSA RX7"}, + {"WSA_RX1 INP2", "RX8", "WSA RX8"}, + {"WSA_RX1 MIX INP", "RX4", "WSA RX4"}, + {"WSA_RX1 MIX INP", "RX5", "WSA RX5"}, + {"WSA_RX1 MIX INP", "RX6", "WSA RX6"}, + {"WSA_RX1 MIX INP", "RX7", "WSA RX7"}, + {"WSA_RX1 MIX INP", "RX8", "WSA RX8"}, +}; + static int wsa_swrm_clock(struct wsa_macro *wsa, bool enable) { struct regmap *regmap =3D wsa->regmap; @@ -2562,7 +2645,9 @@ static int wsa_macro_component_probe(struct snd_soc_c= omponent *comp) struct snd_soc_dapm_context *dapm =3D snd_soc_component_get_dapm(comp); struct wsa_macro *wsa =3D snd_soc_component_get_drvdata(comp); const struct snd_soc_dapm_widget *widgets; - unsigned int num_widgets; + const struct snd_soc_dapm_route *routes; + unsigned int num_widgets, num_routes; + int ret; =20 snd_soc_component_init_regmap(comp, wsa->regmap); =20 @@ -2587,6 +2672,7 @@ static int wsa_macro_component_probe(struct snd_soc_c= omponent *comp) case LPASS_CODEC_VERSION_2_1: widgets =3D wsa_macro_dapm_widgets_v2_1; num_widgets =3D ARRAY_SIZE(wsa_macro_dapm_widgets_v2_1); + num_routes =3D 0; break; case LPASS_CODEC_VERSION_2_5: case LPASS_CODEC_VERSION_2_6: @@ -2595,12 +2681,18 @@ static int wsa_macro_component_probe(struct snd_soc= _component *comp) case LPASS_CODEC_VERSION_2_9: widgets =3D wsa_macro_dapm_widgets_v2_5; num_widgets =3D ARRAY_SIZE(wsa_macro_dapm_widgets_v2_5); + routes =3D wsa_audio_map_v2_5; + num_routes =3D ARRAY_SIZE(wsa_audio_map_v2_5); break; default: return -EINVAL; } =20 - return snd_soc_dapm_new_controls(dapm, widgets, num_widgets); + ret =3D snd_soc_dapm_new_controls(dapm, widgets, num_widgets); + if (ret) + return ret; + + return snd_soc_dapm_add_routes(dapm, routes, num_routes); } =20 static int swclk_gate_enable(struct clk_hw *hw) --=20 2.51.0