mt8186-afe-control.c 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. // SPDX-License-Identifier: GPL-2.0
  2. //
  3. // MediaTek ALSA SoC Audio Control
  4. //
  5. // Copyright (c) 2022 MediaTek Inc.
  6. // Author: Jiaxin Yu <[email protected]>
  7. #include "mt8186-afe-common.h"
  8. #include <linux/pm_runtime.h>
  9. enum {
  10. MTK_AFE_RATE_8K = 0,
  11. MTK_AFE_RATE_11K,
  12. MTK_AFE_RATE_12K,
  13. MTK_AFE_RATE_384K,
  14. MTK_AFE_RATE_16K,
  15. MTK_AFE_RATE_22K,
  16. MTK_AFE_RATE_24K,
  17. MTK_AFE_RATE_352K,
  18. MTK_AFE_RATE_32K,
  19. MTK_AFE_RATE_44K,
  20. MTK_AFE_RATE_48K,
  21. MTK_AFE_RATE_88K,
  22. MTK_AFE_RATE_96K,
  23. MTK_AFE_RATE_176K,
  24. MTK_AFE_RATE_192K,
  25. MTK_AFE_RATE_260K,
  26. };
  27. enum {
  28. MTK_AFE_PCM_RATE_8K = 0,
  29. MTK_AFE_PCM_RATE_16K,
  30. MTK_AFE_PCM_RATE_32K,
  31. MTK_AFE_PCM_RATE_48K,
  32. };
  33. enum {
  34. MTK_AFE_TDM_RATE_8K = 0,
  35. MTK_AFE_TDM_RATE_12K,
  36. MTK_AFE_TDM_RATE_16K,
  37. MTK_AFE_TDM_RATE_24K,
  38. MTK_AFE_TDM_RATE_32K,
  39. MTK_AFE_TDM_RATE_48K,
  40. MTK_AFE_TDM_RATE_64K,
  41. MTK_AFE_TDM_RATE_96K,
  42. MTK_AFE_TDM_RATE_128K,
  43. MTK_AFE_TDM_RATE_192K,
  44. MTK_AFE_TDM_RATE_256K,
  45. MTK_AFE_TDM_RATE_384K,
  46. MTK_AFE_TDM_RATE_11K,
  47. MTK_AFE_TDM_RATE_22K,
  48. MTK_AFE_TDM_RATE_44K,
  49. MTK_AFE_TDM_RATE_88K,
  50. MTK_AFE_TDM_RATE_176K,
  51. MTK_AFE_TDM_RATE_352K,
  52. };
  53. enum {
  54. MTK_AFE_TDM_RELATCH_RATE_8K = 0,
  55. MTK_AFE_TDM_RELATCH_RATE_11K,
  56. MTK_AFE_TDM_RELATCH_RATE_12K,
  57. MTK_AFE_TDM_RELATCH_RATE_16K,
  58. MTK_AFE_TDM_RELATCH_RATE_22K,
  59. MTK_AFE_TDM_RELATCH_RATE_24K,
  60. MTK_AFE_TDM_RELATCH_RATE_32K,
  61. MTK_AFE_TDM_RELATCH_RATE_44K,
  62. MTK_AFE_TDM_RELATCH_RATE_48K,
  63. MTK_AFE_TDM_RELATCH_RATE_88K,
  64. MTK_AFE_TDM_RELATCH_RATE_96K,
  65. MTK_AFE_TDM_RELATCH_RATE_176K,
  66. MTK_AFE_TDM_RELATCH_RATE_192K,
  67. MTK_AFE_TDM_RELATCH_RATE_352K,
  68. MTK_AFE_TDM_RELATCH_RATE_384K,
  69. };
  70. unsigned int mt8186_general_rate_transform(struct device *dev, unsigned int rate)
  71. {
  72. switch (rate) {
  73. case 8000:
  74. return MTK_AFE_RATE_8K;
  75. case 11025:
  76. return MTK_AFE_RATE_11K;
  77. case 12000:
  78. return MTK_AFE_RATE_12K;
  79. case 16000:
  80. return MTK_AFE_RATE_16K;
  81. case 22050:
  82. return MTK_AFE_RATE_22K;
  83. case 24000:
  84. return MTK_AFE_RATE_24K;
  85. case 32000:
  86. return MTK_AFE_RATE_32K;
  87. case 44100:
  88. return MTK_AFE_RATE_44K;
  89. case 48000:
  90. return MTK_AFE_RATE_48K;
  91. case 88200:
  92. return MTK_AFE_RATE_88K;
  93. case 96000:
  94. return MTK_AFE_RATE_96K;
  95. case 176400:
  96. return MTK_AFE_RATE_176K;
  97. case 192000:
  98. return MTK_AFE_RATE_192K;
  99. case 260000:
  100. return MTK_AFE_RATE_260K;
  101. case 352800:
  102. return MTK_AFE_RATE_352K;
  103. case 384000:
  104. return MTK_AFE_RATE_384K;
  105. default:
  106. dev_err(dev, "%s(), rate %u invalid, use %d!!!\n",
  107. __func__, rate, MTK_AFE_RATE_48K);
  108. }
  109. return MTK_AFE_RATE_48K;
  110. }
  111. static unsigned int tdm_rate_transform(struct device *dev, unsigned int rate)
  112. {
  113. switch (rate) {
  114. case 8000:
  115. return MTK_AFE_TDM_RATE_8K;
  116. case 11025:
  117. return MTK_AFE_TDM_RATE_11K;
  118. case 12000:
  119. return MTK_AFE_TDM_RATE_12K;
  120. case 16000:
  121. return MTK_AFE_TDM_RATE_16K;
  122. case 22050:
  123. return MTK_AFE_TDM_RATE_22K;
  124. case 24000:
  125. return MTK_AFE_TDM_RATE_24K;
  126. case 32000:
  127. return MTK_AFE_TDM_RATE_32K;
  128. case 44100:
  129. return MTK_AFE_TDM_RATE_44K;
  130. case 48000:
  131. return MTK_AFE_TDM_RATE_48K;
  132. case 64000:
  133. return MTK_AFE_TDM_RATE_64K;
  134. case 88200:
  135. return MTK_AFE_TDM_RATE_88K;
  136. case 96000:
  137. return MTK_AFE_TDM_RATE_96K;
  138. case 128000:
  139. return MTK_AFE_TDM_RATE_128K;
  140. case 176400:
  141. return MTK_AFE_TDM_RATE_176K;
  142. case 192000:
  143. return MTK_AFE_TDM_RATE_192K;
  144. case 256000:
  145. return MTK_AFE_TDM_RATE_256K;
  146. case 352800:
  147. return MTK_AFE_TDM_RATE_352K;
  148. case 384000:
  149. return MTK_AFE_TDM_RATE_384K;
  150. default:
  151. dev_err(dev, "%s(), rate %u invalid, use %d!!!\n",
  152. __func__, rate, MTK_AFE_TDM_RATE_48K);
  153. }
  154. return MTK_AFE_TDM_RATE_48K;
  155. }
  156. static unsigned int pcm_rate_transform(struct device *dev, unsigned int rate)
  157. {
  158. switch (rate) {
  159. case 8000:
  160. return MTK_AFE_PCM_RATE_8K;
  161. case 16000:
  162. return MTK_AFE_PCM_RATE_16K;
  163. case 32000:
  164. return MTK_AFE_PCM_RATE_32K;
  165. case 48000:
  166. return MTK_AFE_PCM_RATE_48K;
  167. default:
  168. dev_err(dev, "%s(), rate %u invalid, use %d!!!\n",
  169. __func__, rate, MTK_AFE_PCM_RATE_48K);
  170. }
  171. return MTK_AFE_PCM_RATE_48K;
  172. }
  173. unsigned int mt8186_tdm_relatch_rate_transform(struct device *dev, unsigned int rate)
  174. {
  175. switch (rate) {
  176. case 8000:
  177. return MTK_AFE_TDM_RELATCH_RATE_8K;
  178. case 11025:
  179. return MTK_AFE_TDM_RELATCH_RATE_11K;
  180. case 12000:
  181. return MTK_AFE_TDM_RELATCH_RATE_12K;
  182. case 16000:
  183. return MTK_AFE_TDM_RELATCH_RATE_16K;
  184. case 22050:
  185. return MTK_AFE_TDM_RELATCH_RATE_22K;
  186. case 24000:
  187. return MTK_AFE_TDM_RELATCH_RATE_24K;
  188. case 32000:
  189. return MTK_AFE_TDM_RELATCH_RATE_32K;
  190. case 44100:
  191. return MTK_AFE_TDM_RELATCH_RATE_44K;
  192. case 48000:
  193. return MTK_AFE_TDM_RELATCH_RATE_48K;
  194. case 88200:
  195. return MTK_AFE_TDM_RELATCH_RATE_88K;
  196. case 96000:
  197. return MTK_AFE_TDM_RELATCH_RATE_96K;
  198. case 176400:
  199. return MTK_AFE_TDM_RELATCH_RATE_176K;
  200. case 192000:
  201. return MTK_AFE_TDM_RELATCH_RATE_192K;
  202. case 352800:
  203. return MTK_AFE_TDM_RELATCH_RATE_352K;
  204. case 384000:
  205. return MTK_AFE_TDM_RELATCH_RATE_384K;
  206. default:
  207. dev_err(dev, "%s(), rate %u invalid, use %d!!!\n",
  208. __func__, rate, MTK_AFE_TDM_RELATCH_RATE_48K);
  209. }
  210. return MTK_AFE_TDM_RELATCH_RATE_48K;
  211. }
  212. unsigned int mt8186_rate_transform(struct device *dev, unsigned int rate, int aud_blk)
  213. {
  214. switch (aud_blk) {
  215. case MT8186_DAI_PCM:
  216. return pcm_rate_transform(dev, rate);
  217. case MT8186_DAI_TDM_IN:
  218. return tdm_rate_transform(dev, rate);
  219. default:
  220. return mt8186_general_rate_transform(dev, rate);
  221. }
  222. }
  223. int mt8186_dai_set_priv(struct mtk_base_afe *afe, int id, int priv_size, const void *priv_data)
  224. {
  225. struct mt8186_afe_private *afe_priv = afe->platform_priv;
  226. void *temp_data;
  227. temp_data = devm_kzalloc(afe->dev,
  228. priv_size,
  229. GFP_KERNEL);
  230. if (!temp_data)
  231. return -ENOMEM;
  232. if (priv_data)
  233. memcpy(temp_data, priv_data, priv_size);
  234. afe_priv->dai_priv[id] = temp_data;
  235. return 0;
  236. }