root/arch/arm/mach-pxa/devices.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. pxa_register_device
  2. pxa_set_mci_info
  3. pxa_set_udc_info
  4. pxa3xx_set_u2d_info
  5. pxa_set_fb_info
  6. pxa_set_ffuart_info
  7. pxa_set_btuart_info
  8. pxa_set_stuart_info
  9. pxa_set_hwuart_info
  10. pxa_set_i2c_info
  11. pxa_set_ficp_info
  12. pxa_set_ac97_info
  13. pxa_set_camera_info
  14. pxa_set_ohci_info
  15. pxa_set_keypad_info
  16. pxa3xx_set_mci2_info
  17. pxa3xx_set_mci3_info
  18. pxa3xx_set_nand_info
  19. pxa2xx_set_spi_info
  20. pxa2xx_set_dmac_info

   1 // SPDX-License-Identifier: GPL-2.0
   2 #include <linux/module.h>
   3 #include <linux/kernel.h>
   4 #include <linux/init.h>
   5 #include <linux/platform_device.h>
   6 #include <linux/clkdev.h>
   7 #include <linux/dma-mapping.h>
   8 #include <linux/dmaengine.h>
   9 #include <linux/spi/pxa2xx_spi.h>
  10 #include <linux/platform_data/i2c-pxa.h>
  11 
  12 #include "udc.h"
  13 #include <linux/platform_data/usb-pxa3xx-ulpi.h>
  14 #include <linux/platform_data/video-pxafb.h>
  15 #include <linux/platform_data/mmc-pxamci.h>
  16 #include <linux/platform_data/irda-pxaficp.h>
  17 #include <mach/irqs.h>
  18 #include <linux/platform_data/usb-ohci-pxa27x.h>
  19 #include <linux/platform_data/keypad-pxa27x.h>
  20 #include <linux/platform_data/media/camera-pxa.h>
  21 #include <mach/audio.h>
  22 #include <mach/hardware.h>
  23 #include <linux/platform_data/mmp_dma.h>
  24 #include <linux/platform_data/mtd-nand-pxa3xx.h>
  25 
  26 #include "devices.h"
  27 #include "generic.h"
  28 
  29 void __init pxa_register_device(struct platform_device *dev, void *data)
  30 {
  31         int ret;
  32 
  33         dev->dev.platform_data = data;
  34 
  35         ret = platform_device_register(dev);
  36         if (ret)
  37                 dev_err(&dev->dev, "unable to register device: %d\n", ret);
  38 }
  39 
  40 static struct resource pxa_resource_pmu = {
  41         .start  = IRQ_PMU,
  42         .end    = IRQ_PMU,
  43         .flags  = IORESOURCE_IRQ,
  44 };
  45 
  46 struct platform_device pxa_device_pmu = {
  47         .name           = "xscale-pmu",
  48         .id             = -1,
  49         .resource       = &pxa_resource_pmu,
  50         .num_resources  = 1,
  51 };
  52 
  53 static struct resource pxamci_resources[] = {
  54         [0] = {
  55                 .start  = 0x41100000,
  56                 .end    = 0x41100fff,
  57                 .flags  = IORESOURCE_MEM,
  58         },
  59         [1] = {
  60                 .start  = IRQ_MMC,
  61                 .end    = IRQ_MMC,
  62                 .flags  = IORESOURCE_IRQ,
  63         },
  64 };
  65 
  66 static u64 pxamci_dmamask = 0xffffffffUL;
  67 
  68 struct platform_device pxa_device_mci = {
  69         .name           = "pxa2xx-mci",
  70         .id             = 0,
  71         .dev            = {
  72                 .dma_mask = &pxamci_dmamask,
  73                 .coherent_dma_mask = 0xffffffff,
  74         },
  75         .num_resources  = ARRAY_SIZE(pxamci_resources),
  76         .resource       = pxamci_resources,
  77 };
  78 
  79 void __init pxa_set_mci_info(struct pxamci_platform_data *info)
  80 {
  81         pxa_register_device(&pxa_device_mci, info);
  82 }
  83 
  84 
  85 static struct pxa2xx_udc_mach_info pxa_udc_info = {
  86         .gpio_pullup = -1,
  87 };
  88 
  89 void __init pxa_set_udc_info(struct pxa2xx_udc_mach_info *info)
  90 {
  91         memcpy(&pxa_udc_info, info, sizeof *info);
  92 }
  93 
  94 static struct resource pxa2xx_udc_resources[] = {
  95         [0] = {
  96                 .start  = 0x40600000,
  97                 .end    = 0x4060ffff,
  98                 .flags  = IORESOURCE_MEM,
  99         },
 100         [1] = {
 101                 .start  = IRQ_USB,
 102                 .end    = IRQ_USB,
 103                 .flags  = IORESOURCE_IRQ,
 104         },
 105 };
 106 
 107 static u64 udc_dma_mask = ~(u32)0;
 108 
 109 struct platform_device pxa25x_device_udc = {
 110         .name           = "pxa25x-udc",
 111         .id             = -1,
 112         .resource       = pxa2xx_udc_resources,
 113         .num_resources  = ARRAY_SIZE(pxa2xx_udc_resources),
 114         .dev            =  {
 115                 .platform_data  = &pxa_udc_info,
 116                 .dma_mask       = &udc_dma_mask,
 117         }
 118 };
 119 
 120 struct platform_device pxa27x_device_udc = {
 121         .name           = "pxa27x-udc",
 122         .id             = -1,
 123         .resource       = pxa2xx_udc_resources,
 124         .num_resources  = ARRAY_SIZE(pxa2xx_udc_resources),
 125         .dev            =  {
 126                 .platform_data  = &pxa_udc_info,
 127                 .dma_mask       = &udc_dma_mask,
 128         }
 129 };
 130 
 131 #ifdef CONFIG_PXA3xx
 132 static struct resource pxa3xx_u2d_resources[] = {
 133         [0] = {
 134                 .start  = 0x54100000,
 135                 .end    = 0x54100fff,
 136                 .flags  = IORESOURCE_MEM,
 137         },
 138         [1] = {
 139                 .start  = IRQ_USB2,
 140                 .end    = IRQ_USB2,
 141                 .flags  = IORESOURCE_IRQ,
 142         },
 143 };
 144 
 145 struct platform_device pxa3xx_device_u2d = {
 146         .name           = "pxa3xx-u2d",
 147         .id             = -1,
 148         .resource       = pxa3xx_u2d_resources,
 149         .num_resources  = ARRAY_SIZE(pxa3xx_u2d_resources),
 150 };
 151 
 152 void __init pxa3xx_set_u2d_info(struct pxa3xx_u2d_platform_data *info)
 153 {
 154         pxa_register_device(&pxa3xx_device_u2d, info);
 155 }
 156 #endif /* CONFIG_PXA3xx */
 157 
 158 static struct resource pxafb_resources[] = {
 159         [0] = {
 160                 .start  = 0x44000000,
 161                 .end    = 0x4400ffff,
 162                 .flags  = IORESOURCE_MEM,
 163         },
 164         [1] = {
 165                 .start  = IRQ_LCD,
 166                 .end    = IRQ_LCD,
 167                 .flags  = IORESOURCE_IRQ,
 168         },
 169 };
 170 
 171 static u64 fb_dma_mask = ~(u64)0;
 172 
 173 struct platform_device pxa_device_fb = {
 174         .name           = "pxa2xx-fb",
 175         .id             = -1,
 176         .dev            = {
 177                 .dma_mask       = &fb_dma_mask,
 178                 .coherent_dma_mask = 0xffffffff,
 179         },
 180         .num_resources  = ARRAY_SIZE(pxafb_resources),
 181         .resource       = pxafb_resources,
 182 };
 183 
 184 void __init pxa_set_fb_info(struct device *parent, struct pxafb_mach_info *info)
 185 {
 186         pxa_device_fb.dev.parent = parent;
 187         pxa_register_device(&pxa_device_fb, info);
 188 }
 189 
 190 static struct resource pxa_resource_ffuart[] = {
 191         {
 192                 .start  = 0x40100000,
 193                 .end    = 0x40100023,
 194                 .flags  = IORESOURCE_MEM,
 195         }, {
 196                 .start  = IRQ_FFUART,
 197                 .end    = IRQ_FFUART,
 198                 .flags  = IORESOURCE_IRQ,
 199         }
 200 };
 201 
 202 struct platform_device pxa_device_ffuart = {
 203         .name           = "pxa2xx-uart",
 204         .id             = 0,
 205         .resource       = pxa_resource_ffuart,
 206         .num_resources  = ARRAY_SIZE(pxa_resource_ffuart),
 207 };
 208 
 209 void __init pxa_set_ffuart_info(void *info)
 210 {
 211         pxa_register_device(&pxa_device_ffuart, info);
 212 }
 213 
 214 static struct resource pxa_resource_btuart[] = {
 215         {
 216                 .start  = 0x40200000,
 217                 .end    = 0x40200023,
 218                 .flags  = IORESOURCE_MEM,
 219         }, {
 220                 .start  = IRQ_BTUART,
 221                 .end    = IRQ_BTUART,
 222                 .flags  = IORESOURCE_IRQ,
 223         }
 224 };
 225 
 226 struct platform_device pxa_device_btuart = {
 227         .name           = "pxa2xx-uart",
 228         .id             = 1,
 229         .resource       = pxa_resource_btuart,
 230         .num_resources  = ARRAY_SIZE(pxa_resource_btuart),
 231 };
 232 
 233 void __init pxa_set_btuart_info(void *info)
 234 {
 235         pxa_register_device(&pxa_device_btuart, info);
 236 }
 237 
 238 static struct resource pxa_resource_stuart[] = {
 239         {
 240                 .start  = 0x40700000,
 241                 .end    = 0x40700023,
 242                 .flags  = IORESOURCE_MEM,
 243         }, {
 244                 .start  = IRQ_STUART,
 245                 .end    = IRQ_STUART,
 246                 .flags  = IORESOURCE_IRQ,
 247         }
 248 };
 249 
 250 struct platform_device pxa_device_stuart = {
 251         .name           = "pxa2xx-uart",
 252         .id             = 2,
 253         .resource       = pxa_resource_stuart,
 254         .num_resources  = ARRAY_SIZE(pxa_resource_stuart),
 255 };
 256 
 257 void __init pxa_set_stuart_info(void *info)
 258 {
 259         pxa_register_device(&pxa_device_stuart, info);
 260 }
 261 
 262 static struct resource pxa_resource_hwuart[] = {
 263         {
 264                 .start  = 0x41600000,
 265                 .end    = 0x4160002F,
 266                 .flags  = IORESOURCE_MEM,
 267         }, {
 268                 .start  = IRQ_HWUART,
 269                 .end    = IRQ_HWUART,
 270                 .flags  = IORESOURCE_IRQ,
 271         }
 272 };
 273 
 274 struct platform_device pxa_device_hwuart = {
 275         .name           = "pxa2xx-uart",
 276         .id             = 3,
 277         .resource       = pxa_resource_hwuart,
 278         .num_resources  = ARRAY_SIZE(pxa_resource_hwuart),
 279 };
 280 
 281 void __init pxa_set_hwuart_info(void *info)
 282 {
 283         if (cpu_is_pxa255())
 284                 pxa_register_device(&pxa_device_hwuart, info);
 285         else
 286                 pr_info("UART: Ignoring attempt to register HWUART on non-PXA255 hardware");
 287 }
 288 
 289 static struct resource pxai2c_resources[] = {
 290         {
 291                 .start  = 0x40301680,
 292                 .end    = 0x403016a3,
 293                 .flags  = IORESOURCE_MEM,
 294         }, {
 295                 .start  = IRQ_I2C,
 296                 .end    = IRQ_I2C,
 297                 .flags  = IORESOURCE_IRQ,
 298         },
 299 };
 300 
 301 struct platform_device pxa_device_i2c = {
 302         .name           = "pxa2xx-i2c",
 303         .id             = 0,
 304         .resource       = pxai2c_resources,
 305         .num_resources  = ARRAY_SIZE(pxai2c_resources),
 306 };
 307 
 308 void __init pxa_set_i2c_info(struct i2c_pxa_platform_data *info)
 309 {
 310         pxa_register_device(&pxa_device_i2c, info);
 311 }
 312 
 313 #ifdef CONFIG_PXA27x
 314 static struct resource pxa27x_resources_i2c_power[] = {
 315         {
 316                 .start  = 0x40f00180,
 317                 .end    = 0x40f001a3,
 318                 .flags  = IORESOURCE_MEM,
 319         }, {
 320                 .start  = IRQ_PWRI2C,
 321                 .end    = IRQ_PWRI2C,
 322                 .flags  = IORESOURCE_IRQ,
 323         },
 324 };
 325 
 326 struct platform_device pxa27x_device_i2c_power = {
 327         .name           = "pxa2xx-i2c",
 328         .id             = 1,
 329         .resource       = pxa27x_resources_i2c_power,
 330         .num_resources  = ARRAY_SIZE(pxa27x_resources_i2c_power),
 331 };
 332 #endif
 333 
 334 static struct resource pxai2s_resources[] = {
 335         {
 336                 .start  = 0x40400000,
 337                 .end    = 0x40400083,
 338                 .flags  = IORESOURCE_MEM,
 339         }, {
 340                 .start  = IRQ_I2S,
 341                 .end    = IRQ_I2S,
 342                 .flags  = IORESOURCE_IRQ,
 343         },
 344 };
 345 
 346 struct platform_device pxa_device_i2s = {
 347         .name           = "pxa2xx-i2s",
 348         .id             = -1,
 349         .resource       = pxai2s_resources,
 350         .num_resources  = ARRAY_SIZE(pxai2s_resources),
 351 };
 352 
 353 struct platform_device pxa_device_asoc_ssp1 = {
 354         .name           = "pxa-ssp-dai",
 355         .id             = 0,
 356 };
 357 
 358 struct platform_device pxa_device_asoc_ssp2= {
 359         .name           = "pxa-ssp-dai",
 360         .id             = 1,
 361 };
 362 
 363 struct platform_device pxa_device_asoc_ssp3 = {
 364         .name           = "pxa-ssp-dai",
 365         .id             = 2,
 366 };
 367 
 368 struct platform_device pxa_device_asoc_ssp4 = {
 369         .name           = "pxa-ssp-dai",
 370         .id             = 3,
 371 };
 372 
 373 struct platform_device pxa_device_asoc_platform = {
 374         .name           = "pxa-pcm-audio",
 375         .id             = -1,
 376 };
 377 
 378 static u64 pxaficp_dmamask = ~(u32)0;
 379 
 380 static struct resource pxa_ir_resources[] = {
 381         [0] = {
 382                 .start  = IRQ_STUART,
 383                 .end    = IRQ_STUART,
 384                 .flags  = IORESOURCE_IRQ,
 385         },
 386         [1] = {
 387                 .start  = IRQ_ICP,
 388                 .end    = IRQ_ICP,
 389                 .flags  = IORESOURCE_IRQ,
 390         },
 391         [3] = {
 392                 .start  = 0x40800000,
 393                 .end    = 0x4080001b,
 394                 .flags  = IORESOURCE_MEM,
 395         },
 396         [4] = {
 397                 .start  = 0x40700000,
 398                 .end    = 0x40700023,
 399                 .flags  = IORESOURCE_MEM,
 400         },
 401 };
 402 
 403 struct platform_device pxa_device_ficp = {
 404         .name           = "pxa2xx-ir",
 405         .id             = -1,
 406         .num_resources  = ARRAY_SIZE(pxa_ir_resources),
 407         .resource       = pxa_ir_resources,
 408         .dev            = {
 409                 .dma_mask = &pxaficp_dmamask,
 410                 .coherent_dma_mask = 0xffffffff,
 411         },
 412 };
 413 
 414 void __init pxa_set_ficp_info(struct pxaficp_platform_data *info)
 415 {
 416         pxa_register_device(&pxa_device_ficp, info);
 417 }
 418 
 419 static struct resource pxa_rtc_resources[] = {
 420         [0] = {
 421                 .start  = 0x40900000,
 422                 .end    = 0x40900000 + 0x3b,
 423                 .flags  = IORESOURCE_MEM,
 424         },
 425         [1] = {
 426                 .start  = IRQ_RTC1Hz,
 427                 .end    = IRQ_RTC1Hz,
 428                 .name   = "rtc 1Hz",
 429                 .flags  = IORESOURCE_IRQ,
 430         },
 431         [2] = {
 432                 .start  = IRQ_RTCAlrm,
 433                 .end    = IRQ_RTCAlrm,
 434                 .name   = "rtc alarm",
 435                 .flags  = IORESOURCE_IRQ,
 436         },
 437 };
 438 
 439 struct platform_device pxa_device_rtc = {
 440         .name           = "pxa-rtc",
 441         .id             = -1,
 442         .num_resources  = ARRAY_SIZE(pxa_rtc_resources),
 443         .resource       = pxa_rtc_resources,
 444 };
 445 
 446 struct platform_device sa1100_device_rtc = {
 447         .name           = "sa1100-rtc",
 448         .id             = -1,
 449         .num_resources  = ARRAY_SIZE(pxa_rtc_resources),
 450         .resource       = pxa_rtc_resources,
 451 };
 452 
 453 static struct resource pxa_ac97_resources[] = {
 454         [0] = {
 455                 .start  = 0x40500000,
 456                 .end    = 0x40500000 + 0xfff,
 457                 .flags  = IORESOURCE_MEM,
 458         },
 459         [1] = {
 460                 .start  = IRQ_AC97,
 461                 .end    = IRQ_AC97,
 462                 .flags  = IORESOURCE_IRQ,
 463         },
 464 };
 465 
 466 static u64 pxa_ac97_dmamask = 0xffffffffUL;
 467 
 468 struct platform_device pxa_device_ac97 = {
 469         .name           = "pxa2xx-ac97",
 470         .id             = -1,
 471         .dev            = {
 472                 .dma_mask = &pxa_ac97_dmamask,
 473                 .coherent_dma_mask = 0xffffffff,
 474         },
 475         .num_resources  = ARRAY_SIZE(pxa_ac97_resources),
 476         .resource       = pxa_ac97_resources,
 477 };
 478 
 479 void __init pxa_set_ac97_info(pxa2xx_audio_ops_t *ops)
 480 {
 481         int ret;
 482 
 483         ret = clk_add_alias("ac97_clk", "pxa2xx-ac97:0", "AC97CLK",
 484                            &pxa_device_ac97.dev);
 485         if (ret)
 486                 pr_err("PXA AC97 clock1 alias error: %d\n", ret);
 487 
 488         ret = clk_add_alias("ac97_clk", "pxa2xx-ac97:1", "AC97CLK",
 489                             &pxa_device_ac97.dev);
 490         if (ret)
 491                 pr_err("PXA AC97 clock2 alias error: %d\n", ret);
 492 
 493         pxa_register_device(&pxa_device_ac97, ops);
 494 }
 495 
 496 #ifdef CONFIG_PXA25x
 497 
 498 static struct resource pxa25x_resource_pwm0[] = {
 499         [0] = {
 500                 .start  = 0x40b00000,
 501                 .end    = 0x40b0000f,
 502                 .flags  = IORESOURCE_MEM,
 503         },
 504 };
 505 
 506 struct platform_device pxa25x_device_pwm0 = {
 507         .name           = "pxa25x-pwm",
 508         .id             = 0,
 509         .resource       = pxa25x_resource_pwm0,
 510         .num_resources  = ARRAY_SIZE(pxa25x_resource_pwm0),
 511 };
 512 
 513 static struct resource pxa25x_resource_pwm1[] = {
 514         [0] = {
 515                 .start  = 0x40c00000,
 516                 .end    = 0x40c0000f,
 517                 .flags  = IORESOURCE_MEM,
 518         },
 519 };
 520 
 521 struct platform_device pxa25x_device_pwm1 = {
 522         .name           = "pxa25x-pwm",
 523         .id             = 1,
 524         .resource       = pxa25x_resource_pwm1,
 525         .num_resources  = ARRAY_SIZE(pxa25x_resource_pwm1),
 526 };
 527 
 528 static u64 pxa25x_ssp_dma_mask = DMA_BIT_MASK(32);
 529 
 530 static struct resource pxa25x_resource_ssp[] = {
 531         [0] = {
 532                 .start  = 0x41000000,
 533                 .end    = 0x4100001f,
 534                 .flags  = IORESOURCE_MEM,
 535         },
 536         [1] = {
 537                 .start  = IRQ_SSP,
 538                 .end    = IRQ_SSP,
 539                 .flags  = IORESOURCE_IRQ,
 540         },
 541 };
 542 
 543 struct platform_device pxa25x_device_ssp = {
 544         .name           = "pxa25x-ssp",
 545         .id             = 0,
 546         .dev            = {
 547                 .dma_mask = &pxa25x_ssp_dma_mask,
 548                 .coherent_dma_mask = DMA_BIT_MASK(32),
 549         },
 550         .resource       = pxa25x_resource_ssp,
 551         .num_resources  = ARRAY_SIZE(pxa25x_resource_ssp),
 552 };
 553 
 554 static u64 pxa25x_nssp_dma_mask = DMA_BIT_MASK(32);
 555 
 556 static struct resource pxa25x_resource_nssp[] = {
 557         [0] = {
 558                 .start  = 0x41400000,
 559                 .end    = 0x4140002f,
 560                 .flags  = IORESOURCE_MEM,
 561         },
 562         [1] = {
 563                 .start  = IRQ_NSSP,
 564                 .end    = IRQ_NSSP,
 565                 .flags  = IORESOURCE_IRQ,
 566         },
 567 };
 568 
 569 struct platform_device pxa25x_device_nssp = {
 570         .name           = "pxa25x-nssp",
 571         .id             = 1,
 572         .dev            = {
 573                 .dma_mask = &pxa25x_nssp_dma_mask,
 574                 .coherent_dma_mask = DMA_BIT_MASK(32),
 575         },
 576         .resource       = pxa25x_resource_nssp,
 577         .num_resources  = ARRAY_SIZE(pxa25x_resource_nssp),
 578 };
 579 
 580 static u64 pxa25x_assp_dma_mask = DMA_BIT_MASK(32);
 581 
 582 static struct resource pxa25x_resource_assp[] = {
 583         [0] = {
 584                 .start  = 0x41500000,
 585                 .end    = 0x4150002f,
 586                 .flags  = IORESOURCE_MEM,
 587         },
 588         [1] = {
 589                 .start  = IRQ_ASSP,
 590                 .end    = IRQ_ASSP,
 591                 .flags  = IORESOURCE_IRQ,
 592         },
 593 };
 594 
 595 struct platform_device pxa25x_device_assp = {
 596         /* ASSP is basically equivalent to NSSP */
 597         .name           = "pxa25x-nssp",
 598         .id             = 2,
 599         .dev            = {
 600                 .dma_mask = &pxa25x_assp_dma_mask,
 601                 .coherent_dma_mask = DMA_BIT_MASK(32),
 602         },
 603         .resource       = pxa25x_resource_assp,
 604         .num_resources  = ARRAY_SIZE(pxa25x_resource_assp),
 605 };
 606 #endif /* CONFIG_PXA25x */
 607 
 608 #if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
 609 static struct resource pxa27x_resource_camera[] = {
 610         [0] = {
 611                 .start  = 0x50000000,
 612                 .end    = 0x50000fff,
 613                 .flags  = IORESOURCE_MEM,
 614         },
 615         [1] = {
 616                 .start  = IRQ_CAMERA,
 617                 .end    = IRQ_CAMERA,
 618                 .flags  = IORESOURCE_IRQ,
 619         },
 620 };
 621 
 622 static u64 pxa27x_dma_mask_camera = DMA_BIT_MASK(32);
 623 
 624 static struct platform_device pxa27x_device_camera = {
 625         .name           = "pxa27x-camera",
 626         .id             = 0, /* This is used to put cameras on this interface */
 627         .dev            = {
 628                 .dma_mask               = &pxa27x_dma_mask_camera,
 629                 .coherent_dma_mask      = 0xffffffff,
 630         },
 631         .num_resources  = ARRAY_SIZE(pxa27x_resource_camera),
 632         .resource       = pxa27x_resource_camera,
 633 };
 634 
 635 void __init pxa_set_camera_info(struct pxacamera_platform_data *info)
 636 {
 637         pxa_register_device(&pxa27x_device_camera, info);
 638 }
 639 
 640 static u64 pxa27x_ohci_dma_mask = DMA_BIT_MASK(32);
 641 
 642 static struct resource pxa27x_resource_ohci[] = {
 643         [0] = {
 644                 .start  = 0x4C000000,
 645                 .end    = 0x4C00ff6f,
 646                 .flags  = IORESOURCE_MEM,
 647         },
 648         [1] = {
 649                 .start  = IRQ_USBH1,
 650                 .end    = IRQ_USBH1,
 651                 .flags  = IORESOURCE_IRQ,
 652         },
 653 };
 654 
 655 struct platform_device pxa27x_device_ohci = {
 656         .name           = "pxa27x-ohci",
 657         .id             = -1,
 658         .dev            = {
 659                 .dma_mask = &pxa27x_ohci_dma_mask,
 660                 .coherent_dma_mask = DMA_BIT_MASK(32),
 661         },
 662         .num_resources  = ARRAY_SIZE(pxa27x_resource_ohci),
 663         .resource       = pxa27x_resource_ohci,
 664 };
 665 
 666 void __init pxa_set_ohci_info(struct pxaohci_platform_data *info)
 667 {
 668         pxa_register_device(&pxa27x_device_ohci, info);
 669 }
 670 #endif /* CONFIG_PXA27x || CONFIG_PXA3xx */
 671 
 672 #if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
 673 static struct resource pxa27x_resource_keypad[] = {
 674         [0] = {
 675                 .start  = 0x41500000,
 676                 .end    = 0x4150004c,
 677                 .flags  = IORESOURCE_MEM,
 678         },
 679         [1] = {
 680                 .start  = IRQ_KEYPAD,
 681                 .end    = IRQ_KEYPAD,
 682                 .flags  = IORESOURCE_IRQ,
 683         },
 684 };
 685 
 686 struct platform_device pxa27x_device_keypad = {
 687         .name           = "pxa27x-keypad",
 688         .id             = -1,
 689         .resource       = pxa27x_resource_keypad,
 690         .num_resources  = ARRAY_SIZE(pxa27x_resource_keypad),
 691 };
 692 
 693 void __init pxa_set_keypad_info(struct pxa27x_keypad_platform_data *info)
 694 {
 695         pxa_register_device(&pxa27x_device_keypad, info);
 696 }
 697 
 698 static u64 pxa27x_ssp1_dma_mask = DMA_BIT_MASK(32);
 699 
 700 static struct resource pxa27x_resource_ssp1[] = {
 701         [0] = {
 702                 .start  = 0x41000000,
 703                 .end    = 0x4100003f,
 704                 .flags  = IORESOURCE_MEM,
 705         },
 706         [1] = {
 707                 .start  = IRQ_SSP,
 708                 .end    = IRQ_SSP,
 709                 .flags  = IORESOURCE_IRQ,
 710         },
 711 };
 712 
 713 struct platform_device pxa27x_device_ssp1 = {
 714         .name           = "pxa27x-ssp",
 715         .id             = 0,
 716         .dev            = {
 717                 .dma_mask = &pxa27x_ssp1_dma_mask,
 718                 .coherent_dma_mask = DMA_BIT_MASK(32),
 719         },
 720         .resource       = pxa27x_resource_ssp1,
 721         .num_resources  = ARRAY_SIZE(pxa27x_resource_ssp1),
 722 };
 723 
 724 static u64 pxa27x_ssp2_dma_mask = DMA_BIT_MASK(32);
 725 
 726 static struct resource pxa27x_resource_ssp2[] = {
 727         [0] = {
 728                 .start  = 0x41700000,
 729                 .end    = 0x4170003f,
 730                 .flags  = IORESOURCE_MEM,
 731         },
 732         [1] = {
 733                 .start  = IRQ_SSP2,
 734                 .end    = IRQ_SSP2,
 735                 .flags  = IORESOURCE_IRQ,
 736         },
 737 };
 738 
 739 struct platform_device pxa27x_device_ssp2 = {
 740         .name           = "pxa27x-ssp",
 741         .id             = 1,
 742         .dev            = {
 743                 .dma_mask = &pxa27x_ssp2_dma_mask,
 744                 .coherent_dma_mask = DMA_BIT_MASK(32),
 745         },
 746         .resource       = pxa27x_resource_ssp2,
 747         .num_resources  = ARRAY_SIZE(pxa27x_resource_ssp2),
 748 };
 749 
 750 static u64 pxa27x_ssp3_dma_mask = DMA_BIT_MASK(32);
 751 
 752 static struct resource pxa27x_resource_ssp3[] = {
 753         [0] = {
 754                 .start  = 0x41900000,
 755                 .end    = 0x4190003f,
 756                 .flags  = IORESOURCE_MEM,
 757         },
 758         [1] = {
 759                 .start  = IRQ_SSP3,
 760                 .end    = IRQ_SSP3,
 761                 .flags  = IORESOURCE_IRQ,
 762         },
 763 };
 764 
 765 struct platform_device pxa27x_device_ssp3 = {
 766         .name           = "pxa27x-ssp",
 767         .id             = 2,
 768         .dev            = {
 769                 .dma_mask = &pxa27x_ssp3_dma_mask,
 770                 .coherent_dma_mask = DMA_BIT_MASK(32),
 771         },
 772         .resource       = pxa27x_resource_ssp3,
 773         .num_resources  = ARRAY_SIZE(pxa27x_resource_ssp3),
 774 };
 775 
 776 static struct resource pxa27x_resource_pwm0[] = {
 777         [0] = {
 778                 .start  = 0x40b00000,
 779                 .end    = 0x40b0001f,
 780                 .flags  = IORESOURCE_MEM,
 781         },
 782 };
 783 
 784 struct platform_device pxa27x_device_pwm0 = {
 785         .name           = "pxa27x-pwm",
 786         .id             = 0,
 787         .resource       = pxa27x_resource_pwm0,
 788         .num_resources  = ARRAY_SIZE(pxa27x_resource_pwm0),
 789 };
 790 
 791 static struct resource pxa27x_resource_pwm1[] = {
 792         [0] = {
 793                 .start  = 0x40c00000,
 794                 .end    = 0x40c0001f,
 795                 .flags  = IORESOURCE_MEM,
 796         },
 797 };
 798 
 799 struct platform_device pxa27x_device_pwm1 = {
 800         .name           = "pxa27x-pwm",
 801         .id             = 1,
 802         .resource       = pxa27x_resource_pwm1,
 803         .num_resources  = ARRAY_SIZE(pxa27x_resource_pwm1),
 804 };
 805 #endif /* CONFIG_PXA27x || CONFIG_PXA3xx */
 806 
 807 #ifdef CONFIG_PXA3xx
 808 static struct resource pxa3xx_resources_mci2[] = {
 809         [0] = {
 810                 .start  = 0x42000000,
 811                 .end    = 0x42000fff,
 812                 .flags  = IORESOURCE_MEM,
 813         },
 814         [1] = {
 815                 .start  = IRQ_MMC2,
 816                 .end    = IRQ_MMC2,
 817                 .flags  = IORESOURCE_IRQ,
 818         },
 819 };
 820 
 821 struct platform_device pxa3xx_device_mci2 = {
 822         .name           = "pxa2xx-mci",
 823         .id             = 1,
 824         .dev            = {
 825                 .dma_mask = &pxamci_dmamask,
 826                 .coherent_dma_mask =    0xffffffff,
 827         },
 828         .num_resources  = ARRAY_SIZE(pxa3xx_resources_mci2),
 829         .resource       = pxa3xx_resources_mci2,
 830 };
 831 
 832 void __init pxa3xx_set_mci2_info(struct pxamci_platform_data *info)
 833 {
 834         pxa_register_device(&pxa3xx_device_mci2, info);
 835 }
 836 
 837 static struct resource pxa3xx_resources_mci3[] = {
 838         [0] = {
 839                 .start  = 0x42500000,
 840                 .end    = 0x42500fff,
 841                 .flags  = IORESOURCE_MEM,
 842         },
 843         [1] = {
 844                 .start  = IRQ_MMC3,
 845                 .end    = IRQ_MMC3,
 846                 .flags  = IORESOURCE_IRQ,
 847         },
 848 };
 849 
 850 struct platform_device pxa3xx_device_mci3 = {
 851         .name           = "pxa2xx-mci",
 852         .id             = 2,
 853         .dev            = {
 854                 .dma_mask = &pxamci_dmamask,
 855                 .coherent_dma_mask = 0xffffffff,
 856         },
 857         .num_resources  = ARRAY_SIZE(pxa3xx_resources_mci3),
 858         .resource       = pxa3xx_resources_mci3,
 859 };
 860 
 861 void __init pxa3xx_set_mci3_info(struct pxamci_platform_data *info)
 862 {
 863         pxa_register_device(&pxa3xx_device_mci3, info);
 864 }
 865 
 866 static struct resource pxa3xx_resources_gcu[] = {
 867         {
 868                 .start  = 0x54000000,
 869                 .end    = 0x54000fff,
 870                 .flags  = IORESOURCE_MEM,
 871         },
 872         {
 873                 .start  = IRQ_GCU,
 874                 .end    = IRQ_GCU,
 875                 .flags  = IORESOURCE_IRQ,
 876         },
 877 };
 878 
 879 static u64 pxa3xx_gcu_dmamask = DMA_BIT_MASK(32);
 880 
 881 struct platform_device pxa3xx_device_gcu = {
 882         .name           = "pxa3xx-gcu",
 883         .id             = -1,
 884         .num_resources  = ARRAY_SIZE(pxa3xx_resources_gcu),
 885         .resource       = pxa3xx_resources_gcu,
 886         .dev            = {
 887                 .dma_mask = &pxa3xx_gcu_dmamask,
 888                 .coherent_dma_mask = 0xffffffff,
 889         },
 890 };
 891 
 892 #endif /* CONFIG_PXA3xx */
 893 
 894 #if defined(CONFIG_PXA3xx)
 895 static struct resource pxa3xx_resources_i2c_power[] = {
 896         {
 897                 .start  = 0x40f500c0,
 898                 .end    = 0x40f500d3,
 899                 .flags  = IORESOURCE_MEM,
 900         }, {
 901                 .start  = IRQ_PWRI2C,
 902                 .end    = IRQ_PWRI2C,
 903                 .flags  = IORESOURCE_IRQ,
 904         },
 905 };
 906 
 907 struct platform_device pxa3xx_device_i2c_power = {
 908         .name           = "pxa3xx-pwri2c",
 909         .id             = 1,
 910         .resource       = pxa3xx_resources_i2c_power,
 911         .num_resources  = ARRAY_SIZE(pxa3xx_resources_i2c_power),
 912 };
 913 
 914 static struct resource pxa3xx_resources_nand[] = {
 915         [0] = {
 916                 .start  = 0x43100000,
 917                 .end    = 0x43100053,
 918                 .flags  = IORESOURCE_MEM,
 919         },
 920         [1] = {
 921                 .start  = IRQ_NAND,
 922                 .end    = IRQ_NAND,
 923                 .flags  = IORESOURCE_IRQ,
 924         },
 925 };
 926 
 927 static u64 pxa3xx_nand_dma_mask = DMA_BIT_MASK(32);
 928 
 929 struct platform_device pxa3xx_device_nand = {
 930         .name           = "pxa3xx-nand",
 931         .id             = -1,
 932         .dev            = {
 933                 .dma_mask = &pxa3xx_nand_dma_mask,
 934                 .coherent_dma_mask = DMA_BIT_MASK(32),
 935         },
 936         .num_resources  = ARRAY_SIZE(pxa3xx_resources_nand),
 937         .resource       = pxa3xx_resources_nand,
 938 };
 939 
 940 void __init pxa3xx_set_nand_info(struct pxa3xx_nand_platform_data *info)
 941 {
 942         pxa_register_device(&pxa3xx_device_nand, info);
 943 }
 944 
 945 static u64 pxa3xx_ssp4_dma_mask = DMA_BIT_MASK(32);
 946 
 947 static struct resource pxa3xx_resource_ssp4[] = {
 948         [0] = {
 949                 .start  = 0x41a00000,
 950                 .end    = 0x41a0003f,
 951                 .flags  = IORESOURCE_MEM,
 952         },
 953         [1] = {
 954                 .start  = IRQ_SSP4,
 955                 .end    = IRQ_SSP4,
 956                 .flags  = IORESOURCE_IRQ,
 957         },
 958 };
 959 
 960 /*
 961  * PXA3xx SSP is basically equivalent to PXA27x.
 962  * However, we need to register the device by the correct name in order to
 963  * make the driver set the correct internal type, hence we provide specific
 964  * platform_devices for each of them.
 965  */
 966 struct platform_device pxa3xx_device_ssp1 = {
 967         .name           = "pxa3xx-ssp",
 968         .id             = 0,
 969         .dev            = {
 970                 .dma_mask = &pxa27x_ssp1_dma_mask,
 971                 .coherent_dma_mask = DMA_BIT_MASK(32),
 972         },
 973         .resource       = pxa27x_resource_ssp1,
 974         .num_resources  = ARRAY_SIZE(pxa27x_resource_ssp1),
 975 };
 976 
 977 struct platform_device pxa3xx_device_ssp2 = {
 978         .name           = "pxa3xx-ssp",
 979         .id             = 1,
 980         .dev            = {
 981                 .dma_mask = &pxa27x_ssp2_dma_mask,
 982                 .coherent_dma_mask = DMA_BIT_MASK(32),
 983         },
 984         .resource       = pxa27x_resource_ssp2,
 985         .num_resources  = ARRAY_SIZE(pxa27x_resource_ssp2),
 986 };
 987 
 988 struct platform_device pxa3xx_device_ssp3 = {
 989         .name           = "pxa3xx-ssp",
 990         .id             = 2,
 991         .dev            = {
 992                 .dma_mask = &pxa27x_ssp3_dma_mask,
 993                 .coherent_dma_mask = DMA_BIT_MASK(32),
 994         },
 995         .resource       = pxa27x_resource_ssp3,
 996         .num_resources  = ARRAY_SIZE(pxa27x_resource_ssp3),
 997 };
 998 
 999 struct platform_device pxa3xx_device_ssp4 = {
1000         .name           = "pxa3xx-ssp",
1001         .id             = 3,
1002         .dev            = {
1003                 .dma_mask = &pxa3xx_ssp4_dma_mask,
1004                 .coherent_dma_mask = DMA_BIT_MASK(32),
1005         },
1006         .resource       = pxa3xx_resource_ssp4,
1007         .num_resources  = ARRAY_SIZE(pxa3xx_resource_ssp4),
1008 };
1009 #endif /* CONFIG_PXA3xx */
1010 
1011 struct resource pxa_resource_gpio[] = {
1012         {
1013                 .start  = 0x40e00000,
1014                 .end    = 0x40e0ffff,
1015                 .flags  = IORESOURCE_MEM,
1016         }, {
1017                 .start  = IRQ_GPIO0,
1018                 .end    = IRQ_GPIO0,
1019                 .name   = "gpio0",
1020                 .flags  = IORESOURCE_IRQ,
1021         }, {
1022                 .start  = IRQ_GPIO1,
1023                 .end    = IRQ_GPIO1,
1024                 .name   = "gpio1",
1025                 .flags  = IORESOURCE_IRQ,
1026         }, {
1027                 .start  = IRQ_GPIO_2_x,
1028                 .end    = IRQ_GPIO_2_x,
1029                 .name   = "gpio_mux",
1030                 .flags  = IORESOURCE_IRQ,
1031         },
1032 };
1033 
1034 struct platform_device pxa25x_device_gpio = {
1035 #ifdef CONFIG_CPU_PXA26x
1036         .name           = "pxa26x-gpio",
1037 #else
1038         .name           = "pxa25x-gpio",
1039 #endif
1040         .id             = -1,
1041         .num_resources  = ARRAY_SIZE(pxa_resource_gpio),
1042         .resource       = pxa_resource_gpio,
1043 };
1044 
1045 struct platform_device pxa27x_device_gpio = {
1046         .name           = "pxa27x-gpio",
1047         .id             = -1,
1048         .num_resources  = ARRAY_SIZE(pxa_resource_gpio),
1049         .resource       = pxa_resource_gpio,
1050 };
1051 
1052 struct platform_device pxa3xx_device_gpio = {
1053         .name           = "pxa3xx-gpio",
1054         .id             = -1,
1055         .num_resources  = ARRAY_SIZE(pxa_resource_gpio),
1056         .resource       = pxa_resource_gpio,
1057 };
1058 
1059 struct platform_device pxa93x_device_gpio = {
1060         .name           = "pxa93x-gpio",
1061         .id             = -1,
1062         .num_resources  = ARRAY_SIZE(pxa_resource_gpio),
1063         .resource       = pxa_resource_gpio,
1064 };
1065 
1066 /* pxa2xx-spi platform-device ID equals respective SSP platform-device ID + 1.
1067  * See comment in arch/arm/mach-pxa/ssp.c::ssp_probe() */
1068 void __init pxa2xx_set_spi_info(unsigned id, struct pxa2xx_spi_controller *info)
1069 {
1070         struct platform_device *pd;
1071 
1072         pd = platform_device_alloc("pxa2xx-spi", id);
1073         if (pd == NULL) {
1074                 printk(KERN_ERR "pxa2xx-spi: failed to allocate device id %d\n",
1075                        id);
1076                 return;
1077         }
1078 
1079         pd->dev.platform_data = info;
1080         platform_device_add(pd);
1081 }
1082 
1083 static struct resource pxa_dma_resource[] = {
1084         [0] = {
1085                 .start  = 0x40000000,
1086                 .end    = 0x4000ffff,
1087                 .flags  = IORESOURCE_MEM,
1088         },
1089         [1] = {
1090                 .start  = IRQ_DMA,
1091                 .end    = IRQ_DMA,
1092                 .flags  = IORESOURCE_IRQ,
1093         },
1094 };
1095 
1096 static u64 pxadma_dmamask = 0xffffffffUL;
1097 
1098 static struct platform_device pxa2xx_pxa_dma = {
1099         .name           = "pxa-dma",
1100         .id             = 0,
1101         .dev            = {
1102                 .dma_mask = &pxadma_dmamask,
1103                 .coherent_dma_mask = 0xffffffff,
1104         },
1105         .num_resources  = ARRAY_SIZE(pxa_dma_resource),
1106         .resource       = pxa_dma_resource,
1107 };
1108 
1109 void __init pxa2xx_set_dmac_info(struct mmp_dma_platdata *dma_pdata)
1110 {
1111         pxa_register_device(&pxa2xx_pxa_dma, dma_pdata);
1112 }

/* [<][>][^][v][top][bottom][index][help] */