camcc-milos.c 57 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
  4. * Copyright (c) 2025, Luca Weiss <luca.weiss@fairphone.com>
  5. */
  6. #include <linux/clk-provider.h>
  7. #include <linux/mod_devicetable.h>
  8. #include <linux/module.h>
  9. #include <linux/platform_device.h>
  10. #include <linux/regmap.h>
  11. #include <dt-bindings/clock/qcom,milos-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. /* Need to match the order of clocks in DT binding */
  23. enum {
  24. DT_BI_TCXO,
  25. DT_SLEEP_CLK,
  26. DT_IFACE,
  27. };
  28. enum {
  29. P_BI_TCXO,
  30. P_CAM_CC_PLL0_OUT_EVEN,
  31. P_CAM_CC_PLL0_OUT_MAIN,
  32. P_CAM_CC_PLL0_OUT_ODD,
  33. P_CAM_CC_PLL1_OUT_EVEN,
  34. P_CAM_CC_PLL1_OUT_MAIN,
  35. P_CAM_CC_PLL2_OUT_MAIN,
  36. P_CAM_CC_PLL3_OUT_EVEN,
  37. P_CAM_CC_PLL4_OUT_EVEN,
  38. P_CAM_CC_PLL4_OUT_MAIN,
  39. P_CAM_CC_PLL5_OUT_EVEN,
  40. P_CAM_CC_PLL5_OUT_MAIN,
  41. P_CAM_CC_PLL6_OUT_EVEN,
  42. P_CAM_CC_PLL6_OUT_MAIN,
  43. P_SLEEP_CLK,
  44. };
  45. static const struct pll_vco lucid_ole_vco[] = {
  46. { 249600000, 2300000000, 0 },
  47. };
  48. static const struct pll_vco rivian_ole_vco[] = {
  49. { 777000000, 1285000000, 0 },
  50. };
  51. /* 1200.0 MHz Configuration */
  52. static const struct alpha_pll_config cam_cc_pll0_config = {
  53. .l = 0x3e,
  54. .alpha = 0x8000,
  55. .config_ctl_val = 0x20485699,
  56. .config_ctl_hi_val = 0x00182261,
  57. .config_ctl_hi1_val = 0x82aa299c,
  58. .test_ctl_val = 0x00000000,
  59. .test_ctl_hi_val = 0x00000003,
  60. .test_ctl_hi1_val = 0x00009000,
  61. .test_ctl_hi2_val = 0x00000034,
  62. .user_ctl_val = 0x00008400,
  63. .user_ctl_hi_val = 0x00000005,
  64. };
  65. static struct clk_alpha_pll cam_cc_pll0 = {
  66. .offset = 0x0,
  67. .config = &cam_cc_pll0_config,
  68. .vco_table = lucid_ole_vco,
  69. .num_vco = ARRAY_SIZE(lucid_ole_vco),
  70. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  71. .clkr = {
  72. .hw.init = &(const struct clk_init_data) {
  73. .name = "cam_cc_pll0",
  74. .parent_data = &(const struct clk_parent_data) {
  75. .index = DT_BI_TCXO,
  76. },
  77. .num_parents = 1,
  78. .ops = &clk_alpha_pll_lucid_evo_ops,
  79. },
  80. },
  81. };
  82. static const struct clk_div_table post_div_table_cam_cc_pll0_out_even[] = {
  83. { 0x1, 2 },
  84. { }
  85. };
  86. static struct clk_alpha_pll_postdiv cam_cc_pll0_out_even = {
  87. .offset = 0x0,
  88. .post_div_shift = 10,
  89. .post_div_table = post_div_table_cam_cc_pll0_out_even,
  90. .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_even),
  91. .width = 4,
  92. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  93. .clkr.hw.init = &(const struct clk_init_data) {
  94. .name = "cam_cc_pll0_out_even",
  95. .parent_hws = (const struct clk_hw*[]) {
  96. &cam_cc_pll0.clkr.hw,
  97. },
  98. .num_parents = 1,
  99. .flags = CLK_SET_RATE_PARENT,
  100. .ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
  101. },
  102. };
  103. static const struct clk_div_table post_div_table_cam_cc_pll0_out_odd[] = {
  104. { 0x2, 3 },
  105. { }
  106. };
  107. static struct clk_alpha_pll_postdiv cam_cc_pll0_out_odd = {
  108. .offset = 0x0,
  109. .post_div_shift = 14,
  110. .post_div_table = post_div_table_cam_cc_pll0_out_odd,
  111. .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll0_out_odd),
  112. .width = 4,
  113. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  114. .clkr.hw.init = &(const struct clk_init_data) {
  115. .name = "cam_cc_pll0_out_odd",
  116. .parent_hws = (const struct clk_hw*[]) {
  117. &cam_cc_pll0.clkr.hw,
  118. },
  119. .num_parents = 1,
  120. .flags = CLK_SET_RATE_PARENT,
  121. .ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
  122. },
  123. };
  124. /* 600.0 MHz Configuration */
  125. static const struct alpha_pll_config cam_cc_pll1_config = {
  126. .l = 0x1f,
  127. .alpha = 0x4000,
  128. .config_ctl_val = 0x20485699,
  129. .config_ctl_hi_val = 0x00182261,
  130. .config_ctl_hi1_val = 0x82aa299c,
  131. .test_ctl_val = 0x00000000,
  132. .test_ctl_hi_val = 0x00000003,
  133. .test_ctl_hi1_val = 0x00009000,
  134. .test_ctl_hi2_val = 0x00000034,
  135. .user_ctl_val = 0x00000400,
  136. .user_ctl_hi_val = 0x00000005,
  137. };
  138. static struct clk_alpha_pll cam_cc_pll1 = {
  139. .offset = 0x1000,
  140. .config = &cam_cc_pll1_config,
  141. .vco_table = lucid_ole_vco,
  142. .num_vco = ARRAY_SIZE(lucid_ole_vco),
  143. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  144. .clkr = {
  145. .hw.init = &(const struct clk_init_data) {
  146. .name = "cam_cc_pll1",
  147. .parent_data = &(const struct clk_parent_data) {
  148. .index = DT_BI_TCXO,
  149. },
  150. .num_parents = 1,
  151. .ops = &clk_alpha_pll_lucid_evo_ops,
  152. },
  153. },
  154. };
  155. static const struct clk_div_table post_div_table_cam_cc_pll1_out_even[] = {
  156. { 0x1, 2 },
  157. { }
  158. };
  159. static struct clk_alpha_pll_postdiv cam_cc_pll1_out_even = {
  160. .offset = 0x1000,
  161. .post_div_shift = 10,
  162. .post_div_table = post_div_table_cam_cc_pll1_out_even,
  163. .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll1_out_even),
  164. .width = 4,
  165. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  166. .clkr.hw.init = &(const struct clk_init_data) {
  167. .name = "cam_cc_pll1_out_even",
  168. .parent_hws = (const struct clk_hw*[]) {
  169. &cam_cc_pll1.clkr.hw,
  170. },
  171. .num_parents = 1,
  172. .flags = CLK_SET_RATE_PARENT,
  173. .ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
  174. },
  175. };
  176. /* 960.0 MHz Configuration */
  177. static const struct alpha_pll_config cam_cc_pll2_config = {
  178. .l = 0x32,
  179. .alpha = 0x0,
  180. .config_ctl_val = 0x10000030,
  181. .config_ctl_hi_val = 0x80890263,
  182. .config_ctl_hi1_val = 0x00000217,
  183. .user_ctl_val = 0x00000001,
  184. .user_ctl_hi_val = 0x00100000,
  185. };
  186. static struct clk_alpha_pll cam_cc_pll2 = {
  187. .offset = 0x2000,
  188. .config = &cam_cc_pll2_config,
  189. .vco_table = rivian_ole_vco,
  190. .num_vco = ARRAY_SIZE(rivian_ole_vco),
  191. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_RIVIAN_EVO],
  192. .clkr = {
  193. .hw.init = &(const struct clk_init_data) {
  194. .name = "cam_cc_pll2",
  195. .parent_data = &(const struct clk_parent_data) {
  196. .index = DT_BI_TCXO,
  197. },
  198. .num_parents = 1,
  199. .ops = &clk_alpha_pll_rivian_evo_ops,
  200. },
  201. },
  202. };
  203. /* 600.0 MHz Configuration */
  204. static const struct alpha_pll_config cam_cc_pll3_config = {
  205. .l = 0x1f,
  206. .alpha = 0x4000,
  207. .config_ctl_val = 0x20485699,
  208. .config_ctl_hi_val = 0x00182261,
  209. .config_ctl_hi1_val = 0x82aa299c,
  210. .test_ctl_val = 0x00000000,
  211. .test_ctl_hi_val = 0x00000003,
  212. .test_ctl_hi1_val = 0x00009000,
  213. .test_ctl_hi2_val = 0x00000034,
  214. .user_ctl_val = 0x00000400,
  215. .user_ctl_hi_val = 0x00000005,
  216. };
  217. static struct clk_alpha_pll cam_cc_pll3 = {
  218. .offset = 0x3000,
  219. .config = &cam_cc_pll3_config,
  220. .vco_table = lucid_ole_vco,
  221. .num_vco = ARRAY_SIZE(lucid_ole_vco),
  222. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  223. .clkr = {
  224. .hw.init = &(const struct clk_init_data) {
  225. .name = "cam_cc_pll3",
  226. .parent_data = &(const struct clk_parent_data) {
  227. .index = DT_BI_TCXO,
  228. },
  229. .num_parents = 1,
  230. .ops = &clk_alpha_pll_lucid_evo_ops,
  231. },
  232. },
  233. };
  234. static const struct clk_div_table post_div_table_cam_cc_pll3_out_even[] = {
  235. { 0x1, 2 },
  236. { }
  237. };
  238. static struct clk_alpha_pll_postdiv cam_cc_pll3_out_even = {
  239. .offset = 0x3000,
  240. .post_div_shift = 10,
  241. .post_div_table = post_div_table_cam_cc_pll3_out_even,
  242. .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll3_out_even),
  243. .width = 4,
  244. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  245. .clkr.hw.init = &(const struct clk_init_data) {
  246. .name = "cam_cc_pll3_out_even",
  247. .parent_hws = (const struct clk_hw*[]) {
  248. &cam_cc_pll3.clkr.hw,
  249. },
  250. .num_parents = 1,
  251. .flags = CLK_SET_RATE_PARENT,
  252. .ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
  253. },
  254. };
  255. /* 700.0 MHz Configuration */
  256. static const struct alpha_pll_config cam_cc_pll4_config = {
  257. .l = 0x24,
  258. .alpha = 0x7555,
  259. .config_ctl_val = 0x20485699,
  260. .config_ctl_hi_val = 0x00182261,
  261. .config_ctl_hi1_val = 0x82aa299c,
  262. .test_ctl_val = 0x00000000,
  263. .test_ctl_hi_val = 0x00000003,
  264. .test_ctl_hi1_val = 0x00009000,
  265. .test_ctl_hi2_val = 0x00000034,
  266. .user_ctl_val = 0x00000400,
  267. .user_ctl_hi_val = 0x00000005,
  268. };
  269. static struct clk_alpha_pll cam_cc_pll4 = {
  270. .offset = 0x4000,
  271. .config = &cam_cc_pll4_config,
  272. .vco_table = lucid_ole_vco,
  273. .num_vco = ARRAY_SIZE(lucid_ole_vco),
  274. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  275. .clkr = {
  276. .hw.init = &(const struct clk_init_data) {
  277. .name = "cam_cc_pll4",
  278. .parent_data = &(const struct clk_parent_data) {
  279. .index = DT_BI_TCXO,
  280. },
  281. .num_parents = 1,
  282. .ops = &clk_alpha_pll_lucid_evo_ops,
  283. },
  284. },
  285. };
  286. static const struct clk_div_table post_div_table_cam_cc_pll4_out_even[] = {
  287. { 0x1, 2 },
  288. { }
  289. };
  290. static struct clk_alpha_pll_postdiv cam_cc_pll4_out_even = {
  291. .offset = 0x4000,
  292. .post_div_shift = 10,
  293. .post_div_table = post_div_table_cam_cc_pll4_out_even,
  294. .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll4_out_even),
  295. .width = 4,
  296. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  297. .clkr.hw.init = &(const struct clk_init_data) {
  298. .name = "cam_cc_pll4_out_even",
  299. .parent_hws = (const struct clk_hw*[]) {
  300. &cam_cc_pll4.clkr.hw,
  301. },
  302. .num_parents = 1,
  303. .flags = CLK_SET_RATE_PARENT,
  304. .ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
  305. },
  306. };
  307. /* 700.0 MHz Configuration */
  308. static const struct alpha_pll_config cam_cc_pll5_config = {
  309. .l = 0x24,
  310. .alpha = 0x7555,
  311. .config_ctl_val = 0x20485699,
  312. .config_ctl_hi_val = 0x00182261,
  313. .config_ctl_hi1_val = 0x82aa299c,
  314. .test_ctl_val = 0x00000000,
  315. .test_ctl_hi_val = 0x00000003,
  316. .test_ctl_hi1_val = 0x00009000,
  317. .test_ctl_hi2_val = 0x00000034,
  318. .user_ctl_val = 0x00000400,
  319. .user_ctl_hi_val = 0x00000005,
  320. };
  321. static struct clk_alpha_pll cam_cc_pll5 = {
  322. .offset = 0x5000,
  323. .config = &cam_cc_pll5_config,
  324. .vco_table = lucid_ole_vco,
  325. .num_vco = ARRAY_SIZE(lucid_ole_vco),
  326. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  327. .clkr = {
  328. .hw.init = &(const struct clk_init_data) {
  329. .name = "cam_cc_pll5",
  330. .parent_data = &(const struct clk_parent_data) {
  331. .index = DT_BI_TCXO,
  332. },
  333. .num_parents = 1,
  334. .ops = &clk_alpha_pll_lucid_evo_ops,
  335. },
  336. },
  337. };
  338. static const struct clk_div_table post_div_table_cam_cc_pll5_out_even[] = {
  339. { 0x1, 2 },
  340. { }
  341. };
  342. static struct clk_alpha_pll_postdiv cam_cc_pll5_out_even = {
  343. .offset = 0x5000,
  344. .post_div_shift = 10,
  345. .post_div_table = post_div_table_cam_cc_pll5_out_even,
  346. .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll5_out_even),
  347. .width = 4,
  348. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  349. .clkr.hw.init = &(const struct clk_init_data) {
  350. .name = "cam_cc_pll5_out_even",
  351. .parent_hws = (const struct clk_hw*[]) {
  352. &cam_cc_pll5.clkr.hw,
  353. },
  354. .num_parents = 1,
  355. .flags = CLK_SET_RATE_PARENT,
  356. .ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
  357. },
  358. };
  359. /* 700.0 MHz Configuration */
  360. static const struct alpha_pll_config cam_cc_pll6_config = {
  361. .l = 0x24,
  362. .alpha = 0x7555,
  363. .config_ctl_val = 0x20485699,
  364. .config_ctl_hi_val = 0x00182261,
  365. .config_ctl_hi1_val = 0x82aa299c,
  366. .test_ctl_val = 0x00000000,
  367. .test_ctl_hi_val = 0x00000003,
  368. .test_ctl_hi1_val = 0x00009000,
  369. .test_ctl_hi2_val = 0x00000034,
  370. .user_ctl_val = 0x00000400,
  371. .user_ctl_hi_val = 0x00000005,
  372. };
  373. static struct clk_alpha_pll cam_cc_pll6 = {
  374. .offset = 0x6000,
  375. .config = &cam_cc_pll6_config,
  376. .vco_table = lucid_ole_vco,
  377. .num_vco = ARRAY_SIZE(lucid_ole_vco),
  378. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  379. .clkr = {
  380. .hw.init = &(const struct clk_init_data) {
  381. .name = "cam_cc_pll6",
  382. .parent_data = &(const struct clk_parent_data) {
  383. .index = DT_BI_TCXO,
  384. },
  385. .num_parents = 1,
  386. .ops = &clk_alpha_pll_lucid_evo_ops,
  387. },
  388. },
  389. };
  390. static const struct clk_div_table post_div_table_cam_cc_pll6_out_even[] = {
  391. { 0x1, 2 },
  392. { }
  393. };
  394. static struct clk_alpha_pll_postdiv cam_cc_pll6_out_even = {
  395. .offset = 0x6000,
  396. .post_div_shift = 10,
  397. .post_div_table = post_div_table_cam_cc_pll6_out_even,
  398. .num_post_div = ARRAY_SIZE(post_div_table_cam_cc_pll6_out_even),
  399. .width = 4,
  400. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  401. .clkr.hw.init = &(const struct clk_init_data) {
  402. .name = "cam_cc_pll6_out_even",
  403. .parent_hws = (const struct clk_hw*[]) {
  404. &cam_cc_pll6.clkr.hw,
  405. },
  406. .num_parents = 1,
  407. .flags = CLK_SET_RATE_PARENT,
  408. .ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
  409. },
  410. };
  411. static const struct parent_map cam_cc_parent_map_0[] = {
  412. { P_BI_TCXO, 0 },
  413. { P_CAM_CC_PLL0_OUT_MAIN, 1 },
  414. { P_CAM_CC_PLL0_OUT_ODD, 5 },
  415. { P_CAM_CC_PLL0_OUT_EVEN, 6 },
  416. };
  417. static const struct clk_parent_data cam_cc_parent_data_0[] = {
  418. { .index = DT_BI_TCXO },
  419. { .hw = &cam_cc_pll0.clkr.hw },
  420. { .hw = &cam_cc_pll0_out_odd.clkr.hw },
  421. { .hw = &cam_cc_pll0_out_even.clkr.hw },
  422. };
  423. static const struct parent_map cam_cc_parent_map_1[] = {
  424. { P_BI_TCXO, 0 },
  425. { P_CAM_CC_PLL2_OUT_MAIN, 4 },
  426. };
  427. static const struct clk_parent_data cam_cc_parent_data_1[] = {
  428. { .index = DT_BI_TCXO },
  429. { .hw = &cam_cc_pll2.clkr.hw },
  430. };
  431. static const struct parent_map cam_cc_parent_map_2[] = {
  432. { P_BI_TCXO, 0 },
  433. { P_CAM_CC_PLL0_OUT_MAIN, 1 },
  434. { P_CAM_CC_PLL1_OUT_MAIN, 2 },
  435. { P_CAM_CC_PLL1_OUT_EVEN, 3 },
  436. { P_CAM_CC_PLL0_OUT_ODD, 5 },
  437. { P_CAM_CC_PLL0_OUT_EVEN, 6 },
  438. };
  439. static const struct clk_parent_data cam_cc_parent_data_2[] = {
  440. { .index = DT_BI_TCXO },
  441. { .hw = &cam_cc_pll0.clkr.hw },
  442. { .hw = &cam_cc_pll1.clkr.hw },
  443. { .hw = &cam_cc_pll1_out_even.clkr.hw },
  444. { .hw = &cam_cc_pll0_out_odd.clkr.hw },
  445. { .hw = &cam_cc_pll0_out_even.clkr.hw },
  446. };
  447. static const struct parent_map cam_cc_parent_map_3[] = {
  448. { P_BI_TCXO, 0 },
  449. { P_CAM_CC_PLL0_OUT_ODD, 5 },
  450. { P_CAM_CC_PLL0_OUT_EVEN, 6 },
  451. };
  452. static const struct clk_parent_data cam_cc_parent_data_3[] = {
  453. { .index = DT_BI_TCXO },
  454. { .hw = &cam_cc_pll0_out_odd.clkr.hw },
  455. { .hw = &cam_cc_pll0_out_even.clkr.hw },
  456. };
  457. static const struct parent_map cam_cc_parent_map_4[] = {
  458. { P_BI_TCXO, 0 },
  459. { P_CAM_CC_PLL0_OUT_MAIN, 1 },
  460. { P_CAM_CC_PLL0_OUT_EVEN, 6 },
  461. };
  462. static const struct clk_parent_data cam_cc_parent_data_4[] = {
  463. { .index = DT_BI_TCXO },
  464. { .hw = &cam_cc_pll0.clkr.hw },
  465. { .hw = &cam_cc_pll0_out_even.clkr.hw },
  466. };
  467. static const struct parent_map cam_cc_parent_map_5[] = {
  468. { P_BI_TCXO, 0 },
  469. { P_CAM_CC_PLL0_OUT_MAIN, 1 },
  470. { P_CAM_CC_PLL3_OUT_EVEN, 5 },
  471. { P_CAM_CC_PLL0_OUT_EVEN, 6 },
  472. };
  473. static const struct clk_parent_data cam_cc_parent_data_5[] = {
  474. { .index = DT_BI_TCXO },
  475. { .hw = &cam_cc_pll0.clkr.hw },
  476. { .hw = &cam_cc_pll3_out_even.clkr.hw },
  477. { .hw = &cam_cc_pll0_out_even.clkr.hw },
  478. };
  479. static const struct parent_map cam_cc_parent_map_6[] = {
  480. { P_SLEEP_CLK, 0 },
  481. };
  482. static const struct clk_parent_data cam_cc_parent_data_6_ao[] = {
  483. { .index = DT_SLEEP_CLK },
  484. };
  485. static const struct parent_map cam_cc_parent_map_7[] = {
  486. { P_BI_TCXO, 0 },
  487. { P_CAM_CC_PLL0_OUT_MAIN, 1 },
  488. { P_CAM_CC_PLL4_OUT_EVEN, 2 },
  489. { P_CAM_CC_PLL4_OUT_MAIN, 3 },
  490. { P_CAM_CC_PLL0_OUT_ODD, 5 },
  491. { P_CAM_CC_PLL0_OUT_EVEN, 6 },
  492. };
  493. static const struct clk_parent_data cam_cc_parent_data_7[] = {
  494. { .index = DT_BI_TCXO },
  495. { .hw = &cam_cc_pll0.clkr.hw },
  496. { .hw = &cam_cc_pll4_out_even.clkr.hw },
  497. { .hw = &cam_cc_pll4.clkr.hw },
  498. { .hw = &cam_cc_pll0_out_odd.clkr.hw },
  499. { .hw = &cam_cc_pll0_out_even.clkr.hw },
  500. };
  501. static const struct parent_map cam_cc_parent_map_8[] = {
  502. { P_BI_TCXO, 0 },
  503. { P_CAM_CC_PLL0_OUT_MAIN, 1 },
  504. { P_CAM_CC_PLL5_OUT_EVEN, 2 },
  505. { P_CAM_CC_PLL5_OUT_MAIN, 3 },
  506. { P_CAM_CC_PLL0_OUT_ODD, 5 },
  507. { P_CAM_CC_PLL0_OUT_EVEN, 6 },
  508. };
  509. static const struct clk_parent_data cam_cc_parent_data_8[] = {
  510. { .index = DT_BI_TCXO },
  511. { .hw = &cam_cc_pll0.clkr.hw },
  512. { .hw = &cam_cc_pll5_out_even.clkr.hw },
  513. { .hw = &cam_cc_pll5.clkr.hw },
  514. { .hw = &cam_cc_pll0_out_odd.clkr.hw },
  515. { .hw = &cam_cc_pll0_out_even.clkr.hw },
  516. };
  517. static const struct parent_map cam_cc_parent_map_9[] = {
  518. { P_BI_TCXO, 0 },
  519. { P_CAM_CC_PLL0_OUT_MAIN, 1 },
  520. { P_CAM_CC_PLL6_OUT_EVEN, 2 },
  521. { P_CAM_CC_PLL6_OUT_MAIN, 3 },
  522. { P_CAM_CC_PLL0_OUT_ODD, 5 },
  523. { P_CAM_CC_PLL0_OUT_EVEN, 6 },
  524. };
  525. static const struct clk_parent_data cam_cc_parent_data_9[] = {
  526. { .index = DT_BI_TCXO },
  527. { .hw = &cam_cc_pll0.clkr.hw },
  528. { .hw = &cam_cc_pll6_out_even.clkr.hw },
  529. { .hw = &cam_cc_pll6.clkr.hw },
  530. { .hw = &cam_cc_pll0_out_odd.clkr.hw },
  531. { .hw = &cam_cc_pll0_out_even.clkr.hw },
  532. };
  533. static const struct parent_map cam_cc_parent_map_10[] = {
  534. { P_BI_TCXO, 0 },
  535. };
  536. static const struct clk_parent_data cam_cc_parent_data_10[] = {
  537. { .index = DT_BI_TCXO },
  538. };
  539. static const struct freq_tbl ftbl_cam_cc_bps_clk_src[] = {
  540. F(300000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
  541. F(410000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
  542. F(460000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
  543. F(600000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
  544. F(700000000, P_CAM_CC_PLL1_OUT_EVEN, 1, 0, 0),
  545. { }
  546. };
  547. static struct clk_rcg2 cam_cc_bps_clk_src = {
  548. .cmd_rcgr = 0x1a004,
  549. .mnd_width = 0,
  550. .hid_width = 5,
  551. .parent_map = cam_cc_parent_map_2,
  552. .freq_tbl = ftbl_cam_cc_bps_clk_src,
  553. .clkr.hw.init = &(const struct clk_init_data) {
  554. .name = "cam_cc_bps_clk_src",
  555. .parent_data = cam_cc_parent_data_2,
  556. .num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
  557. .flags = CLK_SET_RATE_PARENT,
  558. .ops = &clk_rcg2_shared_ops,
  559. },
  560. };
  561. static const struct freq_tbl ftbl_cam_cc_camnoc_axi_clk_src[] = {
  562. F(150000000, P_CAM_CC_PLL0_OUT_EVEN, 4, 0, 0),
  563. F(240000000, P_CAM_CC_PLL0_OUT_EVEN, 2.5, 0, 0),
  564. F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
  565. F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
  566. { }
  567. };
  568. static struct clk_rcg2 cam_cc_camnoc_axi_clk_src = {
  569. .cmd_rcgr = 0x2401c,
  570. .mnd_width = 0,
  571. .hid_width = 5,
  572. .parent_map = cam_cc_parent_map_0,
  573. .freq_tbl = ftbl_cam_cc_camnoc_axi_clk_src,
  574. .clkr.hw.init = &(const struct clk_init_data) {
  575. .name = "cam_cc_camnoc_axi_clk_src",
  576. .parent_data = cam_cc_parent_data_0,
  577. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  578. .flags = CLK_SET_RATE_PARENT,
  579. .ops = &clk_rcg2_shared_ops,
  580. },
  581. };
  582. static const struct freq_tbl ftbl_cam_cc_cci_0_clk_src[] = {
  583. F(37500000, P_CAM_CC_PLL0_OUT_EVEN, 16, 0, 0),
  584. F(50000000, P_CAM_CC_PLL0_OUT_EVEN, 12, 0, 0),
  585. F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
  586. { }
  587. };
  588. static struct clk_rcg2 cam_cc_cci_0_clk_src = {
  589. .cmd_rcgr = 0x21004,
  590. .mnd_width = 8,
  591. .hid_width = 5,
  592. .parent_map = cam_cc_parent_map_3,
  593. .freq_tbl = ftbl_cam_cc_cci_0_clk_src,
  594. .clkr.hw.init = &(const struct clk_init_data) {
  595. .name = "cam_cc_cci_0_clk_src",
  596. .parent_data = cam_cc_parent_data_3,
  597. .num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
  598. .flags = CLK_SET_RATE_PARENT,
  599. .ops = &clk_rcg2_shared_ops,
  600. },
  601. };
  602. static struct clk_rcg2 cam_cc_cci_1_clk_src = {
  603. .cmd_rcgr = 0x22004,
  604. .mnd_width = 8,
  605. .hid_width = 5,
  606. .parent_map = cam_cc_parent_map_3,
  607. .freq_tbl = ftbl_cam_cc_cci_0_clk_src,
  608. .clkr.hw.init = &(const struct clk_init_data) {
  609. .name = "cam_cc_cci_1_clk_src",
  610. .parent_data = cam_cc_parent_data_3,
  611. .num_parents = ARRAY_SIZE(cam_cc_parent_data_3),
  612. .flags = CLK_SET_RATE_PARENT,
  613. .ops = &clk_rcg2_shared_ops,
  614. },
  615. };
  616. static const struct freq_tbl ftbl_cam_cc_cphy_rx_clk_src[] = {
  617. F(200000000, P_CAM_CC_PLL0_OUT_EVEN, 3, 0, 0),
  618. F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
  619. F(400000000, P_CAM_CC_PLL0_OUT_EVEN, 1.5, 0, 0),
  620. { }
  621. };
  622. static struct clk_rcg2 cam_cc_cphy_rx_clk_src = {
  623. .cmd_rcgr = 0x1c05c,
  624. .mnd_width = 0,
  625. .hid_width = 5,
  626. .parent_map = cam_cc_parent_map_0,
  627. .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
  628. .clkr.hw.init = &(const struct clk_init_data) {
  629. .name = "cam_cc_cphy_rx_clk_src",
  630. .parent_data = cam_cc_parent_data_0,
  631. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  632. .flags = CLK_SET_RATE_PARENT,
  633. .ops = &clk_rcg2_shared_ops,
  634. },
  635. };
  636. static const struct freq_tbl ftbl_cam_cc_cre_clk_src[] = {
  637. F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
  638. F(400000000, P_CAM_CC_PLL0_OUT_ODD, 1, 0, 0),
  639. F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
  640. { }
  641. };
  642. static struct clk_rcg2 cam_cc_cre_clk_src = {
  643. .cmd_rcgr = 0x27004,
  644. .mnd_width = 0,
  645. .hid_width = 5,
  646. .parent_map = cam_cc_parent_map_2,
  647. .freq_tbl = ftbl_cam_cc_cre_clk_src,
  648. .clkr.hw.init = &(const struct clk_init_data) {
  649. .name = "cam_cc_cre_clk_src",
  650. .parent_data = cam_cc_parent_data_2,
  651. .num_parents = ARRAY_SIZE(cam_cc_parent_data_2),
  652. .flags = CLK_SET_RATE_PARENT,
  653. .ops = &clk_rcg2_shared_ops,
  654. },
  655. };
  656. static const struct freq_tbl ftbl_cam_cc_csi0phytimer_clk_src[] = {
  657. F(300000000, P_CAM_CC_PLL0_OUT_EVEN, 2, 0, 0),
  658. { }
  659. };
  660. static struct clk_rcg2 cam_cc_csi0phytimer_clk_src = {
  661. .cmd_rcgr = 0x19004,
  662. .mnd_width = 0,
  663. .hid_width = 5,
  664. .parent_map = cam_cc_parent_map_0,
  665. .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
  666. .clkr.hw.init = &(const struct clk_init_data) {
  667. .name = "cam_cc_csi0phytimer_clk_src",
  668. .parent_data = cam_cc_parent_data_0,
  669. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  670. .flags = CLK_SET_RATE_PARENT,
  671. .ops = &clk_rcg2_shared_ops,
  672. },
  673. };
  674. static struct clk_rcg2 cam_cc_csi1phytimer_clk_src = {
  675. .cmd_rcgr = 0x19028,
  676. .mnd_width = 0,
  677. .hid_width = 5,
  678. .parent_map = cam_cc_parent_map_0,
  679. .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
  680. .clkr.hw.init = &(const struct clk_init_data) {
  681. .name = "cam_cc_csi1phytimer_clk_src",
  682. .parent_data = cam_cc_parent_data_0,
  683. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  684. .flags = CLK_SET_RATE_PARENT,
  685. .ops = &clk_rcg2_shared_ops,
  686. },
  687. };
  688. static struct clk_rcg2 cam_cc_csi2phytimer_clk_src = {
  689. .cmd_rcgr = 0x1904c,
  690. .mnd_width = 0,
  691. .hid_width = 5,
  692. .parent_map = cam_cc_parent_map_0,
  693. .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
  694. .clkr.hw.init = &(const struct clk_init_data) {
  695. .name = "cam_cc_csi2phytimer_clk_src",
  696. .parent_data = cam_cc_parent_data_0,
  697. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  698. .flags = CLK_SET_RATE_PARENT,
  699. .ops = &clk_rcg2_shared_ops,
  700. },
  701. };
  702. static struct clk_rcg2 cam_cc_csi3phytimer_clk_src = {
  703. .cmd_rcgr = 0x19070,
  704. .mnd_width = 0,
  705. .hid_width = 5,
  706. .parent_map = cam_cc_parent_map_0,
  707. .freq_tbl = ftbl_cam_cc_csi0phytimer_clk_src,
  708. .clkr.hw.init = &(const struct clk_init_data) {
  709. .name = "cam_cc_csi3phytimer_clk_src",
  710. .parent_data = cam_cc_parent_data_0,
  711. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  712. .flags = CLK_SET_RATE_PARENT,
  713. .ops = &clk_rcg2_shared_ops,
  714. },
  715. };
  716. static const struct freq_tbl ftbl_cam_cc_fast_ahb_clk_src[] = {
  717. F(100000000, P_CAM_CC_PLL0_OUT_EVEN, 6, 0, 0),
  718. F(150000000, P_CAM_CC_PLL0_OUT_EVEN, 4, 0, 0),
  719. F(200000000, P_CAM_CC_PLL0_OUT_MAIN, 6, 0, 0),
  720. F(240000000, P_CAM_CC_PLL0_OUT_MAIN, 5, 0, 0),
  721. { }
  722. };
  723. static struct clk_rcg2 cam_cc_fast_ahb_clk_src = {
  724. .cmd_rcgr = 0x1a030,
  725. .mnd_width = 0,
  726. .hid_width = 5,
  727. .parent_map = cam_cc_parent_map_0,
  728. .freq_tbl = ftbl_cam_cc_fast_ahb_clk_src,
  729. .clkr.hw.init = &(const struct clk_init_data) {
  730. .name = "cam_cc_fast_ahb_clk_src",
  731. .parent_data = cam_cc_parent_data_0,
  732. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  733. .flags = CLK_SET_RATE_PARENT,
  734. .ops = &clk_rcg2_shared_ops,
  735. },
  736. };
  737. static const struct freq_tbl ftbl_cam_cc_icp_clk_src[] = {
  738. F(400000000, P_CAM_CC_PLL0_OUT_MAIN, 3, 0, 0),
  739. F(480000000, P_CAM_CC_PLL0_OUT_MAIN, 2.5, 0, 0),
  740. F(600000000, P_CAM_CC_PLL0_OUT_MAIN, 2, 0, 0),
  741. { }
  742. };
  743. static struct clk_rcg2 cam_cc_icp_clk_src = {
  744. .cmd_rcgr = 0x20014,
  745. .mnd_width = 0,
  746. .hid_width = 5,
  747. .parent_map = cam_cc_parent_map_4,
  748. .freq_tbl = ftbl_cam_cc_icp_clk_src,
  749. .clkr.hw.init = &(const struct clk_init_data) {
  750. .name = "cam_cc_icp_clk_src",
  751. .parent_data = cam_cc_parent_data_4,
  752. .num_parents = ARRAY_SIZE(cam_cc_parent_data_4),
  753. .flags = CLK_SET_RATE_PARENT,
  754. .ops = &clk_rcg2_shared_ops,
  755. },
  756. };
  757. static const struct freq_tbl ftbl_cam_cc_mclk0_clk_src[] = {
  758. F(19200000, P_CAM_CC_PLL2_OUT_MAIN, 1, 1, 50),
  759. F(24000000, P_CAM_CC_PLL2_OUT_MAIN, 10, 1, 4),
  760. F(64000000, P_CAM_CC_PLL2_OUT_MAIN, 15, 0, 0),
  761. { }
  762. };
  763. static struct clk_rcg2 cam_cc_mclk0_clk_src = {
  764. .cmd_rcgr = 0x18004,
  765. .mnd_width = 8,
  766. .hid_width = 5,
  767. .parent_map = cam_cc_parent_map_1,
  768. .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
  769. .clkr.hw.init = &(const struct clk_init_data) {
  770. .name = "cam_cc_mclk0_clk_src",
  771. .parent_data = cam_cc_parent_data_1,
  772. .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
  773. .flags = CLK_SET_RATE_PARENT,
  774. .ops = &clk_rcg2_shared_ops,
  775. },
  776. };
  777. static struct clk_rcg2 cam_cc_mclk1_clk_src = {
  778. .cmd_rcgr = 0x18024,
  779. .mnd_width = 8,
  780. .hid_width = 5,
  781. .parent_map = cam_cc_parent_map_1,
  782. .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
  783. .clkr.hw.init = &(const struct clk_init_data) {
  784. .name = "cam_cc_mclk1_clk_src",
  785. .parent_data = cam_cc_parent_data_1,
  786. .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
  787. .flags = CLK_SET_RATE_PARENT,
  788. .ops = &clk_rcg2_shared_ops,
  789. },
  790. };
  791. static struct clk_rcg2 cam_cc_mclk2_clk_src = {
  792. .cmd_rcgr = 0x18044,
  793. .mnd_width = 8,
  794. .hid_width = 5,
  795. .parent_map = cam_cc_parent_map_1,
  796. .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
  797. .clkr.hw.init = &(const struct clk_init_data) {
  798. .name = "cam_cc_mclk2_clk_src",
  799. .parent_data = cam_cc_parent_data_1,
  800. .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
  801. .flags = CLK_SET_RATE_PARENT,
  802. .ops = &clk_rcg2_shared_ops,
  803. },
  804. };
  805. static struct clk_rcg2 cam_cc_mclk3_clk_src = {
  806. .cmd_rcgr = 0x18064,
  807. .mnd_width = 8,
  808. .hid_width = 5,
  809. .parent_map = cam_cc_parent_map_1,
  810. .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
  811. .clkr.hw.init = &(const struct clk_init_data) {
  812. .name = "cam_cc_mclk3_clk_src",
  813. .parent_data = cam_cc_parent_data_1,
  814. .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
  815. .flags = CLK_SET_RATE_PARENT,
  816. .ops = &clk_rcg2_shared_ops,
  817. },
  818. };
  819. static struct clk_rcg2 cam_cc_mclk4_clk_src = {
  820. .cmd_rcgr = 0x18084,
  821. .mnd_width = 8,
  822. .hid_width = 5,
  823. .parent_map = cam_cc_parent_map_1,
  824. .freq_tbl = ftbl_cam_cc_mclk0_clk_src,
  825. .clkr.hw.init = &(const struct clk_init_data) {
  826. .name = "cam_cc_mclk4_clk_src",
  827. .parent_data = cam_cc_parent_data_1,
  828. .num_parents = ARRAY_SIZE(cam_cc_parent_data_1),
  829. .flags = CLK_SET_RATE_PARENT,
  830. .ops = &clk_rcg2_shared_ops,
  831. },
  832. };
  833. static const struct freq_tbl ftbl_cam_cc_ope_0_clk_src[] = {
  834. F(300000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
  835. F(410000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
  836. F(520000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
  837. F(645000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
  838. F(700000000, P_CAM_CC_PLL3_OUT_EVEN, 1, 0, 0),
  839. { }
  840. };
  841. static struct clk_rcg2 cam_cc_ope_0_clk_src = {
  842. .cmd_rcgr = 0x1b004,
  843. .mnd_width = 0,
  844. .hid_width = 5,
  845. .parent_map = cam_cc_parent_map_5,
  846. .freq_tbl = ftbl_cam_cc_ope_0_clk_src,
  847. .clkr.hw.init = &(const struct clk_init_data) {
  848. .name = "cam_cc_ope_0_clk_src",
  849. .parent_data = cam_cc_parent_data_5,
  850. .num_parents = ARRAY_SIZE(cam_cc_parent_data_5),
  851. .flags = CLK_SET_RATE_PARENT,
  852. .ops = &clk_rcg2_shared_ops,
  853. },
  854. };
  855. static const struct freq_tbl ftbl_cam_cc_sleep_clk_src[] = {
  856. F(32000, P_SLEEP_CLK, 1, 0, 0),
  857. { }
  858. };
  859. static struct clk_rcg2 cam_cc_sleep_clk_src = {
  860. .cmd_rcgr = 0x25044,
  861. .mnd_width = 0,
  862. .hid_width = 5,
  863. .parent_map = cam_cc_parent_map_6,
  864. .freq_tbl = ftbl_cam_cc_sleep_clk_src,
  865. .clkr.hw.init = &(const struct clk_init_data) {
  866. .name = "cam_cc_sleep_clk_src",
  867. .parent_data = cam_cc_parent_data_6_ao,
  868. .num_parents = ARRAY_SIZE(cam_cc_parent_data_6_ao),
  869. .flags = CLK_SET_RATE_PARENT,
  870. .ops = &clk_rcg2_ops,
  871. },
  872. };
  873. static const struct freq_tbl ftbl_cam_cc_slow_ahb_clk_src[] = {
  874. F(80000000, P_CAM_CC_PLL0_OUT_EVEN, 7.5, 0, 0),
  875. { }
  876. };
  877. static struct clk_rcg2 cam_cc_slow_ahb_clk_src = {
  878. .cmd_rcgr = 0x1a04c,
  879. .mnd_width = 0,
  880. .hid_width = 5,
  881. .parent_map = cam_cc_parent_map_0,
  882. .freq_tbl = ftbl_cam_cc_slow_ahb_clk_src,
  883. .clkr.hw.init = &(const struct clk_init_data) {
  884. .name = "cam_cc_slow_ahb_clk_src",
  885. .parent_data = cam_cc_parent_data_0,
  886. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  887. .flags = CLK_SET_RATE_PARENT,
  888. .ops = &clk_rcg2_shared_ops,
  889. },
  890. };
  891. static const struct freq_tbl ftbl_cam_cc_tfe_0_clk_src[] = {
  892. F(350000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
  893. F(570000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
  894. F(600000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
  895. F(725000000, P_CAM_CC_PLL4_OUT_EVEN, 1, 0, 0),
  896. { }
  897. };
  898. static struct clk_rcg2 cam_cc_tfe_0_clk_src = {
  899. .cmd_rcgr = 0x1c004,
  900. .mnd_width = 0,
  901. .hid_width = 5,
  902. .parent_map = cam_cc_parent_map_7,
  903. .freq_tbl = ftbl_cam_cc_tfe_0_clk_src,
  904. .clkr.hw.init = &(const struct clk_init_data) {
  905. .name = "cam_cc_tfe_0_clk_src",
  906. .parent_data = cam_cc_parent_data_7,
  907. .num_parents = ARRAY_SIZE(cam_cc_parent_data_7),
  908. .flags = CLK_SET_RATE_PARENT,
  909. .ops = &clk_rcg2_shared_ops,
  910. },
  911. };
  912. static struct clk_rcg2 cam_cc_tfe_0_csid_clk_src = {
  913. .cmd_rcgr = 0x1c030,
  914. .mnd_width = 0,
  915. .hid_width = 5,
  916. .parent_map = cam_cc_parent_map_0,
  917. .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
  918. .clkr.hw.init = &(const struct clk_init_data) {
  919. .name = "cam_cc_tfe_0_csid_clk_src",
  920. .parent_data = cam_cc_parent_data_0,
  921. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  922. .flags = CLK_SET_RATE_PARENT,
  923. .ops = &clk_rcg2_shared_ops,
  924. },
  925. };
  926. static const struct freq_tbl ftbl_cam_cc_tfe_1_clk_src[] = {
  927. F(350000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
  928. F(570000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
  929. F(600000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
  930. F(725000000, P_CAM_CC_PLL5_OUT_EVEN, 1, 0, 0),
  931. { }
  932. };
  933. static struct clk_rcg2 cam_cc_tfe_1_clk_src = {
  934. .cmd_rcgr = 0x1d004,
  935. .mnd_width = 0,
  936. .hid_width = 5,
  937. .parent_map = cam_cc_parent_map_8,
  938. .freq_tbl = ftbl_cam_cc_tfe_1_clk_src,
  939. .clkr.hw.init = &(const struct clk_init_data) {
  940. .name = "cam_cc_tfe_1_clk_src",
  941. .parent_data = cam_cc_parent_data_8,
  942. .num_parents = ARRAY_SIZE(cam_cc_parent_data_8),
  943. .flags = CLK_SET_RATE_PARENT,
  944. .ops = &clk_rcg2_shared_ops,
  945. },
  946. };
  947. static struct clk_rcg2 cam_cc_tfe_1_csid_clk_src = {
  948. .cmd_rcgr = 0x1d030,
  949. .mnd_width = 0,
  950. .hid_width = 5,
  951. .parent_map = cam_cc_parent_map_0,
  952. .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
  953. .clkr.hw.init = &(const struct clk_init_data) {
  954. .name = "cam_cc_tfe_1_csid_clk_src",
  955. .parent_data = cam_cc_parent_data_0,
  956. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  957. .flags = CLK_SET_RATE_PARENT,
  958. .ops = &clk_rcg2_shared_ops,
  959. },
  960. };
  961. static const struct freq_tbl ftbl_cam_cc_tfe_2_clk_src[] = {
  962. F(350000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
  963. F(570000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
  964. F(600000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
  965. F(725000000, P_CAM_CC_PLL6_OUT_EVEN, 1, 0, 0),
  966. { }
  967. };
  968. static struct clk_rcg2 cam_cc_tfe_2_clk_src = {
  969. .cmd_rcgr = 0x1e004,
  970. .mnd_width = 0,
  971. .hid_width = 5,
  972. .parent_map = cam_cc_parent_map_9,
  973. .freq_tbl = ftbl_cam_cc_tfe_2_clk_src,
  974. .clkr.hw.init = &(const struct clk_init_data) {
  975. .name = "cam_cc_tfe_2_clk_src",
  976. .parent_data = cam_cc_parent_data_9,
  977. .num_parents = ARRAY_SIZE(cam_cc_parent_data_9),
  978. .flags = CLK_SET_RATE_PARENT,
  979. .ops = &clk_rcg2_shared_ops,
  980. },
  981. };
  982. static struct clk_rcg2 cam_cc_tfe_2_csid_clk_src = {
  983. .cmd_rcgr = 0x1e030,
  984. .mnd_width = 0,
  985. .hid_width = 5,
  986. .parent_map = cam_cc_parent_map_0,
  987. .freq_tbl = ftbl_cam_cc_cphy_rx_clk_src,
  988. .clkr.hw.init = &(const struct clk_init_data) {
  989. .name = "cam_cc_tfe_2_csid_clk_src",
  990. .parent_data = cam_cc_parent_data_0,
  991. .num_parents = ARRAY_SIZE(cam_cc_parent_data_0),
  992. .flags = CLK_SET_RATE_PARENT,
  993. .ops = &clk_rcg2_shared_ops,
  994. },
  995. };
  996. static const struct freq_tbl ftbl_cam_cc_xo_clk_src[] = {
  997. F(19200000, P_BI_TCXO, 1, 0, 0),
  998. { }
  999. };
  1000. static struct clk_rcg2 cam_cc_xo_clk_src = {
  1001. .cmd_rcgr = 0x25020,
  1002. .mnd_width = 0,
  1003. .hid_width = 5,
  1004. .parent_map = cam_cc_parent_map_10,
  1005. .freq_tbl = ftbl_cam_cc_xo_clk_src,
  1006. .clkr.hw.init = &(const struct clk_init_data) {
  1007. .name = "cam_cc_xo_clk_src",
  1008. .parent_data = cam_cc_parent_data_10,
  1009. .num_parents = ARRAY_SIZE(cam_cc_parent_data_10),
  1010. .flags = CLK_SET_RATE_PARENT,
  1011. .ops = &clk_rcg2_ops,
  1012. },
  1013. };
  1014. static struct clk_branch cam_cc_bps_ahb_clk = {
  1015. .halt_reg = 0x1a064,
  1016. .halt_check = BRANCH_HALT,
  1017. .clkr = {
  1018. .enable_reg = 0x1a064,
  1019. .enable_mask = BIT(0),
  1020. .hw.init = &(const struct clk_init_data) {
  1021. .name = "cam_cc_bps_ahb_clk",
  1022. .parent_hws = (const struct clk_hw*[]) {
  1023. &cam_cc_slow_ahb_clk_src.clkr.hw,
  1024. },
  1025. .num_parents = 1,
  1026. .flags = CLK_SET_RATE_PARENT,
  1027. .ops = &clk_branch2_ops,
  1028. },
  1029. },
  1030. };
  1031. static struct clk_branch cam_cc_bps_areg_clk = {
  1032. .halt_reg = 0x1a048,
  1033. .halt_check = BRANCH_HALT,
  1034. .clkr = {
  1035. .enable_reg = 0x1a048,
  1036. .enable_mask = BIT(0),
  1037. .hw.init = &(const struct clk_init_data) {
  1038. .name = "cam_cc_bps_areg_clk",
  1039. .parent_hws = (const struct clk_hw*[]) {
  1040. &cam_cc_fast_ahb_clk_src.clkr.hw,
  1041. },
  1042. .num_parents = 1,
  1043. .flags = CLK_SET_RATE_PARENT,
  1044. .ops = &clk_branch2_ops,
  1045. },
  1046. },
  1047. };
  1048. static struct clk_branch cam_cc_bps_clk = {
  1049. .halt_reg = 0x1a01c,
  1050. .halt_check = BRANCH_HALT,
  1051. .clkr = {
  1052. .enable_reg = 0x1a01c,
  1053. .enable_mask = BIT(0),
  1054. .hw.init = &(const struct clk_init_data) {
  1055. .name = "cam_cc_bps_clk",
  1056. .parent_hws = (const struct clk_hw*[]) {
  1057. &cam_cc_bps_clk_src.clkr.hw,
  1058. },
  1059. .num_parents = 1,
  1060. .flags = CLK_SET_RATE_PARENT,
  1061. .ops = &clk_branch2_ops,
  1062. },
  1063. },
  1064. };
  1065. static struct clk_branch cam_cc_camnoc_atb_clk = {
  1066. .halt_reg = 0x24040,
  1067. .halt_check = BRANCH_HALT,
  1068. .clkr = {
  1069. .enable_reg = 0x24040,
  1070. .enable_mask = BIT(0),
  1071. .hw.init = &(const struct clk_init_data) {
  1072. .name = "cam_cc_camnoc_atb_clk",
  1073. .ops = &clk_branch2_ops,
  1074. },
  1075. },
  1076. };
  1077. static struct clk_branch cam_cc_camnoc_axi_hf_clk = {
  1078. .halt_reg = 0x24010,
  1079. .halt_check = BRANCH_HALT,
  1080. .clkr = {
  1081. .enable_reg = 0x24010,
  1082. .enable_mask = BIT(0),
  1083. .hw.init = &(const struct clk_init_data) {
  1084. .name = "cam_cc_camnoc_axi_hf_clk",
  1085. .ops = &clk_branch2_ops,
  1086. },
  1087. },
  1088. };
  1089. static struct clk_branch cam_cc_camnoc_axi_sf_clk = {
  1090. .halt_reg = 0x24004,
  1091. .halt_check = BRANCH_HALT,
  1092. .clkr = {
  1093. .enable_reg = 0x24004,
  1094. .enable_mask = BIT(0),
  1095. .hw.init = &(const struct clk_init_data) {
  1096. .name = "cam_cc_camnoc_axi_sf_clk",
  1097. .ops = &clk_branch2_ops,
  1098. },
  1099. },
  1100. };
  1101. static struct clk_branch cam_cc_camnoc_nrt_axi_clk = {
  1102. .halt_reg = 0x2404c,
  1103. .halt_check = BRANCH_HALT_VOTED,
  1104. .hwcg_reg = 0x2404c,
  1105. .hwcg_bit = 1,
  1106. .clkr = {
  1107. .enable_reg = 0x2404c,
  1108. .enable_mask = BIT(0),
  1109. .hw.init = &(const struct clk_init_data) {
  1110. .name = "cam_cc_camnoc_nrt_axi_clk",
  1111. .parent_hws = (const struct clk_hw*[]) {
  1112. &cam_cc_camnoc_axi_clk_src.clkr.hw,
  1113. },
  1114. .num_parents = 1,
  1115. .flags = CLK_SET_RATE_PARENT,
  1116. .ops = &clk_branch2_ops,
  1117. },
  1118. },
  1119. };
  1120. static struct clk_branch cam_cc_camnoc_rt_axi_clk = {
  1121. .halt_reg = 0x24034,
  1122. .halt_check = BRANCH_HALT,
  1123. .clkr = {
  1124. .enable_reg = 0x24034,
  1125. .enable_mask = BIT(0),
  1126. .hw.init = &(const struct clk_init_data) {
  1127. .name = "cam_cc_camnoc_rt_axi_clk",
  1128. .parent_hws = (const struct clk_hw*[]) {
  1129. &cam_cc_camnoc_axi_clk_src.clkr.hw,
  1130. },
  1131. .num_parents = 1,
  1132. .flags = CLK_SET_RATE_PARENT,
  1133. .ops = &clk_branch2_ops,
  1134. },
  1135. },
  1136. };
  1137. static struct clk_branch cam_cc_cci_0_clk = {
  1138. .halt_reg = 0x2101c,
  1139. .halt_check = BRANCH_HALT,
  1140. .clkr = {
  1141. .enable_reg = 0x2101c,
  1142. .enable_mask = BIT(0),
  1143. .hw.init = &(const struct clk_init_data) {
  1144. .name = "cam_cc_cci_0_clk",
  1145. .parent_hws = (const struct clk_hw*[]) {
  1146. &cam_cc_cci_0_clk_src.clkr.hw,
  1147. },
  1148. .num_parents = 1,
  1149. .flags = CLK_SET_RATE_PARENT,
  1150. .ops = &clk_branch2_ops,
  1151. },
  1152. },
  1153. };
  1154. static struct clk_branch cam_cc_cci_1_clk = {
  1155. .halt_reg = 0x2201c,
  1156. .halt_check = BRANCH_HALT,
  1157. .clkr = {
  1158. .enable_reg = 0x2201c,
  1159. .enable_mask = BIT(0),
  1160. .hw.init = &(const struct clk_init_data) {
  1161. .name = "cam_cc_cci_1_clk",
  1162. .parent_hws = (const struct clk_hw*[]) {
  1163. &cam_cc_cci_1_clk_src.clkr.hw,
  1164. },
  1165. .num_parents = 1,
  1166. .flags = CLK_SET_RATE_PARENT,
  1167. .ops = &clk_branch2_ops,
  1168. },
  1169. },
  1170. };
  1171. static struct clk_branch cam_cc_core_ahb_clk = {
  1172. .halt_reg = 0x2501c,
  1173. .halt_check = BRANCH_HALT_DELAY,
  1174. .clkr = {
  1175. .enable_reg = 0x2501c,
  1176. .enable_mask = BIT(0),
  1177. .hw.init = &(const struct clk_init_data) {
  1178. .name = "cam_cc_core_ahb_clk",
  1179. .parent_hws = (const struct clk_hw*[]) {
  1180. &cam_cc_slow_ahb_clk_src.clkr.hw,
  1181. },
  1182. .num_parents = 1,
  1183. .flags = CLK_SET_RATE_PARENT,
  1184. .ops = &clk_branch2_ops,
  1185. },
  1186. },
  1187. };
  1188. static struct clk_branch cam_cc_cpas_ahb_clk = {
  1189. .halt_reg = 0x23004,
  1190. .halt_check = BRANCH_HALT,
  1191. .clkr = {
  1192. .enable_reg = 0x23004,
  1193. .enable_mask = BIT(0),
  1194. .hw.init = &(const struct clk_init_data) {
  1195. .name = "cam_cc_cpas_ahb_clk",
  1196. .parent_hws = (const struct clk_hw*[]) {
  1197. &cam_cc_slow_ahb_clk_src.clkr.hw,
  1198. },
  1199. .num_parents = 1,
  1200. .flags = CLK_SET_RATE_PARENT,
  1201. .ops = &clk_branch2_ops,
  1202. },
  1203. },
  1204. };
  1205. static struct clk_branch cam_cc_cre_ahb_clk = {
  1206. .halt_reg = 0x27020,
  1207. .halt_check = BRANCH_HALT,
  1208. .clkr = {
  1209. .enable_reg = 0x27020,
  1210. .enable_mask = BIT(0),
  1211. .hw.init = &(const struct clk_init_data) {
  1212. .name = "cam_cc_cre_ahb_clk",
  1213. .parent_hws = (const struct clk_hw*[]) {
  1214. &cam_cc_slow_ahb_clk_src.clkr.hw,
  1215. },
  1216. .num_parents = 1,
  1217. .flags = CLK_SET_RATE_PARENT,
  1218. .ops = &clk_branch2_ops,
  1219. },
  1220. },
  1221. };
  1222. static struct clk_branch cam_cc_cre_clk = {
  1223. .halt_reg = 0x2701c,
  1224. .halt_check = BRANCH_HALT,
  1225. .clkr = {
  1226. .enable_reg = 0x2701c,
  1227. .enable_mask = BIT(0),
  1228. .hw.init = &(const struct clk_init_data) {
  1229. .name = "cam_cc_cre_clk",
  1230. .parent_hws = (const struct clk_hw*[]) {
  1231. &cam_cc_cre_clk_src.clkr.hw,
  1232. },
  1233. .num_parents = 1,
  1234. .flags = CLK_SET_RATE_PARENT,
  1235. .ops = &clk_branch2_ops,
  1236. },
  1237. },
  1238. };
  1239. static struct clk_branch cam_cc_csi0phytimer_clk = {
  1240. .halt_reg = 0x1901c,
  1241. .halt_check = BRANCH_HALT,
  1242. .clkr = {
  1243. .enable_reg = 0x1901c,
  1244. .enable_mask = BIT(0),
  1245. .hw.init = &(const struct clk_init_data) {
  1246. .name = "cam_cc_csi0phytimer_clk",
  1247. .parent_hws = (const struct clk_hw*[]) {
  1248. &cam_cc_csi0phytimer_clk_src.clkr.hw,
  1249. },
  1250. .num_parents = 1,
  1251. .flags = CLK_SET_RATE_PARENT,
  1252. .ops = &clk_branch2_ops,
  1253. },
  1254. },
  1255. };
  1256. static struct clk_branch cam_cc_csi1phytimer_clk = {
  1257. .halt_reg = 0x19040,
  1258. .halt_check = BRANCH_HALT,
  1259. .clkr = {
  1260. .enable_reg = 0x19040,
  1261. .enable_mask = BIT(0),
  1262. .hw.init = &(const struct clk_init_data) {
  1263. .name = "cam_cc_csi1phytimer_clk",
  1264. .parent_hws = (const struct clk_hw*[]) {
  1265. &cam_cc_csi1phytimer_clk_src.clkr.hw,
  1266. },
  1267. .num_parents = 1,
  1268. .flags = CLK_SET_RATE_PARENT,
  1269. .ops = &clk_branch2_ops,
  1270. },
  1271. },
  1272. };
  1273. static struct clk_branch cam_cc_csi2phytimer_clk = {
  1274. .halt_reg = 0x19064,
  1275. .halt_check = BRANCH_HALT,
  1276. .clkr = {
  1277. .enable_reg = 0x19064,
  1278. .enable_mask = BIT(0),
  1279. .hw.init = &(const struct clk_init_data) {
  1280. .name = "cam_cc_csi2phytimer_clk",
  1281. .parent_hws = (const struct clk_hw*[]) {
  1282. &cam_cc_csi2phytimer_clk_src.clkr.hw,
  1283. },
  1284. .num_parents = 1,
  1285. .flags = CLK_SET_RATE_PARENT,
  1286. .ops = &clk_branch2_ops,
  1287. },
  1288. },
  1289. };
  1290. static struct clk_branch cam_cc_csi3phytimer_clk = {
  1291. .halt_reg = 0x19088,
  1292. .halt_check = BRANCH_HALT,
  1293. .clkr = {
  1294. .enable_reg = 0x19088,
  1295. .enable_mask = BIT(0),
  1296. .hw.init = &(const struct clk_init_data) {
  1297. .name = "cam_cc_csi3phytimer_clk",
  1298. .parent_hws = (const struct clk_hw*[]) {
  1299. &cam_cc_csi3phytimer_clk_src.clkr.hw,
  1300. },
  1301. .num_parents = 1,
  1302. .flags = CLK_SET_RATE_PARENT,
  1303. .ops = &clk_branch2_ops,
  1304. },
  1305. },
  1306. };
  1307. static struct clk_branch cam_cc_csiphy0_clk = {
  1308. .halt_reg = 0x19020,
  1309. .halt_check = BRANCH_HALT,
  1310. .clkr = {
  1311. .enable_reg = 0x19020,
  1312. .enable_mask = BIT(0),
  1313. .hw.init = &(const struct clk_init_data) {
  1314. .name = "cam_cc_csiphy0_clk",
  1315. .parent_hws = (const struct clk_hw*[]) {
  1316. &cam_cc_cphy_rx_clk_src.clkr.hw,
  1317. },
  1318. .num_parents = 1,
  1319. .flags = CLK_SET_RATE_PARENT,
  1320. .ops = &clk_branch2_ops,
  1321. },
  1322. },
  1323. };
  1324. static struct clk_branch cam_cc_csiphy1_clk = {
  1325. .halt_reg = 0x19044,
  1326. .halt_check = BRANCH_HALT,
  1327. .clkr = {
  1328. .enable_reg = 0x19044,
  1329. .enable_mask = BIT(0),
  1330. .hw.init = &(const struct clk_init_data) {
  1331. .name = "cam_cc_csiphy1_clk",
  1332. .parent_hws = (const struct clk_hw*[]) {
  1333. &cam_cc_cphy_rx_clk_src.clkr.hw,
  1334. },
  1335. .num_parents = 1,
  1336. .flags = CLK_SET_RATE_PARENT,
  1337. .ops = &clk_branch2_ops,
  1338. },
  1339. },
  1340. };
  1341. static struct clk_branch cam_cc_csiphy2_clk = {
  1342. .halt_reg = 0x19068,
  1343. .halt_check = BRANCH_HALT,
  1344. .clkr = {
  1345. .enable_reg = 0x19068,
  1346. .enable_mask = BIT(0),
  1347. .hw.init = &(const struct clk_init_data) {
  1348. .name = "cam_cc_csiphy2_clk",
  1349. .parent_hws = (const struct clk_hw*[]) {
  1350. &cam_cc_cphy_rx_clk_src.clkr.hw,
  1351. },
  1352. .num_parents = 1,
  1353. .flags = CLK_SET_RATE_PARENT,
  1354. .ops = &clk_branch2_ops,
  1355. },
  1356. },
  1357. };
  1358. static struct clk_branch cam_cc_csiphy3_clk = {
  1359. .halt_reg = 0x1908c,
  1360. .halt_check = BRANCH_HALT,
  1361. .clkr = {
  1362. .enable_reg = 0x1908c,
  1363. .enable_mask = BIT(0),
  1364. .hw.init = &(const struct clk_init_data) {
  1365. .name = "cam_cc_csiphy3_clk",
  1366. .parent_hws = (const struct clk_hw*[]) {
  1367. &cam_cc_cphy_rx_clk_src.clkr.hw,
  1368. },
  1369. .num_parents = 1,
  1370. .flags = CLK_SET_RATE_PARENT,
  1371. .ops = &clk_branch2_ops,
  1372. },
  1373. },
  1374. };
  1375. static struct clk_branch cam_cc_icp_atb_clk = {
  1376. .halt_reg = 0x20004,
  1377. .halt_check = BRANCH_HALT,
  1378. .clkr = {
  1379. .enable_reg = 0x20004,
  1380. .enable_mask = BIT(0),
  1381. .hw.init = &(const struct clk_init_data) {
  1382. .name = "cam_cc_icp_atb_clk",
  1383. .ops = &clk_branch2_ops,
  1384. },
  1385. },
  1386. };
  1387. static struct clk_branch cam_cc_icp_clk = {
  1388. .halt_reg = 0x2002c,
  1389. .halt_check = BRANCH_HALT,
  1390. .clkr = {
  1391. .enable_reg = 0x2002c,
  1392. .enable_mask = BIT(0),
  1393. .hw.init = &(const struct clk_init_data) {
  1394. .name = "cam_cc_icp_clk",
  1395. .parent_hws = (const struct clk_hw*[]) {
  1396. &cam_cc_icp_clk_src.clkr.hw,
  1397. },
  1398. .num_parents = 1,
  1399. .flags = CLK_SET_RATE_PARENT,
  1400. .ops = &clk_branch2_ops,
  1401. },
  1402. },
  1403. };
  1404. static struct clk_branch cam_cc_icp_cti_clk = {
  1405. .halt_reg = 0x20008,
  1406. .halt_check = BRANCH_HALT,
  1407. .clkr = {
  1408. .enable_reg = 0x20008,
  1409. .enable_mask = BIT(0),
  1410. .hw.init = &(const struct clk_init_data) {
  1411. .name = "cam_cc_icp_cti_clk",
  1412. .ops = &clk_branch2_ops,
  1413. },
  1414. },
  1415. };
  1416. static struct clk_branch cam_cc_icp_ts_clk = {
  1417. .halt_reg = 0x2000c,
  1418. .halt_check = BRANCH_HALT,
  1419. .clkr = {
  1420. .enable_reg = 0x2000c,
  1421. .enable_mask = BIT(0),
  1422. .hw.init = &(const struct clk_init_data) {
  1423. .name = "cam_cc_icp_ts_clk",
  1424. .ops = &clk_branch2_ops,
  1425. },
  1426. },
  1427. };
  1428. static struct clk_branch cam_cc_mclk0_clk = {
  1429. .halt_reg = 0x1801c,
  1430. .halt_check = BRANCH_HALT,
  1431. .clkr = {
  1432. .enable_reg = 0x1801c,
  1433. .enable_mask = BIT(0),
  1434. .hw.init = &(const struct clk_init_data) {
  1435. .name = "cam_cc_mclk0_clk",
  1436. .parent_hws = (const struct clk_hw*[]) {
  1437. &cam_cc_mclk0_clk_src.clkr.hw,
  1438. },
  1439. .num_parents = 1,
  1440. .flags = CLK_SET_RATE_PARENT,
  1441. .ops = &clk_branch2_ops,
  1442. },
  1443. },
  1444. };
  1445. static struct clk_branch cam_cc_mclk1_clk = {
  1446. .halt_reg = 0x1803c,
  1447. .halt_check = BRANCH_HALT,
  1448. .clkr = {
  1449. .enable_reg = 0x1803c,
  1450. .enable_mask = BIT(0),
  1451. .hw.init = &(const struct clk_init_data) {
  1452. .name = "cam_cc_mclk1_clk",
  1453. .parent_hws = (const struct clk_hw*[]) {
  1454. &cam_cc_mclk1_clk_src.clkr.hw,
  1455. },
  1456. .num_parents = 1,
  1457. .flags = CLK_SET_RATE_PARENT,
  1458. .ops = &clk_branch2_ops,
  1459. },
  1460. },
  1461. };
  1462. static struct clk_branch cam_cc_mclk2_clk = {
  1463. .halt_reg = 0x1805c,
  1464. .halt_check = BRANCH_HALT,
  1465. .clkr = {
  1466. .enable_reg = 0x1805c,
  1467. .enable_mask = BIT(0),
  1468. .hw.init = &(const struct clk_init_data) {
  1469. .name = "cam_cc_mclk2_clk",
  1470. .parent_hws = (const struct clk_hw*[]) {
  1471. &cam_cc_mclk2_clk_src.clkr.hw,
  1472. },
  1473. .num_parents = 1,
  1474. .flags = CLK_SET_RATE_PARENT,
  1475. .ops = &clk_branch2_ops,
  1476. },
  1477. },
  1478. };
  1479. static struct clk_branch cam_cc_mclk3_clk = {
  1480. .halt_reg = 0x1807c,
  1481. .halt_check = BRANCH_HALT,
  1482. .clkr = {
  1483. .enable_reg = 0x1807c,
  1484. .enable_mask = BIT(0),
  1485. .hw.init = &(const struct clk_init_data) {
  1486. .name = "cam_cc_mclk3_clk",
  1487. .parent_hws = (const struct clk_hw*[]) {
  1488. &cam_cc_mclk3_clk_src.clkr.hw,
  1489. },
  1490. .num_parents = 1,
  1491. .flags = CLK_SET_RATE_PARENT,
  1492. .ops = &clk_branch2_ops,
  1493. },
  1494. },
  1495. };
  1496. static struct clk_branch cam_cc_mclk4_clk = {
  1497. .halt_reg = 0x1809c,
  1498. .halt_check = BRANCH_HALT,
  1499. .clkr = {
  1500. .enable_reg = 0x1809c,
  1501. .enable_mask = BIT(0),
  1502. .hw.init = &(const struct clk_init_data) {
  1503. .name = "cam_cc_mclk4_clk",
  1504. .parent_hws = (const struct clk_hw*[]) {
  1505. &cam_cc_mclk4_clk_src.clkr.hw,
  1506. },
  1507. .num_parents = 1,
  1508. .flags = CLK_SET_RATE_PARENT,
  1509. .ops = &clk_branch2_ops,
  1510. },
  1511. },
  1512. };
  1513. static struct clk_branch cam_cc_ope_0_ahb_clk = {
  1514. .halt_reg = 0x1b034,
  1515. .halt_check = BRANCH_HALT,
  1516. .clkr = {
  1517. .enable_reg = 0x1b034,
  1518. .enable_mask = BIT(0),
  1519. .hw.init = &(const struct clk_init_data) {
  1520. .name = "cam_cc_ope_0_ahb_clk",
  1521. .parent_hws = (const struct clk_hw*[]) {
  1522. &cam_cc_slow_ahb_clk_src.clkr.hw,
  1523. },
  1524. .num_parents = 1,
  1525. .flags = CLK_SET_RATE_PARENT,
  1526. .ops = &clk_branch2_ops,
  1527. },
  1528. },
  1529. };
  1530. static struct clk_branch cam_cc_ope_0_areg_clk = {
  1531. .halt_reg = 0x1b030,
  1532. .halt_check = BRANCH_HALT,
  1533. .clkr = {
  1534. .enable_reg = 0x1b030,
  1535. .enable_mask = BIT(0),
  1536. .hw.init = &(const struct clk_init_data) {
  1537. .name = "cam_cc_ope_0_areg_clk",
  1538. .parent_hws = (const struct clk_hw*[]) {
  1539. &cam_cc_fast_ahb_clk_src.clkr.hw,
  1540. },
  1541. .num_parents = 1,
  1542. .flags = CLK_SET_RATE_PARENT,
  1543. .ops = &clk_branch2_ops,
  1544. },
  1545. },
  1546. };
  1547. static struct clk_branch cam_cc_ope_0_clk = {
  1548. .halt_reg = 0x1b01c,
  1549. .halt_check = BRANCH_HALT,
  1550. .clkr = {
  1551. .enable_reg = 0x1b01c,
  1552. .enable_mask = BIT(0),
  1553. .hw.init = &(const struct clk_init_data) {
  1554. .name = "cam_cc_ope_0_clk",
  1555. .parent_hws = (const struct clk_hw*[]) {
  1556. &cam_cc_ope_0_clk_src.clkr.hw,
  1557. },
  1558. .num_parents = 1,
  1559. .flags = CLK_SET_RATE_PARENT,
  1560. .ops = &clk_branch2_ops,
  1561. },
  1562. },
  1563. };
  1564. static struct clk_branch cam_cc_soc_ahb_clk = {
  1565. .halt_reg = 0x25018,
  1566. .halt_check = BRANCH_HALT,
  1567. .clkr = {
  1568. .enable_reg = 0x25018,
  1569. .enable_mask = BIT(0),
  1570. .hw.init = &(const struct clk_init_data) {
  1571. .name = "cam_cc_soc_ahb_clk",
  1572. .ops = &clk_branch2_ops,
  1573. },
  1574. },
  1575. };
  1576. static struct clk_branch cam_cc_sys_tmr_clk = {
  1577. .halt_reg = 0x20038,
  1578. .halt_check = BRANCH_HALT,
  1579. .clkr = {
  1580. .enable_reg = 0x20038,
  1581. .enable_mask = BIT(0),
  1582. .hw.init = &(const struct clk_init_data) {
  1583. .name = "cam_cc_sys_tmr_clk",
  1584. .parent_hws = (const struct clk_hw*[]) {
  1585. &cam_cc_xo_clk_src.clkr.hw,
  1586. },
  1587. .num_parents = 1,
  1588. .flags = CLK_SET_RATE_PARENT,
  1589. .ops = &clk_branch2_ops,
  1590. },
  1591. },
  1592. };
  1593. static struct clk_branch cam_cc_tfe_0_ahb_clk = {
  1594. .halt_reg = 0x1c078,
  1595. .halt_check = BRANCH_HALT,
  1596. .clkr = {
  1597. .enable_reg = 0x1c078,
  1598. .enable_mask = BIT(0),
  1599. .hw.init = &(const struct clk_init_data) {
  1600. .name = "cam_cc_tfe_0_ahb_clk",
  1601. .parent_hws = (const struct clk_hw*[]) {
  1602. &cam_cc_slow_ahb_clk_src.clkr.hw,
  1603. },
  1604. .num_parents = 1,
  1605. .flags = CLK_SET_RATE_PARENT,
  1606. .ops = &clk_branch2_ops,
  1607. },
  1608. },
  1609. };
  1610. static struct clk_branch cam_cc_tfe_0_clk = {
  1611. .halt_reg = 0x1c01c,
  1612. .halt_check = BRANCH_HALT,
  1613. .clkr = {
  1614. .enable_reg = 0x1c01c,
  1615. .enable_mask = BIT(0),
  1616. .hw.init = &(const struct clk_init_data) {
  1617. .name = "cam_cc_tfe_0_clk",
  1618. .parent_hws = (const struct clk_hw*[]) {
  1619. &cam_cc_tfe_0_clk_src.clkr.hw,
  1620. },
  1621. .num_parents = 1,
  1622. .flags = CLK_SET_RATE_PARENT,
  1623. .ops = &clk_branch2_ops,
  1624. },
  1625. },
  1626. };
  1627. static struct clk_branch cam_cc_tfe_0_cphy_rx_clk = {
  1628. .halt_reg = 0x1c074,
  1629. .halt_check = BRANCH_HALT,
  1630. .clkr = {
  1631. .enable_reg = 0x1c074,
  1632. .enable_mask = BIT(0),
  1633. .hw.init = &(const struct clk_init_data) {
  1634. .name = "cam_cc_tfe_0_cphy_rx_clk",
  1635. .parent_hws = (const struct clk_hw*[]) {
  1636. &cam_cc_cphy_rx_clk_src.clkr.hw,
  1637. },
  1638. .num_parents = 1,
  1639. .flags = CLK_SET_RATE_PARENT,
  1640. .ops = &clk_branch2_ops,
  1641. },
  1642. },
  1643. };
  1644. static struct clk_branch cam_cc_tfe_0_csid_clk = {
  1645. .halt_reg = 0x1c048,
  1646. .halt_check = BRANCH_HALT,
  1647. .clkr = {
  1648. .enable_reg = 0x1c048,
  1649. .enable_mask = BIT(0),
  1650. .hw.init = &(const struct clk_init_data) {
  1651. .name = "cam_cc_tfe_0_csid_clk",
  1652. .parent_hws = (const struct clk_hw*[]) {
  1653. &cam_cc_tfe_0_csid_clk_src.clkr.hw,
  1654. },
  1655. .num_parents = 1,
  1656. .flags = CLK_SET_RATE_PARENT,
  1657. .ops = &clk_branch2_ops,
  1658. },
  1659. },
  1660. };
  1661. static struct clk_branch cam_cc_tfe_1_ahb_clk = {
  1662. .halt_reg = 0x1d058,
  1663. .halt_check = BRANCH_HALT,
  1664. .clkr = {
  1665. .enable_reg = 0x1d058,
  1666. .enable_mask = BIT(0),
  1667. .hw.init = &(const struct clk_init_data) {
  1668. .name = "cam_cc_tfe_1_ahb_clk",
  1669. .parent_hws = (const struct clk_hw*[]) {
  1670. &cam_cc_slow_ahb_clk_src.clkr.hw,
  1671. },
  1672. .num_parents = 1,
  1673. .flags = CLK_SET_RATE_PARENT,
  1674. .ops = &clk_branch2_ops,
  1675. },
  1676. },
  1677. };
  1678. static struct clk_branch cam_cc_tfe_1_clk = {
  1679. .halt_reg = 0x1d01c,
  1680. .halt_check = BRANCH_HALT,
  1681. .clkr = {
  1682. .enable_reg = 0x1d01c,
  1683. .enable_mask = BIT(0),
  1684. .hw.init = &(const struct clk_init_data) {
  1685. .name = "cam_cc_tfe_1_clk",
  1686. .parent_hws = (const struct clk_hw*[]) {
  1687. &cam_cc_tfe_1_clk_src.clkr.hw,
  1688. },
  1689. .num_parents = 1,
  1690. .flags = CLK_SET_RATE_PARENT,
  1691. .ops = &clk_branch2_ops,
  1692. },
  1693. },
  1694. };
  1695. static struct clk_branch cam_cc_tfe_1_cphy_rx_clk = {
  1696. .halt_reg = 0x1d054,
  1697. .halt_check = BRANCH_HALT,
  1698. .clkr = {
  1699. .enable_reg = 0x1d054,
  1700. .enable_mask = BIT(0),
  1701. .hw.init = &(const struct clk_init_data) {
  1702. .name = "cam_cc_tfe_1_cphy_rx_clk",
  1703. .parent_hws = (const struct clk_hw*[]) {
  1704. &cam_cc_cphy_rx_clk_src.clkr.hw,
  1705. },
  1706. .num_parents = 1,
  1707. .flags = CLK_SET_RATE_PARENT,
  1708. .ops = &clk_branch2_ops,
  1709. },
  1710. },
  1711. };
  1712. static struct clk_branch cam_cc_tfe_1_csid_clk = {
  1713. .halt_reg = 0x1d048,
  1714. .halt_check = BRANCH_HALT,
  1715. .clkr = {
  1716. .enable_reg = 0x1d048,
  1717. .enable_mask = BIT(0),
  1718. .hw.init = &(const struct clk_init_data) {
  1719. .name = "cam_cc_tfe_1_csid_clk",
  1720. .parent_hws = (const struct clk_hw*[]) {
  1721. &cam_cc_tfe_1_csid_clk_src.clkr.hw,
  1722. },
  1723. .num_parents = 1,
  1724. .flags = CLK_SET_RATE_PARENT,
  1725. .ops = &clk_branch2_ops,
  1726. },
  1727. },
  1728. };
  1729. static struct clk_branch cam_cc_tfe_2_ahb_clk = {
  1730. .halt_reg = 0x1e058,
  1731. .halt_check = BRANCH_HALT,
  1732. .clkr = {
  1733. .enable_reg = 0x1e058,
  1734. .enable_mask = BIT(0),
  1735. .hw.init = &(const struct clk_init_data) {
  1736. .name = "cam_cc_tfe_2_ahb_clk",
  1737. .parent_hws = (const struct clk_hw*[]) {
  1738. &cam_cc_slow_ahb_clk_src.clkr.hw,
  1739. },
  1740. .num_parents = 1,
  1741. .flags = CLK_SET_RATE_PARENT,
  1742. .ops = &clk_branch2_ops,
  1743. },
  1744. },
  1745. };
  1746. static struct clk_branch cam_cc_tfe_2_clk = {
  1747. .halt_reg = 0x1e01c,
  1748. .halt_check = BRANCH_HALT,
  1749. .clkr = {
  1750. .enable_reg = 0x1e01c,
  1751. .enable_mask = BIT(0),
  1752. .hw.init = &(const struct clk_init_data) {
  1753. .name = "cam_cc_tfe_2_clk",
  1754. .parent_hws = (const struct clk_hw*[]) {
  1755. &cam_cc_tfe_2_clk_src.clkr.hw,
  1756. },
  1757. .num_parents = 1,
  1758. .flags = CLK_SET_RATE_PARENT,
  1759. .ops = &clk_branch2_ops,
  1760. },
  1761. },
  1762. };
  1763. static struct clk_branch cam_cc_tfe_2_cphy_rx_clk = {
  1764. .halt_reg = 0x1e054,
  1765. .halt_check = BRANCH_HALT,
  1766. .clkr = {
  1767. .enable_reg = 0x1e054,
  1768. .enable_mask = BIT(0),
  1769. .hw.init = &(const struct clk_init_data) {
  1770. .name = "cam_cc_tfe_2_cphy_rx_clk",
  1771. .parent_hws = (const struct clk_hw*[]) {
  1772. &cam_cc_cphy_rx_clk_src.clkr.hw,
  1773. },
  1774. .num_parents = 1,
  1775. .flags = CLK_SET_RATE_PARENT,
  1776. .ops = &clk_branch2_ops,
  1777. },
  1778. },
  1779. };
  1780. static struct clk_branch cam_cc_tfe_2_csid_clk = {
  1781. .halt_reg = 0x1e048,
  1782. .halt_check = BRANCH_HALT,
  1783. .clkr = {
  1784. .enable_reg = 0x1e048,
  1785. .enable_mask = BIT(0),
  1786. .hw.init = &(const struct clk_init_data) {
  1787. .name = "cam_cc_tfe_2_csid_clk",
  1788. .parent_hws = (const struct clk_hw*[]) {
  1789. &cam_cc_tfe_2_csid_clk_src.clkr.hw,
  1790. },
  1791. .num_parents = 1,
  1792. .flags = CLK_SET_RATE_PARENT,
  1793. .ops = &clk_branch2_ops,
  1794. },
  1795. },
  1796. };
  1797. static struct clk_branch cam_cc_top_shift_clk = {
  1798. .halt_reg = 0x25040,
  1799. .halt_check = BRANCH_HALT_VOTED,
  1800. .clkr = {
  1801. .enable_reg = 0x25040,
  1802. .enable_mask = BIT(0),
  1803. .hw.init = &(const struct clk_init_data) {
  1804. .name = "cam_cc_top_shift_clk",
  1805. .parent_hws = (const struct clk_hw*[]) {
  1806. &cam_cc_xo_clk_src.clkr.hw,
  1807. },
  1808. .num_parents = 1,
  1809. .flags = CLK_SET_RATE_PARENT,
  1810. .ops = &clk_branch2_ops,
  1811. },
  1812. },
  1813. };
  1814. static struct gdsc cam_cc_camss_top_gdsc = {
  1815. .gdscr = 0x25004,
  1816. .en_rest_wait_val = 0x2,
  1817. .en_few_wait_val = 0x2,
  1818. .clk_dis_wait_val = 0xf,
  1819. .pd = {
  1820. .name = "cam_cc_camss_top_gdsc",
  1821. },
  1822. .pwrsts = PWRSTS_OFF_ON,
  1823. .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
  1824. };
  1825. static struct clk_regmap *cam_cc_milos_clocks[] = {
  1826. [CAM_CC_BPS_AHB_CLK] = &cam_cc_bps_ahb_clk.clkr,
  1827. [CAM_CC_BPS_AREG_CLK] = &cam_cc_bps_areg_clk.clkr,
  1828. [CAM_CC_BPS_CLK] = &cam_cc_bps_clk.clkr,
  1829. [CAM_CC_BPS_CLK_SRC] = &cam_cc_bps_clk_src.clkr,
  1830. [CAM_CC_CAMNOC_ATB_CLK] = &cam_cc_camnoc_atb_clk.clkr,
  1831. [CAM_CC_CAMNOC_AXI_CLK_SRC] = &cam_cc_camnoc_axi_clk_src.clkr,
  1832. [CAM_CC_CAMNOC_AXI_HF_CLK] = &cam_cc_camnoc_axi_hf_clk.clkr,
  1833. [CAM_CC_CAMNOC_AXI_SF_CLK] = &cam_cc_camnoc_axi_sf_clk.clkr,
  1834. [CAM_CC_CAMNOC_NRT_AXI_CLK] = &cam_cc_camnoc_nrt_axi_clk.clkr,
  1835. [CAM_CC_CAMNOC_RT_AXI_CLK] = &cam_cc_camnoc_rt_axi_clk.clkr,
  1836. [CAM_CC_CCI_0_CLK] = &cam_cc_cci_0_clk.clkr,
  1837. [CAM_CC_CCI_0_CLK_SRC] = &cam_cc_cci_0_clk_src.clkr,
  1838. [CAM_CC_CCI_1_CLK] = &cam_cc_cci_1_clk.clkr,
  1839. [CAM_CC_CCI_1_CLK_SRC] = &cam_cc_cci_1_clk_src.clkr,
  1840. [CAM_CC_CORE_AHB_CLK] = &cam_cc_core_ahb_clk.clkr,
  1841. [CAM_CC_CPAS_AHB_CLK] = &cam_cc_cpas_ahb_clk.clkr,
  1842. [CAM_CC_CPHY_RX_CLK_SRC] = &cam_cc_cphy_rx_clk_src.clkr,
  1843. [CAM_CC_CRE_AHB_CLK] = &cam_cc_cre_ahb_clk.clkr,
  1844. [CAM_CC_CRE_CLK] = &cam_cc_cre_clk.clkr,
  1845. [CAM_CC_CRE_CLK_SRC] = &cam_cc_cre_clk_src.clkr,
  1846. [CAM_CC_CSI0PHYTIMER_CLK] = &cam_cc_csi0phytimer_clk.clkr,
  1847. [CAM_CC_CSI0PHYTIMER_CLK_SRC] = &cam_cc_csi0phytimer_clk_src.clkr,
  1848. [CAM_CC_CSI1PHYTIMER_CLK] = &cam_cc_csi1phytimer_clk.clkr,
  1849. [CAM_CC_CSI1PHYTIMER_CLK_SRC] = &cam_cc_csi1phytimer_clk_src.clkr,
  1850. [CAM_CC_CSI2PHYTIMER_CLK] = &cam_cc_csi2phytimer_clk.clkr,
  1851. [CAM_CC_CSI2PHYTIMER_CLK_SRC] = &cam_cc_csi2phytimer_clk_src.clkr,
  1852. [CAM_CC_CSI3PHYTIMER_CLK] = &cam_cc_csi3phytimer_clk.clkr,
  1853. [CAM_CC_CSI3PHYTIMER_CLK_SRC] = &cam_cc_csi3phytimer_clk_src.clkr,
  1854. [CAM_CC_CSIPHY0_CLK] = &cam_cc_csiphy0_clk.clkr,
  1855. [CAM_CC_CSIPHY1_CLK] = &cam_cc_csiphy1_clk.clkr,
  1856. [CAM_CC_CSIPHY2_CLK] = &cam_cc_csiphy2_clk.clkr,
  1857. [CAM_CC_CSIPHY3_CLK] = &cam_cc_csiphy3_clk.clkr,
  1858. [CAM_CC_FAST_AHB_CLK_SRC] = &cam_cc_fast_ahb_clk_src.clkr,
  1859. [CAM_CC_ICP_ATB_CLK] = &cam_cc_icp_atb_clk.clkr,
  1860. [CAM_CC_ICP_CLK] = &cam_cc_icp_clk.clkr,
  1861. [CAM_CC_ICP_CLK_SRC] = &cam_cc_icp_clk_src.clkr,
  1862. [CAM_CC_ICP_CTI_CLK] = &cam_cc_icp_cti_clk.clkr,
  1863. [CAM_CC_ICP_TS_CLK] = &cam_cc_icp_ts_clk.clkr,
  1864. [CAM_CC_MCLK0_CLK] = &cam_cc_mclk0_clk.clkr,
  1865. [CAM_CC_MCLK0_CLK_SRC] = &cam_cc_mclk0_clk_src.clkr,
  1866. [CAM_CC_MCLK1_CLK] = &cam_cc_mclk1_clk.clkr,
  1867. [CAM_CC_MCLK1_CLK_SRC] = &cam_cc_mclk1_clk_src.clkr,
  1868. [CAM_CC_MCLK2_CLK] = &cam_cc_mclk2_clk.clkr,
  1869. [CAM_CC_MCLK2_CLK_SRC] = &cam_cc_mclk2_clk_src.clkr,
  1870. [CAM_CC_MCLK3_CLK] = &cam_cc_mclk3_clk.clkr,
  1871. [CAM_CC_MCLK3_CLK_SRC] = &cam_cc_mclk3_clk_src.clkr,
  1872. [CAM_CC_MCLK4_CLK] = &cam_cc_mclk4_clk.clkr,
  1873. [CAM_CC_MCLK4_CLK_SRC] = &cam_cc_mclk4_clk_src.clkr,
  1874. [CAM_CC_OPE_0_AHB_CLK] = &cam_cc_ope_0_ahb_clk.clkr,
  1875. [CAM_CC_OPE_0_AREG_CLK] = &cam_cc_ope_0_areg_clk.clkr,
  1876. [CAM_CC_OPE_0_CLK] = &cam_cc_ope_0_clk.clkr,
  1877. [CAM_CC_OPE_0_CLK_SRC] = &cam_cc_ope_0_clk_src.clkr,
  1878. [CAM_CC_PLL0] = &cam_cc_pll0.clkr,
  1879. [CAM_CC_PLL0_OUT_EVEN] = &cam_cc_pll0_out_even.clkr,
  1880. [CAM_CC_PLL0_OUT_ODD] = &cam_cc_pll0_out_odd.clkr,
  1881. [CAM_CC_PLL1] = &cam_cc_pll1.clkr,
  1882. [CAM_CC_PLL1_OUT_EVEN] = &cam_cc_pll1_out_even.clkr,
  1883. [CAM_CC_PLL2] = &cam_cc_pll2.clkr,
  1884. [CAM_CC_PLL3] = &cam_cc_pll3.clkr,
  1885. [CAM_CC_PLL3_OUT_EVEN] = &cam_cc_pll3_out_even.clkr,
  1886. [CAM_CC_PLL4] = &cam_cc_pll4.clkr,
  1887. [CAM_CC_PLL4_OUT_EVEN] = &cam_cc_pll4_out_even.clkr,
  1888. [CAM_CC_PLL5] = &cam_cc_pll5.clkr,
  1889. [CAM_CC_PLL5_OUT_EVEN] = &cam_cc_pll5_out_even.clkr,
  1890. [CAM_CC_PLL6] = &cam_cc_pll6.clkr,
  1891. [CAM_CC_PLL6_OUT_EVEN] = &cam_cc_pll6_out_even.clkr,
  1892. [CAM_CC_SLEEP_CLK_SRC] = &cam_cc_sleep_clk_src.clkr,
  1893. [CAM_CC_SLOW_AHB_CLK_SRC] = &cam_cc_slow_ahb_clk_src.clkr,
  1894. [CAM_CC_SOC_AHB_CLK] = &cam_cc_soc_ahb_clk.clkr,
  1895. [CAM_CC_SYS_TMR_CLK] = &cam_cc_sys_tmr_clk.clkr,
  1896. [CAM_CC_TFE_0_AHB_CLK] = &cam_cc_tfe_0_ahb_clk.clkr,
  1897. [CAM_CC_TFE_0_CLK] = &cam_cc_tfe_0_clk.clkr,
  1898. [CAM_CC_TFE_0_CLK_SRC] = &cam_cc_tfe_0_clk_src.clkr,
  1899. [CAM_CC_TFE_0_CPHY_RX_CLK] = &cam_cc_tfe_0_cphy_rx_clk.clkr,
  1900. [CAM_CC_TFE_0_CSID_CLK] = &cam_cc_tfe_0_csid_clk.clkr,
  1901. [CAM_CC_TFE_0_CSID_CLK_SRC] = &cam_cc_tfe_0_csid_clk_src.clkr,
  1902. [CAM_CC_TFE_1_AHB_CLK] = &cam_cc_tfe_1_ahb_clk.clkr,
  1903. [CAM_CC_TFE_1_CLK] = &cam_cc_tfe_1_clk.clkr,
  1904. [CAM_CC_TFE_1_CLK_SRC] = &cam_cc_tfe_1_clk_src.clkr,
  1905. [CAM_CC_TFE_1_CPHY_RX_CLK] = &cam_cc_tfe_1_cphy_rx_clk.clkr,
  1906. [CAM_CC_TFE_1_CSID_CLK] = &cam_cc_tfe_1_csid_clk.clkr,
  1907. [CAM_CC_TFE_1_CSID_CLK_SRC] = &cam_cc_tfe_1_csid_clk_src.clkr,
  1908. [CAM_CC_TFE_2_AHB_CLK] = &cam_cc_tfe_2_ahb_clk.clkr,
  1909. [CAM_CC_TFE_2_CLK] = &cam_cc_tfe_2_clk.clkr,
  1910. [CAM_CC_TFE_2_CLK_SRC] = &cam_cc_tfe_2_clk_src.clkr,
  1911. [CAM_CC_TFE_2_CPHY_RX_CLK] = &cam_cc_tfe_2_cphy_rx_clk.clkr,
  1912. [CAM_CC_TFE_2_CSID_CLK] = &cam_cc_tfe_2_csid_clk.clkr,
  1913. [CAM_CC_TFE_2_CSID_CLK_SRC] = &cam_cc_tfe_2_csid_clk_src.clkr,
  1914. [CAM_CC_TOP_SHIFT_CLK] = &cam_cc_top_shift_clk.clkr,
  1915. [CAM_CC_XO_CLK_SRC] = &cam_cc_xo_clk_src.clkr,
  1916. };
  1917. static const struct qcom_reset_map cam_cc_milos_resets[] = {
  1918. [CAM_CC_BPS_BCR] = { 0x1a000 },
  1919. [CAM_CC_CAMNOC_BCR] = { 0x24000 },
  1920. [CAM_CC_CAMSS_TOP_BCR] = { 0x25000 },
  1921. [CAM_CC_CCI_0_BCR] = { 0x21000 },
  1922. [CAM_CC_CCI_1_BCR] = { 0x22000 },
  1923. [CAM_CC_CPAS_BCR] = { 0x23000 },
  1924. [CAM_CC_CRE_BCR] = { 0x27000 },
  1925. [CAM_CC_CSI0PHY_BCR] = { 0x19000 },
  1926. [CAM_CC_CSI1PHY_BCR] = { 0x19024 },
  1927. [CAM_CC_CSI2PHY_BCR] = { 0x19048 },
  1928. [CAM_CC_CSI3PHY_BCR] = { 0x1906c },
  1929. [CAM_CC_ICP_BCR] = { 0x20000 },
  1930. [CAM_CC_MCLK0_BCR] = { 0x18000 },
  1931. [CAM_CC_MCLK1_BCR] = { 0x18020 },
  1932. [CAM_CC_MCLK2_BCR] = { 0x18040 },
  1933. [CAM_CC_MCLK3_BCR] = { 0x18060 },
  1934. [CAM_CC_MCLK4_BCR] = { 0x18080 },
  1935. [CAM_CC_OPE_0_BCR] = { 0x1b000 },
  1936. [CAM_CC_TFE_0_BCR] = { 0x1c000 },
  1937. [CAM_CC_TFE_1_BCR] = { 0x1d000 },
  1938. [CAM_CC_TFE_2_BCR] = { 0x1e000 },
  1939. };
  1940. static struct gdsc *cam_cc_milos_gdscs[] = {
  1941. [CAM_CC_CAMSS_TOP_GDSC] = &cam_cc_camss_top_gdsc,
  1942. };
  1943. static struct clk_alpha_pll *cam_cc_milos_plls[] = {
  1944. &cam_cc_pll0,
  1945. &cam_cc_pll1,
  1946. &cam_cc_pll2,
  1947. &cam_cc_pll3,
  1948. &cam_cc_pll4,
  1949. &cam_cc_pll5,
  1950. &cam_cc_pll6,
  1951. };
  1952. static u32 cam_cc_milos_critical_cbcrs[] = {
  1953. 0x25038, /* CAM_CC_GDSC_CLK */
  1954. 0x2505c, /* CAM_CC_SLEEP_CLK */
  1955. };
  1956. static const struct regmap_config cam_cc_milos_regmap_config = {
  1957. .reg_bits = 32,
  1958. .reg_stride = 4,
  1959. .val_bits = 32,
  1960. .max_register = 0x30728,
  1961. .fast_io = true,
  1962. };
  1963. static struct qcom_cc_driver_data cam_cc_milos_driver_data = {
  1964. .alpha_plls = cam_cc_milos_plls,
  1965. .num_alpha_plls = ARRAY_SIZE(cam_cc_milos_plls),
  1966. .clk_cbcrs = cam_cc_milos_critical_cbcrs,
  1967. .num_clk_cbcrs = ARRAY_SIZE(cam_cc_milos_critical_cbcrs),
  1968. };
  1969. static const struct qcom_cc_desc cam_cc_milos_desc = {
  1970. .config = &cam_cc_milos_regmap_config,
  1971. .clks = cam_cc_milos_clocks,
  1972. .num_clks = ARRAY_SIZE(cam_cc_milos_clocks),
  1973. .resets = cam_cc_milos_resets,
  1974. .num_resets = ARRAY_SIZE(cam_cc_milos_resets),
  1975. .gdscs = cam_cc_milos_gdscs,
  1976. .num_gdscs = ARRAY_SIZE(cam_cc_milos_gdscs),
  1977. .use_rpm = true,
  1978. .driver_data = &cam_cc_milos_driver_data,
  1979. };
  1980. static const struct of_device_id cam_cc_milos_match_table[] = {
  1981. { .compatible = "qcom,milos-camcc" },
  1982. { }
  1983. };
  1984. MODULE_DEVICE_TABLE(of, cam_cc_milos_match_table);
  1985. static int cam_cc_milos_probe(struct platform_device *pdev)
  1986. {
  1987. return qcom_cc_probe(pdev, &cam_cc_milos_desc);
  1988. }
  1989. static struct platform_driver cam_cc_milos_driver = {
  1990. .probe = cam_cc_milos_probe,
  1991. .driver = {
  1992. .name = "cam_cc-milos",
  1993. .of_match_table = cam_cc_milos_match_table,
  1994. },
  1995. };
  1996. module_platform_driver(cam_cc_milos_driver);
  1997. MODULE_DESCRIPTION("QTI CAM_CC Milos Driver");
  1998. MODULE_LICENSE("GPL");