dispcc1-lemans.c 47 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. 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-lemans.h>
  15. #include "clk-alpha-pll.h"
  16. #include "clk-branch.h"
  17. #include "clk-rcg.h"
  18. #include "clk-regmap.h"
  19. #include "clk-regmap-divider.h"
  20. #include "clk-regmap-mux.h"
  21. #include "common.h"
  22. #include "reset.h"
  23. #include "vdd-level-sm8150.h"
  24. static DEFINE_VDD_REGULATORS(vdd_mm, VDD_HIGH_L1 + 1, 1, vdd_corner);
  25. static struct clk_vdd_class *disp_cc_1_lemans_regulators[] = {
  26. &vdd_mm,
  27. };
  28. enum {
  29. P_BI_TCXO,
  30. P_DP0_PHY_PLL_LINK_CLK,
  31. P_DP0_PHY_PLL_VCO_DIV_CLK,
  32. P_DP1_PHY_PLL_LINK_CLK,
  33. P_DP1_PHY_PLL_VCO_DIV_CLK,
  34. P_DSI0_PHY_PLL_OUT_BYTECLK,
  35. P_DSI0_PHY_PLL_OUT_DSICLK,
  36. P_DSI1_PHY_PLL_OUT_BYTECLK,
  37. P_DSI1_PHY_PLL_OUT_DSICLK,
  38. P_MDSS_1_DISP_CC_PLL0_OUT_MAIN,
  39. P_MDSS_1_DISP_CC_PLL1_OUT_EVEN,
  40. P_MDSS_1_DISP_CC_PLL1_OUT_MAIN,
  41. P_SLEEP_CLK,
  42. };
  43. static const struct pll_vco lucid_evo_vco[] = {
  44. { 249600000, 2000000000, 0 },
  45. };
  46. /* 1125MHz configuration */
  47. static struct alpha_pll_config mdss_1_disp_cc_pll0_config = {
  48. .l = 0x3A,
  49. .cal_l = 0x44,
  50. .alpha = 0x9800,
  51. .config_ctl_val = 0x20485699,
  52. .config_ctl_hi_val = 0x00182261,
  53. .config_ctl_hi1_val = 0x32AA299C,
  54. .user_ctl_val = 0x00000000,
  55. .user_ctl_hi_val = 0x00400805,
  56. };
  57. static struct clk_alpha_pll mdss_1_disp_cc_pll0 = {
  58. .offset = 0x0,
  59. .vco_table = lucid_evo_vco,
  60. .num_vco = ARRAY_SIZE(lucid_evo_vco),
  61. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
  62. .config = &mdss_1_disp_cc_pll0_config,
  63. .clkr = {
  64. .hw.init = &(const struct clk_init_data){
  65. .name = "mdss_1_disp_cc_pll0",
  66. .parent_data = &(const struct clk_parent_data){
  67. .fw_name = "bi_tcxo",
  68. },
  69. .num_parents = 1,
  70. .ops = &clk_alpha_pll_lucid_evo_ops,
  71. },
  72. .vdd_data = {
  73. .vdd_class = &vdd_mm,
  74. .num_rate_max = VDD_NUM,
  75. .rate_max = (unsigned long[VDD_NUM]) {
  76. [VDD_LOWER_D1] = 500000000,
  77. [VDD_LOWER] = 615000000,
  78. [VDD_LOW] = 1066000000,
  79. [VDD_LOW_L1] = 1500000000,
  80. [VDD_NOMINAL] = 1800000000,
  81. [VDD_HIGH] = 2000000000},
  82. },
  83. },
  84. };
  85. /* 600MHz configuration */
  86. static struct alpha_pll_config mdss_1_disp_cc_pll1_config = {
  87. .l = 0x1F,
  88. .cal_l = 0x44,
  89. .alpha = 0x4000,
  90. .config_ctl_val = 0x20485699,
  91. .config_ctl_hi_val = 0x00182261,
  92. .config_ctl_hi1_val = 0x32AA299C,
  93. .user_ctl_val = 0x00000000,
  94. .user_ctl_hi_val = 0x00400805,
  95. };
  96. static struct clk_alpha_pll mdss_1_disp_cc_pll1 = {
  97. .offset = 0x1000,
  98. .vco_table = lucid_evo_vco,
  99. .num_vco = ARRAY_SIZE(lucid_evo_vco),
  100. .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
  101. .config = &mdss_1_disp_cc_pll1_config,
  102. .clkr = {
  103. .hw.init = &(const struct clk_init_data){
  104. .name = "mdss_1_disp_cc_pll1",
  105. .parent_data = &(const struct clk_parent_data){
  106. .fw_name = "bi_tcxo",
  107. },
  108. .num_parents = 1,
  109. .ops = &clk_alpha_pll_lucid_evo_ops,
  110. },
  111. .vdd_data = {
  112. .vdd_class = &vdd_mm,
  113. .num_rate_max = VDD_NUM,
  114. .rate_max = (unsigned long[VDD_NUM]) {
  115. [VDD_LOWER_D1] = 500000000,
  116. [VDD_LOWER] = 615000000,
  117. [VDD_LOW] = 1066000000,
  118. [VDD_LOW_L1] = 1500000000,
  119. [VDD_NOMINAL] = 1800000000,
  120. [VDD_HIGH] = 2000000000},
  121. },
  122. },
  123. };
  124. static const struct parent_map disp_cc_1_parent_map_0[] = {
  125. { P_BI_TCXO, 0 },
  126. { P_DP0_PHY_PLL_LINK_CLK, 1 },
  127. { P_DP0_PHY_PLL_VCO_DIV_CLK, 2 },
  128. { P_DP1_PHY_PLL_VCO_DIV_CLK, 4 },
  129. };
  130. static const struct clk_parent_data disp_cc_1_parent_data_0[] = {
  131. { .fw_name = "bi_tcxo" },
  132. { .fw_name = "dp0_phy_pll_link_clk", .name = "dp0_phy_pll_link_clk" },
  133. { .fw_name = "dp0_phy_pll_vco_div_clk", .name = "dp0_phy_pll_vco_div_clk" },
  134. { .fw_name = "dp1_phy_pll_vco_div_clk", .name = "dp1_phy_pll_vco_div_clk" },
  135. };
  136. static const struct parent_map disp_cc_1_parent_map_1[] = {
  137. { P_BI_TCXO, 0 },
  138. { P_DSI0_PHY_PLL_OUT_DSICLK, 1 },
  139. { P_DSI0_PHY_PLL_OUT_BYTECLK, 2 },
  140. { P_DSI1_PHY_PLL_OUT_DSICLK, 3 },
  141. { P_DSI1_PHY_PLL_OUT_BYTECLK, 4 },
  142. };
  143. static const struct clk_parent_data disp_cc_1_parent_data_1[] = {
  144. { .fw_name = "bi_tcxo" },
  145. { .fw_name = "dsi0_phy_pll_out_dsiclk", .name = "dsi0_phy_pll_out_dsiclk" },
  146. { .fw_name = "dsi0_phy_pll_out_byteclk", .name = "dsi0_phy_pll_out_byteclk" },
  147. { .fw_name = "dsi1_phy_pll_out_dsiclk", .name = "dsi1_phy_pll_out_dsiclk" },
  148. { .fw_name = "dsi1_phy_pll_out_byteclk", .name = "dsi1_phy_pll_out_byteclk" },
  149. };
  150. static const struct parent_map disp_cc_1_parent_map_2[] = {
  151. { P_BI_TCXO, 0 },
  152. };
  153. static const struct clk_parent_data disp_cc_1_parent_data_2[] = {
  154. { .fw_name = "bi_tcxo" },
  155. };
  156. static const struct clk_parent_data disp_cc_1_parent_data_2_ao[] = {
  157. { .fw_name = "bi_tcxo_ao" },
  158. };
  159. static const struct parent_map disp_cc_1_parent_map_3[] = {
  160. { P_BI_TCXO, 0 },
  161. { P_DP0_PHY_PLL_LINK_CLK, 1 },
  162. { P_DP1_PHY_PLL_LINK_CLK, 2 },
  163. };
  164. static const struct clk_parent_data disp_cc_1_parent_data_3[] = {
  165. { .fw_name = "bi_tcxo" },
  166. { .fw_name = "dp0_phy_pll_link_clk", .name = "dp0_phy_pll_link_clk" },
  167. { .fw_name = "dp1_phy_pll_link_clk", .name = "dp1_phy_pll_link_clk" },
  168. };
  169. static const struct parent_map disp_cc_1_parent_map_4[] = {
  170. { P_BI_TCXO, 0 },
  171. { P_DSI0_PHY_PLL_OUT_BYTECLK, 2 },
  172. { P_DSI1_PHY_PLL_OUT_BYTECLK, 4 },
  173. };
  174. static const struct clk_parent_data disp_cc_1_parent_data_4[] = {
  175. { .fw_name = "bi_tcxo" },
  176. { .fw_name = "dsi0_phy_pll_out_byteclk", .name = "dsi0_phy_pll_out_byteclk" },
  177. { .fw_name = "dsi1_phy_pll_out_byteclk", .name = "dsi1_phy_pll_out_byteclk" },
  178. };
  179. static const struct parent_map disp_cc_1_parent_map_5[] = {
  180. { P_BI_TCXO, 0 },
  181. { P_MDSS_1_DISP_CC_PLL1_OUT_MAIN, 4 },
  182. { P_MDSS_1_DISP_CC_PLL1_OUT_EVEN, 6 },
  183. };
  184. static const struct clk_parent_data disp_cc_1_parent_data_5[] = {
  185. { .fw_name = "bi_tcxo" },
  186. { .hw = &mdss_1_disp_cc_pll1.clkr.hw },
  187. { .hw = &mdss_1_disp_cc_pll1.clkr.hw },
  188. };
  189. static const struct parent_map disp_cc_1_parent_map_6[] = {
  190. { P_BI_TCXO, 0 },
  191. { P_MDSS_1_DISP_CC_PLL0_OUT_MAIN, 1 },
  192. { P_MDSS_1_DISP_CC_PLL1_OUT_MAIN, 4 },
  193. { P_MDSS_1_DISP_CC_PLL1_OUT_EVEN, 6 },
  194. };
  195. static const struct clk_parent_data disp_cc_1_parent_data_6[] = {
  196. { .fw_name = "bi_tcxo" },
  197. { .hw = &mdss_1_disp_cc_pll0.clkr.hw },
  198. { .hw = &mdss_1_disp_cc_pll1.clkr.hw },
  199. { .hw = &mdss_1_disp_cc_pll1.clkr.hw },
  200. };
  201. static const struct parent_map disp_cc_1_parent_map_7[] = {
  202. { P_SLEEP_CLK, 0 },
  203. };
  204. static const struct clk_parent_data disp_cc_1_parent_data_7[] = {
  205. { .fw_name = "sleep_clk" },
  206. };
  207. static const struct freq_tbl ftbl_mdss_1_disp_cc_mdss_ahb_clk_src[] = {
  208. F(37500000, P_MDSS_1_DISP_CC_PLL1_OUT_MAIN, 16, 0, 0),
  209. F(75000000, P_MDSS_1_DISP_CC_PLL1_OUT_MAIN, 8, 0, 0),
  210. { }
  211. };
  212. static struct clk_rcg2 mdss_1_disp_cc_mdss_ahb_clk_src = {
  213. .cmd_rcgr = 0x824c,
  214. .mnd_width = 0,
  215. .hid_width = 5,
  216. .parent_map = disp_cc_1_parent_map_5,
  217. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_ahb_clk_src,
  218. .enable_safe_config = true,
  219. .flags = HW_CLK_CTRL_MODE,
  220. .clkr.hw.init = &(const struct clk_init_data){
  221. .name = "mdss_1_disp_cc_mdss_ahb_clk_src",
  222. .parent_data = disp_cc_1_parent_data_5,
  223. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_5),
  224. .flags = CLK_SET_RATE_PARENT,
  225. .ops = &clk_rcg2_ops,
  226. },
  227. .clkr.vdd_data = {
  228. .vdd_class = &vdd_mm,
  229. .num_rate_max = VDD_NUM,
  230. .rate_max = (unsigned long[VDD_NUM]) {
  231. [VDD_LOW_L1] = 37500000,
  232. [VDD_NOMINAL] = 75000000},
  233. },
  234. };
  235. static const struct freq_tbl ftbl_mdss_1_disp_cc_mdss_byte0_clk_src[] = {
  236. F(19200000, P_BI_TCXO, 1, 0, 0),
  237. { }
  238. };
  239. static struct clk_rcg2 mdss_1_disp_cc_mdss_byte0_clk_src = {
  240. .cmd_rcgr = 0x80ec,
  241. .mnd_width = 0,
  242. .hid_width = 5,
  243. .parent_map = disp_cc_1_parent_map_1,
  244. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  245. .clkr.hw.init = &(const struct clk_init_data){
  246. .name = "mdss_1_disp_cc_mdss_byte0_clk_src",
  247. .parent_data = disp_cc_1_parent_data_1,
  248. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_1),
  249. .flags = CLK_SET_RATE_PARENT,
  250. .ops = &clk_byte2_ops,
  251. },
  252. .clkr.vdd_data = {
  253. .vdd_class = &vdd_mm,
  254. .num_rate_max = VDD_NUM,
  255. .rate_max = (unsigned long[VDD_NUM]) {
  256. [VDD_LOW_L1] = 358000000},
  257. },
  258. };
  259. static struct clk_rcg2 mdss_1_disp_cc_mdss_byte1_clk_src = {
  260. .cmd_rcgr = 0x8108,
  261. .mnd_width = 0,
  262. .hid_width = 5,
  263. .parent_map = disp_cc_1_parent_map_1,
  264. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  265. .clkr.hw.init = &(const struct clk_init_data){
  266. .name = "mdss_1_disp_cc_mdss_byte1_clk_src",
  267. .parent_data = disp_cc_1_parent_data_1,
  268. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_1),
  269. .flags = CLK_SET_RATE_PARENT,
  270. .ops = &clk_byte2_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_LOW_L1] = 358000000},
  277. },
  278. };
  279. static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx0_aux_clk_src = {
  280. .cmd_rcgr = 0x81b8,
  281. .mnd_width = 0,
  282. .hid_width = 5,
  283. .parent_map = disp_cc_1_parent_map_2,
  284. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  285. .clkr.hw.init = &(const struct clk_init_data){
  286. .name = "mdss_1_disp_cc_mdss_dptx0_aux_clk_src",
  287. .parent_data = disp_cc_1_parent_data_2,
  288. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_2),
  289. .flags = CLK_SET_RATE_PARENT,
  290. .ops = &clk_rcg2_ops,
  291. },
  292. .clkr.vdd_data = {
  293. .vdd_class = &vdd_mm,
  294. .num_rate_max = VDD_NUM,
  295. .rate_max = (unsigned long[VDD_NUM]) {
  296. [VDD_LOW_L1] = 19200000},
  297. },
  298. };
  299. static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx0_crypto_clk_src = {
  300. .cmd_rcgr = 0x8170,
  301. .mnd_width = 0,
  302. .hid_width = 5,
  303. .parent_map = disp_cc_1_parent_map_3,
  304. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  305. .clkr.hw.init = &(const struct clk_init_data){
  306. .name = "mdss_1_disp_cc_mdss_dptx0_crypto_clk_src",
  307. .parent_data = disp_cc_1_parent_data_3,
  308. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_3),
  309. .flags = CLK_SET_RATE_PARENT,
  310. .ops = &clk_byte2_ops,
  311. },
  312. .clkr.vdd_data = {
  313. .vdd_class = &vdd_mm,
  314. .num_rate_max = VDD_NUM,
  315. .rate_max = (unsigned long[VDD_NUM]) {
  316. [VDD_LOW_L1] = 396000000,
  317. [VDD_NOMINAL] = 540000000},
  318. },
  319. };
  320. static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx0_link_clk_src = {
  321. .cmd_rcgr = 0x8154,
  322. .mnd_width = 0,
  323. .hid_width = 5,
  324. .parent_map = disp_cc_1_parent_map_3,
  325. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  326. .clkr.hw.init = &(const struct clk_init_data){
  327. .name = "mdss_1_disp_cc_mdss_dptx0_link_clk_src",
  328. .parent_data = disp_cc_1_parent_data_3,
  329. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_3),
  330. .flags = CLK_SET_RATE_PARENT,
  331. .ops = &clk_byte2_ops,
  332. },
  333. .clkr.vdd_data = {
  334. .vdd_class = &vdd_mm,
  335. .num_rate_max = VDD_NUM,
  336. .rate_max = (unsigned long[VDD_NUM]) {
  337. [VDD_LOW_L1] = 594000000,
  338. [VDD_NOMINAL] = 810000000},
  339. },
  340. };
  341. static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx0_pixel0_clk_src = {
  342. .cmd_rcgr = 0x8188,
  343. .mnd_width = 16,
  344. .hid_width = 5,
  345. .parent_map = disp_cc_1_parent_map_0,
  346. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  347. .clkr.hw.init = &(const struct clk_init_data){
  348. .name = "mdss_1_disp_cc_mdss_dptx0_pixel0_clk_src",
  349. .parent_data = disp_cc_1_parent_data_0,
  350. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_0),
  351. .flags = CLK_SET_RATE_PARENT,
  352. .ops = &clk_dp_ops,
  353. },
  354. .clkr.vdd_data = {
  355. .vdd_class = &vdd_mm,
  356. .num_rate_max = VDD_NUM,
  357. .rate_max = (unsigned long[VDD_NUM]) {
  358. [VDD_LOW_L1] = 405000000,
  359. [VDD_NOMINAL] = 675000000},
  360. },
  361. };
  362. static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx0_pixel1_clk_src = {
  363. .cmd_rcgr = 0x81a0,
  364. .mnd_width = 16,
  365. .hid_width = 5,
  366. .parent_map = disp_cc_1_parent_map_0,
  367. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  368. .clkr.hw.init = &(const struct clk_init_data){
  369. .name = "mdss_1_disp_cc_mdss_dptx0_pixel1_clk_src",
  370. .parent_data = disp_cc_1_parent_data_0,
  371. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_0),
  372. .flags = CLK_SET_RATE_PARENT,
  373. .ops = &clk_dp_ops,
  374. },
  375. .clkr.vdd_data = {
  376. .vdd_class = &vdd_mm,
  377. .num_rate_max = VDD_NUM,
  378. .rate_max = (unsigned long[VDD_NUM]) {
  379. [VDD_LOW_L1] = 405000000,
  380. [VDD_NOMINAL] = 675000000},
  381. },
  382. };
  383. static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx0_pixel2_clk_src = {
  384. .cmd_rcgr = 0x826c,
  385. .mnd_width = 16,
  386. .hid_width = 5,
  387. .parent_map = disp_cc_1_parent_map_0,
  388. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  389. .clkr.hw.init = &(const struct clk_init_data){
  390. .name = "mdss_1_disp_cc_mdss_dptx0_pixel2_clk_src",
  391. .parent_data = disp_cc_1_parent_data_0,
  392. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_0),
  393. .flags = CLK_SET_RATE_PARENT,
  394. .ops = &clk_dp_ops,
  395. },
  396. .clkr.vdd_data = {
  397. .vdd_class = &vdd_mm,
  398. .num_rate_max = VDD_NUM,
  399. .rate_max = (unsigned long[VDD_NUM]) {
  400. [VDD_LOW_L1] = 405000000,
  401. [VDD_NOMINAL] = 675000000},
  402. },
  403. };
  404. static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx0_pixel3_clk_src = {
  405. .cmd_rcgr = 0x8284,
  406. .mnd_width = 16,
  407. .hid_width = 5,
  408. .parent_map = disp_cc_1_parent_map_0,
  409. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  410. .clkr.hw.init = &(const struct clk_init_data){
  411. .name = "mdss_1_disp_cc_mdss_dptx0_pixel3_clk_src",
  412. .parent_data = disp_cc_1_parent_data_0,
  413. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_0),
  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_LOW_L1] = 405000000,
  422. [VDD_NOMINAL] = 675000000},
  423. },
  424. };
  425. static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx1_aux_clk_src = {
  426. .cmd_rcgr = 0x8234,
  427. .mnd_width = 0,
  428. .hid_width = 5,
  429. .parent_map = disp_cc_1_parent_map_2,
  430. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  431. .clkr.hw.init = &(const struct clk_init_data){
  432. .name = "mdss_1_disp_cc_mdss_dptx1_aux_clk_src",
  433. .parent_data = disp_cc_1_parent_data_2,
  434. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_2),
  435. .flags = CLK_SET_RATE_PARENT,
  436. .ops = &clk_rcg2_ops,
  437. },
  438. .clkr.vdd_data = {
  439. .vdd_class = &vdd_mm,
  440. .num_rate_max = VDD_NUM,
  441. .rate_max = (unsigned long[VDD_NUM]) {
  442. [VDD_LOW_L1] = 19200000},
  443. },
  444. };
  445. static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx1_crypto_clk_src = {
  446. .cmd_rcgr = 0x821c,
  447. .mnd_width = 0,
  448. .hid_width = 5,
  449. .parent_map = disp_cc_1_parent_map_3,
  450. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  451. .clkr.hw.init = &(const struct clk_init_data){
  452. .name = "mdss_1_disp_cc_mdss_dptx1_crypto_clk_src",
  453. .parent_data = disp_cc_1_parent_data_3,
  454. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_3),
  455. .flags = CLK_SET_RATE_PARENT,
  456. .ops = &clk_byte2_ops,
  457. },
  458. .clkr.vdd_data = {
  459. .vdd_class = &vdd_mm,
  460. .num_rate_max = VDD_NUM,
  461. .rate_max = (unsigned long[VDD_NUM]) {
  462. [VDD_LOW_L1] = 396000000,
  463. [VDD_NOMINAL] = 540000000},
  464. },
  465. };
  466. static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx1_link_clk_src = {
  467. .cmd_rcgr = 0x8200,
  468. .mnd_width = 0,
  469. .hid_width = 5,
  470. .parent_map = disp_cc_1_parent_map_3,
  471. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  472. .clkr.hw.init = &(const struct clk_init_data){
  473. .name = "mdss_1_disp_cc_mdss_dptx1_link_clk_src",
  474. .parent_data = disp_cc_1_parent_data_3,
  475. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_3),
  476. .flags = CLK_SET_RATE_PARENT,
  477. .ops = &clk_byte2_ops,
  478. },
  479. .clkr.vdd_data = {
  480. .vdd_class = &vdd_mm,
  481. .num_rate_max = VDD_NUM,
  482. .rate_max = (unsigned long[VDD_NUM]) {
  483. [VDD_LOW_L1] = 594000000,
  484. [VDD_NOMINAL] = 810000000},
  485. },
  486. };
  487. static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx1_pixel0_clk_src = {
  488. .cmd_rcgr = 0x81d0,
  489. .mnd_width = 16,
  490. .hid_width = 5,
  491. .parent_map = disp_cc_1_parent_map_0,
  492. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  493. .clkr.hw.init = &(const struct clk_init_data){
  494. .name = "mdss_1_disp_cc_mdss_dptx1_pixel0_clk_src",
  495. .parent_data = disp_cc_1_parent_data_0,
  496. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_0),
  497. .flags = CLK_SET_RATE_PARENT,
  498. .ops = &clk_dp_ops,
  499. },
  500. .clkr.vdd_data = {
  501. .vdd_class = &vdd_mm,
  502. .num_rate_max = VDD_NUM,
  503. .rate_max = (unsigned long[VDD_NUM]) {
  504. [VDD_LOW_L1] = 405000000,
  505. [VDD_NOMINAL] = 675000000},
  506. },
  507. };
  508. static struct clk_rcg2 mdss_1_disp_cc_mdss_dptx1_pixel1_clk_src = {
  509. .cmd_rcgr = 0x81e8,
  510. .mnd_width = 16,
  511. .hid_width = 5,
  512. .parent_map = disp_cc_1_parent_map_0,
  513. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  514. .clkr.hw.init = &(const struct clk_init_data){
  515. .name = "mdss_1_disp_cc_mdss_dptx1_pixel1_clk_src",
  516. .parent_data = disp_cc_1_parent_data_0,
  517. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_0),
  518. .flags = CLK_SET_RATE_PARENT,
  519. .ops = &clk_dp_ops,
  520. },
  521. .clkr.vdd_data = {
  522. .vdd_class = &vdd_mm,
  523. .num_rate_max = VDD_NUM,
  524. .rate_max = (unsigned long[VDD_NUM]) {
  525. [VDD_LOW_L1] = 405000000,
  526. [VDD_NOMINAL] = 675000000},
  527. },
  528. };
  529. static struct clk_rcg2 mdss_1_disp_cc_mdss_esc0_clk_src = {
  530. .cmd_rcgr = 0x8124,
  531. .mnd_width = 0,
  532. .hid_width = 5,
  533. .parent_map = disp_cc_1_parent_map_4,
  534. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  535. .clkr.hw.init = &(const struct clk_init_data){
  536. .name = "mdss_1_disp_cc_mdss_esc0_clk_src",
  537. .parent_data = disp_cc_1_parent_data_4,
  538. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_4),
  539. .flags = CLK_SET_RATE_PARENT,
  540. .ops = &clk_rcg2_ops,
  541. },
  542. .clkr.vdd_data = {
  543. .vdd_class = &vdd_mm,
  544. .num_rate_max = VDD_NUM,
  545. .rate_max = (unsigned long[VDD_NUM]) {
  546. [VDD_LOW_L1] = 19200000},
  547. },
  548. };
  549. static struct clk_rcg2 mdss_1_disp_cc_mdss_esc1_clk_src = {
  550. .cmd_rcgr = 0x813c,
  551. .mnd_width = 0,
  552. .hid_width = 5,
  553. .parent_map = disp_cc_1_parent_map_4,
  554. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  555. .clkr.hw.init = &(const struct clk_init_data){
  556. .name = "mdss_1_disp_cc_mdss_esc1_clk_src",
  557. .parent_data = disp_cc_1_parent_data_4,
  558. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_4),
  559. .flags = CLK_SET_RATE_PARENT,
  560. .ops = &clk_rcg2_ops,
  561. },
  562. .clkr.vdd_data = {
  563. .vdd_class = &vdd_mm,
  564. .num_rate_max = VDD_NUM,
  565. .rate_max = (unsigned long[VDD_NUM]) {
  566. [VDD_LOW_L1] = 19200000},
  567. },
  568. };
  569. static const struct freq_tbl ftbl_mdss_1_disp_cc_mdss_mdp_clk_src[] = {
  570. F(375000000, P_MDSS_1_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
  571. F(500000000, P_MDSS_1_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
  572. F(575000000, P_MDSS_1_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
  573. F(650000000, P_MDSS_1_DISP_CC_PLL0_OUT_MAIN, 3, 0, 0),
  574. { }
  575. };
  576. static struct clk_rcg2 mdss_1_disp_cc_mdss_mdp_clk_src = {
  577. .cmd_rcgr = 0x80bc,
  578. .mnd_width = 0,
  579. .hid_width = 5,
  580. .parent_map = disp_cc_1_parent_map_6,
  581. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_mdp_clk_src,
  582. .enable_safe_config = true,
  583. .flags = HW_CLK_CTRL_MODE,
  584. .clkr.hw.init = &(const struct clk_init_data){
  585. .name = "mdss_1_disp_cc_mdss_mdp_clk_src",
  586. .parent_data = disp_cc_1_parent_data_6,
  587. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_6),
  588. .flags = CLK_SET_RATE_PARENT,
  589. .ops = &clk_rcg2_ops,
  590. },
  591. .clkr.vdd_data = {
  592. .vdd_class = &vdd_mm,
  593. .num_rate_max = VDD_NUM,
  594. .rate_max = (unsigned long[VDD_NUM]) {
  595. [VDD_LOW_L1] = 375000000,
  596. [VDD_NOMINAL] = 500000000,
  597. [VDD_HIGH] = 575000000,
  598. [VDD_HIGH_L1] = 650000000},
  599. },
  600. };
  601. static struct clk_rcg2 mdss_1_disp_cc_mdss_pclk0_clk_src = {
  602. .cmd_rcgr = 0x808c,
  603. .mnd_width = 8,
  604. .hid_width = 5,
  605. .parent_map = disp_cc_1_parent_map_1,
  606. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  607. .clkr.hw.init = &(const struct clk_init_data){
  608. .name = "mdss_1_disp_cc_mdss_pclk0_clk_src",
  609. .parent_data = disp_cc_1_parent_data_1,
  610. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_1),
  611. .flags = CLK_SET_RATE_PARENT,
  612. .ops = &clk_pixel_ops,
  613. },
  614. .clkr.vdd_data = {
  615. .vdd_class = &vdd_mm,
  616. .num_rate_max = VDD_NUM,
  617. .rate_max = (unsigned long[VDD_NUM]) {
  618. [VDD_LOW_L1] = 625000000},
  619. },
  620. };
  621. static struct clk_rcg2 mdss_1_disp_cc_mdss_pclk1_clk_src = {
  622. .cmd_rcgr = 0x80a4,
  623. .mnd_width = 8,
  624. .hid_width = 5,
  625. .parent_map = disp_cc_1_parent_map_1,
  626. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  627. .clkr.hw.init = &(const struct clk_init_data){
  628. .name = "mdss_1_disp_cc_mdss_pclk1_clk_src",
  629. .parent_data = disp_cc_1_parent_data_1,
  630. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_1),
  631. .flags = CLK_SET_RATE_PARENT,
  632. .ops = &clk_pixel_ops,
  633. },
  634. .clkr.vdd_data = {
  635. .vdd_class = &vdd_mm,
  636. .num_rate_max = VDD_NUM,
  637. .rate_max = (unsigned long[VDD_NUM]) {
  638. [VDD_LOW_L1] = 625000000},
  639. },
  640. };
  641. static struct clk_rcg2 mdss_1_disp_cc_mdss_vsync_clk_src = {
  642. .cmd_rcgr = 0x80d4,
  643. .mnd_width = 0,
  644. .hid_width = 5,
  645. .parent_map = disp_cc_1_parent_map_2,
  646. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  647. .clkr.hw.init = &(const struct clk_init_data){
  648. .name = "mdss_1_disp_cc_mdss_vsync_clk_src",
  649. .parent_data = disp_cc_1_parent_data_2,
  650. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_2),
  651. .flags = CLK_SET_RATE_PARENT,
  652. .ops = &clk_rcg2_ops,
  653. },
  654. .clkr.vdd_data = {
  655. .vdd_class = &vdd_mm,
  656. .num_rate_max = VDD_NUM,
  657. .rate_max = (unsigned long[VDD_NUM]) {
  658. [VDD_LOW_L1] = 19200000},
  659. },
  660. };
  661. static const struct freq_tbl ftbl_mdss_1_disp_cc_sleep_clk_src[] = {
  662. F(32000, P_SLEEP_CLK, 1, 0, 0),
  663. { }
  664. };
  665. static struct clk_rcg2 mdss_1_disp_cc_sleep_clk_src = {
  666. .cmd_rcgr = 0xc058,
  667. .mnd_width = 0,
  668. .hid_width = 5,
  669. .parent_map = disp_cc_1_parent_map_7,
  670. .freq_tbl = ftbl_mdss_1_disp_cc_sleep_clk_src,
  671. .clkr.hw.init = &(const struct clk_init_data){
  672. .name = "mdss_1_disp_cc_sleep_clk_src",
  673. .parent_data = disp_cc_1_parent_data_7,
  674. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_7),
  675. .flags = CLK_SET_RATE_PARENT,
  676. .ops = &clk_rcg2_ops,
  677. },
  678. .clkr.vdd_data = {
  679. .vdd_class = &vdd_mm,
  680. .num_rate_max = VDD_NUM,
  681. .rate_max = (unsigned long[VDD_NUM]) {
  682. [VDD_LOW_L1] = 32000},
  683. },
  684. };
  685. static struct clk_rcg2 mdss_1_disp_cc_xo_clk_src = {
  686. .cmd_rcgr = 0xc03c,
  687. .mnd_width = 0,
  688. .hid_width = 5,
  689. .parent_map = disp_cc_1_parent_map_2,
  690. .freq_tbl = ftbl_mdss_1_disp_cc_mdss_byte0_clk_src,
  691. .clkr.hw.init = &(const struct clk_init_data){
  692. .name = "mdss_1_disp_cc_xo_clk_src",
  693. .parent_data = disp_cc_1_parent_data_2_ao,
  694. .num_parents = ARRAY_SIZE(disp_cc_1_parent_data_2_ao),
  695. .flags = CLK_SET_RATE_PARENT,
  696. .ops = &clk_rcg2_ops,
  697. },
  698. };
  699. static struct clk_regmap_div mdss_1_disp_cc_mdss_byte0_div_clk_src = {
  700. .reg = 0x8104,
  701. .shift = 0,
  702. .width = 4,
  703. .clkr.hw.init = &(const struct clk_init_data) {
  704. .name = "mdss_1_disp_cc_mdss_byte0_div_clk_src",
  705. .parent_hws = (const struct clk_hw*[]){
  706. &mdss_1_disp_cc_mdss_byte0_clk_src.clkr.hw,
  707. },
  708. .num_parents = 1,
  709. .flags = CLK_SET_RATE_PARENT,
  710. .ops = &clk_regmap_div_ops,
  711. },
  712. };
  713. static struct clk_regmap_div mdss_1_disp_cc_mdss_byte1_div_clk_src = {
  714. .reg = 0x8120,
  715. .shift = 0,
  716. .width = 4,
  717. .clkr.hw.init = &(const struct clk_init_data) {
  718. .name = "mdss_1_disp_cc_mdss_byte1_div_clk_src",
  719. .parent_hws = (const struct clk_hw*[]){
  720. &mdss_1_disp_cc_mdss_byte1_clk_src.clkr.hw,
  721. },
  722. .num_parents = 1,
  723. .flags = CLK_SET_RATE_PARENT,
  724. .ops = &clk_regmap_div_ops,
  725. },
  726. };
  727. static struct clk_regmap_div mdss_1_disp_cc_mdss_dptx0_link_div_clk_src = {
  728. .reg = 0x816c,
  729. .shift = 0,
  730. .width = 4,
  731. .clkr.hw.init = &(const struct clk_init_data) {
  732. .name = "mdss_1_disp_cc_mdss_dptx0_link_div_clk_src",
  733. .parent_hws = (const struct clk_hw*[]){
  734. &mdss_1_disp_cc_mdss_dptx0_link_clk_src.clkr.hw,
  735. },
  736. .num_parents = 1,
  737. .flags = CLK_SET_RATE_PARENT,
  738. .ops = &clk_regmap_div_ro_ops,
  739. },
  740. };
  741. static struct clk_regmap_div mdss_1_disp_cc_mdss_dptx1_link_div_clk_src = {
  742. .reg = 0x8218,
  743. .shift = 0,
  744. .width = 4,
  745. .clkr.hw.init = &(const struct clk_init_data) {
  746. .name = "mdss_1_disp_cc_mdss_dptx1_link_div_clk_src",
  747. .parent_hws = (const struct clk_hw*[]){
  748. &mdss_1_disp_cc_mdss_dptx1_link_clk_src.clkr.hw,
  749. },
  750. .num_parents = 1,
  751. .flags = CLK_SET_RATE_PARENT,
  752. .ops = &clk_regmap_div_ro_ops,
  753. },
  754. };
  755. static struct clk_branch mdss_1_disp_cc_mdss_ahb1_clk = {
  756. .halt_reg = 0x8088,
  757. .halt_check = BRANCH_HALT,
  758. .clkr = {
  759. .enable_reg = 0x8088,
  760. .enable_mask = BIT(0),
  761. .hw.init = &(const struct clk_init_data){
  762. .name = "mdss_1_disp_cc_mdss_ahb1_clk",
  763. .parent_hws = (const struct clk_hw*[]){
  764. &mdss_1_disp_cc_mdss_ahb_clk_src.clkr.hw,
  765. },
  766. .num_parents = 1,
  767. .flags = CLK_DONT_HOLD_STATE | CLK_SET_RATE_PARENT,
  768. .ops = &clk_branch2_ops,
  769. },
  770. },
  771. };
  772. static struct clk_branch mdss_1_disp_cc_mdss_ahb_clk = {
  773. .halt_reg = 0x8084,
  774. .halt_check = BRANCH_HALT,
  775. .clkr = {
  776. .enable_reg = 0x8084,
  777. .enable_mask = BIT(0),
  778. .hw.init = &(const struct clk_init_data){
  779. .name = "mdss_1_disp_cc_mdss_ahb_clk",
  780. .parent_hws = (const struct clk_hw*[]){
  781. &mdss_1_disp_cc_mdss_ahb_clk_src.clkr.hw,
  782. },
  783. .num_parents = 1,
  784. .flags = CLK_DONT_HOLD_STATE | CLK_SET_RATE_PARENT,
  785. .ops = &clk_branch2_ops,
  786. },
  787. },
  788. };
  789. static struct clk_branch mdss_1_disp_cc_mdss_byte0_clk = {
  790. .halt_reg = 0x8034,
  791. .halt_check = BRANCH_HALT,
  792. .clkr = {
  793. .enable_reg = 0x8034,
  794. .enable_mask = BIT(0),
  795. .hw.init = &(const struct clk_init_data){
  796. .name = "mdss_1_disp_cc_mdss_byte0_clk",
  797. .parent_hws = (const struct clk_hw*[]){
  798. &mdss_1_disp_cc_mdss_byte0_clk_src.clkr.hw,
  799. },
  800. .num_parents = 1,
  801. .flags = CLK_SET_RATE_PARENT,
  802. .ops = &clk_branch2_ops,
  803. },
  804. },
  805. };
  806. static struct clk_branch mdss_1_disp_cc_mdss_byte0_intf_clk = {
  807. .halt_reg = 0x8038,
  808. .halt_check = BRANCH_HALT,
  809. .clkr = {
  810. .enable_reg = 0x8038,
  811. .enable_mask = BIT(0),
  812. .hw.init = &(const struct clk_init_data){
  813. .name = "mdss_1_disp_cc_mdss_byte0_intf_clk",
  814. .parent_hws = (const struct clk_hw*[]){
  815. &mdss_1_disp_cc_mdss_byte0_div_clk_src.clkr.hw,
  816. },
  817. .num_parents = 1,
  818. .flags = CLK_SET_RATE_PARENT,
  819. .ops = &clk_branch2_ops,
  820. },
  821. },
  822. };
  823. static struct clk_branch mdss_1_disp_cc_mdss_byte1_clk = {
  824. .halt_reg = 0x803c,
  825. .halt_check = BRANCH_HALT,
  826. .clkr = {
  827. .enable_reg = 0x803c,
  828. .enable_mask = BIT(0),
  829. .hw.init = &(const struct clk_init_data){
  830. .name = "mdss_1_disp_cc_mdss_byte1_clk",
  831. .parent_hws = (const struct clk_hw*[]){
  832. &mdss_1_disp_cc_mdss_byte1_clk_src.clkr.hw,
  833. },
  834. .num_parents = 1,
  835. .flags = CLK_SET_RATE_PARENT,
  836. .ops = &clk_branch2_ops,
  837. },
  838. },
  839. };
  840. static struct clk_branch mdss_1_disp_cc_mdss_byte1_intf_clk = {
  841. .halt_reg = 0x8040,
  842. .halt_check = BRANCH_HALT,
  843. .clkr = {
  844. .enable_reg = 0x8040,
  845. .enable_mask = BIT(0),
  846. .hw.init = &(const struct clk_init_data){
  847. .name = "mdss_1_disp_cc_mdss_byte1_intf_clk",
  848. .parent_hws = (const struct clk_hw*[]){
  849. &mdss_1_disp_cc_mdss_byte1_div_clk_src.clkr.hw,
  850. },
  851. .num_parents = 1,
  852. .flags = CLK_SET_RATE_PARENT,
  853. .ops = &clk_branch2_ops,
  854. },
  855. },
  856. };
  857. static struct clk_branch mdss_1_disp_cc_mdss_dptx0_aux_clk = {
  858. .halt_reg = 0x805c,
  859. .halt_check = BRANCH_HALT,
  860. .clkr = {
  861. .enable_reg = 0x805c,
  862. .enable_mask = BIT(0),
  863. .hw.init = &(const struct clk_init_data){
  864. .name = "mdss_1_disp_cc_mdss_dptx0_aux_clk",
  865. .parent_hws = (const struct clk_hw*[]){
  866. &mdss_1_disp_cc_mdss_dptx0_aux_clk_src.clkr.hw,
  867. },
  868. .num_parents = 1,
  869. .flags = CLK_SET_RATE_PARENT,
  870. .ops = &clk_branch2_ops,
  871. },
  872. },
  873. };
  874. static struct clk_branch mdss_1_disp_cc_mdss_dptx0_crypto_clk = {
  875. .halt_reg = 0x8058,
  876. .halt_check = BRANCH_HALT,
  877. .clkr = {
  878. .enable_reg = 0x8058,
  879. .enable_mask = BIT(0),
  880. .hw.init = &(const struct clk_init_data){
  881. .name = "mdss_1_disp_cc_mdss_dptx0_crypto_clk",
  882. .parent_hws = (const struct clk_hw*[]){
  883. &mdss_1_disp_cc_mdss_dptx0_crypto_clk_src.clkr.hw,
  884. },
  885. .num_parents = 1,
  886. .flags = CLK_SET_RATE_PARENT,
  887. .ops = &clk_branch2_ops,
  888. },
  889. },
  890. };
  891. static struct clk_branch mdss_1_disp_cc_mdss_dptx0_link_clk = {
  892. .halt_reg = 0x804c,
  893. .halt_check = BRANCH_HALT,
  894. .clkr = {
  895. .enable_reg = 0x804c,
  896. .enable_mask = BIT(0),
  897. .hw.init = &(const struct clk_init_data){
  898. .name = "mdss_1_disp_cc_mdss_dptx0_link_clk",
  899. .parent_hws = (const struct clk_hw*[]){
  900. &mdss_1_disp_cc_mdss_dptx0_link_clk_src.clkr.hw,
  901. },
  902. .num_parents = 1,
  903. .flags = CLK_SET_RATE_PARENT,
  904. .ops = &clk_branch2_ops,
  905. },
  906. },
  907. };
  908. static struct clk_branch mdss_1_disp_cc_mdss_dptx0_link_intf_clk = {
  909. .halt_reg = 0x8050,
  910. .halt_check = BRANCH_HALT,
  911. .clkr = {
  912. .enable_reg = 0x8050,
  913. .enable_mask = BIT(0),
  914. .hw.init = &(const struct clk_init_data){
  915. .name = "mdss_1_disp_cc_mdss_dptx0_link_intf_clk",
  916. .parent_hws = (const struct clk_hw*[]){
  917. &mdss_1_disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw,
  918. },
  919. .num_parents = 1,
  920. .flags = CLK_SET_RATE_PARENT,
  921. .ops = &clk_branch2_ops,
  922. },
  923. },
  924. };
  925. static struct clk_branch mdss_1_disp_cc_mdss_dptx0_pixel0_clk = {
  926. .halt_reg = 0x8060,
  927. .halt_check = BRANCH_HALT,
  928. .clkr = {
  929. .enable_reg = 0x8060,
  930. .enable_mask = BIT(0),
  931. .hw.init = &(const struct clk_init_data){
  932. .name = "mdss_1_disp_cc_mdss_dptx0_pixel0_clk",
  933. .parent_hws = (const struct clk_hw*[]){
  934. &mdss_1_disp_cc_mdss_dptx0_pixel0_clk_src.clkr.hw,
  935. },
  936. .num_parents = 1,
  937. .flags = CLK_SET_RATE_PARENT,
  938. .ops = &clk_branch2_ops,
  939. },
  940. },
  941. };
  942. static struct clk_branch mdss_1_disp_cc_mdss_dptx0_pixel1_clk = {
  943. .halt_reg = 0x8064,
  944. .halt_check = BRANCH_HALT,
  945. .clkr = {
  946. .enable_reg = 0x8064,
  947. .enable_mask = BIT(0),
  948. .hw.init = &(const struct clk_init_data){
  949. .name = "mdss_1_disp_cc_mdss_dptx0_pixel1_clk",
  950. .parent_hws = (const struct clk_hw*[]){
  951. &mdss_1_disp_cc_mdss_dptx0_pixel1_clk_src.clkr.hw,
  952. },
  953. .num_parents = 1,
  954. .flags = CLK_SET_RATE_PARENT,
  955. .ops = &clk_branch2_ops,
  956. },
  957. },
  958. };
  959. static struct clk_branch mdss_1_disp_cc_mdss_dptx0_pixel2_clk = {
  960. .halt_reg = 0x8264,
  961. .halt_check = BRANCH_HALT,
  962. .clkr = {
  963. .enable_reg = 0x8264,
  964. .enable_mask = BIT(0),
  965. .hw.init = &(const struct clk_init_data){
  966. .name = "mdss_1_disp_cc_mdss_dptx0_pixel2_clk",
  967. .parent_hws = (const struct clk_hw*[]){
  968. &mdss_1_disp_cc_mdss_dptx0_pixel2_clk_src.clkr.hw,
  969. },
  970. .num_parents = 1,
  971. .flags = CLK_SET_RATE_PARENT,
  972. .ops = &clk_branch2_ops,
  973. },
  974. },
  975. };
  976. static struct clk_branch mdss_1_disp_cc_mdss_dptx0_pixel3_clk = {
  977. .halt_reg = 0x8268,
  978. .halt_check = BRANCH_HALT,
  979. .clkr = {
  980. .enable_reg = 0x8268,
  981. .enable_mask = BIT(0),
  982. .hw.init = &(const struct clk_init_data){
  983. .name = "mdss_1_disp_cc_mdss_dptx0_pixel3_clk",
  984. .parent_hws = (const struct clk_hw*[]){
  985. &mdss_1_disp_cc_mdss_dptx0_pixel3_clk_src.clkr.hw,
  986. },
  987. .num_parents = 1,
  988. .flags = CLK_SET_RATE_PARENT,
  989. .ops = &clk_branch2_ops,
  990. },
  991. },
  992. };
  993. static struct clk_branch mdss_1_disp_cc_mdss_dptx0_usb_router_link_intf_clk = {
  994. .halt_reg = 0x8054,
  995. .halt_check = BRANCH_HALT,
  996. .clkr = {
  997. .enable_reg = 0x8054,
  998. .enable_mask = BIT(0),
  999. .hw.init = &(const struct clk_init_data){
  1000. .name = "mdss_1_disp_cc_mdss_dptx0_usb_router_link_intf_clk",
  1001. .parent_hws = (const struct clk_hw*[]){
  1002. &mdss_1_disp_cc_mdss_dptx0_link_div_clk_src.clkr.hw,
  1003. },
  1004. .num_parents = 1,
  1005. .flags = CLK_SET_RATE_PARENT,
  1006. .ops = &clk_branch2_ops,
  1007. },
  1008. },
  1009. };
  1010. static struct clk_branch mdss_1_disp_cc_mdss_dptx1_aux_clk = {
  1011. .halt_reg = 0x8080,
  1012. .halt_check = BRANCH_HALT,
  1013. .clkr = {
  1014. .enable_reg = 0x8080,
  1015. .enable_mask = BIT(0),
  1016. .hw.init = &(const struct clk_init_data){
  1017. .name = "mdss_1_disp_cc_mdss_dptx1_aux_clk",
  1018. .parent_hws = (const struct clk_hw*[]){
  1019. &mdss_1_disp_cc_mdss_dptx1_aux_clk_src.clkr.hw,
  1020. },
  1021. .num_parents = 1,
  1022. .flags = CLK_SET_RATE_PARENT,
  1023. .ops = &clk_branch2_ops,
  1024. },
  1025. },
  1026. };
  1027. static struct clk_branch mdss_1_disp_cc_mdss_dptx1_crypto_clk = {
  1028. .halt_reg = 0x807c,
  1029. .halt_check = BRANCH_HALT,
  1030. .clkr = {
  1031. .enable_reg = 0x807c,
  1032. .enable_mask = BIT(0),
  1033. .hw.init = &(const struct clk_init_data){
  1034. .name = "mdss_1_disp_cc_mdss_dptx1_crypto_clk",
  1035. .parent_hws = (const struct clk_hw*[]){
  1036. &mdss_1_disp_cc_mdss_dptx1_crypto_clk_src.clkr.hw,
  1037. },
  1038. .num_parents = 1,
  1039. .flags = CLK_SET_RATE_PARENT,
  1040. .ops = &clk_branch2_ops,
  1041. },
  1042. },
  1043. };
  1044. static struct clk_branch mdss_1_disp_cc_mdss_dptx1_link_clk = {
  1045. .halt_reg = 0x8070,
  1046. .halt_check = BRANCH_HALT,
  1047. .clkr = {
  1048. .enable_reg = 0x8070,
  1049. .enable_mask = BIT(0),
  1050. .hw.init = &(const struct clk_init_data){
  1051. .name = "mdss_1_disp_cc_mdss_dptx1_link_clk",
  1052. .parent_hws = (const struct clk_hw*[]){
  1053. &mdss_1_disp_cc_mdss_dptx1_link_clk_src.clkr.hw,
  1054. },
  1055. .num_parents = 1,
  1056. .flags = CLK_SET_RATE_PARENT,
  1057. .ops = &clk_branch2_ops,
  1058. },
  1059. },
  1060. };
  1061. static struct clk_branch mdss_1_disp_cc_mdss_dptx1_link_intf_clk = {
  1062. .halt_reg = 0x8074,
  1063. .halt_check = BRANCH_HALT,
  1064. .clkr = {
  1065. .enable_reg = 0x8074,
  1066. .enable_mask = BIT(0),
  1067. .hw.init = &(const struct clk_init_data){
  1068. .name = "mdss_1_disp_cc_mdss_dptx1_link_intf_clk",
  1069. .parent_hws = (const struct clk_hw*[]){
  1070. &mdss_1_disp_cc_mdss_dptx1_link_div_clk_src.clkr.hw,
  1071. },
  1072. .num_parents = 1,
  1073. .flags = CLK_SET_RATE_PARENT,
  1074. .ops = &clk_branch2_ops,
  1075. },
  1076. },
  1077. };
  1078. static struct clk_branch mdss_1_disp_cc_mdss_dptx1_pixel0_clk = {
  1079. .halt_reg = 0x8068,
  1080. .halt_check = BRANCH_HALT,
  1081. .clkr = {
  1082. .enable_reg = 0x8068,
  1083. .enable_mask = BIT(0),
  1084. .hw.init = &(const struct clk_init_data){
  1085. .name = "mdss_1_disp_cc_mdss_dptx1_pixel0_clk",
  1086. .parent_hws = (const struct clk_hw*[]){
  1087. &mdss_1_disp_cc_mdss_dptx1_pixel0_clk_src.clkr.hw,
  1088. },
  1089. .num_parents = 1,
  1090. .flags = CLK_SET_RATE_PARENT,
  1091. .ops = &clk_branch2_ops,
  1092. },
  1093. },
  1094. };
  1095. static struct clk_branch mdss_1_disp_cc_mdss_dptx1_pixel1_clk = {
  1096. .halt_reg = 0x806c,
  1097. .halt_check = BRANCH_HALT,
  1098. .clkr = {
  1099. .enable_reg = 0x806c,
  1100. .enable_mask = BIT(0),
  1101. .hw.init = &(const struct clk_init_data){
  1102. .name = "mdss_1_disp_cc_mdss_dptx1_pixel1_clk",
  1103. .parent_hws = (const struct clk_hw*[]){
  1104. &mdss_1_disp_cc_mdss_dptx1_pixel1_clk_src.clkr.hw,
  1105. },
  1106. .num_parents = 1,
  1107. .flags = CLK_SET_RATE_PARENT,
  1108. .ops = &clk_branch2_ops,
  1109. },
  1110. },
  1111. };
  1112. static struct clk_branch mdss_1_disp_cc_mdss_dptx1_usb_router_link_intf_clk = {
  1113. .halt_reg = 0x8078,
  1114. .halt_check = BRANCH_HALT,
  1115. .clkr = {
  1116. .enable_reg = 0x8078,
  1117. .enable_mask = BIT(0),
  1118. .hw.init = &(const struct clk_init_data){
  1119. .name = "mdss_1_disp_cc_mdss_dptx1_usb_router_link_intf_clk",
  1120. .parent_hws = (const struct clk_hw*[]){
  1121. &mdss_1_disp_cc_mdss_dptx1_link_div_clk_src.clkr.hw,
  1122. },
  1123. .num_parents = 1,
  1124. .flags = CLK_SET_RATE_PARENT,
  1125. .ops = &clk_branch2_ops,
  1126. },
  1127. },
  1128. };
  1129. static struct clk_branch mdss_1_disp_cc_mdss_esc0_clk = {
  1130. .halt_reg = 0x8044,
  1131. .halt_check = BRANCH_HALT,
  1132. .clkr = {
  1133. .enable_reg = 0x8044,
  1134. .enable_mask = BIT(0),
  1135. .hw.init = &(const struct clk_init_data){
  1136. .name = "mdss_1_disp_cc_mdss_esc0_clk",
  1137. .parent_hws = (const struct clk_hw*[]){
  1138. &mdss_1_disp_cc_mdss_esc0_clk_src.clkr.hw,
  1139. },
  1140. .num_parents = 1,
  1141. .flags = CLK_SET_RATE_PARENT,
  1142. .ops = &clk_branch2_ops,
  1143. },
  1144. },
  1145. };
  1146. static struct clk_branch mdss_1_disp_cc_mdss_esc1_clk = {
  1147. .halt_reg = 0x8048,
  1148. .halt_check = BRANCH_HALT,
  1149. .clkr = {
  1150. .enable_reg = 0x8048,
  1151. .enable_mask = BIT(0),
  1152. .hw.init = &(const struct clk_init_data){
  1153. .name = "mdss_1_disp_cc_mdss_esc1_clk",
  1154. .parent_hws = (const struct clk_hw*[]){
  1155. &mdss_1_disp_cc_mdss_esc1_clk_src.clkr.hw,
  1156. },
  1157. .num_parents = 1,
  1158. .flags = CLK_SET_RATE_PARENT,
  1159. .ops = &clk_branch2_ops,
  1160. },
  1161. },
  1162. };
  1163. static struct clk_branch mdss_1_disp_cc_mdss_mdp1_clk = {
  1164. .halt_reg = 0x8014,
  1165. .halt_check = BRANCH_HALT,
  1166. .clkr = {
  1167. .enable_reg = 0x8014,
  1168. .enable_mask = BIT(0),
  1169. .hw.init = &(const struct clk_init_data){
  1170. .name = "mdss_1_disp_cc_mdss_mdp1_clk",
  1171. .parent_hws = (const struct clk_hw*[]){
  1172. &mdss_1_disp_cc_mdss_mdp_clk_src.clkr.hw,
  1173. },
  1174. .num_parents = 1,
  1175. .flags = CLK_SET_RATE_PARENT,
  1176. .ops = &clk_branch2_ops,
  1177. },
  1178. },
  1179. };
  1180. static struct clk_branch mdss_1_disp_cc_mdss_mdp_clk = {
  1181. .halt_reg = 0x800c,
  1182. .halt_check = BRANCH_HALT,
  1183. .clkr = {
  1184. .enable_reg = 0x800c,
  1185. .enable_mask = BIT(0),
  1186. .hw.init = &(const struct clk_init_data){
  1187. .name = "mdss_1_disp_cc_mdss_mdp_clk",
  1188. .parent_hws = (const struct clk_hw*[]){
  1189. &mdss_1_disp_cc_mdss_mdp_clk_src.clkr.hw,
  1190. },
  1191. .num_parents = 1,
  1192. .flags = CLK_SET_RATE_PARENT,
  1193. .ops = &clk_branch2_ops,
  1194. },
  1195. },
  1196. };
  1197. static struct clk_branch mdss_1_disp_cc_mdss_mdp_lut1_clk = {
  1198. .halt_reg = 0x8024,
  1199. .halt_check = BRANCH_HALT_VOTED,
  1200. .clkr = {
  1201. .enable_reg = 0x8024,
  1202. .enable_mask = BIT(0),
  1203. .hw.init = &(const struct clk_init_data){
  1204. .name = "mdss_1_disp_cc_mdss_mdp_lut1_clk",
  1205. .parent_hws = (const struct clk_hw*[]){
  1206. &mdss_1_disp_cc_mdss_mdp_clk_src.clkr.hw,
  1207. },
  1208. .num_parents = 1,
  1209. .flags = CLK_SET_RATE_PARENT,
  1210. .ops = &clk_branch2_ops,
  1211. },
  1212. },
  1213. };
  1214. static struct clk_branch mdss_1_disp_cc_mdss_mdp_lut_clk = {
  1215. .halt_reg = 0x801c,
  1216. .halt_check = BRANCH_HALT_VOTED,
  1217. .clkr = {
  1218. .enable_reg = 0x801c,
  1219. .enable_mask = BIT(0),
  1220. .hw.init = &(const struct clk_init_data){
  1221. .name = "mdss_1_disp_cc_mdss_mdp_lut_clk",
  1222. .parent_hws = (const struct clk_hw*[]){
  1223. &mdss_1_disp_cc_mdss_mdp_clk_src.clkr.hw,
  1224. },
  1225. .num_parents = 1,
  1226. .flags = CLK_SET_RATE_PARENT,
  1227. .ops = &clk_branch2_ops,
  1228. },
  1229. },
  1230. };
  1231. static struct clk_branch mdss_1_disp_cc_mdss_non_gdsc_ahb_clk = {
  1232. .halt_reg = 0xa004,
  1233. .halt_check = BRANCH_HALT_VOTED,
  1234. .clkr = {
  1235. .enable_reg = 0xa004,
  1236. .enable_mask = BIT(0),
  1237. .hw.init = &(const struct clk_init_data){
  1238. .name = "mdss_1_disp_cc_mdss_non_gdsc_ahb_clk",
  1239. .parent_hws = (const struct clk_hw*[]){
  1240. &mdss_1_disp_cc_mdss_ahb_clk_src.clkr.hw,
  1241. },
  1242. .num_parents = 1,
  1243. .flags = CLK_SET_RATE_PARENT,
  1244. .ops = &clk_branch2_ops,
  1245. },
  1246. },
  1247. };
  1248. static struct clk_branch mdss_1_disp_cc_mdss_pclk0_clk = {
  1249. .halt_reg = 0x8004,
  1250. .halt_check = BRANCH_HALT,
  1251. .clkr = {
  1252. .enable_reg = 0x8004,
  1253. .enable_mask = BIT(0),
  1254. .hw.init = &(const struct clk_init_data){
  1255. .name = "mdss_1_disp_cc_mdss_pclk0_clk",
  1256. .parent_hws = (const struct clk_hw*[]){
  1257. &mdss_1_disp_cc_mdss_pclk0_clk_src.clkr.hw,
  1258. },
  1259. .num_parents = 1,
  1260. .flags = CLK_SET_RATE_PARENT,
  1261. .ops = &clk_branch2_ops,
  1262. },
  1263. },
  1264. };
  1265. static struct clk_branch mdss_1_disp_cc_mdss_pclk1_clk = {
  1266. .halt_reg = 0x8008,
  1267. .halt_check = BRANCH_HALT,
  1268. .clkr = {
  1269. .enable_reg = 0x8008,
  1270. .enable_mask = BIT(0),
  1271. .hw.init = &(const struct clk_init_data){
  1272. .name = "mdss_1_disp_cc_mdss_pclk1_clk",
  1273. .parent_hws = (const struct clk_hw*[]){
  1274. &mdss_1_disp_cc_mdss_pclk1_clk_src.clkr.hw,
  1275. },
  1276. .num_parents = 1,
  1277. .flags = CLK_SET_RATE_PARENT,
  1278. .ops = &clk_branch2_ops,
  1279. },
  1280. },
  1281. };
  1282. static struct clk_branch mdss_1_disp_cc_mdss_rscc_ahb_clk = {
  1283. .halt_reg = 0xa00c,
  1284. .halt_check = BRANCH_HALT,
  1285. .clkr = {
  1286. .enable_reg = 0xa00c,
  1287. .enable_mask = BIT(0),
  1288. .hw.init = &(const struct clk_init_data){
  1289. .name = "mdss_1_disp_cc_mdss_rscc_ahb_clk",
  1290. .parent_hws = (const struct clk_hw*[]){
  1291. &mdss_1_disp_cc_mdss_ahb_clk_src.clkr.hw,
  1292. },
  1293. .num_parents = 1,
  1294. .flags = CLK_SET_RATE_PARENT,
  1295. .ops = &clk_branch2_ops,
  1296. },
  1297. },
  1298. };
  1299. static struct clk_branch mdss_1_disp_cc_mdss_rscc_vsync_clk = {
  1300. .halt_reg = 0xa008,
  1301. .halt_check = BRANCH_HALT,
  1302. .clkr = {
  1303. .enable_reg = 0xa008,
  1304. .enable_mask = BIT(0),
  1305. .hw.init = &(const struct clk_init_data){
  1306. .name = "mdss_1_disp_cc_mdss_rscc_vsync_clk",
  1307. .parent_hws = (const struct clk_hw*[]){
  1308. &mdss_1_disp_cc_mdss_vsync_clk_src.clkr.hw,
  1309. },
  1310. .num_parents = 1,
  1311. .flags = CLK_SET_RATE_PARENT,
  1312. .ops = &clk_branch2_ops,
  1313. },
  1314. },
  1315. };
  1316. static struct clk_branch mdss_1_disp_cc_mdss_vsync1_clk = {
  1317. .halt_reg = 0x8030,
  1318. .halt_check = BRANCH_HALT,
  1319. .clkr = {
  1320. .enable_reg = 0x8030,
  1321. .enable_mask = BIT(0),
  1322. .hw.init = &(const struct clk_init_data){
  1323. .name = "mdss_1_disp_cc_mdss_vsync1_clk",
  1324. .parent_hws = (const struct clk_hw*[]){
  1325. &mdss_1_disp_cc_mdss_vsync_clk_src.clkr.hw,
  1326. },
  1327. .num_parents = 1,
  1328. .flags = CLK_SET_RATE_PARENT,
  1329. .ops = &clk_branch2_ops,
  1330. },
  1331. },
  1332. };
  1333. static struct clk_branch mdss_1_disp_cc_mdss_vsync_clk = {
  1334. .halt_reg = 0x802c,
  1335. .halt_check = BRANCH_HALT,
  1336. .clkr = {
  1337. .enable_reg = 0x802c,
  1338. .enable_mask = BIT(0),
  1339. .hw.init = &(const struct clk_init_data){
  1340. .name = "mdss_1_disp_cc_mdss_vsync_clk",
  1341. .parent_hws = (const struct clk_hw*[]){
  1342. &mdss_1_disp_cc_mdss_vsync_clk_src.clkr.hw,
  1343. },
  1344. .num_parents = 1,
  1345. .flags = CLK_SET_RATE_PARENT,
  1346. .ops = &clk_branch2_ops,
  1347. },
  1348. },
  1349. };
  1350. static struct clk_branch mdss_1_disp_cc_sleep_clk = {
  1351. .halt_reg = 0xc070,
  1352. .halt_check = BRANCH_HALT,
  1353. .clkr = {
  1354. .enable_reg = 0xc070,
  1355. .enable_mask = BIT(0),
  1356. .hw.init = &(const struct clk_init_data){
  1357. .name = "mdss_1_disp_cc_sleep_clk",
  1358. .parent_hws = (const struct clk_hw*[]){
  1359. &mdss_1_disp_cc_sleep_clk_src.clkr.hw,
  1360. },
  1361. .num_parents = 1,
  1362. .flags = CLK_SET_RATE_PARENT,
  1363. .ops = &clk_branch2_ops,
  1364. },
  1365. },
  1366. };
  1367. static struct clk_regmap *disp_cc_1_lemans_clocks[] = {
  1368. [DISP_CC_MDSS_AHB1_CLK] = &mdss_1_disp_cc_mdss_ahb1_clk.clkr,
  1369. [DISP_CC_MDSS_AHB_CLK] = &mdss_1_disp_cc_mdss_ahb_clk.clkr,
  1370. [DISP_CC_MDSS_AHB_CLK_SRC] = &mdss_1_disp_cc_mdss_ahb_clk_src.clkr,
  1371. [DISP_CC_MDSS_BYTE0_CLK] = &mdss_1_disp_cc_mdss_byte0_clk.clkr,
  1372. [DISP_CC_MDSS_BYTE0_CLK_SRC] = &mdss_1_disp_cc_mdss_byte0_clk_src.clkr,
  1373. [DISP_CC_MDSS_BYTE0_DIV_CLK_SRC] = &mdss_1_disp_cc_mdss_byte0_div_clk_src.clkr,
  1374. [DISP_CC_MDSS_BYTE0_INTF_CLK] = &mdss_1_disp_cc_mdss_byte0_intf_clk.clkr,
  1375. [DISP_CC_MDSS_BYTE1_CLK] = &mdss_1_disp_cc_mdss_byte1_clk.clkr,
  1376. [DISP_CC_MDSS_BYTE1_CLK_SRC] = &mdss_1_disp_cc_mdss_byte1_clk_src.clkr,
  1377. [DISP_CC_MDSS_BYTE1_DIV_CLK_SRC] = &mdss_1_disp_cc_mdss_byte1_div_clk_src.clkr,
  1378. [DISP_CC_MDSS_BYTE1_INTF_CLK] = &mdss_1_disp_cc_mdss_byte1_intf_clk.clkr,
  1379. [DISP_CC_MDSS_DPTX0_AUX_CLK] = &mdss_1_disp_cc_mdss_dptx0_aux_clk.clkr,
  1380. [DISP_CC_MDSS_DPTX0_AUX_CLK_SRC] = &mdss_1_disp_cc_mdss_dptx0_aux_clk_src.clkr,
  1381. [DISP_CC_MDSS_DPTX0_CRYPTO_CLK] = &mdss_1_disp_cc_mdss_dptx0_crypto_clk.clkr,
  1382. [DISP_CC_MDSS_DPTX0_CRYPTO_CLK_SRC] = &mdss_1_disp_cc_mdss_dptx0_crypto_clk_src.clkr,
  1383. [DISP_CC_MDSS_DPTX0_LINK_CLK] = &mdss_1_disp_cc_mdss_dptx0_link_clk.clkr,
  1384. [DISP_CC_MDSS_DPTX0_LINK_CLK_SRC] = &mdss_1_disp_cc_mdss_dptx0_link_clk_src.clkr,
  1385. [DISP_CC_MDSS_DPTX0_LINK_DIV_CLK_SRC] =
  1386. &mdss_1_disp_cc_mdss_dptx0_link_div_clk_src.clkr,
  1387. [DISP_CC_MDSS_DPTX0_LINK_INTF_CLK] = &mdss_1_disp_cc_mdss_dptx0_link_intf_clk.clkr,
  1388. [DISP_CC_MDSS_DPTX0_PIXEL0_CLK] = &mdss_1_disp_cc_mdss_dptx0_pixel0_clk.clkr,
  1389. [DISP_CC_MDSS_DPTX0_PIXEL0_CLK_SRC] = &mdss_1_disp_cc_mdss_dptx0_pixel0_clk_src.clkr,
  1390. [DISP_CC_MDSS_DPTX0_PIXEL1_CLK] = &mdss_1_disp_cc_mdss_dptx0_pixel1_clk.clkr,
  1391. [DISP_CC_MDSS_DPTX0_PIXEL1_CLK_SRC] = &mdss_1_disp_cc_mdss_dptx0_pixel1_clk_src.clkr,
  1392. [DISP_CC_MDSS_DPTX0_PIXEL2_CLK] = &mdss_1_disp_cc_mdss_dptx0_pixel2_clk.clkr,
  1393. [DISP_CC_MDSS_DPTX0_PIXEL2_CLK_SRC] = &mdss_1_disp_cc_mdss_dptx0_pixel2_clk_src.clkr,
  1394. [DISP_CC_MDSS_DPTX0_PIXEL3_CLK] = &mdss_1_disp_cc_mdss_dptx0_pixel3_clk.clkr,
  1395. [DISP_CC_MDSS_DPTX0_PIXEL3_CLK_SRC] = &mdss_1_disp_cc_mdss_dptx0_pixel3_clk_src.clkr,
  1396. [DISP_CC_MDSS_DPTX0_USB_ROUTER_LINK_INTF_CLK] =
  1397. &mdss_1_disp_cc_mdss_dptx0_usb_router_link_intf_clk.clkr,
  1398. [DISP_CC_MDSS_DPTX1_AUX_CLK] = &mdss_1_disp_cc_mdss_dptx1_aux_clk.clkr,
  1399. [DISP_CC_MDSS_DPTX1_AUX_CLK_SRC] = &mdss_1_disp_cc_mdss_dptx1_aux_clk_src.clkr,
  1400. [DISP_CC_MDSS_DPTX1_CRYPTO_CLK] = &mdss_1_disp_cc_mdss_dptx1_crypto_clk.clkr,
  1401. [DISP_CC_MDSS_DPTX1_CRYPTO_CLK_SRC] = &mdss_1_disp_cc_mdss_dptx1_crypto_clk_src.clkr,
  1402. [DISP_CC_MDSS_DPTX1_LINK_CLK] = &mdss_1_disp_cc_mdss_dptx1_link_clk.clkr,
  1403. [DISP_CC_MDSS_DPTX1_LINK_CLK_SRC] = &mdss_1_disp_cc_mdss_dptx1_link_clk_src.clkr,
  1404. [DISP_CC_MDSS_DPTX1_LINK_DIV_CLK_SRC] =
  1405. &mdss_1_disp_cc_mdss_dptx1_link_div_clk_src.clkr,
  1406. [DISP_CC_MDSS_DPTX1_LINK_INTF_CLK] = &mdss_1_disp_cc_mdss_dptx1_link_intf_clk.clkr,
  1407. [DISP_CC_MDSS_DPTX1_PIXEL0_CLK] = &mdss_1_disp_cc_mdss_dptx1_pixel0_clk.clkr,
  1408. [DISP_CC_MDSS_DPTX1_PIXEL0_CLK_SRC] = &mdss_1_disp_cc_mdss_dptx1_pixel0_clk_src.clkr,
  1409. [DISP_CC_MDSS_DPTX1_PIXEL1_CLK] = &mdss_1_disp_cc_mdss_dptx1_pixel1_clk.clkr,
  1410. [DISP_CC_MDSS_DPTX1_PIXEL1_CLK_SRC] = &mdss_1_disp_cc_mdss_dptx1_pixel1_clk_src.clkr,
  1411. [DISP_CC_MDSS_DPTX1_USB_ROUTER_LINK_INTF_CLK] =
  1412. &mdss_1_disp_cc_mdss_dptx1_usb_router_link_intf_clk.clkr,
  1413. [DISP_CC_MDSS_ESC0_CLK] = &mdss_1_disp_cc_mdss_esc0_clk.clkr,
  1414. [DISP_CC_MDSS_ESC0_CLK_SRC] = &mdss_1_disp_cc_mdss_esc0_clk_src.clkr,
  1415. [DISP_CC_MDSS_ESC1_CLK] = &mdss_1_disp_cc_mdss_esc1_clk.clkr,
  1416. [DISP_CC_MDSS_ESC1_CLK_SRC] = &mdss_1_disp_cc_mdss_esc1_clk_src.clkr,
  1417. [DISP_CC_MDSS_MDP1_CLK] = &mdss_1_disp_cc_mdss_mdp1_clk.clkr,
  1418. [DISP_CC_MDSS_MDP_CLK] = &mdss_1_disp_cc_mdss_mdp_clk.clkr,
  1419. [DISP_CC_MDSS_MDP_CLK_SRC] = &mdss_1_disp_cc_mdss_mdp_clk_src.clkr,
  1420. [DISP_CC_MDSS_MDP_LUT1_CLK] = &mdss_1_disp_cc_mdss_mdp_lut1_clk.clkr,
  1421. [DISP_CC_MDSS_MDP_LUT_CLK] = &mdss_1_disp_cc_mdss_mdp_lut_clk.clkr,
  1422. [DISP_CC_MDSS_NON_GDSC_AHB_CLK] = &mdss_1_disp_cc_mdss_non_gdsc_ahb_clk.clkr,
  1423. [DISP_CC_MDSS_PCLK0_CLK] = &mdss_1_disp_cc_mdss_pclk0_clk.clkr,
  1424. [DISP_CC_MDSS_PCLK0_CLK_SRC] = &mdss_1_disp_cc_mdss_pclk0_clk_src.clkr,
  1425. [DISP_CC_MDSS_PCLK1_CLK] = &mdss_1_disp_cc_mdss_pclk1_clk.clkr,
  1426. [DISP_CC_MDSS_PCLK1_CLK_SRC] = &mdss_1_disp_cc_mdss_pclk1_clk_src.clkr,
  1427. [DISP_CC_MDSS_RSCC_AHB_CLK] = &mdss_1_disp_cc_mdss_rscc_ahb_clk.clkr,
  1428. [DISP_CC_MDSS_RSCC_VSYNC_CLK] = &mdss_1_disp_cc_mdss_rscc_vsync_clk.clkr,
  1429. [DISP_CC_MDSS_VSYNC1_CLK] = &mdss_1_disp_cc_mdss_vsync1_clk.clkr,
  1430. [DISP_CC_MDSS_VSYNC_CLK] = &mdss_1_disp_cc_mdss_vsync_clk.clkr,
  1431. [DISP_CC_MDSS_VSYNC_CLK_SRC] = &mdss_1_disp_cc_mdss_vsync_clk_src.clkr,
  1432. [DISP_CC_PLL0] = &mdss_1_disp_cc_pll0.clkr,
  1433. [DISP_CC_PLL1] = &mdss_1_disp_cc_pll1.clkr,
  1434. [DISP_CC_SLEEP_CLK] = &mdss_1_disp_cc_sleep_clk.clkr,
  1435. [DISP_CC_SLEEP_CLK_SRC] = &mdss_1_disp_cc_sleep_clk_src.clkr,
  1436. [DISP_CC_XO_CLK_SRC] = &mdss_1_disp_cc_xo_clk_src.clkr,
  1437. };
  1438. static const struct qcom_reset_map disp_cc_1_lemans_resets[] = {
  1439. [DISP_CC_MDSS_CORE_BCR] = { 0x8000 },
  1440. [DISP_CC_MDSS_RSCC_BCR] = { 0xa000 },
  1441. };
  1442. static const struct regmap_config disp_cc_1_lemans_regmap_config = {
  1443. .reg_bits = 32,
  1444. .reg_stride = 4,
  1445. .val_bits = 32,
  1446. .max_register = 0x12414,
  1447. .fast_io = true,
  1448. };
  1449. static struct qcom_cc_desc disp_cc_1_lemans_desc = {
  1450. .config = &disp_cc_1_lemans_regmap_config,
  1451. .clks = disp_cc_1_lemans_clocks,
  1452. .num_clks = ARRAY_SIZE(disp_cc_1_lemans_clocks),
  1453. .resets = disp_cc_1_lemans_resets,
  1454. .num_resets = ARRAY_SIZE(disp_cc_1_lemans_resets),
  1455. .clk_regulators = disp_cc_1_lemans_regulators,
  1456. .num_clk_regulators = ARRAY_SIZE(disp_cc_1_lemans_regulators),
  1457. };
  1458. static const struct of_device_id disp_cc_1_lemans_match_table[] = {
  1459. { .compatible = "qcom,lemans-dispcc1" },
  1460. { }
  1461. };
  1462. MODULE_DEVICE_TABLE(of, disp_cc_1_lemans_match_table);
  1463. static int disp_cc_1_lemans_probe(struct platform_device *pdev)
  1464. {
  1465. struct regmap *regmap;
  1466. int ret;
  1467. regmap = qcom_cc_map(pdev, &disp_cc_1_lemans_desc);
  1468. if (IS_ERR(regmap))
  1469. return PTR_ERR(regmap);
  1470. ret = qcom_cc_runtime_init(pdev, &disp_cc_1_lemans_desc);
  1471. if (ret)
  1472. return ret;
  1473. ret = pm_runtime_get_sync(&pdev->dev);
  1474. if (ret)
  1475. return ret;
  1476. clk_lucid_evo_pll_configure(&mdss_1_disp_cc_pll0, regmap, mdss_1_disp_cc_pll0.config);
  1477. clk_lucid_evo_pll_configure(&mdss_1_disp_cc_pll1, regmap, mdss_1_disp_cc_pll1.config);
  1478. /*
  1479. * Keep the clocks always-ON
  1480. * MDSS_0_DISP_CC_XO_CLK.
  1481. */
  1482. regmap_update_bits(regmap, 0xc054, BIT(0), BIT(0));
  1483. ret = qcom_cc_really_probe(pdev, &disp_cc_1_lemans_desc, regmap);
  1484. if (ret) {
  1485. dev_err(&pdev->dev, "Failed to register DISP CC 1 clocks\n");
  1486. return ret;
  1487. }
  1488. pm_runtime_put_sync(&pdev->dev);
  1489. dev_info(&pdev->dev, "Registered DISP CC 1 clocks\n");
  1490. return ret;
  1491. }
  1492. static void disp_cc_1_lemans_sync_state(struct device *dev)
  1493. {
  1494. qcom_cc_sync_state(dev, &disp_cc_1_lemans_desc);
  1495. }
  1496. static const struct dev_pm_ops disp_cc_1_lemans_pm_ops = {
  1497. SET_RUNTIME_PM_OPS(qcom_cc_runtime_suspend, qcom_cc_runtime_resume, NULL)
  1498. SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
  1499. pm_runtime_force_resume)
  1500. };
  1501. static struct platform_driver disp_cc_1_lemans_driver = {
  1502. .probe = disp_cc_1_lemans_probe,
  1503. .driver = {
  1504. .name = "disp_cc_1-lemans",
  1505. .of_match_table = disp_cc_1_lemans_match_table,
  1506. .sync_state = disp_cc_1_lemans_sync_state,
  1507. .pm = &disp_cc_1_lemans_pm_ops,
  1508. },
  1509. };
  1510. static int __init disp_cc_1_lemans_init(void)
  1511. {
  1512. return platform_driver_register(&disp_cc_1_lemans_driver);
  1513. }
  1514. subsys_initcall(disp_cc_1_lemans_init);
  1515. static void __exit disp_cc_1_lemans_exit(void)
  1516. {
  1517. platform_driver_unregister(&disp_cc_1_lemans_driver);
  1518. }
  1519. module_exit(disp_cc_1_lemans_exit);
  1520. MODULE_DESCRIPTION("QTI DISP_CC_1 LEMANS Driver");
  1521. MODULE_LICENSE("GPL");