Skip to content

Commit a209cf9

Browse files
Jagadeesh Konaandersson
authored andcommitted
clk: qcom: camcc-sm8550: Add support for qdss, sleep and xo clocks
Add support for camera qdss, sleep and xo clocks. Co-developed-by: Taniya Das <quic_tdas@quicinc.com> Signed-off-by: Taniya Das <quic_tdas@quicinc.com> Signed-off-by: Jagadeesh Kona <quic_jkona@quicinc.com> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Link: https://lore.kernel.org/r/20230707035744.22245-5-quic_jkona@quicinc.com Signed-off-by: Bjorn Andersson <andersson@kernel.org>
1 parent ccc4e6a commit a209cf9

1 file changed

Lines changed: 181 additions & 0 deletions

File tree

drivers/clk/qcom/camcc-sm8550.c

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,13 @@
2222
enum {
2323
DT_IFACE,
2424
DT_BI_TCXO,
25+
DT_BI_TCXO_AO,
26+
DT_SLEEP_CLK,
2527
};
2628

2729
enum {
2830
P_BI_TCXO,
31+
P_BI_TCXO_AO,
2932
P_CAM_CC_PLL0_OUT_EVEN,
3033
P_CAM_CC_PLL0_OUT_MAIN,
3134
P_CAM_CC_PLL0_OUT_ODD,
@@ -43,6 +46,7 @@ enum {
4346
P_CAM_CC_PLL10_OUT_EVEN,
4447
P_CAM_CC_PLL11_OUT_EVEN,
4548
P_CAM_CC_PLL12_OUT_EVEN,
49+
P_SLEEP_CLK,
4650
};
4751

4852
static const struct pll_vco lucid_ole_vco[] = {
@@ -881,6 +885,22 @@ static const struct clk_parent_data cam_cc_parent_data_11[] = {
881885
{ .hw = &cam_cc_pll7_out_even.clkr.hw },
882886
};
883887

888+
static const struct parent_map cam_cc_parent_map_12[] = {
889+
{ P_SLEEP_CLK, 0 },
890+
};
891+
892+
static const struct clk_parent_data cam_cc_parent_data_12[] = {
893+
{ .index = DT_SLEEP_CLK },
894+
};
895+
896+
static const struct parent_map cam_cc_parent_map_13_ao[] = {
897+
{ P_BI_TCXO_AO, 0 },
898+
};
899+
900+
static const struct clk_parent_data cam_cc_parent_data_13_ao[] = {
901+
{ .index = DT_BI_TCXO_AO },
902+
};
903+
884904
static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
885905
F(19200000, P_BI_TCXO, 1, 0, 0),
886906
F(200000000, P_CAM_CC_PLL8_OUT_EVEN, 1, 0, 0),
@@ -1565,6 +1585,29 @@ static struct clk_rcg2 cam_cc_mclk7_clk_src = {
15651585
},
15661586
};
15671587

1588+
static const struct freq_tbl ftbl_cam_cc_qdss_debug_clk_src[] = {
1589+
F(19200000, P_BI_TCXO, 1, 0, 0),
1590+
F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0),
1591+
F(150000000, P_CAM_CC_PLL0_OUT_EVEN, 4, 0, 0),
1592+
F(300000000, P_CAM_CC_PLL0_OUT_MAIN, 4, 0, 0),
1593+
{ }
1594+
};
1595+
1596+
static struct clk_rcg2 cam_cc_qdss_debug_clk_src = {
1597+
.cmd_rcgr = 0x13f24,
1598+
.mnd_width = 0,
1599+
.hid_width = 5,
1600+
.parent_map = cam_cc_parent_map_0,
1601+
.freq_tbl = ftbl_cam_cc_qdss_debug_clk_src,
1602+
.clkr.hw.init = &(const struct clk_init_data) {
1603+
.name = "cam_cc_qdss_debug_clk_src",
1604+
.parent_data = cam_cc_parent_data_0,
1605+
.num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
1606+
.flags = CLK_SET_RATE_PARENT,
1607+
.ops = &clk_rcg2_shared_ops,
1608+
},
1609+
};
1610+
15681611
static const struct freq_tbl ftbl_cam_cc_sfe_0_clk_src[] = {
15691612
F(466000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
15701613
F(594000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
@@ -1611,6 +1654,26 @@ static struct clk_rcg2 cam_cc_sfe_1_clk_src = {
16111654
},
16121655
};
16131656

1657+
static const struct freq_tbl ftbl_cam_cc_sleep_clk_src[] = {
1658+
F(32000, P_SLEEP_CLK, 1, 0, 0),
1659+
{ }
1660+
};
1661+
1662+
static struct clk_rcg2 cam_cc_sleep_clk_src = {
1663+
.cmd_rcgr = 0x141a0,
1664+
.mnd_width = 0,
1665+
.hid_width = 5,
1666+
.parent_map = cam_cc_parent_map_12,
1667+
.freq_tbl = ftbl_cam_cc_sleep_clk_src,
1668+
.clkr.hw.init = &(const struct clk_init_data) {
1669+
.name = "cam_cc_sleep_clk_src",
1670+
.parent_data = cam_cc_parent_data_12,
1671+
.num_parents = ARRAY_SIZE(cam_cc_parent_data_12),
1672+
.flags = CLK_SET_RATE_PARENT,
1673+
.ops = &clk_rcg2_shared_ops,
1674+
},
1675+
};
1676+
16141677
static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
16151678
F(19200000, P_BI_TCXO, 1, 0, 0),
16161679
F(80000000, P_CAM_CC_PLL0_OUT_EVEN, 7.5, 0, 0),
@@ -1632,6 +1695,26 @@ static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
16321695
},
16331696
};
16341697

1698+
static const struct freq_tbl ftbl_cam_cc_xo_clk_src[] = {
1699+
F(19200000, P_BI_TCXO_AO, 1, 0, 0),
1700+
{ }
1701+
};
1702+
1703+
static struct clk_rcg2 cam_cc_xo_clk_src = {
1704+
.cmd_rcgr = 0x14070,
1705+
.mnd_width = 0,
1706+
.hid_width = 5,
1707+
.parent_map = cam_cc_parent_map_13_ao,
1708+
.freq_tbl = ftbl_cam_cc_xo_clk_src,
1709+
.clkr.hw.init = &(const struct clk_init_data) {
1710+
.name = "cam_cc_xo_clk_src",
1711+
.parent_data = cam_cc_parent_data_13_ao,
1712+
.num_parents = ARRAY_SIZE(cam_cc_parent_data_13_ao),
1713+
.flags = CLK_SET_RATE_PARENT,
1714+
.ops = &clk_rcg2_shared_ops,
1715+
},
1716+
};
1717+
16351718
static struct clk_branch cam_cc_bps_ahb_clk = {
16361719
.halt_reg = 0x10274,
16371720
.halt_check = BRANCH_HALT,
@@ -1704,6 +1787,42 @@ static struct clk_branch cam_cc_camnoc_axi_clk = {
17041787
},
17051788
};
17061789

1790+
static struct clk_branch cam_cc_camnoc_dcd_xo_clk = {
1791+
.halt_reg = 0x13f18,
1792+
.halt_check = BRANCH_HALT,
1793+
.clkr = {
1794+
.enable_reg = 0x13f18,
1795+
.enable_mask = BIT(0),
1796+
.hw.init = &(const struct clk_init_data) {
1797+
.name = "cam_cc_camnoc_dcd_xo_clk",
1798+
.parent_hws = (const struct clk_hw*[]) {
1799+
&cam_cc_xo_clk_src.clkr.hw,
1800+
},
1801+
.num_parents = 1,
1802+
.flags = CLK_SET_RATE_PARENT,
1803+
.ops = &clk_branch2_ops,
1804+
},
1805+
},
1806+
};
1807+
1808+
static struct clk_branch cam_cc_camnoc_xo_clk = {
1809+
.halt_reg = 0x13f1c,
1810+
.halt_check = BRANCH_HALT,
1811+
.clkr = {
1812+
.enable_reg = 0x13f1c,
1813+
.enable_mask = BIT(0),
1814+
.hw.init = &(const struct clk_init_data) {
1815+
.name = "cam_cc_camnoc_xo_clk",
1816+
.parent_hws = (const struct clk_hw*[]) {
1817+
&cam_cc_xo_clk_src.clkr.hw,
1818+
},
1819+
.num_parents = 1,
1820+
.flags = CLK_SET_RATE_PARENT,
1821+
.ops = &clk_branch2_ops,
1822+
},
1823+
},
1824+
};
1825+
17071826
static struct clk_branch cam_cc_cci_0_clk = {
17081827
.halt_reg = 0x13a2c,
17091828
.halt_check = BRANCH_HALT,
@@ -2370,6 +2489,24 @@ static struct clk_branch cam_cc_drv_ahb_clk = {
23702489
},
23712490
};
23722491

2492+
static struct clk_branch cam_cc_drv_xo_clk = {
2493+
.halt_reg = 0x142d4,
2494+
.halt_check = BRANCH_HALT,
2495+
.clkr = {
2496+
.enable_reg = 0x142d4,
2497+
.enable_mask = BIT(0),
2498+
.hw.init = &(const struct clk_init_data) {
2499+
.name = "cam_cc_drv_xo_clk",
2500+
.parent_hws = (const struct clk_hw*[]) {
2501+
&cam_cc_xo_clk_src.clkr.hw,
2502+
},
2503+
.num_parents = 1,
2504+
.flags = CLK_SET_RATE_PARENT,
2505+
.ops = &clk_branch2_ops,
2506+
},
2507+
},
2508+
};
2509+
23732510
static struct clk_branch cam_cc_icp_ahb_clk = {
23742511
.halt_reg = 0x138fc,
23752512
.halt_check = BRANCH_HALT,
@@ -2910,6 +3047,42 @@ static struct clk_branch cam_cc_mclk7_clk = {
29103047
},
29113048
};
29123049

3050+
static struct clk_branch cam_cc_qdss_debug_clk = {
3051+
.halt_reg = 0x14050,
3052+
.halt_check = BRANCH_HALT,
3053+
.clkr = {
3054+
.enable_reg = 0x14050,
3055+
.enable_mask = BIT(0),
3056+
.hw.init = &(const struct clk_init_data) {
3057+
.name = "cam_cc_qdss_debug_clk",
3058+
.parent_hws = (const struct clk_hw*[]) {
3059+
&cam_cc_qdss_debug_clk_src.clkr.hw,
3060+
},
3061+
.num_parents = 1,
3062+
.flags = CLK_SET_RATE_PARENT,
3063+
.ops = &clk_branch2_ops,
3064+
},
3065+
},
3066+
};
3067+
3068+
static struct clk_branch cam_cc_qdss_debug_xo_clk = {
3069+
.halt_reg = 0x14054,
3070+
.halt_check = BRANCH_HALT,
3071+
.clkr = {
3072+
.enable_reg = 0x14054,
3073+
.enable_mask = BIT(0),
3074+
.hw.init = &(const struct clk_init_data) {
3075+
.name = "cam_cc_qdss_debug_xo_clk",
3076+
.parent_hws = (const struct clk_hw*[]) {
3077+
&cam_cc_xo_clk_src.clkr.hw,
3078+
},
3079+
.num_parents = 1,
3080+
.flags = CLK_SET_RATE_PARENT,
3081+
.ops = &clk_branch2_ops,
3082+
},
3083+
},
3084+
};
3085+
29133086
static struct clk_branch cam_cc_sbi_clk = {
29143087
.halt_reg = 0x10540,
29153088
.halt_check = BRANCH_HALT,
@@ -3133,6 +3306,8 @@ static struct clk_regmap *cam_cc_sm8550_clocks[] = {
31333306
[CAM_CC_BPS_FAST_AHB_CLK] = &cam_cc_bps_fast_ahb_clk.clkr,
31343307
[CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr,
31353308
[CAM_CC_CAMNOC_AXI_CLK_SRC] = &cam_cc_camnoc_axi_clk_src.clkr,
3309+
[CAM_CC_CAMNOC_DCD_XO_CLK] = &cam_cc_camnoc_dcd_xo_clk.clkr,
3310+
[CAM_CC_CAMNOC_XO_CLK] = &cam_cc_camnoc_xo_clk.clkr,
31363311
[CAM_CC_CCI_0_CLK] = &cam_cc_cci_0_clk.clkr,
31373312
[CAM_CC_CCI_0_CLK_SRC] = &cam_cc_cci_0_clk_src.clkr,
31383313
[CAM_CC_CCI_1_CLK] = &cam_cc_cci_1_clk.clkr,
@@ -3184,6 +3359,7 @@ static struct clk_regmap *cam_cc_sm8550_clocks[] = {
31843359
[CAM_CC_CSIPHY6_CLK] = &cam_cc_csiphy6_clk.clkr,
31853360
[CAM_CC_CSIPHY7_CLK] = &cam_cc_csiphy7_clk.clkr,
31863361
[CAM_CC_DRV_AHB_CLK] = &cam_cc_drv_ahb_clk.clkr,
3362+
[CAM_CC_DRV_XO_CLK] = &cam_cc_drv_xo_clk.clkr,
31873363
[CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
31883364
[CAM_CC_ICP_AHB_CLK] = &cam_cc_icp_ahb_clk.clkr,
31893365
[CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
@@ -3260,6 +3436,9 @@ static struct clk_regmap *cam_cc_sm8550_clocks[] = {
32603436
[CAM_CC_PLL11_OUT_EVEN] = &cam_cc_pll11_out_even.clkr,
32613437
[CAM_CC_PLL12] = &cam_cc_pll12.clkr,
32623438
[CAM_CC_PLL12_OUT_EVEN] = &cam_cc_pll12_out_even.clkr,
3439+
[CAM_CC_QDSS_DEBUG_CLK] = &cam_cc_qdss_debug_clk.clkr,
3440+
[CAM_CC_QDSS_DEBUG_CLK_SRC] = &cam_cc_qdss_debug_clk_src.clkr,
3441+
[CAM_CC_QDSS_DEBUG_XO_CLK] = &cam_cc_qdss_debug_xo_clk.clkr,
32633442
[CAM_CC_SBI_CLK] = &cam_cc_sbi_clk.clkr,
32643443
[CAM_CC_SBI_FAST_AHB_CLK] = &cam_cc_sbi_fast_ahb_clk.clkr,
32653444
[CAM_CC_SFE_0_CLK] = &cam_cc_sfe_0_clk.clkr,
@@ -3268,7 +3447,9 @@ static struct clk_regmap *cam_cc_sm8550_clocks[] = {
32683447
[CAM_CC_SFE_1_CLK] = &cam_cc_sfe_1_clk.clkr,
32693448
[CAM_CC_SFE_1_CLK_SRC] = &cam_cc_sfe_1_clk_src.clkr,
32703449
[CAM_CC_SFE_1_FAST_AHB_CLK] = &cam_cc_sfe_1_fast_ahb_clk.clkr,
3450+
[CAM_CC_SLEEP_CLK_SRC] = &cam_cc_sleep_clk_src.clkr,
32713451
[CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
3452+
[CAM_CC_XO_CLK_SRC] = &cam_cc_xo_clk_src.clkr,
32723453
};
32733454

32743455
static struct gdsc *cam_cc_sm8550_gdscs[] = {

0 commit comments

Comments
 (0)