dispcc-kalama.c 55 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2021, The Linux Foundation. All rights reserved.
  4. */
  5. #include <linux/clk.h>
  6. #include <linux/clk-provider.h>
  7. #include <linux/err.h>
  8. #include <linux/kernel.h>
  9. #include <linux/module.h>
  10. #include <linux/of_device.h>
  11. #include <linux/of.h>
  12. #include <linux/regmap.h>
  13. #include <linux/pm_runtime.h>
  14. #include <dt-bindings/clock/qcom,dispcc-kalama.h>
  15. #include "clk-alpha-pll.h"
  16. #include "clk-branch.h"
  17. #include "clk-pll.h"
  18. #include "clk-rcg.h"
  19. #include "clk-regmap.h"
  20. #include "clk-regmap-divider.h"
  21. #include "clk-regmap-mux.h"
  22. #include "common.h"
  23. #include "reset.h"
  24. #include "vdd-level.h"
  25. #define DISP_CC_MISC_CMD 0xF000
  26. static DEFINE_VDD_REGULATORS(vdd_mm, VDD_HIGH + 1, 1, vdd_corner);
  27. static DEFINE_VDD_REGULATORS(vdd_mxa, VDD_NOMINAL + 1, 1, vdd_corner);
  28. static struct clk_vdd_class *disp_cc_kalama_regulators[] = {
  29. &vdd_mm,
  30. &vdd_mxa,
  31. };
  32. enum {
  33. P_BI_TCXO,
  34. P_DISP_CC_PLL0_OUT_MAIN,
  35. P_DISP_CC_PLL1_OUT_EVEN,
  36. P_DISP_CC_PLL1_OUT_MAIN,
  37. P_DP0_PHY_PLL_LINK_CLK,
  38. P_DP0_PHY_PLL_VCO_DIV_CLK,
  39. P_DP1_PHY_PLL_LINK_CLK,
  40. P_DP1_PHY_PLL_VCO_DIV_CLK,
  41. P_DP2_PHY_PLL_LINK_CLK,
  42. P_DP2_PHY_PLL_VCO_DIV_CLK,
  43. P_DP3_PHY_PLL_LINK_CLK,
  44. P_DP3_PHY_PLL_VCO_DIV_CLK,
  45. P_DSI0_PHY_PLL_OUT_BYTECLK,
  46. P_DSI0_PHY_PLL_OUT_DSICLK,
  47. P_DSI1_PHY_PLL_OUT_BYTECLK,
  48. P_DSI1_PHY_PLL_OUT_DSICLK,
  49. P_SLEEP_CLK,
  50. };
  51. static struct pll_vco lucid_ole_vco[] = {
  52. { 249600000, 2000000000, 0 },
  53. };
  54. static const struct alpha_pll_config disp_cc_pll0_config = {
  55. .l = 0xD,
  56. .cal_l = 0x44,
  57. .cal_l_ringosc = 0x44,
  58. .alpha = 0x6492,
  59. .config_ctl_val = 0x20485699,
  60. .config_ctl_hi_val = 0x00182261,
  61. .config_ctl_hi1_val = 0x82AA299C,
  62. .test_ctl_val = 0x00000000,
  63. .test_ctl_hi_val = 0x00000003,
  64. .test_ctl_hi1_val = 0x00009000,
  65. .test_ctl_hi2_val = 0x00000034,
  66. .user_ctl_val = 0x00000000,
  67. .user_ctl_hi_val = 0x00000005,
  68. };
  69. static struct clk_alpha_pll disp_cc_pll0 = {
  70. .offset = 0x0,
  71. .vco_table = lucid_ole_vco,
  72. .num_vco = ARRAY_SIZE(lucid_ole_vco),
  73. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  74. .clkr = {
  75. .hw.init = &(struct clk_init_data){
  76. .name = "disp_cc_pll0",
  77. .parent_data = &(const struct clk_parent_data){
  78. .fw_name = "bi_tcxo",
  79. .name = "bi_tcxo",
  80. },
  81. .num_parents = 1,
  82. .ops = &clk_alpha_pll_lucid_ole_ops,
  83. },
  84. .vdd_data = {
  85. .vdd_class = &vdd_mm,
  86. .num_rate_max = VDD_NUM,
  87. .rate_max = (unsigned long[VDD_NUM]) {
  88. [VDD_LOWER_D1] = 615000000,
  89. [VDD_LOW] = 1100000000,
  90. [VDD_LOW_L1] = 1600000000,
  91. [VDD_NOMINAL] = 2000000000},
  92. },
  93. },
  94. };
  95. static const struct alpha_pll_config disp_cc_pll1_config = {
  96. .l = 0x1F,
  97. .cal_l = 0x44,
  98. .cal_l_ringosc = 0x44,
  99. .alpha = 0x4000,
  100. .config_ctl_val = 0x20485699,
  101. .config_ctl_hi_val = 0x00182261,
  102. .config_ctl_hi1_val = 0x82AA299C,
  103. .test_ctl_val = 0x00000000,
  104. .test_ctl_hi_val = 0x00000003,
  105. .test_ctl_hi1_val = 0x00009000,
  106. .test_ctl_hi2_val = 0x00000034,
  107. .user_ctl_val = 0x00000000,
  108. .user_ctl_hi_val = 0x00000005,
  109. };
  110. static struct clk_alpha_pll disp_cc_pll1 = {
  111. .offset = 0x1000,
  112. .vco_table = lucid_ole_vco,
  113. .num_vco = ARRAY_SIZE(lucid_ole_vco),
  114. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
  115. .clkr = {
  116. .hw.init = &(struct clk_init_data){
  117. .name = "disp_cc_pll1",
  118. .parent_data = &(const struct clk_parent_data){
  119. .fw_name = "bi_tcxo",
  120. .name = "bi_tcxo",
  121. },
  122. .num_parents = 1,
  123. .ops = &clk_alpha_pll_lucid_ole_ops,
  124. },
  125. .vdd_data = {
  126. .vdd_class = &vdd_mm,
  127. .num_rate_max = VDD_NUM,
  128. .rate_max = (unsigned long[VDD_NUM]) {
  129. [VDD_LOWER_D1] = 615000000,
  130. [VDD_LOW] = 1100000000,
  131. [VDD_LOW_L1] = 1600000000,
  132. [VDD_NOMINAL] = 2000000000},
  133. },
  134. },
  135. };
  136. static const struct parent_map disp_cc_parent_map_0[] = {
  137. { P_BI_TCXO, 0 },
  138. };
  139. static const struct clk_parent_data disp_cc_parent_data_0[] = {
  140. { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
  141. };
  142. static const struct clk_parent_data disp_cc_parent_data_0_ao[] = {
  143. { .fw_name = "bi_tcxo_ao", .name = "bi_tcxo_ao" },
  144. };
  145. static const struct parent_map disp_cc_parent_map_1[] = {
  146. { P_BI_TCXO, 0 },
  147. { P_DP3_PHY_PLL_VCO_DIV_CLK, 3 },
  148. { P_DP1_PHY_PLL_VCO_DIV_CLK, 4 },
  149. { P_DP2_PHY_PLL_VCO_DIV_CLK, 6 },
  150. };
  151. static const struct clk_parent_data disp_cc_parent_data_1[] = {
  152. { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
  153. { .fw_name = "dp3_phy_pll_vco_div_clk", .name = "dp3_phy_pll_vco_div_clk" },
  154. { .fw_name = "dp1_phy_pll_vco_div_clk", .name = "dp1_phy_pll_vco_div_clk" },
  155. { .fw_name = "dp2_phy_pll_vco_div_clk", .name = "dp2_phy_pll_vco_div_clk" },
  156. };
  157. static const struct parent_map disp_cc_parent_map_2[] = {
  158. { P_BI_TCXO, 0 },
  159. { P_DSI0_PHY_PLL_OUT_DSICLK, 1 },
  160. { P_DSI0_PHY_PLL_OUT_BYTECLK, 2 },
  161. { P_DSI1_PHY_PLL_OUT_DSICLK, 3 },
  162. { P_DSI1_PHY_PLL_OUT_BYTECLK, 4 },
  163. };
  164. static const struct clk_parent_data disp_cc_parent_data_2[] = {
  165. { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
  166. { .fw_name = "dsi0_phy_pll_out_dsiclk", .name = "dsi0_phy_pll_out_dsiclk" },
  167. { .fw_name = "dsi0_phy_pll_out_byteclk", .name = "dsi0_phy_pll_out_byteclk" },
  168. { .fw_name = "dsi1_phy_pll_out_dsiclk", .name = "dsi1_phy_pll_out_dsiclk" },
  169. { .fw_name = "dsi1_phy_pll_out_byteclk", .name = "dsi1_phy_pll_out_byteclk" },
  170. };
  171. static const struct parent_map disp_cc_parent_map_3[] = {
  172. { P_BI_TCXO, 0 },
  173. { P_DP1_PHY_PLL_LINK_CLK, 2 },
  174. { P_DP2_PHY_PLL_LINK_CLK, 3 },
  175. { P_DP3_PHY_PLL_LINK_CLK, 4 },
  176. };
  177. static const struct clk_parent_data disp_cc_parent_data_3[] = {
  178. { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
  179. { .fw_name = "dp1_phy_pll_link_clk", .name = "dp1_phy_pll_link_clk" },
  180. { .fw_name = "dp2_phy_pll_link_clk", .name = "dp2_phy_pll_link_clk" },
  181. { .fw_name = "dp3_phy_pll_link_clk", .name = "dp3_phy_pll_link_clk" },
  182. };
  183. static const struct parent_map disp_cc_parent_map_4[] = {
  184. { P_BI_TCXO, 0 },
  185. { P_DP0_PHY_PLL_LINK_CLK, 1 },
  186. { P_DP0_PHY_PLL_VCO_DIV_CLK, 2 },
  187. { P_DP3_PHY_PLL_VCO_DIV_CLK, 3 },
  188. { P_DP1_PHY_PLL_VCO_DIV_CLK, 4 },
  189. { P_DP2_PHY_PLL_VCO_DIV_CLK, 6 },
  190. };
  191. static const struct clk_parent_data disp_cc_parent_data_4[] = {
  192. { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
  193. { .fw_name = "dp0_phy_pll_link_clk", .name = "dp0_phy_pll_link_clk" },
  194. { .fw_name = "dp0_phy_pll_vco_div_clk", .name = "dp0_phy_pll_vco_div_clk" },
  195. { .fw_name = "dp3_phy_pll_vco_div_clk", .name = "dp3_phy_pll_vco_div_clk" },
  196. { .fw_name = "dp1_phy_pll_vco_div_clk", .name = "dp1_phy_pll_vco_div_clk" },
  197. { .fw_name = "dp2_phy_pll_vco_div_clk", .name = "dp2_phy_pll_vco_div_clk" },
  198. };
  199. static const struct parent_map disp_cc_parent_map_5[] = {
  200. { P_BI_TCXO, 0 },
  201. { P_DSI0_PHY_PLL_OUT_BYTECLK, 2 },
  202. { P_DSI1_PHY_PLL_OUT_BYTECLK, 4 },
  203. };
  204. static const struct clk_parent_data disp_cc_parent_data_5[] = {
  205. { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
  206. { .fw_name = "dsi0_phy_pll_out_byteclk", .name = "dsi0_phy_pll_out_byteclk" },
  207. { .fw_name = "dsi1_phy_pll_out_byteclk", .name = "dsi1_phy_pll_out_byteclk" },
  208. };
  209. static const struct parent_map disp_cc_parent_map_6[] = {
  210. { P_BI_TCXO, 0 },
  211. { P_DISP_CC_PLL1_OUT_MAIN, 4 },
  212. { P_DISP_CC_PLL1_OUT_EVEN, 6 },
  213. };
  214. static const struct clk_parent_data disp_cc_parent_data_6[] = {
  215. { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
  216. { .hw = &disp_cc_pll1.clkr.hw },
  217. { .hw = &disp_cc_pll1.clkr.hw },
  218. };
  219. static const struct parent_map disp_cc_parent_map_7[] = {
  220. { P_BI_TCXO, 0 },
  221. { P_DP0_PHY_PLL_LINK_CLK, 1 },
  222. { P_DP1_PHY_PLL_LINK_CLK, 2 },
  223. { P_DP2_PHY_PLL_LINK_CLK, 3 },
  224. { P_DP3_PHY_PLL_LINK_CLK, 4 },
  225. };
  226. static const struct clk_parent_data disp_cc_parent_data_7[] = {
  227. { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
  228. { .fw_name = "dp0_phy_pll_link_clk", .name = "dp0_phy_pll_link_clk" },
  229. { .fw_name = "dp1_phy_pll_link_clk", .name = "dp1_phy_pll_link_clk" },
  230. { .fw_name = "dp2_phy_pll_link_clk", .name = "dp2_phy_pll_link_clk" },
  231. { .fw_name = "dp3_phy_pll_link_clk", .name = "dp3_phy_pll_link_clk" },
  232. };
  233. static const struct parent_map disp_cc_parent_map_8[] = {
  234. { P_BI_TCXO, 0 },
  235. { P_DISP_CC_PLL0_OUT_MAIN, 1 },
  236. { P_DISP_CC_PLL1_OUT_MAIN, 4 },
  237. { P_DISP_CC_PLL1_OUT_EVEN, 6 },
  238. };
  239. static const struct clk_parent_data disp_cc_parent_data_8[] = {
  240. { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
  241. { .hw = &disp_cc_pll0.clkr.hw },
  242. { .hw = &disp_cc_pll1.clkr.hw },
  243. { .hw = &disp_cc_pll1.clkr.hw },
  244. };
  245. static const struct parent_map disp_cc_parent_map_9[] = {
  246. { P_SLEEP_CLK, 0 },
  247. };
  248. static const struct clk_parent_data disp_cc_parent_data_9[] = {
  249. { .fw_name = "sleep_clk", .name = "sleep_clk" },
  250. };
  251. static const struct freq_tbl ftbl_disp_cc_mdss_ahb_clk_src[] = {
  252. F(19200000, P_BI_TCXO, 1, 0, 0),
  253. F(37500000, P_DISP_CC_PLL1_OUT_MAIN, 16, 0, 0),
  254. F(75000000, P_DISP_CC_PLL1_OUT_MAIN, 8, 0, 0),
  255. { }
  256. };
  257. static struct clk_rcg2 disp_cc_mdss_ahb_clk_src = {
  258. .cmd_rcgr = 0x82e8,
  259. .mnd_width = 0,
  260. .hid_width = 5,
  261. .parent_map = disp_cc_parent_map_6,
  262. .freq_tbl = ftbl_disp_cc_mdss_ahb_clk_src,
  263. .enable_safe_config = true,
  264. .flags = HW_CLK_CTRL_MODE,
  265. .clkr.hw.init = &(struct clk_init_data){
  266. .name = "disp_cc_mdss_ahb_clk_src",
  267. .parent_data = disp_cc_parent_data_6,
  268. .num_parents = ARRAY_SIZE(disp_cc_parent_data_6),
  269. .flags = CLK_SET_RATE_PARENT,
  270. .ops = &clk_rcg2_ops,
  271. },
  272. .clkr.vdd_data = {
  273. .vdd_class = &vdd_mm,
  274. .num_rate_max = VDD_NUM,
  275. .rate_max = (unsigned long[VDD_NUM]) {
  276. [VDD_LOWER_D1] = 19200000,
  277. [VDD_LOW] = 37500000,
  278. [VDD_NOMINAL] = 75000000},
  279. },
  280. };
  281. static const struct freq_tbl ftbl_disp_cc_mdss_byte0_clk_src[] = {
  282. F(19200000, P_BI_TCXO, 1, 0, 0),
  283. { }
  284. };
  285. static struct clk_rcg2 disp_cc_mdss_byte0_clk_src = {
  286. .cmd_rcgr = 0x8108,
  287. .mnd_width = 0,
  288. .hid_width = 5,
  289. .parent_map = disp_cc_parent_map_2,
  290. .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
  291. .clkr.hw.init = &(struct clk_init_data){
  292. .name = "disp_cc_mdss_byte0_clk_src",
  293. .parent_data = disp_cc_parent_data_2,
  294. .num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
  295. .flags = CLK_SET_RATE_PARENT,
  296. .ops = &clk_byte2_ops,
  297. },
  298. .clkr.vdd_data = {
  299. .vdd_class = &vdd_mm,
  300. .num_rate_max = VDD_NUM,
  301. .rate_max = (unsigned long[VDD_NUM]) {
  302. [VDD_LOWER_D1] = 160310000,
  303. [VDD_LOWER] = 187500000,
  304. [VDD_LOW] = 300000000,
  305. [VDD_LOW_L1] = 358000000},
  306. },
  307. };
  308. static struct clk_rcg2 disp_cc_mdss_byte1_clk_src = {
  309. .cmd_rcgr = 0x8124,
  310. .mnd_width = 0,
  311. .hid_width = 5,
  312. .parent_map = disp_cc_parent_map_2,
  313. .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
  314. .clkr.hw.init = &(struct clk_init_data){
  315. .name = "disp_cc_mdss_byte1_clk_src",
  316. .parent_data = disp_cc_parent_data_2,
  317. .num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
  318. .flags = CLK_SET_RATE_PARENT,
  319. .ops = &clk_byte2_ops,
  320. },
  321. .clkr.vdd_data = {
  322. .vdd_class = &vdd_mm,
  323. .num_rate_max = VDD_NUM,
  324. .rate_max = (unsigned long[VDD_NUM]) {
  325. [VDD_LOWER_D1] = 160310000,
  326. [VDD_LOWER] = 187500000,
  327. [VDD_LOW] = 300000000,
  328. [VDD_LOW_L1] = 358000000},
  329. },
  330. };
  331. static struct clk_rcg2 disp_cc_mdss_dptx0_aux_clk_src = {
  332. .cmd_rcgr = 0x81bc,
  333. .mnd_width = 0,
  334. .hid_width = 5,
  335. .parent_map = disp_cc_parent_map_0,
  336. .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
  337. .clkr.hw.init = &(struct clk_init_data){
  338. .name = "disp_cc_mdss_dptx0_aux_clk_src",
  339. .parent_data = disp_cc_parent_data_0,
  340. .num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
  341. .flags = CLK_SET_RATE_PARENT,
  342. .ops = &clk_rcg2_ops,
  343. },
  344. .clkr.vdd_data = {
  345. .vdd_class = &vdd_mm,
  346. .num_rate_max = VDD_NUM,
  347. .rate_max = (unsigned long[VDD_NUM]) {
  348. [VDD_LOWER_D1] = 19200000},
  349. },
  350. };
  351. static const struct freq_tbl ftbl_disp_cc_mdss_dptx0_link_clk_src[] = {
  352. F(162000, P_DP0_PHY_PLL_LINK_CLK, 1, 0, 0),
  353. F(270000, P_DP0_PHY_PLL_LINK_CLK, 1, 0, 0),
  354. F(540000, P_DP0_PHY_PLL_LINK_CLK, 1, 0, 0),
  355. F(810000, P_DP0_PHY_PLL_LINK_CLK, 1, 0, 0),
  356. { }
  357. };
  358. static struct clk_rcg2 disp_cc_mdss_dptx0_link_clk_src = {
  359. .cmd_rcgr = 0x8170,
  360. .mnd_width = 0,
  361. .hid_width = 5,
  362. .parent_map = disp_cc_parent_map_7,
  363. .freq_tbl = ftbl_disp_cc_mdss_dptx0_link_clk_src,
  364. .clkr.hw.init = &(struct clk_init_data){
  365. .name = "disp_cc_mdss_dptx0_link_clk_src",
  366. .parent_data = disp_cc_parent_data_7,
  367. .num_parents = ARRAY_SIZE(disp_cc_parent_data_7),
  368. .flags = CLK_SET_RATE_PARENT,
  369. .ops = &clk_rcg2_ops,
  370. },
  371. .clkr.vdd_data = {
  372. .vdd_class = &vdd_mm,
  373. .num_rate_max = VDD_NUM,
  374. .rate_max = (unsigned long[VDD_NUM]) {
  375. [VDD_LOWER_D1] = 19200,
  376. [VDD_LOWER] = 270000,
  377. [VDD_LOW_L1] = 540000,
  378. [VDD_NOMINAL] = 810000},
  379. },
  380. };
  381. static struct clk_rcg2 disp_cc_mdss_dptx0_pixel0_clk_src = {
  382. .cmd_rcgr = 0x818c,
  383. .mnd_width = 16,
  384. .hid_width = 5,
  385. .parent_map = disp_cc_parent_map_4,
  386. .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
  387. .clkr.hw.init = &(struct clk_init_data){
  388. .name = "disp_cc_mdss_dptx0_pixel0_clk_src",
  389. .parent_data = disp_cc_parent_data_4,
  390. .num_parents = ARRAY_SIZE(disp_cc_parent_data_4),
  391. .flags = CLK_SET_RATE_PARENT,
  392. .ops = &clk_dp_ops,
  393. },
  394. .clkr.vdd_data = {
  395. .vdd_class = &vdd_mm,
  396. .num_rate_max = VDD_NUM,
  397. .rate_max = (unsigned long[VDD_NUM]) {
  398. [VDD_LOWER_D1] = 19200,
  399. [VDD_LOWER] = 337500,
  400. [VDD_LOW_L1] = 405000,
  401. [VDD_NOMINAL] = 675000},
  402. },
  403. };
  404. static struct clk_rcg2 disp_cc_mdss_dptx0_pixel1_clk_src = {
  405. .cmd_rcgr = 0x81a4,
  406. .mnd_width = 16,
  407. .hid_width = 5,
  408. .parent_map = disp_cc_parent_map_4,
  409. .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
  410. .clkr.hw.init = &(struct clk_init_data){
  411. .name = "disp_cc_mdss_dptx0_pixel1_clk_src",
  412. .parent_data = disp_cc_parent_data_4,
  413. .num_parents = ARRAY_SIZE(disp_cc_parent_data_4),
  414. .flags = CLK_SET_RATE_PARENT,
  415. .ops = &clk_dp_ops,
  416. },
  417. .clkr.vdd_data = {
  418. .vdd_class = &vdd_mm,
  419. .num_rate_max = VDD_NUM,
  420. .rate_max = (unsigned long[VDD_NUM]) {
  421. [VDD_LOWER_D1] = 19200,
  422. [VDD_LOWER] = 337500,
  423. [VDD_LOW_L1] = 405000,
  424. [VDD_NOMINAL] = 675000},
  425. },
  426. };
  427. static struct clk_rcg2 disp_cc_mdss_dptx1_aux_clk_src = {
  428. .cmd_rcgr = 0x8220,
  429. .mnd_width = 0,
  430. .hid_width = 5,
  431. .parent_map = disp_cc_parent_map_0,
  432. .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
  433. .clkr.hw.init = &(struct clk_init_data){
  434. .name = "disp_cc_mdss_dptx1_aux_clk_src",
  435. .parent_data = disp_cc_parent_data_0,
  436. .num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
  437. .flags = CLK_SET_RATE_PARENT,
  438. .ops = &clk_rcg2_ops,
  439. },
  440. .clkr.vdd_data = {
  441. .vdd_class = &vdd_mm,
  442. .num_rate_max = VDD_NUM,
  443. .rate_max = (unsigned long[VDD_NUM]) {
  444. [VDD_LOWER_D1] = 19200000},
  445. },
  446. };
  447. static struct clk_rcg2 disp_cc_mdss_dptx1_link_clk_src = {
  448. .cmd_rcgr = 0x8204,
  449. .mnd_width = 0,
  450. .hid_width = 5,
  451. .parent_map = disp_cc_parent_map_3,
  452. .freq_tbl = ftbl_disp_cc_mdss_dptx0_link_clk_src,
  453. .clkr.hw.init = &(struct clk_init_data){
  454. .name = "disp_cc_mdss_dptx1_link_clk_src",
  455. .parent_data = disp_cc_parent_data_3,
  456. .num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
  457. .flags = CLK_SET_RATE_PARENT,
  458. .ops = &clk_rcg2_ops,
  459. },
  460. .clkr.vdd_data = {
  461. .vdd_class = &vdd_mm,
  462. .num_rate_max = VDD_NUM,
  463. .rate_max = (unsigned long[VDD_NUM]) {
  464. [VDD_LOWER_D1] = 19200,
  465. [VDD_LOWER] = 270000,
  466. [VDD_LOW_L1] = 540000,
  467. [VDD_NOMINAL] = 810000},
  468. },
  469. };
  470. static struct clk_rcg2 disp_cc_mdss_dptx1_pixel0_clk_src = {
  471. .cmd_rcgr = 0x81d4,
  472. .mnd_width = 16,
  473. .hid_width = 5,
  474. .parent_map = disp_cc_parent_map_1,
  475. .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
  476. .clkr.hw.init = &(struct clk_init_data){
  477. .name = "disp_cc_mdss_dptx1_pixel0_clk_src",
  478. .parent_data = disp_cc_parent_data_1,
  479. .num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
  480. .flags = CLK_SET_RATE_PARENT,
  481. .ops = &clk_dp_ops,
  482. },
  483. .clkr.vdd_data = {
  484. .vdd_class = &vdd_mm,
  485. .num_rate_max = VDD_NUM,
  486. .rate_max = (unsigned long[VDD_NUM]) {
  487. [VDD_LOWER_D1] = 19200,
  488. [VDD_LOWER] = 337500,
  489. [VDD_LOW_L1] = 405000,
  490. [VDD_NOMINAL] = 675000},
  491. },
  492. };
  493. static struct clk_rcg2 disp_cc_mdss_dptx1_pixel1_clk_src = {
  494. .cmd_rcgr = 0x81ec,
  495. .mnd_width = 16,
  496. .hid_width = 5,
  497. .parent_map = disp_cc_parent_map_1,
  498. .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
  499. .clkr.hw.init = &(struct clk_init_data){
  500. .name = "disp_cc_mdss_dptx1_pixel1_clk_src",
  501. .parent_data = disp_cc_parent_data_1,
  502. .num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
  503. .flags = CLK_SET_RATE_PARENT,
  504. .ops = &clk_dp_ops,
  505. },
  506. .clkr.vdd_data = {
  507. .vdd_class = &vdd_mm,
  508. .num_rate_max = VDD_NUM,
  509. .rate_max = (unsigned long[VDD_NUM]) {
  510. [VDD_LOWER_D1] = 19200,
  511. [VDD_LOWER] = 337500,
  512. [VDD_LOW_L1] = 405000,
  513. [VDD_NOMINAL] = 675000},
  514. },
  515. };
  516. static struct clk_rcg2 disp_cc_mdss_dptx2_aux_clk_src = {
  517. .cmd_rcgr = 0x8284,
  518. .mnd_width = 0,
  519. .hid_width = 5,
  520. .parent_map = disp_cc_parent_map_0,
  521. .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
  522. .clkr.hw.init = &(struct clk_init_data){
  523. .name = "disp_cc_mdss_dptx2_aux_clk_src",
  524. .parent_data = disp_cc_parent_data_0,
  525. .num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
  526. .flags = CLK_SET_RATE_PARENT,
  527. .ops = &clk_rcg2_ops,
  528. },
  529. .clkr.vdd_data = {
  530. .vdd_class = &vdd_mm,
  531. .num_rate_max = VDD_NUM,
  532. .rate_max = (unsigned long[VDD_NUM]) {
  533. [VDD_LOWER_D1] = 19200000},
  534. },
  535. };
  536. static struct clk_rcg2 disp_cc_mdss_dptx2_link_clk_src = {
  537. .cmd_rcgr = 0x8238,
  538. .mnd_width = 0,
  539. .hid_width = 5,
  540. .parent_map = disp_cc_parent_map_3,
  541. .freq_tbl = ftbl_disp_cc_mdss_dptx0_link_clk_src,
  542. .clkr.hw.init = &(struct clk_init_data){
  543. .name = "disp_cc_mdss_dptx2_link_clk_src",
  544. .parent_data = disp_cc_parent_data_3,
  545. .num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
  546. .flags = CLK_SET_RATE_PARENT,
  547. .ops = &clk_rcg2_ops,
  548. },
  549. .clkr.vdd_data = {
  550. .vdd_class = &vdd_mm,
  551. .num_rate_max = VDD_NUM,
  552. .rate_max = (unsigned long[VDD_NUM]) {
  553. [VDD_LOWER_D1] = 19200,
  554. [VDD_LOWER] = 270000,
  555. [VDD_LOW_L1] = 540000,
  556. [VDD_NOMINAL] = 810000},
  557. },
  558. };
  559. static struct clk_rcg2 disp_cc_mdss_dptx2_pixel0_clk_src = {
  560. .cmd_rcgr = 0x8254,
  561. .mnd_width = 16,
  562. .hid_width = 5,
  563. .parent_map = disp_cc_parent_map_1,
  564. .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
  565. .clkr.hw.init = &(struct clk_init_data){
  566. .name = "disp_cc_mdss_dptx2_pixel0_clk_src",
  567. .parent_data = disp_cc_parent_data_1,
  568. .num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
  569. .flags = CLK_SET_RATE_PARENT,
  570. .ops = &clk_dp_ops,
  571. },
  572. .clkr.vdd_data = {
  573. .vdd_class = &vdd_mm,
  574. .num_rate_max = VDD_NUM,
  575. .rate_max = (unsigned long[VDD_NUM]) {
  576. [VDD_LOWER_D1] = 19200,
  577. [VDD_LOWER] = 337500,
  578. [VDD_LOW_L1] = 405000,
  579. [VDD_NOMINAL] = 675000},
  580. },
  581. };
  582. static struct clk_rcg2 disp_cc_mdss_dptx2_pixel1_clk_src = {
  583. .cmd_rcgr = 0x826c,
  584. .mnd_width = 16,
  585. .hid_width = 5,
  586. .parent_map = disp_cc_parent_map_1,
  587. .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
  588. .clkr.hw.init = &(struct clk_init_data){
  589. .name = "disp_cc_mdss_dptx2_pixel1_clk_src",
  590. .parent_data = disp_cc_parent_data_1,
  591. .num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
  592. .flags = CLK_SET_RATE_PARENT,
  593. .ops = &clk_dp_ops,
  594. },
  595. .clkr.vdd_data = {
  596. .vdd_class = &vdd_mm,
  597. .num_rate_max = VDD_NUM,
  598. .rate_max = (unsigned long[VDD_NUM]) {
  599. [VDD_LOWER_D1] = 19200,
  600. [VDD_LOWER] = 337500,
  601. [VDD_LOW_L1] = 405000,
  602. [VDD_NOMINAL] = 675000},
  603. },
  604. };
  605. static struct clk_rcg2 disp_cc_mdss_dptx3_aux_clk_src = {
  606. .cmd_rcgr = 0x82d0,
  607. .mnd_width = 0,
  608. .hid_width = 5,
  609. .parent_map = disp_cc_parent_map_0,
  610. .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
  611. .clkr.hw.init = &(struct clk_init_data){
  612. .name = "disp_cc_mdss_dptx3_aux_clk_src",
  613. .parent_data = disp_cc_parent_data_0,
  614. .num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
  615. .flags = CLK_SET_RATE_PARENT,
  616. .ops = &clk_rcg2_ops,
  617. },
  618. .clkr.vdd_data = {
  619. .vdd_class = &vdd_mm,
  620. .num_rate_max = VDD_NUM,
  621. .rate_max = (unsigned long[VDD_NUM]) {
  622. [VDD_LOWER_D1] = 19200000},
  623. },
  624. };
  625. static struct clk_rcg2 disp_cc_mdss_dptx3_link_clk_src = {
  626. .cmd_rcgr = 0x82b4,
  627. .mnd_width = 0,
  628. .hid_width = 5,
  629. .parent_map = disp_cc_parent_map_3,
  630. .freq_tbl = ftbl_disp_cc_mdss_dptx0_link_clk_src,
  631. .clkr.hw.init = &(struct clk_init_data){
  632. .name = "disp_cc_mdss_dptx3_link_clk_src",
  633. .parent_data = disp_cc_parent_data_3,
  634. .num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
  635. .flags = CLK_SET_RATE_PARENT,
  636. .ops = &clk_rcg2_ops,
  637. },
  638. .clkr.vdd_data = {
  639. .vdd_class = &vdd_mm,
  640. .num_rate_max = VDD_NUM,
  641. .rate_max = (unsigned long[VDD_NUM]) {
  642. [VDD_LOWER_D1] = 19200,
  643. [VDD_LOWER] = 270000,
  644. [VDD_LOW] = 594000,
  645. [VDD_NOMINAL] = 810000},
  646. },
  647. };
  648. static struct clk_rcg2 disp_cc_mdss_dptx3_pixel0_clk_src = {
  649. .cmd_rcgr = 0x829c,
  650. .mnd_width = 16,
  651. .hid_width = 5,
  652. .parent_map = disp_cc_parent_map_1,
  653. .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
  654. .clkr.hw.init = &(struct clk_init_data){
  655. .name = "disp_cc_mdss_dptx3_pixel0_clk_src",
  656. .parent_data = disp_cc_parent_data_1,
  657. .num_parents = ARRAY_SIZE(disp_cc_parent_data_1),
  658. .flags = CLK_SET_RATE_PARENT,
  659. .ops = &clk_dp_ops,
  660. },
  661. .clkr.vdd_data = {
  662. .vdd_class = &vdd_mm,
  663. .num_rate_max = VDD_NUM,
  664. .rate_max = (unsigned long[VDD_NUM]) {
  665. [VDD_LOWER_D1] = 19200,
  666. [VDD_LOWER] = 337500,
  667. [VDD_LOW_L1] = 405000,
  668. [VDD_NOMINAL] = 675000},
  669. },
  670. };
  671. static struct clk_rcg2 disp_cc_mdss_esc0_clk_src = {
  672. .cmd_rcgr = 0x8140,
  673. .mnd_width = 0,
  674. .hid_width = 5,
  675. .parent_map = disp_cc_parent_map_5,
  676. .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
  677. .clkr.hw.init = &(struct clk_init_data){
  678. .name = "disp_cc_mdss_esc0_clk_src",
  679. .parent_data = disp_cc_parent_data_5,
  680. .num_parents = ARRAY_SIZE(disp_cc_parent_data_5),
  681. .flags = CLK_SET_RATE_PARENT,
  682. .ops = &clk_rcg2_ops,
  683. },
  684. .clkr.vdd_data = {
  685. .vdd_class = &vdd_mm,
  686. .num_rate_max = VDD_NUM,
  687. .rate_max = (unsigned long[VDD_NUM]) {
  688. [VDD_LOWER_D1] = 19200000},
  689. },
  690. };
  691. static struct clk_rcg2 disp_cc_mdss_esc1_clk_src = {
  692. .cmd_rcgr = 0x8158,
  693. .mnd_width = 0,
  694. .hid_width = 5,
  695. .parent_map = disp_cc_parent_map_5,
  696. .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
  697. .clkr.hw.init = &(struct clk_init_data){
  698. .name = "disp_cc_mdss_esc1_clk_src",
  699. .parent_data = disp_cc_parent_data_5,
  700. .num_parents = ARRAY_SIZE(disp_cc_parent_data_5),
  701. .flags = CLK_SET_RATE_PARENT,
  702. .ops = &clk_rcg2_ops,
  703. },
  704. .clkr.vdd_data = {
  705. .vdd_class = &vdd_mm,
  706. .num_rate_max = VDD_NUM,
  707. .rate_max = (unsigned long[VDD_NUM]) {
  708. [VDD_LOWER_D1] = 19200000},
  709. },
  710. };
  711. static const struct freq_tbl ftbl_disp_cc_mdss_mdp_clk_src[] = {
  712. F(19200000, P_BI_TCXO, 1, 0, 0),
  713. F(85714286, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
  714. F(100000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
  715. F(150000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
  716. F(172000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
  717. F(200000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
  718. F(325000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
  719. F(375000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
  720. F(514000000, P_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
  721. { }
  722. };
  723. static struct clk_rcg2 disp_cc_mdss_mdp_clk_src = {
  724. .cmd_rcgr = 0x80d8,
  725. .mnd_width = 0,
  726. .hid_width = 5,
  727. .parent_map = disp_cc_parent_map_8,
  728. .freq_tbl = ftbl_disp_cc_mdss_mdp_clk_src,
  729. .enable_safe_config = true,
  730. .flags = HW_CLK_CTRL_MODE,
  731. .clkr.hw.init = &(struct clk_init_data){
  732. .name = "disp_cc_mdss_mdp_clk_src",
  733. .parent_data = disp_cc_parent_data_8,
  734. .num_parents = ARRAY_SIZE(disp_cc_parent_data_8),
  735. .flags = CLK_SET_RATE_PARENT,
  736. .ops = &clk_rcg2_ops,
  737. },
  738. .clkr.vdd_data = {
  739. .vdd_classes = disp_cc_kalama_regulators,
  740. .num_vdd_classes = ARRAY_SIZE(disp_cc_kalama_regulators),
  741. .num_rate_max = VDD_NUM,
  742. .rate_max = (unsigned long[VDD_NUM]) {
  743. [VDD_LOWER_D1] = 172000000,
  744. [VDD_LOWER] = 200000000,
  745. [VDD_LOW] = 325000000,
  746. [VDD_LOW_L1] = 375000000,
  747. [VDD_NOMINAL] = 514000000},
  748. },
  749. };
  750. static struct clk_rcg2 disp_cc_mdss_pclk0_clk_src = {
  751. .cmd_rcgr = 0x80a8,
  752. .mnd_width = 8,
  753. .hid_width = 5,
  754. .parent_map = disp_cc_parent_map_2,
  755. .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
  756. .clkr.hw.init = &(struct clk_init_data){
  757. .name = "disp_cc_mdss_pclk0_clk_src",
  758. .parent_data = disp_cc_parent_data_2,
  759. .num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
  760. .flags = CLK_SET_RATE_PARENT,
  761. .ops = &clk_pixel_ops,
  762. },
  763. .clkr.vdd_data = {
  764. .vdd_class = &vdd_mm,
  765. .num_rate_max = VDD_NUM,
  766. .rate_max = (unsigned long[VDD_NUM]) {
  767. [VDD_LOWER_D1] = 280545000,
  768. [VDD_LOWER] = 300000000,
  769. [VDD_LOW] = 480000000,
  770. [VDD_LOW_L1] = 625000000},
  771. },
  772. };
  773. static struct clk_rcg2 disp_cc_mdss_pclk1_clk_src = {
  774. .cmd_rcgr = 0x80c0,
  775. .mnd_width = 8,
  776. .hid_width = 5,
  777. .parent_map = disp_cc_parent_map_2,
  778. .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
  779. .clkr.hw.init = &(struct clk_init_data){
  780. .name = "disp_cc_mdss_pclk1_clk_src",
  781. .parent_data = disp_cc_parent_data_2,
  782. .num_parents = ARRAY_SIZE(disp_cc_parent_data_2),
  783. .flags = CLK_SET_RATE_PARENT,
  784. .ops = &clk_pixel_ops,
  785. },
  786. .clkr.vdd_data = {
  787. .vdd_class = &vdd_mm,
  788. .num_rate_max = VDD_NUM,
  789. .rate_max = (unsigned long[VDD_NUM]) {
  790. [VDD_LOWER_D1] = 280545000,
  791. [VDD_LOWER] = 300000000,
  792. [VDD_LOW] = 480000000,
  793. [VDD_LOW_L1] = 625000000},
  794. },
  795. };
  796. static struct clk_rcg2 disp_cc_mdss_vsync_clk_src = {
  797. .cmd_rcgr = 0x80f0,
  798. .mnd_width = 0,
  799. .hid_width = 5,
  800. .parent_map = disp_cc_parent_map_0,
  801. .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
  802. .clkr.hw.init = &(struct clk_init_data){
  803. .name = "disp_cc_mdss_vsync_clk_src",
  804. .parent_data = disp_cc_parent_data_0,
  805. .num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
  806. .flags = CLK_SET_RATE_PARENT,
  807. .ops = &clk_rcg2_ops,
  808. },
  809. .clkr.vdd_data = {
  810. .vdd_class = &vdd_mm,
  811. .num_rate_max = VDD_NUM,
  812. .rate_max = (unsigned long[VDD_NUM]) {
  813. [VDD_LOWER_D1] = 19200000},
  814. },
  815. };
  816. static const struct freq_tbl ftbl_disp_cc_sleep_clk_src[] = {
  817. F(32000, P_SLEEP_CLK, 1, 0, 0),
  818. { }
  819. };
  820. static struct clk_rcg2 disp_cc_sleep_clk_src = {
  821. .cmd_rcgr = 0xe05c,
  822. .mnd_width = 0,
  823. .hid_width = 5,
  824. .parent_map = disp_cc_parent_map_9,
  825. .freq_tbl = ftbl_disp_cc_sleep_clk_src,
  826. .clkr.hw.init = &(struct clk_init_data){
  827. .name = "disp_cc_sleep_clk_src",
  828. .parent_data = disp_cc_parent_data_9,
  829. .num_parents = ARRAY_SIZE(disp_cc_parent_data_9),
  830. .flags = CLK_SET_RATE_PARENT,
  831. .ops = &clk_rcg2_ops,
  832. },
  833. .clkr.vdd_data = {
  834. .vdd_class = &vdd_mm,
  835. .num_rate_max = VDD_NUM,
  836. .rate_max = (unsigned long[VDD_NUM]) {
  837. [VDD_LOWER_D1] = 32000},
  838. },
  839. };
  840. static struct clk_rcg2 disp_cc_xo_clk_src = {
  841. .cmd_rcgr = 0xe03c,
  842. .mnd_width = 0,
  843. .hid_width = 5,
  844. .parent_map = disp_cc_parent_map_0,
  845. .freq_tbl = ftbl_disp_cc_mdss_byte0_clk_src,
  846. .clkr.hw.init = &(struct clk_init_data){
  847. .name = "disp_cc_xo_clk_src",
  848. .parent_data = disp_cc_parent_data_0_ao,
  849. .num_parents = ARRAY_SIZE(disp_cc_parent_data_0_ao),
  850. .flags = CLK_SET_RATE_PARENT,
  851. .ops = &clk_rcg2_ops,
  852. },
  853. };
  854. static struct clk_regmap_div disp_cc_mdss_byte0_div_clk_src = {
  855. .reg = 0x8120,
  856. .shift = 0,
  857. .width = 4,
  858. .clkr.hw.init = &(struct clk_init_data) {
  859. .name = "disp_cc_mdss_byte0_div_clk_src",
  860. .parent_hws = (const struct clk_hw*[]){
  861. &disp_cc_mdss_byte0_clk_src.clkr.hw,
  862. },
  863. .num_parents = 1,
  864. .flags = CLK_SET_RATE_PARENT,
  865. .ops = &clk_regmap_div_ops,
  866. },
  867. };
  868. static struct clk_regmap_div disp_cc_mdss_byte1_div_clk_src = {
  869. .reg = 0x813c,
  870. .shift = 0,
  871. .width = 4,
  872. .clkr.hw.init = &(struct clk_init_data) {
  873. .name = "disp_cc_mdss_byte1_div_clk_src",
  874. .parent_hws = (const struct clk_hw*[]){
  875. &disp_cc_mdss_byte1_clk_src.clkr.hw,
  876. },
  877. .num_parents = 1,
  878. .flags = CLK_SET_RATE_PARENT,
  879. .ops = &clk_regmap_div_ops,
  880. },
  881. };
  882. static struct clk_regmap_div disp_cc_mdss_dptx0_link_div_clk_src = {
  883. .reg = 0x8188,
  884. .shift = 0,
  885. .width = 4,
  886. .clkr.hw.init = &(struct clk_init_data) {
  887. .name = "disp_cc_mdss_dptx0_link_div_clk_src",
  888. .parent_hws = (const struct clk_hw*[]){
  889. &disp_cc_mdss_dptx0_link_clk_src.clkr.hw,
  890. },
  891. .num_parents = 1,
  892. .flags = CLK_SET_RATE_PARENT,
  893. .ops = &clk_regmap_div_ro_ops,
  894. },
  895. };
  896. static struct clk_regmap_div disp_cc_mdss_dptx1_link_div_clk_src = {
  897. .reg = 0x821c,
  898. .shift = 0,
  899. .width = 4,
  900. .clkr.hw.init = &(struct clk_init_data) {
  901. .name = "disp_cc_mdss_dptx1_link_div_clk_src",
  902. .parent_hws = (const struct clk_hw*[]){
  903. &disp_cc_mdss_dptx1_link_clk_src.clkr.hw,
  904. },
  905. .num_parents = 1,
  906. .flags = CLK_SET_RATE_PARENT,
  907. .ops = &clk_regmap_div_ro_ops,
  908. },
  909. };
  910. static struct clk_regmap_div disp_cc_mdss_dptx2_link_div_clk_src = {
  911. .reg = 0x8250,
  912. .shift = 0,
  913. .width = 4,
  914. .clkr.hw.init = &(struct clk_init_data) {
  915. .name = "disp_cc_mdss_dptx2_link_div_clk_src",
  916. .parent_hws = (const struct clk_hw*[]){
  917. &disp_cc_mdss_dptx2_link_clk_src.clkr.hw,
  918. },
  919. .num_parents = 1,
  920. .flags = CLK_SET_RATE_PARENT,
  921. .ops = &clk_regmap_div_ro_ops,
  922. },
  923. };
  924. static struct clk_regmap_div disp_cc_mdss_dptx3_link_div_clk_src = {
  925. .reg = 0x82cc,
  926. .shift = 0,
  927. .width = 4,
  928. .clkr.hw.init = &(struct clk_init_data) {
  929. .name = "disp_cc_mdss_dptx3_link_div_clk_src",
  930. .parent_hws = (const struct clk_hw*[]){
  931. &disp_cc_mdss_dptx3_link_clk_src.clkr.hw,
  932. },
  933. .num_parents = 1,
  934. .flags = CLK_SET_RATE_PARENT,
  935. .ops = &clk_regmap_div_ro_ops,
  936. },
  937. };
  938. static struct clk_branch disp_cc_mdss_accu_clk = {
  939. .halt_reg = 0xe058,
  940. .halt_check = BRANCH_HALT_VOTED,
  941. .clkr = {
  942. .enable_reg = 0xe058,
  943. .enable_mask = BIT(0),
  944. .hw.init = &(struct clk_init_data){
  945. .name = "disp_cc_mdss_accu_clk",
  946. .parent_hws = (const struct clk_hw*[]){
  947. &disp_cc_xo_clk_src.clkr.hw,
  948. },
  949. .num_parents = 1,
  950. .flags = CLK_SET_RATE_PARENT,
  951. .ops = &clk_branch2_ops,
  952. },
  953. },
  954. };
  955. static struct clk_branch disp_cc_mdss_ahb1_clk = {
  956. .halt_reg = 0xa020,
  957. .halt_check = BRANCH_HALT,
  958. .clkr = {
  959. .enable_reg = 0xa020,
  960. .enable_mask = BIT(0),
  961. .hw.init = &(struct clk_init_data){
  962. .name = "disp_cc_mdss_ahb1_clk",
  963. .parent_hws = (const struct clk_hw*[]){
  964. &disp_cc_mdss_ahb_clk_src.clkr.hw,
  965. },
  966. .num_parents = 1,
  967. .flags = CLK_DONT_HOLD_STATE | CLK_SET_RATE_PARENT,
  968. .ops = &clk_branch2_ops,
  969. },
  970. },
  971. };
  972. static struct clk_branch disp_cc_mdss_ahb_clk = {
  973. .halt_reg = 0x80a4,
  974. .halt_check = BRANCH_HALT,
  975. .clkr = {
  976. .enable_reg = 0x80a4,
  977. .enable_mask = BIT(0),
  978. .hw.init = &(struct clk_init_data){
  979. .name = "disp_cc_mdss_ahb_clk",
  980. .parent_hws = (const struct clk_hw*[]){
  981. &disp_cc_mdss_ahb_clk_src.clkr.hw,
  982. },
  983. .num_parents = 1,
  984. .flags = CLK_DONT_HOLD_STATE | CLK_SET_RATE_PARENT,
  985. .ops = &clk_branch2_ops,
  986. },
  987. },
  988. };
  989. static struct clk_branch disp_cc_mdss_byte0_clk = {
  990. .halt_reg = 0x8028,
  991. .halt_check = BRANCH_HALT,
  992. .clkr = {
  993. .enable_reg = 0x8028,
  994. .enable_mask = BIT(0),
  995. .hw.init = &(struct clk_init_data){
  996. .name = "disp_cc_mdss_byte0_clk",
  997. .parent_hws = (const struct clk_hw*[]){
  998. &disp_cc_mdss_byte0_clk_src.clkr.hw,
  999. },
  1000. .num_parents = 1,
  1001. .flags = CLK_SET_RATE_PARENT,
  1002. .ops = &clk_branch2_ops,
  1003. },
  1004. },
  1005. };
  1006. static struct clk_branch disp_cc_mdss_byte0_intf_clk = {
  1007. .halt_reg = 0x802c,
  1008. .halt_check = BRANCH_HALT,
  1009. .clkr = {
  1010. .enable_reg = 0x802c,
  1011. .enable_mask = BIT(0),
  1012. .hw.init = &(struct clk_init_data){
  1013. .name = "disp_cc_mdss_byte0_intf_clk",
  1014. .parent_hws = (const struct clk_hw*[]){
  1015. &disp_cc_mdss_byte0_div_clk_src.clkr.hw,
  1016. },
  1017. .num_parents = 1,
  1018. .flags = CLK_SET_RATE_PARENT,
  1019. .ops = &clk_branch2_ops,
  1020. },
  1021. },
  1022. };
  1023. static struct clk_branch disp_cc_mdss_byte1_clk = {
  1024. .halt_reg = 0x8030,
  1025. .halt_check = BRANCH_HALT,
  1026. .clkr = {
  1027. .enable_reg = 0x8030,
  1028. .enable_mask = BIT(0),
  1029. .hw.init = &(struct clk_init_data){
  1030. .name = "disp_cc_mdss_byte1_clk",
  1031. .parent_hws = (const struct clk_hw*[]){
  1032. &disp_cc_mdss_byte1_clk_src.clkr.hw,
  1033. },
  1034. .num_parents = 1,
  1035. .flags = CLK_SET_RATE_PARENT,
  1036. .ops = &clk_branch2_ops,
  1037. },
  1038. },
  1039. };
  1040. static struct clk_branch disp_cc_mdss_byte1_intf_clk = {
  1041. .halt_reg = 0x8034,
  1042. .halt_check = BRANCH_HALT,
  1043. .clkr = {
  1044. .enable_reg = 0x8034,
  1045. .enable_mask = BIT(0),
  1046. .hw.init = &(struct clk_init_data){
  1047. .name = "disp_cc_mdss_byte1_intf_clk",
  1048. .parent_hws = (const struct clk_hw*[]){
  1049. &disp_cc_mdss_byte1_div_clk_src.clkr.hw,
  1050. },
  1051. .num_parents = 1,
  1052. .flags = CLK_SET_RATE_PARENT,
  1053. .ops = &clk_branch2_ops,
  1054. },
  1055. },
  1056. };
  1057. static struct clk_branch disp_cc_mdss_dptx0_aux_clk = {
  1058. .halt_reg = 0x8058,
  1059. .halt_check = BRANCH_HALT,
  1060. .clkr = {
  1061. .enable_reg = 0x8058,
  1062. .enable_mask = BIT(0),
  1063. .hw.init = &(struct clk_init_data){
  1064. .name = "disp_cc_mdss_dptx0_aux_clk",
  1065. .parent_hws = (const struct clk_hw*[]){
  1066. &disp_cc_mdss_dptx0_aux_clk_src.clkr.hw,
  1067. },
  1068. .num_parents = 1,
  1069. .flags = CLK_SET_RATE_PARENT,
  1070. .ops = &clk_branch2_ops,
  1071. },
  1072. },
  1073. };
  1074. static struct clk_branch disp_cc_mdss_dptx0_crypto_clk = {
  1075. .halt_reg = 0x804c,
  1076. .halt_check = BRANCH_HALT,
  1077. .clkr = {
  1078. .enable_reg = 0x804c,
  1079. .enable_mask = BIT(0),
  1080. .hw.init = &(struct clk_init_data){
  1081. .name = "disp_cc_mdss_dptx0_crypto_clk",
  1082. .parent_hws = (const struct clk_hw*[]){
  1083. &disp_cc_mdss_dptx0_link_clk_src.clkr.hw,
  1084. },
  1085. .num_parents = 1,
  1086. .flags = CLK_SET_RATE_PARENT,
  1087. .ops = &clk_branch2_ops,
  1088. },
  1089. },
  1090. };
  1091. static struct clk_branch disp_cc_mdss_dptx0_link_clk = {
  1092. .halt_reg = 0x8040,
  1093. .halt_check = BRANCH_HALT,
  1094. .clkr = {
  1095. .enable_reg = 0x8040,
  1096. .enable_mask = BIT(0),
  1097. .hw.init = &(struct clk_init_data){
  1098. .name = "disp_cc_mdss_dptx0_link_clk",
  1099. .parent_hws = (const struct clk_hw*[]){
  1100. &disp_cc_mdss_dptx0_link_clk_src.clkr.hw,
  1101. },
  1102. .num_parents = 1,
  1103. .flags = CLK_SET_RATE_PARENT,
  1104. .ops = &clk_branch2_ops,
  1105. },
  1106. },
  1107. };
  1108. static struct clk_branch disp_cc_mdss_dptx0_link_intf_clk = {
  1109. .halt_reg = 0x8048,
  1110. .halt_check = BRANCH_HALT,
  1111. .clkr = {
  1112. .enable_reg = 0x8048,
  1113. .enable_mask = BIT(0),
  1114. .hw.init = &(struct clk_init_data){
  1115. .name = "disp_cc_mdss_dptx0_link_intf_clk",
  1116. .parent_hws = (const struct clk_hw*[]){
  1117. &disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw,
  1118. },
  1119. .num_parents = 1,
  1120. .flags = CLK_SET_RATE_PARENT,
  1121. .ops = &clk_branch2_ops,
  1122. },
  1123. },
  1124. };
  1125. static struct clk_branch disp_cc_mdss_dptx0_pixel0_clk = {
  1126. .halt_reg = 0x8050,
  1127. .halt_check = BRANCH_HALT,
  1128. .clkr = {
  1129. .enable_reg = 0x8050,
  1130. .enable_mask = BIT(0),
  1131. .hw.init = &(struct clk_init_data){
  1132. .name = "disp_cc_mdss_dptx0_pixel0_clk",
  1133. .parent_hws = (const struct clk_hw*[]){
  1134. &disp_cc_mdss_dptx0_pixel0_clk_src.clkr.hw,
  1135. },
  1136. .num_parents = 1,
  1137. .flags = CLK_SET_RATE_PARENT,
  1138. .ops = &clk_branch2_ops,
  1139. },
  1140. },
  1141. };
  1142. static struct clk_branch disp_cc_mdss_dptx0_pixel1_clk = {
  1143. .halt_reg = 0x8054,
  1144. .halt_check = BRANCH_HALT,
  1145. .clkr = {
  1146. .enable_reg = 0x8054,
  1147. .enable_mask = BIT(0),
  1148. .hw.init = &(struct clk_init_data){
  1149. .name = "disp_cc_mdss_dptx0_pixel1_clk",
  1150. .parent_hws = (const struct clk_hw*[]){
  1151. &disp_cc_mdss_dptx0_pixel1_clk_src.clkr.hw,
  1152. },
  1153. .num_parents = 1,
  1154. .flags = CLK_SET_RATE_PARENT,
  1155. .ops = &clk_branch2_ops,
  1156. },
  1157. },
  1158. };
  1159. static struct clk_branch disp_cc_mdss_dptx0_usb_router_link_intf_clk = {
  1160. .halt_reg = 0x8044,
  1161. .halt_check = BRANCH_HALT,
  1162. .clkr = {
  1163. .enable_reg = 0x8044,
  1164. .enable_mask = BIT(0),
  1165. .hw.init = &(struct clk_init_data){
  1166. .name = "disp_cc_mdss_dptx0_usb_router_link_intf_clk",
  1167. .parent_hws = (const struct clk_hw*[]){
  1168. &disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw,
  1169. },
  1170. .num_parents = 1,
  1171. .flags = CLK_SET_RATE_PARENT,
  1172. .ops = &clk_branch2_ops,
  1173. },
  1174. },
  1175. };
  1176. static struct clk_branch disp_cc_mdss_dptx1_aux_clk = {
  1177. .halt_reg = 0x8074,
  1178. .halt_check = BRANCH_HALT,
  1179. .clkr = {
  1180. .enable_reg = 0x8074,
  1181. .enable_mask = BIT(0),
  1182. .hw.init = &(struct clk_init_data){
  1183. .name = "disp_cc_mdss_dptx1_aux_clk",
  1184. .parent_hws = (const struct clk_hw*[]){
  1185. &disp_cc_mdss_dptx1_aux_clk_src.clkr.hw,
  1186. },
  1187. .num_parents = 1,
  1188. .flags = CLK_SET_RATE_PARENT,
  1189. .ops = &clk_branch2_ops,
  1190. },
  1191. },
  1192. };
  1193. static struct clk_branch disp_cc_mdss_dptx1_crypto_clk = {
  1194. .halt_reg = 0x8070,
  1195. .halt_check = BRANCH_HALT,
  1196. .clkr = {
  1197. .enable_reg = 0x8070,
  1198. .enable_mask = BIT(0),
  1199. .hw.init = &(struct clk_init_data){
  1200. .name = "disp_cc_mdss_dptx1_crypto_clk",
  1201. .parent_hws = (const struct clk_hw*[]){
  1202. &disp_cc_mdss_dptx1_link_clk_src.clkr.hw,
  1203. },
  1204. .num_parents = 1,
  1205. .flags = CLK_SET_RATE_PARENT,
  1206. .ops = &clk_branch2_ops,
  1207. },
  1208. },
  1209. };
  1210. static struct clk_branch disp_cc_mdss_dptx1_link_clk = {
  1211. .halt_reg = 0x8064,
  1212. .halt_check = BRANCH_HALT,
  1213. .clkr = {
  1214. .enable_reg = 0x8064,
  1215. .enable_mask = BIT(0),
  1216. .hw.init = &(struct clk_init_data){
  1217. .name = "disp_cc_mdss_dptx1_link_clk",
  1218. .parent_hws = (const struct clk_hw*[]){
  1219. &disp_cc_mdss_dptx1_link_clk_src.clkr.hw,
  1220. },
  1221. .num_parents = 1,
  1222. .flags = CLK_SET_RATE_PARENT,
  1223. .ops = &clk_branch2_ops,
  1224. },
  1225. },
  1226. };
  1227. static struct clk_branch disp_cc_mdss_dptx1_link_intf_clk = {
  1228. .halt_reg = 0x806c,
  1229. .halt_check = BRANCH_HALT,
  1230. .clkr = {
  1231. .enable_reg = 0x806c,
  1232. .enable_mask = BIT(0),
  1233. .hw.init = &(struct clk_init_data){
  1234. .name = "disp_cc_mdss_dptx1_link_intf_clk",
  1235. .parent_hws = (const struct clk_hw*[]){
  1236. &disp_cc_mdss_dptx1_link_div_clk_src.clkr.hw,
  1237. },
  1238. .num_parents = 1,
  1239. .flags = CLK_SET_RATE_PARENT,
  1240. .ops = &clk_branch2_ops,
  1241. },
  1242. },
  1243. };
  1244. static struct clk_branch disp_cc_mdss_dptx1_pixel0_clk = {
  1245. .halt_reg = 0x805c,
  1246. .halt_check = BRANCH_HALT,
  1247. .clkr = {
  1248. .enable_reg = 0x805c,
  1249. .enable_mask = BIT(0),
  1250. .hw.init = &(struct clk_init_data){
  1251. .name = "disp_cc_mdss_dptx1_pixel0_clk",
  1252. .parent_hws = (const struct clk_hw*[]){
  1253. &disp_cc_mdss_dptx1_pixel0_clk_src.clkr.hw,
  1254. },
  1255. .num_parents = 1,
  1256. .flags = CLK_SET_RATE_PARENT,
  1257. .ops = &clk_branch2_ops,
  1258. },
  1259. },
  1260. };
  1261. static struct clk_branch disp_cc_mdss_dptx1_pixel1_clk = {
  1262. .halt_reg = 0x8060,
  1263. .halt_check = BRANCH_HALT,
  1264. .clkr = {
  1265. .enable_reg = 0x8060,
  1266. .enable_mask = BIT(0),
  1267. .hw.init = &(struct clk_init_data){
  1268. .name = "disp_cc_mdss_dptx1_pixel1_clk",
  1269. .parent_hws = (const struct clk_hw*[]){
  1270. &disp_cc_mdss_dptx1_pixel1_clk_src.clkr.hw,
  1271. },
  1272. .num_parents = 1,
  1273. .flags = CLK_SET_RATE_PARENT,
  1274. .ops = &clk_branch2_ops,
  1275. },
  1276. },
  1277. };
  1278. static struct clk_branch disp_cc_mdss_dptx1_usb_router_link_intf_clk = {
  1279. .halt_reg = 0x8068,
  1280. .halt_check = BRANCH_HALT,
  1281. .clkr = {
  1282. .enable_reg = 0x8068,
  1283. .enable_mask = BIT(0),
  1284. .hw.init = &(struct clk_init_data){
  1285. .name = "disp_cc_mdss_dptx1_usb_router_link_intf_clk",
  1286. .parent_hws = (const struct clk_hw*[]){
  1287. &disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw,
  1288. },
  1289. .num_parents = 1,
  1290. .flags = CLK_SET_RATE_PARENT,
  1291. .ops = &clk_branch2_ops,
  1292. },
  1293. },
  1294. };
  1295. static struct clk_branch disp_cc_mdss_dptx2_aux_clk = {
  1296. .halt_reg = 0x808c,
  1297. .halt_check = BRANCH_HALT,
  1298. .clkr = {
  1299. .enable_reg = 0x808c,
  1300. .enable_mask = BIT(0),
  1301. .hw.init = &(struct clk_init_data){
  1302. .name = "disp_cc_mdss_dptx2_aux_clk",
  1303. .parent_hws = (const struct clk_hw*[]){
  1304. &disp_cc_mdss_dptx2_aux_clk_src.clkr.hw,
  1305. },
  1306. .num_parents = 1,
  1307. .flags = CLK_SET_RATE_PARENT,
  1308. .ops = &clk_branch2_ops,
  1309. },
  1310. },
  1311. };
  1312. static struct clk_branch disp_cc_mdss_dptx2_crypto_clk = {
  1313. .halt_reg = 0x8088,
  1314. .halt_check = BRANCH_HALT,
  1315. .clkr = {
  1316. .enable_reg = 0x8088,
  1317. .enable_mask = BIT(0),
  1318. .hw.init = &(struct clk_init_data){
  1319. .name = "disp_cc_mdss_dptx2_crypto_clk",
  1320. .parent_hws = (const struct clk_hw*[]){
  1321. &disp_cc_mdss_dptx2_link_clk_src.clkr.hw,
  1322. },
  1323. .num_parents = 1,
  1324. .flags = CLK_SET_RATE_PARENT,
  1325. .ops = &clk_branch2_ops,
  1326. },
  1327. },
  1328. };
  1329. static struct clk_branch disp_cc_mdss_dptx2_link_clk = {
  1330. .halt_reg = 0x8080,
  1331. .halt_check = BRANCH_HALT,
  1332. .clkr = {
  1333. .enable_reg = 0x8080,
  1334. .enable_mask = BIT(0),
  1335. .hw.init = &(struct clk_init_data){
  1336. .name = "disp_cc_mdss_dptx2_link_clk",
  1337. .parent_hws = (const struct clk_hw*[]){
  1338. &disp_cc_mdss_dptx2_link_clk_src.clkr.hw,
  1339. },
  1340. .num_parents = 1,
  1341. .flags = CLK_SET_RATE_PARENT,
  1342. .ops = &clk_branch2_ops,
  1343. },
  1344. },
  1345. };
  1346. static struct clk_branch disp_cc_mdss_dptx2_link_intf_clk = {
  1347. .halt_reg = 0x8084,
  1348. .halt_check = BRANCH_HALT,
  1349. .clkr = {
  1350. .enable_reg = 0x8084,
  1351. .enable_mask = BIT(0),
  1352. .hw.init = &(struct clk_init_data){
  1353. .name = "disp_cc_mdss_dptx2_link_intf_clk",
  1354. .parent_hws = (const struct clk_hw*[]){
  1355. &disp_cc_mdss_dptx2_link_div_clk_src.clkr.hw,
  1356. },
  1357. .num_parents = 1,
  1358. .flags = CLK_SET_RATE_PARENT,
  1359. .ops = &clk_branch2_ops,
  1360. },
  1361. },
  1362. };
  1363. static struct clk_branch disp_cc_mdss_dptx2_pixel0_clk = {
  1364. .halt_reg = 0x8078,
  1365. .halt_check = BRANCH_HALT,
  1366. .clkr = {
  1367. .enable_reg = 0x8078,
  1368. .enable_mask = BIT(0),
  1369. .hw.init = &(struct clk_init_data){
  1370. .name = "disp_cc_mdss_dptx2_pixel0_clk",
  1371. .parent_hws = (const struct clk_hw*[]){
  1372. &disp_cc_mdss_dptx2_pixel0_clk_src.clkr.hw,
  1373. },
  1374. .num_parents = 1,
  1375. .flags = CLK_SET_RATE_PARENT,
  1376. .ops = &clk_branch2_ops,
  1377. },
  1378. },
  1379. };
  1380. static struct clk_branch disp_cc_mdss_dptx2_pixel1_clk = {
  1381. .halt_reg = 0x807c,
  1382. .halt_check = BRANCH_HALT,
  1383. .clkr = {
  1384. .enable_reg = 0x807c,
  1385. .enable_mask = BIT(0),
  1386. .hw.init = &(struct clk_init_data){
  1387. .name = "disp_cc_mdss_dptx2_pixel1_clk",
  1388. .parent_hws = (const struct clk_hw*[]){
  1389. &disp_cc_mdss_dptx2_pixel1_clk_src.clkr.hw,
  1390. },
  1391. .num_parents = 1,
  1392. .flags = CLK_SET_RATE_PARENT,
  1393. .ops = &clk_branch2_ops,
  1394. },
  1395. },
  1396. };
  1397. static struct clk_branch disp_cc_mdss_dptx3_aux_clk = {
  1398. .halt_reg = 0x809c,
  1399. .halt_check = BRANCH_HALT,
  1400. .clkr = {
  1401. .enable_reg = 0x809c,
  1402. .enable_mask = BIT(0),
  1403. .hw.init = &(struct clk_init_data){
  1404. .name = "disp_cc_mdss_dptx3_aux_clk",
  1405. .parent_hws = (const struct clk_hw*[]){
  1406. &disp_cc_mdss_dptx3_aux_clk_src.clkr.hw,
  1407. },
  1408. .num_parents = 1,
  1409. .flags = CLK_SET_RATE_PARENT,
  1410. .ops = &clk_branch2_ops,
  1411. },
  1412. },
  1413. };
  1414. static struct clk_branch disp_cc_mdss_dptx3_crypto_clk = {
  1415. .halt_reg = 0x80a0,
  1416. .halt_check = BRANCH_HALT,
  1417. .clkr = {
  1418. .enable_reg = 0x80a0,
  1419. .enable_mask = BIT(0),
  1420. .hw.init = &(struct clk_init_data){
  1421. .name = "disp_cc_mdss_dptx3_crypto_clk",
  1422. .parent_hws = (const struct clk_hw*[]){
  1423. &disp_cc_mdss_dptx3_link_clk_src.clkr.hw,
  1424. },
  1425. .num_parents = 1,
  1426. .flags = CLK_SET_RATE_PARENT,
  1427. .ops = &clk_branch2_ops,
  1428. },
  1429. },
  1430. };
  1431. static struct clk_branch disp_cc_mdss_dptx3_link_clk = {
  1432. .halt_reg = 0x8094,
  1433. .halt_check = BRANCH_HALT,
  1434. .clkr = {
  1435. .enable_reg = 0x8094,
  1436. .enable_mask = BIT(0),
  1437. .hw.init = &(struct clk_init_data){
  1438. .name = "disp_cc_mdss_dptx3_link_clk",
  1439. .parent_hws = (const struct clk_hw*[]){
  1440. &disp_cc_mdss_dptx3_link_clk_src.clkr.hw,
  1441. },
  1442. .num_parents = 1,
  1443. .flags = CLK_SET_RATE_PARENT,
  1444. .ops = &clk_branch2_ops,
  1445. },
  1446. },
  1447. };
  1448. static struct clk_branch disp_cc_mdss_dptx3_link_intf_clk = {
  1449. .halt_reg = 0x8098,
  1450. .halt_check = BRANCH_HALT,
  1451. .clkr = {
  1452. .enable_reg = 0x8098,
  1453. .enable_mask = BIT(0),
  1454. .hw.init = &(struct clk_init_data){
  1455. .name = "disp_cc_mdss_dptx3_link_intf_clk",
  1456. .parent_hws = (const struct clk_hw*[]){
  1457. &disp_cc_mdss_dptx3_link_div_clk_src.clkr.hw,
  1458. },
  1459. .num_parents = 1,
  1460. .flags = CLK_SET_RATE_PARENT,
  1461. .ops = &clk_branch2_ops,
  1462. },
  1463. },
  1464. };
  1465. static struct clk_branch disp_cc_mdss_dptx3_pixel0_clk = {
  1466. .halt_reg = 0x8090,
  1467. .halt_check = BRANCH_HALT,
  1468. .clkr = {
  1469. .enable_reg = 0x8090,
  1470. .enable_mask = BIT(0),
  1471. .hw.init = &(struct clk_init_data){
  1472. .name = "disp_cc_mdss_dptx3_pixel0_clk",
  1473. .parent_hws = (const struct clk_hw*[]){
  1474. &disp_cc_mdss_dptx3_pixel0_clk_src.clkr.hw,
  1475. },
  1476. .num_parents = 1,
  1477. .flags = CLK_SET_RATE_PARENT,
  1478. .ops = &clk_branch2_ops,
  1479. },
  1480. },
  1481. };
  1482. static struct clk_branch disp_cc_mdss_esc0_clk = {
  1483. .halt_reg = 0x8038,
  1484. .halt_check = BRANCH_HALT,
  1485. .clkr = {
  1486. .enable_reg = 0x8038,
  1487. .enable_mask = BIT(0),
  1488. .hw.init = &(struct clk_init_data){
  1489. .name = "disp_cc_mdss_esc0_clk",
  1490. .parent_hws = (const struct clk_hw*[]){
  1491. &disp_cc_mdss_esc0_clk_src.clkr.hw,
  1492. },
  1493. .num_parents = 1,
  1494. .flags = CLK_SET_RATE_PARENT,
  1495. .ops = &clk_branch2_ops,
  1496. },
  1497. },
  1498. };
  1499. static struct clk_branch disp_cc_mdss_esc1_clk = {
  1500. .halt_reg = 0x803c,
  1501. .halt_check = BRANCH_HALT,
  1502. .clkr = {
  1503. .enable_reg = 0x803c,
  1504. .enable_mask = BIT(0),
  1505. .hw.init = &(struct clk_init_data){
  1506. .name = "disp_cc_mdss_esc1_clk",
  1507. .parent_hws = (const struct clk_hw*[]){
  1508. &disp_cc_mdss_esc1_clk_src.clkr.hw,
  1509. },
  1510. .num_parents = 1,
  1511. .flags = CLK_SET_RATE_PARENT,
  1512. .ops = &clk_branch2_ops,
  1513. },
  1514. },
  1515. };
  1516. static struct clk_branch disp_cc_mdss_mdp1_clk = {
  1517. .halt_reg = 0xa004,
  1518. .halt_check = BRANCH_HALT,
  1519. .clkr = {
  1520. .enable_reg = 0xa004,
  1521. .enable_mask = BIT(0),
  1522. .hw.init = &(struct clk_init_data){
  1523. .name = "disp_cc_mdss_mdp1_clk",
  1524. .parent_hws = (const struct clk_hw*[]){
  1525. &disp_cc_mdss_mdp_clk_src.clkr.hw,
  1526. },
  1527. .num_parents = 1,
  1528. .flags = CLK_SET_RATE_PARENT,
  1529. .ops = &clk_branch2_ops,
  1530. },
  1531. },
  1532. };
  1533. static struct clk_branch disp_cc_mdss_mdp_clk = {
  1534. .halt_reg = 0x800c,
  1535. .halt_check = BRANCH_HALT,
  1536. .clkr = {
  1537. .enable_reg = 0x800c,
  1538. .enable_mask = BIT(0),
  1539. .hw.init = &(struct clk_init_data){
  1540. .name = "disp_cc_mdss_mdp_clk",
  1541. .parent_hws = (const struct clk_hw*[]){
  1542. &disp_cc_mdss_mdp_clk_src.clkr.hw,
  1543. },
  1544. .num_parents = 1,
  1545. .flags = CLK_SET_RATE_PARENT,
  1546. .ops = &clk_branch2_ops,
  1547. },
  1548. },
  1549. };
  1550. static struct clk_branch disp_cc_mdss_mdp_lut1_clk = {
  1551. .halt_reg = 0xa010,
  1552. .halt_check = BRANCH_HALT,
  1553. .clkr = {
  1554. .enable_reg = 0xa010,
  1555. .enable_mask = BIT(0),
  1556. .hw.init = &(struct clk_init_data){
  1557. .name = "disp_cc_mdss_mdp_lut1_clk",
  1558. .parent_hws = (const struct clk_hw*[]){
  1559. &disp_cc_mdss_mdp_clk_src.clkr.hw,
  1560. },
  1561. .num_parents = 1,
  1562. .flags = CLK_SET_RATE_PARENT,
  1563. .ops = &clk_branch2_ops,
  1564. },
  1565. },
  1566. };
  1567. static struct clk_branch disp_cc_mdss_mdp_lut_clk = {
  1568. .halt_reg = 0x8018,
  1569. .halt_check = BRANCH_HALT_VOTED,
  1570. .clkr = {
  1571. .enable_reg = 0x8018,
  1572. .enable_mask = BIT(0),
  1573. .hw.init = &(struct clk_init_data){
  1574. .name = "disp_cc_mdss_mdp_lut_clk",
  1575. .parent_hws = (const struct clk_hw*[]){
  1576. &disp_cc_mdss_mdp_clk_src.clkr.hw,
  1577. },
  1578. .num_parents = 1,
  1579. .flags = CLK_SET_RATE_PARENT,
  1580. .ops = &clk_branch2_ops,
  1581. },
  1582. },
  1583. };
  1584. static struct clk_branch disp_cc_mdss_non_gdsc_ahb_clk = {
  1585. .halt_reg = 0xc004,
  1586. .halt_check = BRANCH_HALT_VOTED,
  1587. .clkr = {
  1588. .enable_reg = 0xc004,
  1589. .enable_mask = BIT(0),
  1590. .hw.init = &(struct clk_init_data){
  1591. .name = "disp_cc_mdss_non_gdsc_ahb_clk",
  1592. .parent_hws = (const struct clk_hw*[]){
  1593. &disp_cc_mdss_ahb_clk_src.clkr.hw,
  1594. },
  1595. .num_parents = 1,
  1596. .flags = CLK_SET_RATE_PARENT,
  1597. .ops = &clk_branch2_ops,
  1598. },
  1599. },
  1600. };
  1601. static struct clk_branch disp_cc_mdss_pclk0_clk = {
  1602. .halt_reg = 0x8004,
  1603. .halt_check = BRANCH_HALT,
  1604. .clkr = {
  1605. .enable_reg = 0x8004,
  1606. .enable_mask = BIT(0),
  1607. .hw.init = &(struct clk_init_data){
  1608. .name = "disp_cc_mdss_pclk0_clk",
  1609. .parent_hws = (const struct clk_hw*[]){
  1610. &disp_cc_mdss_pclk0_clk_src.clkr.hw,
  1611. },
  1612. .num_parents = 1,
  1613. .flags = CLK_SET_RATE_PARENT,
  1614. .ops = &clk_branch2_ops,
  1615. },
  1616. },
  1617. };
  1618. static struct clk_branch disp_cc_mdss_pclk1_clk = {
  1619. .halt_reg = 0x8008,
  1620. .halt_check = BRANCH_HALT,
  1621. .clkr = {
  1622. .enable_reg = 0x8008,
  1623. .enable_mask = BIT(0),
  1624. .hw.init = &(struct clk_init_data){
  1625. .name = "disp_cc_mdss_pclk1_clk",
  1626. .parent_hws = (const struct clk_hw*[]){
  1627. &disp_cc_mdss_pclk1_clk_src.clkr.hw,
  1628. },
  1629. .num_parents = 1,
  1630. .flags = CLK_SET_RATE_PARENT,
  1631. .ops = &clk_branch2_ops,
  1632. },
  1633. },
  1634. };
  1635. static struct clk_branch disp_cc_mdss_rscc_ahb_clk = {
  1636. .halt_reg = 0xc00c,
  1637. .halt_check = BRANCH_HALT,
  1638. .clkr = {
  1639. .enable_reg = 0xc00c,
  1640. .enable_mask = BIT(0),
  1641. .flags = QCOM_CLK_BOOT_CRITICAL,
  1642. .hw.init = &(struct clk_init_data){
  1643. .name = "disp_cc_mdss_rscc_ahb_clk",
  1644. .parent_hws = (const struct clk_hw*[]){
  1645. &disp_cc_mdss_ahb_clk_src.clkr.hw,
  1646. },
  1647. .num_parents = 1,
  1648. .flags = CLK_SET_RATE_PARENT,
  1649. .ops = &clk_branch2_ops,
  1650. },
  1651. },
  1652. };
  1653. static struct clk_branch disp_cc_mdss_rscc_vsync_clk = {
  1654. .halt_reg = 0xc008,
  1655. .halt_check = BRANCH_HALT,
  1656. .clkr = {
  1657. .enable_reg = 0xc008,
  1658. .enable_mask = BIT(0),
  1659. .flags = QCOM_CLK_BOOT_CRITICAL,
  1660. .hw.init = &(struct clk_init_data){
  1661. .name = "disp_cc_mdss_rscc_vsync_clk",
  1662. .parent_hws = (const struct clk_hw*[]){
  1663. &disp_cc_mdss_vsync_clk_src.clkr.hw,
  1664. },
  1665. .num_parents = 1,
  1666. .flags = CLK_SET_RATE_PARENT,
  1667. .ops = &clk_branch2_ops,
  1668. },
  1669. },
  1670. };
  1671. static struct clk_branch disp_cc_mdss_vsync1_clk = {
  1672. .halt_reg = 0xa01c,
  1673. .halt_check = BRANCH_HALT,
  1674. .clkr = {
  1675. .enable_reg = 0xa01c,
  1676. .enable_mask = BIT(0),
  1677. .hw.init = &(struct clk_init_data){
  1678. .name = "disp_cc_mdss_vsync1_clk",
  1679. .parent_hws = (const struct clk_hw*[]){
  1680. &disp_cc_mdss_vsync_clk_src.clkr.hw,
  1681. },
  1682. .num_parents = 1,
  1683. .flags = CLK_SET_RATE_PARENT,
  1684. .ops = &clk_branch2_ops,
  1685. },
  1686. },
  1687. };
  1688. static struct clk_branch disp_cc_mdss_vsync_clk = {
  1689. .halt_reg = 0x8024,
  1690. .halt_check = BRANCH_HALT,
  1691. .clkr = {
  1692. .enable_reg = 0x8024,
  1693. .enable_mask = BIT(0),
  1694. .hw.init = &(struct clk_init_data){
  1695. .name = "disp_cc_mdss_vsync_clk",
  1696. .parent_hws = (const struct clk_hw*[]){
  1697. &disp_cc_mdss_vsync_clk_src.clkr.hw,
  1698. },
  1699. .num_parents = 1,
  1700. .flags = CLK_SET_RATE_PARENT,
  1701. .ops = &clk_branch2_ops,
  1702. },
  1703. },
  1704. };
  1705. static struct clk_branch disp_cc_sleep_clk = {
  1706. .halt_reg = 0xe074,
  1707. .halt_check = BRANCH_HALT,
  1708. .clkr = {
  1709. .enable_reg = 0xe074,
  1710. .enable_mask = BIT(0),
  1711. .hw.init = &(struct clk_init_data){
  1712. .name = "disp_cc_sleep_clk",
  1713. .parent_hws = (const struct clk_hw*[]){
  1714. &disp_cc_sleep_clk_src.clkr.hw,
  1715. },
  1716. .num_parents = 1,
  1717. .flags = CLK_SET_RATE_PARENT,
  1718. .ops = &clk_branch2_ops,
  1719. },
  1720. },
  1721. };
  1722. static struct clk_regmap *disp_cc_kalama_clocks[] = {
  1723. [DISP_CC_MDSS_ACCU_CLK] = &disp_cc_mdss_accu_clk.clkr,
  1724. [DISP_CC_MDSS_AHB1_CLK] = &disp_cc_mdss_ahb1_clk.clkr,
  1725. [DISP_CC_MDSS_AHB_CLK] = &disp_cc_mdss_ahb_clk.clkr,
  1726. [DISP_CC_MDSS_AHB_CLK_SRC] = &disp_cc_mdss_ahb_clk_src.clkr,
  1727. [DISP_CC_MDSS_BYTE0_CLK] = &disp_cc_mdss_byte0_clk.clkr,
  1728. [DISP_CC_MDSS_BYTE0_CLK_SRC] = &disp_cc_mdss_byte0_clk_src.clkr,
  1729. [DISP_CC_MDSS_BYTE0_DIV_CLK_SRC] = &disp_cc_mdss_byte0_div_clk_src.clkr,
  1730. [DISP_CC_MDSS_BYTE0_INTF_CLK] = &disp_cc_mdss_byte0_intf_clk.clkr,
  1731. [DISP_CC_MDSS_BYTE1_CLK] = &disp_cc_mdss_byte1_clk.clkr,
  1732. [DISP_CC_MDSS_BYTE1_CLK_SRC] = &disp_cc_mdss_byte1_clk_src.clkr,
  1733. [DISP_CC_MDSS_BYTE1_DIV_CLK_SRC] = &disp_cc_mdss_byte1_div_clk_src.clkr,
  1734. [DISP_CC_MDSS_BYTE1_INTF_CLK] = &disp_cc_mdss_byte1_intf_clk.clkr,
  1735. [DISP_CC_MDSS_DPTX0_AUX_CLK] = &disp_cc_mdss_dptx0_aux_clk.clkr,
  1736. [DISP_CC_MDSS_DPTX0_AUX_CLK_SRC] = &disp_cc_mdss_dptx0_aux_clk_src.clkr,
  1737. [DISP_CC_MDSS_DPTX0_CRYPTO_CLK] = &disp_cc_mdss_dptx0_crypto_clk.clkr,
  1738. [DISP_CC_MDSS_DPTX0_LINK_CLK] = &disp_cc_mdss_dptx0_link_clk.clkr,
  1739. [DISP_CC_MDSS_DPTX0_LINK_CLK_SRC] = &disp_cc_mdss_dptx0_link_clk_src.clkr,
  1740. [DISP_CC_MDSS_DPTX0_LINK_DIV_CLK_SRC] = &disp_cc_mdss_dptx0_link_div_clk_src.clkr,
  1741. [DISP_CC_MDSS_DPTX0_LINK_INTF_CLK] = &disp_cc_mdss_dptx0_link_intf_clk.clkr,
  1742. [DISP_CC_MDSS_DPTX0_PIXEL0_CLK] = &disp_cc_mdss_dptx0_pixel0_clk.clkr,
  1743. [DISP_CC_MDSS_DPTX0_PIXEL0_CLK_SRC] = &disp_cc_mdss_dptx0_pixel0_clk_src.clkr,
  1744. [DISP_CC_MDSS_DPTX0_PIXEL1_CLK] = &disp_cc_mdss_dptx0_pixel1_clk.clkr,
  1745. [DISP_CC_MDSS_DPTX0_PIXEL1_CLK_SRC] = &disp_cc_mdss_dptx0_pixel1_clk_src.clkr,
  1746. [DISP_CC_MDSS_DPTX0_USB_ROUTER_LINK_INTF_CLK] =
  1747. &disp_cc_mdss_dptx0_usb_router_link_intf_clk.clkr,
  1748. [DISP_CC_MDSS_DPTX1_AUX_CLK] = &disp_cc_mdss_dptx1_aux_clk.clkr,
  1749. [DISP_CC_MDSS_DPTX1_AUX_CLK_SRC] = &disp_cc_mdss_dptx1_aux_clk_src.clkr,
  1750. [DISP_CC_MDSS_DPTX1_CRYPTO_CLK] = &disp_cc_mdss_dptx1_crypto_clk.clkr,
  1751. [DISP_CC_MDSS_DPTX1_LINK_CLK] = &disp_cc_mdss_dptx1_link_clk.clkr,
  1752. [DISP_CC_MDSS_DPTX1_LINK_CLK_SRC] = &disp_cc_mdss_dptx1_link_clk_src.clkr,
  1753. [DISP_CC_MDSS_DPTX1_LINK_DIV_CLK_SRC] = &disp_cc_mdss_dptx1_link_div_clk_src.clkr,
  1754. [DISP_CC_MDSS_DPTX1_LINK_INTF_CLK] = &disp_cc_mdss_dptx1_link_intf_clk.clkr,
  1755. [DISP_CC_MDSS_DPTX1_PIXEL0_CLK] = &disp_cc_mdss_dptx1_pixel0_clk.clkr,
  1756. [DISP_CC_MDSS_DPTX1_PIXEL0_CLK_SRC] = &disp_cc_mdss_dptx1_pixel0_clk_src.clkr,
  1757. [DISP_CC_MDSS_DPTX1_PIXEL1_CLK] = &disp_cc_mdss_dptx1_pixel1_clk.clkr,
  1758. [DISP_CC_MDSS_DPTX1_PIXEL1_CLK_SRC] = &disp_cc_mdss_dptx1_pixel1_clk_src.clkr,
  1759. [DISP_CC_MDSS_DPTX1_USB_ROUTER_LINK_INTF_CLK] =
  1760. &disp_cc_mdss_dptx1_usb_router_link_intf_clk.clkr,
  1761. [DISP_CC_MDSS_DPTX2_AUX_CLK] = &disp_cc_mdss_dptx2_aux_clk.clkr,
  1762. [DISP_CC_MDSS_DPTX2_AUX_CLK_SRC] = &disp_cc_mdss_dptx2_aux_clk_src.clkr,
  1763. [DISP_CC_MDSS_DPTX2_CRYPTO_CLK] = &disp_cc_mdss_dptx2_crypto_clk.clkr,
  1764. [DISP_CC_MDSS_DPTX2_LINK_CLK] = &disp_cc_mdss_dptx2_link_clk.clkr,
  1765. [DISP_CC_MDSS_DPTX2_LINK_CLK_SRC] = &disp_cc_mdss_dptx2_link_clk_src.clkr,
  1766. [DISP_CC_MDSS_DPTX2_LINK_DIV_CLK_SRC] = &disp_cc_mdss_dptx2_link_div_clk_src.clkr,
  1767. [DISP_CC_MDSS_DPTX2_LINK_INTF_CLK] = &disp_cc_mdss_dptx2_link_intf_clk.clkr,
  1768. [DISP_CC_MDSS_DPTX2_PIXEL0_CLK] = &disp_cc_mdss_dptx2_pixel0_clk.clkr,
  1769. [DISP_CC_MDSS_DPTX2_PIXEL0_CLK_SRC] = &disp_cc_mdss_dptx2_pixel0_clk_src.clkr,
  1770. [DISP_CC_MDSS_DPTX2_PIXEL1_CLK] = &disp_cc_mdss_dptx2_pixel1_clk.clkr,
  1771. [DISP_CC_MDSS_DPTX2_PIXEL1_CLK_SRC] = &disp_cc_mdss_dptx2_pixel1_clk_src.clkr,
  1772. [DISP_CC_MDSS_DPTX3_AUX_CLK] = &disp_cc_mdss_dptx3_aux_clk.clkr,
  1773. [DISP_CC_MDSS_DPTX3_AUX_CLK_SRC] = &disp_cc_mdss_dptx3_aux_clk_src.clkr,
  1774. [DISP_CC_MDSS_DPTX3_CRYPTO_CLK] = &disp_cc_mdss_dptx3_crypto_clk.clkr,
  1775. [DISP_CC_MDSS_DPTX3_LINK_CLK] = &disp_cc_mdss_dptx3_link_clk.clkr,
  1776. [DISP_CC_MDSS_DPTX3_LINK_CLK_SRC] = &disp_cc_mdss_dptx3_link_clk_src.clkr,
  1777. [DISP_CC_MDSS_DPTX3_LINK_DIV_CLK_SRC] = &disp_cc_mdss_dptx3_link_div_clk_src.clkr,
  1778. [DISP_CC_MDSS_DPTX3_LINK_INTF_CLK] = &disp_cc_mdss_dptx3_link_intf_clk.clkr,
  1779. [DISP_CC_MDSS_DPTX3_PIXEL0_CLK] = &disp_cc_mdss_dptx3_pixel0_clk.clkr,
  1780. [DISP_CC_MDSS_DPTX3_PIXEL0_CLK_SRC] = &disp_cc_mdss_dptx3_pixel0_clk_src.clkr,
  1781. [DISP_CC_MDSS_ESC0_CLK] = &disp_cc_mdss_esc0_clk.clkr,
  1782. [DISP_CC_MDSS_ESC0_CLK_SRC] = &disp_cc_mdss_esc0_clk_src.clkr,
  1783. [DISP_CC_MDSS_ESC1_CLK] = &disp_cc_mdss_esc1_clk.clkr,
  1784. [DISP_CC_MDSS_ESC1_CLK_SRC] = &disp_cc_mdss_esc1_clk_src.clkr,
  1785. [DISP_CC_MDSS_MDP1_CLK] = &disp_cc_mdss_mdp1_clk.clkr,
  1786. [DISP_CC_MDSS_MDP_CLK] = &disp_cc_mdss_mdp_clk.clkr,
  1787. [DISP_CC_MDSS_MDP_CLK_SRC] = &disp_cc_mdss_mdp_clk_src.clkr,
  1788. [DISP_CC_MDSS_MDP_LUT1_CLK] = &disp_cc_mdss_mdp_lut1_clk.clkr,
  1789. [DISP_CC_MDSS_MDP_LUT_CLK] = &disp_cc_mdss_mdp_lut_clk.clkr,
  1790. [DISP_CC_MDSS_NON_GDSC_AHB_CLK] = &disp_cc_mdss_non_gdsc_ahb_clk.clkr,
  1791. [DISP_CC_MDSS_PCLK0_CLK] = &disp_cc_mdss_pclk0_clk.clkr,
  1792. [DISP_CC_MDSS_PCLK0_CLK_SRC] = &disp_cc_mdss_pclk0_clk_src.clkr,
  1793. [DISP_CC_MDSS_PCLK1_CLK] = &disp_cc_mdss_pclk1_clk.clkr,
  1794. [DISP_CC_MDSS_PCLK1_CLK_SRC] = &disp_cc_mdss_pclk1_clk_src.clkr,
  1795. [DISP_CC_MDSS_RSCC_AHB_CLK] = &disp_cc_mdss_rscc_ahb_clk.clkr,
  1796. [DISP_CC_MDSS_RSCC_VSYNC_CLK] = &disp_cc_mdss_rscc_vsync_clk.clkr,
  1797. [DISP_CC_MDSS_VSYNC1_CLK] = &disp_cc_mdss_vsync1_clk.clkr,
  1798. [DISP_CC_MDSS_VSYNC_CLK] = &disp_cc_mdss_vsync_clk.clkr,
  1799. [DISP_CC_MDSS_VSYNC_CLK_SRC] = &disp_cc_mdss_vsync_clk_src.clkr,
  1800. [DISP_CC_PLL0] = &disp_cc_pll0.clkr,
  1801. [DISP_CC_PLL1] = &disp_cc_pll1.clkr,
  1802. [DISP_CC_SLEEP_CLK] = &disp_cc_sleep_clk.clkr,
  1803. [DISP_CC_SLEEP_CLK_SRC] = &disp_cc_sleep_clk_src.clkr,
  1804. [DISP_CC_XO_CLK_SRC] = &disp_cc_xo_clk_src.clkr,
  1805. };
  1806. static const struct qcom_reset_map disp_cc_kalama_resets[] = {
  1807. [DISP_CC_MDSS_CORE_BCR] = { 0x8000 },
  1808. [DISP_CC_MDSS_CORE_INT2_BCR] = { 0xa000 },
  1809. [DISP_CC_MDSS_RSCC_BCR] = { 0xc000 },
  1810. };
  1811. static const struct regmap_config disp_cc_kalama_regmap_config = {
  1812. .reg_bits = 32,
  1813. .reg_stride = 4,
  1814. .val_bits = 32,
  1815. .max_register = 0x11008,
  1816. .fast_io = true,
  1817. };
  1818. static struct qcom_cc_desc disp_cc_kalama_desc = {
  1819. .config = &disp_cc_kalama_regmap_config,
  1820. .clks = disp_cc_kalama_clocks,
  1821. .num_clks = ARRAY_SIZE(disp_cc_kalama_clocks),
  1822. .resets = disp_cc_kalama_resets,
  1823. .num_resets = ARRAY_SIZE(disp_cc_kalama_resets),
  1824. .clk_regulators = disp_cc_kalama_regulators,
  1825. .num_clk_regulators = ARRAY_SIZE(disp_cc_kalama_regulators),
  1826. };
  1827. static const struct of_device_id disp_cc_kalama_match_table[] = {
  1828. { .compatible = "qcom,kalama-dispcc" },
  1829. { }
  1830. };
  1831. MODULE_DEVICE_TABLE(of, disp_cc_kalama_match_table);
  1832. static int disp_cc_kalama_probe(struct platform_device *pdev)
  1833. {
  1834. struct regmap *regmap;
  1835. int ret;
  1836. regmap = qcom_cc_map(pdev, &disp_cc_kalama_desc);
  1837. if (IS_ERR(regmap))
  1838. return PTR_ERR(regmap);
  1839. ret = qcom_cc_runtime_init(pdev, &disp_cc_kalama_desc);
  1840. if (ret)
  1841. return ret;
  1842. ret = pm_runtime_get_sync(&pdev->dev);
  1843. if (ret)
  1844. return ret;
  1845. clk_lucid_ole_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);
  1846. clk_lucid_ole_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll1_config);
  1847. /* Enable clock gating for MDP clocks */
  1848. regmap_update_bits(regmap, DISP_CC_MISC_CMD, 0x10, 0x10);
  1849. /*
  1850. * Keep clocks always enabled:
  1851. * disp_cc_xo_clk
  1852. */
  1853. regmap_update_bits(regmap, 0xe054, BIT(0), BIT(0));
  1854. ret = qcom_cc_really_probe(pdev, &disp_cc_kalama_desc, regmap);
  1855. if (ret) {
  1856. dev_err(&pdev->dev, "Failed to register DISP CC clocks\n");
  1857. return ret;
  1858. }
  1859. pm_runtime_put_sync(&pdev->dev);
  1860. dev_info(&pdev->dev, "Registered DISP CC clocks\n");
  1861. return ret;
  1862. }
  1863. static void disp_cc_kalama_sync_state(struct device *dev)
  1864. {
  1865. qcom_cc_sync_state(dev, &disp_cc_kalama_desc);
  1866. }
  1867. static const struct dev_pm_ops disp_cc_kalama_pm_ops = {
  1868. SET_RUNTIME_PM_OPS(qcom_cc_runtime_suspend, qcom_cc_runtime_resume, NULL)
  1869. SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
  1870. pm_runtime_force_resume)
  1871. };
  1872. static struct platform_driver disp_cc_kalama_driver = {
  1873. .probe = disp_cc_kalama_probe,
  1874. .driver = {
  1875. .name = "disp_cc-kalama",
  1876. .of_match_table = disp_cc_kalama_match_table,
  1877. .sync_state = disp_cc_kalama_sync_state,
  1878. .pm = &disp_cc_kalama_pm_ops,
  1879. },
  1880. };
  1881. static int __init disp_cc_kalama_init(void)
  1882. {
  1883. return platform_driver_register(&disp_cc_kalama_driver);
  1884. }
  1885. subsys_initcall(disp_cc_kalama_init);
  1886. static void __exit disp_cc_kalama_exit(void)
  1887. {
  1888. platform_driver_unregister(&disp_cc_kalama_driver);
  1889. }
  1890. module_exit(disp_cc_kalama_exit);
  1891. MODULE_DESCRIPTION("QTI DISP_CC KALAMA Driver");
  1892. MODULE_LICENSE("GPL");