PageRenderTime 172ms CodeModel.GetById 63ms RepoModel.GetById 5ms app.codeStats 0ms

/arch/arm/mach-msm/lge/board-thunderc-snd.c

https://bitbucket.org/sammyz/iscream_thunderc-2.6.35-rebase
C | 187 lines | 146 code | 16 blank | 25 comment | 0 complexity | 289c95b952e8a7e37a315f702240ef02 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0
  1. /* linux/arch/arm/mach-msm/lge/board-thunderc-snd.c
  2. *
  3. * Copyright (C) 2010 LGE.
  4. *
  5. * This software is licensed under the terms of the GNU General Public
  6. * License version 2, as published by the Free Software Foundation, and
  7. * may be copied, distributed, and modified under those terms.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. */
  14. #include <linux/kernel.h>
  15. #include <linux/init.h>
  16. #include <linux/platform_device.h>
  17. #include <mach/board.h>
  18. #include "board-thunderc.h"
  19. #define SND(desc, num) { .name = #desc, .id = num }
  20. static struct snd_endpoint snd_endpoints_list[] = {
  21. #if 0
  22. SND(HANDSET, 0),
  23. SND(MONO_HEADSET, 2),
  24. SND(HEADSET, 3),
  25. SND(SPEAKER, 6),
  26. SND(TTY_HEADSET, 8),
  27. SND(TTY_VCO, 9),
  28. SND(TTY_HCO, 10),
  29. SND(BT, 12),
  30. SND(IN_S_SADC_OUT_HANDSET, 16),
  31. SND(IN_S_SADC_OUT_SPEAKER_PHONE, 25),
  32. SND(NO_MIC_HEADSET, 26),
  33. SND(HEADSET_AND_SPEAKER,27),
  34. SND(SPEAKER_IN_CALL,28),
  35. SND(CURRENT,30)
  36. #else
  37. /* LGE_CHANGE_S, [junyoub.an] , 2010-02-12, Define sound device*/
  38. /* LGE_CHANGE_S [soocheol.heo@lge.com] 2010-08-22 for voice recognition*/
  39. SND(HANDSET, 5),
  40. SND(HEADSET_LOOPBACK, 1),
  41. SND(HEADSET, 2),
  42. SND(HEADSET_STEREO, 3),
  43. SND(SPEAKER, 0),
  44. SND(SPEAKER_IN_CALL, 6),
  45. SND(SPEAKER_RING, 7),
  46. SND(HEADSET_AND_SPEAKER, 7),
  47. SND(VOICE_RECORDER, 8),
  48. SND(FM_HEADSET, 9),
  49. SND(FM_SPEAKER, 10),
  50. SND(BT, 12),
  51. SND(TTY_HEADSET, 14),
  52. SND(TTY_VCO, 15),
  53. SND(TTY_HCO, 16),
  54. SND(TTY_HCO_SPEAKER, 17),
  55. SND(HANDSET_VR, 19),
  56. SND(HEADSET_VR, 20),
  57. SND(BT_VR, 22),
  58. SND(CURRENT, 29),
  59. /* LGE_CHANGE_E, [junyoub.an] , 2010-02-12, Define sound device*/
  60. #endif
  61. };
  62. #undef SND
  63. static struct msm_snd_endpoints msm_device_snd_endpoints = {
  64. .endpoints = snd_endpoints_list,
  65. .num = sizeof(snd_endpoints_list) / sizeof(struct snd_endpoint)
  66. };
  67. struct platform_device msm_device_snd = {
  68. .name = "msm_snd",
  69. .id = -1,
  70. .dev = {
  71. .platform_data = &msm_device_snd_endpoints
  72. },
  73. };
  74. /* LGE_CHANGE: [sungyoung.lee@lge.com] 2010-02-25, request by QCT */
  75. /* It is related that CASE 284824 which vdec_open failed */
  76. #if 1
  77. #define DEC0_FORMAT ((1<<MSM_ADSP_CODEC_AAC)|(1<<MSM_ADSP_CODEC_WMA)| \
  78. (1<<MSM_ADSP_CODEC_WMAPRO)|(1<<MSM_ADSP_CODEC_AMRWB)| \
  79. (1<<MSM_ADSP_CODEC_AMRNB)|(1<<MSM_ADSP_CODEC_WAV)| \
  80. (1<<MSM_ADSP_CODEC_ADPCM)|(1<<MSM_ADSP_CODEC_YADPCM)| \
  81. (1<<MSM_ADSP_CODEC_EVRC)|(1<<MSM_ADSP_CODEC_QCELP))
  82. #define DEC1_FORMAT ((1<<MSM_ADSP_CODEC_WAV)|(1<<MSM_ADSP_CODEC_ADPCM)| \
  83. (1<<MSM_ADSP_CODEC_YADPCM)|(1<<MSM_ADSP_CODEC_QCELP))
  84. #define DEC2_FORMAT ((1<<MSM_ADSP_CODEC_WAV)|(1<<MSM_ADSP_CODEC_ADPCM)| \
  85. (1<<MSM_ADSP_CODEC_YADPCM)|(1<<MSM_ADSP_CODEC_QCELP)| \
  86. (1<<MSM_ADSP_CODEC_MP3))
  87. #define DEC3_FORMAT ((1<<MSM_ADSP_CODEC_WAV)|(1<<MSM_ADSP_CODEC_ADPCM)| \
  88. (1<<MSM_ADSP_CODEC_YADPCM)|(1<<MSM_ADSP_CODEC_QCELP))
  89. #define DEC4_FORMAT (1<<MSM_ADSP_CODEC_MIDI)
  90. #else
  91. #define DEC0_FORMAT ((1<<MSM_ADSP_CODEC_MP3)| \
  92. (1<<MSM_ADSP_CODEC_AAC)|(1<<MSM_ADSP_CODEC_WMA)| \
  93. (1<<MSM_ADSP_CODEC_WMAPRO)|(1<<MSM_ADSP_CODEC_AMRWB)| \
  94. (1<<MSM_ADSP_CODEC_AMRNB)|(1<<MSM_ADSP_CODEC_WAV)| \
  95. (1<<MSM_ADSP_CODEC_ADPCM)|(1<<MSM_ADSP_CODEC_YADPCM)| \
  96. (1<<MSM_ADSP_CODEC_EVRC)|(1<<MSM_ADSP_CODEC_QCELP))
  97. #define DEC1_FORMAT ((1<<MSM_ADSP_CODEC_WAV)|(1<<MSM_ADSP_CODEC_ADPCM)| \
  98. (1<<MSM_ADSP_CODEC_YADPCM)|(1<<MSM_ADSP_CODEC_QCELP)| \
  99. (1<<MSM_ADSP_CODEC_MP3))
  100. #define DEC2_FORMAT ((1<<MSM_ADSP_CODEC_WAV)|(1<<MSM_ADSP_CODEC_ADPCM)| \
  101. (1<<MSM_ADSP_CODEC_YADPCM)|(1<<MSM_ADSP_CODEC_QCELP)| \
  102. (1<<MSM_ADSP_CODEC_MP3))
  103. #define DEC3_FORMAT ((1<<MSM_ADSP_CODEC_WAV)|(1<<MSM_ADSP_CODEC_ADPCM)| \
  104. (1<<MSM_ADSP_CODEC_YADPCM)|(1<<MSM_ADSP_CODEC_QCELP))
  105. #define DEC4_FORMAT (1<<MSM_ADSP_CODEC_MIDI)
  106. #endif
  107. static unsigned int dec_concurrency_table[] = {
  108. /* Audio LP */
  109. (DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DMA)), 0,
  110. 0, 0, 0,
  111. /* Concurrency 1 */
  112. (DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
  113. (DEC1_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
  114. (DEC2_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
  115. (DEC3_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
  116. (DEC4_FORMAT),
  117. /* Concurrency 2 */
  118. (DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
  119. (DEC1_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
  120. (DEC2_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
  121. (DEC3_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
  122. (DEC4_FORMAT),
  123. /* Concurrency 3 */
  124. (DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
  125. (DEC1_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
  126. (DEC2_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
  127. (DEC3_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
  128. (DEC4_FORMAT),
  129. /* Concurrency 4 */
  130. (DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
  131. (DEC1_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
  132. (DEC2_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
  133. (DEC3_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
  134. (DEC4_FORMAT),
  135. /* Concurrency 5 */
  136. (DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
  137. (DEC1_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
  138. (DEC2_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
  139. (DEC3_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
  140. (DEC4_FORMAT),
  141. /* Concurrency 6 */
  142. (DEC0_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
  143. (DEC1_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
  144. (DEC2_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
  145. (DEC3_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
  146. (DEC4_FORMAT),
  147. };
  148. #define DEC_INFO(name, queueid, decid, nr_codec) { .module_name = name, \
  149. .module_queueid = queueid, .module_decid = decid, \
  150. .nr_codec_support = nr_codec}
  151. static struct msm_adspdec_info dec_info_list[] = {
  152. DEC_INFO("AUDPLAY0TASK", 13, 0, 11), /* AudPlay0BitStreamCtrlQueue */
  153. DEC_INFO("AUDPLAY1TASK", 14, 1, 5), /* AudPlay1BitStreamCtrlQueue */
  154. DEC_INFO("AUDPLAY2TASK", 15, 2, 5), /* AudPlay2BitStreamCtrlQueue */
  155. DEC_INFO("AUDPLAY3TASK", 16, 3, 4), /* AudPlay3BitStreamCtrlQueue */
  156. DEC_INFO("AUDPLAY4TASK", 17, 4, 1), /* AudPlay4BitStreamCtrlQueue */
  157. };
  158. static struct msm_adspdec_database msm_device_adspdec_database = {
  159. .num_dec = ARRAY_SIZE(dec_info_list),
  160. .num_concurrency_support = (ARRAY_SIZE(dec_concurrency_table) / \
  161. ARRAY_SIZE(dec_info_list)),
  162. .dec_concurrency_table = dec_concurrency_table,
  163. .dec_info_list = dec_info_list,
  164. };
  165. struct platform_device msm_device_adspdec = {
  166. .name = "msm_adspdec",
  167. .id = -1,
  168. .dev = {
  169. .platform_data = &msm_device_adspdec_database
  170. },
  171. };