xref: /openbmc/linux/arch/sh/boards/board-sh2007.c (revision baa7eb025ab14f3cba2e35c0a8648f9c9f01d24f)
1 /*
2  * SH-2007 board support.
3  *
4  * Copyright (C) 2003, 2004  SUGIOKA Toshinobu
5  * Copyright (C) 2010  Hitoshi Mitake <mitake@dcl.info.waseda.ac.jp>
6  */
7 #include <linux/init.h>
8 #include <linux/irq.h>
9 #include <linux/smsc911x.h>
10 #include <linux/platform_device.h>
11 #include <linux/ata_platform.h>
12 #include <linux/io.h>
13 #include <asm/machvec.h>
14 #include <mach/sh2007.h>
15 
16 struct smsc911x_platform_config smc911x_info = {
17 	.flags		= SMSC911X_USE_32BIT,
18 	.irq_polarity	= SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
19 	.irq_type	= SMSC911X_IRQ_TYPE_PUSH_PULL,
20 };
21 
22 static struct resource smsc9118_0_resources[] = {
23 	[0] = {
24 		.start	= SMC0_BASE,
25 		.end	= SMC0_BASE + 0xff,
26 		.flags	= IORESOURCE_MEM,
27 	},
28 	[1] = {
29 		.start	= evt2irq(0x240),
30 		.end	= evt2irq(0x240),
31 		.flags	= IORESOURCE_IRQ,
32 	}
33 };
34 
35 static struct resource smsc9118_1_resources[] = {
36 	[0] = {
37 		.start	= SMC1_BASE,
38 		.end	= SMC1_BASE + 0xff,
39 		.flags	= IORESOURCE_MEM,
40 	},
41 	[1] = {
42 		.start	= evt2irq(0x280),
43 		.end	= evt2irq(0x280),
44 		.flags	= IORESOURCE_IRQ,
45 	}
46 };
47 
48 static struct platform_device smsc9118_0_device = {
49 	.name		= "smsc911x",
50 	.id		= 0,
51 	.num_resources	= ARRAY_SIZE(smsc9118_0_resources),
52 	.resource	= smsc9118_0_resources,
53 	.dev = {
54 		.platform_data = &smc911x_info,
55 	},
56 };
57 
58 static struct platform_device smsc9118_1_device = {
59 	.name		= "smsc911x",
60 	.id		= 1,
61 	.num_resources	= ARRAY_SIZE(smsc9118_1_resources),
62 	.resource	= smsc9118_1_resources,
63 	.dev = {
64 		.platform_data = &smc911x_info,
65 	},
66 };
67 
68 static struct resource cf_resources[] = {
69 	[0] = {
70 		.start	= CF_BASE + CF_OFFSET,
71 		.end	= CF_BASE + CF_OFFSET + 0x0f,
72 		.flags	= IORESOURCE_MEM,
73 	},
74 	[1] = {
75 		.start	= CF_BASE + CF_OFFSET + 0x206,
76 		.end	= CF_BASE + CF_OFFSET + 0x20f,
77 		.flags	= IORESOURCE_MEM,
78 	},
79 	[2] = {
80 		.start	= evt2irq(0x2c0),
81 		.end	= evt2irq(0x2c0),
82 		.flags	= IORESOURCE_IRQ,
83 	},
84 };
85 
86 static struct platform_device cf_device  = {
87 	.name		= "pata_platform",
88 	.id		= 0,
89 	.num_resources	= ARRAY_SIZE(cf_resources),
90 	.resource	= cf_resources,
91 };
92 
93 static struct platform_device *sh2007_devices[] __initdata = {
94 	&smsc9118_0_device,
95 	&smsc9118_1_device,
96 	&cf_device,
97 };
98 
99 static int __init sh2007_io_init(void)
100 {
101 	platform_add_devices(sh2007_devices, ARRAY_SIZE(sh2007_devices));
102 	return 0;
103 }
104 subsys_initcall(sh2007_io_init);
105 
106 static void __init sh2007_init_irq(void)
107 {
108 	plat_irq_setup_pins(IRQ_MODE_IRQ);
109 }
110 
111 /*
112  * Initialize the board
113  */
114 static void __init sh2007_setup(char **cmdline_p)
115 {
116 	printk(KERN_INFO "SH-2007 Setup...");
117 
118 	/* setup wait control registers for area 5 */
119 	__raw_writel(CS5BCR_D, CS5BCR);
120 	__raw_writel(CS5WCR_D, CS5WCR);
121 	__raw_writel(CS5PCR_D, CS5PCR);
122 
123 	printk(KERN_INFO " done.\n");
124 }
125 
126 /*
127  * The Machine Vector
128  */
129 struct sh_machine_vector mv_sh2007 __initmv = {
130 	.mv_setup		= sh2007_setup,
131 	.mv_name		= "sh2007",
132 	.mv_init_irq		= sh2007_init_irq,
133 };
134