mcbsp.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673
  1. /*
  2. * linux/arch/arm/mach-omap2/mcbsp.c
  3. *
  4. * Copyright (C) 2008 Instituto Nokia de Tecnologia
  5. * Contact: Eduardo Valentin <eduardo.valentin@indt.org.br>
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License version 2 as
  9. * published by the Free Software Foundation.
  10. *
  11. * Multichannel mode not supported.
  12. */
  13. #include <linux/module.h>
  14. #include <linux/init.h>
  15. #include <linux/clk.h>
  16. #include <linux/err.h>
  17. #include <linux/io.h>
  18. #include <linux/platform_device.h>
  19. #include <linux/slab.h>
  20. #include <mach/irqs.h>
  21. #include <plat/dma.h>
  22. #include <plat/cpu.h>
  23. #include <plat/mcbsp.h>
  24. #include "control.h"
  25. /* McBSP internal signal muxing functions */
  26. void omap2_mcbsp1_mux_clkr_src(u8 mux)
  27. {
  28. u32 v;
  29. v = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0);
  30. if (mux == CLKR_SRC_CLKR)
  31. v &= ~OMAP2_MCBSP1_CLKR_MASK;
  32. else if (mux == CLKR_SRC_CLKX)
  33. v |= OMAP2_MCBSP1_CLKR_MASK;
  34. omap_ctrl_writel(v, OMAP2_CONTROL_DEVCONF0);
  35. }
  36. EXPORT_SYMBOL(omap2_mcbsp1_mux_clkr_src);
  37. void omap2_mcbsp1_mux_fsr_src(u8 mux)
  38. {
  39. u32 v;
  40. v = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0);
  41. if (mux == FSR_SRC_FSR)
  42. v &= ~OMAP2_MCBSP1_FSR_MASK;
  43. else if (mux == FSR_SRC_FSX)
  44. v |= OMAP2_MCBSP1_FSR_MASK;
  45. omap_ctrl_writel(v, OMAP2_CONTROL_DEVCONF0);
  46. }
  47. EXPORT_SYMBOL(omap2_mcbsp1_mux_fsr_src);
  48. /* McBSP CLKS source switching function */
  49. int omap2_mcbsp_set_clks_src(u8 id, u8 fck_src_id)
  50. {
  51. struct omap_mcbsp *mcbsp;
  52. struct clk *fck_src;
  53. char *fck_src_name;
  54. int r;
  55. if (!omap_mcbsp_check_valid_id(id)) {
  56. pr_err("%s: Invalid id (%d)\n", __func__, id + 1);
  57. return -EINVAL;
  58. }
  59. mcbsp = id_to_mcbsp_ptr(id);
  60. if (fck_src_id == MCBSP_CLKS_PAD_SRC)
  61. fck_src_name = "pad_fck";
  62. else if (fck_src_id == MCBSP_CLKS_PRCM_SRC)
  63. fck_src_name = "prcm_fck";
  64. else
  65. return -EINVAL;
  66. fck_src = clk_get(mcbsp->dev, fck_src_name);
  67. if (IS_ERR_OR_NULL(fck_src)) {
  68. pr_err("omap-mcbsp: %s: could not clk_get() %s\n", "clks",
  69. fck_src_name);
  70. return -EINVAL;
  71. }
  72. clk_disable(mcbsp->fclk);
  73. r = clk_set_parent(mcbsp->fclk, fck_src);
  74. if (IS_ERR_VALUE(r)) {
  75. pr_err("omap-mcbsp: %s: could not clk_set_parent() to %s\n",
  76. "clks", fck_src_name);
  77. clk_put(fck_src);
  78. return -EINVAL;
  79. }
  80. clk_enable(mcbsp->fclk);
  81. clk_put(fck_src);
  82. return 0;
  83. }
  84. EXPORT_SYMBOL(omap2_mcbsp_set_clks_src);
  85. /* Platform data */
  86. #ifdef CONFIG_SOC_OMAP2420
  87. struct resource omap2420_mcbsp_res[][6] = {
  88. {
  89. {
  90. .start = OMAP24XX_MCBSP1_BASE,
  91. .end = OMAP24XX_MCBSP1_BASE + SZ_256,
  92. .flags = IORESOURCE_MEM,
  93. },
  94. {
  95. .name = "rx",
  96. .start = INT_24XX_MCBSP1_IRQ_RX,
  97. .flags = IORESOURCE_IRQ,
  98. },
  99. {
  100. .name = "tx",
  101. .start = INT_24XX_MCBSP1_IRQ_TX,
  102. .flags = IORESOURCE_IRQ,
  103. },
  104. {
  105. .name = "rx",
  106. .start = OMAP24XX_DMA_MCBSP1_RX,
  107. .flags = IORESOURCE_DMA,
  108. },
  109. {
  110. .name = "tx",
  111. .start = OMAP24XX_DMA_MCBSP1_TX,
  112. .flags = IORESOURCE_DMA,
  113. },
  114. },
  115. {
  116. {
  117. .start = OMAP24XX_MCBSP2_BASE,
  118. .end = OMAP24XX_MCBSP2_BASE + SZ_256,
  119. .flags = IORESOURCE_MEM,
  120. },
  121. {
  122. .name = "rx",
  123. .start = INT_24XX_MCBSP2_IRQ_RX,
  124. .flags = IORESOURCE_IRQ,
  125. },
  126. {
  127. .name = "tx",
  128. .start = INT_24XX_MCBSP2_IRQ_TX,
  129. .flags = IORESOURCE_IRQ,
  130. },
  131. {
  132. .name = "rx",
  133. .start = OMAP24XX_DMA_MCBSP2_RX,
  134. .flags = IORESOURCE_DMA,
  135. },
  136. {
  137. .name = "tx",
  138. .start = OMAP24XX_DMA_MCBSP2_TX,
  139. .flags = IORESOURCE_DMA,
  140. },
  141. },
  142. };
  143. #define OMAP2420_MCBSP_RES_SZ ARRAY_SIZE(omap2420_mcbsp_res[1])
  144. #define OMAP2420_MCBSP_COUNT ARRAY_SIZE(omap2420_mcbsp_res)
  145. #else
  146. #define omap2420_mcbsp_res NULL
  147. #define OMAP2420_MCBSP_RES_SZ 0
  148. #define OMAP2420_MCBSP_COUNT 0
  149. #endif
  150. #define omap2420_mcbsp_pdata NULL
  151. #ifdef CONFIG_SOC_OMAP2430
  152. struct resource omap2430_mcbsp_res[][6] = {
  153. {
  154. {
  155. .start = OMAP24XX_MCBSP1_BASE,
  156. .end = OMAP24XX_MCBSP1_BASE + SZ_256,
  157. .flags = IORESOURCE_MEM,
  158. },
  159. {
  160. .name = "rx",
  161. .start = INT_24XX_MCBSP1_IRQ_RX,
  162. .flags = IORESOURCE_IRQ,
  163. },
  164. {
  165. .name = "tx",
  166. .start = INT_24XX_MCBSP1_IRQ_TX,
  167. .flags = IORESOURCE_IRQ,
  168. },
  169. {
  170. .name = "rx",
  171. .start = OMAP24XX_DMA_MCBSP1_RX,
  172. .flags = IORESOURCE_DMA,
  173. },
  174. {
  175. .name = "tx",
  176. .start = OMAP24XX_DMA_MCBSP1_TX,
  177. .flags = IORESOURCE_DMA,
  178. },
  179. },
  180. {
  181. {
  182. .start = OMAP24XX_MCBSP2_BASE,
  183. .end = OMAP24XX_MCBSP2_BASE + SZ_256,
  184. .flags = IORESOURCE_MEM,
  185. },
  186. {
  187. .name = "rx",
  188. .start = INT_24XX_MCBSP2_IRQ_RX,
  189. .flags = IORESOURCE_IRQ,
  190. },
  191. {
  192. .name = "tx",
  193. .start = INT_24XX_MCBSP2_IRQ_TX,
  194. .flags = IORESOURCE_IRQ,
  195. },
  196. {
  197. .name = "rx",
  198. .start = OMAP24XX_DMA_MCBSP2_RX,
  199. .flags = IORESOURCE_DMA,
  200. },
  201. {
  202. .name = "tx",
  203. .start = OMAP24XX_DMA_MCBSP2_TX,
  204. .flags = IORESOURCE_DMA,
  205. },
  206. },
  207. {
  208. {
  209. .start = OMAP2430_MCBSP3_BASE,
  210. .end = OMAP2430_MCBSP3_BASE + SZ_256,
  211. .flags = IORESOURCE_MEM,
  212. },
  213. {
  214. .name = "rx",
  215. .start = INT_24XX_MCBSP3_IRQ_RX,
  216. .flags = IORESOURCE_IRQ,
  217. },
  218. {
  219. .name = "tx",
  220. .start = INT_24XX_MCBSP3_IRQ_TX,
  221. .flags = IORESOURCE_IRQ,
  222. },
  223. {
  224. .name = "rx",
  225. .start = OMAP24XX_DMA_MCBSP3_RX,
  226. .flags = IORESOURCE_DMA,
  227. },
  228. {
  229. .name = "tx",
  230. .start = OMAP24XX_DMA_MCBSP3_TX,
  231. .flags = IORESOURCE_DMA,
  232. },
  233. },
  234. {
  235. {
  236. .start = OMAP2430_MCBSP4_BASE,
  237. .end = OMAP2430_MCBSP4_BASE + SZ_256,
  238. .flags = IORESOURCE_MEM,
  239. },
  240. {
  241. .name = "rx",
  242. .start = INT_24XX_MCBSP4_IRQ_RX,
  243. .flags = IORESOURCE_IRQ,
  244. },
  245. {
  246. .name = "tx",
  247. .start = INT_24XX_MCBSP4_IRQ_TX,
  248. .flags = IORESOURCE_IRQ,
  249. },
  250. {
  251. .name = "rx",
  252. .start = OMAP24XX_DMA_MCBSP4_RX,
  253. .flags = IORESOURCE_DMA,
  254. },
  255. {
  256. .name = "tx",
  257. .start = OMAP24XX_DMA_MCBSP4_TX,
  258. .flags = IORESOURCE_DMA,
  259. },
  260. },
  261. {
  262. {
  263. .start = OMAP2430_MCBSP5_BASE,
  264. .end = OMAP2430_MCBSP5_BASE + SZ_256,
  265. .flags = IORESOURCE_MEM,
  266. },
  267. {
  268. .name = "rx",
  269. .start = INT_24XX_MCBSP5_IRQ_RX,
  270. .flags = IORESOURCE_IRQ,
  271. },
  272. {
  273. .name = "tx",
  274. .start = INT_24XX_MCBSP5_IRQ_TX,
  275. .flags = IORESOURCE_IRQ,
  276. },
  277. {
  278. .name = "rx",
  279. .start = OMAP24XX_DMA_MCBSP5_RX,
  280. .flags = IORESOURCE_DMA,
  281. },
  282. {
  283. .name = "tx",
  284. .start = OMAP24XX_DMA_MCBSP5_TX,
  285. .flags = IORESOURCE_DMA,
  286. },
  287. },
  288. };
  289. #define OMAP2430_MCBSP_RES_SZ ARRAY_SIZE(omap2430_mcbsp_res[1])
  290. #define OMAP2430_MCBSP_COUNT ARRAY_SIZE(omap2430_mcbsp_res)
  291. #else
  292. #define omap2430_mcbsp_res NULL
  293. #define OMAP2430_MCBSP_RES_SZ 0
  294. #define OMAP2430_MCBSP_COUNT 0
  295. #endif
  296. #define omap2430_mcbsp_pdata NULL
  297. #ifdef CONFIG_ARCH_OMAP3
  298. struct resource omap34xx_mcbsp_res[][7] = {
  299. {
  300. {
  301. .start = OMAP34XX_MCBSP1_BASE,
  302. .end = OMAP34XX_MCBSP1_BASE + SZ_256,
  303. .flags = IORESOURCE_MEM,
  304. },
  305. {
  306. .name = "rx",
  307. .start = INT_24XX_MCBSP1_IRQ_RX,
  308. .flags = IORESOURCE_IRQ,
  309. },
  310. {
  311. .name = "tx",
  312. .start = INT_24XX_MCBSP1_IRQ_TX,
  313. .flags = IORESOURCE_IRQ,
  314. },
  315. {
  316. .name = "rx",
  317. .start = OMAP24XX_DMA_MCBSP1_RX,
  318. .flags = IORESOURCE_DMA,
  319. },
  320. {
  321. .name = "tx",
  322. .start = OMAP24XX_DMA_MCBSP1_TX,
  323. .flags = IORESOURCE_DMA,
  324. },
  325. },
  326. {
  327. {
  328. .start = OMAP34XX_MCBSP2_BASE,
  329. .end = OMAP34XX_MCBSP2_BASE + SZ_256,
  330. .flags = IORESOURCE_MEM,
  331. },
  332. {
  333. .name = "sidetone",
  334. .start = OMAP34XX_MCBSP2_ST_BASE,
  335. .end = OMAP34XX_MCBSP2_ST_BASE + SZ_256,
  336. .flags = IORESOURCE_MEM,
  337. },
  338. {
  339. .name = "rx",
  340. .start = INT_24XX_MCBSP2_IRQ_RX,
  341. .flags = IORESOURCE_IRQ,
  342. },
  343. {
  344. .name = "tx",
  345. .start = INT_24XX_MCBSP2_IRQ_TX,
  346. .flags = IORESOURCE_IRQ,
  347. },
  348. {
  349. .name = "rx",
  350. .start = OMAP24XX_DMA_MCBSP2_RX,
  351. .flags = IORESOURCE_DMA,
  352. },
  353. {
  354. .name = "tx",
  355. .start = OMAP24XX_DMA_MCBSP2_TX,
  356. .flags = IORESOURCE_DMA,
  357. },
  358. },
  359. {
  360. {
  361. .start = OMAP34XX_MCBSP3_BASE,
  362. .end = OMAP34XX_MCBSP3_BASE + SZ_256,
  363. .flags = IORESOURCE_MEM,
  364. },
  365. {
  366. .name = "sidetone",
  367. .start = OMAP34XX_MCBSP3_ST_BASE,
  368. .end = OMAP34XX_MCBSP3_ST_BASE + SZ_256,
  369. .flags = IORESOURCE_MEM,
  370. },
  371. {
  372. .name = "rx",
  373. .start = INT_24XX_MCBSP3_IRQ_RX,
  374. .flags = IORESOURCE_IRQ,
  375. },
  376. {
  377. .name = "tx",
  378. .start = INT_24XX_MCBSP3_IRQ_TX,
  379. .flags = IORESOURCE_IRQ,
  380. },
  381. {
  382. .name = "rx",
  383. .start = OMAP24XX_DMA_MCBSP3_RX,
  384. .flags = IORESOURCE_DMA,
  385. },
  386. {
  387. .name = "tx",
  388. .start = OMAP24XX_DMA_MCBSP3_TX,
  389. .flags = IORESOURCE_DMA,
  390. },
  391. },
  392. {
  393. {
  394. .start = OMAP34XX_MCBSP4_BASE,
  395. .end = OMAP34XX_MCBSP4_BASE + SZ_256,
  396. .flags = IORESOURCE_MEM,
  397. },
  398. {
  399. .name = "rx",
  400. .start = INT_24XX_MCBSP4_IRQ_RX,
  401. .flags = IORESOURCE_IRQ,
  402. },
  403. {
  404. .name = "tx",
  405. .start = INT_24XX_MCBSP4_IRQ_TX,
  406. .flags = IORESOURCE_IRQ,
  407. },
  408. {
  409. .name = "rx",
  410. .start = OMAP24XX_DMA_MCBSP4_RX,
  411. .flags = IORESOURCE_DMA,
  412. },
  413. {
  414. .name = "tx",
  415. .start = OMAP24XX_DMA_MCBSP4_TX,
  416. .flags = IORESOURCE_DMA,
  417. },
  418. },
  419. {
  420. {
  421. .start = OMAP34XX_MCBSP5_BASE,
  422. .end = OMAP34XX_MCBSP5_BASE + SZ_256,
  423. .flags = IORESOURCE_MEM,
  424. },
  425. {
  426. .name = "rx",
  427. .start = INT_24XX_MCBSP5_IRQ_RX,
  428. .flags = IORESOURCE_IRQ,
  429. },
  430. {
  431. .name = "tx",
  432. .start = INT_24XX_MCBSP5_IRQ_TX,
  433. .flags = IORESOURCE_IRQ,
  434. },
  435. {
  436. .name = "rx",
  437. .start = OMAP24XX_DMA_MCBSP5_RX,
  438. .flags = IORESOURCE_DMA,
  439. },
  440. {
  441. .name = "tx",
  442. .start = OMAP24XX_DMA_MCBSP5_TX,
  443. .flags = IORESOURCE_DMA,
  444. },
  445. },
  446. };
  447. static struct omap_mcbsp_platform_data omap34xx_mcbsp_pdata[] = {
  448. {
  449. .buffer_size = 0x80, /* The FIFO has 128 locations */
  450. },
  451. {
  452. .buffer_size = 0x500, /* The FIFO has 1024 + 256 locations */
  453. },
  454. {
  455. .buffer_size = 0x80, /* The FIFO has 128 locations */
  456. },
  457. {
  458. .buffer_size = 0x80, /* The FIFO has 128 locations */
  459. },
  460. {
  461. .buffer_size = 0x80, /* The FIFO has 128 locations */
  462. },
  463. };
  464. #define OMAP34XX_MCBSP_RES_SZ ARRAY_SIZE(omap34xx_mcbsp_res[1])
  465. #define OMAP34XX_MCBSP_COUNT ARRAY_SIZE(omap34xx_mcbsp_res)
  466. #else
  467. #define omap34xx_mcbsp_pdata NULL
  468. #define omap34XX_mcbsp_res NULL
  469. #define OMAP34XX_MCBSP_RES_SZ 0
  470. #define OMAP34XX_MCBSP_COUNT 0
  471. #endif
  472. struct resource omap44xx_mcbsp_res[][6] = {
  473. {
  474. {
  475. .name = "mpu",
  476. .start = OMAP44XX_MCBSP1_BASE,
  477. .end = OMAP44XX_MCBSP1_BASE + SZ_256,
  478. .flags = IORESOURCE_MEM,
  479. },
  480. {
  481. .name = "dma",
  482. .start = OMAP44XX_MCBSP1_DMA_BASE,
  483. .end = OMAP44XX_MCBSP1_DMA_BASE + SZ_256,
  484. .flags = IORESOURCE_MEM,
  485. },
  486. {
  487. .name = "rx",
  488. .start = 0,
  489. .flags = IORESOURCE_IRQ,
  490. },
  491. {
  492. .name = "tx",
  493. .start = OMAP44XX_IRQ_MCBSP1,
  494. .flags = IORESOURCE_IRQ,
  495. },
  496. {
  497. .name = "rx",
  498. .start = OMAP44XX_DMA_MCBSP1_RX,
  499. .flags = IORESOURCE_DMA,
  500. },
  501. {
  502. .name = "tx",
  503. .start = OMAP44XX_DMA_MCBSP1_TX,
  504. .flags = IORESOURCE_DMA,
  505. },
  506. },
  507. {
  508. {
  509. .name = "mpu",
  510. .start = OMAP44XX_MCBSP2_BASE,
  511. .end = OMAP44XX_MCBSP2_BASE + SZ_256,
  512. .flags = IORESOURCE_MEM,
  513. },
  514. {
  515. .name = "dma",
  516. .start = OMAP44XX_MCBSP2_DMA_BASE,
  517. .end = OMAP44XX_MCBSP2_DMA_BASE + SZ_256,
  518. .flags = IORESOURCE_MEM,
  519. },
  520. {
  521. .name = "rx",
  522. .start = 0,
  523. .flags = IORESOURCE_IRQ,
  524. },
  525. {
  526. .name = "tx",
  527. .start = OMAP44XX_IRQ_MCBSP2,
  528. .flags = IORESOURCE_IRQ,
  529. },
  530. {
  531. .name = "rx",
  532. .start = OMAP44XX_DMA_MCBSP2_RX,
  533. .flags = IORESOURCE_DMA,
  534. },
  535. {
  536. .name = "tx",
  537. .start = OMAP44XX_DMA_MCBSP2_TX,
  538. .flags = IORESOURCE_DMA,
  539. },
  540. },
  541. {
  542. {
  543. .name = "mpu",
  544. .start = OMAP44XX_MCBSP3_BASE,
  545. .end = OMAP44XX_MCBSP3_BASE + SZ_256,
  546. .flags = IORESOURCE_MEM,
  547. },
  548. {
  549. .name = "dma",
  550. .start = OMAP44XX_MCBSP3_DMA_BASE,
  551. .end = OMAP44XX_MCBSP3_DMA_BASE + SZ_256,
  552. .flags = IORESOURCE_MEM,
  553. },
  554. {
  555. .name = "rx",
  556. .start = 0,
  557. .flags = IORESOURCE_IRQ,
  558. },
  559. {
  560. .name = "tx",
  561. .start = OMAP44XX_IRQ_MCBSP3,
  562. .flags = IORESOURCE_IRQ,
  563. },
  564. {
  565. .name = "rx",
  566. .start = OMAP44XX_DMA_MCBSP3_RX,
  567. .flags = IORESOURCE_DMA,
  568. },
  569. {
  570. .name = "tx",
  571. .start = OMAP44XX_DMA_MCBSP3_TX,
  572. .flags = IORESOURCE_DMA,
  573. },
  574. },
  575. {
  576. {
  577. .start = OMAP44XX_MCBSP4_BASE,
  578. .end = OMAP44XX_MCBSP4_BASE + SZ_256,
  579. .flags = IORESOURCE_MEM,
  580. },
  581. {
  582. .name = "rx",
  583. .start = 0,
  584. .flags = IORESOURCE_IRQ,
  585. },
  586. {
  587. .name = "tx",
  588. .start = OMAP44XX_IRQ_MCBSP4,
  589. .flags = IORESOURCE_IRQ,
  590. },
  591. {
  592. .name = "rx",
  593. .start = OMAP44XX_DMA_MCBSP4_RX,
  594. .flags = IORESOURCE_DMA,
  595. },
  596. {
  597. .name = "tx",
  598. .start = OMAP44XX_DMA_MCBSP4_TX,
  599. .flags = IORESOURCE_DMA,
  600. },
  601. },
  602. };
  603. #define omap44xx_mcbsp_pdata NULL
  604. #define OMAP44XX_MCBSP_RES_SZ ARRAY_SIZE(omap44xx_mcbsp_res[1])
  605. #define OMAP44XX_MCBSP_COUNT ARRAY_SIZE(omap44xx_mcbsp_res)
  606. static int __init omap2_mcbsp_init(void)
  607. {
  608. if (cpu_is_omap2420())
  609. omap_mcbsp_count = OMAP2420_MCBSP_COUNT;
  610. else if (cpu_is_omap2430())
  611. omap_mcbsp_count = OMAP2430_MCBSP_COUNT;
  612. else if (cpu_is_omap34xx())
  613. omap_mcbsp_count = OMAP34XX_MCBSP_COUNT;
  614. else if (cpu_is_omap44xx())
  615. omap_mcbsp_count = OMAP44XX_MCBSP_COUNT;
  616. mcbsp_ptr = kzalloc(omap_mcbsp_count * sizeof(struct omap_mcbsp *),
  617. GFP_KERNEL);
  618. if (!mcbsp_ptr)
  619. return -ENOMEM;
  620. if (cpu_is_omap2420())
  621. omap_mcbsp_register_board_cfg(omap2420_mcbsp_res[0],
  622. OMAP2420_MCBSP_RES_SZ,
  623. omap2420_mcbsp_pdata,
  624. OMAP2420_MCBSP_COUNT);
  625. if (cpu_is_omap2430())
  626. omap_mcbsp_register_board_cfg(omap2430_mcbsp_res[0],
  627. OMAP2420_MCBSP_RES_SZ,
  628. omap2430_mcbsp_pdata,
  629. OMAP2430_MCBSP_COUNT);
  630. if (cpu_is_omap34xx())
  631. omap_mcbsp_register_board_cfg(omap34xx_mcbsp_res[0],
  632. OMAP34XX_MCBSP_RES_SZ,
  633. omap34xx_mcbsp_pdata,
  634. OMAP34XX_MCBSP_COUNT);
  635. if (cpu_is_omap44xx())
  636. omap_mcbsp_register_board_cfg(omap44xx_mcbsp_res[0],
  637. OMAP44XX_MCBSP_RES_SZ,
  638. omap44xx_mcbsp_pdata,
  639. OMAP44XX_MCBSP_COUNT);
  640. return omap_mcbsp_init();
  641. }
  642. arch_initcall(omap2_mcbsp_init);