omap_hwmod_2430_data.c 28 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048
  1. /*
  2. * omap_hwmod_2430_data.c - hardware modules present on the OMAP2430 chips
  3. *
  4. * Copyright (C) 2009-2010 Nokia Corporation
  5. * Paul Walmsley
  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. * XXX handle crossbar/shared link difference for L3?
  12. * XXX these should be marked initdata for multi-OMAP kernels
  13. */
  14. #include <plat/omap_hwmod.h>
  15. #include <mach/irqs.h>
  16. #include <plat/cpu.h>
  17. #include <plat/dma.h>
  18. #include <plat/serial.h>
  19. #include <plat/i2c.h>
  20. #include <plat/gpio.h>
  21. #include "omap_hwmod_common_data.h"
  22. #include "prm-regbits-24xx.h"
  23. #include "cm-regbits-24xx.h"
  24. #include "wd_timer.h"
  25. /*
  26. * OMAP2430 hardware module integration data
  27. *
  28. * ALl of the data in this section should be autogeneratable from the
  29. * TI hardware database or other technical documentation. Data that
  30. * is driver-specific or driver-kernel integration-specific belongs
  31. * elsewhere.
  32. */
  33. static struct omap_hwmod omap2430_mpu_hwmod;
  34. static struct omap_hwmod omap2430_iva_hwmod;
  35. static struct omap_hwmod omap2430_l3_main_hwmod;
  36. static struct omap_hwmod omap2430_l4_core_hwmod;
  37. static struct omap_hwmod omap2430_wd_timer2_hwmod;
  38. static struct omap_hwmod omap2430_gpio1_hwmod;
  39. static struct omap_hwmod omap2430_gpio2_hwmod;
  40. static struct omap_hwmod omap2430_gpio3_hwmod;
  41. static struct omap_hwmod omap2430_gpio4_hwmod;
  42. static struct omap_hwmod omap2430_gpio5_hwmod;
  43. static struct omap_hwmod omap2430_dma_system_hwmod;
  44. /* L3 -> L4_CORE interface */
  45. static struct omap_hwmod_ocp_if omap2430_l3_main__l4_core = {
  46. .master = &omap2430_l3_main_hwmod,
  47. .slave = &omap2430_l4_core_hwmod,
  48. .user = OCP_USER_MPU | OCP_USER_SDMA,
  49. };
  50. /* MPU -> L3 interface */
  51. static struct omap_hwmod_ocp_if omap2430_mpu__l3_main = {
  52. .master = &omap2430_mpu_hwmod,
  53. .slave = &omap2430_l3_main_hwmod,
  54. .user = OCP_USER_MPU,
  55. };
  56. /* Slave interfaces on the L3 interconnect */
  57. static struct omap_hwmod_ocp_if *omap2430_l3_main_slaves[] = {
  58. &omap2430_mpu__l3_main,
  59. };
  60. /* Master interfaces on the L3 interconnect */
  61. static struct omap_hwmod_ocp_if *omap2430_l3_main_masters[] = {
  62. &omap2430_l3_main__l4_core,
  63. };
  64. /* L3 */
  65. static struct omap_hwmod omap2430_l3_main_hwmod = {
  66. .name = "l3_main",
  67. .class = &l3_hwmod_class,
  68. .masters = omap2430_l3_main_masters,
  69. .masters_cnt = ARRAY_SIZE(omap2430_l3_main_masters),
  70. .slaves = omap2430_l3_main_slaves,
  71. .slaves_cnt = ARRAY_SIZE(omap2430_l3_main_slaves),
  72. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
  73. .flags = HWMOD_NO_IDLEST,
  74. };
  75. static struct omap_hwmod omap2430_l4_wkup_hwmod;
  76. static struct omap_hwmod omap2430_uart1_hwmod;
  77. static struct omap_hwmod omap2430_uart2_hwmod;
  78. static struct omap_hwmod omap2430_uart3_hwmod;
  79. static struct omap_hwmod omap2430_i2c1_hwmod;
  80. static struct omap_hwmod omap2430_i2c2_hwmod;
  81. static struct omap_hwmod omap2430_usbhsotg_hwmod;
  82. /* l3_core -> usbhsotg interface */
  83. static struct omap_hwmod_ocp_if omap2430_usbhsotg__l3 = {
  84. .master = &omap2430_usbhsotg_hwmod,
  85. .slave = &omap2430_l3_main_hwmod,
  86. .clk = "core_l3_ck",
  87. .user = OCP_USER_MPU,
  88. };
  89. /* I2C IP block address space length (in bytes) */
  90. #define OMAP2_I2C_AS_LEN 128
  91. /* L4 CORE -> I2C1 interface */
  92. static struct omap_hwmod_addr_space omap2430_i2c1_addr_space[] = {
  93. {
  94. .pa_start = 0x48070000,
  95. .pa_end = 0x48070000 + OMAP2_I2C_AS_LEN - 1,
  96. .flags = ADDR_TYPE_RT,
  97. },
  98. };
  99. static struct omap_hwmod_ocp_if omap2430_l4_core__i2c1 = {
  100. .master = &omap2430_l4_core_hwmod,
  101. .slave = &omap2430_i2c1_hwmod,
  102. .clk = "i2c1_ick",
  103. .addr = omap2430_i2c1_addr_space,
  104. .addr_cnt = ARRAY_SIZE(omap2430_i2c1_addr_space),
  105. .user = OCP_USER_MPU | OCP_USER_SDMA,
  106. };
  107. /* L4 CORE -> I2C2 interface */
  108. static struct omap_hwmod_addr_space omap2430_i2c2_addr_space[] = {
  109. {
  110. .pa_start = 0x48072000,
  111. .pa_end = 0x48072000 + OMAP2_I2C_AS_LEN - 1,
  112. .flags = ADDR_TYPE_RT,
  113. },
  114. };
  115. static struct omap_hwmod_ocp_if omap2430_l4_core__i2c2 = {
  116. .master = &omap2430_l4_core_hwmod,
  117. .slave = &omap2430_i2c2_hwmod,
  118. .clk = "i2c2_ick",
  119. .addr = omap2430_i2c2_addr_space,
  120. .addr_cnt = ARRAY_SIZE(omap2430_i2c2_addr_space),
  121. .user = OCP_USER_MPU | OCP_USER_SDMA,
  122. };
  123. /* L4_CORE -> L4_WKUP interface */
  124. static struct omap_hwmod_ocp_if omap2430_l4_core__l4_wkup = {
  125. .master = &omap2430_l4_core_hwmod,
  126. .slave = &omap2430_l4_wkup_hwmod,
  127. .user = OCP_USER_MPU | OCP_USER_SDMA,
  128. };
  129. /* L4 CORE -> UART1 interface */
  130. static struct omap_hwmod_addr_space omap2430_uart1_addr_space[] = {
  131. {
  132. .pa_start = OMAP2_UART1_BASE,
  133. .pa_end = OMAP2_UART1_BASE + SZ_8K - 1,
  134. .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
  135. },
  136. };
  137. static struct omap_hwmod_ocp_if omap2_l4_core__uart1 = {
  138. .master = &omap2430_l4_core_hwmod,
  139. .slave = &omap2430_uart1_hwmod,
  140. .clk = "uart1_ick",
  141. .addr = omap2430_uart1_addr_space,
  142. .addr_cnt = ARRAY_SIZE(omap2430_uart1_addr_space),
  143. .user = OCP_USER_MPU | OCP_USER_SDMA,
  144. };
  145. /* L4 CORE -> UART2 interface */
  146. static struct omap_hwmod_addr_space omap2430_uart2_addr_space[] = {
  147. {
  148. .pa_start = OMAP2_UART2_BASE,
  149. .pa_end = OMAP2_UART2_BASE + SZ_1K - 1,
  150. .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
  151. },
  152. };
  153. static struct omap_hwmod_ocp_if omap2_l4_core__uart2 = {
  154. .master = &omap2430_l4_core_hwmod,
  155. .slave = &omap2430_uart2_hwmod,
  156. .clk = "uart2_ick",
  157. .addr = omap2430_uart2_addr_space,
  158. .addr_cnt = ARRAY_SIZE(omap2430_uart2_addr_space),
  159. .user = OCP_USER_MPU | OCP_USER_SDMA,
  160. };
  161. /* L4 PER -> UART3 interface */
  162. static struct omap_hwmod_addr_space omap2430_uart3_addr_space[] = {
  163. {
  164. .pa_start = OMAP2_UART3_BASE,
  165. .pa_end = OMAP2_UART3_BASE + SZ_1K - 1,
  166. .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
  167. },
  168. };
  169. static struct omap_hwmod_ocp_if omap2_l4_core__uart3 = {
  170. .master = &omap2430_l4_core_hwmod,
  171. .slave = &omap2430_uart3_hwmod,
  172. .clk = "uart3_ick",
  173. .addr = omap2430_uart3_addr_space,
  174. .addr_cnt = ARRAY_SIZE(omap2430_uart3_addr_space),
  175. .user = OCP_USER_MPU | OCP_USER_SDMA,
  176. };
  177. /*
  178. * usbhsotg interface data
  179. */
  180. static struct omap_hwmod_addr_space omap2430_usbhsotg_addrs[] = {
  181. {
  182. .pa_start = OMAP243X_HS_BASE,
  183. .pa_end = OMAP243X_HS_BASE + SZ_4K - 1,
  184. .flags = ADDR_TYPE_RT
  185. },
  186. };
  187. /* l4_core ->usbhsotg interface */
  188. static struct omap_hwmod_ocp_if omap2430_l4_core__usbhsotg = {
  189. .master = &omap2430_l4_core_hwmod,
  190. .slave = &omap2430_usbhsotg_hwmod,
  191. .clk = "usb_l4_ick",
  192. .addr = omap2430_usbhsotg_addrs,
  193. .addr_cnt = ARRAY_SIZE(omap2430_usbhsotg_addrs),
  194. .user = OCP_USER_MPU,
  195. };
  196. static struct omap_hwmod_ocp_if *omap2430_usbhsotg_masters[] = {
  197. &omap2430_usbhsotg__l3,
  198. };
  199. static struct omap_hwmod_ocp_if *omap2430_usbhsotg_slaves[] = {
  200. &omap2430_l4_core__usbhsotg,
  201. };
  202. /* Slave interfaces on the L4_CORE interconnect */
  203. static struct omap_hwmod_ocp_if *omap2430_l4_core_slaves[] = {
  204. &omap2430_l3_main__l4_core,
  205. };
  206. /* Master interfaces on the L4_CORE interconnect */
  207. static struct omap_hwmod_ocp_if *omap2430_l4_core_masters[] = {
  208. &omap2430_l4_core__l4_wkup,
  209. };
  210. /* L4 CORE */
  211. static struct omap_hwmod omap2430_l4_core_hwmod = {
  212. .name = "l4_core",
  213. .class = &l4_hwmod_class,
  214. .masters = omap2430_l4_core_masters,
  215. .masters_cnt = ARRAY_SIZE(omap2430_l4_core_masters),
  216. .slaves = omap2430_l4_core_slaves,
  217. .slaves_cnt = ARRAY_SIZE(omap2430_l4_core_slaves),
  218. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
  219. .flags = HWMOD_NO_IDLEST,
  220. };
  221. /* Slave interfaces on the L4_WKUP interconnect */
  222. static struct omap_hwmod_ocp_if *omap2430_l4_wkup_slaves[] = {
  223. &omap2430_l4_core__l4_wkup,
  224. &omap2_l4_core__uart1,
  225. &omap2_l4_core__uart2,
  226. &omap2_l4_core__uart3,
  227. };
  228. /* Master interfaces on the L4_WKUP interconnect */
  229. static struct omap_hwmod_ocp_if *omap2430_l4_wkup_masters[] = {
  230. };
  231. /* L4 WKUP */
  232. static struct omap_hwmod omap2430_l4_wkup_hwmod = {
  233. .name = "l4_wkup",
  234. .class = &l4_hwmod_class,
  235. .masters = omap2430_l4_wkup_masters,
  236. .masters_cnt = ARRAY_SIZE(omap2430_l4_wkup_masters),
  237. .slaves = omap2430_l4_wkup_slaves,
  238. .slaves_cnt = ARRAY_SIZE(omap2430_l4_wkup_slaves),
  239. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
  240. .flags = HWMOD_NO_IDLEST,
  241. };
  242. /* Master interfaces on the MPU device */
  243. static struct omap_hwmod_ocp_if *omap2430_mpu_masters[] = {
  244. &omap2430_mpu__l3_main,
  245. };
  246. /* MPU */
  247. static struct omap_hwmod omap2430_mpu_hwmod = {
  248. .name = "mpu",
  249. .class = &mpu_hwmod_class,
  250. .main_clk = "mpu_ck",
  251. .masters = omap2430_mpu_masters,
  252. .masters_cnt = ARRAY_SIZE(omap2430_mpu_masters),
  253. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
  254. };
  255. /*
  256. * IVA2_1 interface data
  257. */
  258. /* IVA2 <- L3 interface */
  259. static struct omap_hwmod_ocp_if omap2430_l3__iva = {
  260. .master = &omap2430_l3_main_hwmod,
  261. .slave = &omap2430_iva_hwmod,
  262. .clk = "dsp_fck",
  263. .user = OCP_USER_MPU | OCP_USER_SDMA,
  264. };
  265. static struct omap_hwmod_ocp_if *omap2430_iva_masters[] = {
  266. &omap2430_l3__iva,
  267. };
  268. /*
  269. * IVA2 (IVA2)
  270. */
  271. static struct omap_hwmod omap2430_iva_hwmod = {
  272. .name = "iva",
  273. .class = &iva_hwmod_class,
  274. .masters = omap2430_iva_masters,
  275. .masters_cnt = ARRAY_SIZE(omap2430_iva_masters),
  276. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
  277. };
  278. /* l4_wkup -> wd_timer2 */
  279. static struct omap_hwmod_addr_space omap2430_wd_timer2_addrs[] = {
  280. {
  281. .pa_start = 0x49016000,
  282. .pa_end = 0x4901607f,
  283. .flags = ADDR_TYPE_RT
  284. },
  285. };
  286. static struct omap_hwmod_ocp_if omap2430_l4_wkup__wd_timer2 = {
  287. .master = &omap2430_l4_wkup_hwmod,
  288. .slave = &omap2430_wd_timer2_hwmod,
  289. .clk = "mpu_wdt_ick",
  290. .addr = omap2430_wd_timer2_addrs,
  291. .addr_cnt = ARRAY_SIZE(omap2430_wd_timer2_addrs),
  292. .user = OCP_USER_MPU | OCP_USER_SDMA,
  293. };
  294. /*
  295. * 'wd_timer' class
  296. * 32-bit watchdog upward counter that generates a pulse on the reset pin on
  297. * overflow condition
  298. */
  299. static struct omap_hwmod_class_sysconfig omap2430_wd_timer_sysc = {
  300. .rev_offs = 0x0,
  301. .sysc_offs = 0x0010,
  302. .syss_offs = 0x0014,
  303. .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET |
  304. SYSC_HAS_AUTOIDLE),
  305. .sysc_fields = &omap_hwmod_sysc_type1,
  306. };
  307. static struct omap_hwmod_class omap2430_wd_timer_hwmod_class = {
  308. .name = "wd_timer",
  309. .sysc = &omap2430_wd_timer_sysc,
  310. .pre_shutdown = &omap2_wd_timer_disable
  311. };
  312. /* wd_timer2 */
  313. static struct omap_hwmod_ocp_if *omap2430_wd_timer2_slaves[] = {
  314. &omap2430_l4_wkup__wd_timer2,
  315. };
  316. static struct omap_hwmod omap2430_wd_timer2_hwmod = {
  317. .name = "wd_timer2",
  318. .class = &omap2430_wd_timer_hwmod_class,
  319. .main_clk = "mpu_wdt_fck",
  320. .prcm = {
  321. .omap2 = {
  322. .prcm_reg_id = 1,
  323. .module_bit = OMAP24XX_EN_MPU_WDT_SHIFT,
  324. .module_offs = WKUP_MOD,
  325. .idlest_reg_id = 1,
  326. .idlest_idle_bit = OMAP24XX_ST_MPU_WDT_SHIFT,
  327. },
  328. },
  329. .slaves = omap2430_wd_timer2_slaves,
  330. .slaves_cnt = ARRAY_SIZE(omap2430_wd_timer2_slaves),
  331. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
  332. };
  333. /* UART */
  334. static struct omap_hwmod_class_sysconfig uart_sysc = {
  335. .rev_offs = 0x50,
  336. .sysc_offs = 0x54,
  337. .syss_offs = 0x58,
  338. .sysc_flags = (SYSC_HAS_SIDLEMODE |
  339. SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
  340. SYSC_HAS_AUTOIDLE),
  341. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
  342. .sysc_fields = &omap_hwmod_sysc_type1,
  343. };
  344. static struct omap_hwmod_class uart_class = {
  345. .name = "uart",
  346. .sysc = &uart_sysc,
  347. };
  348. /* UART1 */
  349. static struct omap_hwmod_irq_info uart1_mpu_irqs[] = {
  350. { .irq = INT_24XX_UART1_IRQ, },
  351. };
  352. static struct omap_hwmod_dma_info uart1_sdma_reqs[] = {
  353. { .name = "rx", .dma_req = OMAP24XX_DMA_UART1_RX, },
  354. { .name = "tx", .dma_req = OMAP24XX_DMA_UART1_TX, },
  355. };
  356. static struct omap_hwmod_ocp_if *omap2430_uart1_slaves[] = {
  357. &omap2_l4_core__uart1,
  358. };
  359. static struct omap_hwmod omap2430_uart1_hwmod = {
  360. .name = "uart1",
  361. .mpu_irqs = uart1_mpu_irqs,
  362. .mpu_irqs_cnt = ARRAY_SIZE(uart1_mpu_irqs),
  363. .sdma_reqs = uart1_sdma_reqs,
  364. .sdma_reqs_cnt = ARRAY_SIZE(uart1_sdma_reqs),
  365. .main_clk = "uart1_fck",
  366. .prcm = {
  367. .omap2 = {
  368. .module_offs = CORE_MOD,
  369. .prcm_reg_id = 1,
  370. .module_bit = OMAP24XX_EN_UART1_SHIFT,
  371. .idlest_reg_id = 1,
  372. .idlest_idle_bit = OMAP24XX_EN_UART1_SHIFT,
  373. },
  374. },
  375. .slaves = omap2430_uart1_slaves,
  376. .slaves_cnt = ARRAY_SIZE(omap2430_uart1_slaves),
  377. .class = &uart_class,
  378. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
  379. };
  380. /* UART2 */
  381. static struct omap_hwmod_irq_info uart2_mpu_irqs[] = {
  382. { .irq = INT_24XX_UART2_IRQ, },
  383. };
  384. static struct omap_hwmod_dma_info uart2_sdma_reqs[] = {
  385. { .name = "rx", .dma_req = OMAP24XX_DMA_UART2_RX, },
  386. { .name = "tx", .dma_req = OMAP24XX_DMA_UART2_TX, },
  387. };
  388. static struct omap_hwmod_ocp_if *omap2430_uart2_slaves[] = {
  389. &omap2_l4_core__uart2,
  390. };
  391. static struct omap_hwmod omap2430_uart2_hwmod = {
  392. .name = "uart2",
  393. .mpu_irqs = uart2_mpu_irqs,
  394. .mpu_irqs_cnt = ARRAY_SIZE(uart2_mpu_irqs),
  395. .sdma_reqs = uart2_sdma_reqs,
  396. .sdma_reqs_cnt = ARRAY_SIZE(uart2_sdma_reqs),
  397. .main_clk = "uart2_fck",
  398. .prcm = {
  399. .omap2 = {
  400. .module_offs = CORE_MOD,
  401. .prcm_reg_id = 1,
  402. .module_bit = OMAP24XX_EN_UART2_SHIFT,
  403. .idlest_reg_id = 1,
  404. .idlest_idle_bit = OMAP24XX_EN_UART2_SHIFT,
  405. },
  406. },
  407. .slaves = omap2430_uart2_slaves,
  408. .slaves_cnt = ARRAY_SIZE(omap2430_uart2_slaves),
  409. .class = &uart_class,
  410. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
  411. };
  412. /* UART3 */
  413. static struct omap_hwmod_irq_info uart3_mpu_irqs[] = {
  414. { .irq = INT_24XX_UART3_IRQ, },
  415. };
  416. static struct omap_hwmod_dma_info uart3_sdma_reqs[] = {
  417. { .name = "rx", .dma_req = OMAP24XX_DMA_UART3_RX, },
  418. { .name = "tx", .dma_req = OMAP24XX_DMA_UART3_TX, },
  419. };
  420. static struct omap_hwmod_ocp_if *omap2430_uart3_slaves[] = {
  421. &omap2_l4_core__uart3,
  422. };
  423. static struct omap_hwmod omap2430_uart3_hwmod = {
  424. .name = "uart3",
  425. .mpu_irqs = uart3_mpu_irqs,
  426. .mpu_irqs_cnt = ARRAY_SIZE(uart3_mpu_irqs),
  427. .sdma_reqs = uart3_sdma_reqs,
  428. .sdma_reqs_cnt = ARRAY_SIZE(uart3_sdma_reqs),
  429. .main_clk = "uart3_fck",
  430. .prcm = {
  431. .omap2 = {
  432. .module_offs = CORE_MOD,
  433. .prcm_reg_id = 2,
  434. .module_bit = OMAP24XX_EN_UART3_SHIFT,
  435. .idlest_reg_id = 2,
  436. .idlest_idle_bit = OMAP24XX_EN_UART3_SHIFT,
  437. },
  438. },
  439. .slaves = omap2430_uart3_slaves,
  440. .slaves_cnt = ARRAY_SIZE(omap2430_uart3_slaves),
  441. .class = &uart_class,
  442. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
  443. };
  444. /* I2C common */
  445. static struct omap_hwmod_class_sysconfig i2c_sysc = {
  446. .rev_offs = 0x00,
  447. .sysc_offs = 0x20,
  448. .syss_offs = 0x10,
  449. .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
  450. .sysc_fields = &omap_hwmod_sysc_type1,
  451. };
  452. static struct omap_hwmod_class i2c_class = {
  453. .name = "i2c",
  454. .sysc = &i2c_sysc,
  455. };
  456. static struct omap_i2c_dev_attr i2c_dev_attr = {
  457. .fifo_depth = 8, /* bytes */
  458. };
  459. /* I2C1 */
  460. static struct omap_hwmod_irq_info i2c1_mpu_irqs[] = {
  461. { .irq = INT_24XX_I2C1_IRQ, },
  462. };
  463. static struct omap_hwmod_dma_info i2c1_sdma_reqs[] = {
  464. { .name = "tx", .dma_req = OMAP24XX_DMA_I2C1_TX },
  465. { .name = "rx", .dma_req = OMAP24XX_DMA_I2C1_RX },
  466. };
  467. static struct omap_hwmod_ocp_if *omap2430_i2c1_slaves[] = {
  468. &omap2430_l4_core__i2c1,
  469. };
  470. static struct omap_hwmod omap2430_i2c1_hwmod = {
  471. .name = "i2c1",
  472. .mpu_irqs = i2c1_mpu_irqs,
  473. .mpu_irqs_cnt = ARRAY_SIZE(i2c1_mpu_irqs),
  474. .sdma_reqs = i2c1_sdma_reqs,
  475. .sdma_reqs_cnt = ARRAY_SIZE(i2c1_sdma_reqs),
  476. .main_clk = "i2chs1_fck",
  477. .prcm = {
  478. .omap2 = {
  479. /*
  480. * NOTE: The CM_FCLKEN* and CM_ICLKEN* for
  481. * I2CHS IP's do not follow the usual pattern.
  482. * prcm_reg_id alone cannot be used to program
  483. * the iclk and fclk. Needs to be handled using
  484. * additonal flags when clk handling is moved
  485. * to hwmod framework.
  486. */
  487. .module_offs = CORE_MOD,
  488. .prcm_reg_id = 1,
  489. .module_bit = OMAP2430_EN_I2CHS1_SHIFT,
  490. .idlest_reg_id = 1,
  491. .idlest_idle_bit = OMAP2430_ST_I2CHS1_SHIFT,
  492. },
  493. },
  494. .slaves = omap2430_i2c1_slaves,
  495. .slaves_cnt = ARRAY_SIZE(omap2430_i2c1_slaves),
  496. .class = &i2c_class,
  497. .dev_attr = &i2c_dev_attr,
  498. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
  499. };
  500. /* I2C2 */
  501. static struct omap_hwmod_irq_info i2c2_mpu_irqs[] = {
  502. { .irq = INT_24XX_I2C2_IRQ, },
  503. };
  504. static struct omap_hwmod_dma_info i2c2_sdma_reqs[] = {
  505. { .name = "tx", .dma_req = OMAP24XX_DMA_I2C2_TX },
  506. { .name = "rx", .dma_req = OMAP24XX_DMA_I2C2_RX },
  507. };
  508. static struct omap_hwmod_ocp_if *omap2430_i2c2_slaves[] = {
  509. &omap2430_l4_core__i2c2,
  510. };
  511. static struct omap_hwmod omap2430_i2c2_hwmod = {
  512. .name = "i2c2",
  513. .mpu_irqs = i2c2_mpu_irqs,
  514. .mpu_irqs_cnt = ARRAY_SIZE(i2c2_mpu_irqs),
  515. .sdma_reqs = i2c2_sdma_reqs,
  516. .sdma_reqs_cnt = ARRAY_SIZE(i2c2_sdma_reqs),
  517. .main_clk = "i2chs2_fck",
  518. .prcm = {
  519. .omap2 = {
  520. .module_offs = CORE_MOD,
  521. .prcm_reg_id = 1,
  522. .module_bit = OMAP2430_EN_I2CHS2_SHIFT,
  523. .idlest_reg_id = 1,
  524. .idlest_idle_bit = OMAP2430_ST_I2CHS2_SHIFT,
  525. },
  526. },
  527. .slaves = omap2430_i2c2_slaves,
  528. .slaves_cnt = ARRAY_SIZE(omap2430_i2c2_slaves),
  529. .class = &i2c_class,
  530. .dev_attr = &i2c_dev_attr,
  531. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
  532. };
  533. /* l4_wkup -> gpio1 */
  534. static struct omap_hwmod_addr_space omap2430_gpio1_addr_space[] = {
  535. {
  536. .pa_start = 0x4900C000,
  537. .pa_end = 0x4900C1ff,
  538. .flags = ADDR_TYPE_RT
  539. },
  540. };
  541. static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio1 = {
  542. .master = &omap2430_l4_wkup_hwmod,
  543. .slave = &omap2430_gpio1_hwmod,
  544. .clk = "gpios_ick",
  545. .addr = omap2430_gpio1_addr_space,
  546. .addr_cnt = ARRAY_SIZE(omap2430_gpio1_addr_space),
  547. .user = OCP_USER_MPU | OCP_USER_SDMA,
  548. };
  549. /* l4_wkup -> gpio2 */
  550. static struct omap_hwmod_addr_space omap2430_gpio2_addr_space[] = {
  551. {
  552. .pa_start = 0x4900E000,
  553. .pa_end = 0x4900E1ff,
  554. .flags = ADDR_TYPE_RT
  555. },
  556. };
  557. static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio2 = {
  558. .master = &omap2430_l4_wkup_hwmod,
  559. .slave = &omap2430_gpio2_hwmod,
  560. .clk = "gpios_ick",
  561. .addr = omap2430_gpio2_addr_space,
  562. .addr_cnt = ARRAY_SIZE(omap2430_gpio2_addr_space),
  563. .user = OCP_USER_MPU | OCP_USER_SDMA,
  564. };
  565. /* l4_wkup -> gpio3 */
  566. static struct omap_hwmod_addr_space omap2430_gpio3_addr_space[] = {
  567. {
  568. .pa_start = 0x49010000,
  569. .pa_end = 0x490101ff,
  570. .flags = ADDR_TYPE_RT
  571. },
  572. };
  573. static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio3 = {
  574. .master = &omap2430_l4_wkup_hwmod,
  575. .slave = &omap2430_gpio3_hwmod,
  576. .clk = "gpios_ick",
  577. .addr = omap2430_gpio3_addr_space,
  578. .addr_cnt = ARRAY_SIZE(omap2430_gpio3_addr_space),
  579. .user = OCP_USER_MPU | OCP_USER_SDMA,
  580. };
  581. /* l4_wkup -> gpio4 */
  582. static struct omap_hwmod_addr_space omap2430_gpio4_addr_space[] = {
  583. {
  584. .pa_start = 0x49012000,
  585. .pa_end = 0x490121ff,
  586. .flags = ADDR_TYPE_RT
  587. },
  588. };
  589. static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio4 = {
  590. .master = &omap2430_l4_wkup_hwmod,
  591. .slave = &omap2430_gpio4_hwmod,
  592. .clk = "gpios_ick",
  593. .addr = omap2430_gpio4_addr_space,
  594. .addr_cnt = ARRAY_SIZE(omap2430_gpio4_addr_space),
  595. .user = OCP_USER_MPU | OCP_USER_SDMA,
  596. };
  597. /* l4_core -> gpio5 */
  598. static struct omap_hwmod_addr_space omap2430_gpio5_addr_space[] = {
  599. {
  600. .pa_start = 0x480B6000,
  601. .pa_end = 0x480B61ff,
  602. .flags = ADDR_TYPE_RT
  603. },
  604. };
  605. static struct omap_hwmod_ocp_if omap2430_l4_core__gpio5 = {
  606. .master = &omap2430_l4_core_hwmod,
  607. .slave = &omap2430_gpio5_hwmod,
  608. .clk = "gpio5_ick",
  609. .addr = omap2430_gpio5_addr_space,
  610. .addr_cnt = ARRAY_SIZE(omap2430_gpio5_addr_space),
  611. .user = OCP_USER_MPU | OCP_USER_SDMA,
  612. };
  613. /* gpio dev_attr */
  614. static struct omap_gpio_dev_attr gpio_dev_attr = {
  615. .bank_width = 32,
  616. .dbck_flag = false,
  617. };
  618. static struct omap_hwmod_class_sysconfig omap243x_gpio_sysc = {
  619. .rev_offs = 0x0000,
  620. .sysc_offs = 0x0010,
  621. .syss_offs = 0x0014,
  622. .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
  623. SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
  624. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
  625. .sysc_fields = &omap_hwmod_sysc_type1,
  626. };
  627. /*
  628. * 'gpio' class
  629. * general purpose io module
  630. */
  631. static struct omap_hwmod_class omap243x_gpio_hwmod_class = {
  632. .name = "gpio",
  633. .sysc = &omap243x_gpio_sysc,
  634. .rev = 0,
  635. };
  636. /* gpio1 */
  637. static struct omap_hwmod_irq_info omap243x_gpio1_irqs[] = {
  638. { .irq = 29 }, /* INT_24XX_GPIO_BANK1 */
  639. };
  640. static struct omap_hwmod_ocp_if *omap2430_gpio1_slaves[] = {
  641. &omap2430_l4_wkup__gpio1,
  642. };
  643. static struct omap_hwmod omap2430_gpio1_hwmod = {
  644. .name = "gpio1",
  645. .mpu_irqs = omap243x_gpio1_irqs,
  646. .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio1_irqs),
  647. .main_clk = "gpios_fck",
  648. .prcm = {
  649. .omap2 = {
  650. .prcm_reg_id = 1,
  651. .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
  652. .module_offs = WKUP_MOD,
  653. .idlest_reg_id = 1,
  654. .idlest_idle_bit = OMAP24XX_EN_GPIOS_SHIFT,
  655. },
  656. },
  657. .slaves = omap2430_gpio1_slaves,
  658. .slaves_cnt = ARRAY_SIZE(omap2430_gpio1_slaves),
  659. .class = &omap243x_gpio_hwmod_class,
  660. .dev_attr = &gpio_dev_attr,
  661. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
  662. };
  663. /* gpio2 */
  664. static struct omap_hwmod_irq_info omap243x_gpio2_irqs[] = {
  665. { .irq = 30 }, /* INT_24XX_GPIO_BANK2 */
  666. };
  667. static struct omap_hwmod_ocp_if *omap2430_gpio2_slaves[] = {
  668. &omap2430_l4_wkup__gpio2,
  669. };
  670. static struct omap_hwmod omap2430_gpio2_hwmod = {
  671. .name = "gpio2",
  672. .mpu_irqs = omap243x_gpio2_irqs,
  673. .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio2_irqs),
  674. .main_clk = "gpios_fck",
  675. .prcm = {
  676. .omap2 = {
  677. .prcm_reg_id = 1,
  678. .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
  679. .module_offs = WKUP_MOD,
  680. .idlest_reg_id = 1,
  681. .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
  682. },
  683. },
  684. .slaves = omap2430_gpio2_slaves,
  685. .slaves_cnt = ARRAY_SIZE(omap2430_gpio2_slaves),
  686. .class = &omap243x_gpio_hwmod_class,
  687. .dev_attr = &gpio_dev_attr,
  688. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
  689. };
  690. /* gpio3 */
  691. static struct omap_hwmod_irq_info omap243x_gpio3_irqs[] = {
  692. { .irq = 31 }, /* INT_24XX_GPIO_BANK3 */
  693. };
  694. static struct omap_hwmod_ocp_if *omap2430_gpio3_slaves[] = {
  695. &omap2430_l4_wkup__gpio3,
  696. };
  697. static struct omap_hwmod omap2430_gpio3_hwmod = {
  698. .name = "gpio3",
  699. .mpu_irqs = omap243x_gpio3_irqs,
  700. .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio3_irqs),
  701. .main_clk = "gpios_fck",
  702. .prcm = {
  703. .omap2 = {
  704. .prcm_reg_id = 1,
  705. .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
  706. .module_offs = WKUP_MOD,
  707. .idlest_reg_id = 1,
  708. .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
  709. },
  710. },
  711. .slaves = omap2430_gpio3_slaves,
  712. .slaves_cnt = ARRAY_SIZE(omap2430_gpio3_slaves),
  713. .class = &omap243x_gpio_hwmod_class,
  714. .dev_attr = &gpio_dev_attr,
  715. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
  716. };
  717. /* gpio4 */
  718. static struct omap_hwmod_irq_info omap243x_gpio4_irqs[] = {
  719. { .irq = 32 }, /* INT_24XX_GPIO_BANK4 */
  720. };
  721. static struct omap_hwmod_ocp_if *omap2430_gpio4_slaves[] = {
  722. &omap2430_l4_wkup__gpio4,
  723. };
  724. static struct omap_hwmod omap2430_gpio4_hwmod = {
  725. .name = "gpio4",
  726. .mpu_irqs = omap243x_gpio4_irqs,
  727. .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio4_irqs),
  728. .main_clk = "gpios_fck",
  729. .prcm = {
  730. .omap2 = {
  731. .prcm_reg_id = 1,
  732. .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
  733. .module_offs = WKUP_MOD,
  734. .idlest_reg_id = 1,
  735. .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
  736. },
  737. },
  738. .slaves = omap2430_gpio4_slaves,
  739. .slaves_cnt = ARRAY_SIZE(omap2430_gpio4_slaves),
  740. .class = &omap243x_gpio_hwmod_class,
  741. .dev_attr = &gpio_dev_attr,
  742. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
  743. };
  744. /* gpio5 */
  745. static struct omap_hwmod_irq_info omap243x_gpio5_irqs[] = {
  746. { .irq = 33 }, /* INT_24XX_GPIO_BANK5 */
  747. };
  748. static struct omap_hwmod_ocp_if *omap2430_gpio5_slaves[] = {
  749. &omap2430_l4_core__gpio5,
  750. };
  751. static struct omap_hwmod omap2430_gpio5_hwmod = {
  752. .name = "gpio5",
  753. .mpu_irqs = omap243x_gpio5_irqs,
  754. .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio5_irqs),
  755. .main_clk = "gpio5_fck",
  756. .prcm = {
  757. .omap2 = {
  758. .prcm_reg_id = 2,
  759. .module_bit = OMAP2430_EN_GPIO5_SHIFT,
  760. .module_offs = CORE_MOD,
  761. .idlest_reg_id = 2,
  762. .idlest_idle_bit = OMAP2430_ST_GPIO5_SHIFT,
  763. },
  764. },
  765. .slaves = omap2430_gpio5_slaves,
  766. .slaves_cnt = ARRAY_SIZE(omap2430_gpio5_slaves),
  767. .class = &omap243x_gpio_hwmod_class,
  768. .dev_attr = &gpio_dev_attr,
  769. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
  770. };
  771. /* dma_system */
  772. static struct omap_hwmod_class_sysconfig omap2430_dma_sysc = {
  773. .rev_offs = 0x0000,
  774. .sysc_offs = 0x002c,
  775. .syss_offs = 0x0028,
  776. .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_MIDLEMODE |
  777. SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_EMUFREE |
  778. SYSC_HAS_AUTOIDLE),
  779. .idlemodes = (MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
  780. .sysc_fields = &omap_hwmod_sysc_type1,
  781. };
  782. static struct omap_hwmod_class omap2430_dma_hwmod_class = {
  783. .name = "dma",
  784. .sysc = &omap2430_dma_sysc,
  785. };
  786. /* dma attributes */
  787. static struct omap_dma_dev_attr dma_dev_attr = {
  788. .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
  789. IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
  790. .lch_count = 32,
  791. };
  792. static struct omap_hwmod_irq_info omap2430_dma_system_irqs[] = {
  793. { .name = "0", .irq = 12 }, /* INT_24XX_SDMA_IRQ0 */
  794. { .name = "1", .irq = 13 }, /* INT_24XX_SDMA_IRQ1 */
  795. { .name = "2", .irq = 14 }, /* INT_24XX_SDMA_IRQ2 */
  796. { .name = "3", .irq = 15 }, /* INT_24XX_SDMA_IRQ3 */
  797. };
  798. static struct omap_hwmod_addr_space omap2430_dma_system_addrs[] = {
  799. {
  800. .pa_start = 0x48056000,
  801. .pa_end = 0x4a0560ff,
  802. .flags = ADDR_TYPE_RT
  803. },
  804. };
  805. /* dma_system -> L3 */
  806. static struct omap_hwmod_ocp_if omap2430_dma_system__l3 = {
  807. .master = &omap2430_dma_system_hwmod,
  808. .slave = &omap2430_l3_main_hwmod,
  809. .clk = "core_l3_ck",
  810. .user = OCP_USER_MPU | OCP_USER_SDMA,
  811. };
  812. /* dma_system master ports */
  813. static struct omap_hwmod_ocp_if *omap2430_dma_system_masters[] = {
  814. &omap2430_dma_system__l3,
  815. };
  816. /* l4_core -> dma_system */
  817. static struct omap_hwmod_ocp_if omap2430_l4_core__dma_system = {
  818. .master = &omap2430_l4_core_hwmod,
  819. .slave = &omap2430_dma_system_hwmod,
  820. .clk = "sdma_ick",
  821. .addr = omap2430_dma_system_addrs,
  822. .addr_cnt = ARRAY_SIZE(omap2430_dma_system_addrs),
  823. .user = OCP_USER_MPU | OCP_USER_SDMA,
  824. };
  825. /* dma_system slave ports */
  826. static struct omap_hwmod_ocp_if *omap2430_dma_system_slaves[] = {
  827. &omap2430_l4_core__dma_system,
  828. };
  829. static struct omap_hwmod omap2430_dma_system_hwmod = {
  830. .name = "dma",
  831. .class = &omap2430_dma_hwmod_class,
  832. .mpu_irqs = omap2430_dma_system_irqs,
  833. .mpu_irqs_cnt = ARRAY_SIZE(omap2430_dma_system_irqs),
  834. .main_clk = "core_l3_ck",
  835. .slaves = omap2430_dma_system_slaves,
  836. .slaves_cnt = ARRAY_SIZE(omap2430_dma_system_slaves),
  837. .masters = omap2430_dma_system_masters,
  838. .masters_cnt = ARRAY_SIZE(omap2430_dma_system_masters),
  839. .dev_attr = &dma_dev_attr,
  840. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
  841. .flags = HWMOD_NO_IDLEST,
  842. };
  843. /*
  844. * usbhsotg
  845. */
  846. static struct omap_hwmod_class_sysconfig omap2430_usbhsotg_sysc = {
  847. .rev_offs = 0x0400,
  848. .sysc_offs = 0x0404,
  849. .syss_offs = 0x0408,
  850. .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE|
  851. SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
  852. SYSC_HAS_AUTOIDLE),
  853. .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
  854. MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
  855. .sysc_fields = &omap_hwmod_sysc_type1,
  856. };
  857. static struct omap_hwmod_class usbotg_class = {
  858. .name = "usbotg",
  859. .sysc = &omap2430_usbhsotg_sysc,
  860. };
  861. /* usb_otg_hs */
  862. static struct omap_hwmod_irq_info omap2430_usbhsotg_mpu_irqs[] = {
  863. { .name = "mc", .irq = 92 },
  864. { .name = "dma", .irq = 93 },
  865. };
  866. static struct omap_hwmod omap2430_usbhsotg_hwmod = {
  867. .name = "usb_otg_hs",
  868. .mpu_irqs = omap2430_usbhsotg_mpu_irqs,
  869. .mpu_irqs_cnt = ARRAY_SIZE(omap2430_usbhsotg_mpu_irqs),
  870. .main_clk = "usbhs_ick",
  871. .prcm = {
  872. .omap2 = {
  873. .prcm_reg_id = 1,
  874. .module_bit = OMAP2430_EN_USBHS_MASK,
  875. .module_offs = CORE_MOD,
  876. .idlest_reg_id = 1,
  877. .idlest_idle_bit = OMAP2430_ST_USBHS_SHIFT,
  878. },
  879. },
  880. .masters = omap2430_usbhsotg_masters,
  881. .masters_cnt = ARRAY_SIZE(omap2430_usbhsotg_masters),
  882. .slaves = omap2430_usbhsotg_slaves,
  883. .slaves_cnt = ARRAY_SIZE(omap2430_usbhsotg_slaves),
  884. .class = &usbotg_class,
  885. /*
  886. * Erratum ID: i479 idle_req / idle_ack mechanism potentially
  887. * broken when autoidle is enabled
  888. * workaround is to disable the autoidle bit at module level.
  889. */
  890. .flags = HWMOD_NO_OCP_AUTOIDLE | HWMOD_SWSUP_SIDLE
  891. | HWMOD_SWSUP_MSTANDBY,
  892. .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
  893. };
  894. static __initdata struct omap_hwmod *omap2430_hwmods[] = {
  895. &omap2430_l3_main_hwmod,
  896. &omap2430_l4_core_hwmod,
  897. &omap2430_l4_wkup_hwmod,
  898. &omap2430_mpu_hwmod,
  899. &omap2430_iva_hwmod,
  900. &omap2430_wd_timer2_hwmod,
  901. &omap2430_uart1_hwmod,
  902. &omap2430_uart2_hwmod,
  903. &omap2430_uart3_hwmod,
  904. &omap2430_i2c1_hwmod,
  905. &omap2430_i2c2_hwmod,
  906. /* gpio class */
  907. &omap2430_gpio1_hwmod,
  908. &omap2430_gpio2_hwmod,
  909. &omap2430_gpio3_hwmod,
  910. &omap2430_gpio4_hwmod,
  911. &omap2430_gpio5_hwmod,
  912. /* dma_system class*/
  913. &omap2430_dma_system_hwmod,
  914. /* usbotg class*/
  915. &omap2430_usbhsotg_hwmod,
  916. NULL,
  917. };
  918. int __init omap2430_hwmod_init(void)
  919. {
  920. return omap_hwmod_init(omap2430_hwmods);
  921. }