From nobody Tue Dec 2 00:05:24 2025 Received: from mail-qt1-f181.google.com (mail-qt1-f181.google.com [209.85.160.181]) (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 EC78B2DAFDE for ; Tue, 25 Nov 2025 22:40:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764110421; cv=none; b=D0EVSIOdkdMIRAKMD8IBsg1PwXltJUME0JqJ8m1PX8mbGDryARGAF748/Judu3xeptmZyYa3iDWbxDr2Nn3kr2uQcv1UigVnm6MnvEGhrhjsWKzPRMgtDxdSEiZXjhkcvGJP31MpApBNYsWoCfi2VVzwPfZv3yRsRXtWlfB35Iw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764110421; c=relaxed/simple; bh=gnX9JW5f46EXyEPEqpCvdvIki/uTlKEZkFS8ea24FGE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RsVCDFWwHCBsUNLhKvOZk/5CitwKHFSePbwh/gX1CDRd2vn+CFzbrZM1VQ6Plq2bGc/6ADnYhWUTBdD9YVaZWZP+uiCLyfqZVVxJvEgQwBqrfkG1t/FIq8KcaUaeQzozgw2bPyMbklpYOLt+rjdlO0DF8piMtqm8hAAMcuBTwqA= 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=B9E7jy5I; arc=none smtp.client-ip=209.85.160.181 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="B9E7jy5I" Received: by mail-qt1-f181.google.com with SMTP id d75a77b69052e-4ee13dc0c52so49559321cf.2 for ; Tue, 25 Nov 2025 14:40:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marek.ca; s=google; t=1764110417; x=1764715217; darn=vger.kernel.org; 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=GpUlgL7OoQH+YHHyuLPwxyegT1nfFlDHYmrN4C1UCdM=; b=B9E7jy5I4mgHiDBUChkCJ/APrbv0Y7Epuk2cZFRVpptRWZfNKCrGt86ZJYWUM1IARI tEXFjchr7GuZX81boJNnXaVYF4Jx0D6PR16Xoe8EPyvzqn6YZFK7FtgDfozriMX66Oaw +UOtNotDrVNZwJMTQoTpnmZEXsv0BJQZSrgSaCs1IIBAfqMbp6v3Ut9p/fMyR1Ic0+Vz pZHQZEnJ3M0M+MzV0gJAhtJCaNr6XQ49c02shtMJaWWSvTNLxdQEfBDGj50VveRnXn7g RPG/OBmJmj61AE7oqC7+2FBsliuhGZm2o0HrkxDrtpaS6wCx5S7GHj/OhD50BQI8rXAP mCCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764110417; x=1764715217; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=GpUlgL7OoQH+YHHyuLPwxyegT1nfFlDHYmrN4C1UCdM=; b=vDruux5WAorM9sT2D2wgP50ff2ntKbCWeEIlQjVYa/wds4Dm34157j/eyEeeceUEnO GvBzBdLaUWQN72Wm4e+UGVumyRSMEixCXPTIUoERoO1Owk6Uqp7Mx+o8ebVWyY8+e4+i i/IALItAohF7h5zk3v8ZxoECTetw4LMBC28pJyaPjAw8GOBsMvB1JN5lX4Rx91JThggl ugxCyuz9EaaORzWbbAaxiFNlygpcmNSOptA33iU2JfbKpXTDoCVTSXTwWqudt2TZFWCf 1vISxeeNBNm/tV7IWmksZpSCl/Kma3/SX+55OORiOLT0c+fhsRfCgCxUr1PrmJmQZn89 KhqA== X-Forwarded-Encrypted: i=1; AJvYcCUGZMPqNHvatzmRq6xjtmsD0V52N3MrVyzlBpc3B2tXEcX/Wrgcd2N8LbtubxtLe3x60+hGXvTUiXDtmtg=@vger.kernel.org X-Gm-Message-State: AOJu0Yyllab7IaDqe8ya+ueT1jpXD3FBPijMxaWNX+q6FaKQ7uvvgZ6d eXszJdByEoKdzLYAJXXjkOBi8piT3u5Wu6gIKmQIn+45WDU9M19Ua8g6GACvEMhZldw= X-Gm-Gg: ASbGncsAwfLX1UzVKquq/OXsC7MDWeVyQchIwIve4g3POLWteu4s4bw5vIJq+ama0BT Q2ThIZiZ/DtKlaRAqMcHSQ6zpoh3qYwg6RzxPCs6tLlbl70hr9xe2J/VZvGc7+Tqo7tR32C0+IM Ceofa7RgZ+ro5WIVt4StSkECtFuENCyEdgU3A08ZXjB1/XlNscO4HkGVSCUYI7PZCOY40ZfEprk 2CXuZOO5Tw0hXBNYgPggpN7OT7+agl/mnxk5ZNIh/5rOu2Kf1c7sfQR+kG40zstDTy5tJOGRH0m iu6JQPp3iNHAe5Jxi2qTBPzpPqyYxrkur8M5dUlDvcMdgtoxtzI0L/vJ/k9P9weDVJVvMSTT6E5 F6LE4BypoUexia2unhHQXbUhDg7laxYGpU8IpHhxrR1FToQD22ZqZjW2jB87ZezF9OFII4SdQCl fvBw5ejrLMPcvT2dV1o71pEkr1fvef6mw459REdO92vzqRx9ZWuWvIt+hNPhCfAGlGFAoKzdTK8 V3u X-Google-Smtp-Source: AGHT+IG/AXrf847z5waiX56BUbuq0TBVNl+tKPHmuICjf5LmTDcAnM4xXSW87YloDzklhKJF+4+8gw== X-Received: by 2002:ac8:5fc1:0:b0:4ee:4214:3201 with SMTP id d75a77b69052e-4ee58b30a71mr235780211cf.78.1764110416736; Tue, 25 Nov 2025 14:40:16 -0800 (PST) Received: from localhost.localdomain (modemcable125.110-19-135.mc.videotron.ca. [135.19.110.125]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-8846e54e9e2sm132836336d6.31.2025.11.25.14.40.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Nov 2025 14:40:16 -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 v3 1/2] ASoC: codecs: lpass-wsa-macro: add RX4/RX5/RX6/RX7/RX8 Date: Tue, 25 Nov 2025 17:35:32 -0500 Message-ID: <20251125223848.1798-2-jonathan@marek.ca> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251125223848.1798-1-jonathan@marek.ca> References: <20251125223848.1798-1-jonathan@marek.ca> 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 --- 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 74a812fa7dcb2..e00b901eb3a0c 100644 --- a/sound/soc/codecs/lpass-wsa-macro.c +++ b/sound/soc/codecs/lpass-wsa-macro.c @@ -299,6 +299,11 @@ enum { WSA_MACRO_RX1, WSA_MACRO_RX_MIX0, WSA_MACRO_RX_MIX1, + WSA_MACRO_RX4, + WSA_MACRO_RX5, + WSA_MACRO_RX6, + WSA_MACRO_RX7, + WSA_MACRO_RX8, WSA_MACRO_RX_MAX, }; =20 @@ -2227,6 +2232,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, @@ -2409,6 +2424,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 { @@ -2528,6 +2553,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; @@ -2561,7 +2644,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 @@ -2586,6 +2671,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: @@ -2594,12 +2680,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