[PATCH] ARM: 2729/1: DM9000 platform support for S3C2410 machines (BAST, VR1000)
Patch from Ben Dooks Add platform_device information for DM9000 chip(s) on the Simtec BAST and the VR1000 board. Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
d9dc58049d
commit
d97a666f36
2 changed files with 117 additions and 9 deletions
|
@ -26,6 +26,7 @@
|
|||
* 03-Mar-2005 BJD Ensured that bast-cpld.h is included
|
||||
* 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA
|
||||
* 14-Mar-2006 BJD Updated for __iomem changes
|
||||
* 22-Jun-2006 BJD Added DM9000 platform information
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
|
@ -35,6 +36,7 @@
|
|||
#include <linux/timer.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/dm9000.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
@ -53,6 +55,7 @@
|
|||
#include <asm/arch/regs-serial.h>
|
||||
#include <asm/arch/regs-gpio.h>
|
||||
#include <asm/arch/regs-mem.h>
|
||||
#include <asm/arch/regs-lcd.h>
|
||||
#include <asm/arch/nand.h>
|
||||
|
||||
#include <linux/mtd/mtd.h>
|
||||
|
@ -112,7 +115,6 @@ static struct map_desc bast_iodesc[] __initdata = {
|
|||
{ VA_C2(BAST_VA_ISAMEM), PA_CS2(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE },
|
||||
{ VA_C2(BAST_VA_ASIXNET), PA_CS3(BAST_PA_ASIXNET), SZ_1M, MT_DEVICE },
|
||||
{ VA_C2(BAST_VA_SUPERIO), PA_CS2(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE },
|
||||
{ VA_C2(BAST_VA_DM9000), PA_CS2(BAST_PA_DM9000), SZ_1M, MT_DEVICE },
|
||||
{ VA_C2(BAST_VA_IDEPRI), PA_CS3(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE },
|
||||
{ VA_C2(BAST_VA_IDESEC), PA_CS3(BAST_PA_IDESEC), SZ_1M, MT_DEVICE },
|
||||
{ VA_C2(BAST_VA_IDEPRIAUX), PA_CS3(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE },
|
||||
|
@ -123,7 +125,6 @@ static struct map_desc bast_iodesc[] __initdata = {
|
|||
{ VA_C3(BAST_VA_ISAMEM), PA_CS3(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE },
|
||||
{ VA_C3(BAST_VA_ASIXNET), PA_CS3(BAST_PA_ASIXNET), SZ_1M, MT_DEVICE },
|
||||
{ VA_C3(BAST_VA_SUPERIO), PA_CS3(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE },
|
||||
{ VA_C3(BAST_VA_DM9000), PA_CS3(BAST_PA_DM9000), SZ_1M, MT_DEVICE },
|
||||
{ VA_C3(BAST_VA_IDEPRI), PA_CS3(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE },
|
||||
{ VA_C3(BAST_VA_IDESEC), PA_CS3(BAST_PA_IDESEC), SZ_1M, MT_DEVICE },
|
||||
{ VA_C3(BAST_VA_IDEPRIAUX), PA_CS3(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE },
|
||||
|
@ -134,7 +135,6 @@ static struct map_desc bast_iodesc[] __initdata = {
|
|||
{ VA_C4(BAST_VA_ISAMEM), PA_CS4(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE },
|
||||
{ VA_C4(BAST_VA_ASIXNET), PA_CS5(BAST_PA_ASIXNET), SZ_1M, MT_DEVICE },
|
||||
{ VA_C4(BAST_VA_SUPERIO), PA_CS4(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE },
|
||||
{ VA_C4(BAST_VA_DM9000), PA_CS4(BAST_PA_DM9000), SZ_1M, MT_DEVICE },
|
||||
{ VA_C4(BAST_VA_IDEPRI), PA_CS5(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE },
|
||||
{ VA_C4(BAST_VA_IDESEC), PA_CS5(BAST_PA_IDESEC), SZ_1M, MT_DEVICE },
|
||||
{ VA_C4(BAST_VA_IDEPRIAUX), PA_CS5(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE },
|
||||
|
@ -145,7 +145,6 @@ static struct map_desc bast_iodesc[] __initdata = {
|
|||
{ VA_C5(BAST_VA_ISAMEM), PA_CS5(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE },
|
||||
{ VA_C5(BAST_VA_ASIXNET), PA_CS5(BAST_PA_ASIXNET), SZ_1M, MT_DEVICE },
|
||||
{ VA_C5(BAST_VA_SUPERIO), PA_CS5(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE },
|
||||
{ VA_C5(BAST_VA_DM9000), PA_CS5(BAST_PA_DM9000), SZ_1M, MT_DEVICE },
|
||||
{ VA_C5(BAST_VA_IDEPRI), PA_CS5(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE },
|
||||
{ VA_C5(BAST_VA_IDESEC), PA_CS5(BAST_PA_IDESEC), SZ_1M, MT_DEVICE },
|
||||
{ VA_C5(BAST_VA_IDEPRIAUX), PA_CS5(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE },
|
||||
|
@ -313,6 +312,45 @@ static struct s3c2410_platform_nand bast_nand_info = {
|
|||
.select_chip = bast_nand_select,
|
||||
};
|
||||
|
||||
/* DM9000 */
|
||||
|
||||
static struct resource bast_dm9k_resource[] = {
|
||||
[0] = {
|
||||
.start = S3C2410_CS5 + BAST_PA_DM9000,
|
||||
.end = S3C2410_CS5 + BAST_PA_DM9000 + 3,
|
||||
.flags = IORESOURCE_MEM
|
||||
},
|
||||
[1] = {
|
||||
.start = S3C2410_CS5 + BAST_PA_DM9000 + 0x40,
|
||||
.end = S3C2410_CS5 + BAST_PA_DM9000 + 0x40 + 0x3f,
|
||||
.flags = IORESOURCE_MEM
|
||||
},
|
||||
[2] = {
|
||||
.start = IRQ_DM9000,
|
||||
.end = IRQ_DM9000,
|
||||
.flags = IORESOURCE_IRQ
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/* for the moment we limit ourselves to 16bit IO until some
|
||||
* better IO routines can be written and tested
|
||||
*/
|
||||
|
||||
struct dm9000_plat_data bast_dm9k_platdata = {
|
||||
.flags = DM9000_PLATF_16BITONLY
|
||||
};
|
||||
|
||||
static struct platform_device bast_device_dm9k = {
|
||||
.name = "dm9000",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(bast_dm9k_resource),
|
||||
.resource = bast_dm9k_resource,
|
||||
.dev = {
|
||||
.platform_data = &bast_dm9k_platdata,
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/* Standard BAST devices */
|
||||
|
||||
|
@ -324,7 +362,8 @@ static struct platform_device *bast_devices[] __initdata = {
|
|||
&s3c_device_iis,
|
||||
&s3c_device_rtc,
|
||||
&s3c_device_nand,
|
||||
&bast_device_nor
|
||||
&bast_device_nor,
|
||||
&bast_device_dm9k,
|
||||
};
|
||||
|
||||
static struct clk *bast_clocks[] = {
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
* 10-Feb-2005 BJD Added power-off capability
|
||||
* 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA
|
||||
* 14-Mar-2006 BJD void __iomem fixes
|
||||
* 22-Jun-2006 BJD Added DM9000 platform information
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
|
@ -35,6 +36,7 @@
|
|||
#include <linux/list.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/dm9000.h>
|
||||
|
||||
#include <linux/serial.h>
|
||||
#include <linux/tty.h>
|
||||
|
@ -98,28 +100,24 @@ static struct map_desc vr1000_iodesc[] __initdata = {
|
|||
* are only 8bit */
|
||||
|
||||
/* slow, byte */
|
||||
{ VA_C2(VR1000_VA_DM9000), PA_CS2(VR1000_PA_DM9000), SZ_1M, MT_DEVICE },
|
||||
{ VA_C2(VR1000_VA_IDEPRI), PA_CS3(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE },
|
||||
{ VA_C2(VR1000_VA_IDESEC), PA_CS3(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE },
|
||||
{ VA_C2(VR1000_VA_IDEPRIAUX), PA_CS3(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE },
|
||||
{ VA_C2(VR1000_VA_IDESECAUX), PA_CS3(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE },
|
||||
|
||||
/* slow, word */
|
||||
{ VA_C3(VR1000_VA_DM9000), PA_CS3(VR1000_PA_DM9000), SZ_1M, MT_DEVICE },
|
||||
{ VA_C3(VR1000_VA_IDEPRI), PA_CS3(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE },
|
||||
{ VA_C3(VR1000_VA_IDESEC), PA_CS3(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE },
|
||||
{ VA_C3(VR1000_VA_IDEPRIAUX), PA_CS3(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE },
|
||||
{ VA_C3(VR1000_VA_IDESECAUX), PA_CS3(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE },
|
||||
|
||||
/* fast, byte */
|
||||
{ VA_C4(VR1000_VA_DM9000), PA_CS4(VR1000_PA_DM9000), SZ_1M, MT_DEVICE },
|
||||
{ VA_C4(VR1000_VA_IDEPRI), PA_CS5(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE },
|
||||
{ VA_C4(VR1000_VA_IDESEC), PA_CS5(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE },
|
||||
{ VA_C4(VR1000_VA_IDEPRIAUX), PA_CS5(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE },
|
||||
{ VA_C4(VR1000_VA_IDESECAUX), PA_CS5(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE },
|
||||
|
||||
/* fast, word */
|
||||
{ VA_C5(VR1000_VA_DM9000), PA_CS5(VR1000_PA_DM9000), SZ_1M, MT_DEVICE },
|
||||
{ VA_C5(VR1000_VA_IDEPRI), PA_CS5(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE },
|
||||
{ VA_C5(VR1000_VA_IDESEC), PA_CS5(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE },
|
||||
{ VA_C5(VR1000_VA_IDEPRIAUX), PA_CS5(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE },
|
||||
|
@ -246,6 +244,74 @@ static struct platform_device vr1000_nor = {
|
|||
.resource = vr1000_nor_resource,
|
||||
};
|
||||
|
||||
/* DM9000 ethernet devices */
|
||||
|
||||
static struct resource vr1000_dm9k0_resource[] = {
|
||||
[0] = {
|
||||
.start = S3C2410_CS5 + VR1000_PA_DM9000,
|
||||
.end = S3C2410_CS5 + VR1000_PA_DM9000 + 3,
|
||||
.flags = IORESOURCE_MEM
|
||||
},
|
||||
[1] = {
|
||||
.start = S3C2410_CS5 + VR1000_PA_DM9000 + 0x40,
|
||||
.end = S3C2410_CS5 + VR1000_PA_DM9000 + 0x7f,
|
||||
.flags = IORESOURCE_MEM
|
||||
},
|
||||
[2] = {
|
||||
.start = IRQ_VR1000_DM9000A,
|
||||
.end = IRQ_VR1000_DM9000A,
|
||||
.flags = IORESOURCE_IRQ
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
static struct resource vr1000_dm9k1_resource[] = {
|
||||
[0] = {
|
||||
.start = S3C2410_CS5 + VR1000_PA_DM9000 + 0x80,
|
||||
.end = S3C2410_CS5 + VR1000_PA_DM9000 + 0x83,
|
||||
.flags = IORESOURCE_MEM
|
||||
},
|
||||
[1] = {
|
||||
.start = S3C2410_CS5 + VR1000_PA_DM9000 + 0xC0,
|
||||
.end = S3C2410_CS5 + VR1000_PA_DM9000 + 0xFF,
|
||||
.flags = IORESOURCE_MEM
|
||||
},
|
||||
[2] = {
|
||||
.start = IRQ_VR1000_DM9000N,
|
||||
.end = IRQ_VR1000_DM9000N,
|
||||
.flags = IORESOURCE_IRQ
|
||||
}
|
||||
};
|
||||
|
||||
/* for the moment we limit ourselves to 16bit IO until some
|
||||
* better IO routines can be written and tested
|
||||
*/
|
||||
|
||||
struct dm9000_plat_data vr1000_dm9k_platdata = {
|
||||
.flags = DM9000_PLATF_16BITONLY,
|
||||
};
|
||||
|
||||
static struct platform_device vr1000_dm9k0 = {
|
||||
.name = "dm9000",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(vr1000_dm9k0_resource),
|
||||
.resource = vr1000_dm9k0_resource,
|
||||
.dev = {
|
||||
.platform_data = &vr1000_dm9k_platdata,
|
||||
}
|
||||
};
|
||||
|
||||
static struct platform_device vr1000_dm9k1 = {
|
||||
.name = "dm9000",
|
||||
.id = 1,
|
||||
.num_resources = ARRAY_SIZE(vr1000_dm9k1_resource),
|
||||
.resource = vr1000_dm9k1_resource,
|
||||
.dev = {
|
||||
.platform_data = &vr1000_dm9k_platdata,
|
||||
}
|
||||
};
|
||||
|
||||
/* devices for this board */
|
||||
|
||||
static struct platform_device *vr1000_devices[] __initdata = {
|
||||
&s3c_device_usb,
|
||||
|
@ -253,8 +319,11 @@ static struct platform_device *vr1000_devices[] __initdata = {
|
|||
&s3c_device_wdt,
|
||||
&s3c_device_i2c,
|
||||
&s3c_device_iis,
|
||||
&s3c_device_adc,
|
||||
&serial_device,
|
||||
&vr1000_nor,
|
||||
&vr1000_dm9k0,
|
||||
&vr1000_dm9k1
|
||||
};
|
||||
|
||||
static struct clk *vr1000_clocks[] = {
|
||||
|
|
Loading…
Reference in a new issue