From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qk1-f182.google.com (mail-qk1-f182.google.com [209.85.222.182]) (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 E12753093CD for ; Wed, 19 Nov 2025 17:15:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.182 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763572502; cv=none; b=QQpsensB8A4onmWoImIjE2O6crtY/MInXZ+kvOcVTLacnzgOrRUq0Gf4fgFsE5GQs3EZkfl/FRsHYyWDOAcFgzZ2hv0OaxClyif/Gf1pSl5eyNJxJ7W9Whxt6Fl9GTboor2PSb9/yuLuIslZDitJvl9X8unvLAPV7YOSZ+Kipnk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763572502; c=relaxed/simple; bh=8qOei+5iVyTpIVJdrELSKorvw3ZZO/Cw5fasUL1fHJQ=; h=Subject:To:Cc:References:From:Message-ID:Date:MIME-Version: In-Reply-To:Content-Type; b=p6//hpB4ouznxxmwT09psxW0VA4Uya9bFnUq7/AV9YOsebUBupMwBFznV9IyzgXgWhJVp+6L1n0BbuLPeWrBcxPj5ICvlfy+CD4H6dRThSDtO8u0fnFzaqu/SZWaJdGqGIhSmSfBbPtYLY07B0/wAOI5ceacjzSkOrURdzY0XOY= 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=figtxPM/; arc=none smtp.client-ip=209.85.222.182 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="figtxPM/" Received: by mail-qk1-f182.google.com with SMTP id af79cd13be357-8b25ed53fcbso909201485a.0 for ; Wed, 19 Nov 2025 09:15:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marek.ca; s=google; t=1763572499; x=1764177299; darn=vger.kernel.org; h=content-transfer-encoding:content-language:in-reply-to:mime-version :user-agent:date:message-id:from:references:cc:to:subject:from:to:cc :subject:date:message-id:reply-to; bh=hcMytCFbs5Vo7k54utdbFpOXPjxqG+y0as3fR0kFoMQ=; b=figtxPM/GiaYwIRnmEkKjqVfQPFLA8nflVDDpiezzDld9CV0Uf/Odi6JZZ3XvuPQCX Wca5Yl23OAZaK18ZAomSsL/E3F2ASC4fTziAULy916s7GVXNI0bx1RsEb6wOdw0qvdyh DP9qQ8hUIs2FTRC7NHRJ9KWSMc2yi7/iJJFw1YV65GmEHueI5moYBTc4iN/H3dy2mkab jKHjuKNfVGJgbJn4RbC7plIVrrZZuB8oFnFplALca7bQIRfQnYmTAIhgwMmucYAojyaP QaFF56QhfcquonnCkdHam7mMpC2xjZLJat5QqWXjswkZC8KcpyFIWFbxsnlM6VdEEAyr dmIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763572499; x=1764177299; h=content-transfer-encoding:content-language:in-reply-to:mime-version :user-agent:date:message-id:from:references:cc:to:subject:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=hcMytCFbs5Vo7k54utdbFpOXPjxqG+y0as3fR0kFoMQ=; b=AKH8QIdsD1wbEHBb96R0cWrhhwsyxXnoudpB/D1s8tOGWMdw67RIfC3UIpNPXFK0Av tLxbulvML5ZIPOoDmF56jK1GarTMvji0ymhPEwu6nn41wSFCmoVzY+joSp2adTi4Agj4 ZGuJebtBlJxLcB7dXhowYFOy1BtSBPxnyc/6liSafhhVh8/nR9AZc+t3MdeOLKlib+FT 90Std6POBluTeP21pSb1Z00BSKb68dYrW89D0G9+PbkXNJh+Eid+JHXQux/wbLY0fD4j cVdvI52zbG9+E2+xGsVfMOKQDIJ8kPvnb3DgDP3y2XxfbnuQp2ZvCIzwQiJ8YunM3k9O fEeg== X-Forwarded-Encrypted: i=1; AJvYcCW7FmYBxJS0GAalTqLhvnLA3DXQmRw6lGqX3+i3OJXEC3n/z1GsVTX/N4xH7z5xtWWt3+eDjjd3qZqxstM=@vger.kernel.org X-Gm-Message-State: AOJu0YxwHqei25FDhMKrWAfh1xsJy0UkMP/DLg3ng8YvMfgV0euocnPe mbMlw5MLXlwptJewXVl3Ifvah9xJ2F8Il+bhpphmFSOn5+pvdmAGnoLwlNzDrMB7QVBy6D5vJMH jncfL X-Gm-Gg: ASbGncuTtN6AcW09Fk1g2yxHCITliNDUEfaV+15RFz1qNmGdG4SvbfgtNZk2tT5G8VD zoiFpAuPKe4f510fQ7l1FpRDpBPBEOLvE+UgdO20lgDFZj2xVB1XQZdBJV9unwQRnYRoBMSmudC CWs5aBzNejAPSd9497c2dT41tUdYwW14YLzaMpT95g1nZ+hfzg3f1y9JayQwjECVOihL7m522ql ZJ0Hv3Cz2N5sqLnBF93C6Mecs227bxPex+HkCE0FGTXuv9oKi4JaAZTTigAssju1m429ea/PWVG Dr1lt9wQkiUjKgwwedxl5YDR6CBqsLaS030B/C78Pz3wFnt5IqCVLtgSdi90+NO33XKiqhvuvs5 USHkKP+Gf6dt0s+VAtRicZoXGWNVDzhSKx+wnPfAuOZ253KMZOZEhHuTef5+rKdp84wVFS58vX0 3Fd9EzQr/xhi4vZnd0hJPn1x8BjkYse0xAyJAAgEU0/GvxBLZhp+mcUlTDUA== X-Google-Smtp-Source: AGHT+IEYmWa+4drrl1pIjDhI3RjLOzBiCKzIBkfEAWiD6vKdauyfly8Fw3KOwWdXFZzVHyRzvIEWng== X-Received: by 2002:a05:620a:4510:b0:89e:c659:3f99 with SMTP id af79cd13be357-8b3271f3b97mr20293285a.6.1763572498149; Wed, 19 Nov 2025 09:14:58 -0800 (PST) Received: from [192.168.0.189] (modemcable125.110-19-135.mc.videotron.ca. [135.19.110.125]) by smtp.gmail.com with ESMTPSA id af79cd13be357-8b2e4fcc2f7sm912394885a.9.2025.11.19.09.14.57 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 19 Nov 2025 09:14:57 -0800 (PST) Subject: Re: [PATCH 7/9] ASoC: codecs: lpass-wsa-macro: add RX4 and RX5 To: Srinivas Kandagatla , linux-arm-msm@vger.kernel.org Cc: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , "open list:QCOM AUDIO (ASoC) DRIVERS" , open list References: <20251117051523.16462-1-jonathan@marek.ca> <20251117051523.16462-7-jonathan@marek.ca> <8753b824-cb16-4440-b53a-f058eb8f02d6@oss.qualcomm.com> From: Jonathan Marek Message-ID: Date: Wed, 19 Nov 2025 12:13:56 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 In-Reply-To: <8753b824-cb16-4440-b53a-f058eb8f02d6@oss.qualcomm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit On 11/19/25 10:33 AM, Srinivas Kandagatla wrote: > > > On 11/17/25 5:15 AM, Jonathan Marek wrote: >> This allows playback using the WSA_2CH AIF, which feeds RX4 and RX5 on both >> WSA and WSA2. > > Which SoC have you verified this on? > I am testing with x1e and sm8650 devices. >> Signed-off-by: Jonathan Marek >> --- > >> sound/soc/codecs/lpass-wsa-macro.c | 48 ++++++++++++++++++++++++++++-- >> 1 file changed, 46 insertions(+), 2 deletions(-) >> >> diff --git a/sound/soc/codecs/lpass-wsa-macro.c b/sound/soc/codecs/lpass-wsa-macro.c >> index e2e78ff6dd54e..f02153108c275 100644 >> --- a/sound/soc/codecs/lpass-wsa-macro.c >> +++ b/sound/soc/codecs/lpass-wsa-macro.c >> @@ -300,6 +300,8 @@ enum { >> WSA_MACRO_RX_MIX, >> WSA_MACRO_RX_MIX0 = WSA_MACRO_RX_MIX, >> WSA_MACRO_RX_MIX1, > > While you are at it, can you add RX2 and RX3, its same for both > rx_primary and rx_mix > RX2 is RX_MIX0 and RX3 is RX_MIX1 (different names for the same thing). I can add RX6, RX7, RX8 (if I can test and verify that they work), I didn't try to add them because the downstream driver doesn't support them. >> + WSA_MACRO_RX4, >> + WSA_MACRO_RX5, >> WSA_MACRO_RX_MAX, >> }; >> >> @@ -2228,6 +2230,10 @@ 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), >> }; >> >> static int wsa_macro_vi_feed_mixer_get(struct snd_kcontrol *kcontrol, >> @@ -2410,6 +2416,10 @@ 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_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]), >> }; >> >> static const struct snd_soc_dapm_route wsa_audio_map[] = { >> @@ -2529,6 +2539,31 @@ 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 RX4 MUX", "AIF_MIX1_PB", "WSA AIF_MIX1 PB"}, >> + {"WSA RX5 MUX", "AIF_MIX1_PB", "WSA AIF_MIX1 PB"}, >> + {"WSA RX4", NULL, "WSA RX4 MUX"}, >> + {"WSA RX5", NULL, "WSA RX5 MUX"}, >> + {"WSA_RX0 INP0", "RX4", "WSA RX4"}, >> + {"WSA_RX0 INP0", "RX5", "WSA RX5"}, >> + {"WSA_RX0 INP1", "RX4", "WSA RX4"}, >> + {"WSA_RX0 INP1", "RX5", "WSA RX5"}, >> + {"WSA_RX0 INP2", "RX4", "WSA RX4"}, >> + {"WSA_RX0 INP2", "RX5", "WSA RX5"}, >> + {"WSA_RX0 MIX INP", "RX4", "WSA RX4"}, >> + {"WSA_RX0 MIX INP", "RX5", "WSA RX5"}, >> + {"WSA_RX1 INP0", "RX4", "WSA RX4"}, >> + {"WSA_RX1 INP0", "RX5", "WSA RX5"}, >> + {"WSA_RX1 INP1", "RX4", "WSA RX4"}, >> + {"WSA_RX1 INP1", "RX5", "WSA RX5"}, >> + {"WSA_RX1 INP2", "RX4", "WSA RX4"}, >> + {"WSA_RX1 INP2", "RX5", "WSA RX5"}, >> + {"WSA_RX1 MIX INP", "RX4", "WSA RX4"}, >> + {"WSA_RX1 MIX INP", "RX5", "WSA RX5"}, >> +}; >> + >> static int wsa_swrm_clock(struct wsa_macro *wsa, bool enable) >> { >> struct regmap *regmap = wsa->regmap; >> @@ -2562,7 +2597,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); >> >> @@ -2587,6 +2624,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: >> @@ -2595,12 +2633,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) >