From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qt1-f178.google.com (mail-qt1-f178.google.com [209.85.160.178]) (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 013752E0406 for ; Tue, 25 Nov 2025 22:40:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.178 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764110419; cv=none; b=GVNyN8LSb0ZzcvOD6I/3fftp1Uez3AHJ3VQQkFCO9E/jCmkiJW+RXWSQbBgxCzZRjy67+DH0smpOvLABaXqZPVM0YB9BDqtPGYSXV1hzTvvBHIo+PCg/valDtaYamyxexc+Wee5M7dWbihslKnpRae16i1D7pLoe+0k3Ac/v/nM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764110419; c=relaxed/simple; bh=gnX9JW5f46EXyEPEqpCvdvIki/uTlKEZkFS8ea24FGE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ug1aNn8F8DHenGplTOEOCBZMr9x0tqi5PLcknfPYmpzQpRfoRjP7uApLUj4PXe4TNnJGxngj1maHVR33r5QObzIdDuN43izHz+sfRjNwGZ0BivknjiVBccz1Wa7I0JnEYyTJg2vkGzkDTfiRimhykdJnuNs2hdLCkifB8GdqnVk= 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.178 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-f178.google.com with SMTP id d75a77b69052e-4ee0084fd98so50269241cf.3 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=MqPHwi2Le7thqdZ4W40cHt83VJS745F2Z68FEBI726cnfwBf4FXMyJOaiMCKcbnWnz 80sSwABixN8Yf928S7DSKeXb1eVW0NOWVpRLCbxWFHQrkOosLOweluL5wsSWhODLyzG6 O5kF7OzSjlkbScb/Kr6PNPdjyyh2ZK7OD1bHX2UUj5vHotnVZCKeamkv8DV4Eukius5/ 2IgiKfQR3zWsoJDROh83vTk4mPGaIFdSlycjkiCME0onT6up+EvT3CZvvNC5Lq3+H6ly 3HCNss/1Cmih4nkzBLqOUKYe1gX/5SDOSB8D2DWtBTdCZ3XdXVgLbcovUl+I1GSwNZm5 p/hw== X-Forwarded-Encrypted: i=1; AJvYcCUIMrOXT7mle7bSD9E/pj11ULz46MvDZ2QTOyrmVZWtKLPmRCn8Ry/SkQhWRk/Ajs3tDcpDLWzOoj7X/A==@vger.kernel.org X-Gm-Message-State: AOJu0YzzTZ1NuABgzMqkP1n/o8DvhCe8hMAnBbvvBvD+uexpl83WPOVK FOsJ84boFnEDIocjjlyFHLcsdSk3iWxNj+mfl9zPI13RNMn67dT/6d+dO/p0GjAGmVs= X-Gm-Gg: ASbGncvJwaAkv/xuocc9dCkGylWix3erSR8casy58ZZB0dURdnO1wv1F63Wbv5d/7rA KIkpTm51tQjeDUBHjVo7s/V5/0R1usgOj4PNygYcOhnC3kG8MiTQX60IU5XzNwsLBOi4BWQEcV5 yaBCSPAnfeaoZvn8gIMQDLnOQosxxNBK7BT66SJwgTg7GFBee6XiF/LJMfGvSQK8PMI+bMnkbCg 7iTjpK8dQFrAsdyp7wMhxDQHnnt+Assj5SzptbPc5Wy3QTx5WwIrF0Pf7xgyApuUosIu3GLSeHT TBSxVyMvNOL+vu+1w2jzwq22JHKNnFYeELOozjO8qOVF19QjCd7wriOu61PMf6/6GOYqmjleYHd YrJilCRAhZg6K4Guz5dqsaU1QhicgJm2jut0A6pb3swa3DhwHs+KRyUCqNLW5g9YeSKyCQGewdw uysZvMEYDeYFAb7hV1GgSuTK4yMcc9CFckUuViLTNRzGP3fZOq+QYyycmq79i+JYwXoiwioZ4vf t1L 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-sound@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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-wsa-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, }; @@ -2227,6 +2232,16 @@ static const struct snd_kcontrol_new rx_mux[WSA_MACRO_RX_MAX] = { 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), }; 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_dapm_widgets_v2_5[] = { SND_SOC_DAPM_MUX("WSA_RX1 INP1", SND_SOC_NOPM, 0, 0, &rx1_prim_inp1_mux_v2_5), SND_SOC_DAPM_MUX("WSA_RX1 INP2", SND_SOC_NOPM, 0, 0, &rx1_prim_inp2_mux_v2_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[WSA_MACRO_RX4]), + SND_SOC_DAPM_MUX("WSA RX5 MUX", SND_SOC_NOPM, WSA_MACRO_RX5, 0, &rx_mux[WSA_MACRO_RX5]), + SND_SOC_DAPM_MUX("WSA RX6 MUX", SND_SOC_NOPM, WSA_MACRO_RX6, 0, &rx_mux[WSA_MACRO_RX6]), + SND_SOC_DAPM_MUX("WSA RX7 MUX", SND_SOC_NOPM, WSA_MACRO_RX7, 0, &rx_mux[WSA_MACRO_RX7]), + SND_SOC_DAPM_MUX("WSA RX8 MUX", SND_SOC_NOPM, WSA_MACRO_RX8, 0, &rx_mux[WSA_MACRO_RX8]), }; static const struct snd_soc_dapm_route wsa_audio_map[] = { @@ -2528,6 +2553,64 @@ static const struct snd_soc_dapm_route wsa_audio_map[] = { {"WSA_SPK2 OUT", NULL, "WSA_MCLK"}, }; +static const struct snd_soc_dapm_route wsa_audio_map_v2_5[] = { + {"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 = wsa->regmap; @@ -2561,7 +2644,9 @@ static int wsa_macro_component_probe(struct snd_soc_component *comp) struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(comp); struct wsa_macro *wsa = 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; snd_soc_component_init_regmap(comp, wsa->regmap); @@ -2586,6 +2671,7 @@ static int wsa_macro_component_probe(struct snd_soc_component *comp) case LPASS_CODEC_VERSION_2_1: widgets = wsa_macro_dapm_widgets_v2_1; num_widgets = ARRAY_SIZE(wsa_macro_dapm_widgets_v2_1); + num_routes = 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 = wsa_macro_dapm_widgets_v2_5; num_widgets = ARRAY_SIZE(wsa_macro_dapm_widgets_v2_5); + routes = wsa_audio_map_v2_5; + num_routes = ARRAY_SIZE(wsa_audio_map_v2_5); break; default: return -EINVAL; } - return snd_soc_dapm_new_controls(dapm, widgets, num_widgets); + ret = snd_soc_dapm_new_controls(dapm, widgets, num_widgets); + if (ret) + return ret; + + return snd_soc_dapm_add_routes(dapm, routes, num_routes); } static int swclk_gate_enable(struct clk_hw *hw) -- 2.51.0