camcc-qcs615.c 41 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
  4. */
  5. #include <linux/clk-provider.h>
  6. #include <linux/module.h>
  7. #include <linux/mod_devicetable.h>
  8. #include <linux/of.h>
  9. #include <linux/platform_device.h>
  10. #include <linux/regmap.h>
  11. #include <dt-bindings/clock/qcom,qcs615-camcc.h>
  12. #include "clk-alpha-pll.h"
  13. #include "clk-branch.h"
  14. #include "clk-pll.h"
  15. #include "clk-rcg.h"
  16. #include "clk-regmap.h"
  17. #include "clk-regmap-divider.h"
  18. #include "clk-regmap-mux.h"
  19. #include "common.h"
  20. #include "gdsc.h"
  21. #include "reset.h"
  22. enum {
  23. DT_BI_TCXO,
  24. };
  25. enum {
  26. P_BI_TCXO,
  27. P_CAM_CC_PLL0_OUT_AUX,
  28. P_CAM_CC_PLL1_OUT_AUX,
  29. P_CAM_CC_PLL2_OUT_AUX2,
  30. P_CAM_CC_PLL2_OUT_EARLY,
  31. P_CAM_CC_PLL3_OUT_MAIN,
  32. };
  33. static const struct pll_vco brammo_vco[] = {
  34. { 500000000, 1250000000, 0 },
  35. };
  36. static const struct pll_vco spark_vco[] = {
  37. { 1000000000, 2100000000, 0 },
  38. { 750000000, 1500000000, 1 },
  39. { 500000000, 1000000000, 2 },
  40. { 300000000, 500000000, 3 },
  41. { 550000000, 1100000000, 4 },
  42. };
  43. /* 600MHz configuration VCO - 2 */
  44. static const struct alpha_pll_config cam_cc_pll0_config = {
  45. .l = 0x1f,
  46. .alpha_hi = 0x40,
  47. .alpha_en_mask = BIT(24),
  48. .vco_val = BIT(21),
  49. .vco_mask = GENMASK(21, 20),
  50. .aux_output_mask = BIT(1),
  51. .config_ctl_val = 0x4001055b,
  52. .test_ctl_hi_val = 0x1,
  53. .test_ctl_hi_mask = 0x1,
  54. };
  55. static struct clk_alpha_pll cam_cc_pll0 = {
  56. .offset = 0x0,
  57. .config = &cam_cc_pll0_config,
  58. .vco_table = spark_vco,
  59. .num_vco = ARRAY_SIZE(spark_vco),
  60. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  61. .clkr = {
  62. .hw.init = &(const struct clk_init_data) {
  63. .name = "cam_cc_pll0",
  64. .parent_data = &(const struct clk_parent_data) {
  65. .index = DT_BI_TCXO,
  66. },
  67. .num_parents = 1,
  68. .ops = &clk_alpha_pll_ops,
  69. },
  70. },
  71. };
  72. /* 808MHz configuration VCO - 2 */
  73. static struct alpha_pll_config cam_cc_pll1_config = {
  74. .l = 0x2a,
  75. .alpha_hi = 0x15,
  76. .alpha = 0x55555555,
  77. .alpha_en_mask = BIT(24),
  78. .vco_val = BIT(21),
  79. .vco_mask = GENMASK(21, 20),
  80. .aux_output_mask = BIT(1),
  81. .config_ctl_val = 0x4001055b,
  82. .test_ctl_hi_val = 0x1,
  83. .test_ctl_hi_mask = 0x1,
  84. };
  85. static struct clk_alpha_pll cam_cc_pll1 = {
  86. .offset = 0x1000,
  87. .config = &cam_cc_pll1_config,
  88. .vco_table = spark_vco,
  89. .num_vco = ARRAY_SIZE(spark_vco),
  90. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  91. .clkr = {
  92. .hw.init = &(const struct clk_init_data) {
  93. .name = "cam_cc_pll1",
  94. .parent_data = &(const struct clk_parent_data) {
  95. .index = DT_BI_TCXO,
  96. },
  97. .num_parents = 1,
  98. .ops = &clk_alpha_pll_ops,
  99. },
  100. },
  101. };
  102. /* 960MHz configuration VCO - 0 */
  103. static struct alpha_pll_config cam_cc_pll2_config = {
  104. .l = 0x32,
  105. .vco_val = 0x0,
  106. .vco_mask = GENMASK(21, 20),
  107. .early_output_mask = BIT(3),
  108. .aux2_output_mask = BIT(2),
  109. .post_div_val = 0x1 << 8,
  110. .post_div_mask = 0x3 << 8,
  111. .config_ctl_val = 0x04289,
  112. .test_ctl_val = 0x08000000,
  113. .test_ctl_mask = 0x08000000,
  114. };
  115. static struct clk_alpha_pll cam_cc_pll2 = {
  116. .offset = 0x2000,
  117. .config = &cam_cc_pll2_config,
  118. .vco_table = brammo_vco,
  119. .num_vco = ARRAY_SIZE(brammo_vco),
  120. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
  121. .clkr = {
  122. .hw.init = &(const struct clk_init_data) {
  123. .name = "cam_cc_pll2",
  124. .parent_data = &(const struct clk_parent_data) {
  125. .index = DT_BI_TCXO,
  126. },
  127. .num_parents = 1,
  128. .ops = &clk_alpha_pll_ops,
  129. },
  130. },
  131. };
  132. static const struct clk_div_table post_div_table_cam_cc_pll2_out_aux2[] = {
  133. { 0x1, 2 },
  134. { }
  135. };
  136. static struct clk_alpha_pll_postdiv cam_cc_pll2_out_aux2 = {
  137. .offset = 0x2000,
  138. .post_div_shift = 8,
  139. .post_div_table = post_div_table_cam_cc_pll2_out_aux2,
  140. .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll2_out_aux2),
  141. .width = 2,
  142. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
  143. .clkr.hw.init = &(const struct clk_init_data) {
  144. .name = "cam_cc_pll2_out_aux2",
  145. .parent_hws = (const struct clk_hw*[]) {
  146. &cam_cc_pll2.clkr.hw,
  147. },
  148. .num_parents = 1,
  149. .ops = &clk_alpha_pll_postdiv_ops,
  150. },
  151. };
  152. /* 1080MHz configuration - VCO - 0 */
  153. static struct alpha_pll_config cam_cc_pll3_config = {
  154. .l = 0x38,
  155. .alpha_hi = 0x40,
  156. .alpha_en_mask = BIT(24),
  157. .vco_val = 0x0,
  158. .vco_mask = GENMASK(21, 20),
  159. .main_output_mask = BIT(0),
  160. .config_ctl_val = 0x4001055b,
  161. .test_ctl_hi_val = 0x1,
  162. .test_ctl_hi_mask = 0x1,
  163. };
  164. static struct clk_alpha_pll cam_cc_pll3 = {
  165. .offset = 0x3000,
  166. .config = &cam_cc_pll3_config,
  167. .vco_table = spark_vco,
  168. .num_vco = ARRAY_SIZE(spark_vco),
  169. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  170. .clkr = {
  171. .hw.init = &(const struct clk_init_data) {
  172. .name = "cam_cc_pll3",
  173. .parent_data = &(const struct clk_parent_data) {
  174. .index = DT_BI_TCXO,
  175. },
  176. .num_parents = 1,
  177. .ops = &clk_alpha_pll_ops,
  178. },
  179. },
  180. };
  181. static const struct parent_map cam_cc_parent_map_0[] = {
  182. { P_BI_TCXO, 0 },
  183. { P_CAM_CC_PLL1_OUT_AUX, 2 },
  184. { P_CAM_CC_PLL0_OUT_AUX, 6 },
  185. };
  186. static const struct clk_parent_data cam_cc_parent_data_0[] = {
  187. { .index = DT_BI_TCXO },
  188. { .hw = &cam_cc_pll1.clkr.hw },
  189. { .hw = &cam_cc_pll0.clkr.hw },
  190. };
  191. static const struct parent_map cam_cc_parent_map_1[] = {
  192. { P_BI_TCXO, 0 },
  193. { P_CAM_CC_PLL2_OUT_EARLY, 4 },
  194. { P_CAM_CC_PLL3_OUT_MAIN, 5 },
  195. { P_CAM_CC_PLL0_OUT_AUX, 6 },
  196. };
  197. static const struct clk_parent_data cam_cc_parent_data_1[] = {
  198. { .index = DT_BI_TCXO },
  199. { .hw = &cam_cc_pll2.clkr.hw },
  200. { .hw = &cam_cc_pll3.clkr.hw },
  201. { .hw = &cam_cc_pll0.clkr.hw },
  202. };
  203. static const struct parent_map cam_cc_parent_map_2[] = {
  204. { P_BI_TCXO, 0 },
  205. { P_CAM_CC_PLL1_OUT_AUX, 2 },
  206. { P_CAM_CC_PLL2_OUT_EARLY, 4 },
  207. { P_CAM_CC_PLL3_OUT_MAIN, 5 },
  208. { P_CAM_CC_PLL0_OUT_AUX, 6 },
  209. };
  210. static const struct clk_parent_data cam_cc_parent_data_2[] = {
  211. { .index = DT_BI_TCXO },
  212. { .hw = &cam_cc_pll1.clkr.hw },
  213. { .hw = &cam_cc_pll2.clkr.hw },
  214. { .hw = &cam_cc_pll3.clkr.hw },
  215. { .hw = &cam_cc_pll0.clkr.hw },
  216. };
  217. static const struct parent_map cam_cc_parent_map_3[] = {
  218. { P_BI_TCXO, 0 },
  219. { P_CAM_CC_PLL2_OUT_AUX2, 1 },
  220. };
  221. static const struct clk_parent_data cam_cc_parent_data_3[] = {
  222. { .index = DT_BI_TCXO },
  223. { .hw = &cam_cc_pll2_out_aux2.clkr.hw },
  224. };
  225. static const struct parent_map cam_cc_parent_map_4[] = {
  226. { P_BI_TCXO, 0 },
  227. { P_CAM_CC_PLL3_OUT_MAIN, 5 },
  228. { P_CAM_CC_PLL0_OUT_AUX, 6 },
  229. };
  230. static const struct clk_parent_data cam_cc_parent_data_4[] = {
  231. { .index = DT_BI_TCXO },
  232. { .hw = &cam_cc_pll3.clkr.hw },
  233. { .hw = &cam_cc_pll0.clkr.hw },
  234. };
  235. static const struct parent_map cam_cc_parent_map_5[] = {
  236. { P_BI_TCXO, 0 },
  237. { P_CAM_CC_PLL0_OUT_AUX, 6 },
  238. };
  239. static const struct clk_parent_data cam_cc_parent_data_5[] = {
  240. { .index = DT_BI_TCXO },
  241. { .hw = &cam_cc_pll0.clkr.hw },
  242. };
  243. static const struct parent_map cam_cc_parent_map_6[] = {
  244. { P_BI_TCXO, 0 },
  245. { P_CAM_CC_PLL1_OUT_AUX, 2 },
  246. { P_CAM_CC_PLL3_OUT_MAIN, 5 },
  247. { P_CAM_CC_PLL0_OUT_AUX, 6 },
  248. };
  249. static const struct clk_parent_data cam_cc_parent_data_6[] = {
  250. { .index = DT_BI_TCXO },
  251. { .hw = &cam_cc_pll1.clkr.hw },
  252. { .hw = &cam_cc_pll3.clkr.hw },
  253. { .hw = &cam_cc_pll0.clkr.hw },
  254. };
  255. static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
  256. F(200000000, P_CAM_CC_PLL0_OUT_AUX, 3, 0, 0),
  257. F(360000000, P_CAM_CC_PLL3_OUT_MAIN, 3, 0, 0),
  258. F(432000000, P_CAM_CC_PLL3_OUT_MAIN, 2.5, 0, 0),
  259. F(480000000, P_CAM_CC_PLL2_OUT_EARLY, 2, 0, 0),
  260. F(540000000, P_CAM_CC_PLL3_OUT_MAIN, 2, 0, 0),
  261. F(600000000, P_CAM_CC_PLL0_OUT_AUX, 1, 0, 0),
  262. { }
  263. };
  264. static struct clk_rcg2 cam_cc_bps_clk_src = {
  265. .cmd_rcgr = 0x6010,
  266. .mnd_width = 0,
  267. .hid_width = 5,
  268. .parent_map = cam_cc_parent_map_1,
  269. .freq_tbl = ftbl_cam_cc_bps_clk_src,
  270. .clkr.hw.init = &(const struct clk_init_data) {
  271. .name = "cam_cc_bps_clk_src",
  272. .parent_data = cam_cc_parent_data_1,
  273. .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
  274. .ops = &clk_rcg2_shared_ops,
  275. },
  276. };
  277. static const struct freq_tbl ftbl_cam_cc_cci_clk_src[] = {
  278. F(37500000, P_CAM_CC_PLL0_OUT_AUX, 16, 0, 0),
  279. F(50000000, P_CAM_CC_PLL0_OUT_AUX, 12, 0, 0),
  280. F(100000000, P_CAM_CC_PLL0_OUT_AUX, 6, 0, 0),
  281. { }
  282. };
  283. static struct clk_rcg2 cam_cc_cci_clk_src = {
  284. .cmd_rcgr = 0xb0d8,
  285. .mnd_width = 8,
  286. .hid_width = 5,
  287. .parent_map = cam_cc_parent_map_5,
  288. .freq_tbl = ftbl_cam_cc_cci_clk_src,
  289. .clkr.hw.init = &(const struct clk_init_data) {
  290. .name = "cam_cc_cci_clk_src",
  291. .parent_data = cam_cc_parent_data_5,
  292. .num_parents = ARRAY_SIZE(cam_cc_parent_data_5),
  293. .ops = &clk_rcg2_shared_ops,
  294. },
  295. };
  296. static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
  297. F(100000000, P_CAM_CC_PLL0_OUT_AUX, 6, 0, 0),
  298. F(200000000, P_CAM_CC_PLL0_OUT_AUX, 3, 0, 0),
  299. F(269333333, P_CAM_CC_PLL1_OUT_AUX, 3, 0, 0),
  300. F(320000000, P_CAM_CC_PLL2_OUT_EARLY, 3, 0, 0),
  301. F(384000000, P_CAM_CC_PLL2_OUT_EARLY, 2.5, 0, 0),
  302. { }
  303. };
  304. static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
  305. .cmd_rcgr = 0x9064,
  306. .mnd_width = 0,
  307. .hid_width = 5,
  308. .parent_map = cam_cc_parent_map_2,
  309. .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
  310. .clkr.hw.init = &(const struct clk_init_data) {
  311. .name = "cam_cc_cphy_rx_clk_src",
  312. .parent_data = cam_cc_parent_data_2,
  313. .num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
  314. .ops = &clk_rcg2_shared_ops,
  315. },
  316. };
  317. static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
  318. F(100000000, P_CAM_CC_PLL0_OUT_AUX, 6, 0, 0),
  319. F(200000000, P_CAM_CC_PLL0_OUT_AUX, 3, 0, 0),
  320. F(269333333, P_CAM_CC_PLL1_OUT_AUX, 3, 0, 0),
  321. { }
  322. };
  323. static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
  324. .cmd_rcgr = 0x5004,
  325. .mnd_width = 0,
  326. .hid_width = 5,
  327. .parent_map = cam_cc_parent_map_0,
  328. .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
  329. .clkr.hw.init = &(const struct clk_init_data) {
  330. .name = "cam_cc_csi0phytimer_clk_src",
  331. .parent_data = cam_cc_parent_data_0,
  332. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  333. .ops = &clk_rcg2_shared_ops,
  334. },
  335. };
  336. static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
  337. .cmd_rcgr = 0x5028,
  338. .mnd_width = 0,
  339. .hid_width = 5,
  340. .parent_map = cam_cc_parent_map_0,
  341. .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
  342. .clkr.hw.init = &(const struct clk_init_data) {
  343. .name = "cam_cc_csi1phytimer_clk_src",
  344. .parent_data = cam_cc_parent_data_0,
  345. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  346. .ops = &clk_rcg2_shared_ops,
  347. },
  348. };
  349. static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
  350. .cmd_rcgr = 0x504c,
  351. .mnd_width = 0,
  352. .hid_width = 5,
  353. .parent_map = cam_cc_parent_map_0,
  354. .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
  355. .clkr.hw.init = &(const struct clk_init_data) {
  356. .name = "cam_cc_csi2phytimer_clk_src",
  357. .parent_data = cam_cc_parent_data_0,
  358. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  359. .ops = &clk_rcg2_shared_ops,
  360. },
  361. };
  362. static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
  363. F(100000000, P_CAM_CC_PLL0_OUT_AUX, 6, 0, 0),
  364. F(200000000, P_CAM_CC_PLL0_OUT_AUX, 3, 0, 0),
  365. F(300000000, P_CAM_CC_PLL0_OUT_AUX, 2, 0, 0),
  366. F(404000000, P_CAM_CC_PLL1_OUT_AUX, 2, 0, 0),
  367. { }
  368. };
  369. static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
  370. .cmd_rcgr = 0x603c,
  371. .mnd_width = 0,
  372. .hid_width = 5,
  373. .parent_map = cam_cc_parent_map_0,
  374. .freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
  375. .clkr.hw.init = &(const struct clk_init_data) {
  376. .name = "cam_cc_fast_ahb_clk_src",
  377. .parent_data = cam_cc_parent_data_0,
  378. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  379. .ops = &clk_rcg2_shared_ops,
  380. },
  381. };
  382. static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = {
  383. F(240000000, P_CAM_CC_PLL0_OUT_AUX, 2.5, 0, 0),
  384. F(360000000, P_CAM_CC_PLL3_OUT_MAIN, 3, 0, 0),
  385. F(432000000, P_CAM_CC_PLL3_OUT_MAIN, 2.5, 0, 0),
  386. F(480000000, P_CAM_CC_PLL2_OUT_EARLY, 2, 0, 0),
  387. F(540000000, P_CAM_CC_PLL3_OUT_MAIN, 2, 0, 0),
  388. F(600000000, P_CAM_CC_PLL0_OUT_AUX, 1, 0, 0),
  389. { }
  390. };
  391. static struct clk_rcg2 cam_cc_icp_clk_src = {
  392. .cmd_rcgr = 0xb088,
  393. .mnd_width = 0,
  394. .hid_width = 5,
  395. .parent_map = cam_cc_parent_map_1,
  396. .freq_tbl = ftbl_cam_cc_icp_clk_src,
  397. .clkr.hw.init = &(const struct clk_init_data) {
  398. .name = "cam_cc_icp_clk_src",
  399. .parent_data = cam_cc_parent_data_1,
  400. .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
  401. .ops = &clk_rcg2_shared_ops,
  402. },
  403. };
  404. static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = {
  405. F(240000000, P_CAM_CC_PLL0_OUT_AUX, 2.5, 0, 0),
  406. F(360000000, P_CAM_CC_PLL3_OUT_MAIN, 3, 0, 0),
  407. F(432000000, P_CAM_CC_PLL3_OUT_MAIN, 2.5, 0, 0),
  408. F(540000000, P_CAM_CC_PLL3_OUT_MAIN, 2, 0, 0),
  409. F(600000000, P_CAM_CC_PLL0_OUT_AUX, 1, 0, 0),
  410. { }
  411. };
  412. static struct clk_rcg2 cam_cc_ife_0_clk_src = {
  413. .cmd_rcgr = 0x9010,
  414. .mnd_width = 0,
  415. .hid_width = 5,
  416. .parent_map = cam_cc_parent_map_4,
  417. .freq_tbl = ftbl_cam_cc_ife_0_clk_src,
  418. .clkr.hw.init = &(const struct clk_init_data) {
  419. .name = "cam_cc_ife_0_clk_src",
  420. .parent_data = cam_cc_parent_data_4,
  421. .num_parents = ARRAY_SIZE(cam_cc_parent_data_4),
  422. .ops = &clk_rcg2_shared_ops,
  423. },
  424. };
  425. static const struct freq_tbl ftbl_cam_cc_ife_0_csid_clk_src[] = {
  426. F(100000000, P_CAM_CC_PLL0_OUT_AUX, 6, 0, 0),
  427. F(200000000, P_CAM_CC_PLL0_OUT_AUX, 3, 0, 0),
  428. F(320000000, P_CAM_CC_PLL2_OUT_EARLY, 3, 0, 0),
  429. F(404000000, P_CAM_CC_PLL1_OUT_AUX, 2, 0, 0),
  430. F(480000000, P_CAM_CC_PLL2_OUT_EARLY, 2, 0, 0),
  431. F(540000000, P_CAM_CC_PLL3_OUT_MAIN, 2, 0, 0),
  432. { }
  433. };
  434. static struct clk_rcg2 cam_cc_ife_0_csid_clk_src = {
  435. .cmd_rcgr = 0x903c,
  436. .mnd_width = 0,
  437. .hid_width = 5,
  438. .parent_map = cam_cc_parent_map_2,
  439. .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
  440. .clkr.hw.init = &(const struct clk_init_data) {
  441. .name = "cam_cc_ife_0_csid_clk_src",
  442. .parent_data = cam_cc_parent_data_2,
  443. .num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
  444. .ops = &clk_rcg2_shared_ops,
  445. },
  446. };
  447. static struct clk_rcg2 cam_cc_ife_1_clk_src = {
  448. .cmd_rcgr = 0xa010,
  449. .mnd_width = 0,
  450. .hid_width = 5,
  451. .parent_map = cam_cc_parent_map_4,
  452. .freq_tbl = ftbl_cam_cc_ife_0_clk_src,
  453. .clkr.hw.init = &(const struct clk_init_data) {
  454. .name = "cam_cc_ife_1_clk_src",
  455. .parent_data = cam_cc_parent_data_4,
  456. .num_parents = ARRAY_SIZE(cam_cc_parent_data_4),
  457. .ops = &clk_rcg2_shared_ops,
  458. },
  459. };
  460. static struct clk_rcg2 cam_cc_ife_1_csid_clk_src = {
  461. .cmd_rcgr = 0xa034,
  462. .mnd_width = 0,
  463. .hid_width = 5,
  464. .parent_map = cam_cc_parent_map_2,
  465. .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
  466. .clkr.hw.init = &(const struct clk_init_data) {
  467. .name = "cam_cc_ife_1_csid_clk_src",
  468. .parent_data = cam_cc_parent_data_2,
  469. .num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
  470. .ops = &clk_rcg2_shared_ops,
  471. },
  472. };
  473. static struct clk_rcg2 cam_cc_ife_lite_clk_src = {
  474. .cmd_rcgr = 0xb004,
  475. .mnd_width = 0,
  476. .hid_width = 5,
  477. .parent_map = cam_cc_parent_map_4,
  478. .freq_tbl = ftbl_cam_cc_ife_0_clk_src,
  479. .clkr.hw.init = &(const struct clk_init_data) {
  480. .name = "cam_cc_ife_lite_clk_src",
  481. .parent_data = cam_cc_parent_data_4,
  482. .num_parents = ARRAY_SIZE(cam_cc_parent_data_4),
  483. .ops = &clk_rcg2_shared_ops,
  484. },
  485. };
  486. static struct clk_rcg2 cam_cc_ife_lite_csid_clk_src = {
  487. .cmd_rcgr = 0xb024,
  488. .mnd_width = 0,
  489. .hid_width = 5,
  490. .parent_map = cam_cc_parent_map_2,
  491. .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
  492. .clkr.hw.init = &(const struct clk_init_data) {
  493. .name = "cam_cc_ife_lite_csid_clk_src",
  494. .parent_data = cam_cc_parent_data_2,
  495. .num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
  496. .ops = &clk_rcg2_shared_ops,
  497. },
  498. };
  499. static struct clk_rcg2 cam_cc_ipe_0_clk_src = {
  500. .cmd_rcgr = 0x7010,
  501. .mnd_width = 0,
  502. .hid_width = 5,
  503. .parent_map = cam_cc_parent_map_1,
  504. .freq_tbl = ftbl_cam_cc_icp_clk_src,
  505. .clkr.hw.init = &(const struct clk_init_data) {
  506. .name = "cam_cc_ipe_0_clk_src",
  507. .parent_data = cam_cc_parent_data_1,
  508. .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
  509. .ops = &clk_rcg2_shared_ops,
  510. },
  511. };
  512. static const struct freq_tbl ftbl_cam_cc_jpeg_clk_src[] = {
  513. F(66666667, P_CAM_CC_PLL0_OUT_AUX, 9, 0, 0),
  514. F(133333333, P_CAM_CC_PLL0_OUT_AUX, 4.5, 0, 0),
  515. F(216000000, P_CAM_CC_PLL3_OUT_MAIN, 5, 0, 0),
  516. F(320000000, P_CAM_CC_PLL2_OUT_EARLY, 3, 0, 0),
  517. F(480000000, P_CAM_CC_PLL2_OUT_EARLY, 2, 0, 0),
  518. F(600000000, P_CAM_CC_PLL0_OUT_AUX, 1, 0, 0),
  519. { }
  520. };
  521. static struct clk_rcg2 cam_cc_jpeg_clk_src = {
  522. .cmd_rcgr = 0xb04c,
  523. .mnd_width = 0,
  524. .hid_width = 5,
  525. .parent_map = cam_cc_parent_map_1,
  526. .freq_tbl = ftbl_cam_cc_jpeg_clk_src,
  527. .clkr.hw.init = &(const struct clk_init_data) {
  528. .name = "cam_cc_jpeg_clk_src",
  529. .parent_data = cam_cc_parent_data_1,
  530. .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
  531. .ops = &clk_rcg2_shared_ops,
  532. },
  533. };
  534. static const struct freq_tbl ftbl_cam_cc_lrme_clk_src[] = {
  535. F(200000000, P_CAM_CC_PLL0_OUT_AUX, 3, 0, 0),
  536. F(216000000, P_CAM_CC_PLL3_OUT_MAIN, 5, 0, 0),
  537. F(300000000, P_CAM_CC_PLL0_OUT_AUX, 2, 0, 0),
  538. F(404000000, P_CAM_CC_PLL1_OUT_AUX, 2, 0, 0),
  539. { }
  540. };
  541. static struct clk_rcg2 cam_cc_lrme_clk_src = {
  542. .cmd_rcgr = 0xb0f8,
  543. .mnd_width = 0,
  544. .hid_width = 5,
  545. .parent_map = cam_cc_parent_map_6,
  546. .freq_tbl = ftbl_cam_cc_lrme_clk_src,
  547. .clkr.hw.init = &(const struct clk_init_data) {
  548. .name = "cam_cc_lrme_clk_src",
  549. .parent_data = cam_cc_parent_data_6,
  550. .num_parents = ARRAY_SIZE(cam_cc_parent_data_6),
  551. .ops = &clk_rcg2_shared_ops,
  552. },
  553. };
  554. static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
  555. F(19200000, P_BI_TCXO, 1, 0, 0),
  556. F(24000000, P_CAM_CC_PLL2_OUT_AUX2, 10, 1, 2),
  557. F(34285714, P_CAM_CC_PLL2_OUT_AUX2, 14, 0, 0),
  558. { }
  559. };
  560. static struct clk_rcg2 cam_cc_mclk0_clk_src = {
  561. .cmd_rcgr = 0x4004,
  562. .mnd_width = 8,
  563. .hid_width = 5,
  564. .parent_map = cam_cc_parent_map_3,
  565. .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
  566. .clkr.hw.init = &(const struct clk_init_data) {
  567. .name = "cam_cc_mclk0_clk_src",
  568. .parent_data = cam_cc_parent_data_3,
  569. .num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
  570. .ops = &clk_rcg2_shared_ops,
  571. },
  572. };
  573. static struct clk_rcg2 cam_cc_mclk1_clk_src = {
  574. .cmd_rcgr = 0x4024,
  575. .mnd_width = 8,
  576. .hid_width = 5,
  577. .parent_map = cam_cc_parent_map_3,
  578. .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
  579. .clkr.hw.init = &(const struct clk_init_data) {
  580. .name = "cam_cc_mclk1_clk_src",
  581. .parent_data = cam_cc_parent_data_3,
  582. .num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
  583. .ops = &clk_rcg2_shared_ops,
  584. },
  585. };
  586. static struct clk_rcg2 cam_cc_mclk2_clk_src = {
  587. .cmd_rcgr = 0x4044,
  588. .mnd_width = 8,
  589. .hid_width = 5,
  590. .parent_map = cam_cc_parent_map_3,
  591. .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
  592. .clkr.hw.init = &(const struct clk_init_data) {
  593. .name = "cam_cc_mclk2_clk_src",
  594. .parent_data = cam_cc_parent_data_3,
  595. .num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
  596. .ops = &clk_rcg2_shared_ops,
  597. },
  598. };
  599. static struct clk_rcg2 cam_cc_mclk3_clk_src = {
  600. .cmd_rcgr = 0x4064,
  601. .mnd_width = 8,
  602. .hid_width = 5,
  603. .parent_map = cam_cc_parent_map_3,
  604. .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
  605. .clkr.hw.init = &(const struct clk_init_data) {
  606. .name = "cam_cc_mclk3_clk_src",
  607. .parent_data = cam_cc_parent_data_3,
  608. .num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
  609. .ops = &clk_rcg2_shared_ops,
  610. },
  611. };
  612. static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
  613. F(80000000, P_CAM_CC_PLL0_OUT_AUX, 7.5, 0, 0),
  614. { }
  615. };
  616. static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
  617. .cmd_rcgr = 0x6058,
  618. .mnd_width = 0,
  619. .hid_width = 5,
  620. .parent_map = cam_cc_parent_map_0,
  621. .freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
  622. .clkr.hw.init = &(const struct clk_init_data) {
  623. .name = "cam_cc_slow_ahb_clk_src",
  624. .parent_data = cam_cc_parent_data_0,
  625. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  626. .ops = &clk_rcg2_shared_ops,
  627. },
  628. };
  629. static struct clk_branch cam_cc_bps_ahb_clk = {
  630. .halt_reg = 0x6070,
  631. .halt_check = BRANCH_HALT,
  632. .clkr = {
  633. .enable_reg = 0x6070,
  634. .enable_mask = BIT(0),
  635. .hw.init = &(const struct clk_init_data) {
  636. .name = "cam_cc_bps_ahb_clk",
  637. .parent_hws = (const struct clk_hw*[]) {
  638. &cam_cc_slow_ahb_clk_src.clkr.hw,
  639. },
  640. .num_parents = 1,
  641. .flags = CLK_SET_RATE_PARENT,
  642. .ops = &clk_branch2_ops,
  643. },
  644. },
  645. };
  646. static struct clk_branch cam_cc_bps_areg_clk = {
  647. .halt_reg = 0x6054,
  648. .halt_check = BRANCH_HALT,
  649. .clkr = {
  650. .enable_reg = 0x6054,
  651. .enable_mask = BIT(0),
  652. .hw.init = &(const struct clk_init_data) {
  653. .name = "cam_cc_bps_areg_clk",
  654. .parent_hws = (const struct clk_hw*[]) {
  655. &cam_cc_fast_ahb_clk_src.clkr.hw,
  656. },
  657. .num_parents = 1,
  658. .flags = CLK_SET_RATE_PARENT,
  659. .ops = &clk_branch2_ops,
  660. },
  661. },
  662. };
  663. static struct clk_branch cam_cc_bps_axi_clk = {
  664. .halt_reg = 0x6038,
  665. .halt_check = BRANCH_HALT,
  666. .clkr = {
  667. .enable_reg = 0x6038,
  668. .enable_mask = BIT(0),
  669. .hw.init = &(const struct clk_init_data) {
  670. .name = "cam_cc_bps_axi_clk",
  671. .ops = &clk_branch2_ops,
  672. },
  673. },
  674. };
  675. static struct clk_branch cam_cc_bps_clk = {
  676. .halt_reg = 0x6028,
  677. .halt_check = BRANCH_HALT,
  678. .clkr = {
  679. .enable_reg = 0x6028,
  680. .enable_mask = BIT(0),
  681. .hw.init = &(const struct clk_init_data) {
  682. .name = "cam_cc_bps_clk",
  683. .parent_hws = (const struct clk_hw*[]) {
  684. &cam_cc_bps_clk_src.clkr.hw,
  685. },
  686. .num_parents = 1,
  687. .flags = CLK_SET_RATE_PARENT,
  688. .ops = &clk_branch2_ops,
  689. },
  690. },
  691. };
  692. static struct clk_branch cam_cc_camnoc_axi_clk = {
  693. .halt_reg = 0xb124,
  694. .halt_check = BRANCH_HALT,
  695. .clkr = {
  696. .enable_reg = 0xb124,
  697. .enable_mask = BIT(0),
  698. .hw.init = &(const struct clk_init_data) {
  699. .name = "cam_cc_camnoc_axi_clk",
  700. .ops = &clk_branch2_ops,
  701. },
  702. },
  703. };
  704. static struct clk_branch cam_cc_cci_clk = {
  705. .halt_reg = 0xb0f0,
  706. .halt_check = BRANCH_HALT,
  707. .clkr = {
  708. .enable_reg = 0xb0f0,
  709. .enable_mask = BIT(0),
  710. .hw.init = &(const struct clk_init_data) {
  711. .name = "cam_cc_cci_clk",
  712. .parent_hws = (const struct clk_hw*[]) {
  713. &cam_cc_cci_clk_src.clkr.hw,
  714. },
  715. .num_parents = 1,
  716. .flags = CLK_SET_RATE_PARENT,
  717. .ops = &clk_branch2_ops,
  718. },
  719. },
  720. };
  721. static struct clk_branch cam_cc_core_ahb_clk = {
  722. .halt_reg = 0xb144,
  723. .halt_check = BRANCH_HALT_VOTED,
  724. .clkr = {
  725. .enable_reg = 0xb144,
  726. .enable_mask = BIT(0),
  727. .hw.init = &(const struct clk_init_data) {
  728. .name = "cam_cc_core_ahb_clk",
  729. .parent_hws = (const struct clk_hw*[]) {
  730. &cam_cc_slow_ahb_clk_src.clkr.hw,
  731. },
  732. .num_parents = 1,
  733. .flags = CLK_SET_RATE_PARENT,
  734. .ops = &clk_branch2_ops,
  735. },
  736. },
  737. };
  738. static struct clk_branch cam_cc_cpas_ahb_clk = {
  739. .halt_reg = 0xb11c,
  740. .halt_check = BRANCH_HALT,
  741. .clkr = {
  742. .enable_reg = 0xb11c,
  743. .enable_mask = BIT(0),
  744. .hw.init = &(const struct clk_init_data) {
  745. .name = "cam_cc_cpas_ahb_clk",
  746. .parent_hws = (const struct clk_hw*[]) {
  747. &cam_cc_slow_ahb_clk_src.clkr.hw,
  748. },
  749. .num_parents = 1,
  750. .flags = CLK_SET_RATE_PARENT,
  751. .ops = &clk_branch2_ops,
  752. },
  753. },
  754. };
  755. static struct clk_branch cam_cc_csi0phytimer_clk = {
  756. .halt_reg = 0x501c,
  757. .halt_check = BRANCH_HALT,
  758. .clkr = {
  759. .enable_reg = 0x501c,
  760. .enable_mask = BIT(0),
  761. .hw.init = &(const struct clk_init_data) {
  762. .name = "cam_cc_csi0phytimer_clk",
  763. .parent_hws = (const struct clk_hw*[]) {
  764. &cam_cc_csi0phytimer_clk_src.clkr.hw,
  765. },
  766. .num_parents = 1,
  767. .flags = CLK_SET_RATE_PARENT,
  768. .ops = &clk_branch2_ops,
  769. },
  770. },
  771. };
  772. static struct clk_branch cam_cc_csi1phytimer_clk = {
  773. .halt_reg = 0x5040,
  774. .halt_check = BRANCH_HALT,
  775. .clkr = {
  776. .enable_reg = 0x5040,
  777. .enable_mask = BIT(0),
  778. .hw.init = &(const struct clk_init_data) {
  779. .name = "cam_cc_csi1phytimer_clk",
  780. .parent_hws = (const struct clk_hw*[]) {
  781. &cam_cc_csi1phytimer_clk_src.clkr.hw,
  782. },
  783. .num_parents = 1,
  784. .flags = CLK_SET_RATE_PARENT,
  785. .ops = &clk_branch2_ops,
  786. },
  787. },
  788. };
  789. static struct clk_branch cam_cc_csi2phytimer_clk = {
  790. .halt_reg = 0x5064,
  791. .halt_check = BRANCH_HALT,
  792. .clkr = {
  793. .enable_reg = 0x5064,
  794. .enable_mask = BIT(0),
  795. .hw.init = &(const struct clk_init_data) {
  796. .name = "cam_cc_csi2phytimer_clk",
  797. .parent_hws = (const struct clk_hw*[]) {
  798. &cam_cc_csi2phytimer_clk_src.clkr.hw,
  799. },
  800. .num_parents = 1,
  801. .flags = CLK_SET_RATE_PARENT,
  802. .ops = &clk_branch2_ops,
  803. },
  804. },
  805. };
  806. static struct clk_branch cam_cc_csiphy0_clk = {
  807. .halt_reg = 0x5020,
  808. .halt_check = BRANCH_HALT,
  809. .clkr = {
  810. .enable_reg = 0x5020,
  811. .enable_mask = BIT(0),
  812. .hw.init = &(const struct clk_init_data) {
  813. .name = "cam_cc_csiphy0_clk",
  814. .parent_hws = (const struct clk_hw*[]) {
  815. &cam_cc_cphy_rx_clk_src.clkr.hw,
  816. },
  817. .num_parents = 1,
  818. .flags = CLK_SET_RATE_PARENT,
  819. .ops = &clk_branch2_ops,
  820. },
  821. },
  822. };
  823. static struct clk_branch cam_cc_csiphy1_clk = {
  824. .halt_reg = 0x5044,
  825. .halt_check = BRANCH_HALT,
  826. .clkr = {
  827. .enable_reg = 0x5044,
  828. .enable_mask = BIT(0),
  829. .hw.init = &(const struct clk_init_data) {
  830. .name = "cam_cc_csiphy1_clk",
  831. .parent_hws = (const struct clk_hw*[]) {
  832. &cam_cc_cphy_rx_clk_src.clkr.hw,
  833. },
  834. .num_parents = 1,
  835. .flags = CLK_SET_RATE_PARENT,
  836. .ops = &clk_branch2_ops,
  837. },
  838. },
  839. };
  840. static struct clk_branch cam_cc_csiphy2_clk = {
  841. .halt_reg = 0x5068,
  842. .halt_check = BRANCH_HALT,
  843. .clkr = {
  844. .enable_reg = 0x5068,
  845. .enable_mask = BIT(0),
  846. .hw.init = &(const struct clk_init_data) {
  847. .name = "cam_cc_csiphy2_clk",
  848. .parent_hws = (const struct clk_hw*[]) {
  849. &cam_cc_cphy_rx_clk_src.clkr.hw,
  850. },
  851. .num_parents = 1,
  852. .flags = CLK_SET_RATE_PARENT,
  853. .ops = &clk_branch2_ops,
  854. },
  855. },
  856. };
  857. static struct clk_branch cam_cc_icp_clk = {
  858. .halt_reg = 0xb0a0,
  859. .halt_check = BRANCH_HALT,
  860. .clkr = {
  861. .enable_reg = 0xb0a0,
  862. .enable_mask = BIT(0),
  863. .hw.init = &(const struct clk_init_data) {
  864. .name = "cam_cc_icp_clk",
  865. .parent_hws = (const struct clk_hw*[]) {
  866. &cam_cc_icp_clk_src.clkr.hw,
  867. },
  868. .num_parents = 1,
  869. .flags = CLK_SET_RATE_PARENT,
  870. .ops = &clk_branch2_ops,
  871. },
  872. },
  873. };
  874. static struct clk_branch cam_cc_ife_0_axi_clk = {
  875. .halt_reg = 0x9080,
  876. .halt_check = BRANCH_HALT,
  877. .clkr = {
  878. .enable_reg = 0x9080,
  879. .enable_mask = BIT(0),
  880. .hw.init = &(const struct clk_init_data) {
  881. .name = "cam_cc_ife_0_axi_clk",
  882. .ops = &clk_branch2_ops,
  883. },
  884. },
  885. };
  886. static struct clk_branch cam_cc_ife_0_clk = {
  887. .halt_reg = 0x9028,
  888. .halt_check = BRANCH_HALT,
  889. .clkr = {
  890. .enable_reg = 0x9028,
  891. .enable_mask = BIT(0),
  892. .hw.init = &(const struct clk_init_data) {
  893. .name = "cam_cc_ife_0_clk",
  894. .parent_hws = (const struct clk_hw*[]) {
  895. &cam_cc_ife_0_clk_src.clkr.hw,
  896. },
  897. .num_parents = 1,
  898. .flags = CLK_SET_RATE_PARENT,
  899. .ops = &clk_branch2_ops,
  900. },
  901. },
  902. };
  903. static struct clk_branch cam_cc_ife_0_cphy_rx_clk = {
  904. .halt_reg = 0x907c,
  905. .halt_check = BRANCH_HALT,
  906. .clkr = {
  907. .enable_reg = 0x907c,
  908. .enable_mask = BIT(0),
  909. .hw.init = &(const struct clk_init_data) {
  910. .name = "cam_cc_ife_0_cphy_rx_clk",
  911. .parent_hws = (const struct clk_hw*[]) {
  912. &cam_cc_cphy_rx_clk_src.clkr.hw,
  913. },
  914. .num_parents = 1,
  915. .flags = CLK_SET_RATE_PARENT,
  916. .ops = &clk_branch2_ops,
  917. },
  918. },
  919. };
  920. static struct clk_branch cam_cc_ife_0_csid_clk = {
  921. .halt_reg = 0x9054,
  922. .halt_check = BRANCH_HALT,
  923. .clkr = {
  924. .enable_reg = 0x9054,
  925. .enable_mask = BIT(0),
  926. .hw.init = &(const struct clk_init_data) {
  927. .name = "cam_cc_ife_0_csid_clk",
  928. .parent_hws = (const struct clk_hw*[]) {
  929. &cam_cc_ife_0_csid_clk_src.clkr.hw,
  930. },
  931. .num_parents = 1,
  932. .flags = CLK_SET_RATE_PARENT,
  933. .ops = &clk_branch2_ops,
  934. },
  935. },
  936. };
  937. static struct clk_branch cam_cc_ife_0_dsp_clk = {
  938. .halt_reg = 0x9038,
  939. .halt_check = BRANCH_HALT,
  940. .clkr = {
  941. .enable_reg = 0x9038,
  942. .enable_mask = BIT(0),
  943. .hw.init = &(const struct clk_init_data) {
  944. .name = "cam_cc_ife_0_dsp_clk",
  945. .parent_hws = (const struct clk_hw*[]) {
  946. &cam_cc_ife_0_clk_src.clkr.hw,
  947. },
  948. .num_parents = 1,
  949. .flags = CLK_SET_RATE_PARENT,
  950. .ops = &clk_branch2_ops,
  951. },
  952. },
  953. };
  954. static struct clk_branch cam_cc_ife_1_axi_clk = {
  955. .halt_reg = 0xa058,
  956. .halt_check = BRANCH_HALT,
  957. .clkr = {
  958. .enable_reg = 0xa058,
  959. .enable_mask = BIT(0),
  960. .hw.init = &(const struct clk_init_data) {
  961. .name = "cam_cc_ife_1_axi_clk",
  962. .ops = &clk_branch2_ops,
  963. },
  964. },
  965. };
  966. static struct clk_branch cam_cc_ife_1_clk = {
  967. .halt_reg = 0xa028,
  968. .halt_check = BRANCH_HALT,
  969. .clkr = {
  970. .enable_reg = 0xa028,
  971. .enable_mask = BIT(0),
  972. .hw.init = &(const struct clk_init_data) {
  973. .name = "cam_cc_ife_1_clk",
  974. .parent_hws = (const struct clk_hw*[]) {
  975. &cam_cc_ife_1_clk_src.clkr.hw,
  976. },
  977. .num_parents = 1,
  978. .flags = CLK_SET_RATE_PARENT,
  979. .ops = &clk_branch2_ops,
  980. },
  981. },
  982. };
  983. static struct clk_branch cam_cc_ife_1_cphy_rx_clk = {
  984. .halt_reg = 0xa054,
  985. .halt_check = BRANCH_HALT,
  986. .clkr = {
  987. .enable_reg = 0xa054,
  988. .enable_mask = BIT(0),
  989. .hw.init = &(const struct clk_init_data) {
  990. .name = "cam_cc_ife_1_cphy_rx_clk",
  991. .parent_hws = (const struct clk_hw*[]) {
  992. &cam_cc_cphy_rx_clk_src.clkr.hw,
  993. },
  994. .num_parents = 1,
  995. .flags = CLK_SET_RATE_PARENT,
  996. .ops = &clk_branch2_ops,
  997. },
  998. },
  999. };
  1000. static struct clk_branch cam_cc_ife_1_csid_clk = {
  1001. .halt_reg = 0xa04c,
  1002. .halt_check = BRANCH_HALT,
  1003. .clkr = {
  1004. .enable_reg = 0xa04c,
  1005. .enable_mask = BIT(0),
  1006. .hw.init = &(const struct clk_init_data) {
  1007. .name = "cam_cc_ife_1_csid_clk",
  1008. .parent_hws = (const struct clk_hw*[]) {
  1009. &cam_cc_ife_1_csid_clk_src.clkr.hw,
  1010. },
  1011. .num_parents = 1,
  1012. .flags = CLK_SET_RATE_PARENT,
  1013. .ops = &clk_branch2_ops,
  1014. },
  1015. },
  1016. };
  1017. static struct clk_branch cam_cc_ife_1_dsp_clk = {
  1018. .halt_reg = 0xa030,
  1019. .halt_check = BRANCH_HALT,
  1020. .clkr = {
  1021. .enable_reg = 0xa030,
  1022. .enable_mask = BIT(0),
  1023. .hw.init = &(const struct clk_init_data) {
  1024. .name = "cam_cc_ife_1_dsp_clk",
  1025. .parent_hws = (const struct clk_hw*[]) {
  1026. &cam_cc_ife_1_clk_src.clkr.hw,
  1027. },
  1028. .num_parents = 1,
  1029. .flags = CLK_SET_RATE_PARENT,
  1030. .ops = &clk_branch2_ops,
  1031. },
  1032. },
  1033. };
  1034. static struct clk_branch cam_cc_ife_lite_clk = {
  1035. .halt_reg = 0xb01c,
  1036. .halt_check = BRANCH_HALT,
  1037. .clkr = {
  1038. .enable_reg = 0xb01c,
  1039. .enable_mask = BIT(0),
  1040. .hw.init = &(const struct clk_init_data) {
  1041. .name = "cam_cc_ife_lite_clk",
  1042. .parent_hws = (const struct clk_hw*[]) {
  1043. &cam_cc_ife_lite_clk_src.clkr.hw,
  1044. },
  1045. .num_parents = 1,
  1046. .flags = CLK_SET_RATE_PARENT,
  1047. .ops = &clk_branch2_ops,
  1048. },
  1049. },
  1050. };
  1051. static struct clk_branch cam_cc_ife_lite_cphy_rx_clk = {
  1052. .halt_reg = 0xb044,
  1053. .halt_check = BRANCH_HALT,
  1054. .clkr = {
  1055. .enable_reg = 0xb044,
  1056. .enable_mask = BIT(0),
  1057. .hw.init = &(const struct clk_init_data) {
  1058. .name = "cam_cc_ife_lite_cphy_rx_clk",
  1059. .parent_hws = (const struct clk_hw*[]) {
  1060. &cam_cc_cphy_rx_clk_src.clkr.hw,
  1061. },
  1062. .num_parents = 1,
  1063. .flags = CLK_SET_RATE_PARENT,
  1064. .ops = &clk_branch2_ops,
  1065. },
  1066. },
  1067. };
  1068. static struct clk_branch cam_cc_ife_lite_csid_clk = {
  1069. .halt_reg = 0xb03c,
  1070. .halt_check = BRANCH_HALT,
  1071. .clkr = {
  1072. .enable_reg = 0xb03c,
  1073. .enable_mask = BIT(0),
  1074. .hw.init = &(const struct clk_init_data) {
  1075. .name = "cam_cc_ife_lite_csid_clk",
  1076. .parent_hws = (const struct clk_hw*[]) {
  1077. &cam_cc_ife_lite_csid_clk_src.clkr.hw,
  1078. },
  1079. .num_parents = 1,
  1080. .flags = CLK_SET_RATE_PARENT,
  1081. .ops = &clk_branch2_ops,
  1082. },
  1083. },
  1084. };
  1085. static struct clk_branch cam_cc_ipe_0_ahb_clk = {
  1086. .halt_reg = 0x7040,
  1087. .halt_check = BRANCH_HALT,
  1088. .clkr = {
  1089. .enable_reg = 0x7040,
  1090. .enable_mask = BIT(0),
  1091. .hw.init = &(const struct clk_init_data) {
  1092. .name = "cam_cc_ipe_0_ahb_clk",
  1093. .parent_hws = (const struct clk_hw*[]) {
  1094. &cam_cc_slow_ahb_clk_src.clkr.hw,
  1095. },
  1096. .num_parents = 1,
  1097. .flags = CLK_SET_RATE_PARENT,
  1098. .ops = &clk_branch2_ops,
  1099. },
  1100. },
  1101. };
  1102. static struct clk_branch cam_cc_ipe_0_areg_clk = {
  1103. .halt_reg = 0x703c,
  1104. .halt_check = BRANCH_HALT,
  1105. .clkr = {
  1106. .enable_reg = 0x703c,
  1107. .enable_mask = BIT(0),
  1108. .hw.init = &(const struct clk_init_data) {
  1109. .name = "cam_cc_ipe_0_areg_clk",
  1110. .parent_hws = (const struct clk_hw*[]) {
  1111. &cam_cc_fast_ahb_clk_src.clkr.hw,
  1112. },
  1113. .num_parents = 1,
  1114. .flags = CLK_SET_RATE_PARENT,
  1115. .ops = &clk_branch2_ops,
  1116. },
  1117. },
  1118. };
  1119. static struct clk_branch cam_cc_ipe_0_axi_clk = {
  1120. .halt_reg = 0x7038,
  1121. .halt_check = BRANCH_HALT,
  1122. .clkr = {
  1123. .enable_reg = 0x7038,
  1124. .enable_mask = BIT(0),
  1125. .hw.init = &(const struct clk_init_data) {
  1126. .name = "cam_cc_ipe_0_axi_clk",
  1127. .ops = &clk_branch2_ops,
  1128. },
  1129. },
  1130. };
  1131. static struct clk_branch cam_cc_ipe_0_clk = {
  1132. .halt_reg = 0x7028,
  1133. .halt_check = BRANCH_HALT,
  1134. .clkr = {
  1135. .enable_reg = 0x7028,
  1136. .enable_mask = BIT(0),
  1137. .hw.init = &(const struct clk_init_data) {
  1138. .name = "cam_cc_ipe_0_clk",
  1139. .parent_hws = (const struct clk_hw*[]) {
  1140. &cam_cc_ipe_0_clk_src.clkr.hw,
  1141. },
  1142. .num_parents = 1,
  1143. .flags = CLK_SET_RATE_PARENT,
  1144. .ops = &clk_branch2_ops,
  1145. },
  1146. },
  1147. };
  1148. static struct clk_branch cam_cc_jpeg_clk = {
  1149. .halt_reg = 0xb064,
  1150. .halt_check = BRANCH_HALT,
  1151. .clkr = {
  1152. .enable_reg = 0xb064,
  1153. .enable_mask = BIT(0),
  1154. .hw.init = &(const struct clk_init_data) {
  1155. .name = "cam_cc_jpeg_clk",
  1156. .parent_hws = (const struct clk_hw*[]) {
  1157. &cam_cc_jpeg_clk_src.clkr.hw,
  1158. },
  1159. .num_parents = 1,
  1160. .flags = CLK_SET_RATE_PARENT,
  1161. .ops = &clk_branch2_ops,
  1162. },
  1163. },
  1164. };
  1165. static struct clk_branch cam_cc_lrme_clk = {
  1166. .halt_reg = 0xb110,
  1167. .halt_check = BRANCH_HALT,
  1168. .clkr = {
  1169. .enable_reg = 0xb110,
  1170. .enable_mask = BIT(0),
  1171. .hw.init = &(const struct clk_init_data) {
  1172. .name = "cam_cc_lrme_clk",
  1173. .parent_hws = (const struct clk_hw*[]) {
  1174. &cam_cc_lrme_clk_src.clkr.hw,
  1175. },
  1176. .num_parents = 1,
  1177. .flags = CLK_SET_RATE_PARENT,
  1178. .ops = &clk_branch2_ops,
  1179. },
  1180. },
  1181. };
  1182. static struct clk_branch cam_cc_mclk0_clk = {
  1183. .halt_reg = 0x401c,
  1184. .halt_check = BRANCH_HALT,
  1185. .clkr = {
  1186. .enable_reg = 0x401c,
  1187. .enable_mask = BIT(0),
  1188. .hw.init = &(const struct clk_init_data) {
  1189. .name = "cam_cc_mclk0_clk",
  1190. .parent_hws = (const struct clk_hw*[]) {
  1191. &cam_cc_mclk0_clk_src.clkr.hw,
  1192. },
  1193. .num_parents = 1,
  1194. .flags = CLK_SET_RATE_PARENT,
  1195. .ops = &clk_branch2_ops,
  1196. },
  1197. },
  1198. };
  1199. static struct clk_branch cam_cc_mclk1_clk = {
  1200. .halt_reg = 0x403c,
  1201. .halt_check = BRANCH_HALT,
  1202. .clkr = {
  1203. .enable_reg = 0x403c,
  1204. .enable_mask = BIT(0),
  1205. .hw.init = &(const struct clk_init_data) {
  1206. .name = "cam_cc_mclk1_clk",
  1207. .parent_hws = (const struct clk_hw*[]) {
  1208. &cam_cc_mclk1_clk_src.clkr.hw,
  1209. },
  1210. .num_parents = 1,
  1211. .flags = CLK_SET_RATE_PARENT,
  1212. .ops = &clk_branch2_ops,
  1213. },
  1214. },
  1215. };
  1216. static struct clk_branch cam_cc_mclk2_clk = {
  1217. .halt_reg = 0x405c,
  1218. .halt_check = BRANCH_HALT,
  1219. .clkr = {
  1220. .enable_reg = 0x405c,
  1221. .enable_mask = BIT(0),
  1222. .hw.init = &(const struct clk_init_data) {
  1223. .name = "cam_cc_mclk2_clk",
  1224. .parent_hws = (const struct clk_hw*[]) {
  1225. &cam_cc_mclk2_clk_src.clkr.hw,
  1226. },
  1227. .num_parents = 1,
  1228. .flags = CLK_SET_RATE_PARENT,
  1229. .ops = &clk_branch2_ops,
  1230. },
  1231. },
  1232. };
  1233. static struct clk_branch cam_cc_mclk3_clk = {
  1234. .halt_reg = 0x407c,
  1235. .halt_check = BRANCH_HALT,
  1236. .clkr = {
  1237. .enable_reg = 0x407c,
  1238. .enable_mask = BIT(0),
  1239. .hw.init = &(const struct clk_init_data) {
  1240. .name = "cam_cc_mclk3_clk",
  1241. .parent_hws = (const struct clk_hw*[]) {
  1242. &cam_cc_mclk3_clk_src.clkr.hw,
  1243. },
  1244. .num_parents = 1,
  1245. .flags = CLK_SET_RATE_PARENT,
  1246. .ops = &clk_branch2_ops,
  1247. },
  1248. },
  1249. };
  1250. static struct clk_branch cam_cc_soc_ahb_clk = {
  1251. .halt_reg = 0xb140,
  1252. .halt_check = BRANCH_HALT,
  1253. .clkr = {
  1254. .enable_reg = 0xb140,
  1255. .enable_mask = BIT(0),
  1256. .hw.init = &(const struct clk_init_data) {
  1257. .name = "cam_cc_soc_ahb_clk",
  1258. .ops = &clk_branch2_ops,
  1259. },
  1260. },
  1261. };
  1262. static struct clk_branch cam_cc_sys_tmr_clk = {
  1263. .halt_reg = 0xb0a8,
  1264. .halt_check = BRANCH_HALT,
  1265. .clkr = {
  1266. .enable_reg = 0xb0a8,
  1267. .enable_mask = BIT(0),
  1268. .hw.init = &(const struct clk_init_data) {
  1269. .name = "cam_cc_sys_tmr_clk",
  1270. .ops = &clk_branch2_ops,
  1271. },
  1272. },
  1273. };
  1274. static struct gdsc titan_top_gdsc = {
  1275. .gdscr = 0xb134,
  1276. .en_rest_wait_val = 0x2,
  1277. .en_few_wait_val = 0x2,
  1278. .clk_dis_wait_val = 0xf,
  1279. .pd = {
  1280. .name = "titan_top_gdsc",
  1281. },
  1282. .pwrsts = PWRSTS_OFF_ON,
  1283. .flags = POLL_CFG_GDSCR,
  1284. };
  1285. static struct gdsc bps_gdsc = {
  1286. .gdscr = 0x6004,
  1287. .en_rest_wait_val = 0x2,
  1288. .en_few_wait_val = 0x2,
  1289. .clk_dis_wait_val = 0xf,
  1290. .pd = {
  1291. .name = "bps_gdsc",
  1292. },
  1293. .pwrsts = PWRSTS_OFF_ON,
  1294. .parent = &titan_top_gdsc.pd,
  1295. .flags = POLL_CFG_GDSCR,
  1296. };
  1297. static struct gdsc ife_0_gdsc = {
  1298. .gdscr = 0x9004,
  1299. .en_rest_wait_val = 0x2,
  1300. .en_few_wait_val = 0x2,
  1301. .clk_dis_wait_val = 0xf,
  1302. .pd = {
  1303. .name = "ife_0_gdsc",
  1304. },
  1305. .pwrsts = PWRSTS_OFF_ON,
  1306. .parent = &titan_top_gdsc.pd,
  1307. .flags = POLL_CFG_GDSCR,
  1308. };
  1309. static struct gdsc ife_1_gdsc = {
  1310. .gdscr = 0xa004,
  1311. .en_rest_wait_val = 0x2,
  1312. .en_few_wait_val = 0x2,
  1313. .clk_dis_wait_val = 0xf,
  1314. .pd = {
  1315. .name = "ife_1_gdsc",
  1316. },
  1317. .pwrsts = PWRSTS_OFF_ON,
  1318. .parent = &titan_top_gdsc.pd,
  1319. .flags = POLL_CFG_GDSCR,
  1320. };
  1321. static struct gdsc ipe_0_gdsc = {
  1322. .gdscr = 0x7004,
  1323. .en_rest_wait_val = 0x2,
  1324. .en_few_wait_val = 0x2,
  1325. .clk_dis_wait_val = 0xf,
  1326. .pd = {
  1327. .name = "ipe_0_gdsc",
  1328. },
  1329. .pwrsts = PWRSTS_OFF_ON,
  1330. .parent = &titan_top_gdsc.pd,
  1331. .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
  1332. };
  1333. static struct clk_regmap *cam_cc_qcs615_clocks[] = {
  1334. [CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
  1335. [CAM_CC_BPS_AREG_CLK] = &cam_cc_bps_areg_clk.clkr,
  1336. [CAM_CC_BPS_AXI_CLK] = &cam_cc_bps_axi_clk.clkr,
  1337. [CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
  1338. [CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
  1339. [CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr,
  1340. [CAM_CC_CCI_CLK] = &cam_cc_cci_clk.clkr,
  1341. [CAM_CC_CCI_CLK_SRC] = &cam_cc_cci_clk_src.clkr,
  1342. [CAM_CC_CORE_AHB_CLK] = &cam_cc_core_ahb_clk.clkr,
  1343. [CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
  1344. [CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
  1345. [CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
  1346. [CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
  1347. [CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
  1348. [CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
  1349. [CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
  1350. [CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
  1351. [CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
  1352. [CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
  1353. [CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
  1354. [CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
  1355. [CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
  1356. [CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
  1357. [CAM_CC_IFE_0_AXI_CLK] = &cam_cc_ife_0_axi_clk.clkr,
  1358. [CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr,
  1359. [CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr,
  1360. [CAM_CC_IFE_0_CPHY_RX_CLK] = &cam_cc_ife_0_cphy_rx_clk.clkr,
  1361. [CAM_CC_IFE_0_CSID_CLK] = &cam_cc_ife_0_csid_clk.clkr,
  1362. [CAM_CC_IFE_0_CSID_CLK_SRC] = &cam_cc_ife_0_csid_clk_src.clkr,
  1363. [CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr,
  1364. [CAM_CC_IFE_1_AXI_CLK] = &cam_cc_ife_1_axi_clk.clkr,
  1365. [CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr,
  1366. [CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr,
  1367. [CAM_CC_IFE_1_CPHY_RX_CLK] = &cam_cc_ife_1_cphy_rx_clk.clkr,
  1368. [CAM_CC_IFE_1_CSID_CLK] = &cam_cc_ife_1_csid_clk.clkr,
  1369. [CAM_CC_IFE_1_CSID_CLK_SRC] = &cam_cc_ife_1_csid_clk_src.clkr,
  1370. [CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr,
  1371. [CAM_CC_IFE_LITE_CLK] = &cam_cc_ife_lite_clk.clkr,
  1372. [CAM_CC_IFE_LITE_CLK_SRC] = &cam_cc_ife_lite_clk_src.clkr,
  1373. [CAM_CC_IFE_LITE_CPHY_RX_CLK] = &cam_cc_ife_lite_cphy_rx_clk.clkr,
  1374. [CAM_CC_IFE_LITE_CSID_CLK] = &cam_cc_ife_lite_csid_clk.clkr,
  1375. [CAM_CC_IFE_LITE_CSID_CLK_SRC] = &cam_cc_ife_lite_csid_clk_src.clkr,
  1376. [CAM_CC_IPE_0_AHB_CLK] = &cam_cc_ipe_0_ahb_clk.clkr,
  1377. [CAM_CC_IPE_0_AREG_CLK] = &cam_cc_ipe_0_areg_clk.clkr,
  1378. [CAM_CC_IPE_0_AXI_CLK] = &cam_cc_ipe_0_axi_clk.clkr,
  1379. [CAM_CC_IPE_0_CLK] = &cam_cc_ipe_0_clk.clkr,
  1380. [CAM_CC_IPE_0_CLK_SRC] = &cam_cc_ipe_0_clk_src.clkr,
  1381. [CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr,
  1382. [CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr,
  1383. [CAM_CC_LRME_CLK] = &cam_cc_lrme_clk.clkr,
  1384. [CAM_CC_LRME_CLK_SRC] = &cam_cc_lrme_clk_src.clkr,
  1385. [CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
  1386. [CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
  1387. [CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
  1388. [CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
  1389. [CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
  1390. [CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
  1391. [CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
  1392. [CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
  1393. [CAM_CC_PLL0] = &cam_cc_pll0.clkr,
  1394. [CAM_CC_PLL1] = &cam_cc_pll1.clkr,
  1395. [CAM_CC_PLL2] = &cam_cc_pll2.clkr,
  1396. [CAM_CC_PLL2_OUT_AUX2] = &cam_cc_pll2_out_aux2.clkr,
  1397. [CAM_CC_PLL3] = &cam_cc_pll3.clkr,
  1398. [CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
  1399. [CAM_CC_SOC_AHB_CLK] = &cam_cc_soc_ahb_clk.clkr,
  1400. [CAM_CC_SYS_TMR_CLK] = &cam_cc_sys_tmr_clk.clkr,
  1401. };
  1402. static struct gdsc *cam_cc_qcs615_gdscs[] = {
  1403. [BPS_GDSC] = &bps_gdsc,
  1404. [IFE_0_GDSC] = &ife_0_gdsc,
  1405. [IFE_1_GDSC] = &ife_1_gdsc,
  1406. [IPE_0_GDSC] = &ipe_0_gdsc,
  1407. [TITAN_TOP_GDSC] = &titan_top_gdsc,
  1408. };
  1409. static const struct qcom_reset_map cam_cc_qcs615_resets[] = {
  1410. [CAM_CC_BPS_BCR] = { 0x6000 },
  1411. [CAM_CC_CAMNOC_BCR] = { 0xb120 },
  1412. [CAM_CC_CCI_BCR] = { 0xb0d4 },
  1413. [CAM_CC_CPAS_BCR] = { 0xb118 },
  1414. [CAM_CC_CSI0PHY_BCR] = { 0x5000 },
  1415. [CAM_CC_CSI1PHY_BCR] = { 0x5024 },
  1416. [CAM_CC_CSI2PHY_BCR] = { 0x5048 },
  1417. [CAM_CC_ICP_BCR] = { 0xb074 },
  1418. [CAM_CC_IFE_0_BCR] = { 0x9000 },
  1419. [CAM_CC_IFE_1_BCR] = { 0xa000 },
  1420. [CAM_CC_IFE_LITE_BCR] = { 0xb000 },
  1421. [CAM_CC_IPE_0_BCR] = { 0x7000 },
  1422. [CAM_CC_JPEG_BCR] = { 0xb048 },
  1423. [CAM_CC_LRME_BCR] = { 0xb0f4 },
  1424. [CAM_CC_MCLK0_BCR] = { 0x4000 },
  1425. [CAM_CC_MCLK1_BCR] = { 0x4020 },
  1426. [CAM_CC_MCLK2_BCR] = { 0x4040 },
  1427. [CAM_CC_MCLK3_BCR] = { 0x4060 },
  1428. [CAM_CC_TITAN_TOP_BCR] = { 0xb130 },
  1429. };
  1430. static struct clk_alpha_pll *cam_cc_qcs615_plls[] = {
  1431. &cam_cc_pll0,
  1432. &cam_cc_pll1,
  1433. &cam_cc_pll2,
  1434. &cam_cc_pll3,
  1435. };
  1436. static const struct regmap_config cam_cc_qcs615_regmap_config = {
  1437. .reg_bits = 32,
  1438. .reg_stride = 4,
  1439. .val_bits = 32,
  1440. .max_register = 0xd004,
  1441. .fast_io = true,
  1442. };
  1443. static struct qcom_cc_driver_data cam_cc_qcs615_driver_data = {
  1444. .alpha_plls = cam_cc_qcs615_plls,
  1445. .num_alpha_plls = ARRAY_SIZE(cam_cc_qcs615_plls),
  1446. };
  1447. static const struct qcom_cc_desc cam_cc_qcs615_desc = {
  1448. .config = &cam_cc_qcs615_regmap_config,
  1449. .clks = cam_cc_qcs615_clocks,
  1450. .num_clks = ARRAY_SIZE(cam_cc_qcs615_clocks),
  1451. .resets = cam_cc_qcs615_resets,
  1452. .num_resets = ARRAY_SIZE(cam_cc_qcs615_resets),
  1453. .gdscs = cam_cc_qcs615_gdscs,
  1454. .num_gdscs = ARRAY_SIZE(cam_cc_qcs615_gdscs),
  1455. .driver_data = &cam_cc_qcs615_driver_data,
  1456. };
  1457. static const struct of_device_id cam_cc_qcs615_match_table[] = {
  1458. { .compatible = "qcom,qcs615-camcc" },
  1459. { }
  1460. };
  1461. MODULE_DEVICE_TABLE(of, cam_cc_qcs615_match_table);
  1462. static int cam_cc_qcs615_probe(struct platform_device *pdev)
  1463. {
  1464. return qcom_cc_probe(pdev, &cam_cc_qcs615_desc);
  1465. }
  1466. static struct platform_driver cam_cc_qcs615_driver = {
  1467. .probe = cam_cc_qcs615_probe,
  1468. .driver = {
  1469. .name = "camcc-qcs615",
  1470. .of_match_table = cam_cc_qcs615_match_table,
  1471. },
  1472. };
  1473. module_platform_driver(cam_cc_qcs615_driver);
  1474. MODULE_DESCRIPTION("QTI CAMCC QCS615 Driver");
  1475. MODULE_LICENSE("GPL");