Path: blob/master/arch/sh/boards/board-edosk7760.c
10817 views
/*1* Renesas Europe EDOSK7760 Board Support2*3* Copyright (C) 2008 SPES Societa' Progettazione Elettronica e Software Ltd.4* Author: Luca Santini <[email protected]>5*6* This program is free software; you can redistribute it and/or modify7* it under the terms of the GNU General Public License as published by8* the Free Software Foundation; either version 2 of the License, or9* (at your option) any later version.10*11* This program is distributed in the hope that it will be useful,12* but WITHOUT ANY WARRANTY; without even the implied warranty of13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the14* GNU General Public License for more details.15*16* You should have received a copy of the GNU General Public License17* along with this program; if not, write to the Free Software18* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.19*/20#include <linux/init.h>21#include <linux/types.h>22#include <linux/platform_device.h>23#include <linux/smc91x.h>24#include <linux/interrupt.h>25#include <linux/i2c.h>26#include <linux/mtd/physmap.h>27#include <asm/machvec.h>28#include <asm/io.h>29#include <asm/addrspace.h>30#include <asm/delay.h>31#include <asm/i2c-sh7760.h>32#include <asm/sizes.h>3334/* Bus state controller registers for CS4 area */35#define BSC_CS4BCR 0xA4FD001036#define BSC_CS4WCR 0xA4FD00303738#define SMC_IOBASE 0xA200000039#define SMC_IO_OFFSET 0x30040#define SMC_IOADDR (SMC_IOBASE + SMC_IO_OFFSET)4142#define ETHERNET_IRQ 54344/* NOR flash */45static struct mtd_partition edosk7760_nor_flash_partitions[] = {46{47.name = "bootloader",48.offset = 0,49.size = SZ_256K,50.mask_flags = MTD_WRITEABLE, /* Read-only */51}, {52.name = "kernel",53.offset = MTDPART_OFS_APPEND,54.size = SZ_2M,55}, {56.name = "fs",57.offset = MTDPART_OFS_APPEND,58.size = (26 << 20),59}, {60.name = "other",61.offset = MTDPART_OFS_APPEND,62.size = MTDPART_SIZ_FULL,63},64};6566static struct physmap_flash_data edosk7760_nor_flash_data = {67.width = 4,68.parts = edosk7760_nor_flash_partitions,69.nr_parts = ARRAY_SIZE(edosk7760_nor_flash_partitions),70};7172static struct resource edosk7760_nor_flash_resources[] = {73[0] = {74.name = "NOR Flash",75.start = 0x00000000,76.end = 0x00000000 + SZ_32M - 1,77.flags = IORESOURCE_MEM,78}79};8081static struct platform_device edosk7760_nor_flash_device = {82.name = "physmap-flash",83.resource = edosk7760_nor_flash_resources,84.num_resources = ARRAY_SIZE(edosk7760_nor_flash_resources),85.dev = {86.platform_data = &edosk7760_nor_flash_data,87},88};8990/* i2c initialization functions */91static struct sh7760_i2c_platdata i2c_pd = {92.speed_khz = 400,93};9495static struct resource sh7760_i2c1_res[] = {96{97.start = SH7760_I2C1_MMIO,98.end = SH7760_I2C1_MMIOEND,99.flags = IORESOURCE_MEM,100},{101.start = SH7760_I2C1_IRQ,102.end = SH7760_I2C1_IRQ,103.flags = IORESOURCE_IRQ,104},105};106107static struct platform_device sh7760_i2c1_dev = {108.dev = {109.platform_data = &i2c_pd,110},111112.name = SH7760_I2C_DEVNAME,113.id = 1,114.resource = sh7760_i2c1_res,115.num_resources = ARRAY_SIZE(sh7760_i2c1_res),116};117118static struct resource sh7760_i2c0_res[] = {119{120.start = SH7760_I2C0_MMIO,121.end = SH7760_I2C0_MMIOEND,122.flags = IORESOURCE_MEM,123}, {124.start = SH7760_I2C0_IRQ,125.end = SH7760_I2C0_IRQ,126.flags = IORESOURCE_IRQ,127},128};129130static struct platform_device sh7760_i2c0_dev = {131.dev = {132.platform_data = &i2c_pd,133},134.name = SH7760_I2C_DEVNAME,135.id = 0,136.resource = sh7760_i2c0_res,137.num_resources = ARRAY_SIZE(sh7760_i2c0_res),138};139140/* eth initialization functions */141static struct smc91x_platdata smc91x_info = {142.flags = SMC91X_USE_16BIT | SMC91X_IO_SHIFT_1 | IORESOURCE_IRQ_LOWLEVEL,143};144145static struct resource smc91x_res[] = {146[0] = {147.start = SMC_IOADDR,148.end = SMC_IOADDR + SZ_32 - 1,149.flags = IORESOURCE_MEM,150},151[1] = {152.start = ETHERNET_IRQ,153.end = ETHERNET_IRQ,154.flags = IORESOURCE_IRQ ,155}156};157158static struct platform_device smc91x_dev = {159.name = "smc91x",160.id = -1,161.num_resources = ARRAY_SIZE(smc91x_res),162.resource = smc91x_res,163164.dev = {165.platform_data = &smc91x_info,166},167};168169/* platform init code */170static struct platform_device *edosk7760_devices[] __initdata = {171&smc91x_dev,172&edosk7760_nor_flash_device,173&sh7760_i2c0_dev,174&sh7760_i2c1_dev,175};176177static int __init init_edosk7760_devices(void)178{179plat_irq_setup_pins(IRQ_MODE_IRQ);180181return platform_add_devices(edosk7760_devices,182ARRAY_SIZE(edosk7760_devices));183}184device_initcall(init_edosk7760_devices);185186/*187* The Machine Vector188*/189struct sh_machine_vector mv_edosk7760 __initmv = {190.mv_name = "EDOSK7760",191.mv_nr_irqs = 128,192};193194195