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 <linux/platform_data/dma-imx-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 53struct imx_flexcan_data { 54 int id; 55 resource_size_t iobase; 56 resource_size_t iosize; 57 resource_size_t irq; 58}; 59struct platform_device *__init imx_add_flexcan( 60 const struct imx_flexcan_data *data); 61 62#include <linux/fsl_devices.h> 63struct imx_fsl_usb2_udc_data { 64 const char *devid; 65 resource_size_t iobase; 66 resource_size_t irq; 67}; 68struct platform_device *__init imx_add_fsl_usb2_udc( 69 const struct imx_fsl_usb2_udc_data *data, 70 const struct fsl_usb2_platform_data *pdata); 71 72#include <linux/gpio_keys.h> 73struct platform_device *__init imx_add_gpio_keys( 74 const struct gpio_keys_platform_data *pdata); 75 76#include <linux/platform_data/usb-mx2.h> 77struct imx_imx21_hcd_data { 78 resource_size_t iobase; 79 resource_size_t irq; 80}; 81struct platform_device *__init imx_add_imx21_hcd( 82 const struct imx_imx21_hcd_data *data, 83 const struct mx21_usbh_platform_data *pdata); 84 85struct imx_imx27_coda_data { 86 resource_size_t iobase; 87 resource_size_t iosize; 88 resource_size_t irq; 89}; 90struct platform_device *__init imx_add_imx27_coda( 91 const struct imx_imx27_coda_data *data); 92 93struct imx_imx2_wdt_data { 94 int id; 95 resource_size_t iobase; 96 resource_size_t iosize; 97}; 98struct platform_device *__init imx_add_imx2_wdt( 99 const struct imx_imx2_wdt_data *data); 100 101struct imx_imxdi_rtc_data { 102 resource_size_t iobase; 103 resource_size_t irq; 104}; 105struct platform_device *__init imx_add_imxdi_rtc( 106 const struct imx_imxdi_rtc_data *data); 107 108#include <linux/platform_data/video-imxfb.h> 109struct imx_imx_fb_data { 110 const char *devid; 111 resource_size_t iobase; 112 resource_size_t iosize; 113 resource_size_t irq; 114}; 115struct platform_device *__init imx_add_imx_fb( 116 const struct imx_imx_fb_data *data, 117 const struct imx_fb_platform_data *pdata); 118 119#include <linux/platform_data/i2c-imx.h> 120struct imx_imx_i2c_data { 121 const char *devid; 122 int id; 123 resource_size_t iobase; 124 resource_size_t iosize; 125 resource_size_t irq; 126}; 127struct platform_device *__init imx_add_imx_i2c( 128 const struct imx_imx_i2c_data *data, 129 const struct imxi2c_platform_data *pdata); 130 131#include <linux/input/matrix_keypad.h> 132struct imx_imx_keypad_data { 133 resource_size_t iobase; 134 resource_size_t iosize; 135 resource_size_t irq; 136}; 137struct platform_device *__init imx_add_imx_keypad( 138 const struct imx_imx_keypad_data *data, 139 const struct matrix_keymap_data *pdata); 140 141#include <linux/platform_data/asoc-imx-ssi.h> 142struct imx_imx_ssi_data { 143 int id; 144 resource_size_t iobase; 145 resource_size_t iosize; 146 resource_size_t irq; 147 resource_size_t dmatx0; 148 resource_size_t dmarx0; 149 resource_size_t dmatx1; 150 resource_size_t dmarx1; 151}; 152struct platform_device *__init imx_add_imx_ssi( 153 const struct imx_imx_ssi_data *data, 154 const struct imx_ssi_platform_data *pdata); 155 156#include <linux/platform_data/serial-imx.h> 157struct imx_imx_uart_3irq_data { 158 int id; 159 resource_size_t iobase; 160 resource_size_t iosize; 161 resource_size_t irqrx; 162 resource_size_t irqtx; 163 resource_size_t irqrts; 164}; 165struct platform_device *__init imx_add_imx_uart_3irq( 166 const struct imx_imx_uart_3irq_data *data, 167 const struct imxuart_platform_data *pdata); 168 169struct imx_imx_uart_1irq_data { 170 int id; 171 resource_size_t iobase; 172 resource_size_t iosize; 173 resource_size_t irq; 174}; 175struct platform_device *__init imx_add_imx_uart_1irq( 176 const struct imx_imx_uart_1irq_data *data, 177 const struct imxuart_platform_data *pdata); 178 179#include <linux/platform_data/video-mx3fb.h> 180#include <linux/platform_data/camera-mx3.h> 181struct imx_ipu_core_data { 182 resource_size_t iobase; 183 resource_size_t synirq; 184 resource_size_t errirq; 185}; 186struct platform_device *__init imx_add_ipu_core( 187 const struct imx_ipu_core_data *data); 188struct platform_device *__init imx_alloc_mx3_camera( 189 const struct imx_ipu_core_data *data, 190 const struct mx3_camera_pdata *pdata); 191struct platform_device *__init imx_add_mx3_sdc_fb( 192 const struct imx_ipu_core_data *data, 193 struct mx3fb_platform_data *pdata); 194 195#include <linux/platform_data/camera-mx2.h> 196struct imx_mx2_camera_data { 197 const char *devid; 198 resource_size_t iobasecsi; 199 resource_size_t iosizecsi; 200 resource_size_t irqcsi; 201 resource_size_t iobaseemmaprp; 202 resource_size_t iosizeemmaprp; 203 resource_size_t irqemmaprp; 204}; 205struct platform_device *__init imx_add_mx2_camera( 206 const struct imx_mx2_camera_data *data, 207 const struct mx2_camera_platform_data *pdata); 208 209 210struct imx_mx2_emma_data { 211 resource_size_t iobase; 212 resource_size_t iosize; 213 resource_size_t irq; 214}; 215struct platform_device *__init imx_add_mx2_emmaprp( 216 const struct imx_mx2_emma_data *data); 217 218#include <linux/platform_data/usb-ehci-mxc.h> 219struct imx_mxc_ehci_data { 220 int id; 221 resource_size_t iobase; 222 resource_size_t irq; 223}; 224struct platform_device *__init imx_add_mxc_ehci( 225 const struct imx_mxc_ehci_data *data, 226 const struct mxc_usbh_platform_data *pdata); 227 228#include <linux/platform_data/mmc-mxcmmc.h> 229struct imx_mxc_mmc_data { 230 const char *devid; 231 int id; 232 resource_size_t iobase; 233 resource_size_t iosize; 234 resource_size_t irq; 235 resource_size_t dmareq; 236}; 237struct platform_device *__init imx_add_mxc_mmc( 238 const struct imx_mxc_mmc_data *data, 239 const struct imxmmc_platform_data *pdata); 240 241#include <linux/platform_data/mtd-mxc_nand.h> 242struct imx_mxc_nand_data { 243 const char *devid; 244 /* 245 * id is traditionally 0, but -1 is more appropriate. We use -1 for new 246 * machines but don't change existing devices as the nand device usually 247 * appears in the kernel command line to pass its partitioning. 248 */ 249 int id; 250 resource_size_t iobase; 251 resource_size_t iosize; 252 resource_size_t axibase; 253 resource_size_t irq; 254}; 255struct platform_device *__init imx_add_mxc_nand( 256 const struct imx_mxc_nand_data *data, 257 const struct mxc_nand_platform_data *pdata); 258 259struct imx_pata_imx_data { 260 resource_size_t iobase; 261 resource_size_t iosize; 262 resource_size_t irq; 263}; 264struct platform_device *__init imx_add_pata_imx( 265 const struct imx_pata_imx_data *data); 266 267/* mxc_rtc */ 268struct imx_mxc_rtc_data { 269 const char *devid; 270 resource_size_t iobase; 271 resource_size_t irq; 272}; 273struct platform_device *__init imx_add_mxc_rtc( 274 const struct imx_mxc_rtc_data *data); 275 276/* mxc_w1 */ 277struct imx_mxc_w1_data { 278 resource_size_t iobase; 279}; 280struct platform_device *__init imx_add_mxc_w1( 281 const struct imx_mxc_w1_data *data); 282 283#include <linux/platform_data/mmc-esdhc-imx.h> 284struct imx_sdhci_esdhc_imx_data { 285 const char *devid; 286 int id; 287 resource_size_t iobase; 288 resource_size_t irq; 289}; 290struct platform_device *__init imx_add_sdhci_esdhc_imx( 291 const struct imx_sdhci_esdhc_imx_data *data, 292 const struct esdhc_platform_data *pdata); 293 294#include <linux/platform_data/spi-imx.h> 295struct imx_spi_imx_data { 296 const char *devid; 297 int id; 298 resource_size_t iobase; 299 resource_size_t iosize; 300 int irq; 301}; 302struct platform_device *__init imx_add_spi_imx( 303 const struct imx_spi_imx_data *data, 304 const struct spi_imx_master *pdata); 305 306struct platform_device *imx_add_imx_dma(char *name, resource_size_t iobase, 307 int irq, int irq_err); 308struct platform_device *imx_add_imx_sdma(char *name, 309 resource_size_t iobase, int irq, struct sdma_platform_data *pdata); 310