1 // SPDX-License-Identifier: GPL-2.0+
3 * Renesas Europe EDOSK7760 Board Support
5 * Copyright (C) 2008 SPES Societa' Progettazione Elettronica e Software Ltd.
6 * Author: Luca Santini <luca.santini@spesonline.com>
8 #include <linux/init.h>
9 #include <linux/types.h>
10 #include <linux/platform_device.h>
11 #include <linux/smc91x.h>
12 #include <linux/interrupt.h>
13 #include <linux/sh_intc.h>
14 #include <linux/i2c.h>
15 #include <linux/mtd/physmap.h>
16 #include <asm/machvec.h>
18 #include <asm/addrspace.h>
19 #include <asm/delay.h>
20 #include <asm/i2c-sh7760.h>
21 #include <linux/sizes.h>
23 /* Bus state controller registers for CS4 area */
24 #define BSC_CS4BCR 0xA4FD0010
25 #define BSC_CS4WCR 0xA4FD0030
27 #define SMC_IOBASE 0xA2000000
28 #define SMC_IO_OFFSET 0x300
29 #define SMC_IOADDR (SMC_IOBASE + SMC_IO_OFFSET)
32 static struct mtd_partition edosk7760_nor_flash_partitions
[] = {
37 .mask_flags
= MTD_WRITEABLE
, /* Read-only */
40 .offset
= MTDPART_OFS_APPEND
,
44 .offset
= MTDPART_OFS_APPEND
,
48 .offset
= MTDPART_OFS_APPEND
,
49 .size
= MTDPART_SIZ_FULL
,
53 static struct physmap_flash_data edosk7760_nor_flash_data
= {
55 .parts
= edosk7760_nor_flash_partitions
,
56 .nr_parts
= ARRAY_SIZE(edosk7760_nor_flash_partitions
),
59 static struct resource edosk7760_nor_flash_resources
[] = {
63 .end
= 0x00000000 + SZ_32M
- 1,
64 .flags
= IORESOURCE_MEM
,
68 static struct platform_device edosk7760_nor_flash_device
= {
69 .name
= "physmap-flash",
70 .resource
= edosk7760_nor_flash_resources
,
71 .num_resources
= ARRAY_SIZE(edosk7760_nor_flash_resources
),
73 .platform_data
= &edosk7760_nor_flash_data
,
77 /* i2c initialization functions */
78 static struct sh7760_i2c_platdata i2c_pd
= {
82 static struct resource sh7760_i2c1_res
[] = {
84 .start
= SH7760_I2C1_MMIO
,
85 .end
= SH7760_I2C1_MMIOEND
,
86 .flags
= IORESOURCE_MEM
,
88 .start
= evt2irq(0x9e0),
89 .end
= evt2irq(0x9e0),
90 .flags
= IORESOURCE_IRQ
,
94 static struct platform_device sh7760_i2c1_dev
= {
96 .platform_data
= &i2c_pd
,
99 .name
= SH7760_I2C_DEVNAME
,
101 .resource
= sh7760_i2c1_res
,
102 .num_resources
= ARRAY_SIZE(sh7760_i2c1_res
),
105 static struct resource sh7760_i2c0_res
[] = {
107 .start
= SH7760_I2C0_MMIO
,
108 .end
= SH7760_I2C0_MMIOEND
,
109 .flags
= IORESOURCE_MEM
,
111 .start
= evt2irq(0x9c0),
112 .end
= evt2irq(0x9c0),
113 .flags
= IORESOURCE_IRQ
,
117 static struct platform_device sh7760_i2c0_dev
= {
119 .platform_data
= &i2c_pd
,
121 .name
= SH7760_I2C_DEVNAME
,
123 .resource
= sh7760_i2c0_res
,
124 .num_resources
= ARRAY_SIZE(sh7760_i2c0_res
),
127 /* eth initialization functions */
128 static struct smc91x_platdata smc91x_info
= {
129 .flags
= SMC91X_USE_16BIT
| SMC91X_IO_SHIFT_1
| IORESOURCE_IRQ_LOWLEVEL
,
132 static struct resource smc91x_res
[] = {
135 .end
= SMC_IOADDR
+ SZ_32
- 1,
136 .flags
= IORESOURCE_MEM
,
139 .start
= evt2irq(0x2a0),
140 .end
= evt2irq(0x2a0),
141 .flags
= IORESOURCE_IRQ
,
145 static struct platform_device smc91x_dev
= {
148 .num_resources
= ARRAY_SIZE(smc91x_res
),
149 .resource
= smc91x_res
,
152 .platform_data
= &smc91x_info
,
156 /* platform init code */
157 static struct platform_device
*edosk7760_devices
[] __initdata
= {
159 &edosk7760_nor_flash_device
,
164 static int __init
init_edosk7760_devices(void)
166 plat_irq_setup_pins(IRQ_MODE_IRQ
);
168 return platform_add_devices(edosk7760_devices
,
169 ARRAY_SIZE(edosk7760_devices
));
171 device_initcall(init_edosk7760_devices
);
176 struct sh_machine_vector mv_edosk7760 __initmv
= {
177 .mv_name
= "EDOSK7760",