camcc-sm7150.c 52 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2018, 2021, The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2024, Danila Tikhonov <danila@jiaxyga.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,sm7150-camcc.h>
  12. #include "clk-alpha-pll.h"
  13. #include "clk-branch.h"
  14. #include "clk-rcg.h"
  15. #include "clk-regmap.h"
  16. #include "common.h"
  17. #include "gdsc.h"
  18. enum {
  19. DT_BI_TCXO,
  20. DT_BI_TCXO_AO,
  21. DT_CHIP_SLEEP_CLK,
  22. };
  23. enum {
  24. P_BI_TCXO,
  25. P_BI_TCXO_MX,
  26. P_CAMCC_PLL0_OUT_EVEN,
  27. P_CAMCC_PLL0_OUT_MAIN,
  28. P_CAMCC_PLL0_OUT_ODD,
  29. P_CAMCC_PLL1_OUT_EVEN,
  30. P_CAMCC_PLL2_OUT_AUX,
  31. P_CAMCC_PLL2_OUT_EARLY,
  32. P_CAMCC_PLL2_OUT_MAIN,
  33. P_CAMCC_PLL3_OUT_EVEN,
  34. P_CAMCC_PLL4_OUT_EVEN,
  35. P_CHIP_SLEEP_CLK,
  36. };
  37. static const struct pll_vco fabia_vco[] = {
  38. { 249600000, 2000000000, 0 },
  39. };
  40. /* 1200MHz configuration */
  41. static const struct alpha_pll_config camcc_pll0_config = {
  42. .l = 0x3e,
  43. .alpha = 0x8000,
  44. .post_div_mask = 0xff << 8,
  45. .post_div_val = 0x31 << 8,
  46. .test_ctl_val = 0x40000000,
  47. };
  48. static struct clk_alpha_pll camcc_pll0 = {
  49. .offset = 0x0,
  50. .vco_table = fabia_vco,
  51. .num_vco = ARRAY_SIZE(fabia_vco),
  52. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  53. .clkr = {
  54. .hw.init = &(const struct clk_init_data) {
  55. .name = "camcc_pll0",
  56. .parent_data = &(const struct clk_parent_data) {
  57. .index = DT_BI_TCXO,
  58. },
  59. .num_parents = 1,
  60. .ops = &clk_alpha_pll_fabia_ops,
  61. },
  62. },
  63. };
  64. static struct clk_fixed_factor camcc_pll0_out_even = {
  65. .mult = 1,
  66. .div = 2,
  67. .hw.init = &(const struct clk_init_data) {
  68. .name = "camcc_pll0_out_even",
  69. .parent_hws = (const struct clk_hw*[]) {
  70. &camcc_pll0.clkr.hw,
  71. },
  72. .num_parents = 1,
  73. .ops = &clk_fixed_factor_ops,
  74. },
  75. };
  76. static struct clk_fixed_factor camcc_pll0_out_odd = {
  77. .mult = 1,
  78. .div = 3,
  79. .hw.init = &(const struct clk_init_data) {
  80. .name = "camcc_pll0_out_odd",
  81. .parent_hws = (const struct clk_hw*[]) {
  82. &camcc_pll0.clkr.hw,
  83. },
  84. .num_parents = 1,
  85. .ops = &clk_fixed_factor_ops,
  86. },
  87. };
  88. /* 680MHz configuration */
  89. static const struct alpha_pll_config camcc_pll1_config = {
  90. .l = 0x23,
  91. .alpha = 0x6aaa,
  92. .post_div_mask = 0xf << 8,
  93. .post_div_val = 0x1 << 8,
  94. .test_ctl_val = 0x40000000,
  95. };
  96. static struct clk_alpha_pll camcc_pll1 = {
  97. .offset = 0x1000,
  98. .vco_table = fabia_vco,
  99. .num_vco = ARRAY_SIZE(fabia_vco),
  100. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  101. .clkr = {
  102. .hw.init = &(const struct clk_init_data) {
  103. .name = "camcc_pll1",
  104. .parent_data = &(const struct clk_parent_data) {
  105. .index = DT_BI_TCXO,
  106. },
  107. .num_parents = 1,
  108. .ops = &clk_alpha_pll_fabia_ops,
  109. },
  110. },
  111. };
  112. static struct clk_fixed_factor camcc_pll1_out_even = {
  113. .mult = 1,
  114. .div = 2,
  115. .hw.init = &(const struct clk_init_data) {
  116. .name = "camcc_pll1_out_even",
  117. .parent_hws = (const struct clk_hw*[]) {
  118. &camcc_pll1.clkr.hw,
  119. },
  120. .num_parents = 1,
  121. .flags = CLK_SET_RATE_PARENT,
  122. .ops = &clk_fixed_factor_ops,
  123. },
  124. };
  125. /* 1920MHz configuration */
  126. static const struct alpha_pll_config camcc_pll2_config = {
  127. .l = 0x64,
  128. .config_ctl_hi_val = 0x400003d6,
  129. .config_ctl_val = 0x20000954,
  130. .user_ctl_val = 0x0000030b,
  131. };
  132. static struct clk_alpha_pll camcc_pll2 = {
  133. .offset = 0x2000,
  134. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  135. .clkr = {
  136. .hw.init = &(const struct clk_init_data) {
  137. .name = "camcc_pll2",
  138. .parent_data = &(const struct clk_parent_data) {
  139. .index = DT_BI_TCXO,
  140. },
  141. .num_parents = 1,
  142. .ops = &clk_alpha_pll_agera_ops,
  143. },
  144. },
  145. };
  146. static struct clk_fixed_factor camcc_pll2_out_early = {
  147. .mult = 1,
  148. .div = 2,
  149. .hw.init = &(const struct clk_init_data) {
  150. .name = "camcc_pll2_out_early",
  151. .parent_hws = (const struct clk_hw*[]) {
  152. &camcc_pll2.clkr.hw,
  153. },
  154. .num_parents = 1,
  155. .ops = &clk_fixed_factor_ops,
  156. },
  157. };
  158. static struct clk_alpha_pll_postdiv camcc_pll2_out_aux = {
  159. .offset = 0x2000,
  160. .post_div_shift = 8,
  161. .width = 2,
  162. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  163. .clkr.hw.init = &(const struct clk_init_data) {
  164. .name = "camcc_pll2_out_aux",
  165. .parent_hws = (const struct clk_hw*[]) {
  166. &camcc_pll2.clkr.hw,
  167. },
  168. .num_parents = 1,
  169. .flags = CLK_SET_RATE_PARENT,
  170. .ops = &clk_alpha_pll_postdiv_ops,
  171. },
  172. };
  173. static struct clk_alpha_pll_postdiv camcc_pll2_out_main = {
  174. .offset = 0x2000,
  175. .post_div_shift = 8,
  176. .width = 2,
  177. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  178. .clkr.hw.init = &(const struct clk_init_data) {
  179. .name = "camcc_pll2_out_main",
  180. .parent_hws = (const struct clk_hw*[]) {
  181. &camcc_pll2.clkr.hw,
  182. },
  183. .num_parents = 1,
  184. .flags = CLK_SET_RATE_PARENT,
  185. .ops = &clk_alpha_pll_postdiv_ops,
  186. },
  187. };
  188. /* 760MHz configuration */
  189. static const struct alpha_pll_config camcc_pll3_config = {
  190. .l = 0x27,
  191. .alpha = 0x9555,
  192. .post_div_mask = 0xf << 8,
  193. .post_div_val = 0x1 << 8,
  194. .test_ctl_val = 0x40000000,
  195. };
  196. static struct clk_alpha_pll camcc_pll3 = {
  197. .offset = 0x3000,
  198. .vco_table = fabia_vco,
  199. .num_vco = ARRAY_SIZE(fabia_vco),
  200. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  201. .clkr = {
  202. .hw.init = &(const struct clk_init_data) {
  203. .name = "camcc_pll3",
  204. .parent_data = &(const struct clk_parent_data) {
  205. .index = DT_BI_TCXO,
  206. },
  207. .num_parents = 1,
  208. .ops = &clk_alpha_pll_fabia_ops,
  209. },
  210. },
  211. };
  212. static struct clk_fixed_factor camcc_pll3_out_even = {
  213. .mult = 1,
  214. .div = 2,
  215. .hw.init = &(const struct clk_init_data) {
  216. .name = "camcc_pll3_out_even",
  217. .parent_hws = (const struct clk_hw*[]) {
  218. &camcc_pll3.clkr.hw,
  219. },
  220. .num_parents = 1,
  221. .flags = CLK_SET_RATE_PARENT,
  222. .ops = &clk_fixed_factor_ops,
  223. },
  224. };
  225. static struct clk_alpha_pll camcc_pll4 = {
  226. .offset = 0x4000,
  227. .vco_table = fabia_vco,
  228. .num_vco = ARRAY_SIZE(fabia_vco),
  229. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
  230. .clkr = {
  231. .hw.init = &(const struct clk_init_data) {
  232. .name = "camcc_pll4",
  233. .parent_data = &(const struct clk_parent_data) {
  234. .index = DT_BI_TCXO,
  235. },
  236. .num_parents = 1,
  237. .ops = &clk_alpha_pll_fabia_ops,
  238. },
  239. },
  240. };
  241. static struct clk_fixed_factor camcc_pll4_out_even = {
  242. .mult = 1,
  243. .div = 2,
  244. .hw.init = &(const struct clk_init_data) {
  245. .name = "camcc_pll4_out_even",
  246. .parent_hws = (const struct clk_hw*[]) {
  247. &camcc_pll4.clkr.hw,
  248. },
  249. .num_parents = 1,
  250. .flags = CLK_SET_RATE_PARENT,
  251. .ops = &clk_fixed_factor_ops,
  252. },
  253. };
  254. static const struct parent_map camcc_parent_map_0[] = {
  255. { P_BI_TCXO, 0 },
  256. { P_CAMCC_PLL0_OUT_MAIN, 1 },
  257. { P_CAMCC_PLL0_OUT_EVEN, 2 },
  258. { P_CAMCC_PLL0_OUT_ODD, 3 },
  259. { P_CAMCC_PLL2_OUT_MAIN, 5 },
  260. };
  261. static const struct clk_parent_data camcc_parent_data_0[] = {
  262. { .index = DT_BI_TCXO },
  263. { .hw = &camcc_pll0.clkr.hw },
  264. { .hw = &camcc_pll0_out_even.hw },
  265. { .hw = &camcc_pll0_out_odd.hw },
  266. { .hw = &camcc_pll2_out_main.clkr.hw },
  267. };
  268. static const struct parent_map camcc_parent_map_1[] = {
  269. { P_BI_TCXO, 0 },
  270. { P_CAMCC_PLL0_OUT_MAIN, 1 },
  271. { P_CAMCC_PLL0_OUT_EVEN, 2 },
  272. { P_CAMCC_PLL0_OUT_ODD, 3 },
  273. { P_CAMCC_PLL1_OUT_EVEN, 4 },
  274. { P_CAMCC_PLL2_OUT_EARLY, 5 },
  275. };
  276. static const struct clk_parent_data camcc_parent_data_1[] = {
  277. { .index = DT_BI_TCXO },
  278. { .hw = &camcc_pll0.clkr.hw },
  279. { .hw = &camcc_pll0_out_even.hw },
  280. { .hw = &camcc_pll0_out_odd.hw },
  281. { .hw = &camcc_pll1_out_even.hw },
  282. { .hw = &camcc_pll2_out_early.hw },
  283. };
  284. static const struct parent_map camcc_parent_map_2[] = {
  285. { P_BI_TCXO_MX, 0 },
  286. { P_CAMCC_PLL2_OUT_AUX, 5 },
  287. };
  288. static const struct clk_parent_data camcc_parent_data_2[] = {
  289. { .index = DT_BI_TCXO },
  290. { .hw = &camcc_pll2_out_aux.clkr.hw },
  291. };
  292. static const struct parent_map camcc_parent_map_3[] = {
  293. { P_BI_TCXO, 0 },
  294. { P_CAMCC_PLL0_OUT_MAIN, 1 },
  295. { P_CAMCC_PLL0_OUT_EVEN, 2 },
  296. { P_CAMCC_PLL0_OUT_ODD, 3 },
  297. { P_CAMCC_PLL2_OUT_EARLY, 5 },
  298. { P_CAMCC_PLL4_OUT_EVEN, 6 },
  299. };
  300. static const struct clk_parent_data camcc_parent_data_3[] = {
  301. { .index = DT_BI_TCXO },
  302. { .hw = &camcc_pll0.clkr.hw },
  303. { .hw = &camcc_pll0_out_even.hw },
  304. { .hw = &camcc_pll0_out_odd.hw },
  305. { .hw = &camcc_pll2_out_early.hw },
  306. { .hw = &camcc_pll4_out_even.hw },
  307. };
  308. static const struct parent_map camcc_parent_map_4[] = {
  309. { P_BI_TCXO, 0 },
  310. { P_CAMCC_PLL3_OUT_EVEN, 6 },
  311. };
  312. static const struct clk_parent_data camcc_parent_data_4[] = {
  313. { .index = DT_BI_TCXO },
  314. { .hw = &camcc_pll3_out_even.hw },
  315. };
  316. static const struct parent_map camcc_parent_map_5[] = {
  317. { P_BI_TCXO, 0 },
  318. { P_CAMCC_PLL4_OUT_EVEN, 6 },
  319. };
  320. static const struct clk_parent_data camcc_parent_data_5[] = {
  321. { .index = DT_BI_TCXO },
  322. { .hw = &camcc_pll4_out_even.hw },
  323. };
  324. static const struct parent_map camcc_parent_map_6[] = {
  325. { P_BI_TCXO, 0 },
  326. { P_CAMCC_PLL1_OUT_EVEN, 4 },
  327. };
  328. static const struct clk_parent_data camcc_parent_data_6[] = {
  329. { .index = DT_BI_TCXO },
  330. { .hw = &camcc_pll1_out_even.hw },
  331. };
  332. static const struct parent_map camcc_parent_map_7[] = {
  333. { P_CHIP_SLEEP_CLK, 0 },
  334. };
  335. static const struct clk_parent_data camcc_parent_data_7[] = {
  336. { .index = DT_CHIP_SLEEP_CLK },
  337. };
  338. static const struct parent_map camcc_parent_map_8[] = {
  339. { P_BI_TCXO, 0 },
  340. { P_CAMCC_PLL0_OUT_ODD, 3 },
  341. };
  342. static const struct clk_parent_data camcc_parent_data_8[] = {
  343. { .index = DT_BI_TCXO },
  344. { .hw = &camcc_pll0_out_odd.hw },
  345. };
  346. static const struct parent_map camcc_parent_map_9[] = {
  347. { P_BI_TCXO, 0 },
  348. };
  349. static const struct clk_parent_data camcc_parent_data_9[] = {
  350. { .index = DT_BI_TCXO_AO },
  351. };
  352. static const struct freq_tbl ftbl_camcc_bps_clk_src[] = {
  353. F(19200000, P_BI_TCXO, 1, 0, 0),
  354. F(100000000, P_CAMCC_PLL0_OUT_EVEN, 6, 0, 0),
  355. F(200000000, P_CAMCC_PLL0_OUT_ODD, 2, 0, 0),
  356. F(400000000, P_CAMCC_PLL0_OUT_ODD, 1, 0, 0),
  357. F(480000000, P_CAMCC_PLL2_OUT_MAIN, 1, 0, 0),
  358. F(600000000, P_CAMCC_PLL0_OUT_MAIN, 2, 0, 0),
  359. { }
  360. };
  361. static struct clk_rcg2 camcc_bps_clk_src = {
  362. .cmd_rcgr = 0x7010,
  363. .mnd_width = 0,
  364. .hid_width = 5,
  365. .parent_map = camcc_parent_map_0,
  366. .freq_tbl = ftbl_camcc_bps_clk_src,
  367. .clkr.hw.init = &(const struct clk_init_data) {
  368. .name = "camcc_bps_clk_src",
  369. .parent_data = camcc_parent_data_0,
  370. .num_parents = ARRAY_SIZE(camcc_parent_data_0),
  371. .ops = &clk_rcg2_shared_ops,
  372. },
  373. };
  374. static const struct freq_tbl ftbl_camcc_camnoc_axi_clk_src[] = {
  375. F(19200000, P_BI_TCXO, 1, 0, 0),
  376. F(150000000, P_CAMCC_PLL0_OUT_EVEN, 4, 0, 0),
  377. F(240000000, P_CAMCC_PLL2_OUT_MAIN, 2, 0, 0),
  378. F(320000000, P_CAMCC_PLL2_OUT_MAIN, 1.5, 0, 0),
  379. F(400000000, P_CAMCC_PLL0_OUT_MAIN, 3, 0, 0),
  380. F(480000000, P_CAMCC_PLL2_OUT_MAIN, 1, 0, 0),
  381. { }
  382. };
  383. static struct clk_rcg2 camcc_camnoc_axi_clk_src = {
  384. .cmd_rcgr = 0xc12c,
  385. .mnd_width = 0,
  386. .hid_width = 5,
  387. .parent_map = camcc_parent_map_0,
  388. .freq_tbl = ftbl_camcc_camnoc_axi_clk_src,
  389. .clkr.hw.init = &(const struct clk_init_data) {
  390. .name = "camcc_camnoc_axi_clk_src",
  391. .parent_data = camcc_parent_data_0,
  392. .num_parents = ARRAY_SIZE(camcc_parent_data_0),
  393. .ops = &clk_rcg2_shared_ops,
  394. },
  395. };
  396. static const struct freq_tbl ftbl_camcc_cci_0_clk_src[] = {
  397. F(19200000, P_BI_TCXO, 1, 0, 0),
  398. F(37500000, P_CAMCC_PLL0_OUT_EVEN, 16, 0, 0),
  399. { }
  400. };
  401. static struct clk_rcg2 camcc_cci_0_clk_src = {
  402. .cmd_rcgr = 0xc0c4,
  403. .mnd_width = 8,
  404. .hid_width = 5,
  405. .parent_map = camcc_parent_map_0,
  406. .freq_tbl = ftbl_camcc_cci_0_clk_src,
  407. .clkr.hw.init = &(const struct clk_init_data) {
  408. .name = "camcc_cci_0_clk_src",
  409. .parent_data = camcc_parent_data_0,
  410. .num_parents = ARRAY_SIZE(camcc_parent_data_0),
  411. .ops = &clk_rcg2_ops,
  412. },
  413. };
  414. static struct clk_rcg2 camcc_cci_1_clk_src = {
  415. .cmd_rcgr = 0xc0e0,
  416. .mnd_width = 8,
  417. .hid_width = 5,
  418. .parent_map = camcc_parent_map_0,
  419. .freq_tbl = ftbl_camcc_cci_0_clk_src,
  420. .clkr.hw.init = &(const struct clk_init_data) {
  421. .name = "camcc_cci_1_clk_src",
  422. .parent_data = camcc_parent_data_0,
  423. .num_parents = ARRAY_SIZE(camcc_parent_data_0),
  424. .ops = &clk_rcg2_ops,
  425. },
  426. };
  427. static const struct freq_tbl ftbl_camcc_cphy_rx_clk_src[] = {
  428. F(19200000, P_BI_TCXO, 1, 0, 0),
  429. F(300000000, P_CAMCC_PLL0_OUT_EVEN, 2, 0, 0),
  430. F(384000000, P_CAMCC_PLL2_OUT_EARLY, 2.5, 0, 0),
  431. F(400000000, P_CAMCC_PLL0_OUT_MAIN, 3, 0, 0),
  432. { }
  433. };
  434. static struct clk_rcg2 camcc_cphy_rx_clk_src = {
  435. .cmd_rcgr = 0xa064,
  436. .mnd_width = 0,
  437. .hid_width = 5,
  438. .parent_map = camcc_parent_map_1,
  439. .freq_tbl = ftbl_camcc_cphy_rx_clk_src,
  440. .clkr.hw.init = &(const struct clk_init_data) {
  441. .name = "camcc_cphy_rx_clk_src",
  442. .parent_data = camcc_parent_data_1,
  443. .num_parents = ARRAY_SIZE(camcc_parent_data_1),
  444. .ops = &clk_rcg2_ops,
  445. },
  446. };
  447. static const struct freq_tbl ftbl_camcc_csi0phytimer_clk_src[] = {
  448. F(19200000, P_BI_TCXO, 1, 0, 0),
  449. F(300000000, P_CAMCC_PLL0_OUT_EVEN, 2, 0, 0),
  450. { }
  451. };
  452. static struct clk_rcg2 camcc_csi0phytimer_clk_src = {
  453. .cmd_rcgr = 0x6004,
  454. .mnd_width = 0,
  455. .hid_width = 5,
  456. .parent_map = camcc_parent_map_0,
  457. .freq_tbl = ftbl_camcc_csi0phytimer_clk_src,
  458. .clkr.hw.init = &(const struct clk_init_data) {
  459. .name = "camcc_csi0phytimer_clk_src",
  460. .parent_data = camcc_parent_data_0,
  461. .num_parents = ARRAY_SIZE(camcc_parent_data_0),
  462. .ops = &clk_rcg2_ops,
  463. },
  464. };
  465. static struct clk_rcg2 camcc_csi1phytimer_clk_src = {
  466. .cmd_rcgr = 0x6028,
  467. .mnd_width = 0,
  468. .hid_width = 5,
  469. .parent_map = camcc_parent_map_0,
  470. .freq_tbl = ftbl_camcc_csi0phytimer_clk_src,
  471. .clkr.hw.init = &(const struct clk_init_data) {
  472. .name = "camcc_csi1phytimer_clk_src",
  473. .parent_data = camcc_parent_data_0,
  474. .num_parents = ARRAY_SIZE(camcc_parent_data_0),
  475. .ops = &clk_rcg2_ops,
  476. },
  477. };
  478. static struct clk_rcg2 camcc_csi2phytimer_clk_src = {
  479. .cmd_rcgr = 0x604c,
  480. .mnd_width = 0,
  481. .hid_width = 5,
  482. .parent_map = camcc_parent_map_0,
  483. .freq_tbl = ftbl_camcc_csi0phytimer_clk_src,
  484. .clkr.hw.init = &(const struct clk_init_data) {
  485. .name = "camcc_csi2phytimer_clk_src",
  486. .parent_data = camcc_parent_data_0,
  487. .num_parents = ARRAY_SIZE(camcc_parent_data_0),
  488. .ops = &clk_rcg2_ops,
  489. },
  490. };
  491. static struct clk_rcg2 camcc_csi3phytimer_clk_src = {
  492. .cmd_rcgr = 0x6070,
  493. .mnd_width = 0,
  494. .hid_width = 5,
  495. .parent_map = camcc_parent_map_0,
  496. .freq_tbl = ftbl_camcc_csi0phytimer_clk_src,
  497. .clkr.hw.init = &(const struct clk_init_data) {
  498. .name = "camcc_csi3phytimer_clk_src",
  499. .parent_data = camcc_parent_data_0,
  500. .num_parents = ARRAY_SIZE(camcc_parent_data_0),
  501. .ops = &clk_rcg2_ops,
  502. },
  503. };
  504. static const struct freq_tbl ftbl_camcc_fast_ahb_clk_src[] = {
  505. F(19200000, P_BI_TCXO, 1, 0, 0),
  506. F(50000000, P_CAMCC_PLL0_OUT_EVEN, 12, 0, 0),
  507. F(100000000, P_CAMCC_PLL0_OUT_EVEN, 6, 0, 0),
  508. F(200000000, P_CAMCC_PLL0_OUT_EVEN, 3, 0, 0),
  509. F(300000000, P_CAMCC_PLL0_OUT_MAIN, 4, 0, 0),
  510. F(400000000, P_CAMCC_PLL0_OUT_MAIN, 3, 0, 0),
  511. { }
  512. };
  513. static struct clk_rcg2 camcc_fast_ahb_clk_src = {
  514. .cmd_rcgr = 0x703c,
  515. .mnd_width = 0,
  516. .hid_width = 5,
  517. .parent_map = camcc_parent_map_0,
  518. .freq_tbl = ftbl_camcc_fast_ahb_clk_src,
  519. .clkr.hw.init = &(const struct clk_init_data) {
  520. .name = "camcc_fast_ahb_clk_src",
  521. .parent_data = camcc_parent_data_0,
  522. .num_parents = ARRAY_SIZE(camcc_parent_data_0),
  523. .ops = &clk_rcg2_ops,
  524. },
  525. };
  526. static const struct freq_tbl ftbl_camcc_fd_core_clk_src[] = {
  527. F(19200000, P_BI_TCXO, 1, 0, 0),
  528. F(380000000, P_CAMCC_PLL4_OUT_EVEN, 1, 0, 0),
  529. F(384000000, P_CAMCC_PLL2_OUT_EARLY, 2.5, 0, 0),
  530. F(400000000, P_CAMCC_PLL0_OUT_MAIN, 3, 0, 0),
  531. F(480000000, P_CAMCC_PLL2_OUT_EARLY, 2, 0, 0),
  532. F(600000000, P_CAMCC_PLL0_OUT_MAIN, 2, 0, 0),
  533. { }
  534. };
  535. static struct clk_rcg2 camcc_fd_core_clk_src = {
  536. .cmd_rcgr = 0xc09c,
  537. .mnd_width = 0,
  538. .hid_width = 5,
  539. .parent_map = camcc_parent_map_3,
  540. .freq_tbl = ftbl_camcc_fd_core_clk_src,
  541. .clkr.hw.init = &(const struct clk_init_data) {
  542. .name = "camcc_fd_core_clk_src",
  543. .parent_data = camcc_parent_data_3,
  544. .num_parents = ARRAY_SIZE(camcc_parent_data_3),
  545. .flags = CLK_SET_RATE_PARENT,
  546. .ops = &clk_rcg2_shared_ops,
  547. },
  548. };
  549. static const struct freq_tbl ftbl_camcc_icp_clk_src[] = {
  550. F(19200000, P_BI_TCXO, 1, 0, 0),
  551. F(400000000, P_CAMCC_PLL0_OUT_ODD, 1, 0, 0),
  552. F(600000000, P_CAMCC_PLL0_OUT_MAIN, 2, 0, 0),
  553. { }
  554. };
  555. static struct clk_rcg2 camcc_icp_clk_src = {
  556. .cmd_rcgr = 0xc074,
  557. .mnd_width = 0,
  558. .hid_width = 5,
  559. .parent_map = camcc_parent_map_0,
  560. .freq_tbl = ftbl_camcc_icp_clk_src,
  561. .clkr.hw.init = &(const struct clk_init_data) {
  562. .name = "camcc_icp_clk_src",
  563. .parent_data = camcc_parent_data_0,
  564. .num_parents = ARRAY_SIZE(camcc_parent_data_0),
  565. .ops = &clk_rcg2_shared_ops,
  566. },
  567. };
  568. static const struct freq_tbl ftbl_camcc_ife_0_clk_src[] = {
  569. F(19200000, P_BI_TCXO, 1, 0, 0),
  570. F(380000000, P_CAMCC_PLL3_OUT_EVEN, 1, 0, 0),
  571. F(510000000, P_CAMCC_PLL3_OUT_EVEN, 1, 0, 0),
  572. F(637000000, P_CAMCC_PLL3_OUT_EVEN, 1, 0, 0),
  573. F(760000000, P_CAMCC_PLL3_OUT_EVEN, 1, 0, 0),
  574. { }
  575. };
  576. static struct clk_rcg2 camcc_ife_0_clk_src = {
  577. .cmd_rcgr = 0xa010,
  578. .mnd_width = 0,
  579. .hid_width = 5,
  580. .parent_map = camcc_parent_map_4,
  581. .freq_tbl = ftbl_camcc_ife_0_clk_src,
  582. .clkr.hw.init = &(const struct clk_init_data) {
  583. .name = "camcc_ife_0_clk_src",
  584. .parent_data = camcc_parent_data_4,
  585. .num_parents = ARRAY_SIZE(camcc_parent_data_4),
  586. .flags = CLK_SET_RATE_PARENT,
  587. .ops = &clk_rcg2_shared_ops,
  588. },
  589. };
  590. static const struct freq_tbl ftbl_camcc_ife_0_csid_clk_src[] = {
  591. F(19200000, P_BI_TCXO, 1, 0, 0),
  592. F(75000000, P_CAMCC_PLL0_OUT_EVEN, 8, 0, 0),
  593. F(300000000, P_CAMCC_PLL0_OUT_EVEN, 2, 0, 0),
  594. F(384000000, P_CAMCC_PLL2_OUT_EARLY, 2.5, 0, 0),
  595. F(400000000, P_CAMCC_PLL0_OUT_MAIN, 3, 0, 0),
  596. { }
  597. };
  598. static struct clk_rcg2 camcc_ife_0_csid_clk_src = {
  599. .cmd_rcgr = 0xa03c,
  600. .mnd_width = 0,
  601. .hid_width = 5,
  602. .parent_map = camcc_parent_map_1,
  603. .freq_tbl = ftbl_camcc_ife_0_csid_clk_src,
  604. .clkr.hw.init = &(const struct clk_init_data) {
  605. .name = "camcc_ife_0_csid_clk_src",
  606. .parent_data = camcc_parent_data_1,
  607. .num_parents = ARRAY_SIZE(camcc_parent_data_1),
  608. .ops = &clk_rcg2_shared_ops,
  609. },
  610. };
  611. static const struct freq_tbl ftbl_camcc_ife_1_clk_src[] = {
  612. F(19200000, P_BI_TCXO, 1, 0, 0),
  613. F(380000000, P_CAMCC_PLL4_OUT_EVEN, 1, 0, 0),
  614. F(510000000, P_CAMCC_PLL4_OUT_EVEN, 1, 0, 0),
  615. F(637000000, P_CAMCC_PLL4_OUT_EVEN, 1, 0, 0),
  616. F(760000000, P_CAMCC_PLL4_OUT_EVEN, 1, 0, 0),
  617. { }
  618. };
  619. static struct clk_rcg2 camcc_ife_1_clk_src = {
  620. .cmd_rcgr = 0xb010,
  621. .mnd_width = 0,
  622. .hid_width = 5,
  623. .parent_map = camcc_parent_map_5,
  624. .freq_tbl = ftbl_camcc_ife_1_clk_src,
  625. .clkr.hw.init = &(const struct clk_init_data) {
  626. .name = "camcc_ife_1_clk_src",
  627. .parent_data = camcc_parent_data_5,
  628. .num_parents = ARRAY_SIZE(camcc_parent_data_5),
  629. .flags = CLK_SET_RATE_PARENT,
  630. .ops = &clk_rcg2_shared_ops,
  631. },
  632. };
  633. static struct clk_rcg2 camcc_ife_1_csid_clk_src = {
  634. .cmd_rcgr = 0xb034,
  635. .mnd_width = 0,
  636. .hid_width = 5,
  637. .parent_map = camcc_parent_map_1,
  638. .freq_tbl = ftbl_camcc_ife_0_csid_clk_src,
  639. .clkr.hw.init = &(const struct clk_init_data) {
  640. .name = "camcc_ife_1_csid_clk_src",
  641. .parent_data = camcc_parent_data_1,
  642. .num_parents = ARRAY_SIZE(camcc_parent_data_1),
  643. .ops = &clk_rcg2_shared_ops,
  644. },
  645. };
  646. static const struct freq_tbl ftbl_camcc_ife_lite_clk_src[] = {
  647. F(19200000, P_BI_TCXO, 1, 0, 0),
  648. F(320000000, P_CAMCC_PLL2_OUT_MAIN, 1.5, 0, 0),
  649. F(400000000, P_CAMCC_PLL0_OUT_ODD, 1, 0, 0),
  650. F(480000000, P_CAMCC_PLL2_OUT_MAIN, 1, 0, 0),
  651. F(600000000, P_CAMCC_PLL0_OUT_MAIN, 2, 0, 0),
  652. { }
  653. };
  654. static struct clk_rcg2 camcc_ife_lite_clk_src = {
  655. .cmd_rcgr = 0xc004,
  656. .mnd_width = 0,
  657. .hid_width = 5,
  658. .parent_map = camcc_parent_map_0,
  659. .freq_tbl = ftbl_camcc_ife_lite_clk_src,
  660. .clkr.hw.init = &(const struct clk_init_data) {
  661. .name = "camcc_ife_lite_clk_src",
  662. .parent_data = camcc_parent_data_0,
  663. .num_parents = ARRAY_SIZE(camcc_parent_data_0),
  664. .ops = &clk_rcg2_ops,
  665. },
  666. };
  667. static struct clk_rcg2 camcc_ife_lite_csid_clk_src = {
  668. .cmd_rcgr = 0xc020,
  669. .mnd_width = 0,
  670. .hid_width = 5,
  671. .parent_map = camcc_parent_map_1,
  672. .freq_tbl = ftbl_camcc_cphy_rx_clk_src,
  673. .clkr.hw.init = &(const struct clk_init_data) {
  674. .name = "camcc_ife_lite_csid_clk_src",
  675. .parent_data = camcc_parent_data_1,
  676. .num_parents = ARRAY_SIZE(camcc_parent_data_1),
  677. .ops = &clk_rcg2_shared_ops,
  678. },
  679. };
  680. static const struct freq_tbl ftbl_camcc_ipe_0_clk_src[] = {
  681. F(19200000, P_BI_TCXO, 1, 0, 0),
  682. F(340000000, P_CAMCC_PLL1_OUT_EVEN, 1, 0, 0),
  683. F(430000000, P_CAMCC_PLL1_OUT_EVEN, 1, 0, 0),
  684. F(520000000, P_CAMCC_PLL1_OUT_EVEN, 1, 0, 0),
  685. F(600000000, P_CAMCC_PLL1_OUT_EVEN, 1, 0, 0),
  686. { }
  687. };
  688. static struct clk_rcg2 camcc_ipe_0_clk_src = {
  689. .cmd_rcgr = 0x8010,
  690. .mnd_width = 0,
  691. .hid_width = 5,
  692. .parent_map = camcc_parent_map_6,
  693. .freq_tbl = ftbl_camcc_ipe_0_clk_src,
  694. .clkr.hw.init = &(const struct clk_init_data) {
  695. .name = "camcc_ipe_0_clk_src",
  696. .parent_data = camcc_parent_data_6,
  697. .num_parents = ARRAY_SIZE(camcc_parent_data_6),
  698. .flags = CLK_SET_RATE_PARENT,
  699. .ops = &clk_rcg2_shared_ops,
  700. },
  701. };
  702. static struct clk_rcg2 camcc_jpeg_clk_src = {
  703. .cmd_rcgr = 0xc048,
  704. .mnd_width = 0,
  705. .hid_width = 5,
  706. .parent_map = camcc_parent_map_0,
  707. .freq_tbl = ftbl_camcc_bps_clk_src,
  708. .clkr.hw.init = &(const struct clk_init_data) {
  709. .name = "camcc_jpeg_clk_src",
  710. .parent_data = camcc_parent_data_0,
  711. .num_parents = ARRAY_SIZE(camcc_parent_data_0),
  712. .ops = &clk_rcg2_shared_ops,
  713. },
  714. };
  715. static const struct freq_tbl ftbl_camcc_lrme_clk_src[] = {
  716. F(19200000, P_BI_TCXO, 1, 0, 0),
  717. F(100000000, P_CAMCC_PLL0_OUT_EVEN, 6, 0, 0),
  718. F(240000000, P_CAMCC_PLL2_OUT_MAIN, 2, 0, 0),
  719. F(300000000, P_CAMCC_PLL0_OUT_EVEN, 2, 0, 0),
  720. F(320000000, P_CAMCC_PLL2_OUT_MAIN, 1.5, 0, 0),
  721. F(400000000, P_CAMCC_PLL0_OUT_MAIN, 3, 0, 0),
  722. { }
  723. };
  724. static struct clk_rcg2 camcc_lrme_clk_src = {
  725. .cmd_rcgr = 0xc100,
  726. .mnd_width = 0,
  727. .hid_width = 5,
  728. .parent_map = camcc_parent_map_0,
  729. .freq_tbl = ftbl_camcc_lrme_clk_src,
  730. .clkr.hw.init = &(const struct clk_init_data) {
  731. .name = "camcc_lrme_clk_src",
  732. .parent_data = camcc_parent_data_0,
  733. .num_parents = ARRAY_SIZE(camcc_parent_data_0),
  734. .ops = &clk_rcg2_shared_ops,
  735. },
  736. };
  737. static const struct freq_tbl ftbl_camcc_mclk0_clk_src[] = {
  738. F(19200000, P_BI_TCXO_MX, 1, 0, 0),
  739. F(24000000, P_CAMCC_PLL2_OUT_AUX, 1, 1, 20),
  740. F(34285714, P_CAMCC_PLL2_OUT_AUX, 14, 0, 0),
  741. { }
  742. };
  743. static struct clk_rcg2 camcc_mclk0_clk_src = {
  744. .cmd_rcgr = 0x5004,
  745. .mnd_width = 8,
  746. .hid_width = 5,
  747. .parent_map = camcc_parent_map_2,
  748. .freq_tbl = ftbl_camcc_mclk0_clk_src,
  749. .clkr.hw.init = &(const struct clk_init_data) {
  750. .name = "camcc_mclk0_clk_src",
  751. .parent_data = camcc_parent_data_2,
  752. .num_parents = ARRAY_SIZE(camcc_parent_data_2),
  753. .ops = &clk_rcg2_ops,
  754. },
  755. };
  756. static struct clk_rcg2 camcc_mclk1_clk_src = {
  757. .cmd_rcgr = 0x5024,
  758. .mnd_width = 8,
  759. .hid_width = 5,
  760. .parent_map = camcc_parent_map_2,
  761. .freq_tbl = ftbl_camcc_mclk0_clk_src,
  762. .clkr.hw.init = &(const struct clk_init_data) {
  763. .name = "camcc_mclk1_clk_src",
  764. .parent_data = camcc_parent_data_2,
  765. .num_parents = ARRAY_SIZE(camcc_parent_data_2),
  766. .ops = &clk_rcg2_ops,
  767. },
  768. };
  769. static struct clk_rcg2 camcc_mclk2_clk_src = {
  770. .cmd_rcgr = 0x5044,
  771. .mnd_width = 8,
  772. .hid_width = 5,
  773. .parent_map = camcc_parent_map_2,
  774. .freq_tbl = ftbl_camcc_mclk0_clk_src,
  775. .clkr.hw.init = &(const struct clk_init_data) {
  776. .name = "camcc_mclk2_clk_src",
  777. .parent_data = camcc_parent_data_2,
  778. .num_parents = ARRAY_SIZE(camcc_parent_data_2),
  779. .ops = &clk_rcg2_ops,
  780. },
  781. };
  782. static struct clk_rcg2 camcc_mclk3_clk_src = {
  783. .cmd_rcgr = 0x5064,
  784. .mnd_width = 8,
  785. .hid_width = 5,
  786. .parent_map = camcc_parent_map_2,
  787. .freq_tbl = ftbl_camcc_mclk0_clk_src,
  788. .clkr.hw.init = &(const struct clk_init_data) {
  789. .name = "camcc_mclk3_clk_src",
  790. .parent_data = camcc_parent_data_2,
  791. .num_parents = ARRAY_SIZE(camcc_parent_data_2),
  792. .ops = &clk_rcg2_ops,
  793. },
  794. };
  795. static const struct freq_tbl ftbl_camcc_sleep_clk_src[] = {
  796. F(32000, P_CHIP_SLEEP_CLK, 1, 0, 0),
  797. { }
  798. };
  799. static struct clk_rcg2 camcc_sleep_clk_src = {
  800. .cmd_rcgr = 0xc1a4,
  801. .mnd_width = 0,
  802. .hid_width = 5,
  803. .parent_map = camcc_parent_map_7,
  804. .freq_tbl = ftbl_camcc_sleep_clk_src,
  805. .clkr.hw.init = &(const struct clk_init_data) {
  806. .name = "camcc_sleep_clk_src",
  807. .parent_data = camcc_parent_data_7,
  808. .num_parents = ARRAY_SIZE(camcc_parent_data_7),
  809. .ops = &clk_rcg2_ops,
  810. },
  811. };
  812. static const struct freq_tbl ftbl_camcc_slow_ahb_clk_src[] = {
  813. F(19200000, P_BI_TCXO, 1, 0, 0),
  814. F(80000000, P_CAMCC_PLL0_OUT_ODD, 5, 0, 0),
  815. { }
  816. };
  817. static struct clk_rcg2 camcc_slow_ahb_clk_src = {
  818. .cmd_rcgr = 0x7058,
  819. .mnd_width = 0,
  820. .hid_width = 5,
  821. .parent_map = camcc_parent_map_8,
  822. .freq_tbl = ftbl_camcc_slow_ahb_clk_src,
  823. .clkr.hw.init = &(const struct clk_init_data) {
  824. .name = "camcc_slow_ahb_clk_src",
  825. .parent_data = camcc_parent_data_8,
  826. .num_parents = ARRAY_SIZE(camcc_parent_data_8),
  827. .ops = &clk_rcg2_shared_ops,
  828. },
  829. };
  830. static const struct freq_tbl ftbl_camcc_xo_clk_src[] = {
  831. F(19200000, P_BI_TCXO, 1, 0, 0),
  832. { }
  833. };
  834. static struct clk_rcg2 camcc_xo_clk_src = {
  835. .cmd_rcgr = 0xc188,
  836. .mnd_width = 0,
  837. .hid_width = 5,
  838. .parent_map = camcc_parent_map_9,
  839. .freq_tbl = ftbl_camcc_xo_clk_src,
  840. .clkr.hw.init = &(const struct clk_init_data) {
  841. .name = "camcc_xo_clk_src",
  842. .parent_data = camcc_parent_data_9,
  843. .num_parents = ARRAY_SIZE(camcc_parent_data_9),
  844. .ops = &clk_rcg2_ops,
  845. },
  846. };
  847. static struct clk_branch camcc_bps_ahb_clk = {
  848. .halt_reg = 0x7070,
  849. .halt_check = BRANCH_HALT,
  850. .clkr = {
  851. .enable_reg = 0x7070,
  852. .enable_mask = BIT(0),
  853. .hw.init = &(const struct clk_init_data) {
  854. .name = "camcc_bps_ahb_clk",
  855. .parent_hws = (const struct clk_hw*[]) {
  856. &camcc_slow_ahb_clk_src.clkr.hw,
  857. },
  858. .num_parents = 1,
  859. .flags = CLK_SET_RATE_PARENT,
  860. .ops = &clk_branch2_ops,
  861. },
  862. },
  863. };
  864. static struct clk_branch camcc_bps_areg_clk = {
  865. .halt_reg = 0x7054,
  866. .halt_check = BRANCH_HALT,
  867. .clkr = {
  868. .enable_reg = 0x7054,
  869. .enable_mask = BIT(0),
  870. .hw.init = &(const struct clk_init_data) {
  871. .name = "camcc_bps_areg_clk",
  872. .parent_hws = (const struct clk_hw*[]) {
  873. &camcc_fast_ahb_clk_src.clkr.hw,
  874. },
  875. .num_parents = 1,
  876. .flags = CLK_SET_RATE_PARENT,
  877. .ops = &clk_branch2_ops,
  878. },
  879. },
  880. };
  881. static struct clk_branch camcc_bps_axi_clk = {
  882. .halt_reg = 0x7038,
  883. .halt_check = BRANCH_HALT,
  884. .clkr = {
  885. .enable_reg = 0x7038,
  886. .enable_mask = BIT(0),
  887. .hw.init = &(const struct clk_init_data) {
  888. .name = "camcc_bps_axi_clk",
  889. .parent_hws = (const struct clk_hw*[]) {
  890. &camcc_camnoc_axi_clk_src.clkr.hw,
  891. },
  892. .num_parents = 1,
  893. .flags = CLK_SET_RATE_PARENT,
  894. .ops = &clk_branch2_ops,
  895. },
  896. },
  897. };
  898. static struct clk_branch camcc_bps_clk = {
  899. .halt_reg = 0x7028,
  900. .halt_check = BRANCH_HALT,
  901. .clkr = {
  902. .enable_reg = 0x7028,
  903. .enable_mask = BIT(0),
  904. .hw.init = &(const struct clk_init_data) {
  905. .name = "camcc_bps_clk",
  906. .parent_hws = (const struct clk_hw*[]) {
  907. &camcc_bps_clk_src.clkr.hw,
  908. },
  909. .num_parents = 1,
  910. .flags = CLK_SET_RATE_PARENT,
  911. .ops = &clk_branch2_ops,
  912. },
  913. },
  914. };
  915. static struct clk_branch camcc_camnoc_axi_clk = {
  916. .halt_reg = 0xc148,
  917. .halt_check = BRANCH_HALT,
  918. .clkr = {
  919. .enable_reg = 0xc148,
  920. .enable_mask = BIT(0),
  921. .hw.init = &(const struct clk_init_data) {
  922. .name = "camcc_camnoc_axi_clk",
  923. .parent_hws = (const struct clk_hw*[]) {
  924. &camcc_camnoc_axi_clk_src.clkr.hw,
  925. },
  926. .num_parents = 1,
  927. .flags = CLK_SET_RATE_PARENT,
  928. .ops = &clk_branch2_ops,
  929. },
  930. },
  931. };
  932. static struct clk_branch camcc_camnoc_dcd_xo_clk = {
  933. .halt_reg = 0xc150,
  934. .halt_check = BRANCH_HALT,
  935. .clkr = {
  936. .enable_reg = 0xc150,
  937. .enable_mask = BIT(0),
  938. .hw.init = &(const struct clk_init_data) {
  939. .name = "camcc_camnoc_dcd_xo_clk",
  940. .parent_hws = (const struct clk_hw*[]) {
  941. &camcc_xo_clk_src.clkr.hw,
  942. },
  943. .num_parents = 1,
  944. .flags = CLK_SET_RATE_PARENT,
  945. .ops = &clk_branch2_ops,
  946. },
  947. },
  948. };
  949. static struct clk_branch camcc_cci_0_clk = {
  950. .halt_reg = 0xc0dc,
  951. .halt_check = BRANCH_HALT,
  952. .clkr = {
  953. .enable_reg = 0xc0dc,
  954. .enable_mask = BIT(0),
  955. .hw.init = &(const struct clk_init_data) {
  956. .name = "camcc_cci_0_clk",
  957. .parent_hws = (const struct clk_hw*[]) {
  958. &camcc_cci_0_clk_src.clkr.hw,
  959. },
  960. .num_parents = 1,
  961. .flags = CLK_SET_RATE_PARENT,
  962. .ops = &clk_branch2_ops,
  963. },
  964. },
  965. };
  966. static struct clk_branch camcc_cci_1_clk = {
  967. .halt_reg = 0xc0f8,
  968. .halt_check = BRANCH_HALT,
  969. .clkr = {
  970. .enable_reg = 0xc0f8,
  971. .enable_mask = BIT(0),
  972. .hw.init = &(const struct clk_init_data) {
  973. .name = "camcc_cci_1_clk",
  974. .parent_hws = (const struct clk_hw*[]) {
  975. &camcc_cci_1_clk_src.clkr.hw,
  976. },
  977. .num_parents = 1,
  978. .flags = CLK_SET_RATE_PARENT,
  979. .ops = &clk_branch2_ops,
  980. },
  981. },
  982. };
  983. static struct clk_branch camcc_core_ahb_clk = {
  984. .halt_reg = 0xc184,
  985. .halt_check = BRANCH_HALT_DELAY,
  986. .clkr = {
  987. .enable_reg = 0xc184,
  988. .enable_mask = BIT(0),
  989. .hw.init = &(const struct clk_init_data) {
  990. .name = "camcc_core_ahb_clk",
  991. .parent_hws = (const struct clk_hw*[]) {
  992. &camcc_slow_ahb_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 camcc_cpas_ahb_clk = {
  1001. .halt_reg = 0xc124,
  1002. .halt_check = BRANCH_HALT,
  1003. .clkr = {
  1004. .enable_reg = 0xc124,
  1005. .enable_mask = BIT(0),
  1006. .hw.init = &(const struct clk_init_data) {
  1007. .name = "camcc_cpas_ahb_clk",
  1008. .parent_hws = (const struct clk_hw*[]) {
  1009. &camcc_slow_ahb_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 camcc_csi0phytimer_clk = {
  1018. .halt_reg = 0x601c,
  1019. .halt_check = BRANCH_HALT,
  1020. .clkr = {
  1021. .enable_reg = 0x601c,
  1022. .enable_mask = BIT(0),
  1023. .hw.init = &(const struct clk_init_data) {
  1024. .name = "camcc_csi0phytimer_clk",
  1025. .parent_hws = (const struct clk_hw*[]) {
  1026. &camcc_csi0phytimer_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 camcc_csi1phytimer_clk = {
  1035. .halt_reg = 0x6040,
  1036. .halt_check = BRANCH_HALT,
  1037. .clkr = {
  1038. .enable_reg = 0x6040,
  1039. .enable_mask = BIT(0),
  1040. .hw.init = &(const struct clk_init_data) {
  1041. .name = "camcc_csi1phytimer_clk",
  1042. .parent_hws = (const struct clk_hw*[]) {
  1043. &camcc_csi1phytimer_clk_src.clkr.hw,
  1044. },
  1045. .num_parents = 1,
  1046. .flags = CLK_SET_RATE_PARENT,
  1047. .ops = &clk_branch2_ops,
  1048. },
  1049. },
  1050. };
  1051. static struct clk_branch camcc_csi2phytimer_clk = {
  1052. .halt_reg = 0x6064,
  1053. .halt_check = BRANCH_HALT,
  1054. .clkr = {
  1055. .enable_reg = 0x6064,
  1056. .enable_mask = BIT(0),
  1057. .hw.init = &(const struct clk_init_data) {
  1058. .name = "camcc_csi2phytimer_clk",
  1059. .parent_hws = (const struct clk_hw*[]) {
  1060. &camcc_csi2phytimer_clk_src.clkr.hw,
  1061. },
  1062. .num_parents = 1,
  1063. .flags = CLK_SET_RATE_PARENT,
  1064. .ops = &clk_branch2_ops,
  1065. },
  1066. },
  1067. };
  1068. static struct clk_branch camcc_csi3phytimer_clk = {
  1069. .halt_reg = 0x6088,
  1070. .halt_check = BRANCH_HALT,
  1071. .clkr = {
  1072. .enable_reg = 0x6088,
  1073. .enable_mask = BIT(0),
  1074. .hw.init = &(const struct clk_init_data) {
  1075. .name = "camcc_csi3phytimer_clk",
  1076. .parent_hws = (const struct clk_hw*[]) {
  1077. &camcc_csi3phytimer_clk_src.clkr.hw,
  1078. },
  1079. .num_parents = 1,
  1080. .flags = CLK_SET_RATE_PARENT,
  1081. .ops = &clk_branch2_ops,
  1082. },
  1083. },
  1084. };
  1085. static struct clk_branch camcc_csiphy0_clk = {
  1086. .halt_reg = 0x6020,
  1087. .halt_check = BRANCH_HALT,
  1088. .clkr = {
  1089. .enable_reg = 0x6020,
  1090. .enable_mask = BIT(0),
  1091. .hw.init = &(const struct clk_init_data) {
  1092. .name = "camcc_csiphy0_clk",
  1093. .parent_hws = (const struct clk_hw*[]) {
  1094. &camcc_cphy_rx_clk_src.clkr.hw,
  1095. },
  1096. .num_parents = 1,
  1097. .flags = CLK_SET_RATE_PARENT,
  1098. .ops = &clk_branch2_ops,
  1099. },
  1100. },
  1101. };
  1102. static struct clk_branch camcc_csiphy1_clk = {
  1103. .halt_reg = 0x6044,
  1104. .halt_check = BRANCH_HALT,
  1105. .clkr = {
  1106. .enable_reg = 0x6044,
  1107. .enable_mask = BIT(0),
  1108. .hw.init = &(const struct clk_init_data) {
  1109. .name = "camcc_csiphy1_clk",
  1110. .parent_hws = (const struct clk_hw*[]) {
  1111. &camcc_cphy_rx_clk_src.clkr.hw,
  1112. },
  1113. .num_parents = 1,
  1114. .flags = CLK_SET_RATE_PARENT,
  1115. .ops = &clk_branch2_ops,
  1116. },
  1117. },
  1118. };
  1119. static struct clk_branch camcc_csiphy2_clk = {
  1120. .halt_reg = 0x6068,
  1121. .halt_check = BRANCH_HALT,
  1122. .clkr = {
  1123. .enable_reg = 0x6068,
  1124. .enable_mask = BIT(0),
  1125. .hw.init = &(const struct clk_init_data) {
  1126. .name = "camcc_csiphy2_clk",
  1127. .parent_hws = (const struct clk_hw*[]) {
  1128. &camcc_cphy_rx_clk_src.clkr.hw,
  1129. },
  1130. .num_parents = 1,
  1131. .flags = CLK_SET_RATE_PARENT,
  1132. .ops = &clk_branch2_ops,
  1133. },
  1134. },
  1135. };
  1136. static struct clk_branch camcc_csiphy3_clk = {
  1137. .halt_reg = 0x608c,
  1138. .halt_check = BRANCH_HALT,
  1139. .clkr = {
  1140. .enable_reg = 0x608c,
  1141. .enable_mask = BIT(0),
  1142. .hw.init = &(const struct clk_init_data) {
  1143. .name = "camcc_csiphy3_clk",
  1144. .parent_hws = (const struct clk_hw*[]) {
  1145. &camcc_cphy_rx_clk_src.clkr.hw,
  1146. },
  1147. .num_parents = 1,
  1148. .flags = CLK_SET_RATE_PARENT,
  1149. .ops = &clk_branch2_ops,
  1150. },
  1151. },
  1152. };
  1153. static struct clk_branch camcc_fd_core_clk = {
  1154. .halt_reg = 0xc0b4,
  1155. .halt_check = BRANCH_HALT,
  1156. .clkr = {
  1157. .enable_reg = 0xc0b4,
  1158. .enable_mask = BIT(0),
  1159. .hw.init = &(const struct clk_init_data) {
  1160. .name = "camcc_fd_core_clk",
  1161. .parent_hws = (const struct clk_hw*[]) {
  1162. &camcc_fd_core_clk_src.clkr.hw,
  1163. },
  1164. .num_parents = 1,
  1165. .flags = CLK_SET_RATE_PARENT,
  1166. .ops = &clk_branch2_ops,
  1167. },
  1168. },
  1169. };
  1170. static struct clk_branch camcc_fd_core_uar_clk = {
  1171. .halt_reg = 0xc0bc,
  1172. .halt_check = BRANCH_HALT,
  1173. .clkr = {
  1174. .enable_reg = 0xc0bc,
  1175. .enable_mask = BIT(0),
  1176. .hw.init = &(const struct clk_init_data) {
  1177. .name = "camcc_fd_core_uar_clk",
  1178. .parent_hws = (const struct clk_hw*[]) {
  1179. &camcc_fd_core_clk_src.clkr.hw,
  1180. },
  1181. .num_parents = 1,
  1182. .flags = CLK_SET_RATE_PARENT,
  1183. .ops = &clk_branch2_ops,
  1184. },
  1185. },
  1186. };
  1187. static struct clk_branch camcc_icp_ahb_clk = {
  1188. .halt_reg = 0xc094,
  1189. .halt_check = BRANCH_HALT,
  1190. .clkr = {
  1191. .enable_reg = 0xc094,
  1192. .enable_mask = BIT(0),
  1193. .hw.init = &(const struct clk_init_data) {
  1194. .name = "camcc_icp_ahb_clk",
  1195. .parent_hws = (const struct clk_hw*[]) {
  1196. &camcc_slow_ahb_clk_src.clkr.hw,
  1197. },
  1198. .num_parents = 1,
  1199. .flags = CLK_SET_RATE_PARENT,
  1200. .ops = &clk_branch2_ops,
  1201. },
  1202. },
  1203. };
  1204. static struct clk_branch camcc_icp_clk = {
  1205. .halt_reg = 0xc08c,
  1206. .halt_check = BRANCH_HALT,
  1207. .clkr = {
  1208. .enable_reg = 0xc08c,
  1209. .enable_mask = BIT(0),
  1210. .hw.init = &(const struct clk_init_data) {
  1211. .name = "camcc_icp_clk",
  1212. .parent_hws = (const struct clk_hw*[]) {
  1213. &camcc_icp_clk_src.clkr.hw,
  1214. },
  1215. .num_parents = 1,
  1216. .flags = CLK_SET_RATE_PARENT,
  1217. .ops = &clk_branch2_ops,
  1218. },
  1219. },
  1220. };
  1221. static struct clk_branch camcc_ife_0_axi_clk = {
  1222. .halt_reg = 0xa080,
  1223. .halt_check = BRANCH_HALT,
  1224. .clkr = {
  1225. .enable_reg = 0xa080,
  1226. .enable_mask = BIT(0),
  1227. .hw.init = &(const struct clk_init_data) {
  1228. .name = "camcc_ife_0_axi_clk",
  1229. .parent_hws = (const struct clk_hw*[]) {
  1230. &camcc_camnoc_axi_clk_src.clkr.hw,
  1231. },
  1232. .num_parents = 1,
  1233. .flags = CLK_SET_RATE_PARENT,
  1234. .ops = &clk_branch2_ops,
  1235. },
  1236. },
  1237. };
  1238. static struct clk_branch camcc_ife_0_clk = {
  1239. .halt_reg = 0xa028,
  1240. .halt_check = BRANCH_HALT,
  1241. .clkr = {
  1242. .enable_reg = 0xa028,
  1243. .enable_mask = BIT(0),
  1244. .hw.init = &(const struct clk_init_data) {
  1245. .name = "camcc_ife_0_clk",
  1246. .parent_hws = (const struct clk_hw*[]) {
  1247. &camcc_ife_0_clk_src.clkr.hw,
  1248. },
  1249. .num_parents = 1,
  1250. .flags = CLK_SET_RATE_PARENT,
  1251. .ops = &clk_branch2_ops,
  1252. },
  1253. },
  1254. };
  1255. static struct clk_branch camcc_ife_0_cphy_rx_clk = {
  1256. .halt_reg = 0xa07c,
  1257. .halt_check = BRANCH_HALT,
  1258. .clkr = {
  1259. .enable_reg = 0xa07c,
  1260. .enable_mask = BIT(0),
  1261. .hw.init = &(const struct clk_init_data) {
  1262. .name = "camcc_ife_0_cphy_rx_clk",
  1263. .parent_hws = (const struct clk_hw*[]) {
  1264. &camcc_cphy_rx_clk_src.clkr.hw,
  1265. },
  1266. .num_parents = 1,
  1267. .flags = CLK_SET_RATE_PARENT,
  1268. .ops = &clk_branch2_ops,
  1269. },
  1270. },
  1271. };
  1272. static struct clk_branch camcc_ife_0_csid_clk = {
  1273. .halt_reg = 0xa054,
  1274. .halt_check = BRANCH_HALT,
  1275. .clkr = {
  1276. .enable_reg = 0xa054,
  1277. .enable_mask = BIT(0),
  1278. .hw.init = &(const struct clk_init_data) {
  1279. .name = "camcc_ife_0_csid_clk",
  1280. .parent_hws = (const struct clk_hw*[]) {
  1281. &camcc_ife_0_csid_clk_src.clkr.hw,
  1282. },
  1283. .num_parents = 1,
  1284. .flags = CLK_SET_RATE_PARENT,
  1285. .ops = &clk_branch2_ops,
  1286. },
  1287. },
  1288. };
  1289. static struct clk_branch camcc_ife_0_dsp_clk = {
  1290. .halt_reg = 0xa038,
  1291. .halt_check = BRANCH_HALT,
  1292. .clkr = {
  1293. .enable_reg = 0xa038,
  1294. .enable_mask = BIT(0),
  1295. .hw.init = &(const struct clk_init_data) {
  1296. .name = "camcc_ife_0_dsp_clk",
  1297. .parent_hws = (const struct clk_hw*[]) {
  1298. &camcc_ife_0_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 camcc_ife_1_axi_clk = {
  1307. .halt_reg = 0xb058,
  1308. .halt_check = BRANCH_HALT,
  1309. .clkr = {
  1310. .enable_reg = 0xb058,
  1311. .enable_mask = BIT(0),
  1312. .hw.init = &(const struct clk_init_data) {
  1313. .name = "camcc_ife_1_axi_clk",
  1314. .parent_hws = (const struct clk_hw*[]) {
  1315. &camcc_camnoc_axi_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 camcc_ife_1_clk = {
  1324. .halt_reg = 0xb028,
  1325. .halt_check = BRANCH_HALT,
  1326. .clkr = {
  1327. .enable_reg = 0xb028,
  1328. .enable_mask = BIT(0),
  1329. .hw.init = &(const struct clk_init_data) {
  1330. .name = "camcc_ife_1_clk",
  1331. .parent_hws = (const struct clk_hw*[]) {
  1332. &camcc_ife_1_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 camcc_ife_1_cphy_rx_clk = {
  1341. .halt_reg = 0xb054,
  1342. .halt_check = BRANCH_HALT,
  1343. .clkr = {
  1344. .enable_reg = 0xb054,
  1345. .enable_mask = BIT(0),
  1346. .hw.init = &(const struct clk_init_data) {
  1347. .name = "camcc_ife_1_cphy_rx_clk",
  1348. .parent_hws = (const struct clk_hw*[]) {
  1349. &camcc_cphy_rx_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 camcc_ife_1_csid_clk = {
  1358. .halt_reg = 0xb04c,
  1359. .halt_check = BRANCH_HALT,
  1360. .clkr = {
  1361. .enable_reg = 0xb04c,
  1362. .enable_mask = BIT(0),
  1363. .hw.init = &(const struct clk_init_data) {
  1364. .name = "camcc_ife_1_csid_clk",
  1365. .parent_hws = (const struct clk_hw*[]) {
  1366. &camcc_ife_1_csid_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 camcc_ife_1_dsp_clk = {
  1375. .halt_reg = 0xb030,
  1376. .halt_check = BRANCH_HALT,
  1377. .clkr = {
  1378. .enable_reg = 0xb030,
  1379. .enable_mask = BIT(0),
  1380. .hw.init = &(const struct clk_init_data) {
  1381. .name = "camcc_ife_1_dsp_clk",
  1382. .parent_hws = (const struct clk_hw*[]) {
  1383. &camcc_ife_1_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 camcc_ife_lite_clk = {
  1392. .halt_reg = 0xc01c,
  1393. .halt_check = BRANCH_HALT,
  1394. .clkr = {
  1395. .enable_reg = 0xc01c,
  1396. .enable_mask = BIT(0),
  1397. .hw.init = &(const struct clk_init_data) {
  1398. .name = "camcc_ife_lite_clk",
  1399. .parent_hws = (const struct clk_hw*[]) {
  1400. &camcc_ife_lite_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 camcc_ife_lite_cphy_rx_clk = {
  1409. .halt_reg = 0xc040,
  1410. .halt_check = BRANCH_HALT,
  1411. .clkr = {
  1412. .enable_reg = 0xc040,
  1413. .enable_mask = BIT(0),
  1414. .hw.init = &(const struct clk_init_data) {
  1415. .name = "camcc_ife_lite_cphy_rx_clk",
  1416. .parent_hws = (const struct clk_hw*[]) {
  1417. &camcc_cphy_rx_clk_src.clkr.hw,
  1418. },
  1419. .num_parents = 1,
  1420. .flags = CLK_SET_RATE_PARENT,
  1421. .ops = &clk_branch2_ops,
  1422. },
  1423. },
  1424. };
  1425. static struct clk_branch camcc_ife_lite_csid_clk = {
  1426. .halt_reg = 0xc038,
  1427. .halt_check = BRANCH_HALT,
  1428. .clkr = {
  1429. .enable_reg = 0xc038,
  1430. .enable_mask = BIT(0),
  1431. .hw.init = &(const struct clk_init_data) {
  1432. .name = "camcc_ife_lite_csid_clk",
  1433. .parent_hws = (const struct clk_hw*[]) {
  1434. &camcc_ife_lite_csid_clk_src.clkr.hw,
  1435. },
  1436. .num_parents = 1,
  1437. .flags = CLK_SET_RATE_PARENT,
  1438. .ops = &clk_branch2_ops,
  1439. },
  1440. },
  1441. };
  1442. static struct clk_branch camcc_ipe_0_ahb_clk = {
  1443. .halt_reg = 0x8040,
  1444. .halt_check = BRANCH_HALT,
  1445. .clkr = {
  1446. .enable_reg = 0x8040,
  1447. .enable_mask = BIT(0),
  1448. .hw.init = &(const struct clk_init_data) {
  1449. .name = "camcc_ipe_0_ahb_clk",
  1450. .parent_hws = (const struct clk_hw*[]) {
  1451. &camcc_slow_ahb_clk_src.clkr.hw,
  1452. },
  1453. .num_parents = 1,
  1454. .flags = CLK_SET_RATE_PARENT,
  1455. .ops = &clk_branch2_ops,
  1456. },
  1457. },
  1458. };
  1459. static struct clk_branch camcc_ipe_0_areg_clk = {
  1460. .halt_reg = 0x803c,
  1461. .halt_check = BRANCH_HALT,
  1462. .clkr = {
  1463. .enable_reg = 0x803c,
  1464. .enable_mask = BIT(0),
  1465. .hw.init = &(const struct clk_init_data) {
  1466. .name = "camcc_ipe_0_areg_clk",
  1467. .parent_hws = (const struct clk_hw*[]) {
  1468. &camcc_fast_ahb_clk_src.clkr.hw,
  1469. },
  1470. .num_parents = 1,
  1471. .flags = CLK_SET_RATE_PARENT,
  1472. .ops = &clk_branch2_ops,
  1473. },
  1474. },
  1475. };
  1476. static struct clk_branch camcc_ipe_0_axi_clk = {
  1477. .halt_reg = 0x8038,
  1478. .halt_check = BRANCH_HALT,
  1479. .clkr = {
  1480. .enable_reg = 0x8038,
  1481. .enable_mask = BIT(0),
  1482. .hw.init = &(const struct clk_init_data) {
  1483. .name = "camcc_ipe_0_axi_clk",
  1484. .parent_hws = (const struct clk_hw*[]) {
  1485. &camcc_camnoc_axi_clk_src.clkr.hw,
  1486. },
  1487. .num_parents = 1,
  1488. .flags = CLK_SET_RATE_PARENT,
  1489. .ops = &clk_branch2_ops,
  1490. },
  1491. },
  1492. };
  1493. static struct clk_branch camcc_ipe_0_clk = {
  1494. .halt_reg = 0x8028,
  1495. .halt_check = BRANCH_HALT,
  1496. .clkr = {
  1497. .enable_reg = 0x8028,
  1498. .enable_mask = BIT(0),
  1499. .hw.init = &(const struct clk_init_data) {
  1500. .name = "camcc_ipe_0_clk",
  1501. .parent_hws = (const struct clk_hw*[]) {
  1502. &camcc_ipe_0_clk_src.clkr.hw,
  1503. },
  1504. .num_parents = 1,
  1505. .flags = CLK_SET_RATE_PARENT,
  1506. .ops = &clk_branch2_ops,
  1507. },
  1508. },
  1509. };
  1510. static struct clk_branch camcc_ipe_1_ahb_clk = {
  1511. .halt_reg = 0x9028,
  1512. .halt_check = BRANCH_HALT,
  1513. .clkr = {
  1514. .enable_reg = 0x9028,
  1515. .enable_mask = BIT(0),
  1516. .hw.init = &(const struct clk_init_data) {
  1517. .name = "camcc_ipe_1_ahb_clk",
  1518. .parent_hws = (const struct clk_hw*[]) {
  1519. &camcc_slow_ahb_clk_src.clkr.hw,
  1520. },
  1521. .num_parents = 1,
  1522. .flags = CLK_SET_RATE_PARENT,
  1523. .ops = &clk_branch2_ops,
  1524. },
  1525. },
  1526. };
  1527. static struct clk_branch camcc_ipe_1_areg_clk = {
  1528. .halt_reg = 0x9024,
  1529. .halt_check = BRANCH_HALT,
  1530. .clkr = {
  1531. .enable_reg = 0x9024,
  1532. .enable_mask = BIT(0),
  1533. .hw.init = &(const struct clk_init_data) {
  1534. .name = "camcc_ipe_1_areg_clk",
  1535. .parent_hws = (const struct clk_hw*[]) {
  1536. &camcc_fast_ahb_clk_src.clkr.hw,
  1537. },
  1538. .num_parents = 1,
  1539. .flags = CLK_SET_RATE_PARENT,
  1540. .ops = &clk_branch2_ops,
  1541. },
  1542. },
  1543. };
  1544. static struct clk_branch camcc_ipe_1_axi_clk = {
  1545. .halt_reg = 0x9020,
  1546. .halt_check = BRANCH_HALT,
  1547. .clkr = {
  1548. .enable_reg = 0x9020,
  1549. .enable_mask = BIT(0),
  1550. .hw.init = &(const struct clk_init_data) {
  1551. .name = "camcc_ipe_1_axi_clk",
  1552. .parent_hws = (const struct clk_hw*[]) {
  1553. &camcc_camnoc_axi_clk_src.clkr.hw,
  1554. },
  1555. .num_parents = 1,
  1556. .flags = CLK_SET_RATE_PARENT,
  1557. .ops = &clk_branch2_ops,
  1558. },
  1559. },
  1560. };
  1561. static struct clk_branch camcc_ipe_1_clk = {
  1562. .halt_reg = 0x9010,
  1563. .halt_check = BRANCH_HALT,
  1564. .clkr = {
  1565. .enable_reg = 0x9010,
  1566. .enable_mask = BIT(0),
  1567. .hw.init = &(const struct clk_init_data) {
  1568. .name = "camcc_ipe_1_clk",
  1569. .parent_hws = (const struct clk_hw*[]) {
  1570. &camcc_ipe_0_clk_src.clkr.hw,
  1571. },
  1572. .num_parents = 1,
  1573. .flags = CLK_SET_RATE_PARENT,
  1574. .ops = &clk_branch2_ops,
  1575. },
  1576. },
  1577. };
  1578. static struct clk_branch camcc_jpeg_clk = {
  1579. .halt_reg = 0xc060,
  1580. .halt_check = BRANCH_HALT,
  1581. .clkr = {
  1582. .enable_reg = 0xc060,
  1583. .enable_mask = BIT(0),
  1584. .hw.init = &(const struct clk_init_data) {
  1585. .name = "camcc_jpeg_clk",
  1586. .parent_hws = (const struct clk_hw*[]) {
  1587. &camcc_jpeg_clk_src.clkr.hw,
  1588. },
  1589. .num_parents = 1,
  1590. .flags = CLK_SET_RATE_PARENT,
  1591. .ops = &clk_branch2_ops,
  1592. },
  1593. },
  1594. };
  1595. static struct clk_branch camcc_lrme_clk = {
  1596. .halt_reg = 0xc118,
  1597. .halt_check = BRANCH_HALT,
  1598. .clkr = {
  1599. .enable_reg = 0xc118,
  1600. .enable_mask = BIT(0),
  1601. .hw.init = &(const struct clk_init_data) {
  1602. .name = "camcc_lrme_clk",
  1603. .parent_hws = (const struct clk_hw*[]) {
  1604. &camcc_lrme_clk_src.clkr.hw,
  1605. },
  1606. .num_parents = 1,
  1607. .flags = CLK_SET_RATE_PARENT,
  1608. .ops = &clk_branch2_ops,
  1609. },
  1610. },
  1611. };
  1612. static struct clk_branch camcc_mclk0_clk = {
  1613. .halt_reg = 0x501c,
  1614. .halt_check = BRANCH_HALT,
  1615. .clkr = {
  1616. .enable_reg = 0x501c,
  1617. .enable_mask = BIT(0),
  1618. .hw.init = &(const struct clk_init_data) {
  1619. .name = "camcc_mclk0_clk",
  1620. .parent_hws = (const struct clk_hw*[]) {
  1621. &camcc_mclk0_clk_src.clkr.hw,
  1622. },
  1623. .num_parents = 1,
  1624. .flags = CLK_SET_RATE_PARENT,
  1625. .ops = &clk_branch2_ops,
  1626. },
  1627. },
  1628. };
  1629. static struct clk_branch camcc_mclk1_clk = {
  1630. .halt_reg = 0x503c,
  1631. .halt_check = BRANCH_HALT,
  1632. .clkr = {
  1633. .enable_reg = 0x503c,
  1634. .enable_mask = BIT(0),
  1635. .hw.init = &(const struct clk_init_data) {
  1636. .name = "camcc_mclk1_clk",
  1637. .parent_hws = (const struct clk_hw*[]) {
  1638. &camcc_mclk1_clk_src.clkr.hw,
  1639. },
  1640. .num_parents = 1,
  1641. .flags = CLK_SET_RATE_PARENT,
  1642. .ops = &clk_branch2_ops,
  1643. },
  1644. },
  1645. };
  1646. static struct clk_branch camcc_mclk2_clk = {
  1647. .halt_reg = 0x505c,
  1648. .halt_check = BRANCH_HALT,
  1649. .clkr = {
  1650. .enable_reg = 0x505c,
  1651. .enable_mask = BIT(0),
  1652. .hw.init = &(const struct clk_init_data) {
  1653. .name = "camcc_mclk2_clk",
  1654. .parent_hws = (const struct clk_hw*[]) {
  1655. &camcc_mclk2_clk_src.clkr.hw,
  1656. },
  1657. .num_parents = 1,
  1658. .flags = CLK_SET_RATE_PARENT,
  1659. .ops = &clk_branch2_ops,
  1660. },
  1661. },
  1662. };
  1663. static struct clk_branch camcc_mclk3_clk = {
  1664. .halt_reg = 0x507c,
  1665. .halt_check = BRANCH_HALT,
  1666. .clkr = {
  1667. .enable_reg = 0x507c,
  1668. .enable_mask = BIT(0),
  1669. .hw.init = &(const struct clk_init_data) {
  1670. .name = "camcc_mclk3_clk",
  1671. .parent_hws = (const struct clk_hw*[]) {
  1672. &camcc_mclk3_clk_src.clkr.hw,
  1673. },
  1674. .num_parents = 1,
  1675. .flags = CLK_SET_RATE_PARENT,
  1676. .ops = &clk_branch2_ops,
  1677. },
  1678. },
  1679. };
  1680. static struct clk_branch camcc_sleep_clk = {
  1681. .halt_reg = 0xc1bc,
  1682. .halt_check = BRANCH_HALT,
  1683. .clkr = {
  1684. .enable_reg = 0xc1bc,
  1685. .enable_mask = BIT(0),
  1686. .hw.init = &(const struct clk_init_data) {
  1687. .name = "camcc_sleep_clk",
  1688. .parent_hws = (const struct clk_hw*[]) {
  1689. &camcc_sleep_clk_src.clkr.hw,
  1690. },
  1691. .num_parents = 1,
  1692. .flags = CLK_SET_RATE_PARENT,
  1693. .ops = &clk_branch2_ops,
  1694. },
  1695. },
  1696. };
  1697. static struct gdsc camcc_titan_top_gdsc;
  1698. static struct gdsc camcc_bps_gdsc = {
  1699. .gdscr = 0x7004,
  1700. .pd = {
  1701. .name = "camcc_bps_gdsc",
  1702. },
  1703. .flags = HW_CTRL | POLL_CFG_GDSCR,
  1704. .parent = &camcc_titan_top_gdsc.pd,
  1705. .pwrsts = PWRSTS_OFF_ON,
  1706. };
  1707. static struct gdsc camcc_ife_0_gdsc = {
  1708. .gdscr = 0xa004,
  1709. .pd = {
  1710. .name = "camcc_ife_0_gdsc",
  1711. },
  1712. .flags = POLL_CFG_GDSCR,
  1713. .parent = &camcc_titan_top_gdsc.pd,
  1714. .pwrsts = PWRSTS_OFF_ON,
  1715. };
  1716. static struct gdsc camcc_ife_1_gdsc = {
  1717. .gdscr = 0xb004,
  1718. .pd = {
  1719. .name = "camcc_ife_1_gdsc",
  1720. },
  1721. .flags = POLL_CFG_GDSCR,
  1722. .parent = &camcc_titan_top_gdsc.pd,
  1723. .pwrsts = PWRSTS_OFF_ON,
  1724. };
  1725. static struct gdsc camcc_ipe_0_gdsc = {
  1726. .gdscr = 0x8004,
  1727. .pd = {
  1728. .name = "camcc_ipe_0_gdsc",
  1729. },
  1730. .flags = HW_CTRL | POLL_CFG_GDSCR,
  1731. .parent = &camcc_titan_top_gdsc.pd,
  1732. .pwrsts = PWRSTS_OFF_ON,
  1733. };
  1734. static struct gdsc camcc_ipe_1_gdsc = {
  1735. .gdscr = 0x9004,
  1736. .pd = {
  1737. .name = "camcc_ipe_1_gdsc",
  1738. },
  1739. .flags = HW_CTRL | POLL_CFG_GDSCR,
  1740. .parent = &camcc_titan_top_gdsc.pd,
  1741. .pwrsts = PWRSTS_OFF_ON,
  1742. };
  1743. static struct gdsc camcc_titan_top_gdsc = {
  1744. .gdscr = 0xc1c4,
  1745. .pd = {
  1746. .name = "camcc_titan_top_gdsc",
  1747. },
  1748. .flags = POLL_CFG_GDSCR,
  1749. .pwrsts = PWRSTS_OFF_ON,
  1750. };
  1751. static struct clk_hw *camcc_sm7150_hws[] = {
  1752. [CAMCC_PLL0_OUT_EVEN] = &camcc_pll0_out_even.hw,
  1753. [CAMCC_PLL0_OUT_ODD] = &camcc_pll0_out_odd.hw,
  1754. [CAMCC_PLL1_OUT_EVEN] = &camcc_pll1_out_even.hw,
  1755. [CAMCC_PLL2_OUT_EARLY] = &camcc_pll2_out_early.hw,
  1756. [CAMCC_PLL3_OUT_EVEN] = &camcc_pll3_out_even.hw,
  1757. [CAMCC_PLL4_OUT_EVEN] = &camcc_pll4_out_even.hw,
  1758. };
  1759. static struct clk_regmap *camcc_sm7150_clocks[] = {
  1760. [CAMCC_BPS_AHB_CLK] = &camcc_bps_ahb_clk.clkr,
  1761. [CAMCC_BPS_AREG_CLK] = &camcc_bps_areg_clk.clkr,
  1762. [CAMCC_BPS_AXI_CLK] = &camcc_bps_axi_clk.clkr,
  1763. [CAMCC_BPS_CLK] = &camcc_bps_clk.clkr,
  1764. [CAMCC_BPS_CLK_SRC] = &camcc_bps_clk_src.clkr,
  1765. [CAMCC_CAMNOC_AXI_CLK] = &camcc_camnoc_axi_clk.clkr,
  1766. [CAMCC_CAMNOC_AXI_CLK_SRC] = &camcc_camnoc_axi_clk_src.clkr,
  1767. [CAMCC_CAMNOC_DCD_XO_CLK] = &camcc_camnoc_dcd_xo_clk.clkr,
  1768. [CAMCC_CCI_0_CLK] = &camcc_cci_0_clk.clkr,
  1769. [CAMCC_CCI_0_CLK_SRC] = &camcc_cci_0_clk_src.clkr,
  1770. [CAMCC_CCI_1_CLK] = &camcc_cci_1_clk.clkr,
  1771. [CAMCC_CCI_1_CLK_SRC] = &camcc_cci_1_clk_src.clkr,
  1772. [CAMCC_CORE_AHB_CLK] = &camcc_core_ahb_clk.clkr,
  1773. [CAMCC_CPAS_AHB_CLK] = &camcc_cpas_ahb_clk.clkr,
  1774. [CAMCC_CPHY_RX_CLK_SRC] = &camcc_cphy_rx_clk_src.clkr,
  1775. [CAMCC_CSI0PHYTIMER_CLK] = &camcc_csi0phytimer_clk.clkr,
  1776. [CAMCC_CSI0PHYTIMER_CLK_SRC] = &camcc_csi0phytimer_clk_src.clkr,
  1777. [CAMCC_CSI1PHYTIMER_CLK] = &camcc_csi1phytimer_clk.clkr,
  1778. [CAMCC_CSI1PHYTIMER_CLK_SRC] = &camcc_csi1phytimer_clk_src.clkr,
  1779. [CAMCC_CSI2PHYTIMER_CLK] = &camcc_csi2phytimer_clk.clkr,
  1780. [CAMCC_CSI2PHYTIMER_CLK_SRC] = &camcc_csi2phytimer_clk_src.clkr,
  1781. [CAMCC_CSI3PHYTIMER_CLK] = &camcc_csi3phytimer_clk.clkr,
  1782. [CAMCC_CSI3PHYTIMER_CLK_SRC] = &camcc_csi3phytimer_clk_src.clkr,
  1783. [CAMCC_CSIPHY0_CLK] = &camcc_csiphy0_clk.clkr,
  1784. [CAMCC_CSIPHY1_CLK] = &camcc_csiphy1_clk.clkr,
  1785. [CAMCC_CSIPHY2_CLK] = &camcc_csiphy2_clk.clkr,
  1786. [CAMCC_CSIPHY3_CLK] = &camcc_csiphy3_clk.clkr,
  1787. [CAMCC_FAST_AHB_CLK_SRC] = &camcc_fast_ahb_clk_src.clkr,
  1788. [CAMCC_FD_CORE_CLK] = &camcc_fd_core_clk.clkr,
  1789. [CAMCC_FD_CORE_CLK_SRC] = &camcc_fd_core_clk_src.clkr,
  1790. [CAMCC_FD_CORE_UAR_CLK] = &camcc_fd_core_uar_clk.clkr,
  1791. [CAMCC_ICP_AHB_CLK] = &camcc_icp_ahb_clk.clkr,
  1792. [CAMCC_ICP_CLK] = &camcc_icp_clk.clkr,
  1793. [CAMCC_ICP_CLK_SRC] = &camcc_icp_clk_src.clkr,
  1794. [CAMCC_IFE_0_AXI_CLK] = &camcc_ife_0_axi_clk.clkr,
  1795. [CAMCC_IFE_0_CLK] = &camcc_ife_0_clk.clkr,
  1796. [CAMCC_IFE_0_CLK_SRC] = &camcc_ife_0_clk_src.clkr,
  1797. [CAMCC_IFE_0_CPHY_RX_CLK] = &camcc_ife_0_cphy_rx_clk.clkr,
  1798. [CAMCC_IFE_0_CSID_CLK] = &camcc_ife_0_csid_clk.clkr,
  1799. [CAMCC_IFE_0_CSID_CLK_SRC] = &camcc_ife_0_csid_clk_src.clkr,
  1800. [CAMCC_IFE_0_DSP_CLK] = &camcc_ife_0_dsp_clk.clkr,
  1801. [CAMCC_IFE_1_AXI_CLK] = &camcc_ife_1_axi_clk.clkr,
  1802. [CAMCC_IFE_1_CLK] = &camcc_ife_1_clk.clkr,
  1803. [CAMCC_IFE_1_CLK_SRC] = &camcc_ife_1_clk_src.clkr,
  1804. [CAMCC_IFE_1_CPHY_RX_CLK] = &camcc_ife_1_cphy_rx_clk.clkr,
  1805. [CAMCC_IFE_1_CSID_CLK] = &camcc_ife_1_csid_clk.clkr,
  1806. [CAMCC_IFE_1_CSID_CLK_SRC] = &camcc_ife_1_csid_clk_src.clkr,
  1807. [CAMCC_IFE_1_DSP_CLK] = &camcc_ife_1_dsp_clk.clkr,
  1808. [CAMCC_IFE_LITE_CLK] = &camcc_ife_lite_clk.clkr,
  1809. [CAMCC_IFE_LITE_CLK_SRC] = &camcc_ife_lite_clk_src.clkr,
  1810. [CAMCC_IFE_LITE_CPHY_RX_CLK] = &camcc_ife_lite_cphy_rx_clk.clkr,
  1811. [CAMCC_IFE_LITE_CSID_CLK] = &camcc_ife_lite_csid_clk.clkr,
  1812. [CAMCC_IFE_LITE_CSID_CLK_SRC] = &camcc_ife_lite_csid_clk_src.clkr,
  1813. [CAMCC_IPE_0_AHB_CLK] = &camcc_ipe_0_ahb_clk.clkr,
  1814. [CAMCC_IPE_0_AREG_CLK] = &camcc_ipe_0_areg_clk.clkr,
  1815. [CAMCC_IPE_0_AXI_CLK] = &camcc_ipe_0_axi_clk.clkr,
  1816. [CAMCC_IPE_0_CLK] = &camcc_ipe_0_clk.clkr,
  1817. [CAMCC_IPE_0_CLK_SRC] = &camcc_ipe_0_clk_src.clkr,
  1818. [CAMCC_IPE_1_AHB_CLK] = &camcc_ipe_1_ahb_clk.clkr,
  1819. [CAMCC_IPE_1_AREG_CLK] = &camcc_ipe_1_areg_clk.clkr,
  1820. [CAMCC_IPE_1_AXI_CLK] = &camcc_ipe_1_axi_clk.clkr,
  1821. [CAMCC_IPE_1_CLK] = &camcc_ipe_1_clk.clkr,
  1822. [CAMCC_JPEG_CLK] = &camcc_jpeg_clk.clkr,
  1823. [CAMCC_JPEG_CLK_SRC] = &camcc_jpeg_clk_src.clkr,
  1824. [CAMCC_LRME_CLK] = &camcc_lrme_clk.clkr,
  1825. [CAMCC_LRME_CLK_SRC] = &camcc_lrme_clk_src.clkr,
  1826. [CAMCC_MCLK0_CLK] = &camcc_mclk0_clk.clkr,
  1827. [CAMCC_MCLK0_CLK_SRC] = &camcc_mclk0_clk_src.clkr,
  1828. [CAMCC_MCLK1_CLK] = &camcc_mclk1_clk.clkr,
  1829. [CAMCC_MCLK1_CLK_SRC] = &camcc_mclk1_clk_src.clkr,
  1830. [CAMCC_MCLK2_CLK] = &camcc_mclk2_clk.clkr,
  1831. [CAMCC_MCLK2_CLK_SRC] = &camcc_mclk2_clk_src.clkr,
  1832. [CAMCC_MCLK3_CLK] = &camcc_mclk3_clk.clkr,
  1833. [CAMCC_MCLK3_CLK_SRC] = &camcc_mclk3_clk_src.clkr,
  1834. [CAMCC_PLL0] = &camcc_pll0.clkr,
  1835. [CAMCC_PLL1] = &camcc_pll1.clkr,
  1836. [CAMCC_PLL2] = &camcc_pll2.clkr,
  1837. [CAMCC_PLL2_OUT_AUX] = &camcc_pll2_out_aux.clkr,
  1838. [CAMCC_PLL2_OUT_MAIN] = &camcc_pll2_out_main.clkr,
  1839. [CAMCC_PLL3] = &camcc_pll3.clkr,
  1840. [CAMCC_PLL4] = &camcc_pll4.clkr,
  1841. [CAMCC_SLEEP_CLK] = &camcc_sleep_clk.clkr,
  1842. [CAMCC_SLEEP_CLK_SRC] = &camcc_sleep_clk_src.clkr,
  1843. [CAMCC_SLOW_AHB_CLK_SRC] = &camcc_slow_ahb_clk_src.clkr,
  1844. [CAMCC_XO_CLK_SRC] = &camcc_xo_clk_src.clkr,
  1845. };
  1846. static struct gdsc *camcc_sm7150_gdscs[] = {
  1847. [BPS_GDSC] = &camcc_bps_gdsc,
  1848. [IFE_0_GDSC] = &camcc_ife_0_gdsc,
  1849. [IFE_1_GDSC] = &camcc_ife_1_gdsc,
  1850. [IPE_0_GDSC] = &camcc_ipe_0_gdsc,
  1851. [IPE_1_GDSC] = &camcc_ipe_1_gdsc,
  1852. [TITAN_TOP_GDSC] = &camcc_titan_top_gdsc,
  1853. };
  1854. static const struct regmap_config camcc_sm7150_regmap_config = {
  1855. .reg_bits = 32,
  1856. .reg_stride = 4,
  1857. .val_bits = 32,
  1858. .max_register = 0xd024,
  1859. .fast_io = true,
  1860. };
  1861. static const struct qcom_cc_desc camcc_sm7150_desc = {
  1862. .config = &camcc_sm7150_regmap_config,
  1863. .clk_hws = camcc_sm7150_hws,
  1864. .num_clk_hws = ARRAY_SIZE(camcc_sm7150_hws),
  1865. .clks = camcc_sm7150_clocks,
  1866. .num_clks = ARRAY_SIZE(camcc_sm7150_clocks),
  1867. .gdscs = camcc_sm7150_gdscs,
  1868. .num_gdscs = ARRAY_SIZE(camcc_sm7150_gdscs),
  1869. };
  1870. static const struct of_device_id camcc_sm7150_match_table[] = {
  1871. { .compatible = "qcom,sm7150-camcc" },
  1872. { }
  1873. };
  1874. MODULE_DEVICE_TABLE(of, camcc_sm7150_match_table);
  1875. static int camcc_sm7150_probe(struct platform_device *pdev)
  1876. {
  1877. struct regmap *regmap;
  1878. regmap = qcom_cc_map(pdev, &camcc_sm7150_desc);
  1879. if (IS_ERR(regmap))
  1880. return PTR_ERR(regmap);
  1881. clk_fabia_pll_configure(&camcc_pll0, regmap, &camcc_pll0_config);
  1882. clk_fabia_pll_configure(&camcc_pll1, regmap, &camcc_pll1_config);
  1883. clk_agera_pll_configure(&camcc_pll2, regmap, &camcc_pll2_config);
  1884. clk_fabia_pll_configure(&camcc_pll3, regmap, &camcc_pll3_config);
  1885. clk_fabia_pll_configure(&camcc_pll4, regmap, &camcc_pll3_config);
  1886. /* Keep some clocks always-on */
  1887. qcom_branch_set_clk_en(regmap, 0xc1a0); /* CAMCC_GDSC_CLK */
  1888. return qcom_cc_really_probe(&pdev->dev, &camcc_sm7150_desc, regmap);
  1889. }
  1890. static struct platform_driver camcc_sm7150_driver = {
  1891. .probe = camcc_sm7150_probe,
  1892. .driver = {
  1893. .name = "camcc-sm7150",
  1894. .of_match_table = camcc_sm7150_match_table,
  1895. },
  1896. };
  1897. module_platform_driver(camcc_sm7150_driver);
  1898. MODULE_DESCRIPTION("Qualcomm SM7150 Camera Clock Controller");
  1899. MODULE_LICENSE("GPL");