camcc-sdm845.c 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (c) 2018, The Linux Foundation. All rights reserved.
  4. */
  5. #include <linux/clk-provider.h>
  6. #include <linux/mod_devicetable.h>
  7. #include <linux/module.h>
  8. #include <linux/platform_device.h>
  9. #include <linux/regmap.h>
  10. #include <dt-bindings/clock/qcom,camcc-sdm845.h>
  11. #include "common.h"
  12. #include "clk-alpha-pll.h"
  13. #include "clk-branch.h"
  14. #include "clk-rcg.h"
  15. #include "clk-regmap.h"
  16. #include "gdsc.h"
  17. enum {
  18. P_BI_TCXO,
  19. P_CAM_CC_PLL0_OUT_EVEN,
  20. P_CAM_CC_PLL1_OUT_EVEN,
  21. P_CAM_CC_PLL2_OUT_EVEN,
  22. P_CAM_CC_PLL3_OUT_EVEN,
  23. };
  24. static struct clk_alpha_pll cam_cc_pll0 = {
  25. .offset = 0x0,
  26. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  27. .clkr = {
  28. .hw.init = &(struct clk_init_data){
  29. .name = "cam_cc_pll0",
  30. .parent_data = &(const struct clk_parent_data){
  31. .fw_name = "bi_tcxo", .name = "bi_tcxo",
  32. },
  33. .num_parents = 1,
  34. .ops = &clk_alpha_pll_fabia_ops,
  35. },
  36. },
  37. };
  38. static const struct clk_div_table post_div_table_fabia_even[] = {
  39. { 0x0, 1 },
  40. { 0x1, 2 },
  41. { }
  42. };
  43. static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = {
  44. .offset = 0x0,
  45. .post_div_shift = 8,
  46. .post_div_table = post_div_table_fabia_even,
  47. .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
  48. .width = 4,
  49. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  50. .clkr.hw.init = &(struct clk_init_data){
  51. .name = "cam_cc_pll0_out_even",
  52. .parent_hws = (const struct clk_hw*[]){
  53. &cam_cc_pll0.clkr.hw,
  54. },
  55. .num_parents = 1,
  56. .ops = &clk_alpha_pll_postdiv_fabia_ops,
  57. },
  58. };
  59. static struct clk_alpha_pll cam_cc_pll1 = {
  60. .offset = 0x1000,
  61. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  62. .clkr = {
  63. .hw.init = &(struct clk_init_data){
  64. .name = "cam_cc_pll1",
  65. .parent_data = &(const struct clk_parent_data){
  66. .fw_name = "bi_tcxo", .name = "bi_tcxo",
  67. },
  68. .num_parents = 1,
  69. .ops = &clk_alpha_pll_fabia_ops,
  70. },
  71. },
  72. };
  73. static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even = {
  74. .offset = 0x1000,
  75. .post_div_shift = 8,
  76. .post_div_table = post_div_table_fabia_even,
  77. .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
  78. .width = 4,
  79. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  80. .clkr.hw.init = &(struct clk_init_data){
  81. .name = "cam_cc_pll1_out_even",
  82. .parent_hws = (const struct clk_hw*[]){
  83. &cam_cc_pll1.clkr.hw,
  84. },
  85. .num_parents = 1,
  86. .ops = &clk_alpha_pll_postdiv_fabia_ops,
  87. },
  88. };
  89. static struct clk_alpha_pll cam_cc_pll2 = {
  90. .offset = 0x2000,
  91. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  92. .clkr = {
  93. .hw.init = &(struct clk_init_data){
  94. .name = "cam_cc_pll2",
  95. .parent_data = &(const struct clk_parent_data){
  96. .fw_name = "bi_tcxo", .name = "bi_tcxo",
  97. },
  98. .num_parents = 1,
  99. .ops = &clk_alpha_pll_fabia_ops,
  100. },
  101. },
  102. };
  103. static struct clk_alpha_pll_postdiv cam_cc_pll2_out_even = {
  104. .offset = 0x2000,
  105. .post_div_shift = 8,
  106. .post_div_table = post_div_table_fabia_even,
  107. .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
  108. .width = 4,
  109. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  110. .clkr.hw.init = &(struct clk_init_data){
  111. .name = "cam_cc_pll2_out_even",
  112. .parent_hws = (const struct clk_hw*[]){
  113. &cam_cc_pll2.clkr.hw,
  114. },
  115. .num_parents = 1,
  116. .ops = &clk_alpha_pll_postdiv_fabia_ops,
  117. },
  118. };
  119. static struct clk_alpha_pll cam_cc_pll3 = {
  120. .offset = 0x3000,
  121. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  122. .clkr = {
  123. .hw.init = &(struct clk_init_data){
  124. .name = "cam_cc_pll3",
  125. .parent_data = &(const struct clk_parent_data){
  126. .fw_name = "bi_tcxo", .name = "bi_tcxo",
  127. },
  128. .num_parents = 1,
  129. .ops = &clk_alpha_pll_fabia_ops,
  130. },
  131. },
  132. };
  133. static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even = {
  134. .offset = 0x3000,
  135. .post_div_shift = 8,
  136. .post_div_table = post_div_table_fabia_even,
  137. .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
  138. .width = 4,
  139. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  140. .clkr.hw.init = &(struct clk_init_data){
  141. .name = "cam_cc_pll3_out_even",
  142. .parent_hws = (const struct clk_hw*[]){
  143. &cam_cc_pll3.clkr.hw,
  144. },
  145. .num_parents = 1,
  146. .ops = &clk_alpha_pll_postdiv_fabia_ops,
  147. },
  148. };
  149. static const struct parent_map cam_cc_parent_map_0[] = {
  150. { P_BI_TCXO, 0 },
  151. { P_CAM_CC_PLL2_OUT_EVEN, 1 },
  152. { P_CAM_CC_PLL1_OUT_EVEN, 2 },
  153. { P_CAM_CC_PLL3_OUT_EVEN, 5 },
  154. { P_CAM_CC_PLL0_OUT_EVEN, 6 },
  155. };
  156. static const struct clk_parent_data cam_cc_parent_data_0[] = {
  157. { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
  158. { .hw = &cam_cc_pll2_out_even.clkr.hw },
  159. { .hw = &cam_cc_pll1_out_even.clkr.hw },
  160. { .hw = &cam_cc_pll3_out_even.clkr.hw },
  161. { .hw = &cam_cc_pll0_out_even.clkr.hw },
  162. };
  163. static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
  164. F(19200000, P_BI_TCXO, 1, 0, 0),
  165. F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
  166. F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
  167. F(404000000, P_CAM_CC_PLL1_OUT_EVEN, 2, 0, 0),
  168. F(480000000, P_CAM_CC_PLL2_OUT_EVEN, 1, 0, 0),
  169. F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
  170. { }
  171. };
  172. /*
  173. * As per HW design, some of the CAMCC RCGs needs to
  174. * move to XO clock during their clock disable so using
  175. * clk_rcg2_shared_ops for such RCGs. This is required
  176. * to power down the camera memories gracefully.
  177. * Also, use CLK_SET_RATE_PARENT flag for the RCGs which
  178. * have CAM_CC_PLL2_OUT_EVEN PLL as parent in frequency
  179. * table and requires reconfiguration of the PLL frequency.
  180. */
  181. static struct clk_rcg2 cam_cc_bps_clk_src = {
  182. .cmd_rcgr = 0x600c,
  183. .mnd_width = 0,
  184. .hid_width = 5,
  185. .parent_map = cam_cc_parent_map_0,
  186. .freq_tbl = ftbl_cam_cc_bps_clk_src,
  187. .clkr.hw.init = &(struct clk_init_data){
  188. .name = "cam_cc_bps_clk_src",
  189. .parent_data = cam_cc_parent_data_0,
  190. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  191. .flags = CLK_SET_RATE_PARENT,
  192. .ops = &clk_rcg2_shared_ops,
  193. },
  194. };
  195. static const struct freq_tbl ftbl_cam_cc_cci_clk_src[] = {
  196. F(19200000, P_BI_TCXO, 1, 0, 0),
  197. F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0),
  198. F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0),
  199. F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
  200. { }
  201. };
  202. static struct clk_rcg2 cam_cc_cci_clk_src = {
  203. .cmd_rcgr = 0xb0d8,
  204. .mnd_width = 8,
  205. .hid_width = 5,
  206. .parent_map = cam_cc_parent_map_0,
  207. .freq_tbl = ftbl_cam_cc_cci_clk_src,
  208. .clkr.hw.init = &(struct clk_init_data){
  209. .name = "cam_cc_cci_clk_src",
  210. .parent_data = cam_cc_parent_data_0,
  211. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  212. .ops = &clk_rcg2_ops,
  213. },
  214. };
  215. static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
  216. F(19200000, P_BI_TCXO, 1, 0, 0),
  217. F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
  218. { }
  219. };
  220. static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
  221. .cmd_rcgr = 0x9060,
  222. .mnd_width = 0,
  223. .hid_width = 5,
  224. .parent_map = cam_cc_parent_map_0,
  225. .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
  226. .clkr.hw.init = &(struct clk_init_data){
  227. .name = "cam_cc_cphy_rx_clk_src",
  228. .parent_data = cam_cc_parent_data_0,
  229. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  230. .ops = &clk_rcg2_ops,
  231. },
  232. };
  233. static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
  234. F(19200000, P_BI_TCXO, 1, 0, 0),
  235. F(240000000, P_CAM_CC_PLL2_OUT_EVEN, 2, 0, 0),
  236. F(269333333, P_CAM_CC_PLL1_OUT_EVEN, 3, 0, 0),
  237. { }
  238. };
  239. static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
  240. .cmd_rcgr = 0x5004,
  241. .mnd_width = 0,
  242. .hid_width = 5,
  243. .parent_map = cam_cc_parent_map_0,
  244. .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
  245. .clkr.hw.init = &(struct clk_init_data){
  246. .name = "cam_cc_csi0phytimer_clk_src",
  247. .parent_data = cam_cc_parent_data_0,
  248. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  249. .flags = CLK_SET_RATE_PARENT,
  250. .ops = &clk_rcg2_ops,
  251. },
  252. };
  253. static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
  254. .cmd_rcgr = 0x5028,
  255. .mnd_width = 0,
  256. .hid_width = 5,
  257. .parent_map = cam_cc_parent_map_0,
  258. .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
  259. .clkr.hw.init = &(struct clk_init_data){
  260. .name = "cam_cc_csi1phytimer_clk_src",
  261. .parent_data = cam_cc_parent_data_0,
  262. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  263. .flags = CLK_SET_RATE_PARENT,
  264. .ops = &clk_rcg2_ops,
  265. },
  266. };
  267. static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
  268. .cmd_rcgr = 0x504c,
  269. .mnd_width = 0,
  270. .hid_width = 5,
  271. .parent_map = cam_cc_parent_map_0,
  272. .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
  273. .clkr.hw.init = &(struct clk_init_data){
  274. .name = "cam_cc_csi2phytimer_clk_src",
  275. .parent_data = cam_cc_parent_data_0,
  276. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  277. .flags = CLK_SET_RATE_PARENT,
  278. .ops = &clk_rcg2_ops,
  279. },
  280. };
  281. static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = {
  282. .cmd_rcgr = 0x5070,
  283. .mnd_width = 0,
  284. .hid_width = 5,
  285. .parent_map = cam_cc_parent_map_0,
  286. .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
  287. .clkr.hw.init = &(struct clk_init_data){
  288. .name = "cam_cc_csi3phytimer_clk_src",
  289. .parent_data = cam_cc_parent_data_0,
  290. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  291. .flags = CLK_SET_RATE_PARENT,
  292. .ops = &clk_rcg2_ops,
  293. },
  294. };
  295. static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
  296. F(19200000, P_BI_TCXO, 1, 0, 0),
  297. F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0),
  298. F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
  299. F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
  300. F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
  301. F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
  302. { }
  303. };
  304. static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
  305. .cmd_rcgr = 0x6038,
  306. .mnd_width = 0,
  307. .hid_width = 5,
  308. .parent_map = cam_cc_parent_map_0,
  309. .freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
  310. .clkr.hw.init = &(struct clk_init_data){
  311. .name = "cam_cc_fast_ahb_clk_src",
  312. .parent_data = cam_cc_parent_data_0,
  313. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  314. .ops = &clk_rcg2_ops,
  315. },
  316. };
  317. static const struct freq_tbl ftbl_cam_cc_fd_core_clk_src[] = {
  318. F(19200000, P_BI_TCXO, 1, 0, 0),
  319. F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
  320. F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
  321. F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
  322. F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
  323. { }
  324. };
  325. static struct clk_rcg2 cam_cc_fd_core_clk_src = {
  326. .cmd_rcgr = 0xb0b0,
  327. .mnd_width = 0,
  328. .hid_width = 5,
  329. .parent_map = cam_cc_parent_map_0,
  330. .freq_tbl = ftbl_cam_cc_fd_core_clk_src,
  331. .clkr.hw.init = &(struct clk_init_data){
  332. .name = "cam_cc_fd_core_clk_src",
  333. .parent_data = cam_cc_parent_data_0,
  334. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  335. .ops = &clk_rcg2_shared_ops,
  336. },
  337. };
  338. static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = {
  339. F(19200000, P_BI_TCXO, 1, 0, 0),
  340. F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
  341. F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
  342. F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
  343. F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
  344. { }
  345. };
  346. static struct clk_rcg2 cam_cc_icp_clk_src = {
  347. .cmd_rcgr = 0xb088,
  348. .mnd_width = 0,
  349. .hid_width = 5,
  350. .parent_map = cam_cc_parent_map_0,
  351. .freq_tbl = ftbl_cam_cc_icp_clk_src,
  352. .clkr.hw.init = &(struct clk_init_data){
  353. .name = "cam_cc_icp_clk_src",
  354. .parent_data = cam_cc_parent_data_0,
  355. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  356. .ops = &clk_rcg2_shared_ops,
  357. },
  358. };
  359. static const struct freq_tbl ftbl_cam_cc_ife_0_clk_src[] = {
  360. F(19200000, P_BI_TCXO, 1, 0, 0),
  361. F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
  362. F(320000000, P_CAM_CC_PLL2_OUT_EVEN, 1.5, 0, 0),
  363. F(404000000, P_CAM_CC_PLL1_OUT_EVEN, 2, 0, 0),
  364. F(480000000, P_CAM_CC_PLL2_OUT_EVEN, 1, 0, 0),
  365. F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
  366. { }
  367. };
  368. static struct clk_rcg2 cam_cc_ife_0_clk_src = {
  369. .cmd_rcgr = 0x900c,
  370. .mnd_width = 0,
  371. .hid_width = 5,
  372. .parent_map = cam_cc_parent_map_0,
  373. .freq_tbl = ftbl_cam_cc_ife_0_clk_src,
  374. .clkr.hw.init = &(struct clk_init_data){
  375. .name = "cam_cc_ife_0_clk_src",
  376. .parent_data = cam_cc_parent_data_0,
  377. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  378. .flags = CLK_SET_RATE_PARENT,
  379. .ops = &clk_rcg2_shared_ops,
  380. },
  381. };
  382. static const struct freq_tbl ftbl_cam_cc_ife_0_csid_clk_src[] = {
  383. F(19200000, P_BI_TCXO, 1, 0, 0),
  384. F(75000000, P_CAM_CC_PLL0_OUT_EVEN, 8, 0, 0),
  385. F(384000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
  386. F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
  387. { }
  388. };
  389. static struct clk_rcg2 cam_cc_ife_0_csid_clk_src = {
  390. .cmd_rcgr = 0x9038,
  391. .mnd_width = 0,
  392. .hid_width = 5,
  393. .parent_map = cam_cc_parent_map_0,
  394. .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
  395. .clkr.hw.init = &(struct clk_init_data){
  396. .name = "cam_cc_ife_0_csid_clk_src",
  397. .parent_data = cam_cc_parent_data_0,
  398. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  399. .ops = &clk_rcg2_shared_ops,
  400. },
  401. };
  402. static struct clk_rcg2 cam_cc_ife_1_clk_src = {
  403. .cmd_rcgr = 0xa00c,
  404. .mnd_width = 0,
  405. .hid_width = 5,
  406. .parent_map = cam_cc_parent_map_0,
  407. .freq_tbl = ftbl_cam_cc_ife_0_clk_src,
  408. .clkr.hw.init = &(struct clk_init_data){
  409. .name = "cam_cc_ife_1_clk_src",
  410. .parent_data = cam_cc_parent_data_0,
  411. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  412. .flags = CLK_SET_RATE_PARENT,
  413. .ops = &clk_rcg2_shared_ops,
  414. },
  415. };
  416. static struct clk_rcg2 cam_cc_ife_1_csid_clk_src = {
  417. .cmd_rcgr = 0xa030,
  418. .mnd_width = 0,
  419. .hid_width = 5,
  420. .parent_map = cam_cc_parent_map_0,
  421. .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
  422. .clkr.hw.init = &(struct clk_init_data){
  423. .name = "cam_cc_ife_1_csid_clk_src",
  424. .parent_data = cam_cc_parent_data_0,
  425. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  426. .ops = &clk_rcg2_shared_ops,
  427. },
  428. };
  429. static struct clk_rcg2 cam_cc_ife_lite_clk_src = {
  430. .cmd_rcgr = 0xb004,
  431. .mnd_width = 0,
  432. .hid_width = 5,
  433. .parent_map = cam_cc_parent_map_0,
  434. .freq_tbl = ftbl_cam_cc_ife_0_clk_src,
  435. .clkr.hw.init = &(struct clk_init_data){
  436. .name = "cam_cc_ife_lite_clk_src",
  437. .parent_data = cam_cc_parent_data_0,
  438. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  439. .flags = CLK_SET_RATE_PARENT,
  440. .ops = &clk_rcg2_shared_ops,
  441. },
  442. };
  443. static struct clk_rcg2 cam_cc_ife_lite_csid_clk_src = {
  444. .cmd_rcgr = 0xb024,
  445. .mnd_width = 0,
  446. .hid_width = 5,
  447. .parent_map = cam_cc_parent_map_0,
  448. .freq_tbl = ftbl_cam_cc_ife_0_csid_clk_src,
  449. .clkr.hw.init = &(struct clk_init_data){
  450. .name = "cam_cc_ife_lite_csid_clk_src",
  451. .parent_data = cam_cc_parent_data_0,
  452. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  453. .ops = &clk_rcg2_shared_ops,
  454. },
  455. };
  456. static const struct freq_tbl ftbl_cam_cc_ipe_0_clk_src[] = {
  457. F(19200000, P_BI_TCXO, 1, 0, 0),
  458. F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
  459. F(240000000, P_CAM_CC_PLL0_OUT_EVEN, 2.5, 0, 0),
  460. F(404000000, P_CAM_CC_PLL1_OUT_EVEN, 2, 0, 0),
  461. F(480000000, P_CAM_CC_PLL2_OUT_EVEN, 1, 0, 0),
  462. F(538666667, P_CAM_CC_PLL1_OUT_EVEN, 1.5, 0, 0),
  463. F(600000000, P_CAM_CC_PLL0_OUT_EVEN, 1, 0, 0),
  464. { }
  465. };
  466. static struct clk_rcg2 cam_cc_ipe_0_clk_src = {
  467. .cmd_rcgr = 0x700c,
  468. .mnd_width = 0,
  469. .hid_width = 5,
  470. .parent_map = cam_cc_parent_map_0,
  471. .freq_tbl = ftbl_cam_cc_ipe_0_clk_src,
  472. .clkr.hw.init = &(struct clk_init_data){
  473. .name = "cam_cc_ipe_0_clk_src",
  474. .parent_data = cam_cc_parent_data_0,
  475. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  476. .flags = CLK_SET_RATE_PARENT,
  477. .ops = &clk_rcg2_shared_ops,
  478. },
  479. };
  480. static struct clk_rcg2 cam_cc_ipe_1_clk_src = {
  481. .cmd_rcgr = 0x800c,
  482. .mnd_width = 0,
  483. .hid_width = 5,
  484. .parent_map = cam_cc_parent_map_0,
  485. .freq_tbl = ftbl_cam_cc_ipe_0_clk_src,
  486. .clkr.hw.init = &(struct clk_init_data){
  487. .name = "cam_cc_ipe_1_clk_src",
  488. .parent_data = cam_cc_parent_data_0,
  489. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  490. .flags = CLK_SET_RATE_PARENT,
  491. .ops = &clk_rcg2_shared_ops,
  492. },
  493. };
  494. static struct clk_rcg2 cam_cc_jpeg_clk_src = {
  495. .cmd_rcgr = 0xb04c,
  496. .mnd_width = 0,
  497. .hid_width = 5,
  498. .parent_map = cam_cc_parent_map_0,
  499. .freq_tbl = ftbl_cam_cc_bps_clk_src,
  500. .clkr.hw.init = &(struct clk_init_data){
  501. .name = "cam_cc_jpeg_clk_src",
  502. .parent_data = cam_cc_parent_data_0,
  503. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  504. .flags = CLK_SET_RATE_PARENT,
  505. .ops = &clk_rcg2_shared_ops,
  506. },
  507. };
  508. static const struct freq_tbl ftbl_cam_cc_lrme_clk_src[] = {
  509. F(19200000, P_BI_TCXO, 1, 0, 0),
  510. F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
  511. F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
  512. F(269333333, P_CAM_CC_PLL1_OUT_EVEN, 3, 0, 0),
  513. F(320000000, P_CAM_CC_PLL2_OUT_EVEN, 1.5, 0, 0),
  514. F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
  515. { }
  516. };
  517. static struct clk_rcg2 cam_cc_lrme_clk_src = {
  518. .cmd_rcgr = 0xb0f8,
  519. .mnd_width = 0,
  520. .hid_width = 5,
  521. .parent_map = cam_cc_parent_map_0,
  522. .freq_tbl = ftbl_cam_cc_lrme_clk_src,
  523. .clkr.hw.init = &(struct clk_init_data){
  524. .name = "cam_cc_lrme_clk_src",
  525. .parent_data = cam_cc_parent_data_0,
  526. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  527. .flags = CLK_SET_RATE_PARENT,
  528. .ops = &clk_rcg2_shared_ops,
  529. },
  530. };
  531. static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
  532. F(19200000, P_BI_TCXO, 1, 0, 0),
  533. F(24000000, P_CAM_CC_PLL2_OUT_EVEN, 10, 1, 2),
  534. F(33333333, P_CAM_CC_PLL0_OUT_EVEN, 2, 1, 9),
  535. F(34285714, P_CAM_CC_PLL2_OUT_EVEN, 14, 0, 0),
  536. { }
  537. };
  538. static struct clk_rcg2 cam_cc_mclk0_clk_src = {
  539. .cmd_rcgr = 0x4004,
  540. .mnd_width = 8,
  541. .hid_width = 5,
  542. .parent_map = cam_cc_parent_map_0,
  543. .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
  544. .clkr.hw.init = &(struct clk_init_data){
  545. .name = "cam_cc_mclk0_clk_src",
  546. .parent_data = cam_cc_parent_data_0,
  547. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  548. .flags = CLK_SET_RATE_PARENT,
  549. .ops = &clk_rcg2_ops,
  550. },
  551. };
  552. static struct clk_rcg2 cam_cc_mclk1_clk_src = {
  553. .cmd_rcgr = 0x4024,
  554. .mnd_width = 8,
  555. .hid_width = 5,
  556. .parent_map = cam_cc_parent_map_0,
  557. .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
  558. .clkr.hw.init = &(struct clk_init_data){
  559. .name = "cam_cc_mclk1_clk_src",
  560. .parent_data = cam_cc_parent_data_0,
  561. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  562. .flags = CLK_SET_RATE_PARENT,
  563. .ops = &clk_rcg2_ops,
  564. },
  565. };
  566. static struct clk_rcg2 cam_cc_mclk2_clk_src = {
  567. .cmd_rcgr = 0x4044,
  568. .mnd_width = 8,
  569. .hid_width = 5,
  570. .parent_map = cam_cc_parent_map_0,
  571. .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
  572. .clkr.hw.init = &(struct clk_init_data){
  573. .name = "cam_cc_mclk2_clk_src",
  574. .parent_data = cam_cc_parent_data_0,
  575. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  576. .flags = CLK_SET_RATE_PARENT,
  577. .ops = &clk_rcg2_ops,
  578. },
  579. };
  580. static struct clk_rcg2 cam_cc_mclk3_clk_src = {
  581. .cmd_rcgr = 0x4064,
  582. .mnd_width = 8,
  583. .hid_width = 5,
  584. .parent_map = cam_cc_parent_map_0,
  585. .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
  586. .clkr.hw.init = &(struct clk_init_data){
  587. .name = "cam_cc_mclk3_clk_src",
  588. .parent_data = cam_cc_parent_data_0,
  589. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  590. .flags = CLK_SET_RATE_PARENT,
  591. .ops = &clk_rcg2_ops,
  592. },
  593. };
  594. static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
  595. F(19200000, P_BI_TCXO, 1, 0, 0),
  596. F(60000000, P_CAM_CC_PLL0_OUT_EVEN, 10, 0, 0),
  597. F(66666667, P_CAM_CC_PLL0_OUT_EVEN, 9, 0, 0),
  598. F(73846154, P_CAM_CC_PLL2_OUT_EVEN, 6.5, 0, 0),
  599. F(80000000, P_CAM_CC_PLL2_OUT_EVEN, 6, 0, 0),
  600. { }
  601. };
  602. static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
  603. .cmd_rcgr = 0x6054,
  604. .mnd_width = 0,
  605. .hid_width = 5,
  606. .parent_map = cam_cc_parent_map_0,
  607. .freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
  608. .clkr.hw.init = &(struct clk_init_data){
  609. .name = "cam_cc_slow_ahb_clk_src",
  610. .parent_data = cam_cc_parent_data_0,
  611. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  612. .flags = CLK_SET_RATE_PARENT,
  613. .ops = &clk_rcg2_ops,
  614. },
  615. };
  616. static struct clk_branch cam_cc_bps_ahb_clk = {
  617. .halt_reg = 0x606c,
  618. .halt_check = BRANCH_HALT,
  619. .clkr = {
  620. .enable_reg = 0x606c,
  621. .enable_mask = BIT(0),
  622. .hw.init = &(struct clk_init_data){
  623. .name = "cam_cc_bps_ahb_clk",
  624. .parent_hws = (const struct clk_hw*[]){
  625. &cam_cc_slow_ahb_clk_src.clkr.hw,
  626. },
  627. .num_parents = 1,
  628. .flags = CLK_SET_RATE_PARENT,
  629. .ops = &clk_branch2_ops,
  630. },
  631. },
  632. };
  633. static struct clk_branch cam_cc_bps_areg_clk = {
  634. .halt_reg = 0x6050,
  635. .halt_check = BRANCH_HALT,
  636. .clkr = {
  637. .enable_reg = 0x6050,
  638. .enable_mask = BIT(0),
  639. .hw.init = &(struct clk_init_data){
  640. .name = "cam_cc_bps_areg_clk",
  641. .parent_hws = (const struct clk_hw*[]){
  642. &cam_cc_fast_ahb_clk_src.clkr.hw,
  643. },
  644. .num_parents = 1,
  645. .flags = CLK_SET_RATE_PARENT,
  646. .ops = &clk_branch2_ops,
  647. },
  648. },
  649. };
  650. static struct clk_branch cam_cc_bps_axi_clk = {
  651. .halt_reg = 0x6034,
  652. .halt_check = BRANCH_HALT,
  653. .clkr = {
  654. .enable_reg = 0x6034,
  655. .enable_mask = BIT(0),
  656. .hw.init = &(struct clk_init_data){
  657. .name = "cam_cc_bps_axi_clk",
  658. .ops = &clk_branch2_ops,
  659. },
  660. },
  661. };
  662. static struct clk_branch cam_cc_bps_clk = {
  663. .halt_reg = 0x6024,
  664. .halt_check = BRANCH_HALT,
  665. .clkr = {
  666. .enable_reg = 0x6024,
  667. .enable_mask = BIT(0),
  668. .hw.init = &(struct clk_init_data){
  669. .name = "cam_cc_bps_clk",
  670. .parent_hws = (const struct clk_hw*[]){
  671. &cam_cc_bps_clk_src.clkr.hw,
  672. },
  673. .num_parents = 1,
  674. .flags = CLK_SET_RATE_PARENT,
  675. .ops = &clk_branch2_ops,
  676. },
  677. },
  678. };
  679. static struct clk_branch cam_cc_camnoc_atb_clk = {
  680. .halt_reg = 0xb12c,
  681. .halt_check = BRANCH_HALT,
  682. .clkr = {
  683. .enable_reg = 0xb12c,
  684. .enable_mask = BIT(0),
  685. .hw.init = &(struct clk_init_data){
  686. .name = "cam_cc_camnoc_atb_clk",
  687. .ops = &clk_branch2_ops,
  688. },
  689. },
  690. };
  691. static struct clk_branch cam_cc_camnoc_axi_clk = {
  692. .halt_reg = 0xb124,
  693. .halt_check = BRANCH_HALT,
  694. .clkr = {
  695. .enable_reg = 0xb124,
  696. .enable_mask = BIT(0),
  697. .hw.init = &(struct clk_init_data){
  698. .name = "cam_cc_camnoc_axi_clk",
  699. .ops = &clk_branch2_ops,
  700. },
  701. },
  702. };
  703. static struct clk_branch cam_cc_cci_clk = {
  704. .halt_reg = 0xb0f0,
  705. .halt_check = BRANCH_HALT,
  706. .clkr = {
  707. .enable_reg = 0xb0f0,
  708. .enable_mask = BIT(0),
  709. .hw.init = &(struct clk_init_data){
  710. .name = "cam_cc_cci_clk",
  711. .parent_hws = (const struct clk_hw*[]){
  712. &cam_cc_cci_clk_src.clkr.hw,
  713. },
  714. .num_parents = 1,
  715. .flags = CLK_SET_RATE_PARENT,
  716. .ops = &clk_branch2_ops,
  717. },
  718. },
  719. };
  720. static struct clk_branch cam_cc_cpas_ahb_clk = {
  721. .halt_reg = 0xb11c,
  722. .halt_check = BRANCH_HALT,
  723. .clkr = {
  724. .enable_reg = 0xb11c,
  725. .enable_mask = BIT(0),
  726. .hw.init = &(struct clk_init_data){
  727. .name = "cam_cc_cpas_ahb_clk",
  728. .parent_hws = (const struct clk_hw*[]){
  729. &cam_cc_slow_ahb_clk_src.clkr.hw,
  730. },
  731. .num_parents = 1,
  732. .flags = CLK_SET_RATE_PARENT,
  733. .ops = &clk_branch2_ops,
  734. },
  735. },
  736. };
  737. static struct clk_branch cam_cc_csi0phytimer_clk = {
  738. .halt_reg = 0x501c,
  739. .halt_check = BRANCH_HALT,
  740. .clkr = {
  741. .enable_reg = 0x501c,
  742. .enable_mask = BIT(0),
  743. .hw.init = &(struct clk_init_data){
  744. .name = "cam_cc_csi0phytimer_clk",
  745. .parent_hws = (const struct clk_hw*[]){
  746. &cam_cc_csi0phytimer_clk_src.clkr.hw,
  747. },
  748. .num_parents = 1,
  749. .flags = CLK_SET_RATE_PARENT,
  750. .ops = &clk_branch2_ops,
  751. },
  752. },
  753. };
  754. static struct clk_branch cam_cc_csi1phytimer_clk = {
  755. .halt_reg = 0x5040,
  756. .halt_check = BRANCH_HALT,
  757. .clkr = {
  758. .enable_reg = 0x5040,
  759. .enable_mask = BIT(0),
  760. .hw.init = &(struct clk_init_data){
  761. .name = "cam_cc_csi1phytimer_clk",
  762. .parent_hws = (const struct clk_hw*[]){
  763. &cam_cc_csi1phytimer_clk_src.clkr.hw,
  764. },
  765. .num_parents = 1,
  766. .flags = CLK_SET_RATE_PARENT,
  767. .ops = &clk_branch2_ops,
  768. },
  769. },
  770. };
  771. static struct clk_branch cam_cc_csi2phytimer_clk = {
  772. .halt_reg = 0x5064,
  773. .halt_check = BRANCH_HALT,
  774. .clkr = {
  775. .enable_reg = 0x5064,
  776. .enable_mask = BIT(0),
  777. .hw.init = &(struct clk_init_data){
  778. .name = "cam_cc_csi2phytimer_clk",
  779. .parent_hws = (const struct clk_hw*[]){
  780. &cam_cc_csi2phytimer_clk_src.clkr.hw,
  781. },
  782. .num_parents = 1,
  783. .flags = CLK_SET_RATE_PARENT,
  784. .ops = &clk_branch2_ops,
  785. },
  786. },
  787. };
  788. static struct clk_branch cam_cc_csi3phytimer_clk = {
  789. .halt_reg = 0x5088,
  790. .halt_check = BRANCH_HALT,
  791. .clkr = {
  792. .enable_reg = 0x5088,
  793. .enable_mask = BIT(0),
  794. .hw.init = &(struct clk_init_data){
  795. .name = "cam_cc_csi3phytimer_clk",
  796. .parent_hws = (const struct clk_hw*[]){
  797. &cam_cc_csi3phytimer_clk_src.clkr.hw,
  798. },
  799. .num_parents = 1,
  800. .flags = CLK_SET_RATE_PARENT,
  801. .ops = &clk_branch2_ops,
  802. },
  803. },
  804. };
  805. static struct clk_branch cam_cc_csiphy0_clk = {
  806. .halt_reg = 0x5020,
  807. .halt_check = BRANCH_HALT,
  808. .clkr = {
  809. .enable_reg = 0x5020,
  810. .enable_mask = BIT(0),
  811. .hw.init = &(struct clk_init_data){
  812. .name = "cam_cc_csiphy0_clk",
  813. .parent_hws = (const struct clk_hw*[]){
  814. &cam_cc_cphy_rx_clk_src.clkr.hw,
  815. },
  816. .num_parents = 1,
  817. .flags = CLK_SET_RATE_PARENT,
  818. .ops = &clk_branch2_ops,
  819. },
  820. },
  821. };
  822. static struct clk_branch cam_cc_csiphy1_clk = {
  823. .halt_reg = 0x5044,
  824. .halt_check = BRANCH_HALT,
  825. .clkr = {
  826. .enable_reg = 0x5044,
  827. .enable_mask = BIT(0),
  828. .hw.init = &(struct clk_init_data){
  829. .name = "cam_cc_csiphy1_clk",
  830. .parent_hws = (const struct clk_hw*[]){
  831. &cam_cc_cphy_rx_clk_src.clkr.hw,
  832. },
  833. .num_parents = 1,
  834. .flags = CLK_SET_RATE_PARENT,
  835. .ops = &clk_branch2_ops,
  836. },
  837. },
  838. };
  839. static struct clk_branch cam_cc_csiphy2_clk = {
  840. .halt_reg = 0x5068,
  841. .halt_check = BRANCH_HALT,
  842. .clkr = {
  843. .enable_reg = 0x5068,
  844. .enable_mask = BIT(0),
  845. .hw.init = &(struct clk_init_data){
  846. .name = "cam_cc_csiphy2_clk",
  847. .parent_hws = (const struct clk_hw*[]){
  848. &cam_cc_cphy_rx_clk_src.clkr.hw,
  849. },
  850. .num_parents = 1,
  851. .flags = CLK_SET_RATE_PARENT,
  852. .ops = &clk_branch2_ops,
  853. },
  854. },
  855. };
  856. static struct clk_branch cam_cc_csiphy3_clk = {
  857. .halt_reg = 0x508c,
  858. .halt_check = BRANCH_HALT,
  859. .clkr = {
  860. .enable_reg = 0x508c,
  861. .enable_mask = BIT(0),
  862. .hw.init = &(struct clk_init_data){
  863. .name = "cam_cc_csiphy3_clk",
  864. .parent_hws = (const struct clk_hw*[]){
  865. &cam_cc_cphy_rx_clk_src.clkr.hw,
  866. },
  867. .num_parents = 1,
  868. .flags = CLK_SET_RATE_PARENT,
  869. .ops = &clk_branch2_ops,
  870. },
  871. },
  872. };
  873. static struct clk_branch cam_cc_fd_core_clk = {
  874. .halt_reg = 0xb0c8,
  875. .halt_check = BRANCH_HALT,
  876. .clkr = {
  877. .enable_reg = 0xb0c8,
  878. .enable_mask = BIT(0),
  879. .hw.init = &(struct clk_init_data){
  880. .name = "cam_cc_fd_core_clk",
  881. .parent_hws = (const struct clk_hw*[]){
  882. &cam_cc_fd_core_clk_src.clkr.hw,
  883. },
  884. .num_parents = 1,
  885. .flags = CLK_SET_RATE_PARENT,
  886. .ops = &clk_branch2_ops,
  887. },
  888. },
  889. };
  890. static struct clk_branch cam_cc_fd_core_uar_clk = {
  891. .halt_reg = 0xb0d0,
  892. .halt_check = BRANCH_HALT,
  893. .clkr = {
  894. .enable_reg = 0xb0d0,
  895. .enable_mask = BIT(0),
  896. .hw.init = &(struct clk_init_data){
  897. .name = "cam_cc_fd_core_uar_clk",
  898. .parent_hws = (const struct clk_hw*[]){
  899. &cam_cc_fd_core_clk_src.clkr.hw,
  900. },
  901. .num_parents = 1,
  902. .ops = &clk_branch2_ops,
  903. },
  904. },
  905. };
  906. static struct clk_branch cam_cc_icp_apb_clk = {
  907. .halt_reg = 0xb084,
  908. .halt_check = BRANCH_HALT,
  909. .clkr = {
  910. .enable_reg = 0xb084,
  911. .enable_mask = BIT(0),
  912. .hw.init = &(struct clk_init_data){
  913. .name = "cam_cc_icp_apb_clk",
  914. .ops = &clk_branch2_ops,
  915. },
  916. },
  917. };
  918. static struct clk_branch cam_cc_icp_atb_clk = {
  919. .halt_reg = 0xb078,
  920. .halt_check = BRANCH_HALT,
  921. .clkr = {
  922. .enable_reg = 0xb078,
  923. .enable_mask = BIT(0),
  924. .hw.init = &(struct clk_init_data){
  925. .name = "cam_cc_icp_atb_clk",
  926. .ops = &clk_branch2_ops,
  927. },
  928. },
  929. };
  930. static struct clk_branch cam_cc_icp_clk = {
  931. .halt_reg = 0xb0a0,
  932. .halt_check = BRANCH_HALT,
  933. .clkr = {
  934. .enable_reg = 0xb0a0,
  935. .enable_mask = BIT(0),
  936. .hw.init = &(struct clk_init_data){
  937. .name = "cam_cc_icp_clk",
  938. .parent_hws = (const struct clk_hw*[]){
  939. &cam_cc_icp_clk_src.clkr.hw,
  940. },
  941. .num_parents = 1,
  942. .flags = CLK_SET_RATE_PARENT,
  943. .ops = &clk_branch2_ops,
  944. },
  945. },
  946. };
  947. static struct clk_branch cam_cc_icp_cti_clk = {
  948. .halt_reg = 0xb07c,
  949. .halt_check = BRANCH_HALT,
  950. .clkr = {
  951. .enable_reg = 0xb07c,
  952. .enable_mask = BIT(0),
  953. .hw.init = &(struct clk_init_data){
  954. .name = "cam_cc_icp_cti_clk",
  955. .ops = &clk_branch2_ops,
  956. },
  957. },
  958. };
  959. static struct clk_branch cam_cc_icp_ts_clk = {
  960. .halt_reg = 0xb080,
  961. .halt_check = BRANCH_HALT,
  962. .clkr = {
  963. .enable_reg = 0xb080,
  964. .enable_mask = BIT(0),
  965. .hw.init = &(struct clk_init_data){
  966. .name = "cam_cc_icp_ts_clk",
  967. .ops = &clk_branch2_ops,
  968. },
  969. },
  970. };
  971. static struct clk_branch cam_cc_ife_0_axi_clk = {
  972. .halt_reg = 0x907c,
  973. .halt_check = BRANCH_HALT,
  974. .clkr = {
  975. .enable_reg = 0x907c,
  976. .enable_mask = BIT(0),
  977. .hw.init = &(struct clk_init_data){
  978. .name = "cam_cc_ife_0_axi_clk",
  979. .ops = &clk_branch2_ops,
  980. },
  981. },
  982. };
  983. static struct clk_branch cam_cc_ife_0_clk = {
  984. .halt_reg = 0x9024,
  985. .halt_check = BRANCH_HALT,
  986. .clkr = {
  987. .enable_reg = 0x9024,
  988. .enable_mask = BIT(0),
  989. .hw.init = &(struct clk_init_data){
  990. .name = "cam_cc_ife_0_clk",
  991. .parent_hws = (const struct clk_hw*[]){
  992. &cam_cc_ife_0_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_0_cphy_rx_clk = {
  1001. .halt_reg = 0x9078,
  1002. .halt_check = BRANCH_HALT,
  1003. .clkr = {
  1004. .enable_reg = 0x9078,
  1005. .enable_mask = BIT(0),
  1006. .hw.init = &(struct clk_init_data){
  1007. .name = "cam_cc_ife_0_cphy_rx_clk",
  1008. .parent_hws = (const struct clk_hw*[]){
  1009. &cam_cc_cphy_rx_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_0_csid_clk = {
  1018. .halt_reg = 0x9050,
  1019. .halt_check = BRANCH_HALT,
  1020. .clkr = {
  1021. .enable_reg = 0x9050,
  1022. .enable_mask = BIT(0),
  1023. .hw.init = &(struct clk_init_data){
  1024. .name = "cam_cc_ife_0_csid_clk",
  1025. .parent_hws = (const struct clk_hw*[]){
  1026. &cam_cc_ife_0_csid_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_0_dsp_clk = {
  1035. .halt_reg = 0x9034,
  1036. .halt_check = BRANCH_HALT,
  1037. .clkr = {
  1038. .enable_reg = 0x9034,
  1039. .enable_mask = BIT(0),
  1040. .hw.init = &(struct clk_init_data){
  1041. .name = "cam_cc_ife_0_dsp_clk",
  1042. .parent_hws = (const struct clk_hw*[]){
  1043. &cam_cc_ife_0_clk_src.clkr.hw,
  1044. },
  1045. .num_parents = 1,
  1046. .ops = &clk_branch2_ops,
  1047. },
  1048. },
  1049. };
  1050. static struct clk_branch cam_cc_ife_1_axi_clk = {
  1051. .halt_reg = 0xa054,
  1052. .halt_check = BRANCH_HALT,
  1053. .clkr = {
  1054. .enable_reg = 0xa054,
  1055. .enable_mask = BIT(0),
  1056. .hw.init = &(struct clk_init_data){
  1057. .name = "cam_cc_ife_1_axi_clk",
  1058. .ops = &clk_branch2_ops,
  1059. },
  1060. },
  1061. };
  1062. static struct clk_branch cam_cc_ife_1_clk = {
  1063. .halt_reg = 0xa024,
  1064. .halt_check = BRANCH_HALT,
  1065. .clkr = {
  1066. .enable_reg = 0xa024,
  1067. .enable_mask = BIT(0),
  1068. .hw.init = &(struct clk_init_data){
  1069. .name = "cam_cc_ife_1_clk",
  1070. .parent_hws = (const struct clk_hw*[]){
  1071. &cam_cc_ife_1_clk_src.clkr.hw,
  1072. },
  1073. .num_parents = 1,
  1074. .flags = CLK_SET_RATE_PARENT,
  1075. .ops = &clk_branch2_ops,
  1076. },
  1077. },
  1078. };
  1079. static struct clk_branch cam_cc_ife_1_cphy_rx_clk = {
  1080. .halt_reg = 0xa050,
  1081. .halt_check = BRANCH_HALT,
  1082. .clkr = {
  1083. .enable_reg = 0xa050,
  1084. .enable_mask = BIT(0),
  1085. .hw.init = &(struct clk_init_data){
  1086. .name = "cam_cc_ife_1_cphy_rx_clk",
  1087. .parent_hws = (const struct clk_hw*[]){
  1088. &cam_cc_cphy_rx_clk_src.clkr.hw,
  1089. },
  1090. .num_parents = 1,
  1091. .flags = CLK_SET_RATE_PARENT,
  1092. .ops = &clk_branch2_ops,
  1093. },
  1094. },
  1095. };
  1096. static struct clk_branch cam_cc_ife_1_csid_clk = {
  1097. .halt_reg = 0xa048,
  1098. .halt_check = BRANCH_HALT,
  1099. .clkr = {
  1100. .enable_reg = 0xa048,
  1101. .enable_mask = BIT(0),
  1102. .hw.init = &(struct clk_init_data){
  1103. .name = "cam_cc_ife_1_csid_clk",
  1104. .parent_hws = (const struct clk_hw*[]){
  1105. &cam_cc_ife_1_csid_clk_src.clkr.hw,
  1106. },
  1107. .num_parents = 1,
  1108. .flags = CLK_SET_RATE_PARENT,
  1109. .ops = &clk_branch2_ops,
  1110. },
  1111. },
  1112. };
  1113. static struct clk_branch cam_cc_ife_1_dsp_clk = {
  1114. .halt_reg = 0xa02c,
  1115. .halt_check = BRANCH_HALT,
  1116. .clkr = {
  1117. .enable_reg = 0xa02c,
  1118. .enable_mask = BIT(0),
  1119. .hw.init = &(struct clk_init_data){
  1120. .name = "cam_cc_ife_1_dsp_clk",
  1121. .parent_hws = (const struct clk_hw*[]){
  1122. &cam_cc_ife_1_clk_src.clkr.hw,
  1123. },
  1124. .num_parents = 1,
  1125. .ops = &clk_branch2_ops,
  1126. },
  1127. },
  1128. };
  1129. static struct clk_branch cam_cc_ife_lite_clk = {
  1130. .halt_reg = 0xb01c,
  1131. .halt_check = BRANCH_HALT,
  1132. .clkr = {
  1133. .enable_reg = 0xb01c,
  1134. .enable_mask = BIT(0),
  1135. .hw.init = &(struct clk_init_data){
  1136. .name = "cam_cc_ife_lite_clk",
  1137. .parent_hws = (const struct clk_hw*[]){
  1138. &cam_cc_ife_lite_clk_src.clkr.hw,
  1139. },
  1140. .num_parents = 1,
  1141. .flags = CLK_SET_RATE_PARENT,
  1142. .ops = &clk_branch2_ops,
  1143. },
  1144. },
  1145. };
  1146. static struct clk_branch cam_cc_ife_lite_cphy_rx_clk = {
  1147. .halt_reg = 0xb044,
  1148. .halt_check = BRANCH_HALT,
  1149. .clkr = {
  1150. .enable_reg = 0xb044,
  1151. .enable_mask = BIT(0),
  1152. .hw.init = &(struct clk_init_data){
  1153. .name = "cam_cc_ife_lite_cphy_rx_clk",
  1154. .parent_hws = (const struct clk_hw*[]){
  1155. &cam_cc_cphy_rx_clk_src.clkr.hw,
  1156. },
  1157. .num_parents = 1,
  1158. .flags = CLK_SET_RATE_PARENT,
  1159. .ops = &clk_branch2_ops,
  1160. },
  1161. },
  1162. };
  1163. static struct clk_branch cam_cc_ife_lite_csid_clk = {
  1164. .halt_reg = 0xb03c,
  1165. .halt_check = BRANCH_HALT,
  1166. .clkr = {
  1167. .enable_reg = 0xb03c,
  1168. .enable_mask = BIT(0),
  1169. .hw.init = &(struct clk_init_data){
  1170. .name = "cam_cc_ife_lite_csid_clk",
  1171. .parent_hws = (const struct clk_hw*[]){
  1172. &cam_cc_ife_lite_csid_clk_src.clkr.hw,
  1173. },
  1174. .num_parents = 1,
  1175. .flags = CLK_SET_RATE_PARENT,
  1176. .ops = &clk_branch2_ops,
  1177. },
  1178. },
  1179. };
  1180. static struct clk_branch cam_cc_ipe_0_ahb_clk = {
  1181. .halt_reg = 0x703c,
  1182. .halt_check = BRANCH_HALT,
  1183. .clkr = {
  1184. .enable_reg = 0x703c,
  1185. .enable_mask = BIT(0),
  1186. .hw.init = &(struct clk_init_data){
  1187. .name = "cam_cc_ipe_0_ahb_clk",
  1188. .parent_hws = (const struct clk_hw*[]){
  1189. &cam_cc_slow_ahb_clk_src.clkr.hw,
  1190. },
  1191. .num_parents = 1,
  1192. .flags = CLK_SET_RATE_PARENT,
  1193. .ops = &clk_branch2_ops,
  1194. },
  1195. },
  1196. };
  1197. static struct clk_branch cam_cc_ipe_0_areg_clk = {
  1198. .halt_reg = 0x7038,
  1199. .halt_check = BRANCH_HALT,
  1200. .clkr = {
  1201. .enable_reg = 0x7038,
  1202. .enable_mask = BIT(0),
  1203. .hw.init = &(struct clk_init_data){
  1204. .name = "cam_cc_ipe_0_areg_clk",
  1205. .parent_hws = (const struct clk_hw*[]){
  1206. &cam_cc_fast_ahb_clk_src.clkr.hw,
  1207. },
  1208. .num_parents = 1,
  1209. .flags = CLK_SET_RATE_PARENT,
  1210. .ops = &clk_branch2_ops,
  1211. },
  1212. },
  1213. };
  1214. static struct clk_branch cam_cc_ipe_0_axi_clk = {
  1215. .halt_reg = 0x7034,
  1216. .halt_check = BRANCH_HALT,
  1217. .clkr = {
  1218. .enable_reg = 0x7034,
  1219. .enable_mask = BIT(0),
  1220. .hw.init = &(struct clk_init_data){
  1221. .name = "cam_cc_ipe_0_axi_clk",
  1222. .ops = &clk_branch2_ops,
  1223. },
  1224. },
  1225. };
  1226. static struct clk_branch cam_cc_ipe_0_clk = {
  1227. .halt_reg = 0x7024,
  1228. .halt_check = BRANCH_HALT,
  1229. .clkr = {
  1230. .enable_reg = 0x7024,
  1231. .enable_mask = BIT(0),
  1232. .hw.init = &(struct clk_init_data){
  1233. .name = "cam_cc_ipe_0_clk",
  1234. .parent_hws = (const struct clk_hw*[]){
  1235. &cam_cc_ipe_0_clk_src.clkr.hw,
  1236. },
  1237. .num_parents = 1,
  1238. .flags = CLK_SET_RATE_PARENT,
  1239. .ops = &clk_branch2_ops,
  1240. },
  1241. },
  1242. };
  1243. static struct clk_branch cam_cc_ipe_1_ahb_clk = {
  1244. .halt_reg = 0x803c,
  1245. .halt_check = BRANCH_HALT,
  1246. .clkr = {
  1247. .enable_reg = 0x803c,
  1248. .enable_mask = BIT(0),
  1249. .hw.init = &(struct clk_init_data){
  1250. .name = "cam_cc_ipe_1_ahb_clk",
  1251. .parent_hws = (const struct clk_hw*[]){
  1252. &cam_cc_slow_ahb_clk_src.clkr.hw,
  1253. },
  1254. .num_parents = 1,
  1255. .flags = CLK_SET_RATE_PARENT,
  1256. .ops = &clk_branch2_ops,
  1257. },
  1258. },
  1259. };
  1260. static struct clk_branch cam_cc_ipe_1_areg_clk = {
  1261. .halt_reg = 0x8038,
  1262. .halt_check = BRANCH_HALT,
  1263. .clkr = {
  1264. .enable_reg = 0x8038,
  1265. .enable_mask = BIT(0),
  1266. .hw.init = &(struct clk_init_data){
  1267. .name = "cam_cc_ipe_1_areg_clk",
  1268. .parent_hws = (const struct clk_hw*[]){
  1269. &cam_cc_fast_ahb_clk_src.clkr.hw,
  1270. },
  1271. .num_parents = 1,
  1272. .flags = CLK_SET_RATE_PARENT,
  1273. .ops = &clk_branch2_ops,
  1274. },
  1275. },
  1276. };
  1277. static struct clk_branch cam_cc_ipe_1_axi_clk = {
  1278. .halt_reg = 0x8034,
  1279. .halt_check = BRANCH_HALT,
  1280. .clkr = {
  1281. .enable_reg = 0x8034,
  1282. .enable_mask = BIT(0),
  1283. .hw.init = &(struct clk_init_data){
  1284. .name = "cam_cc_ipe_1_axi_clk",
  1285. .ops = &clk_branch2_ops,
  1286. },
  1287. },
  1288. };
  1289. static struct clk_branch cam_cc_ipe_1_clk = {
  1290. .halt_reg = 0x8024,
  1291. .halt_check = BRANCH_HALT,
  1292. .clkr = {
  1293. .enable_reg = 0x8024,
  1294. .enable_mask = BIT(0),
  1295. .hw.init = &(struct clk_init_data){
  1296. .name = "cam_cc_ipe_1_clk",
  1297. .parent_hws = (const struct clk_hw*[]){
  1298. &cam_cc_ipe_1_clk_src.clkr.hw,
  1299. },
  1300. .num_parents = 1,
  1301. .flags = CLK_SET_RATE_PARENT,
  1302. .ops = &clk_branch2_ops,
  1303. },
  1304. },
  1305. };
  1306. static struct clk_branch cam_cc_jpeg_clk = {
  1307. .halt_reg = 0xb064,
  1308. .halt_check = BRANCH_HALT,
  1309. .clkr = {
  1310. .enable_reg = 0xb064,
  1311. .enable_mask = BIT(0),
  1312. .hw.init = &(struct clk_init_data){
  1313. .name = "cam_cc_jpeg_clk",
  1314. .parent_hws = (const struct clk_hw*[]){
  1315. &cam_cc_jpeg_clk_src.clkr.hw,
  1316. },
  1317. .num_parents = 1,
  1318. .flags = CLK_SET_RATE_PARENT,
  1319. .ops = &clk_branch2_ops,
  1320. },
  1321. },
  1322. };
  1323. static struct clk_branch cam_cc_lrme_clk = {
  1324. .halt_reg = 0xb110,
  1325. .halt_check = BRANCH_HALT,
  1326. .clkr = {
  1327. .enable_reg = 0xb110,
  1328. .enable_mask = BIT(0),
  1329. .hw.init = &(struct clk_init_data){
  1330. .name = "cam_cc_lrme_clk",
  1331. .parent_hws = (const struct clk_hw*[]){
  1332. &cam_cc_lrme_clk_src.clkr.hw,
  1333. },
  1334. .num_parents = 1,
  1335. .flags = CLK_SET_RATE_PARENT,
  1336. .ops = &clk_branch2_ops,
  1337. },
  1338. },
  1339. };
  1340. static struct clk_branch cam_cc_mclk0_clk = {
  1341. .halt_reg = 0x401c,
  1342. .halt_check = BRANCH_HALT,
  1343. .clkr = {
  1344. .enable_reg = 0x401c,
  1345. .enable_mask = BIT(0),
  1346. .hw.init = &(struct clk_init_data){
  1347. .name = "cam_cc_mclk0_clk",
  1348. .parent_hws = (const struct clk_hw*[]){
  1349. &cam_cc_mclk0_clk_src.clkr.hw,
  1350. },
  1351. .num_parents = 1,
  1352. .flags = CLK_SET_RATE_PARENT,
  1353. .ops = &clk_branch2_ops,
  1354. },
  1355. },
  1356. };
  1357. static struct clk_branch cam_cc_mclk1_clk = {
  1358. .halt_reg = 0x403c,
  1359. .halt_check = BRANCH_HALT,
  1360. .clkr = {
  1361. .enable_reg = 0x403c,
  1362. .enable_mask = BIT(0),
  1363. .hw.init = &(struct clk_init_data){
  1364. .name = "cam_cc_mclk1_clk",
  1365. .parent_hws = (const struct clk_hw*[]){
  1366. &cam_cc_mclk1_clk_src.clkr.hw,
  1367. },
  1368. .num_parents = 1,
  1369. .flags = CLK_SET_RATE_PARENT,
  1370. .ops = &clk_branch2_ops,
  1371. },
  1372. },
  1373. };
  1374. static struct clk_branch cam_cc_mclk2_clk = {
  1375. .halt_reg = 0x405c,
  1376. .halt_check = BRANCH_HALT,
  1377. .clkr = {
  1378. .enable_reg = 0x405c,
  1379. .enable_mask = BIT(0),
  1380. .hw.init = &(struct clk_init_data){
  1381. .name = "cam_cc_mclk2_clk",
  1382. .parent_hws = (const struct clk_hw*[]){
  1383. &cam_cc_mclk2_clk_src.clkr.hw,
  1384. },
  1385. .num_parents = 1,
  1386. .flags = CLK_SET_RATE_PARENT,
  1387. .ops = &clk_branch2_ops,
  1388. },
  1389. },
  1390. };
  1391. static struct clk_branch cam_cc_mclk3_clk = {
  1392. .halt_reg = 0x407c,
  1393. .halt_check = BRANCH_HALT,
  1394. .clkr = {
  1395. .enable_reg = 0x407c,
  1396. .enable_mask = BIT(0),
  1397. .hw.init = &(struct clk_init_data){
  1398. .name = "cam_cc_mclk3_clk",
  1399. .parent_hws = (const struct clk_hw*[]){
  1400. &cam_cc_mclk3_clk_src.clkr.hw,
  1401. },
  1402. .num_parents = 1,
  1403. .flags = CLK_SET_RATE_PARENT,
  1404. .ops = &clk_branch2_ops,
  1405. },
  1406. },
  1407. };
  1408. static struct clk_branch cam_cc_soc_ahb_clk = {
  1409. .halt_reg = 0xb13c,
  1410. .halt_check = BRANCH_HALT,
  1411. .clkr = {
  1412. .enable_reg = 0xb13c,
  1413. .enable_mask = BIT(0),
  1414. .hw.init = &(struct clk_init_data){
  1415. .name = "cam_cc_soc_ahb_clk",
  1416. .ops = &clk_branch2_ops,
  1417. },
  1418. },
  1419. };
  1420. static struct clk_branch cam_cc_sys_tmr_clk = {
  1421. .halt_reg = 0xb0a8,
  1422. .halt_check = BRANCH_HALT,
  1423. .clkr = {
  1424. .enable_reg = 0xb0a8,
  1425. .enable_mask = BIT(0),
  1426. .hw.init = &(struct clk_init_data){
  1427. .name = "cam_cc_sys_tmr_clk",
  1428. .ops = &clk_branch2_ops,
  1429. },
  1430. },
  1431. };
  1432. static struct gdsc titan_top_gdsc;
  1433. static struct gdsc bps_gdsc = {
  1434. .gdscr = 0x6004,
  1435. .pd = {
  1436. .name = "bps_gdsc",
  1437. },
  1438. .flags = HW_CTRL | POLL_CFG_GDSCR,
  1439. .parent = &titan_top_gdsc.pd,
  1440. .pwrsts = PWRSTS_OFF_ON,
  1441. };
  1442. static struct gdsc ipe_0_gdsc = {
  1443. .gdscr = 0x7004,
  1444. .pd = {
  1445. .name = "ipe_0_gdsc",
  1446. },
  1447. .flags = HW_CTRL | POLL_CFG_GDSCR,
  1448. .parent = &titan_top_gdsc.pd,
  1449. .pwrsts = PWRSTS_OFF_ON,
  1450. };
  1451. static struct gdsc ipe_1_gdsc = {
  1452. .gdscr = 0x8004,
  1453. .pd = {
  1454. .name = "ipe_1_gdsc",
  1455. },
  1456. .flags = HW_CTRL | POLL_CFG_GDSCR,
  1457. .parent = &titan_top_gdsc.pd,
  1458. .pwrsts = PWRSTS_OFF_ON,
  1459. };
  1460. static struct gdsc ife_0_gdsc = {
  1461. .gdscr = 0x9004,
  1462. .pd = {
  1463. .name = "ife_0_gdsc",
  1464. },
  1465. .flags = POLL_CFG_GDSCR,
  1466. .parent = &titan_top_gdsc.pd,
  1467. .pwrsts = PWRSTS_OFF_ON,
  1468. };
  1469. static struct gdsc ife_1_gdsc = {
  1470. .gdscr = 0xa004,
  1471. .pd = {
  1472. .name = "ife_1_gdsc",
  1473. },
  1474. .flags = POLL_CFG_GDSCR,
  1475. .parent = &titan_top_gdsc.pd,
  1476. .pwrsts = PWRSTS_OFF_ON,
  1477. };
  1478. static struct gdsc titan_top_gdsc = {
  1479. .gdscr = 0xb134,
  1480. .pd = {
  1481. .name = "titan_top_gdsc",
  1482. },
  1483. .flags = POLL_CFG_GDSCR,
  1484. .pwrsts = PWRSTS_OFF_ON,
  1485. };
  1486. static struct clk_regmap *cam_cc_sdm845_clocks[] = {
  1487. [CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
  1488. [CAM_CC_BPS_AREG_CLK] = &cam_cc_bps_areg_clk.clkr,
  1489. [CAM_CC_BPS_AXI_CLK] = &cam_cc_bps_axi_clk.clkr,
  1490. [CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
  1491. [CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
  1492. [CAM_CC_CAMNOC_ATB_CLK] = &cam_cc_camnoc_atb_clk.clkr,
  1493. [CAM_CC_CAMNOC_AXI_CLK] = &cam_cc_camnoc_axi_clk.clkr,
  1494. [CAM_CC_CCI_CLK] = &cam_cc_cci_clk.clkr,
  1495. [CAM_CC_CCI_CLK_SRC] = &cam_cc_cci_clk_src.clkr,
  1496. [CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
  1497. [CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
  1498. [CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
  1499. [CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
  1500. [CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
  1501. [CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
  1502. [CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
  1503. [CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
  1504. [CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr,
  1505. [CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr,
  1506. [CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
  1507. [CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
  1508. [CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
  1509. [CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr,
  1510. [CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
  1511. [CAM_CC_FD_CORE_CLK] = &cam_cc_fd_core_clk.clkr,
  1512. [CAM_CC_FD_CORE_CLK_SRC] = &cam_cc_fd_core_clk_src.clkr,
  1513. [CAM_CC_FD_CORE_UAR_CLK] = &cam_cc_fd_core_uar_clk.clkr,
  1514. [CAM_CC_ICP_APB_CLK] = &cam_cc_icp_apb_clk.clkr,
  1515. [CAM_CC_ICP_ATB_CLK] = &cam_cc_icp_atb_clk.clkr,
  1516. [CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
  1517. [CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
  1518. [CAM_CC_ICP_CTI_CLK] = &cam_cc_icp_cti_clk.clkr,
  1519. [CAM_CC_ICP_TS_CLK] = &cam_cc_icp_ts_clk.clkr,
  1520. [CAM_CC_IFE_0_AXI_CLK] = &cam_cc_ife_0_axi_clk.clkr,
  1521. [CAM_CC_IFE_0_CLK] = &cam_cc_ife_0_clk.clkr,
  1522. [CAM_CC_IFE_0_CLK_SRC] = &cam_cc_ife_0_clk_src.clkr,
  1523. [CAM_CC_IFE_0_CPHY_RX_CLK] = &cam_cc_ife_0_cphy_rx_clk.clkr,
  1524. [CAM_CC_IFE_0_CSID_CLK] = &cam_cc_ife_0_csid_clk.clkr,
  1525. [CAM_CC_IFE_0_CSID_CLK_SRC] = &cam_cc_ife_0_csid_clk_src.clkr,
  1526. [CAM_CC_IFE_0_DSP_CLK] = &cam_cc_ife_0_dsp_clk.clkr,
  1527. [CAM_CC_IFE_1_AXI_CLK] = &cam_cc_ife_1_axi_clk.clkr,
  1528. [CAM_CC_IFE_1_CLK] = &cam_cc_ife_1_clk.clkr,
  1529. [CAM_CC_IFE_1_CLK_SRC] = &cam_cc_ife_1_clk_src.clkr,
  1530. [CAM_CC_IFE_1_CPHY_RX_CLK] = &cam_cc_ife_1_cphy_rx_clk.clkr,
  1531. [CAM_CC_IFE_1_CSID_CLK] = &cam_cc_ife_1_csid_clk.clkr,
  1532. [CAM_CC_IFE_1_CSID_CLK_SRC] = &cam_cc_ife_1_csid_clk_src.clkr,
  1533. [CAM_CC_IFE_1_DSP_CLK] = &cam_cc_ife_1_dsp_clk.clkr,
  1534. [CAM_CC_IFE_LITE_CLK] = &cam_cc_ife_lite_clk.clkr,
  1535. [CAM_CC_IFE_LITE_CLK_SRC] = &cam_cc_ife_lite_clk_src.clkr,
  1536. [CAM_CC_IFE_LITE_CPHY_RX_CLK] = &cam_cc_ife_lite_cphy_rx_clk.clkr,
  1537. [CAM_CC_IFE_LITE_CSID_CLK] = &cam_cc_ife_lite_csid_clk.clkr,
  1538. [CAM_CC_IFE_LITE_CSID_CLK_SRC] = &cam_cc_ife_lite_csid_clk_src.clkr,
  1539. [CAM_CC_IPE_0_AHB_CLK] = &cam_cc_ipe_0_ahb_clk.clkr,
  1540. [CAM_CC_IPE_0_AREG_CLK] = &cam_cc_ipe_0_areg_clk.clkr,
  1541. [CAM_CC_IPE_0_AXI_CLK] = &cam_cc_ipe_0_axi_clk.clkr,
  1542. [CAM_CC_IPE_0_CLK] = &cam_cc_ipe_0_clk.clkr,
  1543. [CAM_CC_IPE_0_CLK_SRC] = &cam_cc_ipe_0_clk_src.clkr,
  1544. [CAM_CC_IPE_1_AHB_CLK] = &cam_cc_ipe_1_ahb_clk.clkr,
  1545. [CAM_CC_IPE_1_AREG_CLK] = &cam_cc_ipe_1_areg_clk.clkr,
  1546. [CAM_CC_IPE_1_AXI_CLK] = &cam_cc_ipe_1_axi_clk.clkr,
  1547. [CAM_CC_IPE_1_CLK] = &cam_cc_ipe_1_clk.clkr,
  1548. [CAM_CC_IPE_1_CLK_SRC] = &cam_cc_ipe_1_clk_src.clkr,
  1549. [CAM_CC_JPEG_CLK] = &cam_cc_jpeg_clk.clkr,
  1550. [CAM_CC_JPEG_CLK_SRC] = &cam_cc_jpeg_clk_src.clkr,
  1551. [CAM_CC_LRME_CLK] = &cam_cc_lrme_clk.clkr,
  1552. [CAM_CC_LRME_CLK_SRC] = &cam_cc_lrme_clk_src.clkr,
  1553. [CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
  1554. [CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
  1555. [CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
  1556. [CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
  1557. [CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
  1558. [CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
  1559. [CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
  1560. [CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
  1561. [CAM_CC_PLL0] = &cam_cc_pll0.clkr,
  1562. [CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr,
  1563. [CAM_CC_PLL1] = &cam_cc_pll1.clkr,
  1564. [CAM_CC_PLL1_OUT_EVEN] = &cam_cc_pll1_out_even.clkr,
  1565. [CAM_CC_PLL2] = &cam_cc_pll2.clkr,
  1566. [CAM_CC_PLL2_OUT_EVEN] = &cam_cc_pll2_out_even.clkr,
  1567. [CAM_CC_PLL3] = &cam_cc_pll3.clkr,
  1568. [CAM_CC_PLL3_OUT_EVEN] = &cam_cc_pll3_out_even.clkr,
  1569. [CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
  1570. [CAM_CC_SOC_AHB_CLK] = &cam_cc_soc_ahb_clk.clkr,
  1571. [CAM_CC_SYS_TMR_CLK] = &cam_cc_sys_tmr_clk.clkr,
  1572. };
  1573. static struct gdsc *cam_cc_sdm845_gdscs[] = {
  1574. [BPS_GDSC] = &bps_gdsc,
  1575. [IPE_0_GDSC] = &ipe_0_gdsc,
  1576. [IPE_1_GDSC] = &ipe_1_gdsc,
  1577. [IFE_0_GDSC] = &ife_0_gdsc,
  1578. [IFE_1_GDSC] = &ife_1_gdsc,
  1579. [TITAN_TOP_GDSC] = &titan_top_gdsc,
  1580. };
  1581. static const struct regmap_config cam_cc_sdm845_regmap_config = {
  1582. .reg_bits = 32,
  1583. .reg_stride = 4,
  1584. .val_bits = 32,
  1585. .max_register = 0xd004,
  1586. .fast_io = true,
  1587. };
  1588. static const struct qcom_cc_desc cam_cc_sdm845_desc = {
  1589. .config = &cam_cc_sdm845_regmap_config,
  1590. .clks = cam_cc_sdm845_clocks,
  1591. .num_clks = ARRAY_SIZE(cam_cc_sdm845_clocks),
  1592. .gdscs = cam_cc_sdm845_gdscs,
  1593. .num_gdscs = ARRAY_SIZE(cam_cc_sdm845_gdscs),
  1594. };
  1595. static const struct of_device_id cam_cc_sdm845_match_table[] = {
  1596. { .compatible = "qcom,sdm845-camcc" },
  1597. { }
  1598. };
  1599. MODULE_DEVICE_TABLE(of, cam_cc_sdm845_match_table);
  1600. static int cam_cc_sdm845_probe(struct platform_device *pdev)
  1601. {
  1602. struct regmap *regmap;
  1603. struct alpha_pll_config cam_cc_pll_config = { };
  1604. regmap = qcom_cc_map(pdev, &cam_cc_sdm845_desc);
  1605. if (IS_ERR(regmap))
  1606. return PTR_ERR(regmap);
  1607. cam_cc_pll_config.l = 0x1f;
  1608. cam_cc_pll_config.alpha = 0x4000;
  1609. clk_fabia_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll_config);
  1610. cam_cc_pll_config.l = 0x2a;
  1611. cam_cc_pll_config.alpha = 0x1556;
  1612. clk_fabia_pll_configure(&cam_cc_pll1, regmap, &cam_cc_pll_config);
  1613. cam_cc_pll_config.l = 0x32;
  1614. cam_cc_pll_config.alpha = 0x0;
  1615. clk_fabia_pll_configure(&cam_cc_pll2, regmap, &cam_cc_pll_config);
  1616. cam_cc_pll_config.l = 0x14;
  1617. clk_fabia_pll_configure(&cam_cc_pll3, regmap, &cam_cc_pll_config);
  1618. return qcom_cc_really_probe(&pdev->dev, &cam_cc_sdm845_desc, regmap);
  1619. }
  1620. static struct platform_driver cam_cc_sdm845_driver = {
  1621. .probe = cam_cc_sdm845_probe,
  1622. .driver = {
  1623. .name = "sdm845-camcc",
  1624. .of_match_table = cam_cc_sdm845_match_table,
  1625. },
  1626. };
  1627. module_platform_driver(cam_cc_sdm845_driver);
  1628. MODULE_DESCRIPTION("QTI CAM_CC SDM845 Driver");
  1629. MODULE_LICENSE("GPL v2");