mt8192-afe-clk.h 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * mt8192-afe-clk.h -- Mediatek 8192 afe clock ctrl definition
  4. *
  5. * Copyright (c) 2020 MediaTek Inc.
  6. * Author: Shane Chien <[email protected]>
  7. */
  8. #ifndef _MT8192_AFE_CLOCK_CTRL_H_
  9. #define _MT8192_AFE_CLOCK_CTRL_H_
  10. #define AP_PLL_CON3 0x0014
  11. #define APLL1_CON0 0x0318
  12. #define APLL1_CON1 0x031c
  13. #define APLL1_CON2 0x0320
  14. #define APLL1_CON4 0x0328
  15. #define APLL1_TUNER_CON0 0x0040
  16. #define APLL2_CON0 0x032c
  17. #define APLL2_CON1 0x0330
  18. #define APLL2_CON2 0x0334
  19. #define APLL2_CON4 0x033c
  20. #define APLL2_TUNER_CON0 0x0044
  21. #define CLK_CFG_7 0x0080
  22. #define CLK_CFG_8 0x0090
  23. #define CLK_CFG_11 0x00c0
  24. #define CLK_CFG_12 0x00d0
  25. #define CLK_CFG_13 0x00e0
  26. #define CLK_CFG_15 0x0100
  27. #define CLK_AUDDIV_0 0x0320
  28. #define CLK_AUDDIV_2 0x0328
  29. #define CLK_AUDDIV_3 0x0334
  30. #define CLK_AUDDIV_4 0x0338
  31. #define CKSYS_AUD_TOP_CFG 0x032c
  32. #define CKSYS_AUD_TOP_MON 0x0330
  33. #define PERI_BUS_DCM_CTRL 0x0074
  34. #define MODULE_SW_CG_1_STA 0x0094
  35. #define MODULE_SW_CG_2_STA 0x00ac
  36. /* CLK_AUDDIV_0 */
  37. #define APLL12_DIV0_PDN_SFT 0
  38. #define APLL12_DIV0_PDN_MASK 0x1
  39. #define APLL12_DIV0_PDN_MASK_SFT (0x1 << 0)
  40. #define APLL12_DIV1_PDN_SFT 1
  41. #define APLL12_DIV1_PDN_MASK 0x1
  42. #define APLL12_DIV1_PDN_MASK_SFT (0x1 << 1)
  43. #define APLL12_DIV2_PDN_SFT 2
  44. #define APLL12_DIV2_PDN_MASK 0x1
  45. #define APLL12_DIV2_PDN_MASK_SFT (0x1 << 2)
  46. #define APLL12_DIV3_PDN_SFT 3
  47. #define APLL12_DIV3_PDN_MASK 0x1
  48. #define APLL12_DIV3_PDN_MASK_SFT (0x1 << 3)
  49. #define APLL12_DIV4_PDN_SFT 4
  50. #define APLL12_DIV4_PDN_MASK 0x1
  51. #define APLL12_DIV4_PDN_MASK_SFT (0x1 << 4)
  52. #define APLL12_DIVB_PDN_SFT 5
  53. #define APLL12_DIVB_PDN_MASK 0x1
  54. #define APLL12_DIVB_PDN_MASK_SFT (0x1 << 5)
  55. #define APLL12_DIV5_PDN_SFT 6
  56. #define APLL12_DIV5_PDN_MASK 0x1
  57. #define APLL12_DIV5_PDN_MASK_SFT (0x1 << 6)
  58. #define APLL12_DIV6_PDN_SFT 7
  59. #define APLL12_DIV6_PDN_MASK 0x1
  60. #define APLL12_DIV6_PDN_MASK_SFT (0x1 << 7)
  61. #define APLL12_DIV7_PDN_SFT 8
  62. #define APLL12_DIV7_PDN_MASK 0x1
  63. #define APLL12_DIV7_PDN_MASK_SFT (0x1 << 8)
  64. #define APLL12_DIV8_PDN_SFT 9
  65. #define APLL12_DIV8_PDN_MASK 0x1
  66. #define APLL12_DIV8_PDN_MASK_SFT (0x1 << 9)
  67. #define APLL12_DIV9_PDN_SFT 10
  68. #define APLL12_DIV9_PDN_MASK 0x1
  69. #define APLL12_DIV9_PDN_MASK_SFT (0x1 << 10)
  70. #define APLL_I2S0_MCK_SEL_SFT 16
  71. #define APLL_I2S0_MCK_SEL_MASK 0x1
  72. #define APLL_I2S0_MCK_SEL_MASK_SFT (0x1 << 16)
  73. #define APLL_I2S1_MCK_SEL_SFT 17
  74. #define APLL_I2S1_MCK_SEL_MASK 0x1
  75. #define APLL_I2S1_MCK_SEL_MASK_SFT (0x1 << 17)
  76. #define APLL_I2S2_MCK_SEL_SFT 18
  77. #define APLL_I2S2_MCK_SEL_MASK 0x1
  78. #define APLL_I2S2_MCK_SEL_MASK_SFT (0x1 << 18)
  79. #define APLL_I2S3_MCK_SEL_SFT 19
  80. #define APLL_I2S3_MCK_SEL_MASK 0x1
  81. #define APLL_I2S3_MCK_SEL_MASK_SFT (0x1 << 19)
  82. #define APLL_I2S4_MCK_SEL_SFT 20
  83. #define APLL_I2S4_MCK_SEL_MASK 0x1
  84. #define APLL_I2S4_MCK_SEL_MASK_SFT (0x1 << 20)
  85. #define APLL_I2S5_MCK_SEL_SFT 21
  86. #define APLL_I2S5_MCK_SEL_MASK 0x1
  87. #define APLL_I2S5_MCK_SEL_MASK_SFT (0x1 << 21)
  88. #define APLL_I2S6_MCK_SEL_SFT 22
  89. #define APLL_I2S6_MCK_SEL_MASK 0x1
  90. #define APLL_I2S6_MCK_SEL_MASK_SFT (0x1 << 22)
  91. #define APLL_I2S7_MCK_SEL_SFT 23
  92. #define APLL_I2S7_MCK_SEL_MASK 0x1
  93. #define APLL_I2S7_MCK_SEL_MASK_SFT (0x1 << 23)
  94. #define APLL_I2S8_MCK_SEL_SFT 24
  95. #define APLL_I2S8_MCK_SEL_MASK 0x1
  96. #define APLL_I2S8_MCK_SEL_MASK_SFT (0x1 << 24)
  97. #define APLL_I2S9_MCK_SEL_SFT 25
  98. #define APLL_I2S9_MCK_SEL_MASK 0x1
  99. #define APLL_I2S9_MCK_SEL_MASK_SFT (0x1 << 25)
  100. /* CLK_AUDDIV_2 */
  101. #define APLL12_CK_DIV0_SFT 0
  102. #define APLL12_CK_DIV0_MASK 0xff
  103. #define APLL12_CK_DIV0_MASK_SFT (0xff << 0)
  104. #define APLL12_CK_DIV1_SFT 8
  105. #define APLL12_CK_DIV1_MASK 0xff
  106. #define APLL12_CK_DIV1_MASK_SFT (0xff << 8)
  107. #define APLL12_CK_DIV2_SFT 16
  108. #define APLL12_CK_DIV2_MASK 0xff
  109. #define APLL12_CK_DIV2_MASK_SFT (0xff << 16)
  110. #define APLL12_CK_DIV3_SFT 24
  111. #define APLL12_CK_DIV3_MASK 0xff
  112. #define APLL12_CK_DIV3_MASK_SFT (0xff << 24)
  113. /* CLK_AUDDIV_3 */
  114. #define APLL12_CK_DIV4_SFT 0
  115. #define APLL12_CK_DIV4_MASK 0xff
  116. #define APLL12_CK_DIV4_MASK_SFT (0xff << 0)
  117. #define APLL12_CK_DIVB_SFT 8
  118. #define APLL12_CK_DIVB_MASK 0xff
  119. #define APLL12_CK_DIVB_MASK_SFT (0xff << 8)
  120. #define APLL12_CK_DIV5_SFT 16
  121. #define APLL12_CK_DIV5_MASK 0xff
  122. #define APLL12_CK_DIV5_MASK_SFT (0xff << 16)
  123. #define APLL12_CK_DIV6_SFT 24
  124. #define APLL12_CK_DIV6_MASK 0xff
  125. #define APLL12_CK_DIV6_MASK_SFT (0xff << 24)
  126. /* CLK_AUDDIV_4 */
  127. #define APLL12_CK_DIV7_SFT 0
  128. #define APLL12_CK_DIV7_MASK 0xff
  129. #define APLL12_CK_DIV7_MASK_SFT (0xff << 0)
  130. #define APLL12_CK_DIV8_SFT 8
  131. #define APLL12_CK_DIV8_MASK 0xff
  132. #define APLL12_CK_DIV8_MASK_SFT (0xff << 0)
  133. #define APLL12_CK_DIV9_SFT 16
  134. #define APLL12_CK_DIV9_MASK 0xff
  135. #define APLL12_CK_DIV9_MASK_SFT (0xff << 0)
  136. /* AUD_TOP_CFG */
  137. #define AUD_TOP_CFG_SFT 0
  138. #define AUD_TOP_CFG_MASK 0xffffffff
  139. #define AUD_TOP_CFG_MASK_SFT (0xffffffff << 0)
  140. /* AUD_TOP_MON */
  141. #define AUD_TOP_MON_SFT 0
  142. #define AUD_TOP_MON_MASK 0xffffffff
  143. #define AUD_TOP_MON_MASK_SFT (0xffffffff << 0)
  144. /* CLK_AUDDIV_3 */
  145. #define APLL12_CK_DIV5_MSB_SFT 0
  146. #define APLL12_CK_DIV5_MSB_MASK 0xf
  147. #define APLL12_CK_DIV5_MSB_MASK_SFT (0xf << 0)
  148. #define RESERVED0_SFT 4
  149. #define RESERVED0_MASK 0xfffffff
  150. #define RESERVED0_MASK_SFT (0xfffffff << 4)
  151. /* APLL */
  152. #define APLL1_W_NAME "APLL1"
  153. #define APLL2_W_NAME "APLL2"
  154. enum {
  155. MT8192_APLL1 = 0,
  156. MT8192_APLL2,
  157. };
  158. enum {
  159. CLK_AFE = 0,
  160. CLK_TML,
  161. CLK_APLL22M,
  162. CLK_APLL24M,
  163. CLK_APLL1_TUNER,
  164. CLK_APLL2_TUNER,
  165. CLK_NLE,
  166. CLK_INFRA_SYS_AUDIO,
  167. CLK_INFRA_AUDIO_26M,
  168. CLK_MUX_AUDIO,
  169. CLK_MUX_AUDIOINTBUS,
  170. CLK_TOP_MAINPLL_D4_D4,
  171. /* apll related mux */
  172. CLK_TOP_MUX_AUD_1,
  173. CLK_TOP_APLL1_CK,
  174. CLK_TOP_MUX_AUD_2,
  175. CLK_TOP_APLL2_CK,
  176. CLK_TOP_MUX_AUD_ENG1,
  177. CLK_TOP_APLL1_D4,
  178. CLK_TOP_MUX_AUD_ENG2,
  179. CLK_TOP_APLL2_D4,
  180. CLK_TOP_MUX_AUDIO_H,
  181. CLK_TOP_I2S0_M_SEL,
  182. CLK_TOP_I2S1_M_SEL,
  183. CLK_TOP_I2S2_M_SEL,
  184. CLK_TOP_I2S3_M_SEL,
  185. CLK_TOP_I2S4_M_SEL,
  186. CLK_TOP_I2S5_M_SEL,
  187. CLK_TOP_I2S6_M_SEL,
  188. CLK_TOP_I2S7_M_SEL,
  189. CLK_TOP_I2S8_M_SEL,
  190. CLK_TOP_I2S9_M_SEL,
  191. CLK_TOP_APLL12_DIV0,
  192. CLK_TOP_APLL12_DIV1,
  193. CLK_TOP_APLL12_DIV2,
  194. CLK_TOP_APLL12_DIV3,
  195. CLK_TOP_APLL12_DIV4,
  196. CLK_TOP_APLL12_DIVB,
  197. CLK_TOP_APLL12_DIV5,
  198. CLK_TOP_APLL12_DIV6,
  199. CLK_TOP_APLL12_DIV7,
  200. CLK_TOP_APLL12_DIV8,
  201. CLK_TOP_APLL12_DIV9,
  202. CLK_CLK26M,
  203. CLK_NUM
  204. };
  205. struct mtk_base_afe;
  206. int mt8192_init_clock(struct mtk_base_afe *afe);
  207. int mt8192_afe_enable_clock(struct mtk_base_afe *afe);
  208. void mt8192_afe_disable_clock(struct mtk_base_afe *afe);
  209. int mt8192_apll1_enable(struct mtk_base_afe *afe);
  210. void mt8192_apll1_disable(struct mtk_base_afe *afe);
  211. int mt8192_apll2_enable(struct mtk_base_afe *afe);
  212. void mt8192_apll2_disable(struct mtk_base_afe *afe);
  213. int mt8192_get_apll_rate(struct mtk_base_afe *afe, int apll);
  214. int mt8192_get_apll_by_rate(struct mtk_base_afe *afe, int rate);
  215. int mt8192_get_apll_by_name(struct mtk_base_afe *afe, const char *name);
  216. /* these will be replaced by using CCF */
  217. int mt8192_mck_enable(struct mtk_base_afe *afe, int mck_id, int rate);
  218. void mt8192_mck_disable(struct mtk_base_afe *afe, int mck_id);
  219. int mt8192_set_audio_int_bus_parent(struct mtk_base_afe *afe,
  220. int clk_id);
  221. #endif