From nobody Sat Apr 18 03:32:14 2026 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (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 D982C366838 for ; Wed, 11 Feb 2026 11:28:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770809318; cv=none; b=UI3X8MJrNpqIawr0XZrcrDQc5jQVtdZ9gCC15yWmIl8YUNnm2jeAL86gEwTrHvnSch6lJBFcPG8cPwfASOfMhNzklpXX8Ol4cSrDkShZCkj6xBsZmzONV8iUhWnRsT1xHxp0GUd1Uk2OiUD/BXPQHgI8pTn0gLEyGVXEuS7xfQY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770809318; c=relaxed/simple; bh=PPCSMbP+aNDgHbEn3U1sydgv/QNjeHb4rhjrjaaaIm4=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=dTEH5d0jkBWMqbAvJqziYwqR6LQoF7IbgzRHI39XRQLnS2o6F/TrkGLkirXC2MNmCCYGz/uyor60nLal2le301jNrcEh0o6n2Wm+97M8NXmnJtVee6a5NliV2XUJd4HZxdhb681JufWXkOsh9Hn5As2Zcn8eQvF343M6MUYRL74= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=WB+YMScN; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WB+YMScN" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-4807068eacbso16832975e9.2 for ; Wed, 11 Feb 2026 03:28:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770809315; x=1771414115; 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=3QlirGX/dyTIFPVVVGu/2AwF4neWtk7FL/g84dGVa7c=; b=WB+YMScNFosOfbZZ2w04qC5UjegjdtE2yXTriOE5LdLIWfWE0YQfmnSLuTS5kX5lSv 7iSMXXImQjA9gmLwxvuETsMmE3LU/y3naSUtQs9AwH5sdM1AB5lal16YG2RUePKuUUWn BnIkAoWNAcuF/OQrzwoQmMe8CLEqIY4mo+srs86hP7VrnXMKb15sfjYZrZ+gz7HtZ3xy IMD5nzwx2Z3TxdKt6x7jGa1VFSGGkrhbRqFskAZXQRmOENQKyVpGEBDO27SI/ZmpOjZD NSVEvkY1gGTkIOPNbkeXfZcA+PP7P7vzK0hsVJz6KORuwGpRu36Mt1yovVkt18VBFS52 7BYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770809315; x=1771414115; 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=3QlirGX/dyTIFPVVVGu/2AwF4neWtk7FL/g84dGVa7c=; b=fFI69cKNLdnh96i4UUB8OiLMZ4At1QuB1kW9w09qMFROw+dkE7IDieMb6dlIRk9AD2 +YlmwVdjIsy2ENpo2FCuYW0yOPU9aX+JBCusQfHPXrbnyay9HGpljrnIari0ZslwCxFn hhBa9HeOXLgy8bum1jGK1VargB52bvSAHfck038DczQklxbL0ogyYKxeVq/i2Uer6+iL mhflx9YF5A7ZVVs9WYwSOhggJppC7qa4d8o4Dhy9QmF0KJhzxFjhuxnbjLEMRTkEsbAr BLVo5zlz/Kt1fGrWXab9O68Pg4fLP1X0vWsH94yK25mUIwm0hUASAjY73guELGsA8/Ly 4iMA== X-Forwarded-Encrypted: i=1; AJvYcCXBoWzBkKnLa2Vz2ODuNUxgcQqrTrcoiMXY41xEGpj/OWjYBIfpDXy/9k+af7fwcDYuejh3tPJJnqR/IkM=@vger.kernel.org X-Gm-Message-State: AOJu0YyAeReKKIdaNjY1ug1L9ehV4OW0fcYMnS03WAoIZkS0odP8/VLS 2DMUsN4toHoFMY5AxpnxUIxXuvJlI5AQFP90BR1dw6/b7JU8Ujt1fNSh X-Gm-Gg: AZuq6aJqIjuI5rwdsSjBvjWqq8RRkyoKF9dWopKL0w8TRBy1O9VTlzeNZG+Yq5JEEmW ZXcKqR4ZSlihfGgmIfrVoF4QudoG0/KgGZfCqPmKQ/8URRKPDco5B12ojKk71vQP/mTNo/acJ0U ccPzgaBOCrsrKZatVHYMW9NptYHKtfhpVUkg6Mk2DmZC4kbU8zETPECNmqnBh6KVWidkycA3iCF BAwAjOuZNNDD55oVVmnRyyIvupMcdXcgyDYHngy1sCKDqoYyYtcCo4F19kCcPexburdtpI5bzYP 5CF17tJ3fS//WsxtI0B3PNA6knyH5/wvRHsrS97lKMZTE2RBwGFj+X7nof1pvN6lHlGWSp5oDSW axjOOxNJpPHUb+tlyVmrLLSzpDjbi1VQQ8p9/vdtAZZbIFZN3MOr9zpHZXFH3cP0g7O/24kV6T+ Qy0Vy0UM2dTGemIwiynJosWmLryK3zkdgL33+TXyEopR6pisIPCFL2sP9ugMtQgFugK+BhkzXyB 5o1juhVF1Huiqc6FL0584uTj/FL3m9x1pFd1kg= X-Received: by 2002:a05:600c:3484:b0:483:3d42:d04f with SMTP id 5b1f17b1804b1-4833d42d0bdmr146233925e9.37.1770809314895; Wed, 11 Feb 2026 03:28:34 -0800 (PST) Received: from Lord-Beerus.station (net-188-152-100-94.cust.dsl.teletu.it. [188.152.100.94]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4835a627c96sm26751315e9.2.2026.02.11.03.28.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Feb 2026 03:28:34 -0800 (PST) From: Stefano Radaelli X-Google-Original-From: Stefano Radaelli To: Kuninori Morimoto , linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Mark Brown , Liam Girdwood , Jaroslav Kysela , Takashi Iwai , alexander.h@variscite.com, pierluigi.p@variscite.com, Stefano Radaelli Subject: [PATCH v3] ASoC: simple-card-utils: add sysclk ordering support Date: Wed, 11 Feb 2026 12:28:15 +0100 Message-ID: <20260211112815.126734-1-stefano.r@variscite.com> X-Mailer: git-send-email 2.47.3 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" From: Stefano Radaelli When simple-audio-card programs sysclk for CPU and codec DAIs during hw_params, the ordering of these calls may matter on some platforms. Some CPU DAIs finalize or adjust the MCLK rate as part of their set_sysclk() callback (for example by calling clk_set_rate()). If the codec sysclk is configured before the CPU DAI applies the final MCLK rate, the codec may configure its internal clocking based on a non-final MCLK value. Such situations can arise depending on the clock provider/consumer relationship between the CPU DAI and the codec. Introduce an explicit sysclk ordering enum in simple-card-utils and use it to control the order of snd_soc_dai_set_sysclk() calls in the mclk-fs handling path. The default behaviour remains unchanged (codec-first) to avoid regressions. Signed-off-by: Stefano Radaelli --- v3: - DT flag not applicable, not a hardware configuration - Introduced enum to support order configuration v2: - Do not change the default sysclk ordering - Make the ordering selectable via DT flag - Add DT binding documentation Link: https://patchwork.kernel.org/project/alsa-devel/patch/20260210164506.= 161810-2-stefano.r@variscite.com/ v1: - Changed sysclk order, cpu first, then codec Link: https://patchwork.kernel.org/project/alsa-devel/patch/20260206134014.= 143057-1-stefano.r@variscite.com/ include/sound/simple_card_utils.h | 7 +++++ sound/soc/generic/simple-card-utils.c | 44 ++++++++++++++++++++------- 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/include/sound/simple_card_utils.h b/include/sound/simple_card_= utils.h index 69a9c9c4d0e9..137eb795f587 100644 --- a/include/sound/simple_card_utils.h +++ b/include/sound/simple_card_utils.h @@ -54,6 +54,12 @@ struct prop_nums { int platforms; }; =20 +enum simple_util_sysclk_order { + SIMPLE_SYSCLK_ORDER_UNSPEC =3D 0, + SIMPLE_SYSCLK_ORDER_CODEC_FIRST, + SIMPLE_SYSCLK_ORDER_CPU_FIRST, +}; + struct simple_util_priv { struct snd_soc_card snd_card; struct simple_dai_props { @@ -63,6 +69,7 @@ struct simple_util_priv { struct snd_soc_codec_conf *codec_conf; struct prop_nums num; unsigned int mclk_fs; + enum simple_util_sysclk_order sysclk_order; } *dai_props; struct simple_util_jack hp_jack; struct simple_util_jack mic_jack; diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simp= le-card-utils.c index bdc02e85b089..66030f2bdece 100644 --- a/sound/soc/generic/simple-card-utils.c +++ b/sound/soc/generic/simple-card-utils.c @@ -468,9 +468,13 @@ int simple_util_hw_params(struct snd_pcm_substream *su= bstream, struct snd_soc_dai *sdai; struct simple_util_priv *priv =3D snd_soc_card_get_drvdata(rtd->card); struct simple_dai_props *props =3D runtime_simple_priv_to_props(priv, rtd= ); + enum simple_util_sysclk_order order =3D props->sysclk_order; unsigned int mclk, mclk_fs =3D 0; int i, ret; =20 + if (order =3D=3D SIMPLE_SYSCLK_ORDER_UNSPEC) + order =3D SIMPLE_SYSCLK_ORDER_CODEC_FIRST; + if (props->mclk_fs) mclk_fs =3D props->mclk_fs; =20 @@ -501,18 +505,36 @@ int simple_util_hw_params(struct snd_pcm_substream *s= ubstream, goto end; } =20 - for_each_rtd_codec_dais(rtd, i, sdai) { - pdai =3D simple_props_to_dai_codec(props, i); - ret =3D snd_soc_dai_set_sysclk(sdai, 0, mclk, pdai->clk_direction); - if (ret && ret !=3D -ENOTSUPP) - goto end; - } + if (order =3D=3D SIMPLE_SYSCLK_ORDER_CPU_FIRST) { + /* CPU first */ + for_each_rtd_cpu_dais(rtd, i, sdai) { + pdai =3D simple_props_to_dai_cpu(props, i); + ret =3D snd_soc_dai_set_sysclk(sdai, 0, mclk, pdai->clk_direction); + if (ret && ret !=3D -ENOTSUPP) + goto end; + } =20 - for_each_rtd_cpu_dais(rtd, i, sdai) { - pdai =3D simple_props_to_dai_cpu(props, i); - ret =3D snd_soc_dai_set_sysclk(sdai, 0, mclk, pdai->clk_direction); - if (ret && ret !=3D -ENOTSUPP) - goto end; + for_each_rtd_codec_dais(rtd, i, sdai) { + pdai =3D simple_props_to_dai_codec(props, i); + ret =3D snd_soc_dai_set_sysclk(sdai, 0, mclk, pdai->clk_direction); + if (ret && ret !=3D -ENOTSUPP) + goto end; + } + } else { + /* default: codec first */ + for_each_rtd_codec_dais(rtd, i, sdai) { + pdai =3D simple_props_to_dai_codec(props, i); + ret =3D snd_soc_dai_set_sysclk(sdai, 0, mclk, pdai->clk_direction); + if (ret && ret !=3D -ENOTSUPP) + goto end; + } + + for_each_rtd_cpu_dais(rtd, i, sdai) { + pdai =3D simple_props_to_dai_cpu(props, i); + ret =3D snd_soc_dai_set_sysclk(sdai, 0, mclk, pdai->clk_direction); + if (ret && ret !=3D -ENOTSUPP) + goto end; + } } } =20 base-commit: b7ff7151e653aa296ab6c5495b2c1ab7c21eb250 --=20 2.47.3