/*
* arch/ppc/syslib/mpc52xx_devices.c
*
* 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);