mt_soc_machine.c 48 KB

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