From nobody Mon Feb 9 13:21:19 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 46DBD23D7D8; Mon, 26 Jan 2026 06:02:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769407329; cv=none; b=IrARArP20WlDgheUBnWNQFTabj4gPfjNbgH7J0FBCkX55klexCyHmyXDyLLLWkRRortoeGqazHizN8EeekcycPfaNLaFGHABLqJ5tcQtY1TbEol9MMlWSoEn/6zQbqoUGAVL1QDR/hH9yETxqZA7meuE/ILWqvsyWUh1iUzumSA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769407329; c=relaxed/simple; bh=6MtBAdybK+8cyXTFi9GhayfpSH5N+wcUKSicM9HCaJ8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=US1/9FYXVOfZjgIp5Yzkgt4GEw6q7B5zcfVmM/js03m9fgGiy72F7cJSgwGgTbovfgXPiKJHa1sC8xLaN9EzJ1qHQeyM08nZZciZCBi4uaGGvG0gDGBaIRS21dJgMe3nuAV7mPWg+f45JWIasK2Vic87nkqG3C9hbOarBTWdljs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=tj2XQMmd; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="tj2XQMmd" Received: by smtp.kernel.org (Postfix) with ESMTPS id F0E76C2BCAF; Mon, 26 Jan 2026 06:02:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1769407329; bh=6MtBAdybK+8cyXTFi9GhayfpSH5N+wcUKSicM9HCaJ8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=tj2XQMmdw97pz8sC6Sr79E1EI8Q3884pBLNbfyKt5DXz4Xs7TZ1Ftcjy49LNZ9M8m j2HSPNfrCCtvgv45i3ZCmd5kYlhVlpPyCiu8YiE6SH8mbacyCJsD9bwgWGyo7vFRt8 OLMc+XrGacIJmBWogCcwrMTrnMbRivNRz/7Ty7swB6YBB5GZdJ0E15yfdt6neOyQrC b4nEf2622WcTKkCEvpjhEThOD0TmmOVlGtijxax2tJhGvPm650whM8/zDNsemHlnPt VttkaEZQt/woVQg+/b5rly5K6SoVwyNMrwExe10a7RoRl4gqac3uNq4KjqpNp6MwjV z13vTnWErS5Vg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id E7B31C88E48; Mon, 26 Jan 2026 06:02:08 +0000 (UTC) From: Jiebing Chen via B4 Relay Date: Mon, 26 Jan 2026 06:01:45 +0000 Subject: [PATCH v6 4/5] clk: meson: axg_audio: add S4 support 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: <20260126-audio_drvier-v6-4-99e350855bc2@amlogic.com> References: <20260126-audio_drvier-v6-0-99e350855bc2@amlogic.com> In-Reply-To: <20260126-audio_drvier-v6-0-99e350855bc2@amlogic.com> To: Jerome Brunet , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai , Neil Armstrong , Kevin Hilman , Martin Blumenstingl , Michael Turquette , Stephen Boyd Cc: linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-clk@vger.kernel.org, jian.xu@amlogic.com, shuai.li@amlogic.com, zhe.wang@amlogic.com, jiebing chen X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1769407326; l=9384; i=jiebing.chen@amlogic.com; s=20250110; h=from:subject:message-id; bh=mSlr+PYl6Kv5xTlb1MKaLQhx8bgwIvHXfLMJnftHOWU=; b=IQRlwbGMXYegPoWxYzkiXv67EwV1WbD7zJf8asDBo2X4ZGAmiWyDjVKSrsP+JN8TCJOxcAJ6h bVZeYe1N9SeAauB+1gaEsNiFSL2oki44eLUgHpomvMFLR5crQia07oj X-Developer-Key: i=jiebing.chen@amlogic.com; a=ed25519; pk=6rFvvF45A84pLNRy03hfUHeROxHCnZ+1KAGw/DoqKic= X-Endpoint-Received: by B4 Relay for jiebing.chen@amlogic.com/20250110 with auth_id=316 X-Original-From: Jiebing Chen Reply-To: jiebing.chen@amlogic.com From: Jiebing Chen Add S4 support the axg audio clock controllers, Compared with the previous version, the selection of the audio's clock and data pad will be designed in the form of pinmux control. The purpose of doing this is to distinguish between clock control and pin control selection. Signed-off-by: Jiebing Chen --- drivers/clk/meson/axg-audio.c | 165 ++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 165 insertions(+) diff --git a/drivers/clk/meson/axg-audio.c b/drivers/clk/meson/axg-audio.c index fd7eca652261..ab8c05b0509e 100644 --- a/drivers/clk/meson/axg-audio.c +++ b/drivers/clk/meson/axg-audio.c @@ -1150,6 +1150,159 @@ static struct clk_hw *g12a_audio_hw_clks[] =3D { [AUD_CLKID_TOP] =3D &axg_aud_top, }; =20 +/* + * Array of all S4 clocks provided by this provider + * The input clocks of the controller will be populated at runtime + */ +static struct clk_hw *s4_audio_hw_clks[] =3D { + [AUD_CLKID_DDR_ARB] =3D &ddr_arb.hw, + [AUD_CLKID_PDM] =3D &pdm.hw, + [AUD_CLKID_TDMIN_A] =3D &tdmin_a.hw, + [AUD_CLKID_TDMIN_B] =3D &tdmin_b.hw, + [AUD_CLKID_TDMIN_C] =3D &tdmin_c.hw, + [AUD_CLKID_TDMIN_LB] =3D &tdmin_lb.hw, + [AUD_CLKID_TDMOUT_A] =3D &tdmout_a.hw, + [AUD_CLKID_TDMOUT_B] =3D &tdmout_b.hw, + [AUD_CLKID_TDMOUT_C] =3D &tdmout_c.hw, + [AUD_CLKID_FRDDR_A] =3D &frddr_a.hw, + [AUD_CLKID_FRDDR_B] =3D &frddr_b.hw, + [AUD_CLKID_FRDDR_C] =3D &frddr_c.hw, + [AUD_CLKID_TODDR_A] =3D &toddr_a.hw, + [AUD_CLKID_TODDR_B] =3D &toddr_b.hw, + [AUD_CLKID_TODDR_C] =3D &toddr_c.hw, + [AUD_CLKID_LOOPBACK] =3D &loopback.hw, + [AUD_CLKID_SPDIFIN] =3D &spdifin.hw, + [AUD_CLKID_SPDIFOUT] =3D &spdifout.hw, + [AUD_CLKID_RESAMPLE] =3D &resample.hw, + [AUD_CLKID_SPDIFOUT_B] =3D &spdifout_b.hw, + [AUD_CLKID_MST_A_MCLK_SEL] =3D &sm1_mst_a_mclk_sel.hw, + [AUD_CLKID_MST_B_MCLK_SEL] =3D &sm1_mst_b_mclk_sel.hw, + [AUD_CLKID_MST_C_MCLK_SEL] =3D &sm1_mst_c_mclk_sel.hw, + [AUD_CLKID_MST_D_MCLK_SEL] =3D &sm1_mst_d_mclk_sel.hw, + [AUD_CLKID_MST_E_MCLK_SEL] =3D &sm1_mst_e_mclk_sel.hw, + [AUD_CLKID_MST_F_MCLK_SEL] =3D &sm1_mst_f_mclk_sel.hw, + [AUD_CLKID_MST_A_MCLK_DIV] =3D &sm1_mst_a_mclk_div.hw, + [AUD_CLKID_MST_B_MCLK_DIV] =3D &sm1_mst_b_mclk_div.hw, + [AUD_CLKID_MST_C_MCLK_DIV] =3D &sm1_mst_c_mclk_div.hw, + [AUD_CLKID_MST_D_MCLK_DIV] =3D &sm1_mst_d_mclk_div.hw, + [AUD_CLKID_MST_E_MCLK_DIV] =3D &sm1_mst_e_mclk_div.hw, + [AUD_CLKID_MST_F_MCLK_DIV] =3D &sm1_mst_f_mclk_div.hw, + [AUD_CLKID_MST_A_MCLK] =3D &sm1_mst_a_mclk.hw, + [AUD_CLKID_MST_B_MCLK] =3D &sm1_mst_b_mclk.hw, + [AUD_CLKID_MST_C_MCLK] =3D &sm1_mst_c_mclk.hw, + [AUD_CLKID_MST_D_MCLK] =3D &sm1_mst_d_mclk.hw, + [AUD_CLKID_MST_E_MCLK] =3D &sm1_mst_e_mclk.hw, + [AUD_CLKID_MST_F_MCLK] =3D &sm1_mst_f_mclk.hw, + [AUD_CLKID_SPDIFOUT_CLK_SEL] =3D &spdifout_clk_sel.hw, + [AUD_CLKID_SPDIFOUT_CLK_DIV] =3D &spdifout_clk_div.hw, + [AUD_CLKID_SPDIFOUT_CLK] =3D &spdifout_clk.hw, + [AUD_CLKID_SPDIFOUT_B_CLK_SEL] =3D &spdifout_b_clk_sel.hw, + [AUD_CLKID_SPDIFOUT_B_CLK_DIV] =3D &spdifout_b_clk_div.hw, + [AUD_CLKID_SPDIFOUT_B_CLK] =3D &spdifout_b_clk.hw, + [AUD_CLKID_SPDIFIN_CLK_SEL] =3D &spdifin_clk_sel.hw, + [AUD_CLKID_SPDIFIN_CLK_DIV] =3D &spdifin_clk_div.hw, + [AUD_CLKID_SPDIFIN_CLK] =3D &spdifin_clk.hw, + [AUD_CLKID_PDM_DCLK_SEL] =3D &pdm_dclk_sel.hw, + [AUD_CLKID_PDM_DCLK_DIV] =3D &pdm_dclk_div.hw, + [AUD_CLKID_PDM_DCLK] =3D &pdm_dclk.hw, + [AUD_CLKID_PDM_SYSCLK_SEL] =3D &pdm_sysclk_sel.hw, + [AUD_CLKID_PDM_SYSCLK_DIV] =3D &pdm_sysclk_div.hw, + [AUD_CLKID_PDM_SYSCLK] =3D &pdm_sysclk.hw, + [AUD_CLKID_MST_A_SCLK_PRE_EN] =3D &mst_a_sclk_pre_en.hw, + [AUD_CLKID_MST_B_SCLK_PRE_EN] =3D &mst_b_sclk_pre_en.hw, + [AUD_CLKID_MST_C_SCLK_PRE_EN] =3D &mst_c_sclk_pre_en.hw, + [AUD_CLKID_MST_D_SCLK_PRE_EN] =3D &mst_d_sclk_pre_en.hw, + [AUD_CLKID_MST_E_SCLK_PRE_EN] =3D &mst_e_sclk_pre_en.hw, + [AUD_CLKID_MST_F_SCLK_PRE_EN] =3D &mst_f_sclk_pre_en.hw, + [AUD_CLKID_MST_A_SCLK_DIV] =3D &mst_a_sclk_div.hw, + [AUD_CLKID_MST_B_SCLK_DIV] =3D &mst_b_sclk_div.hw, + [AUD_CLKID_MST_C_SCLK_DIV] =3D &mst_c_sclk_div.hw, + [AUD_CLKID_MST_D_SCLK_DIV] =3D &mst_d_sclk_div.hw, + [AUD_CLKID_MST_E_SCLK_DIV] =3D &mst_e_sclk_div.hw, + [AUD_CLKID_MST_F_SCLK_DIV] =3D &mst_f_sclk_div.hw, + [AUD_CLKID_MST_A_SCLK_POST_EN] =3D &mst_a_sclk_post_en.hw, + [AUD_CLKID_MST_B_SCLK_POST_EN] =3D &mst_b_sclk_post_en.hw, + [AUD_CLKID_MST_C_SCLK_POST_EN] =3D &mst_c_sclk_post_en.hw, + [AUD_CLKID_MST_D_SCLK_POST_EN] =3D &mst_d_sclk_post_en.hw, + [AUD_CLKID_MST_E_SCLK_POST_EN] =3D &mst_e_sclk_post_en.hw, + [AUD_CLKID_MST_F_SCLK_POST_EN] =3D &mst_f_sclk_post_en.hw, + [AUD_CLKID_MST_A_SCLK] =3D &mst_a_sclk.hw, + [AUD_CLKID_MST_B_SCLK] =3D &mst_b_sclk.hw, + [AUD_CLKID_MST_C_SCLK] =3D &mst_c_sclk.hw, + [AUD_CLKID_MST_D_SCLK] =3D &mst_d_sclk.hw, + [AUD_CLKID_MST_E_SCLK] =3D &mst_e_sclk.hw, + [AUD_CLKID_MST_F_SCLK] =3D &mst_f_sclk.hw, + [AUD_CLKID_MST_A_LRCLK_DIV] =3D &mst_a_lrclk_div.hw, + [AUD_CLKID_MST_B_LRCLK_DIV] =3D &mst_b_lrclk_div.hw, + [AUD_CLKID_MST_C_LRCLK_DIV] =3D &mst_c_lrclk_div.hw, + [AUD_CLKID_MST_D_LRCLK_DIV] =3D &mst_d_lrclk_div.hw, + [AUD_CLKID_MST_E_LRCLK_DIV] =3D &mst_e_lrclk_div.hw, + [AUD_CLKID_MST_F_LRCLK_DIV] =3D &mst_f_lrclk_div.hw, + [AUD_CLKID_MST_A_LRCLK] =3D &mst_a_lrclk.hw, + [AUD_CLKID_MST_B_LRCLK] =3D &mst_b_lrclk.hw, + [AUD_CLKID_MST_C_LRCLK] =3D &mst_c_lrclk.hw, + [AUD_CLKID_MST_D_LRCLK] =3D &mst_d_lrclk.hw, + [AUD_CLKID_MST_E_LRCLK] =3D &mst_e_lrclk.hw, + [AUD_CLKID_MST_F_LRCLK] =3D &mst_f_lrclk.hw, + [AUD_CLKID_TDMIN_A_SCLK_SEL] =3D &tdmin_a_sclk_sel.hw, + [AUD_CLKID_TDMIN_B_SCLK_SEL] =3D &tdmin_b_sclk_sel.hw, + [AUD_CLKID_TDMIN_C_SCLK_SEL] =3D &tdmin_c_sclk_sel.hw, + [AUD_CLKID_TDMIN_LB_SCLK_SEL] =3D &tdmin_lb_sclk_sel.hw, + [AUD_CLKID_TDMOUT_A_SCLK_SEL] =3D &tdmout_a_sclk_sel.hw, + [AUD_CLKID_TDMOUT_B_SCLK_SEL] =3D &tdmout_b_sclk_sel.hw, + [AUD_CLKID_TDMOUT_C_SCLK_SEL] =3D &tdmout_c_sclk_sel.hw, + [AUD_CLKID_TDMIN_A_SCLK_PRE_EN] =3D &tdmin_a_sclk_pre_en.hw, + [AUD_CLKID_TDMIN_B_SCLK_PRE_EN] =3D &tdmin_b_sclk_pre_en.hw, + [AUD_CLKID_TDMIN_C_SCLK_PRE_EN] =3D &tdmin_c_sclk_pre_en.hw, + [AUD_CLKID_TDMIN_LB_SCLK_PRE_EN] =3D &tdmin_lb_sclk_pre_en.hw, + [AUD_CLKID_TDMOUT_A_SCLK_PRE_EN] =3D &tdmout_a_sclk_pre_en.hw, + [AUD_CLKID_TDMOUT_B_SCLK_PRE_EN] =3D &tdmout_b_sclk_pre_en.hw, + [AUD_CLKID_TDMOUT_C_SCLK_PRE_EN] =3D &tdmout_c_sclk_pre_en.hw, + [AUD_CLKID_TDMIN_A_SCLK_POST_EN] =3D &tdmin_a_sclk_post_en.hw, + [AUD_CLKID_TDMIN_B_SCLK_POST_EN] =3D &tdmin_b_sclk_post_en.hw, + [AUD_CLKID_TDMIN_C_SCLK_POST_EN] =3D &tdmin_c_sclk_post_en.hw, + [AUD_CLKID_TDMIN_LB_SCLK_POST_EN] =3D &tdmin_lb_sclk_post_en.hw, + [AUD_CLKID_TDMOUT_A_SCLK_POST_EN] =3D &tdmout_a_sclk_post_en.hw, + [AUD_CLKID_TDMOUT_B_SCLK_POST_EN] =3D &tdmout_b_sclk_post_en.hw, + [AUD_CLKID_TDMOUT_C_SCLK_POST_EN] =3D &tdmout_c_sclk_post_en.hw, + [AUD_CLKID_TDMIN_A_SCLK] =3D &tdmin_a_sclk.hw, + [AUD_CLKID_TDMIN_B_SCLK] =3D &tdmin_b_sclk.hw, + [AUD_CLKID_TDMIN_C_SCLK] =3D &tdmin_c_sclk.hw, + [AUD_CLKID_TDMIN_LB_SCLK] =3D &tdmin_lb_sclk.hw, + [AUD_CLKID_TDMOUT_A_SCLK] =3D &g12a_tdmout_a_sclk.hw, + [AUD_CLKID_TDMOUT_B_SCLK] =3D &g12a_tdmout_b_sclk.hw, + [AUD_CLKID_TDMOUT_C_SCLK] =3D &g12a_tdmout_c_sclk.hw, + [AUD_CLKID_TDMIN_A_LRCLK] =3D &tdmin_a_lrclk.hw, + [AUD_CLKID_TDMIN_B_LRCLK] =3D &tdmin_b_lrclk.hw, + [AUD_CLKID_TDMIN_C_LRCLK] =3D &tdmin_c_lrclk.hw, + [AUD_CLKID_TDMIN_LB_LRCLK] =3D &tdmin_lb_lrclk.hw, + [AUD_CLKID_TDMOUT_A_LRCLK] =3D &tdmout_a_lrclk.hw, + [AUD_CLKID_TDMOUT_B_LRCLK] =3D &tdmout_b_lrclk.hw, + [AUD_CLKID_TDMOUT_C_LRCLK] =3D &tdmout_c_lrclk.hw, + [AUD_CLKID_TOP] =3D &sm1_aud_top.hw, + [AUD_CLKID_TORAM] =3D &toram.hw, + [AUD_CLKID_EQDRC] =3D &eqdrc.hw, + [AUD_CLKID_RESAMPLE_B] =3D &resample_b.hw, + [AUD_CLKID_TOVAD] =3D &tovad.hw, + [AUD_CLKID_LOCKER] =3D &locker.hw, + [AUD_CLKID_SPDIFIN_LB] =3D &spdifin_lb.hw, + [AUD_CLKID_FRDDR_D] =3D &frddr_d.hw, + [AUD_CLKID_TODDR_D] =3D &toddr_d.hw, + [AUD_CLKID_LOOPBACK_B] =3D &loopback_b.hw, + [AUD_CLKID_CLK81_EN] =3D &sm1_clk81_en.hw, + [AUD_CLKID_SYSCLK_A_DIV] =3D &sm1_sysclk_a_div.hw, + [AUD_CLKID_SYSCLK_A_EN] =3D &sm1_sysclk_a_en.hw, + [AUD_CLKID_SYSCLK_B_DIV] =3D &sm1_sysclk_b_div.hw, + [AUD_CLKID_SYSCLK_B_EN] =3D &sm1_sysclk_b_en.hw, + [AUD_CLKID_EARCRX] =3D &earcrx.hw, + [AUD_CLKID_EARCRX_CMDC_SEL] =3D &sm1_earcrx_cmdc_clk_sel.hw, + [AUD_CLKID_EARCRX_CMDC_DIV] =3D &sm1_earcrx_cmdc_clk_div.hw, + [AUD_CLKID_EARCRX_CMDC] =3D &sm1_earcrx_cmdc_clk.hw, + [AUD_CLKID_EARCRX_DMAC_SEL] =3D &sm1_earcrx_dmac_clk_sel.hw, + [AUD_CLKID_EARCRX_DMAC_DIV] =3D &sm1_earcrx_dmac_clk_div.hw, + [AUD_CLKID_EARCRX_DMAC] =3D &sm1_earcrx_dmac_clk.hw, +}; + /* * Array of all SM1 clocks provided by this provider * The input clocks of the controller will be populated at runtime @@ -1410,6 +1563,15 @@ static const struct audioclk_data g12a_audioclk_data= =3D { .max_register =3D AUDIO_CLK_SPDIFOUT_B_CTRL, }; =20 +static const struct audioclk_data s4_audioclk_data =3D { + .hw_clks =3D { + .hws =3D s4_audio_hw_clks, + .num =3D ARRAY_SIZE(s4_audio_hw_clks), + }, + .rst_drvname =3D "rst-sm1", + .max_register =3D AUDIO_EARCRX_DMAC_CLK_CTRL, +}; + static const struct audioclk_data sm1_audioclk_data =3D { .hw_clks =3D { .hws =3D sm1_audio_hw_clks, @@ -1426,6 +1588,9 @@ static const struct of_device_id clkc_match_table[] = =3D { }, { .compatible =3D "amlogic,g12a-audio-clkc", .data =3D &g12a_audioclk_data + }, { + .compatible =3D "amlogic,s4-audio-clkc", + .data =3D &s4_audioclk_data }, { .compatible =3D "amlogic,sm1-audio-clkc", .data =3D &sm1_audioclk_data --=20 2.52.0