auddrv_devtree_parser.c 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  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. * AudDrv_devtree_parser.c
  21. *
  22. * Project:
  23. * --------
  24. *
  25. *
  26. * Description:
  27. * ------------
  28. * AudDrv_devtree_parser
  29. *
  30. * Author:
  31. * -------
  32. * Chipeng Chang (mtk02308)
  33. *
  34. *------------------------------------------------------------------------------
  35. *
  36. *
  37. *******************************************************************************/
  38. #include "mt_auddrv_devtree_parser.h"
  39. static int bAuddrv_Dev_Tree_Init;
  40. static AUDDRV_I2S_ATTRIBUTE Auddrv_I2S_Setting[Auddrv_I2S_Num][Auddrv_I2S_Attribute_Num];
  41. static AUDDRV_I2S_ATTRIBUTE Auddrv_CLK_Setting[Auddrv_Attribute_num];
  42. static void Auddrv_Devtree_PinSet(void);
  43. AUDDRV_I2S_ATTRIBUTE *GetI2SSetting(uint32_t I2S_Number, uint32_t I2S_Setting)
  44. {
  45. AUDDRV_I2S_ATTRIBUTE *ret = NULL;
  46. if ((I2S_Number < Auddrv_I2S_Num) && (I2S_Setting < Auddrv_I2S_Attribute_Num))
  47. ret = &Auddrv_I2S_Setting[I2S_Number][I2S_Setting];
  48. return ret;
  49. }
  50. void Auddrv_Devtree_Init(void)
  51. {
  52. pr_debug("%s\n", __func__);
  53. if (bAuddrv_Dev_Tree_Init == false) {
  54. /* do some init routine */
  55. bAuddrv_Dev_Tree_Init = true;
  56. memset(&Auddrv_I2S_Setting[0][0], 0,
  57. sizeof(AUDDRV_I2S_ATTRIBUTE) * Auddrv_I2S_Num * Auddrv_I2S_Attribute_Num);
  58. memset(&Auddrv_CLK_Setting[0], 0,
  59. sizeof(AUDDRV_I2S_ATTRIBUTE) * Auddrv_Attribute_num);
  60. Auddrv_DevTree_I2S_Setting("mediatek,mt_soc_pcm_routing");
  61. Auddrv_Devtree_PinSet();
  62. Auddrv_Devtree_Dump();
  63. } else
  64. pr_debug("%s\n bAuddrv_Dev_Tree_Init = %d", __func__, bAuddrv_Dev_Tree_Init);
  65. }
  66. static void I2S0ConfigParse(struct device_node *node)
  67. {
  68. if (of_property_read_u32_index
  69. (node, AUDDRV_I2S0_CLKGPIO, 0,
  70. &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_bck].Gpio_Number))) {
  71. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_CLKGPIO);
  72. }
  73. if (of_property_read_u32_index
  74. (node, AUDDRV_I2S0_CLKGPIO, 0,
  75. &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_bck].Gpio_Mode))) {
  76. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_CLKGPIO);
  77. }
  78. if (of_property_read_u32_index
  79. (node, AUDDRV_I2S0_DATGPIO, 0,
  80. &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_D00].Gpio_Number))) {
  81. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_DATGPIO);
  82. }
  83. if (of_property_read_u32_index
  84. (node, AUDDRV_I2S0_DATGPIO, 1,
  85. &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_D00].Gpio_Mode))) {
  86. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_DATGPIO);
  87. }
  88. if (of_property_read_u32_index
  89. (node, AUDDRV_I2S0_DATAINGPIO, 0,
  90. &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_I00].Gpio_Number))) {
  91. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_DATAINGPIO);
  92. }
  93. if (of_property_read_u32_index
  94. (node, AUDDRV_I2S0_DATAINGPIO, 1,
  95. &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_I00].Gpio_Mode))) {
  96. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_DATAINGPIO);
  97. }
  98. if (of_property_read_u32_index
  99. (node, AUDDRV_I2S0_MCLKGPIO, 0,
  100. &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_Mclk].Gpio_Number))) {
  101. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_MCLKGPIO);
  102. }
  103. if (of_property_read_u32_index
  104. (node, AUDDRV_I2S0_MCLKGPIO, 1,
  105. &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_Mclk].Gpio_Mode))) {
  106. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_MCLKGPIO);
  107. }
  108. if (of_property_read_u32_index
  109. (node, AUDDRV_I2S0_WSGPIO, 0,
  110. &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_ws].Gpio_Number))) {
  111. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_WSGPIO);
  112. }
  113. if (of_property_read_u32_index
  114. (node, AUDDRV_I2S0_WSGPIO, 1,
  115. &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_ws].Gpio_Mode))) {
  116. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_WSGPIO);
  117. }
  118. }
  119. static void I2S1ConfigParse(struct device_node *node)
  120. {
  121. if (of_property_read_u32_index
  122. (node, AUDDRV_I2S1_CLKGPIO, 0,
  123. &(Auddrv_I2S_Setting[Auddrv_I2S1_Setting][Auddrv_I2S_Setting_bck].Gpio_Number))) {
  124. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S1_CLKGPIO);
  125. }
  126. if (of_property_read_u32_index
  127. (node, AUDDRV_I2S1_CLKGPIO, 1,
  128. &(Auddrv_I2S_Setting[Auddrv_I2S1_Setting][Auddrv_I2S_Setting_bck].Gpio_Mode))) {
  129. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S1_CLKGPIO);
  130. }
  131. if (of_property_read_u32_index
  132. (node, AUDDRV_I2S1_DATGPIO, 0,
  133. &(Auddrv_I2S_Setting[Auddrv_I2S1_Setting][Auddrv_I2S_Setting_D00].Gpio_Number))) {
  134. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S1_DATGPIO);
  135. }
  136. if (of_property_read_u32_index
  137. (node, AUDDRV_I2S1_DATGPIO, 1,
  138. &(Auddrv_I2S_Setting[Auddrv_I2S1_Setting][Auddrv_I2S_Setting_D00].Gpio_Mode))) {
  139. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S1_DATGPIO);
  140. }
  141. if (of_property_read_u32_index
  142. (node, AUDDRV_I2S1_MCLKGPIO, 0,
  143. &(Auddrv_I2S_Setting[Auddrv_I2S1_Setting][Auddrv_I2S_Setting_Mclk].Gpio_Number))) {
  144. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S1_MCLKGPIO);
  145. }
  146. if (of_property_read_u32_index
  147. (node, AUDDRV_I2S1_MCLKGPIO, 1,
  148. &(Auddrv_I2S_Setting[Auddrv_I2S1_Setting][Auddrv_I2S_Setting_Mclk].Gpio_Mode))) {
  149. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S1_MCLKGPIO);
  150. }
  151. if (of_property_read_u32_index
  152. (node, AUDDRV_I2S1_WSGPIO, 0,
  153. &(Auddrv_I2S_Setting[Auddrv_I2S1_Setting][Auddrv_I2S_Setting_ws].Gpio_Number))) {
  154. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S1_WSGPIO);
  155. }
  156. if (of_property_read_u32_index
  157. (node, AUDDRV_I2S1_WSGPIO, 1,
  158. &(Auddrv_I2S_Setting[Auddrv_I2S1_Setting][Auddrv_I2S_Setting_ws].Gpio_Mode))) {
  159. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S1_WSGPIO);
  160. }
  161. }
  162. static void I2S2ConfigParse(struct device_node *node)
  163. {
  164. if (of_property_read_u32_index
  165. (node, AUDDRV_I2S2_CLKGPIO, 0,
  166. &(Auddrv_I2S_Setting[Auddrv_I2S2_Setting][Auddrv_I2S_Setting_bck].Gpio_Number))) {
  167. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S2_CLKGPIO);
  168. }
  169. if (of_property_read_u32_index
  170. (node, AUDDRV_I2S2_CLKGPIO, 1,
  171. &(Auddrv_I2S_Setting[Auddrv_I2S2_Setting][Auddrv_I2S_Setting_bck].Gpio_Mode))) {
  172. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S2_CLKGPIO);
  173. }
  174. if (of_property_read_u32_index
  175. (node, AUDDRV_I2S2_DATGPIO, 0,
  176. &(Auddrv_I2S_Setting[Auddrv_I2S2_Setting][Auddrv_I2S_Setting_D00].Gpio_Number))) {
  177. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S2_DATGPIO);
  178. }
  179. if (of_property_read_u32_index
  180. (node, AUDDRV_I2S2_DATGPIO, 1,
  181. &(Auddrv_I2S_Setting[Auddrv_I2S2_Setting][Auddrv_I2S_Setting_D00].Gpio_Mode))) {
  182. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S2_DATGPIO);
  183. }
  184. if (of_property_read_u32_index
  185. (node, AUDDRV_I2S2_MCLKGPIO, 0,
  186. &(Auddrv_I2S_Setting[Auddrv_I2S2_Setting][Auddrv_I2S_Setting_Mclk].Gpio_Number))) {
  187. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S2_MCLKGPIO);
  188. }
  189. if (of_property_read_u32_index
  190. (node, AUDDRV_I2S2_MCLKGPIO, 1,
  191. &(Auddrv_I2S_Setting[Auddrv_I2S2_Setting][Auddrv_I2S_Setting_Mclk].Gpio_Mode))) {
  192. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S2_MCLKGPIO);
  193. }
  194. if (of_property_read_u32_index
  195. (node, AUDDRV_I2S2_WSGPIO, 0,
  196. &(Auddrv_I2S_Setting[Auddrv_I2S2_Setting][Auddrv_I2S_Setting_ws].Gpio_Number))) {
  197. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S2_WSGPIO);
  198. }
  199. if (of_property_read_u32_index
  200. (node, AUDDRV_I2S2_WSGPIO, 1,
  201. &(Auddrv_I2S_Setting[Auddrv_I2S2_Setting][Auddrv_I2S_Setting_ws].Gpio_Mode))) {
  202. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S2_WSGPIO);
  203. }
  204. }
  205. static void I2S3ConfigParse(struct device_node *node)
  206. {
  207. if (of_property_read_u32_index
  208. (node, AUDDRV_I2S3_CLKGPIO, 0,
  209. &(Auddrv_I2S_Setting[Auddrv_I2S3_Setting][Auddrv_I2S_Setting_bck].Gpio_Number))) {
  210. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S3_CLKGPIO);
  211. }
  212. if (of_property_read_u32_index
  213. (node, AUDDRV_I2S3_CLKGPIO, 1,
  214. &(Auddrv_I2S_Setting[Auddrv_I2S3_Setting][Auddrv_I2S_Setting_bck].Gpio_Mode))) {
  215. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S3_CLKGPIO);
  216. }
  217. if (of_property_read_u32_index
  218. (node, AUDDRV_I2S3_DATGPIO, 0,
  219. &(Auddrv_I2S_Setting[Auddrv_I2S3_Setting][Auddrv_I2S_Setting_D00].Gpio_Number))) {
  220. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S3_DATGPIO);
  221. }
  222. if (of_property_read_u32_index
  223. (node, AUDDRV_I2S3_DATGPIO, 1,
  224. &(Auddrv_I2S_Setting[Auddrv_I2S3_Setting][Auddrv_I2S_Setting_D00].Gpio_Mode))) {
  225. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S3_DATGPIO);
  226. }
  227. if (of_property_read_u32_index
  228. (node, AUDDRV_I2S3_MCLKGPIO, 0,
  229. &(Auddrv_I2S_Setting[Auddrv_I2S3_Setting][Auddrv_I2S_Setting_Mclk].Gpio_Number))) {
  230. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S3_MCLKGPIO);
  231. }
  232. if (of_property_read_u32_index
  233. (node, AUDDRV_I2S3_MCLKGPIO, 1,
  234. &(Auddrv_I2S_Setting[Auddrv_I2S3_Setting][Auddrv_I2S_Setting_Mclk].Gpio_Mode))) {
  235. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S3_MCLKGPIO);
  236. }
  237. if (of_property_read_u32_index
  238. (node, AUDDRV_I2S3_WSGPIO, 0,
  239. &(Auddrv_I2S_Setting[Auddrv_I2S3_Setting][Auddrv_I2S_Setting_ws].Gpio_Number))) {
  240. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S3_WSGPIO);
  241. }
  242. if (of_property_read_u32_index
  243. (node, AUDDRV_I2S3_WSGPIO, 1,
  244. &(Auddrv_I2S_Setting[Auddrv_I2S3_Setting][Auddrv_I2S_Setting_ws].Gpio_Mode))) {
  245. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S3_WSGPIO);
  246. }
  247. }
  248. static void MtkInterfaceConfigParse(struct device_node *node)
  249. {
  250. if (of_property_read_u32_index
  251. (node, AUDDRV_AUD_CLKGPIO, 0, &(Auddrv_CLK_Setting[Auddrv_CLK_Mosi].Gpio_Number))) {
  252. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_AUD_CLKGPIO);
  253. }
  254. if (of_property_read_u32_index
  255. (node, AUDDRV_AUD_CLKGPIO, 1, &(Auddrv_CLK_Setting[Auddrv_CLK_Mosi].Gpio_Mode))) {
  256. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_AUD_CLKGPIO);
  257. }
  258. if (of_property_read_u32_index
  259. (node, AUDDRV_AUD_DATIGPIO, 0,
  260. &(Auddrv_CLK_Setting[Auddrv_DataIn1_Mosi].Gpio_Number))) {
  261. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_AUD_DATIGPIO);
  262. }
  263. if (of_property_read_u32_index
  264. (node, AUDDRV_AUD_DATIGPIO, 1, &(Auddrv_CLK_Setting[Auddrv_DataIn1_Mosi].Gpio_Mode))) {
  265. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_AUD_DATIGPIO);
  266. }
  267. if (of_property_read_u32_index
  268. (node, AUDDRV_AUD_DATOGPIO, 0,
  269. &(Auddrv_CLK_Setting[Auddrv_DataOut1_Mosi].Gpio_Number))) {
  270. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_AUD_DATOGPIO);
  271. }
  272. if (of_property_read_u32_index
  273. (node, AUDDRV_AUD_DATOGPIO, 1, &(Auddrv_CLK_Setting[Auddrv_DataOut1_Mosi].Gpio_Mode))) {
  274. pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_AUD_DATOGPIO);
  275. }
  276. }
  277. /* base on devtree name to pares dev tree. */
  278. void Auddrv_DevTree_I2S_Setting(const char *DevTreeName)
  279. {
  280. struct device_node *node = NULL;
  281. pr_debug("%s\n", __func__);
  282. node = of_find_compatible_node(NULL, NULL, DevTreeName);
  283. if (node != NULL) {
  284. I2S0ConfigParse(node);
  285. I2S1ConfigParse(node);
  286. I2S2ConfigParse(node);
  287. I2S3ConfigParse(node);
  288. MtkInterfaceConfigParse(node);
  289. }
  290. }
  291. /* base on devtree name to pares dev tree. */
  292. static void Auddrv_Devtree_PinSet(void)
  293. {
  294. int I2S_Num = 0;
  295. int I2S_Attribute_Num = 0;
  296. pr_debug("+%s\n", __func__);
  297. for (I2S_Num = 0; I2S_Num < Auddrv_I2S_Num; I2S_Num++) {
  298. for (I2S_Attribute_Num = 0; I2S_Attribute_Num < Auddrv_I2S_Attribute_Num;
  299. I2S_Attribute_Num++) {
  300. pr_debug("Auddrv_I2S_Setting[%d][%d] gpio_num = %d gpio_mode = %d\n",
  301. I2S_Num, I2S_Attribute_Num,
  302. Auddrv_I2S_Setting[I2S_Num][I2S_Attribute_Num].Gpio_Number,
  303. Auddrv_I2S_Setting[I2S_Num][I2S_Attribute_Num].Gpio_Mode);
  304. if (Auddrv_I2S_Setting[I2S_Num][I2S_Attribute_Num].Gpio_Number) {
  305. Auddrv_I2S_Setting[I2S_Num][I2S_Attribute_Num].Gpio_Number |=
  306. 0x80000000;
  307. }
  308. }
  309. }
  310. for (I2S_Attribute_Num = 0; I2S_Attribute_Num < Auddrv_Attribute_num; I2S_Attribute_Num++) {
  311. pr_debug("Auddrv_CLK_Setting[%d] gpio_num = %d gpio_mode = %d\n",
  312. I2S_Attribute_Num, Auddrv_CLK_Setting[I2S_Attribute_Num].Gpio_Number,
  313. Auddrv_CLK_Setting[I2S_Attribute_Num].Gpio_Mode);
  314. if (Auddrv_CLK_Setting[I2S_Attribute_Num].Gpio_Number)
  315. Auddrv_CLK_Setting[I2S_Attribute_Num].Gpio_Number |= 0x80000000;
  316. }
  317. pr_debug("-%s\n", __func__);
  318. }
  319. /* base on devtree name to pares dev tree. */
  320. void Auddrv_Devtree_Dump(void)
  321. {
  322. int I2S_Num = 0;
  323. int I2S_Attribute_Num = 0;
  324. pr_debug("+%s\n", __func__);
  325. for (I2S_Num = 0; I2S_Num < Auddrv_I2S_Num; I2S_Num++) {
  326. for (I2S_Attribute_Num = 0; I2S_Attribute_Num < Auddrv_I2S_Attribute_Num;
  327. I2S_Attribute_Num++) {
  328. pr_debug("Auddrv_I2S_Setting[%d][%d] gpio_num = %d gpio_mode = %d\n",
  329. I2S_Num, I2S_Attribute_Num,
  330. Auddrv_I2S_Setting[I2S_Num][I2S_Attribute_Num].Gpio_Number,
  331. Auddrv_I2S_Setting[I2S_Num][I2S_Attribute_Num].Gpio_Mode);
  332. }
  333. }
  334. for (I2S_Attribute_Num = 0; I2S_Attribute_Num < Auddrv_Attribute_num; I2S_Attribute_Num++) {
  335. pr_debug("Auddrv_CLK_Setting[%d] gpio_num = %d gpio_mode = %d\n",
  336. I2S_Attribute_Num, Auddrv_CLK_Setting[I2S_Attribute_Num].Gpio_Number,
  337. Auddrv_CLK_Setting[I2S_Attribute_Num].Gpio_Mode);
  338. }
  339. pr_debug("-%s\n", __func__);
  340. }