From nobody Fri Jul 24 21:30:56 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DEE553043B2 for ; Fri, 24 Jul 2026 13:08:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784898511; cv=none; b=Ik3lUkGgm7gJH0aqTBeEwbqHPN4i2gDZyXYUulB9CoZK638xBC5Y3ybdjSnngMeBSUrheZ3jc9/IvClxelAAmgzHjui1E+KKq2xWJwbHITRj//fVDhhiqbSiCu3pjvIEH9yo0v1/DpJa9TAqzrxlHb8vhYK8zB1q9byZMFMUHLk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784898511; c=relaxed/simple; bh=H5e5rzvT+XDlGrAuuM4HFYhvdOCaw3BI9INKwMISw7o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QB8/2SQYQ4/WeGp9bFf/48kdZD+ALTxmagzmEfECGGzGkbapPmfPc/V2rLR9I108hIEp9nrXunMjMYeklVwe9DCm7fkTex9DD0j0veFl94W9Bc9Y1hJfB4BEFGmkOoR4fxhdFJdfihX2G8K8amwDcwTdRPBySZQ1GfsZuV9kjU8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=ezZY6l7L; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=jQIZv+Ep; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="ezZY6l7L"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="jQIZv+Ep" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66OCmJkS044657 for ; Fri, 24 Jul 2026 13:08:29 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= xYKdRueXfvandbvoeWYOsKIse0WNyh1Z/arNPpEBDgw=; b=ezZY6l7Lq5I34diO dMsagjijZN3nZ2xHr6bcsLUd5pZAL72DZi393Pa5pStNYnKAcyY0tim3JDFDPaWr 9TRgUMgHkUQkZ/uC2lrt91FENlf+Ox/Jx4go21vGE6zxCegzU7nZDmRZ0IX9w0Vb yYr2Z3qvP6oD/Nl8lxHUoaxzvPAEiUYgzoGyxht86eHehQHcKxKTB7hnNIGpfr0R ciBxnffagmwv78W8xsk1NIemzREkAbx9ChsWPnnfQNFbCLfz00Qs4g3eRGhrIb7u 6y7ZdFuP9jGdyYM1m3hsiRiL2LeUzzSag1JtbzkBKT8O3UkpTJ9oWBjZ/dlpRQ79 DAaEqQ== Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fm8ck822d-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 24 Jul 2026 13:08:29 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-51c19493ac2so9512001cf.1 for ; Fri, 24 Jul 2026 06:08:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784898508; x=1785503308; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=xYKdRueXfvandbvoeWYOsKIse0WNyh1Z/arNPpEBDgw=; b=jQIZv+EpBcsYsTwSOdJTm8Wt/8uyUvy8O4ZtJZn8kUxfw461GTCZASF+UsdxvRZ0n+ 4PDkMv2UtT1Xq1CJeRtfxc0pNs+S5p2axxmv8hLNOyqW2Ze+0dvz8cfiKEueS/1ZLxpO Hil/n4us/yUUSMfGoIhikYjMXUpvzxs/TCaxMJmwXuEVp3mv7um/Ji/6FlBLh6PRbNNo 4858GIp/0PxecuirdJVKy514Vw+cwIEviJYkyTFsb13t9kl65cCSVc3WKIhyNOLAnJym Fc10EzYGXNWslIZmL4QhDdX9LB7arkOnPZsNlfElXKpwojpAnUyjvxyckNmePAVR6qIY +hXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784898508; x=1785503308; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=xYKdRueXfvandbvoeWYOsKIse0WNyh1Z/arNPpEBDgw=; b=HYgAmtcHCnbGR5BxEecDuo8NpNKcZ9pm54+NzK99V68QtSFrFoJQXCztMWKnXSvw/Y 5CwBQZy1y6c67CUCRr4L3D3hV6zG/yP2Wh6H53SaNw13mjdwzJZDG1HeffbK6JFyMZku O4t81B09z/nLuFugH6dCW5W/Ei4FRYvbPzPW0TS3LCYtAJsyFVI9NkBzaXvqtL6aE635 1QypkW+5Au6taR2ULixmu9ZtiTSahtbvwPSgM8VUHTRCxO39oedboJGpLzoZJlxDfGVe 4wmFtbMbfbiTj5Y9ycLtNX5YBWWKayMp5em2EM3S3aY+mcb+69uszBkdd1C1BwYHUa4q pcXA== X-Forwarded-Encrypted: i=1; AHgh+RporvB/lsx0a2koO7glT98spsZQxeLvZZQN4u6kc0Eq7EE9NImRbpvE9LNiejgjuaS/g9N2Ezc0uKAuJek=@vger.kernel.org X-Gm-Message-State: AOJu0YwryuHHqHEnjr3TxIdqRgzqRP60FlziSTk7zFULgJLinVhPs1wt A+99bZm5cOynRmMv+dAqcVoFfrIgzigXVAxghFNnxRV15lSJi9kPGG4GsDHe3RuZHfiwJSJJEdC ZH59j0oCRT8Q+LFBlRDHm5Xy+YFvyauc3ns7E03kfCTSnZqddg38PQCtX1T2xhpmByqk= X-Gm-Gg: AR+sD10pNHP9A6AuG/UbBcvkUkA7B8tTyVpgTpaz9EfWB0BmCg3Uk2O+3zsubSJz10k Wg95tequLJdBdpUNKpFwx0x3kXlawn6WGr8+u2pxDy6rVty6bP+xMt0W5M8Ne7nN67sDrPeYCrQ 5ZeIICD89SDm+mU3Yqz7B8WHmo2LA18FxdKihZgcXclnUq5WLg8BWXT8brhPbYuNuwbcgCDF6fl g1y2/0skmhR2V6GzyrzeDAKl4t3dsipwhPt6Pw/B66c/+7wz9ZSGdNT4PYHRX6sfeFJBYPdrI8j QUf+l84IRVbrRu2S25WNuS2QAkHXjKOIMQMy/30YMH4Ltl1/peAWBpUM3hR0SKVsVhU3SjhZ1/H ppWpKz9Xg X-Received: by 2002:a05:622a:4c1b:b0:51c:7b11:41b0 with SMTP id d75a77b69052e-5283df9c8f0mr75839231cf.76.1784898507941; Fri, 24 Jul 2026 06:08:27 -0700 (PDT) X-Received: by 2002:a05:622a:4c1b:b0:51c:7b11:41b0 with SMTP id d75a77b69052e-5283df9c8f0mr75838631cf.76.1784898507362; Fri, 24 Jul 2026 06:08:27 -0700 (PDT) Received: from hackbox.lan ([86.121.163.114]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4957afac1cbsm64921045e9.10.2026.07.24.06.08.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jul 2026 06:08:26 -0700 (PDT) From: Abel Vesa Date: Fri, 24 Jul 2026 16:08:18 +0300 Subject: [PATCH v2 1/2] ASoC: qcom: common: Add SNDRV channel map to Q6 slot helper Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260724-b4-sound-qcom-x1e80100-allow-ucm-channel-map-v2-1-2ca3c1250018@oss.qualcomm.com> References: <20260724-b4-sound-qcom-x1e80100-allow-ucm-channel-map-v2-0-2ca3c1250018@oss.qualcomm.com> In-Reply-To: <20260724-b4-sound-qcom-x1e80100-allow-ucm-channel-map-v2-0-2ca3c1250018@oss.qualcomm.com> To: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai Cc: linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Abel Vesa X-Mailer: b4 0.16-dev-0e65f X-Developer-Signature: v=1; a=openpgp-sha256; l=2172; i=abel.vesa@oss.qualcomm.com; h=from:subject:message-id; bh=H5e5rzvT+XDlGrAuuM4HFYhvdOCaw3BI9INKwMISw7o=; b=owEBbQKS/ZANAwAKARtfRMkAlRVWAcsmYgBqY2PFUc1X1WybQyAhcMxS/8hmDUV3MwI4T5PGF 25zrAlUv4WJAjMEAAEKAB0WIQRO8+4RTnqPKsqn0bgbX0TJAJUVVgUCamNjxQAKCRAbX0TJAJUV VpbTEAC8QzcSJSODCtqY3ntDsOuWglN+ddtA/MGqKxYXLRl63sXblKHTBnKuKrpiBVRFqy9KxsO knZK1UouWmxprFIoMTPGizCS3wXZRvih/E8hs6m4C/sb089P5SZnYoFPrQ+PY2p8Rn1XaZSYuqY UBBQD2C7avwAc4FrevjgNkIYvXRzpnUuxGbIlCpQacRqYNmJWqdcn3+1vdKL9S+biqsw/rnVgkv M8KtYZaT7RAZwCmailxUknsrL4sc7G4oYF8x/Mq7CpeDPGo60v5k/moBtv34vsyot8sPCQx/d5b aWrdBpFnuaWvrWUVpJR5ejXPIrvRDMnIkjt9IfxAYFYrmtENnmTxvlPsoP0+SZJGAdOUW/0Ug8m zqv3wOiIxBLBDeP+98i/Z/EBuNy5tWl+pQDUlN18j9T8vD9vanNK5BXVJf3krzQ7PG+uUKf3VoP 9N+OfwCPHAMPjFtpF/OJ/yPCtEdp1tckjdW1E8k6ylb+v2SjZSxDPOr4203Pgy78hTFxzxhR50B XUjjtBmy6lQTcarrHfAAuyzFJLv2wIfaE71EW5Ju2yaCuRj3hqIGUlGkPZGtigaK53e4bGeysM+ Sw1fwcKXmNARv3LxS17uOqVKkP0vBDC14QB8LivCoHGp6zJitIdOat6lSiXCaJ3HsQw4M1Ioy28 RoqBRT9UB76IVrg== X-Developer-Key: i=abel.vesa@oss.qualcomm.com; a=openpgp; fpr=6AFF162D57F4223A8770EF5AF7BF214136F41FAE X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzI0MDExOSBTYWx0ZWRfX7h5RTEtdRfFH 8xfp3JZHj9/xOnPXze/Nexkcmn93Rfq9ylDMaIHXVWxh0uteG2/oFb6IHWGlFLeXwBMlYuCKG7V coABANyhCWqQ3+2uWylK7Lq9Bfo5Z8JxqY2+A7GYKUFPaBGnt/zFWb2SK3vIP6XVG2nFzMatwsq m3cov+1xI7n0pVy6YrePSgs7RjuwkODz8Lhbd/EkVCrEgNDi4UVjMCatjZ/MtEVfUki7ShnCJ/8 RmOEu+WJMZcCaCDife2vGCNpTC+56kfzwcYp2A7s0e2fNwg+K7nQ/6a+rnJ97t9e4hlgRfdh18C yP25JVn9fXEKwfoSL8NyH/v9sqAYqwZqEjkTbXzabigndR9cDjpPXqm4Jia4fz/10gzM1Vrh9xC l8hj1ysY8LwzM3i/xNkFLsalW8PUo8tmY7Iew65fiIl8Q5DGYGe1mvA4n/BkOYpSZ7OrqtCPt+t jgBQNE+PZ1qLS63D9Og== X-Proofpoint-GUID: RPiJlOv9Dlt-BIlSWuncp6NwNWGsrfRc X-Proofpoint-ORIG-GUID: RPiJlOv9Dlt-BIlSWuncp6NwNWGsrfRc X-Authority-Analysis: v=2.4 cv=F79nsKhN c=1 sm=1 tr=0 ts=6a6363cd cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=6dw9+iwJWV8PcCi9M4lOBg==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=LT42eKIa1owrfrf17d8A:9 a=QEXdDO2ut3YA:10 a=uxP6HrT_eTzRwkO_Te1X:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzI0MDExOSBTYWx0ZWRfX8eba5j+aYT6x 25xZUAaS+RDUFUCRVQ/uWFu8U4HUh8ovo4JS8WlkGepOQUpsq6QPFS+4xN/lwKqnqFWqRExqu8B Ok5qjb1DuTQgugcv/Eu3a5tcJZWzJck= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-24_03,2026-07-24_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 bulkscore=0 adultscore=0 clxscore=1015 lowpriorityscore=0 phishscore=0 suspectscore=0 spamscore=0 impostorscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607240119 Add a small helper that converts ALSA channel map positions to the Q6 PCM channel identifiers used by Qualcomm machine drivers. The mapping is useful beyond a single machine driver when exposing writable channel-map controls. Assisted-by: Codex:GPT-5.5 Signed-off-by: Abel Vesa --- sound/soc/qcom/common.c | 30 ++++++++++++++++++++++++++++++ sound/soc/qcom/common.h | 1 + 2 files changed, 31 insertions(+) diff --git a/sound/soc/qcom/common.c b/sound/soc/qcom/common.c index e4ff247ea47f..bba0cff6f4cd 100644 --- a/sound/soc/qcom/common.c +++ b/sound/soc/qcom/common.c @@ -6,7 +6,9 @@ #include #include #include +#include #include "common.h" +#include "qdsp6/q6dsp-common.h" =20 #define NAME_SIZE 32 =20 @@ -172,6 +174,34 @@ int qcom_snd_parse_of(struct snd_soc_card *card) } EXPORT_SYMBOL_GPL(qcom_snd_parse_of); =20 +int qcom_snd_chmap_to_q6(unsigned int pos) +{ + switch (pos) { + case SNDRV_CHMAP_FL: + return PCM_CHANNEL_FL; + case SNDRV_CHMAP_FR: + return PCM_CHANNEL_FR; + case SNDRV_CHMAP_MONO: + case SNDRV_CHMAP_FC: + return PCM_CHANNEL_FC; + case SNDRV_CHMAP_LFE: + return PCM_CHANNEL_LFE; + case SNDRV_CHMAP_RL: + return PCM_CHANNEL_LB; + case SNDRV_CHMAP_RR: + return PCM_CHANNEL_RB; + case SNDRV_CHMAP_SL: + return PCM_CHANNEL_LS; + case SNDRV_CHMAP_SR: + return PCM_CHANNEL_RS; + case SNDRV_CHMAP_RC: + return PCM_CHANNEL_CS; + default: + return -EINVAL; + } +} +EXPORT_SYMBOL_GPL(qcom_snd_chmap_to_q6); + static struct snd_soc_jack_pin qcom_headset_jack_pins[] =3D { /* Headset */ { diff --git a/sound/soc/qcom/common.h b/sound/soc/qcom/common.h index ee6662885593..1e8edc7e1b87 100644 --- a/sound/soc/qcom/common.h +++ b/sound/soc/qcom/common.h @@ -14,6 +14,7 @@ int qcom_snd_wcd_jack_setup(struct snd_soc_pcm_runtime *r= td, struct snd_soc_jack *jack, bool *jack_setup); int qcom_snd_dp_jack_setup(struct snd_soc_pcm_runtime *rtd, struct snd_soc_jack *dp_jack, int id); +int qcom_snd_chmap_to_q6(unsigned int pos); =20 =20 #endif --=20 2.54.0 From nobody Fri Jul 24 21:30:56 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6CC21427FAC for ; Fri, 24 Jul 2026 13:08:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784898515; cv=none; b=jnQsoGJSdC/yQncTv5Ngb4zsEqOkMfB4Rk1YJlQpgZr45tGMoX+cFG23cNbW7hXuCctPp2Z8B5eM6bJJCIJsAhrWgAzNm13GUaAh1H8+/uXbQkEVQ2qJjPxZ1j1rpcHsRDdr6OVqub4JZ5bqJCk1phrJYbpbiJVqae3qp+ybTJg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784898515; c=relaxed/simple; bh=C6kQA0u8dFmjiOTbOj/szcTJ7oZVTadFFjhW11dhMhc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=okYomiPsQc7w6BtBs6WnDAfFYSc5iP047Lcgys2GZ6eN55d+XHoKWjzS+sF8Jx6L5UpmZAVuVyabSxf5aifUrbbj8nyGFBZcmcodUxK2vbcs8SkWxssY6QskHgjsczQWXXoC4l+thaZcd/tiJAy7xzpbpXS1nBrAt9gjWQn/Yzk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=OaXadsoU; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=QqkGE3fA; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="OaXadsoU"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="QqkGE3fA" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66OClbIa3378008 for ; Fri, 24 Jul 2026 13:08:32 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= CRftSoVFvItus87l++yzWUXHSPN0iv7LNRluqrmJ8UQ=; b=OaXadsoUxZ5sZ0Rz VywFprMqFExP8uGB/BRTLoPS2aEt9XPvo2IR5VYolnGT+pZF9uJgHIqSeC8Fvfhk uN4HZoSonNmgN+c0ffC7m/WGEJpic4xhAXfZXo0vwC0Ux1DCPwd6t88SyBM8QA3c DBXnqJl29L6kUwsxNIKrpbr9dV5n1+RbkbfQdZEsc+splN8obOlnGuIfiu7k+JAu svSJ+YalGddJwSCPapTMoqNeaUsLd0qRfncRlmEObKTZFM18HnTsc2laYmnmcSAq LdYYHqU9CJ02bezh74PluO6j1ucvgUxy7SCRXMXFDvtUn3fowOgVN46PjHKZWJXE lnQrdg== Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fkqa0bu7d-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 24 Jul 2026 13:08:32 +0000 (GMT) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-51c0e702df8so6697731cf.2 for ; Fri, 24 Jul 2026 06:08:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784898511; x=1785503311; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=CRftSoVFvItus87l++yzWUXHSPN0iv7LNRluqrmJ8UQ=; b=QqkGE3fA4XRzjHo/LntAvuhI4kEIw95LfMGx42EfUEDZ751N+5RuGiS/IcNQIaCVij 24pMEcUvZKElCZFqmkdnoJ2gmIk3wr0pJDab8oP3y+hRntLoQAgcHNagIrlXem15uQDv a/zOnhCIRHtqE+BT5bALXMZuK/jI+Oh6hGdIS3IfdYCJrXzcFJnvtv0v6eGJM1EUDdH1 AEiRuF+JUfRhc6lmcVnhtW9sCfDMsV3Eo6SaRD7Zv3DOaB8bUp3wVuzI+0eWq+RNcHPy 14PXBtWSo7T/UMOmgByf67clv3YeZjgrEd4USJy1OSFISS2VfGqvIrqeQ1aDt/TaRSfy 6vFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784898511; x=1785503311; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=CRftSoVFvItus87l++yzWUXHSPN0iv7LNRluqrmJ8UQ=; b=OfiZcJ63gw4Zwf0LtaX3h+DM7ngcO2i+Nogti6PzpC0zs1Uv6DOnJwU7wWq4TbHE/o nnHSo498G10+vuzx2UY7M+kDWvn9BJa3BpXPIa4LXxXLdifgsh7APkwthJKpmxFuHIAh EFin9rmdMwHakNDWexoq3dfaR0D0iwr6AuumaDUp7ElU2mkaz8Uc5rnkYSPVvBj8uk3k D6J6kD4a53Lh/5qYkNiqtrMECpe7x9dTGQiDqv3cRqa/vJ6HIbnTBJTHR/ByDnw0T4a9 n/E3XUU3av5YfnKMa6al+4S4HnJhPYOAP0ytHBcIyZoaxnKIO5GPWBhTPc8Hw0Bb04YY nbbA== X-Forwarded-Encrypted: i=1; AHgh+RrbS6iL4bh2roZTJc1AomyTIqIO3zCRzvZmN8GnB3bHa1/tWSubrg2KGtLKYMvhi9w0mtde9EWI5BSpKPA=@vger.kernel.org X-Gm-Message-State: AOJu0YxOakw0WGcr1lJfevtibvBVtVAIxaIbxhjyIaYYDFuKkDxrkPhO uWfSdSZXEqV1ql8RUob2/2WVr2McrQbYyel13WrZDReHohk9tHxInk8/hmDCsFY1geP7Lz6kHVF ZUWGiHqvR2/yvTK5rlWMG5VeKPmBOVnuSJG84ebgBvDgLvgRxic0xo1TozuMP4m+NXXo= X-Gm-Gg: AR+sD10IGVgRB2rIlWPn23jaGx1EJo5KJ3Bpzm0xf81bNPxAMog4EKhXdW5+dtctdDU 9GEJmq9+JTRC3DbQNMnqa5VyYbflmwWx1hp6LleLnZD0bV8rVDSKncxqJOw9sbf4M4T36ZMqwR/ OKbhxQcWf9xJZjaWLF1YFDz9MskJYNbXXjof5XIWWfW48aooZO9pP/McmQRHbny9JUuBsgZFqCd 0VrafA7IjcpXA508slBdmG9rSbA+JXvWKwAyZ36O4j/cafOkg0roS8u9PqXzlP5SPCinkyuG7CS KFNar6k8WLzc1QoUp/aTtefc8Uj6OhEw7B9S5OyfnOizvkzIB5uJRLwhUwdA7/+1S15Y/TWqav8 JXH5wDhG7 X-Received: by 2002:ac8:7f42:0:b0:51c:12bf:d4a7 with SMTP id d75a77b69052e-5283df1079cmr73441071cf.45.1784898511227; Fri, 24 Jul 2026 06:08:31 -0700 (PDT) X-Received: by 2002:ac8:7f42:0:b0:51c:12bf:d4a7 with SMTP id d75a77b69052e-5283df1079cmr73440321cf.45.1784898510460; Fri, 24 Jul 2026 06:08:30 -0700 (PDT) Received: from hackbox.lan ([86.121.163.114]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4957afac1cbsm64921045e9.10.2026.07.24.06.08.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jul 2026 06:08:29 -0700 (PDT) From: Abel Vesa Date: Fri, 24 Jul 2026 16:08:19 +0300 Subject: [PATCH v2 2/2] ASoC: qcom: x1e80100: Allow userspace WSA RX chmap override Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260724-b4-sound-qcom-x1e80100-allow-ucm-channel-map-v2-2-2ca3c1250018@oss.qualcomm.com> References: <20260724-b4-sound-qcom-x1e80100-allow-ucm-channel-map-v2-0-2ca3c1250018@oss.qualcomm.com> In-Reply-To: <20260724-b4-sound-qcom-x1e80100-allow-ucm-channel-map-v2-0-2ca3c1250018@oss.qualcomm.com> To: Srinivas Kandagatla , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai Cc: linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Abel Vesa X-Mailer: b4 0.16-dev-0e65f X-Developer-Signature: v=1; a=openpgp-sha256; l=8327; i=abel.vesa@oss.qualcomm.com; h=from:subject:message-id; bh=C6kQA0u8dFmjiOTbOj/szcTJ7oZVTadFFjhW11dhMhc=; b=owEBbQKS/ZANAwAKARtfRMkAlRVWAcsmYgBqY2PGFrvxzqkNaDJT6ibLEfsIj7PCotzC8iVg/ 31WPKHuuyuJAjMEAAEKAB0WIQRO8+4RTnqPKsqn0bgbX0TJAJUVVgUCamNjxgAKCRAbX0TJAJUV VnCUD/9MBA4mfc+Ud8GfCziQlrnAPjIU2aIASNzwZl7YXN/5DmLMwde5J+XaSpk7KvR1WYpJwq1 D0DTNKbjmehh1Ug80H3dG98b5aH5yTnytrIYWrK6KVfBFumSVKkJEl7O1vEn/IWYdJ4E7ugQ1DY hQz7MKDRqR3OTFCb3GO0HTc54UiSOXkppJVUG0xSsarUs9VoBOnXX7geBeplrwWtSkcTTDkuJK2 AtIgjdIhLrUXomIkMV2WAygXJtWJY6qtI2RAEGZm57knVrcfk1M+8hATbgp0sTXzSpfCeELZhar yltsqe4UOzmQSaIBv/jCz6lhf8PSlVoWaWj77lpJ7Z91aIV+RX3H9pIOG4+zeiXjMJdtMLVIWfK WPOYRfXDX1cstuKx12brDcwjtJnrZuPrZzU9vEYkA7sc+unS/D1RhVFNr68gSXCHgJoywVG1cjl 6rE0ebOidatxPMzRGpxsbkQ9RrxrIRB/3i9dpWaX/UtjEMBG8RNP8biM7m9pZkd4qdeBxUFGtt1 S/6u+qJh3U1c0f+w/enHpniedK1cXt8H88RDIZfRAoYMM4SAz94GC8oRD7EzBnyWaT/2c6Z2iEn 7+1aU9fpCT1n6BCF2ChX6rInSmtXQq5WD2STCq9BQVH69QKh26P7CIrYVwxm6gYeAamcf2YscHk /CsLfaeE2gcvdTw== X-Developer-Key: i=abel.vesa@oss.qualcomm.com; a=openpgp; fpr=6AFF162D57F4223A8770EF5AF7BF214136F41FAE X-Proofpoint-ORIG-GUID: ZqhuhIpbYhHvT-KQjbsoYeLD0yoJZL0s X-Proofpoint-GUID: ZqhuhIpbYhHvT-KQjbsoYeLD0yoJZL0s X-Authority-Analysis: v=2.4 cv=e/k2j6p/ c=1 sm=1 tr=0 ts=6a6363d0 cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=6dw9+iwJWV8PcCi9M4lOBg==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=yfAaYSGhh6VJTT24xRUA:9 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzI0MDExOSBTYWx0ZWRfX8J34mTPL9nng ZJhZ19FAhaC1vS/PGl/y73gCCdPqFe78aaiJTW62logQTf20XfLvMGr8eM96Biy9lVRC2xLx2Bs PwY8brFZkN9zuiY4nPpePG3NGn56sQGa34MxTWDrk2FVmq/QWEKuAZxd5wxF/ahrrbTULsj/6r0 FmE3cxX4XchRaq50H7zAcIPEVYA+VpARhjgun3OurRtobI3XMaaV9GugtGRPd/pD+C8fffTBrQq rLroIzpNI+NkXE4jS+8cNGEO3e/ejzPpL3Aizi8OaiuL6FxIMnRgnpXkYXnydIsf3MOEMJMcjt3 ZGpMyCIvrCpY37iJEsK7hDvFO3ac3REHeUCjwUn0MXgfpYil404Coei6K6ntEIZJzPY333RvrrW 9ZyRX7se4zSOcfqSDv6VUe9dhscjN1oIWGwTCAodlM9Kjo9rn/f1XBNNMMuSMBFDU9/q8qBFSuP sPtr82xi+rhR/84hzXw== X-Proofpoint-Spam-Info: AW1haW4tMjYwNzI0MDExOSBTYWx0ZWRfX1/uknB4ICrEX UyULjL2AzN2JXGHbgbuOjfDy2jBGC4zxlwLRNdOcQppDBEVnVc140mRLZYvxbiz/HWoDs6q51UY /MLXJGhbyuoV5iRIrZjiRi1fasn9hlM= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-24_03,2026-07-24_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 priorityscore=1501 lowpriorityscore=0 impostorscore=0 malwarescore=0 clxscore=1015 spamscore=0 phishscore=0 bulkscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607240119 The WSA RX slot mapping is currently computed entirely from the channel count in .prepare() and pushed unconditionally via snd_soc_dai_set_channel_map(). Userspace has no way to express a different channel map, so any map defined in UCM is ignored. Add writable WSA Playback Channel Map controls for the WSA RX backend ports. Store the userspace-selected SNDRV_CHMAP_* map per AFE port, translate it to Q6 PCM_CHANNEL_* slots at .prepare() time, and keep the previous default mapping when userspace has not provided a complete map. The WSA DAI links are backend no_pcm links, so there is no PCM instance available when the card is initialized. Register card-level controls instead, which keeps the maps visible to UCM before stream startup while still storing the selected map per WSA backend port. Expose the standard ALSA channel maps through the controls' TLV data. Allow up to six WSA channels for Glymur, and give the controls WSA-specific names so they are distinguishable from other channel map controls on the same card. Assisted-by: Codex:GPT-5.5 Signed-off-by: Abel Vesa --- sound/soc/qcom/x1e80100.c | 182 ++++++++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 178 insertions(+), 4 deletions(-) diff --git a/sound/soc/qcom/x1e80100.c b/sound/soc/qcom/x1e80100.c index c81df41ace88..b3d10410b2d7 100644 --- a/sound/soc/qcom/x1e80100.c +++ b/sound/soc/qcom/x1e80100.c @@ -5,22 +5,155 @@ #include #include #include +#include #include #include #include #include +#include =20 #include "common.h" #include "qdsp6/q6afe.h" #include "qdsp6/q6dsp-common.h" #include "sdw.h" =20 +#define X1E80100_WSA_MAX_CHANNELS 6 + struct x1e80100_snd_data { bool stream_prepared[AFE_PORT_MAX]; struct snd_soc_card *card; struct snd_soc_jack jack; struct snd_soc_jack dp_jack[8]; bool jack_setup; + unsigned int user_chmap[AFE_PORT_MAX][X1E80100_WSA_MAX_CHANNELS]; +}; + +static int x1e80100_chmap_ctl_get(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct snd_soc_card *card =3D snd_kcontrol_chip(kcontrol); + struct x1e80100_snd_data *data =3D snd_soc_card_get_drvdata(card); + unsigned int dai_id =3D kcontrol->private_value; + unsigned int *map =3D data->user_chmap[dai_id]; + int i; + + for (i =3D 0; i < X1E80100_WSA_MAX_CHANNELS; i++) + ucontrol->value.integer.value[i] =3D map[i]; + + return 0; +} + +static int x1e80100_chmap_ctl_put(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct snd_soc_card *card =3D snd_kcontrol_chip(kcontrol); + struct x1e80100_snd_data *data =3D snd_soc_card_get_drvdata(card); + unsigned int dai_id =3D kcontrol->private_value; + unsigned int *map =3D data->user_chmap[dai_id]; + bool changed =3D false; + int i; + + for (i =3D 0; i < X1E80100_WSA_MAX_CHANNELS; i++) { + unsigned int pos =3D ucontrol->value.integer.value[i]; + + if (pos && qcom_snd_chmap_to_q6(pos) < 0) + return -EINVAL; + + if (map[i] !=3D pos) + changed =3D true; + } + + if (!changed) + return 0; + + for (i =3D 0; i < X1E80100_WSA_MAX_CHANNELS; i++) + map[i] =3D ucontrol->value.integer.value[i]; + + return 1; +} + +static int x1e80100_chmap_ctl_info(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_info *uinfo) +{ + uinfo->type =3D SNDRV_CTL_ELEM_TYPE_INTEGER; + uinfo->count =3D X1E80100_WSA_MAX_CHANNELS; + uinfo->value.integer.min =3D 0; + uinfo->value.integer.max =3D SNDRV_CHMAP_LAST; + + return 0; +} + +static int x1e80100_chmap_ctl_tlv(struct snd_kcontrol *kcontrol, + int op_flag, unsigned int size, + unsigned int __user *tlv) +{ + const struct snd_pcm_chmap_elem *map; + unsigned int __user *dst; + int c, count =3D 0; + + if (size < 8) + return -ENOMEM; + if (put_user(SNDRV_CTL_TLVT_CONTAINER, tlv)) + return -EFAULT; + size -=3D 8; + dst =3D tlv + 2; + + for (map =3D snd_pcm_std_chmaps; map->channels; map++) { + int chs_bytes =3D map->channels * 4; + + if (map->channels > X1E80100_WSA_MAX_CHANNELS) + continue; + if (size < 8) + return -ENOMEM; + if (put_user(SNDRV_CTL_TLVT_CHMAP_FIXED, dst) || + put_user(chs_bytes, dst + 1)) + return -EFAULT; + dst +=3D 2; + size -=3D 8; + count +=3D 8; + + if (size < chs_bytes) + return -ENOMEM; + size -=3D chs_bytes; + count +=3D chs_bytes; + for (c =3D 0; c < map->channels; c++) { + if (put_user(map->map[c], dst)) + return -EFAULT; + dst++; + } + } + + if (put_user(count, tlv + 1)) + return -EFAULT; + + return 0; +} + +static const struct snd_kcontrol_new x1e80100_wsa_chmap_controls[] =3D { + { + .iface =3D SNDRV_CTL_ELEM_IFACE_MIXER, + .name =3D "WSA Playback Channel Map", + .access =3D SNDRV_CTL_ELEM_ACCESS_READWRITE | + SNDRV_CTL_ELEM_ACCESS_TLV_READ | + SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK, + .info =3D x1e80100_chmap_ctl_info, + .get =3D x1e80100_chmap_ctl_get, + .put =3D x1e80100_chmap_ctl_put, + .tlv.c =3D x1e80100_chmap_ctl_tlv, + .private_value =3D WSA_CODEC_DMA_RX_0, + }, + { + .iface =3D SNDRV_CTL_ELEM_IFACE_MIXER, + .name =3D "WSA2 Playback Channel Map", + .access =3D SNDRV_CTL_ELEM_ACCESS_READWRITE | + SNDRV_CTL_ELEM_ACCESS_TLV_READ | + SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK, + .info =3D x1e80100_chmap_ctl_info, + .get =3D x1e80100_chmap_ctl_get, + .put =3D x1e80100_chmap_ctl_put, + .tlv.c =3D x1e80100_chmap_ctl_tlv, + .private_value =3D WSA_CODEC_DMA_RX_1, + }, }; =20 static int x1e80100_snd_init(struct snd_soc_pcm_runtime *rtd) @@ -92,9 +225,10 @@ static int x1e80100_be_hw_params_fixup(struct snd_soc_p= cm_runtime *rtd, return 0; } =20 -static int x1e80100_snd_hw_map_channels(unsigned int *ch_map, int num) +static int x1e80100_snd_default_wsa_slots(unsigned int *ch_map, + unsigned int channels) { - switch (num) { + switch (channels) { case 1: ch_map[0] =3D PCM_CHANNEL_FC; break; @@ -113,6 +247,14 @@ static int x1e80100_snd_hw_map_channels(unsigned int *= ch_map, int num) ch_map[2] =3D PCM_CHANNEL_FR; ch_map[3] =3D PCM_CHANNEL_RB; break; + case 6: + ch_map[0] =3D PCM_CHANNEL_FL; + ch_map[1] =3D PCM_CHANNEL_FR; + ch_map[2] =3D PCM_CHANNEL_LB; + ch_map[3] =3D PCM_CHANNEL_RB; + ch_map[4] =3D PCM_CHANNEL_FC; + ch_map[5] =3D PCM_CHANNEL_LFE; + break; default: return -EINVAL; } @@ -120,19 +262,49 @@ static int x1e80100_snd_hw_map_channels(unsigned int = *ch_map, int num) return 0; } =20 +static int x1e80100_snd_build_rx_slot(struct x1e80100_snd_data *data, + unsigned int dai_id, + unsigned int channels, + unsigned int *rx_slot) +{ + unsigned int *user =3D data->user_chmap[dai_id]; + unsigned int i, set =3D 0; + + if (channels > X1E80100_WSA_MAX_CHANNELS) + return -EINVAL; + + for (i =3D 0; i < channels; i++) + if (user[i]) + set++; + + if (set !=3D channels) + return x1e80100_snd_default_wsa_slots(rx_slot, channels); + + for (i =3D 0; i < channels; i++) { + int q6 =3D qcom_snd_chmap_to_q6(user[i]); + + if (q6 < 0) + return q6; + rx_slot[i] =3D q6; + } + + return 0; +} + static int x1e80100_snd_prepare(struct snd_pcm_substream *substream) { struct snd_soc_pcm_runtime *rtd =3D snd_soc_substream_to_rtd(substream); struct snd_soc_dai *cpu_dai =3D snd_soc_rtd_to_cpu(rtd, 0); struct x1e80100_snd_data *data =3D snd_soc_card_get_drvdata(rtd->card); unsigned int channels =3D substream->runtime->channels; - unsigned int rx_slot[4]; + unsigned int rx_slot[X1E80100_WSA_MAX_CHANNELS]; int ret; =20 switch (cpu_dai->id) { case WSA_CODEC_DMA_RX_0: case WSA_CODEC_DMA_RX_1: - ret =3D x1e80100_snd_hw_map_channels(rx_slot, channels); + ret =3D x1e80100_snd_build_rx_slot(data, cpu_dai->id, + channels, rx_slot); if (ret) return ret; =20 @@ -203,6 +375,8 @@ static int x1e80100_platform_probe(struct platform_devi= ce *pdev) return ret; =20 card->driver_name =3D of_device_get_match_data(dev); + card->controls =3D x1e80100_wsa_chmap_controls; + card->num_controls =3D ARRAY_SIZE(x1e80100_wsa_chmap_controls); x1e80100_add_be_ops(card); =20 return devm_snd_soc_register_card(dev, card); --=20 2.54.0