mt_soc_machine.c 52 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306
  1. /*
  2. * Copyright (C) 2007 The Android Open Source Project
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. /*******************************************************************************
  17. *
  18. * Filename:
  19. * ---------
  20. * mt_soc_machine.c
  21. *
  22. * Project:
  23. * --------
  24. * Audio soc machine driver
  25. *
  26. * Description:
  27. * ------------
  28. * Audio machine driver
  29. *
  30. * Author:
  31. * -------
  32. * Chipeng Chang
  33. *
  34. *------------------------------------------------------------------------------
  35. *
  36. *******************************************************************************/
  37. /*****************************************************************************
  38. * C O M P I L E R F L A G S
  39. *****************************************************************************/
  40. /*****************************************************************************
  41. * E X T E R N A L R E F E R E N C E S
  42. *****************************************************************************/
  43. #define CONFIG_MTK_DEEP_IDLE
  44. #ifdef CONFIG_MTK_DEEP_IDLE
  45. #include "mt_idle.h"
  46. #endif
  47. #include "AudDrv_Common.h"
  48. #include "AudDrv_Def.h"
  49. #include "AudDrv_Afe.h"
  50. #include "AudDrv_Ana.h"
  51. #include "AudDrv_Clk.h"
  52. #include "AudDrv_Kernel.h"
  53. #include "mt_soc_afe_control.h"
  54. /* #include <mach/mt_clkbuf_ctl.h> */
  55. #include <linux/kernel.h>
  56. #include <linux/module.h>
  57. #include <linux/init.h>
  58. #include <linux/device.h>
  59. #include <linux/slab.h>
  60. #include <linux/fs.h>
  61. #include <linux/completion.h>
  62. #include <linux/mm.h>
  63. #include <linux/delay.h>
  64. #include <linux/interrupt.h>
  65. #include <linux/dma-mapping.h>
  66. #include <linux/vmalloc.h>
  67. #include <linux/platform_device.h>
  68. #include <linux/miscdevice.h>
  69. #include <linux/wait.h>
  70. #include <linux/spinlock.h>
  71. #include <linux/sched.h>
  72. #include <linux/wakelock.h>
  73. #include <linux/semaphore.h>
  74. #include <linux/jiffies.h>
  75. #include <linux/proc_fs.h>
  76. #include <linux/string.h>
  77. #include <linux/mutex.h>
  78. /*#include <linux/xlog.h>*/
  79. /*#include <mach/irqs.h>*/
  80. #include <asm/uaccess.h>
  81. #include <asm/irq.h>
  82. #include <asm/io.h>
  83. #include <asm/div64.h>
  84. /*
  85. #include <mach/mt_reg_base.h>
  86. #include <linux/aee.h>
  87. #include <mach/pmic_mt6325_sw.h>
  88. #include <mach/upmu_common.h>
  89. #include <mach/upmu_hw.h>
  90. #include <mach/mt_gpio.h>
  91. #include <mach/mt_typedefs.h>*/
  92. #include <linux/types.h>
  93. #include <stdarg.h>
  94. #include <linux/module.h>
  95. #include <linux/clk.h>
  96. #include <linux/delay.h>
  97. #include <linux/gpio.h>
  98. #include <linux/platform_device.h>
  99. #include <linux/slab.h>
  100. #include <sound/core.h>
  101. #include <sound/soc.h>
  102. #include <sound/soc-dapm.h>
  103. #include <sound/pcm.h>
  104. #include <sound/jack.h>
  105. /* #include <asm/mach-types.h> */
  106. #include <linux/debugfs.h>
  107. #include "mt_soc_codec_63xx.h"
  108. static int mt_soc_lowjitter_control;
  109. static struct dentry *mt_sco_audio_debugfs;
  110. #define DEBUG_FS_NAME "mtksocaudio"
  111. #define DEBUG_ANA_FS_NAME "mtksocanaaudio"
  112. static int mtmachine_startup(struct snd_pcm_substream *substream)
  113. {
  114. /* pr_debug("mtmachine_startup\n"); */
  115. return 0;
  116. }
  117. static int mtmachine_prepare(struct snd_pcm_substream *substream)
  118. {
  119. /* pr_debug("mtmachine_prepare\n"); */
  120. return 0;
  121. }
  122. static struct snd_soc_ops mt_machine_audio_ops = {
  123. .startup = mtmachine_startup,
  124. .prepare = mtmachine_prepare,
  125. };
  126. static int mtmachine_compr_startup(struct snd_compr_stream *stream)
  127. {
  128. return 0;
  129. }
  130. static struct snd_soc_compr_ops mt_machine_audio_compr_ops = {
  131. .startup = mtmachine_compr_startup,
  132. };
  133. static int mtmachine_startupmedia2(struct snd_pcm_substream *substream)
  134. {
  135. /* pr_debug("mtmachine_startupmedia2\n"); */
  136. return 0;
  137. }
  138. static int mtmachine_preparemedia2(struct snd_pcm_substream *substream)
  139. {
  140. /* pr_debug("mtmachine_preparemedia2\n"); */
  141. return 0;
  142. }
  143. static struct snd_soc_ops mtmachine_audio_ops2 = {
  144. .startup = mtmachine_startupmedia2,
  145. .prepare = mtmachine_preparemedia2,
  146. };
  147. static int mt_soc_audio_init(struct snd_soc_pcm_runtime *rtd)
  148. {
  149. pr_debug("mt_soc_audio_init\n");
  150. return 0;
  151. }
  152. static int mt_soc_audio_init2(struct snd_soc_pcm_runtime *rtd)
  153. {
  154. pr_debug("mt_soc_audio_init2\n");
  155. return 0;
  156. }
  157. static int mt_soc_ana_debug_open(struct inode *inode, struct file *file)
  158. {
  159. pr_debug("mt_soc_ana_debug_open\n");
  160. return 0;
  161. }
  162. static ssize_t mt_soc_ana_debug_read(struct file *file, char __user *buf,
  163. size_t count, loff_t *pos)
  164. {
  165. const int size = 4096;
  166. /* char buffer[size]; */
  167. char *buffer = NULL; /* for reduce kernel stack */
  168. int n = 0;
  169. int ret = 0;
  170. buffer = kmalloc(size, GFP_KERNEL);
  171. if (!buffer) {
  172. kfree(buffer);
  173. return -ENOMEM;
  174. }
  175. pr_debug("mt_soc_ana_debug_read count = %zu\n", count);
  176. AudDrv_Clk_On();
  177. audckbufEnable(true);
  178. n += scnprintf(buffer + n, size - n, "AFE_UL_DL_CON0 = 0x%x\n",
  179. Ana_Get_Reg(AFE_UL_DL_CON0));
  180. n += scnprintf(buffer + n, size - n, "AFE_DL_SRC2_CON0_H = 0x%x\n",
  181. Ana_Get_Reg(AFE_DL_SRC2_CON0_H));
  182. n += scnprintf(buffer + n, size - n, "AFE_DL_SRC2_CON0_L = 0x%x\n",
  183. Ana_Get_Reg(AFE_DL_SRC2_CON0_L));
  184. n += scnprintf(buffer + n, size - n, "AFE_DL_SDM_CON0 = 0x%x\n",
  185. Ana_Get_Reg(AFE_DL_SDM_CON0));
  186. n += scnprintf(buffer + n, size - n, "AFE_DL_SDM_CON1 = 0x%x\n",
  187. Ana_Get_Reg(AFE_DL_SDM_CON1));
  188. n += scnprintf(buffer + n, size - n, "AFE_UL_SRC0_CON0_H = 0x%x\n",
  189. Ana_Get_Reg(AFE_UL_SRC0_CON0_H));
  190. n += scnprintf(buffer + n, size - n, "AFE_UL_SRC0_CON0_L = 0x%x\n",
  191. Ana_Get_Reg(AFE_UL_SRC0_CON0_L));
  192. n += scnprintf(buffer + n, size - n, "AFE_UL_SRC1_CON0_H = 0x%x\n",
  193. Ana_Get_Reg(AFE_UL_SRC1_CON0_H));
  194. n += scnprintf(buffer + n, size - n, "AFE_UL_SRC1_CON0_L = 0x%x\n",
  195. Ana_Get_Reg(AFE_UL_SRC1_CON0_L));
  196. n += scnprintf(buffer + n, size - n, "PMIC_AFE_TOP_CON0 = 0x%x\n",
  197. Ana_Get_Reg(PMIC_AFE_TOP_CON0));
  198. n += scnprintf(buffer + n, size - n, "AFE_AUDIO_TOP_CON0 = 0x%x\n",
  199. Ana_Get_Reg(AFE_AUDIO_TOP_CON0));
  200. n += scnprintf(buffer + n, size - n, "PMIC_AFE_TOP_CON0 = 0x%x\n",
  201. Ana_Get_Reg(PMIC_AFE_TOP_CON0));
  202. n += scnprintf(buffer + n, size - n, "AFE_DL_SRC_MON0 = 0x%x\n",
  203. Ana_Get_Reg(AFE_DL_SRC_MON0));
  204. n += scnprintf(buffer + n, size - n, "AFE_DL_SDM_TEST0 = 0x%x\n",
  205. Ana_Get_Reg(AFE_DL_SDM_TEST0));
  206. n += scnprintf(buffer + n, size - n, "AFE_MON_DEBUG0 = 0x%x\n",
  207. Ana_Get_Reg(AFE_MON_DEBUG0));
  208. n += scnprintf(buffer + n, size - n, "AFUNC_AUD_CON0 = 0x%x\n",
  209. Ana_Get_Reg(AFUNC_AUD_CON0));
  210. n += scnprintf(buffer + n, size - n, "AFUNC_AUD_CON1 = 0x%x\n",
  211. Ana_Get_Reg(AFUNC_AUD_CON1));
  212. n += scnprintf(buffer + n, size - n, "AFUNC_AUD_CON2 = 0x%x\n",
  213. Ana_Get_Reg(AFUNC_AUD_CON2));
  214. n += scnprintf(buffer + n, size - n, "AFUNC_AUD_CON3 = 0x%x\n",
  215. Ana_Get_Reg(AFUNC_AUD_CON3));
  216. n += scnprintf(buffer + n, size - n, "AFUNC_AUD_CON4 = 0x%x\n",
  217. Ana_Get_Reg(AFUNC_AUD_CON4));
  218. n += scnprintf(buffer + n, size - n, "AFUNC_AUD_MON0 = 0x%x\n",
  219. Ana_Get_Reg(AFUNC_AUD_MON0));
  220. n += scnprintf(buffer + n, size - n, "AFUNC_AUD_MON1 = 0x%x\n",
  221. Ana_Get_Reg(AFUNC_AUD_MON1));
  222. n += scnprintf(buffer + n, size - n, "AUDRC_TUNE_MON0 = 0x%x\n",
  223. Ana_Get_Reg(AUDRC_TUNE_MON0));
  224. n += scnprintf(buffer + n, size - n, "AFE_UP8X_FIFO_CFG0 = 0x%x\n",
  225. Ana_Get_Reg(AFE_UP8X_FIFO_CFG0));
  226. n += scnprintf(buffer + n, size - n, "AFE_UP8X_FIFO_LOG_MON0 = 0x%x\n",
  227. Ana_Get_Reg(AFE_UP8X_FIFO_LOG_MON0));
  228. n += scnprintf(buffer + n, size - n, "AFE_UP8X_FIFO_LOG_MON1 = 0x%x\n",
  229. Ana_Get_Reg(AFE_UP8X_FIFO_LOG_MON1));
  230. n += scnprintf(buffer + n, size - n, "AFE_DL_DC_COMP_CFG0 = 0x%x\n",
  231. Ana_Get_Reg(AFE_DL_DC_COMP_CFG0));
  232. n += scnprintf(buffer + n, size - n, "AFE_DL_DC_COMP_CFG1 = 0x%x\n",
  233. Ana_Get_Reg(AFE_DL_DC_COMP_CFG1));
  234. n += scnprintf(buffer + n, size - n, "AFE_DL_DC_COMP_CFG2 = 0x%x\n",
  235. Ana_Get_Reg(AFE_DL_DC_COMP_CFG2));
  236. n += scnprintf(buffer + n, size - n, "AFE_PMIC_NEWIF_CFG0 = 0x%x\n",
  237. Ana_Get_Reg(AFE_PMIC_NEWIF_CFG0));
  238. n += scnprintf(buffer + n, size - n, "AFE_PMIC_NEWIF_CFG1 = 0x%x\n",
  239. Ana_Get_Reg(AFE_PMIC_NEWIF_CFG1));
  240. n += scnprintf(buffer + n, size - n, "AFE_PMIC_NEWIF_CFG2 = 0x%x\n",
  241. Ana_Get_Reg(AFE_PMIC_NEWIF_CFG2));
  242. n += scnprintf(buffer + n, size - n, "AFE_PMIC_NEWIF_CFG3 = 0x%x\n",
  243. Ana_Get_Reg(AFE_PMIC_NEWIF_CFG3));
  244. n += scnprintf(buffer + n, size - n, "AFE_SGEN_CFG0 = 0x%x\n",
  245. Ana_Get_Reg(AFE_SGEN_CFG0));
  246. n += scnprintf(buffer + n, size - n, "AFE_SGEN_CFG1 = 0x%x\n",
  247. Ana_Get_Reg(AFE_SGEN_CFG1));
  248. n += scnprintf(buffer + n, size - n, "AFE_ADDA2_UP8X_FIFO_LOG_MON0 = 0x%x\n",
  249. Ana_Get_Reg(AFE_ADDA2_UP8X_FIFO_LOG_MON0));
  250. n += scnprintf(buffer + n, size - n, "AFE_ADDA2_UP8X_FIFO_LOG_MON1 = 0x%x\n",
  251. Ana_Get_Reg(AFE_ADDA2_UP8X_FIFO_LOG_MON1));
  252. n += scnprintf(buffer + n, size - n, "AFE_ADDA2_PMIC_NEWIF_CFG0 = 0x%x\n",
  253. Ana_Get_Reg(AFE_ADDA2_PMIC_NEWIF_CFG0));
  254. n += scnprintf(buffer + n, size - n, "AFE_ADDA2_PMIC_NEWIF_CFG1 = 0x%x\n",
  255. Ana_Get_Reg(AFE_ADDA2_PMIC_NEWIF_CFG1));
  256. n += scnprintf(buffer + n, size - n, "AFE_ADDA2_PMIC_NEWIF_CFG2 = 0x%x\n",
  257. Ana_Get_Reg(AFE_ADDA2_PMIC_NEWIF_CFG2));
  258. n += scnprintf(buffer + n, size - n, "AFE_VOW_TOP = 0x%x\n", Ana_Get_Reg(AFE_VOW_TOP));
  259. n += scnprintf(buffer + n, size - n, "AFE_VOW_CFG0 = 0x%x\n", Ana_Get_Reg(AFE_VOW_CFG0));
  260. n += scnprintf(buffer + n, size - n, "AFE_VOW_CFG1 = 0x%x\n", Ana_Get_Reg(AFE_VOW_CFG1));
  261. n += scnprintf(buffer + n, size - n, "AFE_VOW_CFG2 = 0x%x\n", Ana_Get_Reg(AFE_VOW_CFG2));
  262. n += scnprintf(buffer + n, size - n, "AFE_VOW_CFG3 = 0x%x\n", Ana_Get_Reg(AFE_VOW_CFG3));
  263. n += scnprintf(buffer + n, size - n, "AFE_VOW_CFG4 = 0x%x\n", Ana_Get_Reg(AFE_VOW_CFG4));
  264. n += scnprintf(buffer + n, size - n, "AFE_VOW_CFG5 = 0x%x\n", Ana_Get_Reg(AFE_VOW_CFG5));
  265. n += scnprintf(buffer + n, size - n, "AFE_VOW_MON0 = 0x%x\n", Ana_Get_Reg(AFE_VOW_MON0));
  266. n += scnprintf(buffer + n, size - n, "AFE_VOW_MON1 = 0x%x\n", Ana_Get_Reg(AFE_VOW_MON1));
  267. n += scnprintf(buffer + n, size - n, "AFE_VOW_MON2 = 0x%x\n", Ana_Get_Reg(AFE_VOW_MON2));
  268. n += scnprintf(buffer + n, size - n, "AFE_VOW_MON3 = 0x%x\n", Ana_Get_Reg(AFE_VOW_MON3));
  269. n += scnprintf(buffer + n, size - n, "AFE_VOW_MON4 = 0x%x\n", Ana_Get_Reg(AFE_VOW_MON4));
  270. n += scnprintf(buffer + n, size - n, "AFE_VOW_MON5 = 0x%x\n", Ana_Get_Reg(AFE_VOW_MON5));
  271. n += scnprintf(buffer + n, size - n, "AFE_DCCLK_CFG0 = 0x%x\n",
  272. Ana_Get_Reg(AFE_DCCLK_CFG0));
  273. n += scnprintf(buffer + n, size - n, "AFE_DCCLK_CFG1 = 0x%x\n",
  274. Ana_Get_Reg(AFE_DCCLK_CFG1));
  275. n += scnprintf(buffer + n, size - n, "AFE_HPANC_CFG0 = 0x%x\n",
  276. Ana_Get_Reg(AFE_HPANC_CFG0));
  277. n += scnprintf(buffer + n, size - n, "AFE_NCP_CFG0 = 0x%x\n",
  278. Ana_Get_Reg(AFE_NCP_CFG0));
  279. n += scnprintf(buffer + n, size - n, "AFE_NCP_CFG1 = 0x%x\n",
  280. Ana_Get_Reg(AFE_NCP_CFG1));
  281. n += scnprintf(buffer + n, size - n, "TOP_CON = 0x%x\n", Ana_Get_Reg(TOP_CON));
  282. n += scnprintf(buffer + n, size - n, "TOP_STATUS = 0x%x\n", Ana_Get_Reg(TOP_STATUS));
  283. n += scnprintf(buffer + n, size - n, "TOP_CKPDN_CON0 = 0x%x\n",
  284. Ana_Get_Reg(TOP_CKPDN_CON0));
  285. n += scnprintf(buffer + n, size - n, "TOP_CKPDN_CON1 = 0x%x\n",
  286. Ana_Get_Reg(TOP_CKPDN_CON1));
  287. n += scnprintf(buffer + n, size - n, "TOP_CKPDN_CON2 = 0x%x\n",
  288. Ana_Get_Reg(TOP_CKPDN_CON2));
  289. n += scnprintf(buffer + n, size - n, "TOP_CKPDN_CON3 = 0x%x\n",
  290. Ana_Get_Reg(TOP_CKPDN_CON3));
  291. n += scnprintf(buffer + n, size - n, "TOP_CKPDN_CON4 = 0x%x\n",
  292. Ana_Get_Reg(TOP_CKPDN_CON4));
  293. n += scnprintf(buffer + n, size - n, "TOP_CKPDN_CON5 = 0x%x\n",
  294. Ana_Get_Reg(TOP_CKPDN_CON5));
  295. n += scnprintf(buffer + n, size - n, "TOP_CKSEL_CON0 = 0x%x\n",
  296. Ana_Get_Reg(TOP_CKSEL_CON0));
  297. n += scnprintf(buffer + n, size - n, "TOP_CKSEL_CON1 = 0x%x\n",
  298. Ana_Get_Reg(TOP_CKSEL_CON1));
  299. n += scnprintf(buffer + n, size - n, "TOP_CKSEL_CON2 = 0x%x\n",
  300. Ana_Get_Reg(TOP_CKSEL_CON2));
  301. n += scnprintf(buffer + n, size - n, "TOP_CKSEL_CON3 = 0x%x\n",
  302. Ana_Get_Reg(TOP_CKSEL_CON3));
  303. n += scnprintf(buffer + n, size - n, "TOP_CKDIVSEL_CON0 = 0x%x\n",
  304. Ana_Get_Reg(TOP_CKDIVSEL_CON0));
  305. n += scnprintf(buffer + n, size - n, "TOP_CKDIVSEL_CON1 = 0x%x\n",
  306. Ana_Get_Reg(TOP_CKDIVSEL_CON1));
  307. n += scnprintf(buffer + n, size - n, "TOP_CKHWEN_CON0 = 0x%x\n",
  308. Ana_Get_Reg(TOP_CKHWEN_CON0));
  309. n += scnprintf(buffer + n, size - n, "TOP_CKHWEN_CON1 = 0x%x\n",
  310. Ana_Get_Reg(TOP_CKHWEN_CON1));
  311. n += scnprintf(buffer + n, size - n, "TOP_CKHWEN_CON2 = 0x%x\n",
  312. Ana_Get_Reg(TOP_CKHWEN_CON2));
  313. n += scnprintf(buffer + n, size - n, "TOP_CKTST_CON0 = 0x%x\n",
  314. Ana_Get_Reg(TOP_CKTST_CON0));
  315. n += scnprintf(buffer + n, size - n, "TOP_CKTST_CON1 = 0x%x\n",
  316. Ana_Get_Reg(TOP_CKTST_CON1));
  317. n += scnprintf(buffer + n, size - n, "TOP_CKTST_CON2 = 0x%x\n",
  318. Ana_Get_Reg(TOP_CKTST_CON2));
  319. n += scnprintf(buffer + n, size - n, "TOP_CLKSQ = 0x%x\n", Ana_Get_Reg(TOP_CLKSQ));
  320. n += scnprintf(buffer + n, size - n, "TOP_CLKSQ_RTC = 0x%x\n",
  321. Ana_Get_Reg(TOP_CLKSQ_RTC));
  322. n += scnprintf(buffer + n, size - n, "TOP_CLK_TRIM = 0x%x\n",
  323. Ana_Get_Reg(TOP_CLK_TRIM));
  324. n += scnprintf(buffer + n, size - n, "TOP_RST_CON0 = 0x%x\n",
  325. Ana_Get_Reg(TOP_RST_CON0));
  326. n += scnprintf(buffer + n, size - n, "TOP_RST_CON1 = 0x%x\n",
  327. Ana_Get_Reg(TOP_RST_CON1));
  328. n += scnprintf(buffer + n, size - n, "TOP_RST_CON2 = 0x%x\n",
  329. Ana_Get_Reg(TOP_RST_CON2));
  330. n += scnprintf(buffer + n, size - n, "TOP_RST_MISC = 0x%x\n",
  331. Ana_Get_Reg(TOP_RST_MISC));
  332. n += scnprintf(buffer + n, size - n, "TOP_RST_STATUS = 0x%x\n",
  333. Ana_Get_Reg(TOP_RST_STATUS));
  334. n += scnprintf(buffer + n, size - n, "TEST_CON0 = 0x%x\n", Ana_Get_Reg(TEST_CON0));
  335. n += scnprintf(buffer + n, size - n, "TEST_OUT = 0x%x\n", Ana_Get_Reg(TEST_OUT));
  336. n += scnprintf(buffer + n, size - n, "AFE_MON_DEBUG0= 0x%x\n",
  337. Ana_Get_Reg(AFE_MON_DEBUG0));
  338. n += scnprintf(buffer + n, size - n, "ZCD_CON0 = 0x%x\n", Ana_Get_Reg(ZCD_CON0));
  339. n += scnprintf(buffer + n, size - n, "ZCD_CON1 = 0x%x\n", Ana_Get_Reg(ZCD_CON1));
  340. n += scnprintf(buffer + n, size - n, "ZCD_CON2 = 0x%x\n", Ana_Get_Reg(ZCD_CON2));
  341. n += scnprintf(buffer + n, size - n, "ZCD_CON3 = 0x%x\n", Ana_Get_Reg(ZCD_CON3));
  342. n += scnprintf(buffer + n, size - n, "ZCD_CON4 = 0x%x\n", Ana_Get_Reg(ZCD_CON4));
  343. n += scnprintf(buffer + n, size - n, "ZCD_CON5 = 0x%x\n", Ana_Get_Reg(ZCD_CON5));
  344. n += scnprintf(buffer + n, size - n, "LDO_VA18_CON0 = 0x%x\n",
  345. Ana_Get_Reg(LDO_VA18_CON0));
  346. n += scnprintf(buffer + n, size - n, "LDO_VA18_CON1 = 0x%x\n",
  347. Ana_Get_Reg(LDO_VA18_CON1));
  348. n += scnprintf(buffer + n, size - n, "LDO_VUSB33_CON0 = 0x%x\n",
  349. Ana_Get_Reg(LDO_VUSB33_CON0));
  350. n += scnprintf(buffer + n, size - n, "LDO_VUSB33_CON1 = 0x%x\n",
  351. Ana_Get_Reg(LDO_VUSB33_CON1));
  352. #if 0
  353. n += scnprintf(buffer + n, size - n, "SPK_CON0 = 0x%x\n", Ana_Get_Reg(SPK_CON0));
  354. n += scnprintf(buffer + n, size - n, "SPK_CON1 = 0x%x\n", Ana_Get_Reg(SPK_CON1));
  355. n += scnprintf(buffer + n, size - n, "SPK_CON2 = 0x%x\n", Ana_Get_Reg(SPK_CON2));
  356. n += scnprintf(buffer + n, size - n, "SPK_CON3 = 0x%x\n", Ana_Get_Reg(SPK_CON3));
  357. n += scnprintf(buffer + n, size - n, "SPK_CON4 = 0x%x\n", Ana_Get_Reg(SPK_CON4));
  358. n += scnprintf(buffer + n, size - n, "SPK_CON5 = 0x%x\n", Ana_Get_Reg(SPK_CON5));
  359. n += scnprintf(buffer + n, size - n, "SPK_CON6 = 0x%x\n", Ana_Get_Reg(SPK_CON6));
  360. n += scnprintf(buffer + n, size - n, "SPK_CON7 = 0x%x\n", Ana_Get_Reg(SPK_CON7));
  361. n += scnprintf(buffer + n, size - n, "SPK_CON8 = 0x%x\n", Ana_Get_Reg(SPK_CON8));
  362. n += scnprintf(buffer + n, size - n, "SPK_CON9 = 0x%x\n", Ana_Get_Reg(SPK_CON9));
  363. n += scnprintf(buffer + n, size - n, "SPK_CON10 = 0x%x\n", Ana_Get_Reg(SPK_CON10));
  364. n += scnprintf(buffer + n, size - n, "SPK_CON11 = 0x%x\n", Ana_Get_Reg(SPK_CON11));
  365. n += scnprintf(buffer + n, size - n, "SPK_CON12 = 0x%x\n", Ana_Get_Reg(SPK_CON12));
  366. n += scnprintf(buffer + n, size - n, "SPK_CON13 = 0x%x\n", Ana_Get_Reg(SPK_CON13));
  367. n += scnprintf(buffer + n, size - n, "SPK_CON14 = 0x%x\n", Ana_Get_Reg(SPK_CON14));
  368. n += scnprintf(buffer + n, size - n, "SPK_CON15 = 0x%x\n", Ana_Get_Reg(SPK_CON15));
  369. n += scnprintf(buffer + n, size - n, "SPK_CON16 = 0x%x\n", Ana_Get_Reg(SPK_CON16));
  370. n += scnprintf(buffer + n, size - n, "SPK_ANA_CON0 = 0x%x\n", Ana_Get_Reg(SPK_ANA_CON0));
  371. n += scnprintf(buffer + n, size - n, "SPK_ANA_CON1 = 0x%x\n", Ana_Get_Reg(SPK_ANA_CON1));
  372. n += scnprintf(buffer + n, size - n, "SPK_ANA_CON3 = 0x%x\n", Ana_Get_Reg(SPK_ANA_CON3));
  373. #endif
  374. n += scnprintf(buffer + n, size - n, "AUDDEC_ANA_CON0 = 0x%x\n",
  375. Ana_Get_Reg(AUDDEC_ANA_CON0));
  376. n += scnprintf(buffer + n, size - n, "AUDDEC_ANA_CON1 = 0x%x\n",
  377. Ana_Get_Reg(AUDDEC_ANA_CON1));
  378. n += scnprintf(buffer + n, size - n, "AUDDEC_ANA_CON2 = 0x%x\n",
  379. Ana_Get_Reg(AUDDEC_ANA_CON2));
  380. n += scnprintf(buffer + n, size - n, "AUDDEC_ANA_CON3 = 0x%x\n",
  381. Ana_Get_Reg(AUDDEC_ANA_CON3));
  382. n += scnprintf(buffer + n, size - n, "AUDDEC_ANA_CON4 = 0x%x\n",
  383. Ana_Get_Reg(AUDDEC_ANA_CON4));
  384. n += scnprintf(buffer + n, size - n, "AUDDEC_ANA_CON5 = 0x%x\n",
  385. Ana_Get_Reg(AUDDEC_ANA_CON5));
  386. n += scnprintf(buffer + n, size - n, "AUDDEC_ANA_CON6 = 0x%x\n",
  387. Ana_Get_Reg(AUDDEC_ANA_CON6));
  388. n += scnprintf(buffer + n, size - n, "AUDDEC_ANA_CON7 = 0x%x\n",
  389. Ana_Get_Reg(AUDDEC_ANA_CON7));
  390. n += scnprintf(buffer + n, size - n, "AUDDEC_ANA_CON8 = 0x%x\n",
  391. Ana_Get_Reg(AUDDEC_ANA_CON8));
  392. n += scnprintf(buffer + n, size - n, "AUDDEC_ANA_CON9 = 0x%x\n",
  393. Ana_Get_Reg(AUDDEC_ANA_CON9));
  394. n += scnprintf(buffer + n, size - n, "AUDDEC_ANA_CON10 = 0x%x\n",
  395. Ana_Get_Reg(AUDDEC_ANA_CON10));
  396. n += scnprintf(buffer + n, size - n, "AUDENC_ANA_CON0 = 0x%x\n",
  397. Ana_Get_Reg(AUDENC_ANA_CON0));
  398. n += scnprintf(buffer + n, size - n, "AUDENC_ANA_CON1 = 0x%x\n",
  399. Ana_Get_Reg(AUDENC_ANA_CON1));
  400. n += scnprintf(buffer + n, size - n, "AUDENC_ANA_CON2 = 0x%x\n",
  401. Ana_Get_Reg(AUDENC_ANA_CON2));
  402. n += scnprintf(buffer + n, size - n, "AUDENC_ANA_CON3 = 0x%x\n",
  403. Ana_Get_Reg(AUDENC_ANA_CON3));
  404. n += scnprintf(buffer + n, size - n, "AUDENC_ANA_CON4 = 0x%x\n",
  405. Ana_Get_Reg(AUDENC_ANA_CON4));
  406. n += scnprintf(buffer + n, size - n, "AUDENC_ANA_CON5 = 0x%x\n",
  407. Ana_Get_Reg(AUDENC_ANA_CON5));
  408. n += scnprintf(buffer + n, size - n, "AUDENC_ANA_CON6 = 0x%x\n",
  409. Ana_Get_Reg(AUDENC_ANA_CON6));
  410. n += scnprintf(buffer + n, size - n, "AUDENC_ANA_CON7 = 0x%x\n",
  411. Ana_Get_Reg(AUDENC_ANA_CON7));
  412. n += scnprintf(buffer + n, size - n, "AUDENC_ANA_CON8 = 0x%x\n",
  413. Ana_Get_Reg(AUDENC_ANA_CON8));
  414. n += scnprintf(buffer + n, size - n, "AUDENC_ANA_CON9 = 0x%x\n",
  415. Ana_Get_Reg(AUDENC_ANA_CON9));
  416. n += scnprintf(buffer + n, size - n, "AUDENC_ANA_CON10 = 0x%x\n",
  417. Ana_Get_Reg(AUDENC_ANA_CON10));
  418. n += scnprintf(buffer + n, size - n, "AUDENC_ANA_CON11 = 0x%x\n",
  419. Ana_Get_Reg(AUDENC_ANA_CON11));
  420. n += scnprintf(buffer + n, size - n, "AUDENC_ANA_CON12 = 0x%x\n",
  421. Ana_Get_Reg(AUDENC_ANA_CON12));
  422. n += scnprintf(buffer + n, size - n, "AUDENC_ANA_CON13 = 0x%x\n",
  423. Ana_Get_Reg(AUDENC_ANA_CON13));
  424. n += scnprintf(buffer + n, size - n, "AUDENC_ANA_CON14 = 0x%x\n",
  425. Ana_Get_Reg(AUDENC_ANA_CON14));
  426. n += scnprintf(buffer + n, size - n, "AUDENC_ANA_CON15 = 0x%x\n",
  427. Ana_Get_Reg(AUDENC_ANA_CON15));
  428. n += scnprintf(buffer + n, size - n, "AUDENC_ANA_CON16 = 0x%x\n",
  429. Ana_Get_Reg(AUDENC_ANA_CON16));
  430. n += scnprintf(buffer + n, size - n, "AUDNCP_CLKDIV_CON0 = 0x%x\n",
  431. Ana_Get_Reg(AUDNCP_CLKDIV_CON0));
  432. n += scnprintf(buffer + n, size - n, "AUDNCP_CLKDIV_CON1 = 0x%x\n",
  433. Ana_Get_Reg(AUDNCP_CLKDIV_CON1));
  434. n += scnprintf(buffer + n, size - n, "AUDNCP_CLKDIV_CON2 = 0x%x\n",
  435. Ana_Get_Reg(AUDNCP_CLKDIV_CON2));
  436. n += scnprintf(buffer + n, size - n, "AUDNCP_CLKDIV_CON3 = 0x%x\n",
  437. Ana_Get_Reg(AUDNCP_CLKDIV_CON3));
  438. n += scnprintf(buffer + n, size - n, "AUDNCP_CLKDIV_CON4 = 0x%x\n",
  439. Ana_Get_Reg(AUDNCP_CLKDIV_CON4));
  440. n += scnprintf(buffer + n, size - n, "TOP_CKPDN_CON0 = 0x%x\n",
  441. Ana_Get_Reg(TOP_CKPDN_CON0));
  442. n += scnprintf(buffer + n, size - n, "GPIO_MODE3 = 0x%x\n", Ana_Get_Reg(GPIO_MODE3));
  443. pr_debug("mt_soc_ana_debug_read len = %d\n", n);
  444. audckbufEnable(false);
  445. AudDrv_Clk_Off();
  446. ret = simple_read_from_buffer(buf, count, pos, buffer, n);
  447. kfree(buffer);
  448. return ret;
  449. }
  450. static int mt_soc_debug_open(struct inode *inode, struct file *file)
  451. {
  452. pr_debug("mt_soc_debug_open\n");
  453. return 0;
  454. }
  455. static ssize_t mt_soc_debug_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
  456. {
  457. const int size = 4096;
  458. /* char buffer[size]; */
  459. char *buffer = NULL; /* for reduce kernel stack */
  460. int n = 0;
  461. int ret = 0;
  462. buffer = kmalloc(size, GFP_KERNEL);
  463. if (!buffer) {
  464. kfree(buffer);
  465. return -ENOMEM;
  466. }
  467. AudDrv_Clk_On();
  468. pr_debug("mt_soc_debug_read\n");
  469. n = scnprintf(buffer + n, size - n, "AUDIO_TOP_CON0 = 0x%x\n",
  470. Afe_Get_Reg(AUDIO_TOP_CON0));
  471. n += scnprintf(buffer + n, size - n, "AUDIO_TOP_CON1 = 0x%x\n",
  472. Afe_Get_Reg(AUDIO_TOP_CON1));
  473. n += scnprintf(buffer + n, size - n, "AUDIO_TOP_CON2 = 0x%x\n",
  474. Afe_Get_Reg(AUDIO_TOP_CON2));
  475. n += scnprintf(buffer + n, size - n, "AUDIO_TOP_CON3 = 0x%x\n",
  476. Afe_Get_Reg(AUDIO_TOP_CON3));
  477. n += scnprintf(buffer + n, size - n, "AFE_DAC_CON0 = 0x%x\n",
  478. Afe_Get_Reg(AFE_DAC_CON0));
  479. n += scnprintf(buffer + n, size - n, "AFE_DAC_CON1 = 0x%x\n",
  480. Afe_Get_Reg(AFE_DAC_CON1));
  481. n += scnprintf(buffer + n, size - n, "AFE_I2S_CON = 0x%x\n",
  482. Afe_Get_Reg(AFE_I2S_CON));
  483. n += scnprintf(buffer + n, size - n, "AFE_DAIBT_CON0 = 0x%x\n",
  484. Afe_Get_Reg(AFE_DAIBT_CON0));
  485. n += scnprintf(buffer + n, size - n, "AFE_CONN0 = 0x%x\n",
  486. Afe_Get_Reg(AFE_CONN0));
  487. n += scnprintf(buffer + n, size - n, "AFE_CONN1 = 0x%x\n",
  488. Afe_Get_Reg(AFE_CONN1));
  489. n += scnprintf(buffer + n, size - n, "AFE_CONN2 = 0x%x\n",
  490. Afe_Get_Reg(AFE_CONN2));
  491. n += scnprintf(buffer + n, size - n, "AFE_CONN3 = 0x%x\n",
  492. Afe_Get_Reg(AFE_CONN3));
  493. n += scnprintf(buffer + n, size - n, "AFE_CONN4 = 0x%x\n",
  494. Afe_Get_Reg(AFE_CONN4));
  495. n += scnprintf(buffer + n, size - n, "AFE_I2S_CON1 = 0x%x\n",
  496. Afe_Get_Reg(AFE_I2S_CON1));
  497. n += scnprintf(buffer + n, size - n, "AFE_I2S_CON2 = 0x%x\n",
  498. Afe_Get_Reg(AFE_I2S_CON2));
  499. n += scnprintf(buffer + n, size - n, "AFE_MRGIF_CON = 0x%x\n",
  500. Afe_Get_Reg(AFE_MRGIF_CON));
  501. n += scnprintf(buffer + n, size - n, "AFE_DL1_BASE = 0x%x\n",
  502. Afe_Get_Reg(AFE_DL1_BASE));
  503. n += scnprintf(buffer + n, size - n, "AFE_DL1_CUR = 0x%x\n",
  504. Afe_Get_Reg(AFE_DL1_CUR));
  505. n += scnprintf(buffer + n, size - n, "AFE_DL1_END = 0x%x\n",
  506. Afe_Get_Reg(AFE_DL1_END));
  507. n += scnprintf(buffer + n, size - n, "AFE_DL1_D2_BASE = 0x%x\n",
  508. Afe_Get_Reg(AFE_DL1_D2_BASE));
  509. n += scnprintf(buffer + n, size - n, "AFE_DL1_D2_CUR = 0x%x\n",
  510. Afe_Get_Reg(AFE_DL1_D2_CUR));
  511. n += scnprintf(buffer + n, size - n, "AFE_DL1_D2_END = 0x%x\n",
  512. Afe_Get_Reg(AFE_DL1_D2_END));
  513. n += scnprintf(buffer + n, size - n, "AFE_VUL_D2_BASE = 0x%x\n",
  514. Afe_Get_Reg(AFE_VUL_D2_BASE));
  515. n += scnprintf(buffer + n, size - n, "AFE_VUL_D2_END = 0x%x\n",
  516. Afe_Get_Reg(AFE_VUL_D2_END));
  517. n += scnprintf(buffer + n, size - n, "AFE_VUL_D2_CUR = 0x%x\n",
  518. Afe_Get_Reg(AFE_VUL_D2_CUR));
  519. n += scnprintf(buffer + n, size - n, "AFE_I2S_CON3 = 0x%x\n",
  520. Afe_Get_Reg(AFE_I2S_CON3));
  521. n += scnprintf(buffer + n, size - n, "AFE_DL2_BASE = 0x%x\n",
  522. Afe_Get_Reg(AFE_DL2_BASE));
  523. n += scnprintf(buffer + n, size - n, "AFE_DL2_CUR = 0x%x\n",
  524. Afe_Get_Reg(AFE_DL2_CUR));
  525. n += scnprintf(buffer + n, size - n, "AFE_DL2_END = 0x%x\n",
  526. Afe_Get_Reg(AFE_DL2_END));
  527. n += scnprintf(buffer + n, size - n, "AFE_CONN5 = 0x%x\n",
  528. Afe_Get_Reg(AFE_CONN5));
  529. n += scnprintf(buffer + n, size - n, "AFE_CONN_24BIT = 0x%x\n",
  530. Afe_Get_Reg(AFE_CONN_24BIT));
  531. n += scnprintf(buffer + n, size - n, "AFE_AWB_BASE = 0x%x\n",
  532. Afe_Get_Reg(AFE_AWB_BASE));
  533. n += scnprintf(buffer + n, size - n, "AFE_AWB_END = 0x%x\n",
  534. Afe_Get_Reg(AFE_AWB_END));
  535. n += scnprintf(buffer + n, size - n, "AFE_AWB_CUR = 0x%x\n",
  536. Afe_Get_Reg(AFE_AWB_CUR));
  537. n += scnprintf(buffer + n, size - n, "AFE_VUL_BASE = 0x%x\n",
  538. Afe_Get_Reg(AFE_VUL_BASE));
  539. n += scnprintf(buffer + n, size - n, "AFE_VUL_END = 0x%x\n",
  540. Afe_Get_Reg(AFE_VUL_END));
  541. n += scnprintf(buffer + n, size - n, "AFE_VUL_CUR = 0x%x\n",
  542. Afe_Get_Reg(AFE_VUL_CUR));
  543. n += scnprintf(buffer + n, size - n, "AFE_DAI_BASE = 0x%x\n",
  544. Afe_Get_Reg(AFE_DAI_BASE));
  545. n += scnprintf(buffer + n, size - n, "AFE_DAI_END = 0x%x\n",
  546. Afe_Get_Reg(AFE_DAI_END));
  547. n += scnprintf(buffer + n, size - n, "AFE_DAI_CUR = 0x%x\n",
  548. Afe_Get_Reg(AFE_DAI_CUR));
  549. n += scnprintf(buffer + n, size - n, "AFE_CONN6 = 0x%x\n",
  550. Afe_Get_Reg(AFE_CONN6));
  551. n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MSB = 0x%x\n",
  552. Afe_Get_Reg(AFE_MEMIF_MSB));
  553. n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON0 = 0x%x\n",
  554. Afe_Get_Reg(AFE_MEMIF_MON0));
  555. n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON1 = 0x%x\n",
  556. Afe_Get_Reg(AFE_MEMIF_MON1));
  557. n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON2 = 0x%x\n",
  558. Afe_Get_Reg(AFE_MEMIF_MON2));
  559. n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MON4 = 0x%x\n",
  560. Afe_Get_Reg(AFE_MEMIF_MON4));
  561. n += scnprintf(buffer + n, size - n, "AFE_ADDA_DL_SRC2_CON0 = 0x%x\n",
  562. Afe_Get_Reg(AFE_ADDA_DL_SRC2_CON0));
  563. n += scnprintf(buffer + n, size - n, "AFE_ADDA_DL_SRC2_CON1 = 0x%x\n",
  564. Afe_Get_Reg(AFE_ADDA_DL_SRC2_CON1));
  565. n += scnprintf(buffer + n, size - n, "AFE_ADDA_UL_SRC_CON0 = 0x%x\n",
  566. Afe_Get_Reg(AFE_ADDA_UL_SRC_CON0));
  567. n += scnprintf(buffer + n, size - n, "AFE_ADDA_UL_SRC_CON1 = 0x%x\n",
  568. Afe_Get_Reg(AFE_ADDA_UL_SRC_CON1));
  569. n += scnprintf(buffer + n, size - n, "AFE_ADDA_TOP_CON0 = 0x%x\n",
  570. Afe_Get_Reg(AFE_ADDA_TOP_CON0));
  571. n += scnprintf(buffer + n, size - n, "AFE_ADDA_UL_DL_CON0 = 0x%x\n",
  572. Afe_Get_Reg(AFE_ADDA_UL_DL_CON0));
  573. n += scnprintf(buffer + n, size - n, "AFE_ADDA_SRC_DEBUG = 0x%x\n",
  574. Afe_Get_Reg(AFE_ADDA_SRC_DEBUG));
  575. n += scnprintf(buffer + n, size - n, "AFE_ADDA_SRC_DEBUG_MON0= 0x%x\n",
  576. Afe_Get_Reg(AFE_ADDA_SRC_DEBUG_MON0));
  577. n += scnprintf(buffer + n, size - n, "AFE_ADDA_SRC_DEBUG_MON1= 0x%x\n",
  578. Afe_Get_Reg(AFE_ADDA_SRC_DEBUG_MON1));
  579. n += scnprintf(buffer + n, size - n, "AFE_ADDA_NEWIF_CFG0 = 0x%x\n",
  580. Afe_Get_Reg(AFE_ADDA_NEWIF_CFG0));
  581. n += scnprintf(buffer + n, size - n, "AFE_ADDA_NEWIF_CFG1 = 0x%x\n",
  582. Afe_Get_Reg(AFE_ADDA_NEWIF_CFG1));
  583. n += scnprintf(buffer + n, size - n, "AFE_SIDETONE_DEBUG = 0x%x\n",
  584. Afe_Get_Reg(AFE_SIDETONE_DEBUG));
  585. n += scnprintf(buffer + n, size - n, "AFE_SIDETONE_MON = 0x%x\n",
  586. Afe_Get_Reg(AFE_SIDETONE_MON));
  587. n += scnprintf(buffer + n, size - n, "AFE_SIDETONE_CON0 = 0x%x\n",
  588. Afe_Get_Reg(AFE_SIDETONE_CON0));
  589. n += scnprintf(buffer + n, size - n, "AFE_SIDETONE_COEFF = 0x%x\n",
  590. Afe_Get_Reg(AFE_SIDETONE_COEFF));
  591. n += scnprintf(buffer + n, size - n, "AFE_SIDETONE_CON1 = 0x%x\n",
  592. Afe_Get_Reg(AFE_SIDETONE_CON1));
  593. n += scnprintf(buffer + n, size - n, "AFE_SIDETONE_GAIN = 0x%x\n",
  594. Afe_Get_Reg(AFE_SIDETONE_GAIN));
  595. n += scnprintf(buffer + n, size - n, "AFE_SGEN_CON0 = 0x%x\n",
  596. Afe_Get_Reg(AFE_SGEN_CON0));
  597. n += scnprintf(buffer + n, size - n, "AFE_TOP_CON0 = 0x%x\n",
  598. Afe_Get_Reg(AFE_TOP_CON0));
  599. n += scnprintf(buffer + n, size - n, "AFE_ADDA_PREDIS_CON0 = 0x%x\n",
  600. Afe_Get_Reg(AFE_ADDA_PREDIS_CON0));
  601. n += scnprintf(buffer + n, size - n, "AFE_ADDA_PREDIS_CON1 = 0x%x\n",
  602. Afe_Get_Reg(AFE_ADDA_PREDIS_CON1));
  603. n += scnprintf(buffer + n, size - n, "AFE_MRGIF_MON0 = 0x%x\n",
  604. Afe_Get_Reg(AFE_MRGIF_MON0));
  605. n += scnprintf(buffer + n, size - n, "AFE_MRGIF_MON1 = 0x%x\n",
  606. Afe_Get_Reg(AFE_MRGIF_MON1));
  607. n += scnprintf(buffer + n, size - n, "AFE_MRGIF_MON2 = 0x%x\n",
  608. Afe_Get_Reg(AFE_MRGIF_MON2));
  609. n += scnprintf(buffer + n, size - n, "AFE_MOD_DAI_BASE = 0x%x\n",
  610. Afe_Get_Reg(AFE_MOD_DAI_BASE));
  611. n += scnprintf(buffer + n, size - n, "AFE_MOD_DAI_END = 0x%x\n",
  612. Afe_Get_Reg(AFE_MOD_DAI_END));
  613. n += scnprintf(buffer + n, size - n, "AFE_MOD_DAI_CUR = 0x%x\n",
  614. Afe_Get_Reg(AFE_MOD_DAI_CUR));
  615. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CON = 0x%x\n",
  616. Afe_Get_Reg(AFE_IRQ_MCU_CON));
  617. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_STATUS = 0x%x\n",
  618. Afe_Get_Reg(AFE_IRQ_MCU_STATUS));
  619. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CLR = 0x%x\n",
  620. Afe_Get_Reg(AFE_IRQ_MCU_CLR));
  621. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CNT1 = 0x%x\n",
  622. Afe_Get_Reg(AFE_IRQ_MCU_CNT1));
  623. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CNT2 = 0x%x\n",
  624. Afe_Get_Reg(AFE_IRQ_MCU_CNT2));
  625. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_EN = 0x%x\n",
  626. Afe_Get_Reg(AFE_IRQ_MCU_EN));
  627. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_MON2 = 0x%x\n",
  628. Afe_Get_Reg(AFE_IRQ_MCU_MON2));
  629. n += scnprintf(buffer + n, size - n, "AFE_IRQ_CNT5 = 0x%x\n",
  630. Afe_Get_Reg(AFE_IRQ_CNT5));
  631. n += scnprintf(buffer + n, size - n, "AFE_IRQ1_MCU_CNT_MON = 0x%x\n",
  632. Afe_Get_Reg(AFE_IRQ1_MCU_CNT_MON));
  633. n += scnprintf(buffer + n, size - n, "AFE_IRQ2_MCU_CNT_MON = 0x%x\n",
  634. Afe_Get_Reg(AFE_IRQ2_MCU_CNT_MON));
  635. n += scnprintf(buffer + n, size - n, "AFE_IRQ1_MCU_EN_CNT_MON= 0x%x\n",
  636. Afe_Get_Reg(AFE_IRQ1_MCU_EN_CNT_MON));
  637. n += scnprintf(buffer + n, size - n, "AFE_IRQ_DEBUG = 0x%x\n",
  638. Afe_Get_Reg(AFE_IRQ_DEBUG));
  639. n += scnprintf(buffer + n, size - n, "AFE_MEMIF_MAXLEN = 0x%x\n",
  640. Afe_Get_Reg(AFE_MEMIF_MAXLEN));
  641. n += scnprintf(buffer + n, size - n, "AFE_MEMIF_PBUF_SIZE = 0x%x\n",
  642. Afe_Get_Reg(AFE_MEMIF_PBUF_SIZE));
  643. n += scnprintf(buffer + n, size - n, "AFE_IRQ_MCU_CNT7 = 0x%x\n",
  644. Afe_Get_Reg(AFE_IRQ_MCU_CNT7));
  645. n += scnprintf(buffer + n, size - n, "AFE_APLL1_TUNER_CFG = 0x%x\n",
  646. Afe_Get_Reg(AFE_APLL1_TUNER_CFG));
  647. n += scnprintf(buffer + n, size - n, "AFE_APLL2_TUNER_CFG = 0x%x\n",
  648. Afe_Get_Reg(AFE_APLL2_TUNER_CFG));
  649. n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CON0 = 0x%x\n",
  650. Afe_Get_Reg(AFE_GAIN1_CON0));
  651. n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CON1 = 0x%x\n",
  652. Afe_Get_Reg(AFE_GAIN1_CON1));
  653. n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CON2 = 0x%x\n",
  654. Afe_Get_Reg(AFE_GAIN1_CON2));
  655. n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CON3 = 0x%x\n",
  656. Afe_Get_Reg(AFE_GAIN1_CON3));
  657. n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CONN = 0x%x\n",
  658. Afe_Get_Reg(AFE_GAIN1_CONN));
  659. n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CUR = 0x%x\n",
  660. Afe_Get_Reg(AFE_GAIN1_CUR));
  661. n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CON0 = 0x%x\n",
  662. Afe_Get_Reg(AFE_GAIN2_CON0));
  663. n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CON1 = 0x%x\n",
  664. Afe_Get_Reg(AFE_GAIN2_CON1));
  665. n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CON2 = 0x%x\n",
  666. Afe_Get_Reg(AFE_GAIN2_CON2));
  667. n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CON3 = 0x%x\n",
  668. Afe_Get_Reg(AFE_GAIN2_CON3));
  669. n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CONN = 0x%x\n",
  670. Afe_Get_Reg(AFE_GAIN2_CONN));
  671. n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CUR = 0x%x\n",
  672. Afe_Get_Reg(AFE_GAIN2_CUR));
  673. n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CONN2 = 0x%x\n",
  674. Afe_Get_Reg(AFE_GAIN2_CONN2));
  675. n += scnprintf(buffer + n, size - n, "AFE_GAIN2_CONN3 = 0x%x\n",
  676. Afe_Get_Reg(AFE_GAIN2_CONN3));
  677. n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CONN2 = 0x%x\n",
  678. Afe_Get_Reg(AFE_GAIN1_CONN2));
  679. n += scnprintf(buffer + n, size - n, "AFE_GAIN1_CONN3 = 0x%x\n",
  680. Afe_Get_Reg(AFE_GAIN1_CONN3));
  681. n += scnprintf(buffer + n, size - n, "AFE_CONN7 = 0x%x\n",
  682. Afe_Get_Reg(AFE_CONN7));
  683. n += scnprintf(buffer + n, size - n, "AFE_CONN8 = 0x%x\n",
  684. Afe_Get_Reg(AFE_CONN8));
  685. n += scnprintf(buffer + n, size - n, "AFE_CONN9 = 0x%x\n",
  686. Afe_Get_Reg(AFE_CONN9));
  687. n += scnprintf(buffer + n, size - n, "AFE_CONN10 = 0x%x\n",
  688. Afe_Get_Reg(AFE_CONN10));
  689. n += scnprintf(buffer + n, size - n, "FPGA_CFG0 = 0x%x\n",
  690. Afe_Get_Reg(FPGA_CFG0));
  691. n += scnprintf(buffer + n, size - n, "FPGA_CFG1 = 0x%x\n",
  692. Afe_Get_Reg(FPGA_CFG1));
  693. n += scnprintf(buffer + n, size - n, "FPGA_VER = 0x%x\n",
  694. Afe_Get_Reg(FPGA_VER));
  695. n += scnprintf(buffer + n, size - n, "FPGA_STC = 0x%x\n",
  696. Afe_Get_Reg(FPGA_STC));
  697. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON0 = 0x%x\n",
  698. Afe_Get_Reg(AFE_ASRC_CON0));
  699. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON1 = 0x%x\n",
  700. Afe_Get_Reg(AFE_ASRC_CON1));
  701. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON2 = 0x%x\n",
  702. Afe_Get_Reg(AFE_ASRC_CON2));
  703. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON3 = 0x%x\n",
  704. Afe_Get_Reg(AFE_ASRC_CON3));
  705. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON4 = 0x%x\n",
  706. Afe_Get_Reg(AFE_ASRC_CON4));
  707. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON5 = 0x%x\n",
  708. Afe_Get_Reg(AFE_ASRC_CON5));
  709. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON6 = 0x%x\n",
  710. Afe_Get_Reg(AFE_ASRC_CON6));
  711. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON7 = 0x%x\n",
  712. Afe_Get_Reg(AFE_ASRC_CON7));
  713. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON8 = 0x%x\n",
  714. Afe_Get_Reg(AFE_ASRC_CON8));
  715. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON9 = 0x%x\n",
  716. Afe_Get_Reg(AFE_ASRC_CON9));
  717. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON10 = 0x%x\n",
  718. Afe_Get_Reg(AFE_ASRC_CON10));
  719. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON11 = 0x%x\n",
  720. Afe_Get_Reg(AFE_ASRC_CON11));
  721. n += scnprintf(buffer + n, size - n, "PCM_INTF_CON = 0x%x\n",
  722. Afe_Get_Reg(PCM_INTF_CON));
  723. n += scnprintf(buffer + n, size - n, "PCM_INTF_CON2 = 0x%x\n",
  724. Afe_Get_Reg(PCM_INTF_CON2));
  725. n += scnprintf(buffer + n, size - n, "PCM2_INTF_CON = 0x%x\n",
  726. Afe_Get_Reg(PCM2_INTF_CON));
  727. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON13 = 0x%x\n",
  728. Afe_Get_Reg(AFE_ASRC_CON13));
  729. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON14 = 0x%x\n",
  730. Afe_Get_Reg(AFE_ASRC_CON14));
  731. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON15 = 0x%x\n",
  732. Afe_Get_Reg(AFE_ASRC_CON15));
  733. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON16 = 0x%x\n",
  734. Afe_Get_Reg(AFE_ASRC_CON16));
  735. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON17 = 0x%x\n",
  736. Afe_Get_Reg(AFE_ASRC_CON17));
  737. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON18 = 0x%x\n",
  738. Afe_Get_Reg(AFE_ASRC_CON18));
  739. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON19 = 0x%x\n",
  740. Afe_Get_Reg(AFE_ASRC_CON19));
  741. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON20 = 0x%x\n",
  742. Afe_Get_Reg(AFE_ASRC_CON20));
  743. n += scnprintf(buffer + n, size - n, "AFE_ASRC_CON21 = 0x%x\n",
  744. Afe_Get_Reg(AFE_ASRC_CON21));
  745. n += scnprintf(buffer + n, size - n, "AFE_ASRC4_CON0 = 0x%x\n",
  746. Afe_Get_Reg(AFE_ASRC4_CON0));
  747. n += scnprintf(buffer + n, size - n, "AFE_ASRC4_CON1 = 0x%x\n",
  748. Afe_Get_Reg(AFE_ASRC4_CON1));
  749. n += scnprintf(buffer + n, size - n, "AFE_ASRC4_CON2 = 0x%x\n",
  750. Afe_Get_Reg(AFE_ASRC4_CON2));
  751. n += scnprintf(buffer + n, size - n, "AFE_ASRC4_CON3 = 0x%x\n",
  752. Afe_Get_Reg(AFE_ASRC4_CON3));
  753. n += scnprintf(buffer + n, size - n, "AFE_ASRC4_CON4 = 0x%x\n",
  754. Afe_Get_Reg(AFE_ASRC4_CON4));
  755. n += scnprintf(buffer + n, size - n, "AFE_ASRC4_CON5 = 0x%x\n",
  756. Afe_Get_Reg(AFE_ASRC4_CON5));
  757. n += scnprintf(buffer + n, size - n, "AFE_ASRC4_CON6 = 0x%x\n",
  758. Afe_Get_Reg(AFE_ASRC4_CON6));
  759. n += scnprintf(buffer + n, size - n, "AFE_ASRC4_CON7 = 0x%x\n",
  760. Afe_Get_Reg(AFE_ASRC4_CON7));
  761. n += scnprintf(buffer + n, size - n, "AFE_ASRC4_CON8 = 0x%x\n",
  762. Afe_Get_Reg(AFE_ASRC4_CON8));
  763. n += scnprintf(buffer + n, size - n, "AFE_ASRC4_CON9 = 0x%x\n",
  764. Afe_Get_Reg(AFE_ASRC4_CON9));
  765. n += scnprintf(buffer + n, size - n, "AFE_ASRC4_CON10 = 0x%x\n",
  766. Afe_Get_Reg(AFE_ASRC4_CON10));
  767. n += scnprintf(buffer + n, size - n, "AFE_ASRC4_CON11 = 0x%x\n",
  768. Afe_Get_Reg(AFE_ASRC4_CON11));
  769. n += scnprintf(buffer + n, size - n, "AFE_ASRC4_CON12 = 0x%x\n",
  770. Afe_Get_Reg(AFE_ASRC4_CON12));
  771. n += scnprintf(buffer + n, size - n, "AFE_ASRC4_CON13 = 0x%x\n",
  772. Afe_Get_Reg(AFE_ASRC4_CON13));
  773. n += scnprintf(buffer + n, size - n, "AFE_ASRC4_CON14 = 0x%x\n",
  774. Afe_Get_Reg(AFE_ASRC4_CON14));
  775. n += scnprintf(buffer + n, size - n, "AUDIO_CLK_AUDDIV_0 = 0x%x\n",
  776. Afe_Get_Reg(AUDIO_CLK_AUDDIV_0));
  777. n += scnprintf(buffer + n, size - n, "AUDIO_CLK_AUDDIV_1 = 0x%x\n",
  778. Afe_Get_Reg(AUDIO_CLK_AUDDIV_1));
  779. pr_debug("mt_soc_debug_read len = %d\n", n);
  780. AudDrv_Clk_Off();
  781. ret = simple_read_from_buffer(buf, count, pos, buffer, n);
  782. kfree(buffer);
  783. return ret;
  784. }
  785. static char const ParSetkeyAfe[] = "Setafereg";
  786. static char const ParSetkeyAna[] = "Setanareg";
  787. static char const ParSetkeyCfg[] = "Setcfgreg";
  788. static char const PareGetkeyAfe[] = "Getafereg";
  789. static char const PareGetkeyAna[] = "Getanareg";
  790. /* static char ParGetkeyCfg[] = "Getcfgreg"; */
  791. /* static char ParSetAddr[] = "regaddr"; */
  792. /* static char ParSetValue[] = "regvalue"; */
  793. static ssize_t mt_soc_debug_write(struct file *f, const char __user *buf,
  794. size_t count, loff_t *offset)
  795. {
  796. int ret = 0;
  797. char InputString[256];
  798. char *token1 = NULL;
  799. char *token2 = NULL;
  800. char *token3 = NULL;
  801. char *token4 = NULL;
  802. char *token5 = NULL;
  803. char *temp = NULL;
  804. unsigned int long regaddr = 0;
  805. unsigned int long regvalue = 0;
  806. char delim[] = " ,";
  807. memset((void *)InputString, 0, 256);
  808. if (copy_from_user((InputString), buf, count))
  809. pr_debug("copy_from_user mt_soc_debug_write count = %zu temp = %s\n", count,
  810. InputString);
  811. temp = kstrdup(InputString, GFP_KERNEL);
  812. pr_debug("copy_from_user mt_soc_debug_write count = %zu temp = %s pointer = %p\n",
  813. count, InputString, InputString);
  814. token1 = strsep(&temp, delim);
  815. pr_debug("token1\n");
  816. pr_debug("token1 = %s\n", token1);
  817. token2 = strsep(&temp, delim);
  818. pr_debug("token2 = %s\n", token2);
  819. token3 = strsep(&temp, delim);
  820. pr_debug("token3 = %s\n", token3);
  821. token4 = strsep(&temp, delim);
  822. pr_debug("token4 = %s\n", token4);
  823. token5 = strsep(&temp, delim);
  824. pr_debug("token5 = %s\n", token5);
  825. AudDrv_Clk_On();
  826. if (strcmp(token1, ParSetkeyAfe) == 0) {
  827. pr_debug("strcmp (token1,ParSetkeyAfe)\n");
  828. ret = kstrtoul(token3, 16, &regaddr);
  829. ret = kstrtoul(token5, 16, &regvalue);
  830. pr_debug("%s regaddr = 0x%lu regvalue = 0x%lu\n", ParSetkeyAfe, regaddr, regvalue);
  831. Afe_Set_Reg(regaddr, regvalue, 0xffffffff);
  832. regvalue = Afe_Get_Reg(regaddr);
  833. pr_debug("%s regaddr = 0x%lu regvalue = 0x%lu\n", ParSetkeyAfe, regaddr, regvalue);
  834. }
  835. if (strcmp(token1, ParSetkeyAna) == 0) {
  836. pr_debug("strcmp (token1,ParSetkeyAna)\n");
  837. ret = kstrtoul(token3, 16, &regaddr);
  838. ret = kstrtoul(token5, 16, &regvalue);
  839. pr_debug("%s regaddr = 0x%lu regvalue = 0x%lu\n", ParSetkeyAna, regaddr, regvalue);
  840. /* clk_buf_ctrl(CLK_BUF_AUDIO, true); //6752 need? */
  841. audckbufEnable(true);
  842. Ana_Set_Reg(regaddr, regvalue, 0xffffffff);
  843. regvalue = Ana_Get_Reg(regaddr);
  844. audckbufEnable(false);
  845. pr_debug("%s regaddr = 0x%lu regvalue = 0x%lu\n", ParSetkeyAna, regaddr, regvalue);
  846. }
  847. if (strcmp(token1, ParSetkeyCfg) == 0) {
  848. pr_debug("strcmp (token1,ParSetkeyCfg)\n");
  849. ret = kstrtoul(token3, 16, &regaddr);
  850. ret = kstrtoul(token5, 16, &regvalue);
  851. pr_debug("%s regaddr = 0x%lu regvalue = 0x%lu\n", ParSetkeyCfg, regaddr, regvalue);
  852. SetClkCfg(regaddr, regvalue, 0xffffffff);
  853. regvalue = GetClkCfg(regaddr);
  854. pr_debug("%s regaddr = 0x%lu regvalue = 0x%lu\n", ParSetkeyCfg, regaddr, regvalue);
  855. }
  856. if (strcmp(token1, PareGetkeyAfe) == 0) {
  857. pr_debug("strcmp (token1,PareGetkeyAfe)\n");
  858. ret = kstrtoul(token3, 16, &regaddr);
  859. regvalue = Afe_Get_Reg(regaddr);
  860. pr_debug("%s regaddr = 0x%lu regvalue = 0x%lu\n", PareGetkeyAfe, regaddr, regvalue);
  861. }
  862. if (strcmp(token1, PareGetkeyAna) == 0) {
  863. pr_debug("strcmp (token1,PareGetkeyAna)\n");
  864. audckbufEnable(true);
  865. ret = kstrtoul(token3, 16, &regaddr);
  866. regvalue = Ana_Get_Reg(regaddr);
  867. audckbufEnable(false);
  868. pr_debug("%s regaddr = 0x%lu regvalue = 0x%lu\n", PareGetkeyAna, regaddr, regvalue);
  869. }
  870. AudDrv_Clk_Off();
  871. return count;
  872. }
  873. static const struct file_operations mtaudio_debug_ops = {
  874. .open = mt_soc_debug_open,
  875. .read = mt_soc_debug_read,
  876. .write = mt_soc_debug_write,
  877. };
  878. static const struct file_operations mtaudio_ana_debug_ops = {
  879. .open = mt_soc_ana_debug_open,
  880. .read = mt_soc_ana_debug_read,
  881. };
  882. /* Digital audio interface glue - connects codec <---> CPU */
  883. static struct snd_soc_dai_link mt_soc_dai_common[] = {
  884. /* FrontEnd DAI Links */
  885. {
  886. .name = "MultiMedia1",
  887. .stream_name = MT_SOC_DL1_STREAM_NAME,
  888. .cpu_dai_name = MT_SOC_DL1DAI_NAME,
  889. .platform_name = MT_SOC_DL1_PCM,
  890. .codec_dai_name = MT_SOC_CODEC_TXDAI_NAME,
  891. .codec_name = MT_SOC_CODEC_NAME,
  892. .init = mt_soc_audio_init,
  893. .ops = &mt_machine_audio_ops,
  894. },
  895. {
  896. .name = "MultiMedia2",
  897. .stream_name = MT_SOC_UL1_STREAM_NAME,
  898. .cpu_dai_name = MT_SOC_UL1DAI_NAME,
  899. .platform_name = MT_SOC_UL1_PCM,
  900. .codec_dai_name = MT_SOC_CODEC_RXDAI_NAME,
  901. .codec_name = MT_SOC_CODEC_NAME,
  902. .init = mt_soc_audio_init,
  903. .ops = &mt_machine_audio_ops,
  904. },
  905. {
  906. .name = "Voice_MD1",
  907. .stream_name = MT_SOC_VOICE_MD1_STREAM_NAME,
  908. .cpu_dai_name = MT_SOC_VOICE_MD1_NAME,
  909. .platform_name = MT_SOC_VOICE_MD1,
  910. .codec_dai_name = MT_SOC_CODEC_VOICE_MD1DAI_NAME,
  911. .codec_name = MT_SOC_CODEC_NAME,
  912. .init = mt_soc_audio_init,
  913. .ops = &mt_machine_audio_ops,
  914. },
  915. {
  916. .name = "HDMI_OUT",
  917. .stream_name = MT_SOC_HDMI_STREAM_NAME,
  918. .cpu_dai_name = MT_SOC_HDMI_NAME,
  919. .platform_name = MT_SOC_HDMI_PCM,
  920. .codec_dai_name = MT_SOC_CODEC_HDMI_DUMMY_DAI_NAME,
  921. .codec_name = MT_SOC_CODEC_DUMMY_NAME,
  922. .init = mt_soc_audio_init,
  923. .ops = &mt_machine_audio_ops,
  924. },
  925. {
  926. .name = "ULDLOOPBACK",
  927. .stream_name = MT_SOC_ULDLLOOPBACK_STREAM_NAME,
  928. .cpu_dai_name = MT_SOC_ULDLLOOPBACK_NAME,
  929. .platform_name = MT_SOC_ULDLLOOPBACK_PCM,
  930. .codec_dai_name = MT_SOC_CODEC_ULDLLOOPBACK_NAME,
  931. .codec_name = MT_SOC_CODEC_NAME,
  932. .init = mt_soc_audio_init,
  933. .ops = &mt_machine_audio_ops,
  934. },
  935. {
  936. .name = "I2S0OUTPUT",
  937. .stream_name = MT_SOC_I2S0_STREAM_NAME,
  938. .cpu_dai_name = MT_SOC_I2S0_NAME,
  939. .platform_name = MT_SOC_I2S0_PCM,
  940. .codec_dai_name = MT_SOC_CODEC_I2S0_DUMMY_DAI_NAME,
  941. .codec_name = MT_SOC_CODEC_DUMMY_NAME,
  942. .init = mt_soc_audio_init,
  943. .ops = &mt_machine_audio_ops,
  944. },
  945. {
  946. .name = "MRGRX",
  947. .stream_name = MT_SOC_MRGRX_STREAM_NAME,
  948. .cpu_dai_name = MT_SOC_MRGRX_NAME,
  949. .platform_name = MT_SOC_MRGRX_PCM,
  950. .codec_dai_name = MT_SOC_CODEC_MRGRX_DAI_NAME,
  951. .codec_name = MT_SOC_CODEC_NAME,
  952. .init = mt_soc_audio_init,
  953. .ops = &mt_machine_audio_ops,
  954. },
  955. {
  956. .name = "MRGRXCAPTURE",
  957. .stream_name = MT_SOC_MRGRX_CAPTURE_STREAM_NAME,
  958. .cpu_dai_name = MT_SOC_MRGRX_NAME,
  959. .platform_name = MT_SOC_MRGRX_AWB_PCM,
  960. .codec_dai_name = MT_SOC_CODEC_MRGRX_DUMMY_DAI_NAME,
  961. .codec_name = MT_SOC_CODEC_DUMMY_NAME,
  962. .init = mt_soc_audio_init,
  963. .ops = &mt_machine_audio_ops,
  964. },
  965. {
  966. .name = "I2S0DL1OUTPUT",
  967. .stream_name = MT_SOC_I2SDL1_STREAM_NAME,
  968. .cpu_dai_name = MT_SOC_I2S0DL1_NAME,
  969. .platform_name = MT_SOC_I2S0DL1_PCM,
  970. .codec_dai_name = MT_SOC_CODEC_I2S0TXDAI_NAME,
  971. .codec_name = MT_SOC_CODEC_NAME,
  972. .init = mt_soc_audio_init,
  973. .ops = &mt_machine_audio_ops,
  974. },
  975. {
  976. .name = "DL1AWBCAPTURE",
  977. .stream_name = MT_SOC_DL1_AWB_RECORD_STREAM_NAME,
  978. .cpu_dai_name = MT_SOC_DL1AWB_NAME,
  979. .platform_name = MT_SOC_DL1_AWB_PCM,
  980. .codec_dai_name = MT_SOC_CODEC_DL1AWBDAI_NAME,
  981. .codec_name = MT_SOC_CODEC_DUMMY_NAME,
  982. .init = mt_soc_audio_init,
  983. .ops = &mt_machine_audio_ops,
  984. },
  985. {
  986. .name = "Voice_MD1_BT",
  987. .stream_name = MT_SOC_VOICE_MD1_BT_STREAM_NAME,
  988. .cpu_dai_name = MT_SOC_VOICE_MD1_BT_NAME,
  989. .platform_name = MT_SOC_VOICE_MD1_BT,
  990. .codec_dai_name = MT_SOC_CODEC_VOICE_MD1_BTDAI_NAME,
  991. .codec_name = MT_SOC_CODEC_DUMMY_NAME,
  992. .init = mt_soc_audio_init,
  993. .ops = &mt_machine_audio_ops,
  994. },
  995. {
  996. .name = "VOIP_CALL_BT_PLAYBACK",
  997. .stream_name = MT_SOC_VOIP_BT_OUT_STREAM_NAME,
  998. .cpu_dai_name = MT_SOC_VOIP_CALL_BT_OUT_NAME,
  999. .platform_name = MT_SOC_VOIP_BT_OUT,
  1000. .codec_dai_name = MT_SOC_CODEC_VOIPCALLBTOUTDAI_NAME,
  1001. .codec_name = MT_SOC_CODEC_DUMMY_NAME,
  1002. .init = mt_soc_audio_init,
  1003. .ops = &mt_machine_audio_ops,
  1004. },
  1005. {
  1006. .name = "VOIP_CALL_BT_CAPTURE",
  1007. .stream_name = MT_SOC_VOIP_BT_IN_STREAM_NAME,
  1008. .cpu_dai_name = MT_SOC_VOIP_CALL_BT_IN_NAME,
  1009. .platform_name = MT_SOC_VOIP_BT_IN,
  1010. .codec_dai_name = MT_SOC_CODEC_VOIPCALLBTINDAI_NAME,
  1011. .codec_name = MT_SOC_CODEC_DUMMY_NAME,
  1012. .init = mt_soc_audio_init,
  1013. .ops = &mt_machine_audio_ops,
  1014. },
  1015. {
  1016. .name = "TDM_Debug_CAPTURE",
  1017. .stream_name = MT_SOC_TDM_CAPTURE_STREAM_NAME,
  1018. .cpu_dai_name = MT_SOC_TDMRX_NAME,
  1019. .platform_name = MT_SOC_TDMRX_PCM,
  1020. .codec_dai_name = MT_SOC_CODEC_TDMRX_DAI_NAME,
  1021. .codec_name = MT_SOC_CODEC_DUMMY_NAME,
  1022. .init = mt_soc_audio_init,
  1023. .ops = &mt_machine_audio_ops,
  1024. },
  1025. {
  1026. .name = "FM_MRG_TX",
  1027. .stream_name = MT_SOC_FM_MRGTX_STREAM_NAME,
  1028. .cpu_dai_name = MT_SOC_FM_MRGTX_NAME,
  1029. .platform_name = MT_SOC_FM_MRGTX_PCM,
  1030. .codec_dai_name = MT_SOC_CODEC_FMMRGTXDAI_DUMMY_DAI_NAME,
  1031. .codec_name = MT_SOC_CODEC_DUMMY_NAME,
  1032. .init = mt_soc_audio_init,
  1033. .ops = &mt_machine_audio_ops,
  1034. },
  1035. {
  1036. .name = "MultiMedia3",
  1037. .stream_name = MT_SOC_UL1DATA2_STREAM_NAME,
  1038. .cpu_dai_name = MT_SOC_UL2DAI_NAME,
  1039. .platform_name = MT_SOC_UL2_PCM,
  1040. .codec_dai_name = MT_SOC_CODEC_RXDAI2_NAME,
  1041. .codec_name = MT_SOC_CODEC_NAME,
  1042. .init = mt_soc_audio_init,
  1043. .ops = &mt_machine_audio_ops,
  1044. },
  1045. {
  1046. .name = "I2S0_AWB_CAPTURE",
  1047. .stream_name = MT_SOC_I2S0AWB_STREAM_NAME,
  1048. .cpu_dai_name = MT_SOC_I2S0AWBDAI_NAME,
  1049. .platform_name = MT_SOC_I2S0_AWB_PCM,
  1050. .codec_dai_name = MT_SOC_CODEC_I2S0AWB_NAME,
  1051. .codec_name = MT_SOC_CODEC_DUMMY_NAME,
  1052. .init = mt_soc_audio_init,
  1053. .ops = &mt_machine_audio_ops,
  1054. },
  1055. {
  1056. .name = "Voice_MD2",
  1057. .stream_name = MT_SOC_VOICE_MD2_STREAM_NAME,
  1058. .cpu_dai_name = MT_SOC_VOICE_MD2_NAME,
  1059. .platform_name = MT_SOC_VOICE_MD2,
  1060. .codec_dai_name = MT_SOC_CODEC_VOICE_MD2DAI_NAME,
  1061. .codec_name = MT_SOC_CODEC_NAME,
  1062. .init = mt_soc_audio_init,
  1063. .ops = &mt_machine_audio_ops,
  1064. },
  1065. {
  1066. .name = "PLATOFRM_CONTROL",
  1067. .stream_name = MT_SOC_ROUTING_STREAM_NAME,
  1068. .cpu_dai_name = MT_SOC_ROUTING_DAI_NAME,
  1069. .platform_name = MT_SOC_ROUTING_PCM,
  1070. .codec_dai_name = MT_SOC_CODEC_DUMMY_DAI_NAME,
  1071. .codec_name = MT_SOC_CODEC_DUMMY_NAME,
  1072. .init = mt_soc_audio_init2,
  1073. .ops = &mtmachine_audio_ops2,
  1074. },
  1075. {
  1076. .name = "Voice_MD2_BT",
  1077. .stream_name = MT_SOC_VOICE_MD2_BT_STREAM_NAME,
  1078. .cpu_dai_name = MT_SOC_VOICE_MD2_BT_NAME,
  1079. .platform_name = MT_SOC_VOICE_MD2_BT,
  1080. .codec_dai_name = MT_SOC_CODEC_VOICE_MD2_BTDAI_NAME,
  1081. .codec_name = MT_SOC_CODEC_DUMMY_NAME,
  1082. .init = mt_soc_audio_init,
  1083. .ops = &mt_machine_audio_ops,
  1084. },
  1085. {
  1086. .name = "HP_IMPEDANCE",
  1087. .stream_name = MT_SOC_HP_IMPEDANCE_STREAM_NAME,
  1088. .cpu_dai_name = MT_SOC_HP_IMPEDANCE_NAME,
  1089. .platform_name = MT_SOC_HP_IMPEDANCE_PCM,
  1090. .codec_dai_name = MT_SOC_CODEC_HP_IMPEDANCE_NAME,
  1091. .codec_name = MT_SOC_CODEC_NAME,
  1092. .init = mt_soc_audio_init,
  1093. .ops = &mt_machine_audio_ops,
  1094. },
  1095. {
  1096. .name = "FM_I2S_RX_Playback",
  1097. .stream_name = MT_SOC_FM_I2S_PLAYBACK_STREAM_NAME,
  1098. .cpu_dai_name = MT_SOC_FM_I2S_NAME,
  1099. .platform_name = MT_SOC_FM_I2S_PCM,
  1100. .codec_dai_name = MT_SOC_CODEC_FM_I2S_DAI_NAME,
  1101. .codec_name = MT_SOC_CODEC_NAME,
  1102. .init = mt_soc_audio_init,
  1103. .ops = &mt_machine_audio_ops,
  1104. },
  1105. {
  1106. .name = "FM_I2S_RX_Capture",
  1107. .stream_name = MT_SOC_FM_I2S_CAPTURE_STREAM_NAME,
  1108. .cpu_dai_name = MT_SOC_FM_I2S_NAME,
  1109. .platform_name = MT_SOC_FM_I2S_AWB_PCM,
  1110. .codec_dai_name = MT_SOC_CODEC_FM_I2S_DUMMY_DAI_NAME,
  1111. .codec_name = MT_SOC_CODEC_DUMMY_NAME,
  1112. .init = mt_soc_audio_init,
  1113. .ops = &mt_machine_audio_ops,
  1114. },
  1115. {
  1116. .name = "OFFLOAD_GDMA_OUT",
  1117. .stream_name = MT_SOC_OFFLOAD_GDMA_STREAM_NAME,
  1118. .cpu_dai_name = MT_SOC_OFFLOAD_GDMA_NAME,
  1119. .platform_name = MT_SOC_OFFLOAD_GDMA_PCM,
  1120. .codec_dai_name = MT_SOC_CODEC_OFFLOAD_GDMA_DAI_NAME,
  1121. .codec_name = MT_SOC_CODEC_DUMMY_NAME,
  1122. .init = mt_soc_audio_init,
  1123. /* .ops = &mt_machine_audio_ops, */
  1124. .compr_ops = &mt_machine_audio_compr_ops,
  1125. },
  1126. {
  1127. .name = "MultiMedia_DL2",
  1128. .stream_name = MT_SOC_DL2_STREAM_NAME,
  1129. .cpu_dai_name = MT_SOC_DL2DAI_NAME,
  1130. .platform_name = MT_SOC_DL2_PCM,
  1131. .codec_dai_name = MT_SOC_CODEC_TXDAI2_NAME,
  1132. .codec_name = MT_SOC_CODEC_NAME,
  1133. .init = mt_soc_audio_init,
  1134. .ops = &mt_machine_audio_ops,
  1135. },
  1136. #ifdef CONFIG_MTK_BTCVSD_ALSA
  1137. {
  1138. .name = "BTCVSD_RX",
  1139. .stream_name = MT_SOC_BTCVSD_CAPTURE_STREAM_NAME,
  1140. .cpu_dai_name = MT_SOC_BTCVSD_RX_DAI_NAME,
  1141. .platform_name = MT_SOC_BTCVSD_RX_PCM,
  1142. .codec_dai_name = MT_SOC_CODEC_BTCVSD_RX_DAI_NAME,
  1143. .codec_name = MT_SOC_CODEC_DUMMY_NAME,
  1144. .init = mt_soc_audio_init,
  1145. .ops = &mt_machine_audio_ops,
  1146. },
  1147. {
  1148. .name = "BTCVSD_TX",
  1149. .stream_name = MT_SOC_BTCVSD_PLAYBACK_STREAM_NAME,
  1150. .cpu_dai_name = MT_SOC_BTCVSD_TX_DAI_NAME,
  1151. .platform_name = MT_SOC_BTCVSD_TX_PCM,
  1152. .codec_dai_name = MT_SOC_CODEC_BTCVSD_TX_DAI_NAME,
  1153. .codec_name = MT_SOC_CODEC_DUMMY_NAME,
  1154. .init = mt_soc_audio_init,
  1155. .ops = &mt_machine_audio_ops,
  1156. },
  1157. #endif
  1158. };
  1159. static const char const *I2S_low_jittermode[] = { "Off", "On" };
  1160. static const struct soc_enum mt_soc_machine_enum[] = {
  1161. SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(I2S_low_jittermode), I2S_low_jittermode),
  1162. };
  1163. static int mt6595_get_lowjitter(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
  1164. {
  1165. pr_debug("%s: mt_soc_lowjitter_control = %d\n", __func__, mt_soc_lowjitter_control);
  1166. ucontrol->value.integer.value[0] = mt_soc_lowjitter_control;
  1167. return 0;
  1168. }
  1169. static int mt6595_set_lowjitter(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
  1170. {
  1171. pr_debug("%s()\n", __func__);
  1172. mt_soc_lowjitter_control = ucontrol->value.integer.value[0];
  1173. return 0;
  1174. }
  1175. static const struct snd_kcontrol_new mt_soc_controls[] = {
  1176. SOC_ENUM_EXT("I2S low Jitter function", mt_soc_machine_enum[0], mt6595_get_lowjitter,
  1177. mt6595_set_lowjitter),
  1178. };
  1179. static struct snd_soc_card snd_soc_card_mt = {
  1180. .name = "mt-snd-card",
  1181. .dai_link = mt_soc_dai_common,
  1182. .num_links = ARRAY_SIZE(mt_soc_dai_common),
  1183. .controls = mt_soc_controls,
  1184. .num_controls = ARRAY_SIZE(mt_soc_controls),
  1185. };
  1186. static struct platform_device *mt_snd_device;
  1187. static int __init mt_soc_snd_init(void)
  1188. {
  1189. int ret;
  1190. struct snd_soc_card *card = &snd_soc_card_mt;
  1191. pr_debug("mt_soc_snd_init card addr = %p\n", card);
  1192. mt_snd_device = platform_device_alloc("soc-audio", -1);
  1193. if (!mt_snd_device) {
  1194. pr_err("mt6589_probe platform_device_alloc fail\n");
  1195. return -ENOMEM;
  1196. }
  1197. platform_set_drvdata(mt_snd_device, &snd_soc_card_mt);
  1198. ret = platform_device_add(mt_snd_device);
  1199. if (ret != 0) {
  1200. pr_err("mt_soc_snd_init goto put_device fail\n");
  1201. goto put_device;
  1202. }
  1203. pr_debug("mt_soc_snd_init dai_link = %p\n", snd_soc_card_mt.dai_link);
  1204. /* create debug file */
  1205. mt_sco_audio_debugfs = debugfs_create_file(DEBUG_FS_NAME,
  1206. S_IFREG | S_IRUGO, NULL, (void *)DEBUG_FS_NAME,
  1207. &mtaudio_debug_ops);
  1208. /* create analog debug file */
  1209. mt_sco_audio_debugfs = debugfs_create_file(DEBUG_ANA_FS_NAME,
  1210. S_IFREG | S_IRUGO, NULL,
  1211. (void *)DEBUG_ANA_FS_NAME,
  1212. &mtaudio_ana_debug_ops);
  1213. return 0;
  1214. put_device:
  1215. platform_device_put(mt_snd_device);
  1216. return ret;
  1217. }
  1218. static void __exit mt_soc_snd_exit(void)
  1219. {
  1220. platform_device_unregister(mt_snd_device);
  1221. }
  1222. module_init(mt_soc_snd_init);
  1223. module_exit(mt_soc_snd_exit);
  1224. /* Module information */
  1225. MODULE_AUTHOR("ChiPeng <chipeng.chang@mediatek.com>");
  1226. MODULE_DESCRIPTION("ALSA SoC driver ");
  1227. MODULE_LICENSE("GPL");
  1228. MODULE_ALIAS("platform:mt-snd-card");