devices.c 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. /*
  2. * Copyright 2006-2007 Freescale Semiconductor, Inc. All Rights Reserved.
  3. * Copyright 2008 Sascha Hauer, kernel@pengutronix.de
  4. * Copyright (c) 2008 Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
  5. * Copyright (c) 2008 Darius Augulis <darius.augulis@teltonika.lt>
  6. *
  7. * This program is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU General Public License
  9. * as published by the Free Software Foundation; either version 2
  10. * of the License, or (at your option) any later version.
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program; if not, write to the Free Software
  18. * Foundation, Inc., 51 Franklin Street, Fifth Floor,
  19. * Boston, MA 02110-1301, USA.
  20. */
  21. #include <linux/kernel.h>
  22. #include <linux/init.h>
  23. #include <linux/platform_device.h>
  24. #include <linux/gpio.h>
  25. #include <mach/hardware.h>
  26. static struct resource imx_csi_resources[] = {
  27. [0] = {
  28. .start = 0x00224000,
  29. .end = 0x00224010,
  30. .flags = IORESOURCE_MEM,
  31. },
  32. [1] = {
  33. .start = CSI_INT,
  34. .end = CSI_INT,
  35. .flags = IORESOURCE_IRQ,
  36. },
  37. };
  38. static u64 imx_csi_dmamask = 0xffffffffUL;
  39. struct platform_device imx_csi_device = {
  40. .name = "imx-csi",
  41. .id = 0, /* This is used to put cameras on this interface */
  42. .dev = {
  43. .dma_mask = &imx_csi_dmamask,
  44. .coherent_dma_mask = 0xffffffff,
  45. },
  46. .resource = imx_csi_resources,
  47. .num_resources = ARRAY_SIZE(imx_csi_resources),
  48. };
  49. static struct resource imx_i2c_resources[] = {
  50. [0] = {
  51. .start = 0x00217000,
  52. .end = 0x00217010,
  53. .flags = IORESOURCE_MEM,
  54. },
  55. [1] = {
  56. .start = I2C_INT,
  57. .end = I2C_INT,
  58. .flags = IORESOURCE_IRQ,
  59. },
  60. };
  61. struct platform_device imx_i2c_device = {
  62. .name = "imx-i2c",
  63. .id = 0,
  64. .resource = imx_i2c_resources,
  65. .num_resources = ARRAY_SIZE(imx_i2c_resources),
  66. };
  67. static struct resource imx_uart1_resources[] = {
  68. [0] = {
  69. .start = UART1_BASE_ADDR,
  70. .end = UART1_BASE_ADDR + 0xD0,
  71. .flags = IORESOURCE_MEM,
  72. },
  73. [1] = {
  74. .start = UART1_MINT_RX,
  75. .end = UART1_MINT_RX,
  76. .flags = IORESOURCE_IRQ,
  77. },
  78. [2] = {
  79. .start = UART1_MINT_TX,
  80. .end = UART1_MINT_TX,
  81. .flags = IORESOURCE_IRQ,
  82. },
  83. [3] = {
  84. .start = UART1_MINT_RTS,
  85. .end = UART1_MINT_RTS,
  86. .flags = IORESOURCE_IRQ,
  87. },
  88. };
  89. struct platform_device imx_uart1_device = {
  90. .name = "imx-uart",
  91. .id = 0,
  92. .num_resources = ARRAY_SIZE(imx_uart1_resources),
  93. .resource = imx_uart1_resources,
  94. };
  95. static struct resource imx_uart2_resources[] = {
  96. [0] = {
  97. .start = UART2_BASE_ADDR,
  98. .end = UART2_BASE_ADDR + 0xD0,
  99. .flags = IORESOURCE_MEM,
  100. },
  101. [1] = {
  102. .start = UART2_MINT_RX,
  103. .end = UART2_MINT_RX,
  104. .flags = IORESOURCE_IRQ,
  105. },
  106. [2] = {
  107. .start = UART2_MINT_TX,
  108. .end = UART2_MINT_TX,
  109. .flags = IORESOURCE_IRQ,
  110. },
  111. [3] = {
  112. .start = UART2_MINT_RTS,
  113. .end = UART2_MINT_RTS,
  114. .flags = IORESOURCE_IRQ,
  115. },
  116. };
  117. struct platform_device imx_uart2_device = {
  118. .name = "imx-uart",
  119. .id = 1,
  120. .num_resources = ARRAY_SIZE(imx_uart2_resources),
  121. .resource = imx_uart2_resources,
  122. };
  123. static struct resource imx_rtc_resources[] = {
  124. [0] = {
  125. .start = 0x00204000,
  126. .end = 0x00204024,
  127. .flags = IORESOURCE_MEM,
  128. },
  129. [1] = {
  130. .start = RTC_INT,
  131. .end = RTC_INT,
  132. .flags = IORESOURCE_IRQ,
  133. },
  134. [2] = {
  135. .start = RTC_SAMINT,
  136. .end = RTC_SAMINT,
  137. .flags = IORESOURCE_IRQ,
  138. },
  139. };
  140. struct platform_device imx_rtc_device = {
  141. .name = "rtc-imx",
  142. .id = 0,
  143. .resource = imx_rtc_resources,
  144. .num_resources = ARRAY_SIZE(imx_rtc_resources),
  145. };
  146. static struct resource imx_wdt_resources[] = {
  147. [0] = {
  148. .start = 0x00201000,
  149. .end = 0x00201008,
  150. .flags = IORESOURCE_MEM,
  151. },
  152. [1] = {
  153. .start = WDT_INT,
  154. .end = WDT_INT,
  155. .flags = IORESOURCE_IRQ,
  156. },
  157. };
  158. struct platform_device imx_wdt_device = {
  159. .name = "imx-wdt",
  160. .id = 0,
  161. .resource = imx_wdt_resources,
  162. .num_resources = ARRAY_SIZE(imx_wdt_resources),
  163. };
  164. static struct resource imx_usb_resources[] = {
  165. [0] = {
  166. .start = 0x00212000,
  167. .end = 0x00212148,
  168. .flags = IORESOURCE_MEM,
  169. },
  170. [1] = {
  171. .start = USBD_INT0,
  172. .end = USBD_INT0,
  173. .flags = IORESOURCE_IRQ,
  174. },
  175. [2] = {
  176. .start = USBD_INT1,
  177. .end = USBD_INT1,
  178. .flags = IORESOURCE_IRQ,
  179. },
  180. [3] = {
  181. .start = USBD_INT2,
  182. .end = USBD_INT2,
  183. .flags = IORESOURCE_IRQ,
  184. },
  185. [4] = {
  186. .start = USBD_INT3,
  187. .end = USBD_INT3,
  188. .flags = IORESOURCE_IRQ,
  189. },
  190. [5] = {
  191. .start = USBD_INT4,
  192. .end = USBD_INT4,
  193. .flags = IORESOURCE_IRQ,
  194. },
  195. [6] = {
  196. .start = USBD_INT5,
  197. .end = USBD_INT5,
  198. .flags = IORESOURCE_IRQ,
  199. },
  200. [7] = {
  201. .start = USBD_INT6,
  202. .end = USBD_INT6,
  203. .flags = IORESOURCE_IRQ,
  204. },
  205. };
  206. struct platform_device imx_usb_device = {
  207. .name = "imx_udc",
  208. .id = 0,
  209. .num_resources = ARRAY_SIZE(imx_usb_resources),
  210. .resource = imx_usb_resources,
  211. };
  212. /* GPIO port description */
  213. static struct mxc_gpio_port imx_gpio_ports[] = {
  214. [0] = {
  215. .chip.label = "gpio-0",
  216. .base = (void __iomem *)IO_ADDRESS(GPIO_BASE_ADDR),
  217. .irq = GPIO_INT_PORTA,
  218. .virtual_irq_start = MXC_GPIO_IRQ_START
  219. },
  220. [1] = {
  221. .chip.label = "gpio-1",
  222. .base = (void __iomem *)IO_ADDRESS(GPIO_BASE_ADDR + 0x100),
  223. .irq = GPIO_INT_PORTB,
  224. .virtual_irq_start = MXC_GPIO_IRQ_START + 32
  225. },
  226. [2] = {
  227. .chip.label = "gpio-2",
  228. .base = (void __iomem *)IO_ADDRESS(GPIO_BASE_ADDR + 0x200),
  229. .irq = GPIO_INT_PORTC,
  230. .virtual_irq_start = MXC_GPIO_IRQ_START + 64
  231. },
  232. [3] = {
  233. .chip.label = "gpio-3",
  234. .base = (void __iomem *)IO_ADDRESS(GPIO_BASE_ADDR + 0x300),
  235. .irq = GPIO_INT_PORTD,
  236. .virtual_irq_start = MXC_GPIO_IRQ_START + 96
  237. }
  238. };
  239. int __init mxc_register_gpios(void)
  240. {
  241. return mxc_gpio_init(imx_gpio_ports, ARRAY_SIZE(imx_gpio_ports));
  242. }