]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
clk: qcom: camcc-x1e80100: Add support for camera QDSS debug clocks
authorJagadeesh Kona <jagadeesh.kona@oss.qualcomm.com>
Thu, 7 May 2026 05:38:29 +0000 (11:08 +0530)
committerBjorn Andersson <andersson@kernel.org>
Sun, 7 Jun 2026 00:50:16 +0000 (19:50 -0500)
Add support for camera QDSS debug clocks on X1E80100 platform which
are required to be voted for camera icp and cpas usecases. This change
aligns the camcc driver to the new ABI exposed from X1E80100 camcc
bindings that supports these camcc QDSS debug clocks.

Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Jagadeesh Kona <jagadeesh.kona@oss.qualcomm.com>
Fixes: 76126a5129b5 ("clk: qcom: Add camcc clock driver for x1e80100")
Link: https://lore.kernel.org/r/20260507-purwa-videocc-camcc-v5-4-fc3af4130282@oss.qualcomm.com
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
drivers/clk/qcom/camcc-x1e80100.c

index 81f579ff6993349f4993fd2de14605379711f90a..c12994af42cfc4cc1a2a32663940313b83311919 100644 (file)
@@ -1052,6 +1052,31 @@ static struct clk_rcg2 cam_cc_mclk7_clk_src = {
        },
 };
 
+static const struct freq_tbl ftbl_cam_cc_qdss_debug_clk_src[] = {
+       F(19200000, P_BI_TCXO, 1, 0, 0),
+       F(60000000, P_CAM_CC_PLL8_OUT_EVEN, 8, 0, 0),
+       F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0),
+       F(150000000, P_CAM_CC_PLL0_OUT_EVEN, 4, 0, 0),
+       F(300000000, P_CAM_CC_PLL0_OUT_MAIN, 4, 0, 0),
+       { }
+};
+
+static struct clk_rcg2 cam_cc_qdss_debug_clk_src = {
+       .cmd_rcgr = 0x13938,
+       .mnd_width = 0,
+       .hid_width = 5,
+       .parent_map = cam_cc_parent_map_0,
+       .freq_tbl = ftbl_cam_cc_qdss_debug_clk_src,
+       .hw_clk_ctrl = true,
+       .clkr.hw.init = &(const struct clk_init_data) {
+               .name = "cam_cc_qdss_debug_clk_src",
+               .parent_data = cam_cc_parent_data_0,
+               .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
+               .flags = CLK_SET_RATE_PARENT,
+               .ops = &clk_rcg2_shared_ops,
+       },
+};
+
 static const struct freq_tbl ftbl_cam_cc_sfe_0_clk_src[] = {
        F(345600000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
        F(432000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
@@ -2182,6 +2207,42 @@ static struct clk_branch cam_cc_mclk7_clk = {
        },
 };
 
+static struct clk_branch cam_cc_qdss_debug_clk = {
+       .halt_reg = 0x13a64,
+       .halt_check = BRANCH_HALT,
+       .clkr = {
+               .enable_reg = 0x13a64,
+               .enable_mask = BIT(0),
+               .hw.init = &(const struct clk_init_data) {
+                       .name = "cam_cc_qdss_debug_clk",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &cam_cc_qdss_debug_clk_src.clkr.hw,
+                       },
+                       .num_parents = 1,
+                       .flags = CLK_SET_RATE_PARENT,
+                       .ops = &clk_branch2_ops,
+               },
+       },
+};
+
+static struct clk_branch cam_cc_qdss_debug_xo_clk = {
+       .halt_reg = 0x13a68,
+       .halt_check = BRANCH_HALT,
+       .clkr = {
+               .enable_reg = 0x13a68,
+               .enable_mask = BIT(0),
+               .hw.init = &(const struct clk_init_data) {
+                       .name = "cam_cc_qdss_debug_xo_clk",
+                       .parent_hws = (const struct clk_hw*[]) {
+                               &cam_cc_xo_clk_src.clkr.hw,
+                       },
+                       .num_parents = 1,
+                       .flags = CLK_SET_RATE_PARENT,
+                       .ops = &clk_branch2_ops,
+               },
+       },
+};
+
 static struct clk_branch cam_cc_sfe_0_clk = {
        .halt_reg = 0x133c0,
        .halt_check = BRANCH_HALT,
@@ -2398,6 +2459,9 @@ static struct clk_regmap *cam_cc_x1e80100_clocks[] = {
        [CAM_CC_PLL6_OUT_EVEN] = &cam_cc_pll6_out_even.clkr,
        [CAM_CC_PLL8] = &cam_cc_pll8.clkr,
        [CAM_CC_PLL8_OUT_EVEN] = &cam_cc_pll8_out_even.clkr,
+       [CAM_CC_QDSS_DEBUG_CLK] = &cam_cc_qdss_debug_clk.clkr,
+       [CAM_CC_QDSS_DEBUG_CLK_SRC] = &cam_cc_qdss_debug_clk_src.clkr,
+       [CAM_CC_QDSS_DEBUG_XO_CLK] = &cam_cc_qdss_debug_xo_clk.clkr,
        [CAM_CC_SFE_0_CLK] = &cam_cc_sfe_0_clk.clkr,
        [CAM_CC_SFE_0_CLK_SRC] = &cam_cc_sfe_0_clk_src.clkr,
        [CAM_CC_SFE_0_FAST_AHB_CLK] = &cam_cc_sfe_0_fast_ahb_clk.clkr,