mt_afe_debug.c 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586
  1. /* Copyright (c) 2011-2013, The Linux Foundation. All rights reserved.
  2. *
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License version 2 and
  5. * only version 2 as published by the Free Software Foundation.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. */
  12. #include "mt_afe_debug.h"
  13. #include "mt_afe_reg.h"
  14. #include "mt_afe_clk.h"
  15. #include <linux/debugfs.h>
  16. #include <linux/uaccess.h>
  17. #define DEBUG_FS_BUFFER_SIZE 4096
  18. struct mt_soc_audio_debug_fs {
  19. struct dentry *audio_dentry;
  20. char *fs_name;
  21. const struct file_operations *fops;
  22. };
  23. static ssize_t mt_soc_debug_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
  24. {
  25. const int size = DEBUG_FS_BUFFER_SIZE;
  26. char buffer[size];
  27. int n = 0;
  28. mt_afe_main_clk_on();
  29. n = scnprintf(buffer + n, size - n, "AUDIO_TOP_CON0 = 0x%x\n",
  30. mt_afe_get_reg(AUDIO_TOP_CON0));
  31. n += scnprintf(buffer + n, size - n, "AUDIO_TOP_CON1 = 0x%x\n",
  32. mt_afe_get_reg(AUDIO_TOP_CON1));
  33. n += scnprintf(buffer + n, size - n, "AUDIO_TOP_CON2 = 0x%x\n",
  34. mt_afe_get_reg(AUDIO_TOP_CON2));
  35. n += scnprintf(buffer + n, size - n, "AUDIO_TOP_CON3 = 0x%x\n",
  36. mt_afe_get_reg(AUDIO_TOP_CON3));
  37. n += scnprintf(buffer + n, size - n, "AFE_TOP_CON0 = 0x%x\n", mt_afe_get_reg(AFE_TOP_CON0));
  38. n += scnprintf(buffer + n, size - n, "AFE_DAC_CON0 = 0x%x\n", mt_afe_get_reg(AFE_DAC_CON0));
  39. n += scnprintf(buffer + n, size - n, "AFE_DAC_CON1 = 0x%x\n", mt_afe_get_reg(AFE_DAC_CON1));
  40. n += scnprintf(buffer + n, size - n, "AFE_I2S_CON = 0x%x\n", mt_afe_get_reg(AFE_I2S_CON));
  41. n += scnprintf(buffer + n, size - n, "AFE_I2S_CON1 = 0x%x\n", mt_afe_get_reg(AFE_I2S_CON1));
  42. n += scnprintf(buffer + n, size - n, "AFE_I2S_CON2 = 0x%x\n", mt_afe_get_reg(AFE_I2S_CON2));
  43. n += scnprintf(buffer + n, size - n, "AFE_I2S_CON3 = 0x%x\n", mt_afe_get_reg(AFE_I2S_CON3));
  44. n += scnprintf(buffer + n, size - n, "AFE_CONN0 = 0x%x\n", mt_afe_get_reg(AFE_CONN0));
  45. n += scnprintf(buffer + n, size - n, "AFE_CONN1 = 0x%x\n", mt_afe_get_reg(AFE_CONN1));
  46. n += scnprintf(buffer + n, size - n, "AFE_CONN2 = 0x%x\n", mt_afe_get_reg(AFE_CONN2));
  47. n += scnprintf(buffer + n, size - n, "AFE_CONN3 = 0x%x\n", mt_afe_get_reg(AFE_CONN3));
  48. n += scnprintf(buffer + n, size - n, "AFE_CONN4 = 0x%x\n", mt_afe_get_reg(AFE_CONN4));
  49. n += scnprintf(buffer + n, size - n, "AFE_CONN5 = 0x%x\n", mt_afe_get_reg(AFE_CONN5));
  50. n += scnprintf(buffer + n, size - n, "AFE_CONN6 = 0x%x\n", mt_afe_get_reg(AFE_CONN6));
  51. n += scnprintf(buffer + n, size - n, "AFE_CONN7 = 0x%x\n", mt_afe_get_reg(AFE_CONN7));
  52. n += scnprintf(buffer + n, size - n, "AFE_CONN8 = 0x%x\n", mt_afe_get_reg(AFE_CONN8));
  53. n += scnprintf(buffer + n, size - n, "AFE_CONN9 = 0x%x\n", mt_afe_get_reg(AFE_CONN9));
  54. n += scnprintf(buffer + n, size - n, "AFE_CONN_24BIT = 0x%x\n",
  55. mt_afe_get_reg(AFE_CONN_24BIT));
  56. n += scnprintf(buffer + n, size - n, "AFE_DAIBT_CON0 = 0x%x\n",
  57. mt_afe_get_reg(AFE_DAIBT_CON0));
  58. n += scnprintf(buffer + n, size - n, "AFE_MRGIF_CON = 0x%x\n",
  59. mt_afe_get_reg(AFE_MRGIF_CON));
  60. n += scnprintf(buffer + n, size - n, "AFE_MRGIF_MON0 = 0x%x\n",
  61. mt_afe_get_reg(AFE_MRGIF_MON0));
  62. n += scnprintf(buffer + n, size - n, "AFE_MRGIF_MON1 = 0x%x\n",
  63. mt_afe_get_reg(AFE_MRGIF_MON1));
  64. n += scnprintf(buffer + n, size - n, "AFE_MRGIF_MON2 = 0x%x\n",
  65. mt_afe_get_reg(AFE_MRGIF_MON2));
  66. n += scnprintf(buffer + n, size - n, "AFE_DL1_BASE = 0x%x\n", mt_afe_get_reg(AFE_DL1_BASE));
  67. n += scnprintf(buffer + n, size - n, "AFE_DL1_CUR = 0x%x\n", mt_afe_get_reg(AFE_DL1_CUR));
  68. n += scnprintf(buffer + n, size - n, "AFE_DL1_END = 0x%x\n", mt_afe_get_reg(AFE_DL1_END));
  69. n += scnprintf(buffer + n, size - n, "AFE_DL2_BASE = 0x%x\n", mt_afe_get_reg(AFE_DL2_BASE));
  70. n += scnprintf(buffer + n, size - n, "AFE_DL2_CUR = 0x%x\n", mt_afe_get_reg(AFE_DL2_CUR));
  71. n += scnprintf(buffer + n, size - n, "AFE_DL2_END = 0x%x\n", mt_afe_get_reg(AFE_DL2_END));
  72. n += scnprintf(buffer + n, size - n, "AFE_AWB_BASE = 0x%x\n", mt_afe_get_reg(AFE_AWB_BASE));
  73. n += scnprintf(buffer + n, size - n, "AFE_AWB_END = 0x%x\n", mt_afe_get_reg(AFE_AWB_END));
  74. n += scnprintf(buffer + n, size - n, "AFE_AWB_CUR = 0x%x\n", mt_afe_get_reg(AFE_AWB_CUR));
  75. n += scnprintf(buffer + n, size - n, "AFE_VUL_BASE = 0x%x\n", mt_afe_get_reg(AFE_VUL_BASE));
  76. n += scnprintf(buffer + n, size - n, "AFE_VUL_END = 0x%x\n", mt_afe_get_reg(AFE_VUL_END));
  77. n += scnprintf(buffer + n, size - n, "AFE_VUL_CUR = 0x%x\n", mt_afe_get_reg(AFE_VUL_CUR));
  78. n += scnprintf(buffer + n, size - n, "AFE_DAI_BASE = 0x%x\n", mt_afe_get_reg(AFE_DAI_BASE));
  79. n += scnprintf(buffer + n, size - n, "AFE_DAI_END = 0x%x\n", mt_afe_get_reg(AFE_DAI_END));
  80. n += scnprintf(buffer + n, size - n, "AFE_DAI_CUR = 0x%x\n", mt_afe_get_reg(AFE_DAI_CUR));
  81. n += scnprintf(buffer + n, size - n, "AFE_DL1_D2_BASE = 0x%x\n",
  82. mt_afe_get_reg(AFE_DL1_D2_BASE));
  83. n += scnprintf(buffer + n, size - n, "AFE_DL1_D2_END = 0x%x\n",
  84. mt_afe_get_reg(AFE_DL1_D2_END));
  85. n += scnprintf(buffer + n, size - n, "AFE_DL1_D2_CUR = 0x%x\n",
  86. mt_afe_get_reg(AFE_DL1_D2_CUR));
  87. n += scnprintf(buffer + n, size - n, "AFE_VUL_D2_BASE = 0x%x\n",
  88. mt_afe_get_reg(AFE_VUL_D2_BASE));
  89. n += scnprintf(buffer + n, size - n, "AFE_VUL_D2_END = 0x%x\n",
  90. mt_afe_get_reg(AFE_VUL_D2_END));
  91. n += scnprintf(buffer + n, size - n, "AFE_VUL_D2_CUR = 0x%x\n",
  92. mt_afe_get_reg(AFE_VUL_D2_CUR));
  93. n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MSB = 0x%x\n",
  94. mt_afe_get_reg(AFE_MEMIF_MSB));
  95. n += scnprintf(buffer + n, size - n, "MEMIF_MON0 = 0x%x\n",
  96. mt_afe_get_reg(AFE_MEMIF_MON0));
  97. n += scnprintf(buffer + n, size - n, "MEMIF_MON1 = 0x%x\n",
  98. mt_afe_get_reg(AFE_MEMIF_MON1));
  99. n += scnprintf(buffer + n, size - n, "MEMIF_MON2 = 0x%x\n",
  100. mt_afe_get_reg(AFE_MEMIF_MON2));
  101. n += scnprintf(buffer + n, size - n, "MEMIF_MON4 = 0x%x\n",
  102. mt_afe_get_reg(AFE_MEMIF_MON4));
  103. n += scnprintf(buffer + n, size - n, "AFE_ADDA_DL_SRC2_CON0 = 0x%x\n",
  104. mt_afe_get_reg(AFE_ADDA_DL_SRC2_CON0));
  105. n += scnprintf(buffer + n, size - n, "AFE_ADDA_DL_SRC2_CON1 = 0x%x\n",
  106. mt_afe_get_reg(AFE_ADDA_DL_SRC2_CON1));
  107. n += scnprintf(buffer + n, size - n, "AFE_ADDA_UL_SRC_CON0 = 0x%x\n",
  108. mt_afe_get_reg(AFE_ADDA_UL_SRC_CON0));
  109. n += scnprintf(buffer + n, size - n, "AFE_ADDA_UL_SRC_CON1 = 0x%x\n",
  110. mt_afe_get_reg(AFE_ADDA_UL_SRC_CON1));
  111. n += scnprintf(buffer + n, size - n, "AFE_ADDA_TOP_CON0 = 0x%x\n",
  112. mt_afe_get_reg(AFE_ADDA_TOP_CON0));
  113. n += scnprintf(buffer + n, size - n, "AFE_ADDA_UL_DL_CON0 = 0x%x\n",
  114. mt_afe_get_reg(AFE_ADDA_UL_DL_CON0));
  115. n += scnprintf(buffer + n, size - n, "AFE_ADDA_SRC_DEBUG = 0x%x\n",
  116. mt_afe_get_reg(AFE_ADDA_SRC_DEBUG));
  117. n += scnprintf(buffer + n, size - n, "AFE_ADDA_SRC_DEBUG_MON0 = 0x%x\n",
  118. mt_afe_get_reg(AFE_ADDA_SRC_DEBUG_MON0));
  119. n += scnprintf(buffer + n, size - n, "AFE_ADDA_SRC_DEBUG_MON1 = 0x%x\n",
  120. mt_afe_get_reg(AFE_ADDA_SRC_DEBUG_MON1));
  121. n += scnprintf(buffer + n, size - n, "AFE_ADDA_NEWIF_CFG0 = 0x%x\n",
  122. mt_afe_get_reg(AFE_ADDA_NEWIF_CFG0));
  123. n += scnprintf(buffer + n, size - n, "AFE_ADDA_NEWIF_CFG1 = 0x%x\n",
  124. mt_afe_get_reg(AFE_ADDA_NEWIF_CFG1));
  125. n += scnprintf(buffer + n, size - n, "AFE_ADDA2_TOP_CON0 = 0x%x\n",
  126. mt_afe_get_reg(AFE_ADDA2_TOP_CON0));
  127. n += scnprintf(buffer + n, size - n, "AFE_ADDA_PREDIS_CON0 = 0x%x\n",
  128. mt_afe_get_reg(AFE_ADDA_PREDIS_CON0));
  129. n += scnprintf(buffer + n, size - n, "AFE_ADDA_PREDIS_CON1 = 0x%x\n",
  130. mt_afe_get_reg(AFE_ADDA_PREDIS_CON1));
  131. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CON = 0x%x\n",
  132. mt_afe_get_reg(AFE_IRQ_MCU_CON));
  133. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_STATUS = 0x%x\n",
  134. mt_afe_get_reg(AFE_IRQ_MCU_STATUS));
  135. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CLR = 0x%x\n",
  136. mt_afe_get_reg(AFE_IRQ_MCU_CLR));
  137. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CNT1 = 0x%x\n",
  138. mt_afe_get_reg(AFE_IRQ_MCU_CNT1));
  139. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CNT2 = 0x%x\n",
  140. mt_afe_get_reg(AFE_IRQ_MCU_CNT2));
  141. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_EN = 0x%x\n",
  142. mt_afe_get_reg(AFE_IRQ_MCU_EN));
  143. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_MON2 = 0x%x\n",
  144. mt_afe_get_reg(AFE_IRQ_MCU_MON2));
  145. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CNT5 = 0x%x\n",
  146. mt_afe_get_reg(AFE_IRQ_MCU_CNT5));
  147. n += scnprintf(buffer + n, size - n, "AFE_IRQ1_MCU_CNT_MON = 0x%x\n",
  148. mt_afe_get_reg(AFE_IRQ1_MCU_CNT_MON));
  149. n += scnprintf(buffer + n, size - n, "AFE_IRQ2_MCU_CNT_MON = 0x%x\n",
  150. mt_afe_get_reg(AFE_IRQ2_MCU_CNT_MON));
  151. n += scnprintf(buffer + n, size - n, "AFE_IRQ1_MCU_EN_CNT_MON = 0x%x\n",
  152. mt_afe_get_reg(AFE_IRQ1_MCU_EN_CNT_MON));
  153. n += scnprintf(buffer + n, size - n, "AFE_IRQ5_MCU_CNT_MON = 0x%x\n",
  154. mt_afe_get_reg(AFE_IRQ5_MCU_CNT_MON));
  155. n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MAXLEN = 0x%x\n",
  156. mt_afe_get_reg(AFE_MEMIF_MAXLEN));
  157. n += scnprintf(buffer + n, size - n, "AFE_MEMIF_PBUF_SIZE = 0x%x\n",
  158. mt_afe_get_reg(AFE_MEMIF_PBUF_SIZE));
  159. n += scnprintf(buffer + n, size - n, "SIDETONE_DEBUG = 0x%x\n",
  160. mt_afe_get_reg(AFE_SIDETONE_DEBUG));
  161. n += scnprintf(buffer + n, size - n, "SIDETONE_MON = 0x%x\n",
  162. mt_afe_get_reg(AFE_SIDETONE_MON));
  163. n += scnprintf(buffer + n, size - n, "SIDETONE_CON0 = 0x%x\n",
  164. mt_afe_get_reg(AFE_SIDETONE_CON0));
  165. n += scnprintf(buffer + n, size - n, "SIDETONE_COEFF = 0x%x\n",
  166. mt_afe_get_reg(AFE_SIDETONE_COEFF));
  167. n += scnprintf(buffer + n, size - n, "SIDETONE_CON1 = 0x%x\n",
  168. mt_afe_get_reg(AFE_SIDETONE_CON1));
  169. n += scnprintf(buffer + n, size - n, "SIDETONE_GAIN = 0x%x\n",
  170. mt_afe_get_reg(AFE_SIDETONE_GAIN));
  171. n += scnprintf(buffer + n, size - n, "SGEN_CON0 = 0x%x\n", mt_afe_get_reg(AFE_SGEN_CON0));
  172. n += scnprintf(buffer + n, size - n, "SGEN_CON1 = 0x%x\n", mt_afe_get_reg(AFE_SGEN_CON1));
  173. n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CON0 = 0x%x\n",
  174. mt_afe_get_reg(AFE_GAIN1_CON0));
  175. n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CON1 = 0x%x\n",
  176. mt_afe_get_reg(AFE_GAIN1_CON1));
  177. n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CON2 = 0x%x\n",
  178. mt_afe_get_reg(AFE_GAIN1_CON2));
  179. n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CON3 = 0x%x\n",
  180. mt_afe_get_reg(AFE_GAIN1_CON3));
  181. n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CONN = 0x%x\n",
  182. mt_afe_get_reg(AFE_GAIN1_CONN));
  183. n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CUR = 0x%x\n",
  184. mt_afe_get_reg(AFE_GAIN1_CUR));
  185. n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CON0 = 0x%x\n",
  186. mt_afe_get_reg(AFE_GAIN2_CON0));
  187. n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CON1 = 0x%x\n",
  188. mt_afe_get_reg(AFE_GAIN2_CON1));
  189. n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CON2 = 0x%x\n",
  190. mt_afe_get_reg(AFE_GAIN2_CON2));
  191. n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CON3 = 0x%x\n",
  192. mt_afe_get_reg(AFE_GAIN2_CON3));
  193. n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CONN = 0x%x\n",
  194. mt_afe_get_reg(AFE_GAIN2_CONN));
  195. n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CUR = 0x%x\n",
  196. mt_afe_get_reg(AFE_GAIN2_CUR));
  197. n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CONN2 = 0x%x\n",
  198. mt_afe_get_reg(AFE_GAIN2_CONN2));
  199. n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CONN3 = 0x%x\n",
  200. mt_afe_get_reg(AFE_GAIN2_CONN3));
  201. n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CONN2 = 0x%x\n",
  202. mt_afe_get_reg(AFE_GAIN1_CONN2));
  203. n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CONN3 = 0x%x\n",
  204. mt_afe_get_reg(AFE_GAIN1_CONN3));
  205. n += scnprintf(buffer + n, size - n, "DCM_CFG = 0x%x\n",
  206. mt_afe_topck_get_reg(AUDIO_DCM_CFG));
  207. n += scnprintf(buffer + n, size - n, "CLK_CFG_4 = 0x%x\n",
  208. mt_afe_topck_get_reg(AUDIO_CLK_CFG_4));
  209. n += scnprintf(buffer + n, size - n, "SCP_AUDIO_PWR_CON = 0x%x\n",
  210. mt_afe_spm_get_reg(SCP_AUDIO_PWR_CON));
  211. #if 0
  212. n += scnprintf(buffer + n, size - n, "FPGA_CFG2 = 0x%x\n", mt_afe_get_reg(FPGA_CFG2));
  213. n += scnprintf(buffer + n, size - n, "FPGA_CFG3 = 0x%x\n", mt_afe_get_reg(FPGA_CFG3));
  214. n += scnprintf(buffer + n, size - n, "FPGA_CFG0 = 0x%x\n", mt_afe_get_reg(FPGA_CFG0));
  215. n += scnprintf(buffer + n, size - n, "FPGA_CFG1 = 0x%x\n", mt_afe_get_reg(FPGA_CFG1));
  216. n += scnprintf(buffer + n, size - n, "FPGA_STC = 0x%x\n", mt_afe_get_reg(FPGA_STC));
  217. n += scnprintf(buffer + n, size - n, "AFE_MOD_DAI_BASE = 0x%x\n",
  218. mt_afe_get_reg(AFE_MOD_DAI_BASE));
  219. n += scnprintf(buffer + n, size - n, "AFE_MOD_DAI_END = 0x%x\n",
  220. mt_afe_get_reg(AFE_MOD_DAI_END));
  221. n += scnprintf(buffer + n, size - n, "AFE_MOD_DAI_CUR = 0x%x\n",
  222. mt_afe_get_reg(AFE_MOD_DAI_CUR));
  223. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON0 = 0x%x\n",
  224. mt_afe_get_reg(AFE_ASRC_CON0));
  225. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON1 = 0x%x\n",
  226. mt_afe_get_reg(AFE_ASRC_CON1));
  227. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON2 = 0x%x\n",
  228. mt_afe_get_reg(AFE_ASRC_CON2));
  229. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON3 = 0x%x\n",
  230. mt_afe_get_reg(AFE_ASRC_CON3));
  231. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON4 = 0x%x\n",
  232. mt_afe_get_reg(AFE_ASRC_CON4));
  233. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON5 = 0x%x\n",
  234. mt_afe_get_reg(AFE_ASRC_CON5));
  235. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON6 = 0x%x\n",
  236. mt_afe_get_reg(AFE_ASRC_CON6));
  237. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON7 = 0x%x\n",
  238. mt_afe_get_reg(AFE_ASRC_CON7));
  239. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON8 = 0x%x\n",
  240. mt_afe_get_reg(AFE_ASRC_CON8));
  241. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON9 = 0x%x\n",
  242. mt_afe_get_reg(AFE_ASRC_CON9));
  243. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON10 = 0x%x\n",
  244. mt_afe_get_reg(AFE_ASRC_CON10));
  245. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON11 = 0x%x\n",
  246. mt_afe_get_reg(AFE_ASRC_CON11));
  247. n += scnprintf(buffer + n, size - n, "PCM_INTF_CON1 = 0x%x\n",
  248. mt_afe_get_reg(PCM_INTF_CON1));
  249. n += scnprintf(buffer + n, size - n, "PCM_INTF_CON2 = 0x%x\n",
  250. mt_afe_get_reg(PCM_INTF_CON2));
  251. n += scnprintf(buffer + n, size - n, "PCM2_INTF_CON = 0x%x\n",
  252. mt_afe_get_reg(PCM2_INTF_CON));
  253. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON13 = 0x%x\n",
  254. mt_afe_get_reg(AFE_ASRC_CON13));
  255. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON14 = 0x%x\n",
  256. mt_afe_get_reg(AFE_ASRC_CON14));
  257. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON15 = 0x%x\n",
  258. mt_afe_get_reg(AFE_ASRC_CON15));
  259. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON16 = 0x%x\n",
  260. mt_afe_get_reg(AFE_ASRC_CON16));
  261. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON17 = 0x%x\n",
  262. mt_afe_get_reg(AFE_ASRC_CON17));
  263. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON18 = 0x%x\n",
  264. mt_afe_get_reg(AFE_ASRC_CON18));
  265. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON19 = 0x%x\n",
  266. mt_afe_get_reg(AFE_ASRC_CON19));
  267. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON20 = 0x%x\n",
  268. mt_afe_get_reg(AFE_ASRC_CON20));
  269. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON21 = 0x%x\n",
  270. mt_afe_get_reg(AFE_ASRC_CON21));
  271. #endif
  272. mt_afe_main_clk_off();
  273. return simple_read_from_buffer(buf, count, pos, buffer, n);
  274. }
  275. static ssize_t mt_soc_debug_write(struct file *file, const char __user *user_buf,
  276. size_t count, loff_t *pos)
  277. {
  278. char buf[64];
  279. size_t buf_size;
  280. char *start = buf;
  281. char *reg_str;
  282. char *value_str;
  283. const char delim[] = " ,";
  284. unsigned long reg, value;
  285. buf_size = min(count, (sizeof(buf) - 1));
  286. if (copy_from_user(buf, user_buf, buf_size))
  287. return -EFAULT;
  288. buf[buf_size] = 0;
  289. reg_str = strsep(&start, delim);
  290. if (!reg_str || !strlen(reg_str))
  291. return -EINVAL;
  292. value_str = strsep(&start, delim);
  293. if (!value_str || !strlen(value_str))
  294. return -EINVAL;
  295. if (kstrtoul(reg_str, 16, &reg))
  296. return -EINVAL;
  297. if (kstrtoul(value_str, 16, &value))
  298. return -EINVAL;
  299. mt_afe_main_clk_on();
  300. mt_afe_set_reg(reg, value, 0xffffffff);
  301. mt_afe_main_clk_off();
  302. return buf_size;
  303. }
  304. static ssize_t mt_soc_hdmi_debug_read(struct file *file, char __user *buf,
  305. size_t count, loff_t *pos)
  306. {
  307. const int size = DEBUG_FS_BUFFER_SIZE;
  308. char buffer[size];
  309. int n = 0;
  310. mt_afe_main_clk_on();
  311. n = scnprintf(buffer + n, size - n, "AUDIO_TOP_CON0 = 0x%x\n",
  312. mt_afe_get_reg(AUDIO_TOP_CON0));
  313. n += scnprintf(buffer + n, size - n, "AUDIO_TOP_CON3 = 0x%x\n",
  314. mt_afe_get_reg(AUDIO_TOP_CON3));
  315. n += scnprintf(buffer + n, size - n, "AFE_DAC_CON0 = 0x%x\n",
  316. mt_afe_get_reg(AFE_DAC_CON0));
  317. n += scnprintf(buffer + n, size - n, "AFE_HDMI_OUT_CON0 = 0x%x\n",
  318. mt_afe_get_reg(AFE_HDMI_OUT_CON0));
  319. n += scnprintf(buffer + n, size - n, "AFE_HDMI_OUT_BASE = 0x%x\n",
  320. mt_afe_get_reg(AFE_HDMI_OUT_BASE));
  321. n += scnprintf(buffer + n, size - n, "AFE_HDMI_OUT_CUR = 0x%x\n",
  322. mt_afe_get_reg(AFE_HDMI_OUT_CUR));
  323. n += scnprintf(buffer + n, size - n, "AFE_HDMI_OUT_END = 0x%x\n",
  324. mt_afe_get_reg(AFE_HDMI_OUT_END));
  325. n += scnprintf(buffer + n, size - n, "AFE_HDMI_CONN0 = 0x%x\n",
  326. mt_afe_get_reg(AFE_HDMI_CONN0));
  327. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CNT5 = 0x%x\n",
  328. mt_afe_get_reg(AFE_IRQ_MCU_CNT5));
  329. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CON = 0x%x\n",
  330. mt_afe_get_reg(AFE_IRQ_MCU_CON));
  331. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_STATUS = 0x%x\n",
  332. mt_afe_get_reg(AFE_IRQ_MCU_STATUS));
  333. n += scnprintf(buffer + n, size - n, "AFE_MEMIF_PBUF_SIZE = 0x%x\n",
  334. mt_afe_get_reg(AFE_MEMIF_PBUF_SIZE));
  335. n += scnprintf(buffer + n, size - n, "AFE_APLL1_TUNER_CFG = 0x%x\n",
  336. mt_afe_get_reg(AFE_APLL1_TUNER_CFG));
  337. n += scnprintf(buffer + n, size - n, "AFE_APLL2_TUNER_CFG = 0x%x\n",
  338. mt_afe_get_reg(AFE_APLL2_TUNER_CFG));
  339. n += scnprintf(buffer + n, size - n, "AFE_TDM_CON1 = 0x%x\n",
  340. mt_afe_get_reg(AFE_TDM_CON1));
  341. n += scnprintf(buffer + n, size - n, "AFE_TDM_CON2 = 0x%x\n",
  342. mt_afe_get_reg(AFE_TDM_CON2));
  343. n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MSB = 0x%x\n",
  344. mt_afe_get_reg(AFE_MEMIF_MSB));
  345. n += scnprintf(buffer + n, size - n, "AUDIO_CLK_CFG_6 = 0x%x\n",
  346. mt_afe_topck_get_reg(AUDIO_CLK_CFG_6));
  347. n += scnprintf(buffer + n, size - n, "AUDIO_CLK_CFG_7 = 0x%x\n",
  348. mt_afe_topck_get_reg(AUDIO_CLK_CFG_7));
  349. n += scnprintf(buffer + n, size - n, "AUDIO_CLK_AUDDIV_0 = 0x%x\n",
  350. mt_afe_topck_get_reg(AUDIO_CLK_AUDDIV_0));
  351. n += scnprintf(buffer + n, size - n, "AUDIO_CLK_AUDDIV_1 = 0x%x\n",
  352. mt_afe_topck_get_reg(AUDIO_CLK_AUDDIV_1));
  353. n += scnprintf(buffer + n, size - n, "AUDIO_CLK_AUDDIV_2 = 0x%x\n",
  354. mt_afe_topck_get_reg(AUDIO_CLK_AUDDIV_2));
  355. n += scnprintf(buffer + n, size - n, "AUDIO_CLK_AUDDIV_3 = 0x%x\n",
  356. mt_afe_topck_get_reg(AUDIO_CLK_AUDDIV_3));
  357. n += scnprintf(buffer + n, size - n, "AP_PLL_CON5 = 0x%x\n",
  358. mt_afe_pll_get_reg(AP_PLL_CON5));
  359. n += scnprintf(buffer + n, size - n, "APLL1_CON0 = 0x%x\n",
  360. mt_afe_pll_get_reg(AUDIO_APLL1_CON0));
  361. n += scnprintf(buffer + n, size - n, "APLL1_CON1 = 0x%x\n",
  362. mt_afe_pll_get_reg(AUDIO_APLL1_CON1));
  363. n += scnprintf(buffer + n, size - n, "APLL1_CON2 = 0x%x\n",
  364. mt_afe_pll_get_reg(AUDIO_APLL1_CON2));
  365. n += scnprintf(buffer + n, size - n, "APLL1_PWR_CON0 = 0x%x\n",
  366. mt_afe_pll_get_reg(AUDIO_APLL1_PWR_CON0));
  367. n += scnprintf(buffer + n, size - n, "APLL2_CON0 = 0x%x\n",
  368. mt_afe_pll_get_reg(AUDIO_APLL2_CON0));
  369. n += scnprintf(buffer + n, size - n, "APLL2_CON1 = 0x%x\n",
  370. mt_afe_pll_get_reg(AUDIO_APLL2_CON1));
  371. n += scnprintf(buffer + n, size - n, "APLL2_CON2 = 0x%x\n",
  372. mt_afe_pll_get_reg(AUDIO_APLL2_CON2));
  373. n += scnprintf(buffer + n, size - n, "APLL2_PWR_CON0 = 0x%x\n",
  374. mt_afe_pll_get_reg(AUDIO_APLL2_PWR_CON0));
  375. mt_afe_main_clk_off();
  376. return simple_read_from_buffer(buf, count, pos, buffer, n);
  377. }
  378. static ssize_t mt_soc_spdif_debug_read(struct file *file, char __user *buf,
  379. size_t count, loff_t *pos)
  380. {
  381. const int size = DEBUG_FS_BUFFER_SIZE;
  382. char buffer[size];
  383. int n = 0;
  384. mt_afe_main_clk_on();
  385. n = scnprintf(buffer + n, size - n, "AUDIO_TOP_CON0 = 0x%x\n",
  386. mt_afe_get_reg(AUDIO_TOP_CON0));
  387. n += scnprintf(buffer + n, size - n, "AUDIO_TOP_CON3 = 0x%x\n",
  388. mt_afe_get_reg(AUDIO_TOP_CON3));
  389. n += scnprintf(buffer + n, size - n, "AFE_DAC_CON0 = 0x%x\n",
  390. mt_afe_get_reg(AFE_DAC_CON0));
  391. n += scnprintf(buffer + n, size - n, "AFE_HDMI_CONN0 = 0x%x\n",
  392. mt_afe_get_reg(AFE_HDMI_CONN0));
  393. n += scnprintf(buffer + n, size - n, "AFE_HDMI_CONN1 = 0x%x\n",
  394. mt_afe_get_reg(AFE_HDMI_CONN1));
  395. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CON = 0x%x\n",
  396. mt_afe_get_reg(AFE_IRQ_MCU_CON));
  397. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_STATUS = 0x%x\n",
  398. mt_afe_get_reg(AFE_IRQ_MCU_STATUS));
  399. n += scnprintf(buffer + n, size - n, "AFE_MEMIF_PBUF_SIZE = 0x%x\n",
  400. mt_afe_get_reg(AFE_MEMIF_PBUF_SIZE));
  401. n += scnprintf(buffer + n, size - n, "AFE_MEMIF_PBUF2_SIZE = 0x%x\n",
  402. mt_afe_get_reg(AFE_MEMIF_PBUF2_SIZE));
  403. n += scnprintf(buffer + n, size - n, "AFE_APLL1_TUNER_CFG = 0x%x\n",
  404. mt_afe_get_reg(AFE_APLL1_TUNER_CFG));
  405. n += scnprintf(buffer + n, size - n, "AFE_APLL2_TUNER_CFG = 0x%x\n",
  406. mt_afe_get_reg(AFE_APLL2_TUNER_CFG));
  407. n += scnprintf(buffer + n, size - n, "AFE_SPDIF_OUT_CON0 = 0x%x\n",
  408. mt_afe_get_reg(AFE_SPDIF_OUT_CON0));
  409. n += scnprintf(buffer + n, size - n, "AFE_SPDIF_BASE = 0x%x\n",
  410. mt_afe_get_reg(AFE_SPDIF_BASE));
  411. n += scnprintf(buffer + n, size - n, "AFE_SPDIF_CUR = 0x%x\n",
  412. mt_afe_get_reg(AFE_SPDIF_CUR));
  413. n += scnprintf(buffer + n, size - n, "AFE_SPDIF_END = 0x%x\n",
  414. mt_afe_get_reg(AFE_SPDIF_END));
  415. n += scnprintf(buffer + n, size - n, "AFE_IEC_CFG = 0x%x\n",
  416. mt_afe_get_reg(AFE_IEC_CFG));
  417. n += scnprintf(buffer + n, size - n, "AFE_IEC_NSNUM = 0x%x\n",
  418. mt_afe_get_reg(AFE_IEC_NSNUM));
  419. n += scnprintf(buffer + n, size - n, "AFE_IEC_BURST_INFO = 0x%x\n",
  420. mt_afe_get_reg(AFE_IEC_BURST_INFO));
  421. n += scnprintf(buffer + n, size - n, "AFE_IEC_BURST_LEN = 0x%x\n",
  422. mt_afe_get_reg(AFE_IEC_BURST_LEN));
  423. n += scnprintf(buffer + n, size - n, "AFE_IEC_NSADR = 0x%x\n",
  424. mt_afe_get_reg(AFE_IEC_NSADR));
  425. n += scnprintf(buffer + n, size - n, "AFE_IEC_CHL_STAT0 = 0x%x\n",
  426. mt_afe_get_reg(AFE_IEC_CHL_STAT0));
  427. n += scnprintf(buffer + n, size - n, "AFE_IEC_CHL_STAT1 = 0x%x\n",
  428. mt_afe_get_reg(AFE_IEC_CHL_STAT1));
  429. n += scnprintf(buffer + n, size - n, "AFE_IEC_CHR_STAT0 = 0x%x\n",
  430. mt_afe_get_reg(AFE_IEC_CHR_STAT0));
  431. n += scnprintf(buffer + n, size - n, "AFE_IEC_CHR_STAT1 = 0x%x\n",
  432. mt_afe_get_reg(AFE_IEC_CHR_STAT1));
  433. n += scnprintf(buffer + n, size - n, "AFE_SPDIF2_OUT_CON0 = 0x%x\n",
  434. mt_afe_get_reg(AFE_SPDIF2_OUT_CON0));
  435. n += scnprintf(buffer + n, size - n, "AFE_SPDIF2_BASE = 0x%x\n",
  436. mt_afe_get_reg(AFE_SPDIF2_BASE));
  437. n += scnprintf(buffer + n, size - n, "AFE_SPDIF2_CUR = 0x%x\n",
  438. mt_afe_get_reg(AFE_SPDIF2_CUR));
  439. n += scnprintf(buffer + n, size - n, "AFE_SPDIF2_END = 0x%x\n",
  440. mt_afe_get_reg(AFE_SPDIF2_END));
  441. n += scnprintf(buffer + n, size - n, "AFE_IEC2_CFG = 0x%x\n",
  442. mt_afe_get_reg(AFE_IEC2_CFG));
  443. n += scnprintf(buffer + n, size - n, "AFE_IEC2_NSNUM = 0x%x\n",
  444. mt_afe_get_reg(AFE_IEC2_NSNUM));
  445. n += scnprintf(buffer + n, size - n, "AFE_IEC2_BURST_INFO = 0x%x\n",
  446. mt_afe_get_reg(AFE_IEC2_BURST_INFO));
  447. n += scnprintf(buffer + n, size - n, "AFE_IEC2_BURST_LEN = 0x%x\n",
  448. mt_afe_get_reg(AFE_IEC2_BURST_LEN));
  449. n += scnprintf(buffer + n, size - n, "AFE_IEC2_NSADR = 0x%x\n",
  450. mt_afe_get_reg(AFE_IEC2_NSADR));
  451. n += scnprintf(buffer + n, size - n, "AFE_IEC2_CHL_STAT0 = 0x%x\n",
  452. mt_afe_get_reg(AFE_IEC2_CHL_STAT0));
  453. n += scnprintf(buffer + n, size - n, "AFE_IEC2_CHL_STAT1 = 0x%x\n",
  454. mt_afe_get_reg(AFE_IEC2_CHL_STAT1));
  455. n += scnprintf(buffer + n, size - n, "AFE_IEC2_CHR_STAT0 = 0x%x\n",
  456. mt_afe_get_reg(AFE_IEC2_CHR_STAT0));
  457. n += scnprintf(buffer + n, size - n, "AFE_IEC2_CHR_STAT1 = 0x%x\n",
  458. mt_afe_get_reg(AFE_IEC2_CHR_STAT1));
  459. n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MSB = 0x%x\n",
  460. mt_afe_get_reg(AFE_MEMIF_MSB));
  461. n += scnprintf(buffer + n, size - n, "AUDIO_CLK_CFG_6 = 0x%x\n",
  462. mt_afe_topck_get_reg(AUDIO_CLK_CFG_6));
  463. n += scnprintf(buffer + n, size - n, "AUDIO_CLK_CFG_7 = 0x%x\n",
  464. mt_afe_topck_get_reg(AUDIO_CLK_CFG_7));
  465. n += scnprintf(buffer + n, size - n, "AUDIO_CLK_AUDDIV_0 = 0x%x\n",
  466. mt_afe_topck_get_reg(AUDIO_CLK_AUDDIV_0));
  467. n += scnprintf(buffer + n, size - n, "AUDIO_CLK_AUDDIV_3 = 0x%x\n",
  468. mt_afe_topck_get_reg(AUDIO_CLK_AUDDIV_3));
  469. n += scnprintf(buffer + n, size - n, "AUDIO_CLK_AUDDIV_4 = 0x%x\n",
  470. mt_afe_topck_get_reg(AUDIO_CLK_AUDDIV_4));
  471. n += scnprintf(buffer + n, size - n, "AP_PLL_CON5 = 0x%x\n",
  472. mt_afe_pll_get_reg(AP_PLL_CON5));
  473. n += scnprintf(buffer + n, size - n, "APLL1_CON0 = 0x%x\n",
  474. mt_afe_pll_get_reg(AUDIO_APLL1_CON0));
  475. n += scnprintf(buffer + n, size - n, "APLL1_CON1 = 0x%x\n",
  476. mt_afe_pll_get_reg(AUDIO_APLL1_CON1));
  477. n += scnprintf(buffer + n, size - n, "APLL1_CON2 = 0x%x\n",
  478. mt_afe_pll_get_reg(AUDIO_APLL1_CON2));
  479. n += scnprintf(buffer + n, size - n, "APLL1_PWR_CON0 = 0x%x\n",
  480. mt_afe_pll_get_reg(AUDIO_APLL1_PWR_CON0));
  481. n += scnprintf(buffer + n, size - n, "APLL2_CON0 = 0x%x\n",
  482. mt_afe_pll_get_reg(AUDIO_APLL2_CON0));
  483. n += scnprintf(buffer + n, size - n, "APLL2_CON1 = 0x%x\n",
  484. mt_afe_pll_get_reg(AUDIO_APLL2_CON1));
  485. n += scnprintf(buffer + n, size - n, "APLL2_CON2 = 0x%x\n",
  486. mt_afe_pll_get_reg(AUDIO_APLL2_CON2));
  487. n += scnprintf(buffer + n, size - n, "APLL2_PWR_CON0 = 0x%x\n",
  488. mt_afe_pll_get_reg(AUDIO_APLL2_PWR_CON0));
  489. mt_afe_main_clk_off();
  490. return simple_read_from_buffer(buf, count, pos, buffer, n);
  491. }
  492. static const struct file_operations mtaudio_debug_ops = {
  493. .open = simple_open,
  494. .read = mt_soc_debug_read,
  495. .write = mt_soc_debug_write,
  496. .llseek = default_llseek,
  497. };
  498. static const struct file_operations mtaudio_hdmi_debug_ops = {
  499. .open = simple_open,
  500. .read = mt_soc_hdmi_debug_read,
  501. .llseek = default_llseek,
  502. };
  503. static const struct file_operations mtaudio_spdif_debug_ops = {
  504. .open = simple_open,
  505. .read = mt_soc_spdif_debug_read,
  506. .llseek = default_llseek,
  507. };
  508. static struct mt_soc_audio_debug_fs audio_debug_fs[] = {
  509. {NULL, "mtksocaudio", &mtaudio_debug_ops},
  510. {NULL, "mtksochdmiaudio", &mtaudio_hdmi_debug_ops},
  511. {NULL, "mtksocspdifaudio", &mtaudio_spdif_debug_ops},
  512. };
  513. void mt_afe_debug_init(void)
  514. {
  515. int i;
  516. for (i = 0; i < ARRAY_SIZE(audio_debug_fs); i++) {
  517. audio_debug_fs[i].audio_dentry = debugfs_create_file(audio_debug_fs[i].fs_name,
  518. 0644, NULL, NULL,
  519. audio_debug_fs[i].fops);
  520. if (!audio_debug_fs[i].audio_dentry)
  521. pr_warn("%s failed to create %s debugfs file\n", __func__,
  522. audio_debug_fs[i].fs_name);
  523. }
  524. }
  525. void mt_afe_debug_deinit(void)
  526. {
  527. int i;
  528. for (i = 0; i < ARRAY_SIZE(audio_debug_fs); i++)
  529. debugfs_remove(audio_debug_fs[i].audio_dentry);
  530. }