mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
178 lines
3.8 KiB
178 lines
3.8 KiB
// SPDX-License-Identifier: GPL-2.0+ |
|
/* |
|
* Renesas Europe EDOSK7760 Board Support |
|
* |
|
* Copyright (C) 2008 SPES Societa' Progettazione Elettronica e Software Ltd. |
|
* Author: Luca Santini <[email protected]> |
|
*/ |
|
#include <linux/init.h> |
|
#include <linux/types.h> |
|
#include <linux/platform_device.h> |
|
#include <linux/smc91x.h> |
|
#include <linux/interrupt.h> |
|
#include <linux/sh_intc.h> |
|
#include <linux/i2c.h> |
|
#include <linux/mtd/physmap.h> |
|
#include <asm/machvec.h> |
|
#include <asm/io.h> |
|
#include <asm/addrspace.h> |
|
#include <asm/delay.h> |
|
#include <asm/i2c-sh7760.h> |
|
#include <linux/sizes.h> |
|
|
|
/* Bus state controller registers for CS4 area */ |
|
#define BSC_CS4BCR 0xA4FD0010 |
|
#define BSC_CS4WCR 0xA4FD0030 |
|
|
|
#define SMC_IOBASE 0xA2000000 |
|
#define SMC_IO_OFFSET 0x300 |
|
#define SMC_IOADDR (SMC_IOBASE + SMC_IO_OFFSET) |
|
|
|
/* NOR flash */ |
|
static struct mtd_partition edosk7760_nor_flash_partitions[] = { |
|
{ |
|
.name = "bootloader", |
|
.offset = 0, |
|
.size = SZ_256K, |
|
.mask_flags = MTD_WRITEABLE, /* Read-only */ |
|
}, { |
|
.name = "kernel", |
|
.offset = MTDPART_OFS_APPEND, |
|
.size = SZ_2M, |
|
}, { |
|
.name = "fs", |
|
.offset = MTDPART_OFS_APPEND, |
|
.size = (26 << 20), |
|
}, { |
|
.name = "other", |
|
.offset = MTDPART_OFS_APPEND, |
|
.size = MTDPART_SIZ_FULL, |
|
}, |
|
}; |
|
|
|
static struct physmap_flash_data edosk7760_nor_flash_data = { |
|
.width = 4, |
|
.parts = edosk7760_nor_flash_partitions, |
|
.nr_parts = ARRAY_SIZE(edosk7760_nor_flash_partitions), |
|
}; |
|
|
|
static struct resource edosk7760_nor_flash_resources[] = { |
|
[0] = { |
|
.name = "NOR Flash", |
|
.start = 0x00000000, |
|
.end = 0x00000000 + SZ_32M - 1, |
|
.flags = IORESOURCE_MEM, |
|
} |
|
}; |
|
|
|
static struct platform_device edosk7760_nor_flash_device = { |
|
.name = "physmap-flash", |
|
.resource = edosk7760_nor_flash_resources, |
|
.num_resources = ARRAY_SIZE(edosk7760_nor_flash_resources), |
|
.dev = { |
|
.platform_data = &edosk7760_nor_flash_data, |
|
}, |
|
}; |
|
|
|
/* i2c initialization functions */ |
|
static struct sh7760_i2c_platdata i2c_pd = { |
|
.speed_khz = 400, |
|
}; |
|
|
|
static struct resource sh7760_i2c1_res[] = { |
|
{ |
|
.start = SH7760_I2C1_MMIO, |
|
.end = SH7760_I2C1_MMIOEND, |
|
.flags = IORESOURCE_MEM, |
|
},{ |
|
.start = evt2irq(0x9e0), |
|
.end = evt2irq(0x9e0), |
|
.flags = IORESOURCE_IRQ, |
|
}, |
|
}; |
|
|
|
static struct platform_device sh7760_i2c1_dev = { |
|
.dev = { |
|
.platform_data = &i2c_pd, |
|
}, |
|
|
|
.name = SH7760_I2C_DEVNAME, |
|
.id = 1, |
|
.resource = sh7760_i2c1_res, |
|
.num_resources = ARRAY_SIZE(sh7760_i2c1_res), |
|
}; |
|
|
|
static struct resource sh7760_i2c0_res[] = { |
|
{ |
|
.start = SH7760_I2C0_MMIO, |
|
.end = SH7760_I2C0_MMIOEND, |
|
.flags = IORESOURCE_MEM, |
|
}, { |
|
.start = evt2irq(0x9c0), |
|
.end = evt2irq(0x9c0), |
|
.flags = IORESOURCE_IRQ, |
|
}, |
|
}; |
|
|
|
static struct platform_device sh7760_i2c0_dev = { |
|
.dev = { |
|
.platform_data = &i2c_pd, |
|
}, |
|
.name = SH7760_I2C_DEVNAME, |
|
.id = 0, |
|
.resource = sh7760_i2c0_res, |
|
.num_resources = ARRAY_SIZE(sh7760_i2c0_res), |
|
}; |
|
|
|
/* eth initialization functions */ |
|
static struct smc91x_platdata smc91x_info = { |
|
.flags = SMC91X_USE_16BIT | SMC91X_IO_SHIFT_1 | IORESOURCE_IRQ_LOWLEVEL, |
|
}; |
|
|
|
static struct resource smc91x_res[] = { |
|
[0] = { |
|
.start = SMC_IOADDR, |
|
.end = SMC_IOADDR + SZ_32 - 1, |
|
.flags = IORESOURCE_MEM, |
|
}, |
|
[1] = { |
|
.start = evt2irq(0x2a0), |
|
.end = evt2irq(0x2a0), |
|
.flags = IORESOURCE_IRQ , |
|
} |
|
}; |
|
|
|
static struct platform_device smc91x_dev = { |
|
.name = "smc91x", |
|
.id = -1, |
|
.num_resources = ARRAY_SIZE(smc91x_res), |
|
.resource = smc91x_res, |
|
|
|
.dev = { |
|
.platform_data = &smc91x_info, |
|
}, |
|
}; |
|
|
|
/* platform init code */ |
|
static struct platform_device *edosk7760_devices[] __initdata = { |
|
&smc91x_dev, |
|
&edosk7760_nor_flash_device, |
|
&sh7760_i2c0_dev, |
|
&sh7760_i2c1_dev, |
|
}; |
|
|
|
static int __init init_edosk7760_devices(void) |
|
{ |
|
plat_irq_setup_pins(IRQ_MODE_IRQ); |
|
|
|
return platform_add_devices(edosk7760_devices, |
|
ARRAY_SIZE(edosk7760_devices)); |
|
} |
|
device_initcall(init_edosk7760_devices); |
|
|
|
/* |
|
* The Machine Vector |
|
*/ |
|
struct sh_machine_vector mv_edosk7760 __initmv = { |
|
.mv_name = "EDOSK7760", |
|
};
|
|
|