i2s_pin.h 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  1. struct addr_set {
  2. int addr;
  3. int set_num;
  4. unsigned char set_bit[4];
  5. int clear_num;
  6. unsigned char clear_bit[4];
  7. };
  8. struct i2s_pin {
  9. int addr_num;
  10. struct addr_set addr_s[5];
  11. };
  12. #if (CONFIG_CHIPID == 0x531) || (CONFIG_CHIPID == 0x533)
  13. /************************************************************
  14. * SDO PIN Setting *
  15. *************************************************************/
  16. #if (I2S_SD0_PIN == I2S_SET1)
  17. //LVA_TXP4 as I2S_SD0
  18. struct i2s_pin sd0 = \
  19. { 5,
  20. { \
  21. {0xbe00012c, 0, {0,}, 2, {13,14,}} , \
  22. {0xbe00025c, 0, {0,}, 1, {4,}} , \
  23. {0xbe000200, 0, {0,}, 1, {0,}} , \
  24. {0xbe00013c, 1, {5,}, 1, {11,}} , \
  25. {0xbe0001bc, 0, {0,}, 1, {31,}} , \
  26. } \
  27. };
  28. #elif (I2S_SD0_PIN == I2S_SET2)
  29. //GPIO15 as I2S_SD02/3
  30. struct i2s_pin sd0 = \
  31. { 4,
  32. { \
  33. {0xbe000600, 1, {31,}, 1, {30,}} , \
  34. {0xbe0000e8, 1, {29,}, 0, {0,}} , \
  35. {0xbe0001bc, 0, {0,}, 1, {31,}} , \
  36. {0xbe00013c, 0, {0,}, 2, {11,18,}} , \
  37. } \
  38. };
  39. #elif (I2S_SD0_PIN == I2S_SET3)
  40. //T2_FEF as I2S_SD02/3
  41. struct i2s_pin sd0 = \
  42. { 3,
  43. { \
  44. {0xbe000244, 1, {29,}, 0, {0,}} , \
  45. {0xbe00013c, 0, {0,}, 1, {11}} , \
  46. {0xbe0001bc, 0, {0,}, 1, {31,}} , \
  47. } \
  48. };
  49. #else
  50. struct i2s_pin sd0 = {0};
  51. #endif
  52. /************************************************************
  53. * WS PIN Setting *
  54. *************************************************************/
  55. #if (I2S_WS_PIN == I2S_SET1)
  56. //LVA_TXN4 as I2S_WS
  57. struct i2s_pin ws = \
  58. { 4,
  59. { \
  60. {0xbe00012c, 0, {0,}, 2, {13,14,}} , \
  61. {0xbe00025c, 0, {0,}, 1, {4,}} , \
  62. {0xbe000200, 0, {0,}, 1, {0,}} , \
  63. {0xbe00013c, 1, {5,}, 0, {0,}} , \
  64. } \
  65. };
  66. #elif (I2S_WS_PIN == I2S_SET2)
  67. //GPIO1 as I2S_WS2
  68. struct i2s_pin ws = \
  69. { 2,
  70. { \
  71. {0xbe000600, 0, {0,}, 2, {2,3,}} , \
  72. {0xbe00013c, 1, {26,}, 1, {27,}} , \
  73. } \
  74. };
  75. #elif (I2S_WS_PIN == I2S_SET3)
  76. //RFGAIN as I2S_WS3
  77. struct i2s_pin ws = \
  78. { 1,
  79. { \
  80. {0xbe000604, 1, {13,}, 1, {12,}} , \
  81. } \
  82. };
  83. #else
  84. struct i2s_pin ws = {0};
  85. #endif
  86. /************************************************************
  87. * MCK PIN Setting *
  88. *************************************************************/
  89. #if (I2S_MCK_PIN == I2S_SET1)
  90. //LVB_TXP4 as I2S_MCK
  91. struct i2s_pin mck = \
  92. { 4,
  93. { \
  94. {0xbe00012c, 0, {0,}, 2, {13,14,}} , \
  95. {0xbe00025c, 0, {0,}, 1, {9,}} , \
  96. {0xbe000200, 0, {0,}, 1, {0,}} , \
  97. {0xbe00013c, 1, {5,}, 4, {0,2,4,16,}} , \
  98. } \
  99. };
  100. #elif (I2S_MCK_PIN == I2S_SET2)
  101. //KEY2 as I2S_MCK2
  102. struct i2s_pin mck = \
  103. { 3,
  104. { \
  105. {0xbe000600, 0, {0,}, 2, {20,21,}} , \
  106. {0xbe00012c, 0, {0,}, 1, {15,}} , \
  107. {0xbe00013c, 1, {26,}, 4, {0,2,4,16,}} , \
  108. } \
  109. };
  110. #elif (I2S_MCK_PIN == I2S_SET3)
  111. //NF_DQS as I2S_MCK3 as I2S_WCK3
  112. struct i2s_pin mck = \
  113. { 2,
  114. { \
  115. {0xbe00013c, 0, {0,}, 4, {0,2,4,16,}} , \
  116. {0xbe000250, 1, {29,}, 0, {0,}} , \
  117. } \
  118. };
  119. #else
  120. struct i2s_pin mck = {0};
  121. #endif
  122. /************************************************************
  123. * SCK PIN Setting *
  124. *************************************************************/
  125. #if (I2S_SCK_PIN == I2S_SET1)
  126. //LVB_TXN4 as I2S_SCK
  127. struct i2s_pin sck = \
  128. { 4,
  129. { \
  130. {0xbe00012c, 0, {0,}, 2, {13,14,}} , \
  131. {0xbe00025c, 0, {0,}, 1, {9,}} , \
  132. {0xbe000200, 0, {0,}, 1, {1,}} , \
  133. {0xbe00013c, 1, {5,}, 0, {0,}} , \
  134. } \
  135. };
  136. #elif (I2S_SCK_PIN == I2S_SET2)
  137. //KEY3 as I2S_SCK2
  138. struct i2s_pin sck = \
  139. { 3,
  140. { \
  141. {0xbe00012c, 0, {0,}, 1, {15,}} , \
  142. {0xbe00013c, 1, {26,}, 1, {8,}} , \
  143. {0xbe0f0600, 0, {0,}, 2, {22,23,}} , \
  144. } \
  145. };
  146. #elif (I2S_SCK_PIN == I2S_SET3)
  147. //RMIIRXER as I2S_SCK3
  148. struct i2s_pin sck = \
  149. { 2,
  150. { \
  151. {0xbe000210, 1, {26,}, 0, {0,}} , \
  152. {0xbe00019c, 0, {0,}, 1, {15,}} , \
  153. } \
  154. };
  155. #else
  156. struct i2s_pin sck = {0};
  157. #endif
  158. #endif // #if (CONFIG_CHIPID == 0x531)
  159. #if (CONFIG_CHIPID == 0x331) || (CONFIG_CHIPID == 0x131) || (CONFIG_CHIPID == 0x8506) || (CONFIG_CHIPID == 0x6710)
  160. /************************************************************
  161. * SDO PIN Setting *
  162. *************************************************************/
  163. #if (I2S_SD0_PIN == I2S_SET1)
  164. //LVA_TXP4 as I2S_SD0
  165. struct i2s_pin sd0 = \
  166. { 5,
  167. { \
  168. {0xbe00012c, 0, {0,}, 2, {13,14,}} , \
  169. {0xbe00025c, 0, {0,}, 2, {4,17,}} , \
  170. {0xbe000200, 0, {0,}, 1, {0,}} , \
  171. {0xbe00013c, 1, {5,}, 1, {11,}} , \
  172. {0xbe0001bc, 0, {0,}, 1, {31,}} , \
  173. } \
  174. };
  175. #elif (I2S_SD0_PIN == I2S_SET2)
  176. //I2S_SD0
  177. struct i2s_pin sd0 = \
  178. { 2,
  179. { \
  180. {0xbe00013c, 0, {0,}, 2, {11,18,}} , \
  181. {0xbe0001bc, 0, {0,}, 1, {31,}} , \
  182. } \
  183. };
  184. #elif (I2S_SD0_PIN == I2S_SET3)
  185. //GPIO15 as I2S_SD02/3
  186. struct i2s_pin sd0 = \
  187. { 4,
  188. { \
  189. {0xbe000600, 1, {31,}, 1, {30,}} , \
  190. {0xbe0000e8, 1, {29,}, 0, {0,}} , \
  191. {0xbe0001bc, 0, {0,}, 1, {31,}} , \
  192. {0xbe00013c, 0, {0,}, 2, {11,18,}} , \
  193. } \
  194. };
  195. #elif (I2S_SD0_PIN == I2S_SET4)
  196. //SPK_L
  197. struct i2s_pin sd0 = \
  198. { 1,
  199. { \
  200. {0xbe000134, 1, {11,}, 0, {0,}} , \
  201. } \
  202. };
  203. #else
  204. struct i2s_pin sd0 = {0};
  205. #endif
  206. /************************************************************
  207. * WS PIN Setting *
  208. *************************************************************/
  209. #if (I2S_WS_PIN == I2S_SET1)
  210. //LVA_TXN4 as I2S_WS
  211. struct i2s_pin ws = \
  212. { 4,
  213. { \
  214. {0xbe00012c, 0, {0,}, 2, {13,14,}} , \
  215. {0xbe00025c, 0, {0,}, 2, {4,17,}} , \
  216. {0xbe000200, 0, {0,}, 1, {0,}} , \
  217. {0xbe00013c, 1, {5,}, 0, {0,}} , \
  218. } \
  219. };
  220. #elif (I2S_WS_PIN == I2S_SET2)
  221. //I2S_WS
  222. struct i2s_pin ws = \
  223. { 1,
  224. { \
  225. {0xbe00013c, 0, {0,}, 1, {8,}} , \
  226. } \
  227. };
  228. #elif (I2S_WS_PIN == I2S_SET3)
  229. //GPIO1 as I2S_WS2
  230. struct i2s_pin ws = \
  231. { 2,
  232. { \
  233. {0xbe000600, 0, {0,}, 2, {2,3,}} , \
  234. {0xbe00013c, 1, {26,}, 1, {27,}} , \
  235. } \
  236. };
  237. #elif (I2S_WS_PIN == I2S_SET4)
  238. //SPK_R
  239. struct i2s_pin ws = \
  240. { 1,
  241. { \
  242. {0xbe000134, 1, {10,}, 0, {0,}} , \
  243. } \
  244. };
  245. #else
  246. struct i2s_pin ws = {0};
  247. #endif
  248. /************************************************************
  249. * MCK PIN Setting *
  250. *************************************************************/
  251. #if (I2S_MCK_PIN == I2S_SET1)
  252. //LVB_TXP4 as I2S_MCK
  253. struct i2s_pin mck = \
  254. { 4,
  255. { \
  256. {0xbe00012c, 0, {0,}, 2, {13,14,}} , \
  257. {0xbe00025c, 0, {0,}, 2, {9,17,}} , \
  258. {0xbe000200, 0, {0,}, 1, {1,}} , \
  259. {0xbe00013c, 1, {5,}, 4, {0,2,4,16,}} , \
  260. } \
  261. };
  262. #elif (I2S_MCK_PIN == I2S_SET2)
  263. //KEY2 as I2S_MCK2
  264. struct i2s_pin mck = \
  265. { 3,
  266. { \
  267. {0xbe000600, 0, {0,}, 2, {20,21,}} , \
  268. {0xbe00012c, 0, {0,}, 1, {15,}} , \
  269. {0xbe00013c, 1, {26,}, 4, {0,2,4,16,}} , \
  270. } \
  271. };
  272. #elif (I2S_MCK_PIN == I2S_SET3)
  273. //KEY1/I2S_MCK/GPIO10 as I2S_MCK_PIN
  274. struct i2s_pin mck = \
  275. { 3,
  276. { \
  277. {0xbe0f0600, 0, {0,}, 2, {20,21,}} , \
  278. {0xbe00012c, 0, {0,}, 1, {15,}} , \
  279. {0xbe00013c, 1, {26,}, 3, {0,8,27,}} , \
  280. {0xbe000014, 0, {0,}, 1, {2,}} , \
  281. } \
  282. };
  283. #elif (I2S_MCK_PIN == I2S_SET4)
  284. //GPIO42
  285. struct i2s_pin mck = \
  286. { 2,
  287. { \
  288. {0xbe0f0608, 0, {0,}, 2, {20,21,}} , \
  289. {0xbe00013c, 0, {0,}, 2, {0,16,}} , \
  290. } \
  291. };
  292. #else
  293. struct i2s_pin mck = {0};
  294. #endif
  295. /************************************************************
  296. * SCK PIN Setting *
  297. *************************************************************/
  298. #if (I2S_SCK_PIN == I2S_SET1)
  299. //LVB_TXN4 as I2S_SCK
  300. struct i2s_pin sck = \
  301. { 4,
  302. { \
  303. {0xbe00012c, 0, {0,}, 2, {13,14,}} , \
  304. {0xbe00025c, 0, {0,}, 2, {9,17,}} , \
  305. {0xbe000200, 0, {0,}, 1, {1,}} , \
  306. {0xbe00013c, 1, {5,}, 0, {0,}} , \
  307. } \
  308. };
  309. #elif (I2S_SCK_PIN == I2S_SET2)
  310. //KEY3 as I2S_SCK2
  311. struct i2s_pin sck = \
  312. { 3,
  313. { \
  314. {0xbe00012c, 0, {0,}, 1, {15,}} , \
  315. {0xbe00013c, 1, {26,}, 1, {8,}} , \
  316. {0xbe0f0600, 0, {0,}, 2, {20,21,}} , \
  317. } \
  318. };
  319. #elif (I2S_SCK_PIN == I2S_SET3)
  320. //PWM1/I2S_SCK/GPIO1 as I2S_SCK3
  321. struct i2s_pin sck = \
  322. { 4,
  323. { \
  324. {0xbe0f0600, 0, {0,}, 2, {2,3,}} , \
  325. {0xbe00012c, 0, {0,}, 1, {15,}} , \
  326. {0xbe00013c, 1, {26,}, 2, {8,27,}} , \
  327. {0xbe000014, 0, {0,}, 1, {2,}} , \
  328. } \
  329. };
  330. #elif (I2S_SCK_PIN == I2S_SET4)
  331. //GPIO46 as I2S_SCK2
  332. struct i2s_pin sck = \
  333. { 3,
  334. { \
  335. {0xbe000014, 0, {0,}, 1, {2,}} , \
  336. {0xbe00013c, 0, {0,}, 1, {8,}} , \
  337. {0xbe0f0608, 0, {0,}, 2, {28,29,}} , \
  338. } \
  339. };
  340. #else
  341. struct i2s_pin sck = {0};
  342. #endif
  343. #endif // #if (CONFIG_CHIPID == 0x331) || (CONFIG_CHIPID == 0x131) || (CONFIG_CHIPID == 0x8506) || (CONFIG_CHIPID == 0x6710)
  344. static void set_pin_as_i2s_pin(struct i2s_pin *pin)
  345. {
  346. int i,j;
  347. volatile unsigned int *addr;
  348. unsigned int value = 0;
  349. if (pin->addr_num == 0)
  350. return;
  351. for (i = 0; i < pin->addr_num; i++) {
  352. addr = (unsigned int *)pin->addr_s[i].addr;
  353. value = 0;
  354. for (j = 0; j < pin->addr_s[i].set_num; j++)
  355. value |= (1<<pin->addr_s[i].set_bit[j]);
  356. (*addr) = (*addr) | value;
  357. value = 0;
  358. for (j = 0; j < pin->addr_s[i].clear_num; j++)
  359. value |= (1<<pin->addr_s[i].clear_bit[j]);
  360. (*addr) = (*addr) & (~value);
  361. }
  362. }