1/* 2 * Copyright (C) 2009-2010 Pengutronix 3 * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de> 4 * 5 * This program is free software; you can redistribute it and/or modify it under 6 * the terms of the GNU General Public License version 2 as published by the 7 * Free Software Foundation. 8 */ 9#include <linux/kernel.h> 10#include <linux/platform_device.h> 11#include <linux/init.h> 12#include <mach/sdma.h> 13 14extern struct device mxc_aips_bus; 15extern struct device mxc_ahb_bus; 16 17static inline struct platform_device *imx_add_platform_device_dmamask( 18 const char *name, int id, 19 const struct resource *res, unsigned int num_resources, 20 const void *data, size_t size_data, u64 dmamask) 21{ 22 struct platform_device_info pdevinfo = { 23 .name = name, 24 .id = id, 25 .res = res, 26 .num_res = num_resources, 27 .data = data, 28 .size_data = size_data, 29 .dma_mask = dmamask, 30 }; 31 return platform_device_register_full(&pdevinfo); 32} 33 34static inline struct platform_device *imx_add_platform_device( 35 const char *name, int id, 36 const struct resource *res, unsigned int num_resources, 37 const void *data, size_t size_data) 38{ 39 return imx_add_platform_device_dmamask( 40 name, id, res, num_resources, data, size_data, 0); 41} 42 43#include <linux/fec.h> 44struct imx_fec_data { 45 const char *devid; 46 resource_size_t iobase; 47 resource_size_t irq; 48}; 49struct platform_device *__init imx_add_fec( 50 const struct imx_fec_data *data, 51 const struct fec_platform_data *pdata); 52 53#include <linux/can/platform/flexcan.h> 54struct imx_flexcan_data { 55 int id; 56 resource_size_t iobase; 57 resource_size_t iosize; 58 resource_size_t irq; 59}; 60struct platform_device *__init imx_add_flexcan( 61 const struct imx_flexcan_data *data, 62 const struct flexcan_platform_data *pdata); 63 64#include <linux/fsl_devices.h> 65struct imx_fsl_usb2_udc_data { 66 resource_size_t iobase; 67 resource_size_t irq; 68}; 69struct platform_device *__init imx_add_fsl_usb2_udc( 70 const struct imx_fsl_usb2_udc_data *data, 71 const struct fsl_usb2_platform_data *pdata); 72 73#include <linux/gpio_keys.h> 74struct platform_device *__init imx_add_gpio_keys( 75 const struct gpio_keys_platform_data *pdata); 76 77#include <mach/mx21-usbhost.h> 78struct imx_imx21_hcd_data { 79 resource_size_t iobase; 80 resource_size_t irq; 81}; 82struct platform_device *__init imx_add_imx21_hcd( 83 const struct imx_imx21_hcd_data *data, 84 const struct mx21_usbh_platform_data *pdata); 85 86struct imx_imx2_wdt_data { 87 int id; 88 resource_size_t iobase; 89 resource_size_t iosize; 90}; 91struct platform_device *__init imx_add_imx2_wdt( 92 const struct imx_imx2_wdt_data *data); 93 94struct imx_imxdi_rtc_data { 95 resource_size_t iobase; 96 resource_size_t irq; 97}; 98struct platform_device *__init imx_add_imxdi_rtc( 99 const struct imx_imxdi_rtc_data *data); 100 101#include <mach/imxfb.h> 102struct imx_imx_fb_data { 103 resource_size_t iobase; 104 resource_size_t iosize; 105 resource_size_t irq; 106}; 107struct platform_device *__init imx_add_imx_fb( 108 const struct imx_imx_fb_data *data, 109 const struct imx_fb_platform_data *pdata); 110 111#include <mach/i2c.h> 112struct imx_imx_i2c_data { 113 int id; 114 resource_size_t iobase; 115 resource_size_t iosize; 116 resource_size_t irq; 117}; 118struct platform_device *__init imx_add_imx_i2c( 119 const struct imx_imx_i2c_data *data, 120 const struct imxi2c_platform_data *pdata); 121 122#include <linux/input/matrix_keypad.h> 123struct imx_imx_keypad_data { 124 resource_size_t iobase; 125 resource_size_t iosize; 126 resource_size_t irq; 127}; 128struct platform_device *__init imx_add_imx_keypad( 129 const struct imx_imx_keypad_data *data, 130 const struct matrix_keymap_data *pdata); 131 132#include <mach/ssi.h> 133struct imx_imx_ssi_data { 134 int id; 135 resource_size_t iobase; 136 resource_size_t iosize; 137 resource_size_t irq; 138 resource_size_t dmatx0; 139 resource_size_t dmarx0; 140 resource_size_t dmatx1; 141 resource_size_t dmarx1; 142}; 143struct platform_device *__init imx_add_imx_ssi( 144 const struct imx_imx_ssi_data *data, 145 const struct imx_ssi_platform_data *pdata); 146 147#include <mach/imx-uart.h> 148struct imx_imx_uart_3irq_data { 149 int id; 150 resource_size_t iobase; 151 resource_size_t iosize; 152 resource_size_t irqrx; 153 resource_size_t irqtx; 154 resource_size_t irqrts; 155}; 156struct platform_device *__init imx_add_imx_uart_3irq( 157 const struct imx_imx_uart_3irq_data *data, 158 const struct imxuart_platform_data *pdata); 159 160struct imx_imx_uart_1irq_data { 161 int id; 162 resource_size_t iobase; 163 resource_size_t iosize; 164 resource_size_t irq; 165}; 166struct platform_device *__init imx_add_imx_uart_1irq( 167 const struct imx_imx_uart_1irq_data *data, 168 const struct imxuart_platform_data *pdata); 169 170#include <mach/usb.h> 171struct imx_imx_udc_data { 172 resource_size_t iobase; 173 resource_size_t iosize; 174 resource_size_t irq0; 175 resource_size_t irq1; 176 resource_size_t irq2; 177 resource_size_t irq3; 178 resource_size_t irq4; 179 resource_size_t irq5; 180 resource_size_t irq6; 181}; 182struct platform_device *__init imx_add_imx_udc( 183 const struct imx_imx_udc_data *data, 184 const struct imxusb_platform_data *pdata); 185 186#include <mach/ipu.h> 187#include <mach/mx3fb.h> 188#include <mach/mx3_camera.h> 189struct imx_ipu_core_data { 190 resource_size_t iobase; 191 resource_size_t synirq; 192 resource_size_t errirq; 193}; 194struct platform_device *__init imx_add_ipu_core( 195 const struct imx_ipu_core_data *data, 196 const struct ipu_platform_data *pdata); 197struct platform_device *__init imx_alloc_mx3_camera( 198 const struct imx_ipu_core_data *data, 199 const struct mx3_camera_pdata *pdata); 200struct platform_device *__init imx_add_mx3_sdc_fb( 201 const struct imx_ipu_core_data *data, 202 struct mx3fb_platform_data *pdata); 203 204#include <mach/mx1_camera.h> 205struct imx_mx1_camera_data { 206 resource_size_t iobase; 207 resource_size_t iosize; 208 resource_size_t irq; 209}; 210struct platform_device *__init imx_add_mx1_camera( 211 const struct imx_mx1_camera_data *data, 212 const struct mx1_camera_pdata *pdata); 213 214#include <mach/mx2_cam.h> 215struct imx_mx2_camera_data { 216 resource_size_t iobasecsi; 217 resource_size_t iosizecsi; 218 resource_size_t irqcsi; 219 resource_size_t iobaseemmaprp; 220 resource_size_t iosizeemmaprp; 221 resource_size_t irqemmaprp; 222}; 223struct platform_device *__init imx_add_mx2_camera( 224 const struct imx_mx2_camera_data *data, 225 const struct mx2_camera_platform_data *pdata); 226struct platform_device *__init imx_add_mx2_emmaprp( 227 const struct imx_mx2_camera_data *data); 228 229#include <mach/mxc_ehci.h> 230struct imx_mxc_ehci_data { 231 int id; 232 resource_size_t iobase; 233 resource_size_t irq; 234}; 235struct platform_device *__init imx_add_mxc_ehci( 236 const struct imx_mxc_ehci_data *data, 237 const struct mxc_usbh_platform_data *pdata); 238 239#include <mach/mmc.h> 240struct imx_mxc_mmc_data { 241 int id; 242 resource_size_t iobase; 243 resource_size_t iosize; 244 resource_size_t irq; 245 resource_size_t dmareq; 246}; 247struct platform_device *__init imx_add_mxc_mmc( 248 const struct imx_mxc_mmc_data *data, 249 const struct imxmmc_platform_data *pdata); 250 251#include <mach/mxc_nand.h> 252struct imx_mxc_nand_data { 253 /* 254 * id is traditionally 0, but -1 is more appropriate. We use -1 for new 255 * machines but don't change existing devices as the nand device usually 256 * appears in the kernel command line to pass its partitioning. 257 */ 258 int id; 259 resource_size_t iobase; 260 resource_size_t iosize; 261 resource_size_t axibase; 262 resource_size_t irq; 263}; 264struct platform_device *__init imx_add_mxc_nand( 265 const struct imx_mxc_nand_data *data, 266 const struct mxc_nand_platform_data *pdata); 267 268struct imx_pata_imx_data { 269 resource_size_t iobase; 270 resource_size_t iosize; 271 resource_size_t irq; 272}; 273struct platform_device *__init imx_add_pata_imx( 274 const struct imx_pata_imx_data *data); 275 276struct imx_mxc_pwm_data { 277 int id; 278 resource_size_t iobase; 279 resource_size_t iosize; 280 resource_size_t irq; 281}; 282struct platform_device *__init imx_add_mxc_pwm( 283 const struct imx_mxc_pwm_data *data); 284 285/* mxc_rtc */ 286struct imx_mxc_rtc_data { 287 resource_size_t iobase; 288 resource_size_t irq; 289}; 290struct platform_device *__init imx_add_mxc_rtc( 291 const struct imx_mxc_rtc_data *data); 292 293/* mxc_w1 */ 294struct imx_mxc_w1_data { 295 resource_size_t iobase; 296}; 297struct platform_device *__init imx_add_mxc_w1( 298 const struct imx_mxc_w1_data *data); 299 300#include <mach/esdhc.h> 301struct imx_sdhci_esdhc_imx_data { 302 const char *devid; 303 int id; 304 resource_size_t iobase; 305 resource_size_t irq; 306}; 307struct platform_device *__init imx_add_sdhci_esdhc_imx( 308 const struct imx_sdhci_esdhc_imx_data *data, 309 const struct esdhc_platform_data *pdata); 310 311#include <mach/spi.h> 312struct imx_spi_imx_data { 313 const char *devid; 314 int id; 315 resource_size_t iobase; 316 resource_size_t iosize; 317 int irq; 318}; 319struct platform_device *__init imx_add_spi_imx( 320 const struct imx_spi_imx_data *data, 321 const struct spi_imx_master *pdata); 322 323struct platform_device *imx_add_imx_dma(void); 324struct platform_device *imx_add_imx_sdma(char *name, 325 resource_size_t iobase, int irq, struct sdma_platform_data *pdata); 326 327#include <linux/ahci_platform.h> 328struct imx_ahci_imx_data { 329 const char *devid; 330 resource_size_t iobase; 331 resource_size_t irq; 332}; 333struct platform_device *__init imx_add_ahci_imx( 334 const struct imx_ahci_imx_data *data, 335 const struct ahci_platform_data *pdata); 336