devices.c 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  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/irqs.h>
  26. #include <mach/hardware.h>
  27. #include "devices.h"
  28. static struct resource imx_csi_resources[] = {
  29. [0] = {
  30. .start = 0x00224000,
  31. .end = 0x00224010,
  32. .flags = IORESOURCE_MEM,
  33. },
  34. [1] = {
  35. .start = CSI_INT,
  36. .end = CSI_INT,
  37. .flags = IORESOURCE_IRQ,
  38. },
  39. };
  40. static u64 imx_csi_dmamask = 0xffffffffUL;
  41. struct platform_device imx_csi_device = {
  42. .name = "mx1-camera",
  43. .id = 0, /* This is used to put cameras on this interface */
  44. .dev = {
  45. .dma_mask = &imx_csi_dmamask,
  46. .coherent_dma_mask = 0xffffffff,
  47. },
  48. .resource = imx_csi_resources,
  49. .num_resources = ARRAY_SIZE(imx_csi_resources),
  50. };
  51. static struct resource imx_i2c_resources[] = {
  52. [0] = {
  53. .start = 0x00217000,
  54. .end = 0x00217010,
  55. .flags = IORESOURCE_MEM,
  56. },
  57. [1] = {
  58. .start = I2C_INT,
  59. .end = I2C_INT,
  60. .flags = IORESOURCE_IRQ,
  61. },
  62. };
  63. struct platform_device imx_i2c_device = {
  64. .name = "imx-i2c",
  65. .id = 0,
  66. .resource = imx_i2c_resources,
  67. .num_resources = ARRAY_SIZE(imx_i2c_resources),
  68. };
  69. static struct resource imx_uart1_resources[] = {
  70. [0] = {
  71. .start = UART1_BASE_ADDR,
  72. .end = UART1_BASE_ADDR + 0xD0,
  73. .flags = IORESOURCE_MEM,
  74. },
  75. [1] = {
  76. .start = UART1_MINT_RX,
  77. .end = UART1_MINT_RX,
  78. .flags = IORESOURCE_IRQ,
  79. },
  80. [2] = {
  81. .start = UART1_MINT_TX,
  82. .end = UART1_MINT_TX,
  83. .flags = IORESOURCE_IRQ,
  84. },
  85. [3] = {
  86. .start = UART1_MINT_RTS,
  87. .end = UART1_MINT_RTS,
  88. .flags = IORESOURCE_IRQ,
  89. },
  90. };
  91. struct platform_device imx_uart1_device = {
  92. .name = "imx-uart",
  93. .id = 0,
  94. .num_resources = ARRAY_SIZE(imx_uart1_resources),
  95. .resource = imx_uart1_resources,
  96. };
  97. static struct resource imx_uart2_resources[] = {
  98. [0] = {
  99. .start = UART2_BASE_ADDR,
  100. .end = UART2_BASE_ADDR + 0xD0,
  101. .flags = IORESOURCE_MEM,
  102. },
  103. [1] = {
  104. .start = UART2_MINT_RX,
  105. .end = UART2_MINT_RX,
  106. .flags = IORESOURCE_IRQ,
  107. },
  108. [2] = {
  109. .start = UART2_MINT_TX,
  110. .end = UART2_MINT_TX,
  111. .flags = IORESOURCE_IRQ,
  112. },
  113. [3] = {
  114. .start = UART2_MINT_RTS,
  115. .end = UART2_MINT_RTS,
  116. .flags = IORESOURCE_IRQ,
  117. },
  118. };
  119. struct platform_device imx_uart2_device = {
  120. .name = "imx-uart",
  121. .id = 1,
  122. .num_resources = ARRAY_SIZE(imx_uart2_resources),
  123. .resource = imx_uart2_resources,
  124. };
  125. static struct resource imx_rtc_resources[] = {
  126. [0] = {
  127. .start = 0x00204000,
  128. .end = 0x00204024,
  129. .flags = IORESOURCE_MEM,
  130. },
  131. [1] = {
  132. .start = RTC_INT,
  133. .end = RTC_INT,
  134. .flags = IORESOURCE_IRQ,
  135. },
  136. [2] = {
  137. .start = RTC_SAMINT,
  138. .end = RTC_SAMINT,
  139. .flags = IORESOURCE_IRQ,
  140. },
  141. };
  142. struct platform_device imx_rtc_device = {
  143. .name = "rtc-imx",
  144. .id = 0,
  145. .resource = imx_rtc_resources,
  146. .num_resources = ARRAY_SIZE(imx_rtc_resources),
  147. };
  148. static struct resource imx_wdt_resources[] = {
  149. [0] = {
  150. .start = 0x00201000,
  151. .end = 0x00201008,
  152. .flags = IORESOURCE_MEM,
  153. },
  154. [1] = {
  155. .start = WDT_INT,
  156. .end = WDT_INT,
  157. .flags = IORESOURCE_IRQ,
  158. },
  159. };
  160. struct platform_device imx_wdt_device = {
  161. .name = "imx-wdt",
  162. .id = 0,
  163. .resource = imx_wdt_resources,
  164. .num_resources = ARRAY_SIZE(imx_wdt_resources),
  165. };
  166. static struct resource imx_usb_resources[] = {
  167. [0] = {
  168. .start = 0x00212000,
  169. .end = 0x00212148,
  170. .flags = IORESOURCE_MEM,
  171. },
  172. [1] = {
  173. .start = USBD_INT0,
  174. .end = USBD_INT0,
  175. .flags = IORESOURCE_IRQ,
  176. },
  177. [2] = {
  178. .start = USBD_INT1,
  179. .end = USBD_INT1,
  180. .flags = IORESOURCE_IRQ,
  181. },
  182. [3] = {
  183. .start = USBD_INT2,
  184. .end = USBD_INT2,
  185. .flags = IORESOURCE_IRQ,
  186. },
  187. [4] = {
  188. .start = USBD_INT3,
  189. .end = USBD_INT3,
  190. .flags = IORESOURCE_IRQ,
  191. },
  192. [5] = {
  193. .start = USBD_INT4,
  194. .end = USBD_INT4,
  195. .flags = IORESOURCE_IRQ,
  196. },
  197. [6] = {
  198. .start = USBD_INT5,
  199. .end = USBD_INT5,
  200. .flags = IORESOURCE_IRQ,
  201. },
  202. [7] = {
  203. .start = USBD_INT6,
  204. .end = USBD_INT6,
  205. .flags = IORESOURCE_IRQ,
  206. },
  207. };
  208. struct platform_device imx_usb_device = {
  209. .name = "imx_udc",
  210. .id = 0,
  211. .num_resources = ARRAY_SIZE(imx_usb_resources),
  212. .resource = imx_usb_resources,
  213. };
  214. /* GPIO port description */
  215. static struct mxc_gpio_port imx_gpio_ports[] = {
  216. [0] = {
  217. .chip.label = "gpio-0",
  218. .base = (void __iomem *)IO_ADDRESS(GPIO_BASE_ADDR),
  219. .irq = GPIO_INT_PORTA,
  220. .virtual_irq_start = MXC_GPIO_IRQ_START
  221. },
  222. [1] = {
  223. .chip.label = "gpio-1",
  224. .base = (void __iomem *)IO_ADDRESS(GPIO_BASE_ADDR + 0x100),
  225. .irq = GPIO_INT_PORTB,
  226. .virtual_irq_start = MXC_GPIO_IRQ_START + 32
  227. },
  228. [2] = {
  229. .chip.label = "gpio-2",
  230. .base = (void __iomem *)IO_ADDRESS(GPIO_BASE_ADDR + 0x200),
  231. .irq = GPIO_INT_PORTC,
  232. .virtual_irq_start = MXC_GPIO_IRQ_START + 64
  233. },
  234. [3] = {
  235. .chip.label = "gpio-3",
  236. .base = (void __iomem *)IO_ADDRESS(GPIO_BASE_ADDR + 0x300),
  237. .irq = GPIO_INT_PORTD,
  238. .virtual_irq_start = MXC_GPIO_IRQ_START + 96
  239. }
  240. };
  241. int __init mxc_register_gpios(void)
  242. {
  243. return mxc_gpio_init(imx_gpio_ports, ARRAY_SIZE(imx_gpio_ports));
  244. }