From nobody Thu Apr 2 22:29:00 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (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 9D72736167C for ; Fri, 13 Feb 2026 15:04:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770995053; cv=none; b=rTWUC2wv9qeE6D+liKfOxSGoPmpT9Yemqwge/WN8r6Qbz1ybdI4bSFVPcXqnhlpFuzgz+RtqaY/tI677FRB3BwNT4zXyOvuzWwvgmWwwXp0cQTbxm/50YqI6cUla5LjjUCeQeLlUmrNTxFnw3XwO26AdG/7OAZvVXeCLd07il7I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770995053; c=relaxed/simple; bh=rd7ftiDWeKZpxjuPpHq5ntNrtMaA2MU27hdgoilzni8=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=JFpmgQhAkGhkKmSheP/2C1jUwgRkhlzWQGUuihJw+N6y9r81JHXKu0nOMFmn1y8bT+gMmZI2z0ZYoXm19sT+HcWKJNmhUTgNsjflqH8KbJV3/w0bkGI4DhLrUlXh1bT+NvIYqdhaqUWYuIDu2SMMDbRSXldu/23MRvIIGq3LO/w= 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=OmoiW3ul; arc=none smtp.client-ip=209.85.128.47 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="OmoiW3ul" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-4836d4c26d3so8203165e9.2 for ; Fri, 13 Feb 2026 07:04:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770995050; x=1771599850; 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=XnKqcCRtDukSklHMOGY9brz+NRiecjhUSwToNuGRBho=; b=OmoiW3ulN3QBNmxKtLhFhzkcytDnWbHG8FueTcz8bSRTkAUwYgXLb6a9AtCqXPe5jO 8lbfKwbobk4/DHZgTpd9QeXtff4BYF2aZu04LjjJWd0xgoLZxXM9zR6eY8u/4J1glqMA h4fRVV4xEyem2gVzt6sXP54GIrhiPi7ed5oXYe3BK1jTtGqiCgTl4jEJvGtZelH6cTSc lBwr+vmkURN+TJty7HwG1+RkJRZPVUgOFAR7DKUDJxZBBto1AqThvPyf/6WVfOC2Ivs+ VskVHcA09NbhxBFrcZ1UajqDIhWApmz0Rnc4kN/CLml6W23npZ9Zq0hWVijW41EvDZTi EgfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770995050; x=1771599850; 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=XnKqcCRtDukSklHMOGY9brz+NRiecjhUSwToNuGRBho=; b=D+bylEJhmQCeKx1876HeMg2V5eNcaCd9gzqWXtxUljxWYEbkZAR8Ol/77jGdoHcEKH Gk2XKAohDwYeyuisESico5uZBVbi5nxEPZgYM8Y7ymQrN2mIcF+qt21gYIacYEIqXYTf xdDOlXxyHIzI0PpmXs4LcbTAZu7CrZjCWPKE+LD+TMHBFCVTxukZeEVvWgaM3e6AA8Ma wGT/6ajGxsbwxSA1hTjVQ/RZB+z4NRwsZDObLINFGNFUASYpRcgq4v7BF7dQ++88y13J KaPKd/7mR8mtkWOrKFBcd9kGe/6XnIcJd9oB8on9hV6GVo4U/v6GQsHRWXpm7n9A+vJF Z9Kw== X-Forwarded-Encrypted: i=1; AJvYcCWCmyJj9XtXwEMJ87yNqRzu+Bn2TV89W5t74NTUVdMnQUdVWae2DbjA6hM4aCCf2XFb4/cEZ7GKmof/DEs=@vger.kernel.org X-Gm-Message-State: AOJu0Yx31A3d1LrQrIGX63AzSx0OBFVnoP15ZsdlS4jm5ZT2mccptC/Y Y8mwvrJxj6mgFdzH8BGhd9XSTmqnqgXdU+5/ryMfY+VxyHlOjAZMpaoF X-Gm-Gg: AZuq6aIaG834VlOxq722cCzgjFV53i4QcwHgXy2keHzBHb+RMJeGg0S3rch/xJgb6ns eRALRpN8ZCMXe01ia7HTAQ4ytR3VUuua00EDB0r1NQT1aMGXc39F+yk1TiAuB6edJf8+boC2Iof XlPUALsN1qb1ZnJP36PglaiTC93bZJvkFjc51iegRMGKXgTh5Ml6+MApBxsi9zPo1VbsBO2osJI vrAlhBg88KmynccxYYM6e8GBsi3eCJfu8Sr16R9nXSYlZfJfqUz9zUogInANhs1mRxaObtpht60 dYTJzEaksUO6euxRRJpRm/DKQOmmWnd+wL+52Ih5V0CqRatOOKXHFF+B8xpnHxEPvEasJMc8onx 6LO5q50/SZggKhterzW8KN5YOicAtNiIqTlfRKKcvLyUlqeTUZv3M+JDJgDmu9XaoPTsiO50oYp gZa2NYA/XYyPteJV9Xnddwx3JWFdFTJdhR1YfusZKj+YyWiKOVqZFG2bHlPXeFqaJ3r6LEBLv1j ZdQ/eAHwQrOmS524kuJFl7CswrU4KYIkroYjCqW X-Received: by 2002:a05:600c:450d:b0:482:eec4:758 with SMTP id 5b1f17b1804b1-48373a4f05bmr38130885e9.26.1770995049313; Fri, 13 Feb 2026 07:04:09 -0800 (PST) Received: from Lord-Beerus.station (net-188-152-100-94.cust.vodafonedsl.it. [188.152.100.94]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4835d92267bsm290459385e9.0.2026.02.13.07.04.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Feb 2026 07:04:08 -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 v4] ASoC: simple-card-utils: add sysclk ordering support Date: Fri, 13 Feb 2026 16:03:55 +0100 Message-ID: <20260213150355.442609-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 Acked-by: Kuninori Morimoto --- v4: - Removed SIMPLE_SYSCLK_ORDER_UNSPEC enum v3: - DT flag not applicable, not a hardware configuration - Introduced enum to support order configuration Link: https://patchwork.kernel.org/project/alsa-devel/patch/20260211112815.= 126734-1-stefano.r@variscite.com/ 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 | 6 ++++ sound/soc/generic/simple-card-utils.c | 41 ++++++++++++++++++++------- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/include/sound/simple_card_utils.h b/include/sound/simple_card_= utils.h index 69a9c9c4d0e9..915e6ae5f68d 100644 --- a/include/sound/simple_card_utils.h +++ b/include/sound/simple_card_utils.h @@ -54,6 +54,11 @@ struct prop_nums { int platforms; }; =20 +enum simple_util_sysclk_order { + SIMPLE_SYSCLK_ORDER_CODEC_FIRST =3D 0, + SIMPLE_SYSCLK_ORDER_CPU_FIRST, +}; + struct simple_util_priv { struct snd_soc_card snd_card; struct simple_dai_props { @@ -63,6 +68,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..fdd8b76f2914 100644 --- a/sound/soc/generic/simple-card-utils.c +++ b/sound/soc/generic/simple-card-utils.c @@ -468,6 +468,7 @@ int simple_util_hw_params(struct snd_pcm_substream *sub= stream, 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 @@ -501,18 +502,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