| /* | 
 |  * Freescale MPC52xx device descriptions | 
 |  * | 
 |  * | 
 |  * Maintainer : Sylvain Munaut <tnt@246tNt.com> | 
 |  * | 
 |  * Copyright (C) 2005 Sylvain Munaut <tnt@246tNt.com> | 
 |  * | 
 |  * This file is licensed under the terms of the GNU General Public License | 
 |  * version 2. This program is licensed "as is" without any warranty of any | 
 |  * kind, whether express or implied. | 
 |  */ | 
 |  | 
 | #include <linux/fsl_devices.h> | 
 | #include <linux/resource.h> | 
 | #include <linux/platform_device.h> | 
 | #include <asm/mpc52xx.h> | 
 | #include <asm/ppc_sys.h> | 
 |  | 
 |  | 
 | static u64 mpc52xx_dma_mask = 0xffffffffULL; | 
 |  | 
 | static struct fsl_i2c_platform_data mpc52xx_fsl_i2c_pdata = { | 
 | 	.device_flags = FSL_I2C_DEV_CLOCK_5200, | 
 | }; | 
 |  | 
 |  | 
 | /* We use relative offsets for IORESOURCE_MEM to be independent from the | 
 |  * MBAR location at compile time | 
 |  */ | 
 |  | 
 | /* TODO Add the BestComm initiator channel to the device definitions, | 
 |    possibly using IORESOURCE_DMA. But that's when BestComm is ready ... */ | 
 |  | 
 | struct platform_device ppc_sys_platform_devices[] = { | 
 | 	[MPC52xx_MSCAN1] = { | 
 | 		.name		= "mpc52xx-mscan", | 
 | 		.id		= 0, | 
 | 		.num_resources	= 2, | 
 | 		.resource = (struct resource[]) { | 
 | 			{ | 
 | 				.start	= 0x0900, | 
 | 				.end	= 0x097f, | 
 | 				.flags	= IORESOURCE_MEM, | 
 | 			}, | 
 | 			{ | 
 | 				.start	= MPC52xx_MSCAN1_IRQ, | 
 | 				.end	= MPC52xx_MSCAN1_IRQ, | 
 | 				.flags	= IORESOURCE_IRQ, | 
 | 			}, | 
 | 		}, | 
 | 	}, | 
 | 	[MPC52xx_MSCAN2] = { | 
 | 		.name		= "mpc52xx-mscan", | 
 | 		.id		= 1, | 
 | 		.num_resources	= 2, | 
 | 		.resource = (struct resource[]) { | 
 | 			{ | 
 | 				.start	= 0x0980, | 
 | 				.end	= 0x09ff, | 
 | 				.flags	= IORESOURCE_MEM, | 
 | 			}, | 
 | 			{ | 
 | 				.start	= MPC52xx_MSCAN2_IRQ, | 
 | 				.end	= MPC52xx_MSCAN2_IRQ, | 
 | 				.flags	= IORESOURCE_IRQ, | 
 | 			}, | 
 | 		}, | 
 | 	}, | 
 | 	[MPC52xx_SPI] = { | 
 | 		.name		= "mpc52xx-spi", | 
 | 		.id		= -1, | 
 | 		.num_resources	= 3, | 
 | 		.resource	= (struct resource[]) { | 
 | 			{ | 
 | 				.start	= 0x0f00, | 
 | 				.end	= 0x0f1f, | 
 | 				.flags	= IORESOURCE_MEM, | 
 | 			}, | 
 | 			{ | 
 | 				.name	= "modf", | 
 | 				.start	= MPC52xx_SPI_MODF_IRQ, | 
 | 				.end	= MPC52xx_SPI_MODF_IRQ, | 
 | 				.flags	= IORESOURCE_IRQ, | 
 | 			}, | 
 | 			{ | 
 | 				.name	= "spif", | 
 | 				.start	= MPC52xx_SPI_SPIF_IRQ, | 
 | 				.end	= MPC52xx_SPI_SPIF_IRQ, | 
 | 				.flags	= IORESOURCE_IRQ, | 
 | 			}, | 
 | 		}, | 
 | 	}, | 
 | 	[MPC52xx_USB] = { | 
 | 		.name		= "ppc-soc-ohci", | 
 | 		.id		= -1, | 
 | 		.num_resources	= 2, | 
 | 		.dev.dma_mask	= &mpc52xx_dma_mask, | 
 | 		.dev.coherent_dma_mask = 0xffffffffULL, | 
 | 		.resource	= (struct resource[]) { | 
 | 			{ | 
 | 				.start	= 0x1000, | 
 | 				.end	= 0x10ff, | 
 | 				.flags	= IORESOURCE_MEM, | 
 | 			}, | 
 | 			{ | 
 | 				.start	= MPC52xx_USB_IRQ, | 
 | 				.end	= MPC52xx_USB_IRQ, | 
 | 				.flags	= IORESOURCE_IRQ, | 
 | 			}, | 
 | 		}, | 
 | 	}, | 
 | 	[MPC52xx_BDLC] = { | 
 | 		.name		= "mpc52xx-bdlc", | 
 | 		.id		= -1, | 
 | 		.num_resources	= 2, | 
 | 		.resource	= (struct resource[]) { | 
 | 			{ | 
 | 				.start	= 0x1300, | 
 | 				.end	= 0x130f, | 
 | 				.flags	= IORESOURCE_MEM, | 
 | 			}, | 
 | 			{ | 
 | 				.start	= MPC52xx_BDLC_IRQ, | 
 | 				.end	= MPC52xx_BDLC_IRQ, | 
 | 				.flags	= IORESOURCE_IRQ, | 
 | 			}, | 
 | 		}, | 
 | 	}, | 
 | 	[MPC52xx_PSC1] = { | 
 | 		.name		= "mpc52xx-psc", | 
 | 		.id		= 0, | 
 | 		.num_resources	= 2, | 
 | 		.resource	= (struct resource[]) { | 
 | 			{ | 
 | 				.start	= 0x2000, | 
 | 				.end	= 0x209f, | 
 | 				.flags	= IORESOURCE_MEM, | 
 | 			}, | 
 | 			{ | 
 | 				.start	= MPC52xx_PSC1_IRQ, | 
 | 				.end	= MPC52xx_PSC1_IRQ, | 
 | 				.flags	= IORESOURCE_IRQ, | 
 | 			}, | 
 | 		}, | 
 | 	}, | 
 | 	[MPC52xx_PSC2] = { | 
 | 		.name		= "mpc52xx-psc", | 
 | 		.id		= 1, | 
 | 		.num_resources	= 2, | 
 | 		.resource	= (struct resource[]) { | 
 | 			{ | 
 | 				.start	= 0x2200, | 
 | 				.end	= 0x229f, | 
 | 				.flags	= IORESOURCE_MEM, | 
 | 			}, | 
 | 			{ | 
 | 				.start	= MPC52xx_PSC2_IRQ, | 
 | 				.end	= MPC52xx_PSC2_IRQ, | 
 | 				.flags	= IORESOURCE_IRQ, | 
 | 			}, | 
 | 		}, | 
 | 	}, | 
 | 	[MPC52xx_PSC3] = { | 
 | 		.name		= "mpc52xx-psc", | 
 | 		.id		= 2, | 
 | 		.num_resources	= 2, | 
 | 		.resource	= (struct resource[]) { | 
 | 			{ | 
 | 				.start	= 0x2400, | 
 | 				.end	= 0x249f, | 
 | 				.flags	= IORESOURCE_MEM, | 
 | 			}, | 
 | 			{ | 
 | 				.start	= MPC52xx_PSC3_IRQ, | 
 | 				.end	= MPC52xx_PSC3_IRQ, | 
 | 				.flags	= IORESOURCE_IRQ, | 
 | 			}, | 
 | 		}, | 
 | 	}, | 
 | 	[MPC52xx_PSC4] = { | 
 | 		.name		= "mpc52xx-psc", | 
 | 		.id		= 3, | 
 | 		.num_resources	= 2, | 
 | 		.resource	= (struct resource[]) { | 
 | 			{ | 
 | 				.start	= 0x2600, | 
 | 				.end	= 0x269f, | 
 | 				.flags	= IORESOURCE_MEM, | 
 | 			}, | 
 | 			{ | 
 | 				.start	= MPC52xx_PSC4_IRQ, | 
 | 				.end	= MPC52xx_PSC4_IRQ, | 
 | 				.flags	= IORESOURCE_IRQ, | 
 | 			}, | 
 | 		}, | 
 | 	}, | 
 | 	[MPC52xx_PSC5] = { | 
 | 		.name		= "mpc52xx-psc", | 
 | 		.id		= 4, | 
 | 		.num_resources	= 2, | 
 | 		.resource	= (struct resource[]) { | 
 | 			{ | 
 | 				.start	= 0x2800, | 
 | 				.end	= 0x289f, | 
 | 				.flags	= IORESOURCE_MEM, | 
 | 			}, | 
 | 			{ | 
 | 				.start	= MPC52xx_PSC5_IRQ, | 
 | 				.end	= MPC52xx_PSC5_IRQ, | 
 | 				.flags	= IORESOURCE_IRQ, | 
 | 			}, | 
 | 		}, | 
 | 	}, | 
 | 	[MPC52xx_PSC6] = { | 
 | 		.name		= "mpc52xx-psc", | 
 | 		.id		= 5, | 
 | 		.num_resources	= 2, | 
 | 		.resource	= (struct resource[]) { | 
 | 			{ | 
 | 				.start	= 0x2c00, | 
 | 				.end	= 0x2c9f, | 
 | 				.flags	= IORESOURCE_MEM, | 
 | 			}, | 
 | 			{ | 
 | 				.start	= MPC52xx_PSC6_IRQ, | 
 | 				.end	= MPC52xx_PSC6_IRQ, | 
 | 				.flags	= IORESOURCE_IRQ, | 
 | 			}, | 
 | 		}, | 
 | 	}, | 
 | 	[MPC52xx_FEC] = { | 
 | 		.name		= "mpc52xx-fec", | 
 | 		.id		= -1, | 
 | 		.num_resources	= 2, | 
 | 		.resource	= (struct resource[]) { | 
 | 			{ | 
 | 				.start	= 0x3000, | 
 | 				.end	= 0x33ff, | 
 | 				.flags	= IORESOURCE_MEM, | 
 | 			}, | 
 | 			{ | 
 | 				.start	= MPC52xx_FEC_IRQ, | 
 | 				.end	= MPC52xx_FEC_IRQ, | 
 | 				.flags	= IORESOURCE_IRQ, | 
 | 			}, | 
 | 		}, | 
 | 	}, | 
 | 	[MPC52xx_ATA] = { | 
 | 		.name		= "mpc52xx-ata", | 
 | 		.id		= -1, | 
 | 		.num_resources	= 2, | 
 | 		.resource	= (struct resource[]) { | 
 | 			{ | 
 | 				.start	= 0x3a00, | 
 | 				.end	= 0x3aff, | 
 | 				.flags	= IORESOURCE_MEM, | 
 | 			}, | 
 | 			{ | 
 | 				.start	= MPC52xx_ATA_IRQ, | 
 | 				.end	= MPC52xx_ATA_IRQ, | 
 | 				.flags	= IORESOURCE_IRQ, | 
 | 			}, | 
 | 		}, | 
 | 	}, | 
 | 	[MPC52xx_I2C1] = { | 
 | 		.name		= "fsl-i2c", | 
 | 		.id		= 0, | 
 | 		.dev.platform_data = &mpc52xx_fsl_i2c_pdata, | 
 | 		.num_resources	= 2, | 
 | 		.resource	= (struct resource[]) { | 
 | 			{ | 
 | 				.start	= 0x3d00, | 
 | 				.end	= 0x3d1f, | 
 | 				.flags	= IORESOURCE_MEM, | 
 | 			}, | 
 | 			{ | 
 | 				.start	= MPC52xx_I2C1_IRQ, | 
 | 				.end	= MPC52xx_I2C1_IRQ, | 
 | 				.flags	= IORESOURCE_IRQ, | 
 | 			}, | 
 | 		}, | 
 | 	}, | 
 | 	[MPC52xx_I2C2] = { | 
 | 		.name		= "fsl-i2c", | 
 | 		.id		= 1, | 
 | 		.dev.platform_data = &mpc52xx_fsl_i2c_pdata, | 
 | 		.num_resources	= 2, | 
 | 		.resource	= (struct resource[]) { | 
 | 			{ | 
 | 				.start	= 0x3d40, | 
 | 				.end	= 0x3d5f, | 
 | 				.flags	= IORESOURCE_MEM, | 
 | 			}, | 
 | 			{ | 
 | 				.start	= MPC52xx_I2C2_IRQ, | 
 | 				.end	= MPC52xx_I2C2_IRQ, | 
 | 				.flags	= IORESOURCE_IRQ, | 
 | 			}, | 
 | 		}, | 
 | 	}, | 
 | }; | 
 |  | 
 |  | 
 | static int __init mach_mpc52xx_fixup(struct platform_device *pdev) | 
 | { | 
 | 	ppc_sys_fixup_mem_resource(pdev, MPC52xx_MBAR); | 
 | 	return 0; | 
 | } | 
 |  | 
 | static int __init mach_mpc52xx_init(void) | 
 | { | 
 | 	ppc_sys_device_fixup = mach_mpc52xx_fixup; | 
 | 	return 0; | 
 | } | 
 |  | 
 | postcore_initcall(mach_mpc52xx_init); |