1*8f58de7cSeric miao #include <linux/module.h> 2*8f58de7cSeric miao #include <linux/kernel.h> 3*8f58de7cSeric miao #include <linux/init.h> 4*8f58de7cSeric miao #include <linux/platform_device.h> 5*8f58de7cSeric miao #include <linux/dma-mapping.h> 6*8f58de7cSeric miao 7*8f58de7cSeric miao #include <asm/arch/gpio.h> 8*8f58de7cSeric miao #include <asm/arch/udc.h> 9*8f58de7cSeric miao #include <asm/arch/pxafb.h> 10*8f58de7cSeric miao #include <asm/arch/mmc.h> 11*8f58de7cSeric miao #include <asm/arch/irda.h> 12*8f58de7cSeric miao #include <asm/arch/i2c.h> 13*8f58de7cSeric miao 14*8f58de7cSeric miao #include "devices.h" 15*8f58de7cSeric miao 16*8f58de7cSeric miao void __init pxa_register_device(struct platform_device *dev, void *data) 17*8f58de7cSeric miao { 18*8f58de7cSeric miao int ret; 19*8f58de7cSeric miao 20*8f58de7cSeric miao dev->dev.platform_data = data; 21*8f58de7cSeric miao 22*8f58de7cSeric miao ret = platform_device_register(dev); 23*8f58de7cSeric miao if (ret) 24*8f58de7cSeric miao dev_err(&dev->dev, "unable to register device: %d\n", ret); 25*8f58de7cSeric miao } 26*8f58de7cSeric miao 27*8f58de7cSeric miao static struct resource pxamci_resources[] = { 28*8f58de7cSeric miao [0] = { 29*8f58de7cSeric miao .start = 0x41100000, 30*8f58de7cSeric miao .end = 0x41100fff, 31*8f58de7cSeric miao .flags = IORESOURCE_MEM, 32*8f58de7cSeric miao }, 33*8f58de7cSeric miao [1] = { 34*8f58de7cSeric miao .start = IRQ_MMC, 35*8f58de7cSeric miao .end = IRQ_MMC, 36*8f58de7cSeric miao .flags = IORESOURCE_IRQ, 37*8f58de7cSeric miao }, 38*8f58de7cSeric miao [2] = { 39*8f58de7cSeric miao .start = 21, 40*8f58de7cSeric miao .end = 21, 41*8f58de7cSeric miao .flags = IORESOURCE_DMA, 42*8f58de7cSeric miao }, 43*8f58de7cSeric miao [3] = { 44*8f58de7cSeric miao .start = 22, 45*8f58de7cSeric miao .end = 22, 46*8f58de7cSeric miao .flags = IORESOURCE_DMA, 47*8f58de7cSeric miao }, 48*8f58de7cSeric miao }; 49*8f58de7cSeric miao 50*8f58de7cSeric miao static u64 pxamci_dmamask = 0xffffffffUL; 51*8f58de7cSeric miao 52*8f58de7cSeric miao struct platform_device pxa_device_mci = { 53*8f58de7cSeric miao .name = "pxa2xx-mci", 54*8f58de7cSeric miao .id = -1, 55*8f58de7cSeric miao .dev = { 56*8f58de7cSeric miao .dma_mask = &pxamci_dmamask, 57*8f58de7cSeric miao .coherent_dma_mask = 0xffffffff, 58*8f58de7cSeric miao }, 59*8f58de7cSeric miao .num_resources = ARRAY_SIZE(pxamci_resources), 60*8f58de7cSeric miao .resource = pxamci_resources, 61*8f58de7cSeric miao }; 62*8f58de7cSeric miao 63*8f58de7cSeric miao void __init pxa_set_mci_info(struct pxamci_platform_data *info) 64*8f58de7cSeric miao { 65*8f58de7cSeric miao pxa_register_device(&pxa_device_mci, info); 66*8f58de7cSeric miao } 67*8f58de7cSeric miao 68*8f58de7cSeric miao 69*8f58de7cSeric miao static struct pxa2xx_udc_mach_info pxa_udc_info; 70*8f58de7cSeric miao 71*8f58de7cSeric miao void __init pxa_set_udc_info(struct pxa2xx_udc_mach_info *info) 72*8f58de7cSeric miao { 73*8f58de7cSeric miao memcpy(&pxa_udc_info, info, sizeof *info); 74*8f58de7cSeric miao } 75*8f58de7cSeric miao 76*8f58de7cSeric miao static struct resource pxa2xx_udc_resources[] = { 77*8f58de7cSeric miao [0] = { 78*8f58de7cSeric miao .start = 0x40600000, 79*8f58de7cSeric miao .end = 0x4060ffff, 80*8f58de7cSeric miao .flags = IORESOURCE_MEM, 81*8f58de7cSeric miao }, 82*8f58de7cSeric miao [1] = { 83*8f58de7cSeric miao .start = IRQ_USB, 84*8f58de7cSeric miao .end = IRQ_USB, 85*8f58de7cSeric miao .flags = IORESOURCE_IRQ, 86*8f58de7cSeric miao }, 87*8f58de7cSeric miao }; 88*8f58de7cSeric miao 89*8f58de7cSeric miao static u64 udc_dma_mask = ~(u32)0; 90*8f58de7cSeric miao 91*8f58de7cSeric miao struct platform_device pxa_device_udc = { 92*8f58de7cSeric miao .name = "pxa2xx-udc", 93*8f58de7cSeric miao .id = -1, 94*8f58de7cSeric miao .resource = pxa2xx_udc_resources, 95*8f58de7cSeric miao .num_resources = ARRAY_SIZE(pxa2xx_udc_resources), 96*8f58de7cSeric miao .dev = { 97*8f58de7cSeric miao .platform_data = &pxa_udc_info, 98*8f58de7cSeric miao .dma_mask = &udc_dma_mask, 99*8f58de7cSeric miao } 100*8f58de7cSeric miao }; 101*8f58de7cSeric miao 102*8f58de7cSeric miao static struct resource pxafb_resources[] = { 103*8f58de7cSeric miao [0] = { 104*8f58de7cSeric miao .start = 0x44000000, 105*8f58de7cSeric miao .end = 0x4400ffff, 106*8f58de7cSeric miao .flags = IORESOURCE_MEM, 107*8f58de7cSeric miao }, 108*8f58de7cSeric miao [1] = { 109*8f58de7cSeric miao .start = IRQ_LCD, 110*8f58de7cSeric miao .end = IRQ_LCD, 111*8f58de7cSeric miao .flags = IORESOURCE_IRQ, 112*8f58de7cSeric miao }, 113*8f58de7cSeric miao }; 114*8f58de7cSeric miao 115*8f58de7cSeric miao static u64 fb_dma_mask = ~(u64)0; 116*8f58de7cSeric miao 117*8f58de7cSeric miao struct platform_device pxa_device_fb = { 118*8f58de7cSeric miao .name = "pxa2xx-fb", 119*8f58de7cSeric miao .id = -1, 120*8f58de7cSeric miao .dev = { 121*8f58de7cSeric miao .dma_mask = &fb_dma_mask, 122*8f58de7cSeric miao .coherent_dma_mask = 0xffffffff, 123*8f58de7cSeric miao }, 124*8f58de7cSeric miao .num_resources = ARRAY_SIZE(pxafb_resources), 125*8f58de7cSeric miao .resource = pxafb_resources, 126*8f58de7cSeric miao }; 127*8f58de7cSeric miao 128*8f58de7cSeric miao void __init set_pxa_fb_info(struct pxafb_mach_info *info) 129*8f58de7cSeric miao { 130*8f58de7cSeric miao pxa_register_device(&pxa_device_fb, info); 131*8f58de7cSeric miao } 132*8f58de7cSeric miao 133*8f58de7cSeric miao void __init set_pxa_fb_parent(struct device *parent_dev) 134*8f58de7cSeric miao { 135*8f58de7cSeric miao pxa_device_fb.dev.parent = parent_dev; 136*8f58de7cSeric miao } 137*8f58de7cSeric miao 138*8f58de7cSeric miao static struct resource pxa_resource_ffuart[] = { 139*8f58de7cSeric miao { 140*8f58de7cSeric miao .start = __PREG(FFUART), 141*8f58de7cSeric miao .end = __PREG(FFUART) + 35, 142*8f58de7cSeric miao .flags = IORESOURCE_MEM, 143*8f58de7cSeric miao }, { 144*8f58de7cSeric miao .start = IRQ_FFUART, 145*8f58de7cSeric miao .end = IRQ_FFUART, 146*8f58de7cSeric miao .flags = IORESOURCE_IRQ, 147*8f58de7cSeric miao } 148*8f58de7cSeric miao }; 149*8f58de7cSeric miao 150*8f58de7cSeric miao struct platform_device pxa_device_ffuart= { 151*8f58de7cSeric miao .name = "pxa2xx-uart", 152*8f58de7cSeric miao .id = 0, 153*8f58de7cSeric miao .resource = pxa_resource_ffuart, 154*8f58de7cSeric miao .num_resources = ARRAY_SIZE(pxa_resource_ffuart), 155*8f58de7cSeric miao }; 156*8f58de7cSeric miao 157*8f58de7cSeric miao static struct resource pxa_resource_btuart[] = { 158*8f58de7cSeric miao { 159*8f58de7cSeric miao .start = __PREG(BTUART), 160*8f58de7cSeric miao .end = __PREG(BTUART) + 35, 161*8f58de7cSeric miao .flags = IORESOURCE_MEM, 162*8f58de7cSeric miao }, { 163*8f58de7cSeric miao .start = IRQ_BTUART, 164*8f58de7cSeric miao .end = IRQ_BTUART, 165*8f58de7cSeric miao .flags = IORESOURCE_IRQ, 166*8f58de7cSeric miao } 167*8f58de7cSeric miao }; 168*8f58de7cSeric miao 169*8f58de7cSeric miao struct platform_device pxa_device_btuart = { 170*8f58de7cSeric miao .name = "pxa2xx-uart", 171*8f58de7cSeric miao .id = 1, 172*8f58de7cSeric miao .resource = pxa_resource_btuart, 173*8f58de7cSeric miao .num_resources = ARRAY_SIZE(pxa_resource_btuart), 174*8f58de7cSeric miao }; 175*8f58de7cSeric miao 176*8f58de7cSeric miao static struct resource pxa_resource_stuart[] = { 177*8f58de7cSeric miao { 178*8f58de7cSeric miao .start = __PREG(STUART), 179*8f58de7cSeric miao .end = __PREG(STUART) + 35, 180*8f58de7cSeric miao .flags = IORESOURCE_MEM, 181*8f58de7cSeric miao }, { 182*8f58de7cSeric miao .start = IRQ_STUART, 183*8f58de7cSeric miao .end = IRQ_STUART, 184*8f58de7cSeric miao .flags = IORESOURCE_IRQ, 185*8f58de7cSeric miao } 186*8f58de7cSeric miao }; 187*8f58de7cSeric miao 188*8f58de7cSeric miao struct platform_device pxa_device_stuart = { 189*8f58de7cSeric miao .name = "pxa2xx-uart", 190*8f58de7cSeric miao .id = 2, 191*8f58de7cSeric miao .resource = pxa_resource_stuart, 192*8f58de7cSeric miao .num_resources = ARRAY_SIZE(pxa_resource_stuart), 193*8f58de7cSeric miao }; 194*8f58de7cSeric miao 195*8f58de7cSeric miao static struct resource pxa_resource_hwuart[] = { 196*8f58de7cSeric miao { 197*8f58de7cSeric miao .start = __PREG(HWUART), 198*8f58de7cSeric miao .end = __PREG(HWUART) + 47, 199*8f58de7cSeric miao .flags = IORESOURCE_MEM, 200*8f58de7cSeric miao }, { 201*8f58de7cSeric miao .start = IRQ_HWUART, 202*8f58de7cSeric miao .end = IRQ_HWUART, 203*8f58de7cSeric miao .flags = IORESOURCE_IRQ, 204*8f58de7cSeric miao } 205*8f58de7cSeric miao }; 206*8f58de7cSeric miao 207*8f58de7cSeric miao struct platform_device pxa_device_hwuart = { 208*8f58de7cSeric miao .name = "pxa2xx-uart", 209*8f58de7cSeric miao .id = 3, 210*8f58de7cSeric miao .resource = pxa_resource_hwuart, 211*8f58de7cSeric miao .num_resources = ARRAY_SIZE(pxa_resource_hwuart), 212*8f58de7cSeric miao }; 213*8f58de7cSeric miao 214*8f58de7cSeric miao static struct resource pxai2c_resources[] = { 215*8f58de7cSeric miao { 216*8f58de7cSeric miao .start = 0x40301680, 217*8f58de7cSeric miao .end = 0x403016a3, 218*8f58de7cSeric miao .flags = IORESOURCE_MEM, 219*8f58de7cSeric miao }, { 220*8f58de7cSeric miao .start = IRQ_I2C, 221*8f58de7cSeric miao .end = IRQ_I2C, 222*8f58de7cSeric miao .flags = IORESOURCE_IRQ, 223*8f58de7cSeric miao }, 224*8f58de7cSeric miao }; 225*8f58de7cSeric miao 226*8f58de7cSeric miao struct platform_device pxa_device_i2c = { 227*8f58de7cSeric miao .name = "pxa2xx-i2c", 228*8f58de7cSeric miao .id = 0, 229*8f58de7cSeric miao .resource = pxai2c_resources, 230*8f58de7cSeric miao .num_resources = ARRAY_SIZE(pxai2c_resources), 231*8f58de7cSeric miao }; 232*8f58de7cSeric miao 233*8f58de7cSeric miao void __init pxa_set_i2c_info(struct i2c_pxa_platform_data *info) 234*8f58de7cSeric miao { 235*8f58de7cSeric miao pxa_register_device(&pxa_device_i2c, info); 236*8f58de7cSeric miao } 237*8f58de7cSeric miao 238*8f58de7cSeric miao static struct resource pxai2s_resources[] = { 239*8f58de7cSeric miao { 240*8f58de7cSeric miao .start = 0x40400000, 241*8f58de7cSeric miao .end = 0x40400083, 242*8f58de7cSeric miao .flags = IORESOURCE_MEM, 243*8f58de7cSeric miao }, { 244*8f58de7cSeric miao .start = IRQ_I2S, 245*8f58de7cSeric miao .end = IRQ_I2S, 246*8f58de7cSeric miao .flags = IORESOURCE_IRQ, 247*8f58de7cSeric miao }, 248*8f58de7cSeric miao }; 249*8f58de7cSeric miao 250*8f58de7cSeric miao struct platform_device pxa_device_i2s = { 251*8f58de7cSeric miao .name = "pxa2xx-i2s", 252*8f58de7cSeric miao .id = -1, 253*8f58de7cSeric miao .resource = pxai2s_resources, 254*8f58de7cSeric miao .num_resources = ARRAY_SIZE(pxai2s_resources), 255*8f58de7cSeric miao }; 256*8f58de7cSeric miao 257*8f58de7cSeric miao static u64 pxaficp_dmamask = ~(u32)0; 258*8f58de7cSeric miao 259*8f58de7cSeric miao struct platform_device pxa_device_ficp = { 260*8f58de7cSeric miao .name = "pxa2xx-ir", 261*8f58de7cSeric miao .id = -1, 262*8f58de7cSeric miao .dev = { 263*8f58de7cSeric miao .dma_mask = &pxaficp_dmamask, 264*8f58de7cSeric miao .coherent_dma_mask = 0xffffffff, 265*8f58de7cSeric miao }, 266*8f58de7cSeric miao }; 267*8f58de7cSeric miao 268*8f58de7cSeric miao void __init pxa_set_ficp_info(struct pxaficp_platform_data *info) 269*8f58de7cSeric miao { 270*8f58de7cSeric miao pxa_register_device(&pxa_device_ficp, info); 271*8f58de7cSeric miao } 272*8f58de7cSeric miao 273*8f58de7cSeric miao struct platform_device pxa_device_rtc = { 274*8f58de7cSeric miao .name = "sa1100-rtc", 275*8f58de7cSeric miao .id = -1, 276*8f58de7cSeric miao }; 277*8f58de7cSeric miao 278*8f58de7cSeric miao #ifdef CONFIG_PXA25x 279*8f58de7cSeric miao 280*8f58de7cSeric miao static u64 pxa25x_ssp_dma_mask = DMA_BIT_MASK(32); 281*8f58de7cSeric miao 282*8f58de7cSeric miao static struct resource pxa25x_resource_ssp[] = { 283*8f58de7cSeric miao [0] = { 284*8f58de7cSeric miao .start = 0x41000000, 285*8f58de7cSeric miao .end = 0x4100001f, 286*8f58de7cSeric miao .flags = IORESOURCE_MEM, 287*8f58de7cSeric miao }, 288*8f58de7cSeric miao [1] = { 289*8f58de7cSeric miao .start = IRQ_SSP, 290*8f58de7cSeric miao .end = IRQ_SSP, 291*8f58de7cSeric miao .flags = IORESOURCE_IRQ, 292*8f58de7cSeric miao }, 293*8f58de7cSeric miao [2] = { 294*8f58de7cSeric miao /* DRCMR for RX */ 295*8f58de7cSeric miao .start = 13, 296*8f58de7cSeric miao .end = 13, 297*8f58de7cSeric miao .flags = IORESOURCE_DMA, 298*8f58de7cSeric miao }, 299*8f58de7cSeric miao [3] = { 300*8f58de7cSeric miao /* DRCMR for TX */ 301*8f58de7cSeric miao .start = 14, 302*8f58de7cSeric miao .end = 14, 303*8f58de7cSeric miao .flags = IORESOURCE_DMA, 304*8f58de7cSeric miao }, 305*8f58de7cSeric miao }; 306*8f58de7cSeric miao 307*8f58de7cSeric miao struct platform_device pxa25x_device_ssp = { 308*8f58de7cSeric miao .name = "pxa25x-ssp", 309*8f58de7cSeric miao .id = 0, 310*8f58de7cSeric miao .dev = { 311*8f58de7cSeric miao .dma_mask = &pxa25x_ssp_dma_mask, 312*8f58de7cSeric miao .coherent_dma_mask = DMA_BIT_MASK(32), 313*8f58de7cSeric miao }, 314*8f58de7cSeric miao .resource = pxa25x_resource_ssp, 315*8f58de7cSeric miao .num_resources = ARRAY_SIZE(pxa25x_resource_ssp), 316*8f58de7cSeric miao }; 317*8f58de7cSeric miao 318*8f58de7cSeric miao static u64 pxa25x_nssp_dma_mask = DMA_BIT_MASK(32); 319*8f58de7cSeric miao 320*8f58de7cSeric miao static struct resource pxa25x_resource_nssp[] = { 321*8f58de7cSeric miao [0] = { 322*8f58de7cSeric miao .start = 0x41400000, 323*8f58de7cSeric miao .end = 0x4140002f, 324*8f58de7cSeric miao .flags = IORESOURCE_MEM, 325*8f58de7cSeric miao }, 326*8f58de7cSeric miao [1] = { 327*8f58de7cSeric miao .start = IRQ_NSSP, 328*8f58de7cSeric miao .end = IRQ_NSSP, 329*8f58de7cSeric miao .flags = IORESOURCE_IRQ, 330*8f58de7cSeric miao }, 331*8f58de7cSeric miao [2] = { 332*8f58de7cSeric miao /* DRCMR for RX */ 333*8f58de7cSeric miao .start = 15, 334*8f58de7cSeric miao .end = 15, 335*8f58de7cSeric miao .flags = IORESOURCE_DMA, 336*8f58de7cSeric miao }, 337*8f58de7cSeric miao [3] = { 338*8f58de7cSeric miao /* DRCMR for TX */ 339*8f58de7cSeric miao .start = 16, 340*8f58de7cSeric miao .end = 16, 341*8f58de7cSeric miao .flags = IORESOURCE_DMA, 342*8f58de7cSeric miao }, 343*8f58de7cSeric miao }; 344*8f58de7cSeric miao 345*8f58de7cSeric miao struct platform_device pxa25x_device_nssp = { 346*8f58de7cSeric miao .name = "pxa25x-nssp", 347*8f58de7cSeric miao .id = 1, 348*8f58de7cSeric miao .dev = { 349*8f58de7cSeric miao .dma_mask = &pxa25x_nssp_dma_mask, 350*8f58de7cSeric miao .coherent_dma_mask = DMA_BIT_MASK(32), 351*8f58de7cSeric miao }, 352*8f58de7cSeric miao .resource = pxa25x_resource_nssp, 353*8f58de7cSeric miao .num_resources = ARRAY_SIZE(pxa25x_resource_nssp), 354*8f58de7cSeric miao }; 355*8f58de7cSeric miao 356*8f58de7cSeric miao static u64 pxa25x_assp_dma_mask = DMA_BIT_MASK(32); 357*8f58de7cSeric miao 358*8f58de7cSeric miao static struct resource pxa25x_resource_assp[] = { 359*8f58de7cSeric miao [0] = { 360*8f58de7cSeric miao .start = 0x41500000, 361*8f58de7cSeric miao .end = 0x4150002f, 362*8f58de7cSeric miao .flags = IORESOURCE_MEM, 363*8f58de7cSeric miao }, 364*8f58de7cSeric miao [1] = { 365*8f58de7cSeric miao .start = IRQ_ASSP, 366*8f58de7cSeric miao .end = IRQ_ASSP, 367*8f58de7cSeric miao .flags = IORESOURCE_IRQ, 368*8f58de7cSeric miao }, 369*8f58de7cSeric miao [2] = { 370*8f58de7cSeric miao /* DRCMR for RX */ 371*8f58de7cSeric miao .start = 23, 372*8f58de7cSeric miao .end = 23, 373*8f58de7cSeric miao .flags = IORESOURCE_DMA, 374*8f58de7cSeric miao }, 375*8f58de7cSeric miao [3] = { 376*8f58de7cSeric miao /* DRCMR for TX */ 377*8f58de7cSeric miao .start = 24, 378*8f58de7cSeric miao .end = 24, 379*8f58de7cSeric miao .flags = IORESOURCE_DMA, 380*8f58de7cSeric miao }, 381*8f58de7cSeric miao }; 382*8f58de7cSeric miao 383*8f58de7cSeric miao struct platform_device pxa25x_device_assp = { 384*8f58de7cSeric miao /* ASSP is basically equivalent to NSSP */ 385*8f58de7cSeric miao .name = "pxa25x-nssp", 386*8f58de7cSeric miao .id = 2, 387*8f58de7cSeric miao .dev = { 388*8f58de7cSeric miao .dma_mask = &pxa25x_assp_dma_mask, 389*8f58de7cSeric miao .coherent_dma_mask = DMA_BIT_MASK(32), 390*8f58de7cSeric miao }, 391*8f58de7cSeric miao .resource = pxa25x_resource_assp, 392*8f58de7cSeric miao .num_resources = ARRAY_SIZE(pxa25x_resource_assp), 393*8f58de7cSeric miao }; 394*8f58de7cSeric miao #endif /* CONFIG_PXA25x */ 395*8f58de7cSeric miao 396*8f58de7cSeric miao #if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx) 397*8f58de7cSeric miao 398*8f58de7cSeric miao static u64 pxa27x_ssp1_dma_mask = DMA_BIT_MASK(32); 399*8f58de7cSeric miao 400*8f58de7cSeric miao static struct resource pxa27x_resource_ssp1[] = { 401*8f58de7cSeric miao [0] = { 402*8f58de7cSeric miao .start = 0x41000000, 403*8f58de7cSeric miao .end = 0x4100003f, 404*8f58de7cSeric miao .flags = IORESOURCE_MEM, 405*8f58de7cSeric miao }, 406*8f58de7cSeric miao [1] = { 407*8f58de7cSeric miao .start = IRQ_SSP, 408*8f58de7cSeric miao .end = IRQ_SSP, 409*8f58de7cSeric miao .flags = IORESOURCE_IRQ, 410*8f58de7cSeric miao }, 411*8f58de7cSeric miao [2] = { 412*8f58de7cSeric miao /* DRCMR for RX */ 413*8f58de7cSeric miao .start = 13, 414*8f58de7cSeric miao .end = 13, 415*8f58de7cSeric miao .flags = IORESOURCE_DMA, 416*8f58de7cSeric miao }, 417*8f58de7cSeric miao [3] = { 418*8f58de7cSeric miao /* DRCMR for TX */ 419*8f58de7cSeric miao .start = 14, 420*8f58de7cSeric miao .end = 14, 421*8f58de7cSeric miao .flags = IORESOURCE_DMA, 422*8f58de7cSeric miao }, 423*8f58de7cSeric miao }; 424*8f58de7cSeric miao 425*8f58de7cSeric miao struct platform_device pxa27x_device_ssp1 = { 426*8f58de7cSeric miao .name = "pxa27x-ssp", 427*8f58de7cSeric miao .id = 0, 428*8f58de7cSeric miao .dev = { 429*8f58de7cSeric miao .dma_mask = &pxa27x_ssp1_dma_mask, 430*8f58de7cSeric miao .coherent_dma_mask = DMA_BIT_MASK(32), 431*8f58de7cSeric miao }, 432*8f58de7cSeric miao .resource = pxa27x_resource_ssp1, 433*8f58de7cSeric miao .num_resources = ARRAY_SIZE(pxa27x_resource_ssp1), 434*8f58de7cSeric miao }; 435*8f58de7cSeric miao 436*8f58de7cSeric miao static u64 pxa27x_ssp2_dma_mask = DMA_BIT_MASK(32); 437*8f58de7cSeric miao 438*8f58de7cSeric miao static struct resource pxa27x_resource_ssp2[] = { 439*8f58de7cSeric miao [0] = { 440*8f58de7cSeric miao .start = 0x41700000, 441*8f58de7cSeric miao .end = 0x4170003f, 442*8f58de7cSeric miao .flags = IORESOURCE_MEM, 443*8f58de7cSeric miao }, 444*8f58de7cSeric miao [1] = { 445*8f58de7cSeric miao .start = IRQ_SSP2, 446*8f58de7cSeric miao .end = IRQ_SSP2, 447*8f58de7cSeric miao .flags = IORESOURCE_IRQ, 448*8f58de7cSeric miao }, 449*8f58de7cSeric miao [2] = { 450*8f58de7cSeric miao /* DRCMR for RX */ 451*8f58de7cSeric miao .start = 15, 452*8f58de7cSeric miao .end = 15, 453*8f58de7cSeric miao .flags = IORESOURCE_DMA, 454*8f58de7cSeric miao }, 455*8f58de7cSeric miao [3] = { 456*8f58de7cSeric miao /* DRCMR for TX */ 457*8f58de7cSeric miao .start = 16, 458*8f58de7cSeric miao .end = 16, 459*8f58de7cSeric miao .flags = IORESOURCE_DMA, 460*8f58de7cSeric miao }, 461*8f58de7cSeric miao }; 462*8f58de7cSeric miao 463*8f58de7cSeric miao struct platform_device pxa27x_device_ssp2 = { 464*8f58de7cSeric miao .name = "pxa27x-ssp", 465*8f58de7cSeric miao .id = 1, 466*8f58de7cSeric miao .dev = { 467*8f58de7cSeric miao .dma_mask = &pxa27x_ssp2_dma_mask, 468*8f58de7cSeric miao .coherent_dma_mask = DMA_BIT_MASK(32), 469*8f58de7cSeric miao }, 470*8f58de7cSeric miao .resource = pxa27x_resource_ssp2, 471*8f58de7cSeric miao .num_resources = ARRAY_SIZE(pxa27x_resource_ssp2), 472*8f58de7cSeric miao }; 473*8f58de7cSeric miao 474*8f58de7cSeric miao static u64 pxa27x_ssp3_dma_mask = DMA_BIT_MASK(32); 475*8f58de7cSeric miao 476*8f58de7cSeric miao static struct resource pxa27x_resource_ssp3[] = { 477*8f58de7cSeric miao [0] = { 478*8f58de7cSeric miao .start = 0x41900000, 479*8f58de7cSeric miao .end = 0x4190003f, 480*8f58de7cSeric miao .flags = IORESOURCE_MEM, 481*8f58de7cSeric miao }, 482*8f58de7cSeric miao [1] = { 483*8f58de7cSeric miao .start = IRQ_SSP3, 484*8f58de7cSeric miao .end = IRQ_SSP3, 485*8f58de7cSeric miao .flags = IORESOURCE_IRQ, 486*8f58de7cSeric miao }, 487*8f58de7cSeric miao [2] = { 488*8f58de7cSeric miao /* DRCMR for RX */ 489*8f58de7cSeric miao .start = 66, 490*8f58de7cSeric miao .end = 66, 491*8f58de7cSeric miao .flags = IORESOURCE_DMA, 492*8f58de7cSeric miao }, 493*8f58de7cSeric miao [3] = { 494*8f58de7cSeric miao /* DRCMR for TX */ 495*8f58de7cSeric miao .start = 67, 496*8f58de7cSeric miao .end = 67, 497*8f58de7cSeric miao .flags = IORESOURCE_DMA, 498*8f58de7cSeric miao }, 499*8f58de7cSeric miao }; 500*8f58de7cSeric miao 501*8f58de7cSeric miao struct platform_device pxa27x_device_ssp3 = { 502*8f58de7cSeric miao .name = "pxa27x-ssp", 503*8f58de7cSeric miao .id = 2, 504*8f58de7cSeric miao .dev = { 505*8f58de7cSeric miao .dma_mask = &pxa27x_ssp3_dma_mask, 506*8f58de7cSeric miao .coherent_dma_mask = DMA_BIT_MASK(32), 507*8f58de7cSeric miao }, 508*8f58de7cSeric miao .resource = pxa27x_resource_ssp3, 509*8f58de7cSeric miao .num_resources = ARRAY_SIZE(pxa27x_resource_ssp3), 510*8f58de7cSeric miao }; 511*8f58de7cSeric miao #endif /* CONFIG_PXA27x || CONFIG_PXA3xx */ 512*8f58de7cSeric miao 513*8f58de7cSeric miao #ifdef CONFIG_PXA3xx 514*8f58de7cSeric miao static u64 pxa3xx_ssp4_dma_mask = DMA_BIT_MASK(32); 515*8f58de7cSeric miao 516*8f58de7cSeric miao static struct resource pxa3xx_resource_ssp4[] = { 517*8f58de7cSeric miao [0] = { 518*8f58de7cSeric miao .start = 0x41a00000, 519*8f58de7cSeric miao .end = 0x41a0003f, 520*8f58de7cSeric miao .flags = IORESOURCE_MEM, 521*8f58de7cSeric miao }, 522*8f58de7cSeric miao [1] = { 523*8f58de7cSeric miao .start = IRQ_SSP4, 524*8f58de7cSeric miao .end = IRQ_SSP4, 525*8f58de7cSeric miao .flags = IORESOURCE_IRQ, 526*8f58de7cSeric miao }, 527*8f58de7cSeric miao [2] = { 528*8f58de7cSeric miao /* DRCMR for RX */ 529*8f58de7cSeric miao .start = 2, 530*8f58de7cSeric miao .end = 2, 531*8f58de7cSeric miao .flags = IORESOURCE_DMA, 532*8f58de7cSeric miao }, 533*8f58de7cSeric miao [3] = { 534*8f58de7cSeric miao /* DRCMR for TX */ 535*8f58de7cSeric miao .start = 3, 536*8f58de7cSeric miao .end = 3, 537*8f58de7cSeric miao .flags = IORESOURCE_DMA, 538*8f58de7cSeric miao }, 539*8f58de7cSeric miao }; 540*8f58de7cSeric miao 541*8f58de7cSeric miao struct platform_device pxa3xx_device_ssp4 = { 542*8f58de7cSeric miao /* PXA3xx SSP is basically equivalent to PXA27x */ 543*8f58de7cSeric miao .name = "pxa27x-ssp", 544*8f58de7cSeric miao .id = 3, 545*8f58de7cSeric miao .dev = { 546*8f58de7cSeric miao .dma_mask = &pxa3xx_ssp4_dma_mask, 547*8f58de7cSeric miao .coherent_dma_mask = DMA_BIT_MASK(32), 548*8f58de7cSeric miao }, 549*8f58de7cSeric miao .resource = pxa3xx_resource_ssp4, 550*8f58de7cSeric miao .num_resources = ARRAY_SIZE(pxa3xx_resource_ssp4), 551*8f58de7cSeric miao }; 552*8f58de7cSeric miao #endif /* CONFIG_PXA3xx */ 553