mt8193_ckgen.h 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. #ifndef MT8193_CKGEN_H
  2. #define MT8193_CKGEN_H
  3. #define MT8193_CKGEN_VFY 1
  4. #define MT8193_DISABLE_DCXO 0
  5. #define CKGEN_IOW(num, dtype) _IOW('H', num, dtype)
  6. #define CKGEN_IOR(num, dtype) _IOR('H', num, dtype)
  7. #define CKGEN_IOWR(num, dtype) _IOWR('H', num, dtype)
  8. #define CKGEN_IO(num) _IO('H', num)
  9. #define MTK_MT8193_CKGEN_1 CKGEN_IO(1)
  10. #define MTK_MT8193_CKGEN_2 CKGEN_IO(2)
  11. #define MTK_MT8193_CKGEN_LS_TEST CKGEN_IO(3) /* level shift test */
  12. #define MTK_MT8193_CKGEN_SPM_CTRL CKGEN_IO(4) /* spm ctrl test */
  13. #define MTK_MT8193_CKGEN_FREQ_METER CKGEN_IO(5) /* FREQ METER TEST*/
  14. #define MTK_MT8193_GPIO_CTRL CKGEN_IO(6) /* GPIO CTRL*/
  15. #define MTK_MT8193_EARLY_SUSPEND CKGEN_IO(7) /* early suspend*/
  16. #define MTK_MT8193_LATE_RESUME CKGEN_IO(8) /* late resume*/
  17. #define REG_RW_FMETER 0x04c /* freq meter register */
  18. #define CKGEN_FMETER_RESET 1
  19. #define CKGEN_FMETER_START (1U<<1)
  20. #define CKGEN_FMETER_DONE (1U<<2)
  21. /* HDMI POWER OFF/ON CONTROL*/
  22. #define REG_RW_HDMI_PWR_RST_B 0x100
  23. #define CKGEN_HDMI_PWR_RST_EN 1
  24. #define REG_RW_HDMI_PWR_CTRL 0x104
  25. #define CKGEN_HDMI_PWR_ISO_EN 1
  26. #define CKGEN_HDMI_PWR_PWR_ON (1U<<1)
  27. #define CKGEN_HDMI_PWR_CLK_OFF (1U<<2)
  28. /* LVDS POWER OFF/ON CONTROL*/
  29. #define REG_RW_LVDS_PWR_RST_B 0x108
  30. #define CKGEN_LVDS_PWR_RST_EN 1
  31. #define REG_RW_LVDS_PWR_CTRL 0x10c
  32. #define CKGEN_LVDS_PWR_ISO_EN 1
  33. #define CKGEN_LVDS_PWR_PWR_ON (1U<<1)
  34. #define CKGEN_LVDS_PWR_CLK_OFF (1U<<2)
  35. /* NFI POWER OFF/ON CONTROL*/
  36. #define REG_RW_NFI_PWR_RST_B 0x110
  37. #define CKGEN_NFI_PWR_RST_EN 1
  38. #define REG_RW_NFI_PWR_CTRL 0x114
  39. #define CKGEN_NFI_PWR_ISO_EN 1
  40. #define CKGEN_NFI_PWR_PWR_ON (1U<<1)
  41. #define CKGEN_NFI_PWR_CLK_OFF (1U<<2)
  42. #define REG_RO_PWR_ACT 0x118
  43. #define CKGEN_NFI_PWR_ON_ACT 1
  44. #define CKGEN_LVDS_PWR_ON_ACT (1U<<1)
  45. #define CKGEN_HDMI_PWR_ON_ACT (1U<<2)
  46. #define REG_RW_LS_CTRL 0x012c /* level shift control */
  47. #define LS_CTRL_GROUP0_SHIFT_HIGH 1 /* 0: 3.3 -> 1.8; 1: 1.8->3.3 */
  48. #define LS_CTRL_GROUP1_SHIFT_HIGH (1U<<1) /* 0: 3.3 -> 1.8; 1: 1.8->3.3 */
  49. #define LS_CTRL_GROUP2_SHIFT_HIGH (1U<<2) /* 0: 3.3 -> 1.8; 1: 1.8->3.3 */
  50. #define LS_CTRL_GROUP3_SHIFT_HIGH (1U<<3) /* 0: 3.3 -> 1.8; 1: 1.8->3.3 */
  51. #define LS_CTRL_GROUP4_SHIFT_HIGH (1U<<4) /* 0: 3.3 -> 1.8; 1: 1.8->3.3 */
  52. #define LS_CTRL_GROUP5_SHIFT_HIGH (1U<<5) /* 0: 3.3 -> 1.8; 1: 1.8->3.3 */
  53. #define LS_CTRL_GROUP6_SHIFT_HIGH (1U<<6) /* 0: 3.3 -> 1.8; 1: 1.8->3.3 */
  54. #define LS_CTRL_SHIFT_HIGH_EN (1U<<30) /* 1.8>3.3 enable */
  55. #define LS_CTRL_SHIFT_LOW_EN (1U<<31) /* 3.3>1.8 enable */
  56. #define REG_RW_LVDS_ANACFG4 0x320
  57. #define LVDS_ANACFG4_VPlLL_PD (1U<<10)
  58. #define REG_RW_HDMITX_ANACFG3 0x334
  59. #define HDMITX_ANACFG3_BIT20 (1U<<20)
  60. #define HDMITX_ANACFG3_BIT21 (1U<<21)
  61. #define REG_RW_PLLGP_ANACFG0 0x34c
  62. #define PLLGP_ANACFG0_PLL1_RESERVED 1
  63. #define PLLGP_ANACFG0_PLL1_NFIPLL_EN (1U<<1)
  64. #define PLLGP_ANACFG0_PLL1_EN (1U<<31)
  65. #define REG_RW_PLLGP_ANACFG2 0x354
  66. #define PLLGP_ANACFG2_PLLGP_BIAS_EN (1U<<20)
  67. #define REG_RW_DCXO_ANACFG9 0x388
  68. #define DCXO_ANACFG9_BUS_CK_SOURCE_SEL_SHIFT 9
  69. #define DCXO_ANACFG9_BUS_CK_SOURCE_SEL_MASK 0x7
  70. #define DCX0_ANACFG9_BUS_CK_CTRL_SEL (1U<<7)
  71. #define DCX0_ANACFG9_BUS_CK_AUTO_SWITCH_EN (1U<<5)
  72. /* DCXO */
  73. #define REG_RW_DCXO_ANACFG2 0x308
  74. #define DCXO_ANACFG2_LDO4_EN (1U<<2)
  75. #define DCXO_ANACFG2_LDO4_MAN_EN (1U<<3)
  76. #define DCXO_ANACFG2_LDO3_EN (1U<<4)
  77. #define DCXO_ANACFG2_LDO3_MAN_EN (1U<<5)
  78. #define DCXO_ANACFG2_LDO2_EN (1U<<6)
  79. #define DCXO_ANACFG2_LDO2_MAN_EN (1U<<7)
  80. #define DCXO_ANACFG2_LDO1_EN (1U<<8)
  81. #define DCXO_ANACFG2_LDO1_MAN_EN (1U<<9)
  82. #define DCXO_ANACFG2_PO_MAN (1U<<29)
  83. #define REG_RW_DCXO_ANACFG4 0x370
  84. #define DCXO_ANACFG4_BT_MAN (1U<<18)
  85. #define DCXO_ANACFG4_EXT2_MAN (1U<<19)
  86. #define DCXO_ANACFG4_EXT1_MAN (1U<<20)
  87. #if MT8193_CKGEN_VFY
  88. /* level shift test parameter */
  89. struct mt8193_ckgen_ls_info_t {
  90. int i4GroupNum;
  91. int i4TurnLow;
  92. };
  93. /* freq meter parameter */
  94. struct mt8193_ckgen_freq_meter_t {
  95. int u4Func;
  96. };
  97. /* GPIO CTRL parameter */
  98. struct mt8193_gpio_ctrl_t {
  99. int u4GpioNum;
  100. int u4Mode; /* 0 is input. 1 is output */
  101. int u4Value; /* 1 is high. 0 is low. only valid in output mode */
  102. };
  103. #if 0
  104. /* config gpio */
  105. int mt8193_ckgen_gpio_config(int i4GpioNum, int i4Output, int i4High);
  106. /* print gpio input value */
  107. int mt8193_ckgen_gpio_input(int i4GpioNum);
  108. /* test pad level shift */
  109. int mt8193_ckgen_config_pad_level_shift(int i4GroupNum, int i4TurnLow);
  110. /* read and print chip id */
  111. void mt8193_ckgen_chipid(void);
  112. /* measure clock with freq meter */
  113. u32 mt8193_ckgen_measure_clk(u32 u4Func);
  114. u32 mt8193_ckgen_reg_rw_test(u16 addr);
  115. #endif
  116. extern int multibridge_exit;
  117. void mt8193_lvds_sys_spm_control(bool power_on);
  118. void mt8193_hdmi_sys_spm_control(bool power_on);
  119. void mt8193_nfi_sys_spm_control(bool power_on);
  120. void mt8193_lvds_ana_pwr_control(bool power_on);
  121. void mt8193_pllgp_ana_pwr_control(bool power_on);
  122. void mt8193_bus_clk_switch(bool bus_26m_to_32k);
  123. void mt8193_hdmi_ana_pwr_control(bool power_on);
  124. void mt8193_nfi_ana_pwr_control(bool power_on);
  125. int mt8193_ckgen_config_pad_level_shift(int i4GroupNum, int i4TurnLow);
  126. void mt8193_spm_control_test(int u4Func);
  127. u32 mt8193_ckgen_measure_clk(u32 u4Func);
  128. void mt8193_ckgen_early_suspend(void);
  129. void mt8193_ckgen_late_resume(void);
  130. #endif
  131. #endif /* MT8193_CKGEN_H */