xref: /openbmc/linux/arch/arm/mach-ep93xx/edb93xx.c (revision df2634f43f5106947f3735a0b61a6527a4b278cd)
1 /*
2  * arch/arm/mach-ep93xx/edb93xx.c
3  * Cirrus Logic EDB93xx Development Board support.
4  *
5  * EDB93XX, EDB9301, EDB9307A
6  * Copyright (C) 2008-2009 H Hartley Sweeten <hsweeten@visionengravers.com>
7  *
8  * EDB9302
9  * Copyright (C) 2006 George Kashperko <george@chas.com.ua>
10  *
11  * EDB9302A, EDB9315, EDB9315A
12  * Copyright (C) 2006 Lennert Buytenhek <buytenh@wantstofly.org>
13  *
14  * EDB9307
15  * Copyright (C) 2007 Herbert Valerio Riedel <hvr@gnu.org>
16  *
17  * EDB9312
18  * Copyright (C) 2006 Infosys Technologies Limited
19  *                    Toufeeq Hussain <toufeeq_hussain@infosys.com>
20  *
21  * This program is free software; you can redistribute it and/or modify
22  * it under the terms of the GNU General Public License as published by
23  * the Free Software Foundation; either version 2 of the License, or (at
24  * your option) any later version.
25  */
26 
27 #include <linux/kernel.h>
28 #include <linux/init.h>
29 #include <linux/platform_device.h>
30 #include <linux/gpio.h>
31 #include <linux/i2c.h>
32 #include <linux/i2c-gpio.h>
33 
34 #include <mach/hardware.h>
35 
36 #include <asm/mach-types.h>
37 #include <asm/mach/arch.h>
38 
39 
40 static void __init edb93xx_register_flash(void)
41 {
42 	if (machine_is_edb9307() || machine_is_edb9312() ||
43 	    machine_is_edb9315()) {
44 		ep93xx_register_flash(4, EP93XX_CS6_PHYS_BASE, SZ_32M);
45 	} else {
46 		ep93xx_register_flash(2, EP93XX_CS6_PHYS_BASE, SZ_16M);
47 	}
48 }
49 
50 static struct ep93xx_eth_data __initdata edb93xx_eth_data = {
51 	.phy_id		= 1,
52 };
53 
54 
55 /*************************************************************************
56  * EDB93xx i2c peripheral handling
57  *************************************************************************/
58 static struct i2c_gpio_platform_data __initdata edb93xx_i2c_gpio_data = {
59 	.sda_pin		= EP93XX_GPIO_LINE_EEDAT,
60 	.sda_is_open_drain	= 0,
61 	.scl_pin		= EP93XX_GPIO_LINE_EECLK,
62 	.scl_is_open_drain	= 0,
63 	.udelay			= 0,	/* default to 100 kHz */
64 	.timeout		= 0,	/* default to 100 ms */
65 };
66 
67 static struct i2c_board_info __initdata edb93xxa_i2c_board_info[] = {
68 	{
69 		I2C_BOARD_INFO("isl1208", 0x6f),
70 	},
71 };
72 
73 static struct i2c_board_info __initdata edb93xx_i2c_board_info[] = {
74 	{
75 		I2C_BOARD_INFO("ds1337", 0x68),
76 	},
77 };
78 
79 static void __init edb93xx_register_i2c(void)
80 {
81 	if (machine_is_edb9302a() || machine_is_edb9307a() ||
82 	    machine_is_edb9315a()) {
83 		ep93xx_register_i2c(&edb93xx_i2c_gpio_data,
84 				    edb93xxa_i2c_board_info,
85 				    ARRAY_SIZE(edb93xxa_i2c_board_info));
86 	} else if (machine_is_edb9307() || machine_is_edb9312() ||
87 		   machine_is_edb9315()) {
88 		ep93xx_register_i2c(&edb93xx_i2c_gpio_data,
89 				    edb93xx_i2c_board_info,
90 				    ARRAY_SIZE(edb93xx_i2c_board_info));
91 	}
92 }
93 
94 
95 /*************************************************************************
96  * EDB93xx pwm
97  *************************************************************************/
98 static void __init edb93xx_register_pwm(void)
99 {
100 	if (machine_is_edb9301() ||
101 	    machine_is_edb9302() || machine_is_edb9302a()) {
102 		/* EP9301 and EP9302 only have pwm.1 (EGPIO14) */
103 		ep93xx_register_pwm(0, 1);
104 	} else if (machine_is_edb9307() || machine_is_edb9307a()) {
105 		/* EP9307 only has pwm.0 (PWMOUT) */
106 		ep93xx_register_pwm(1, 0);
107 	} else {
108 		/* EP9312 and EP9315 have both */
109 		ep93xx_register_pwm(1, 1);
110 	}
111 }
112 
113 
114 static void __init edb93xx_init_machine(void)
115 {
116 	ep93xx_init_devices();
117 	edb93xx_register_flash();
118 	ep93xx_register_eth(&edb93xx_eth_data, 1);
119 	edb93xx_register_i2c();
120 	edb93xx_register_pwm();
121 }
122 
123 
124 #ifdef CONFIG_MACH_EDB9301
125 MACHINE_START(EDB9301, "Cirrus Logic EDB9301 Evaluation Board")
126 	/* Maintainer: H Hartley Sweeten <hsweeten@visionengravers.com> */
127 	.boot_params	= EP93XX_SDCE3_PHYS_BASE_SYNC + 0x100,
128 	.map_io		= ep93xx_map_io,
129 	.init_irq	= ep93xx_init_irq,
130 	.timer		= &ep93xx_timer,
131 	.init_machine	= edb93xx_init_machine,
132 MACHINE_END
133 #endif
134 
135 #ifdef CONFIG_MACH_EDB9302
136 MACHINE_START(EDB9302, "Cirrus Logic EDB9302 Evaluation Board")
137 	/* Maintainer: George Kashperko <george@chas.com.ua> */
138 	.boot_params	= EP93XX_SDCE3_PHYS_BASE_SYNC + 0x100,
139 	.map_io		= ep93xx_map_io,
140 	.init_irq	= ep93xx_init_irq,
141 	.timer		= &ep93xx_timer,
142 	.init_machine	= edb93xx_init_machine,
143 MACHINE_END
144 #endif
145 
146 #ifdef CONFIG_MACH_EDB9302A
147 MACHINE_START(EDB9302A, "Cirrus Logic EDB9302A Evaluation Board")
148 	/* Maintainer: Lennert Buytenhek <buytenh@wantstofly.org> */
149 	.boot_params	= EP93XX_SDCE0_PHYS_BASE + 0x100,
150 	.map_io		= ep93xx_map_io,
151 	.init_irq	= ep93xx_init_irq,
152 	.timer		= &ep93xx_timer,
153 	.init_machine	= edb93xx_init_machine,
154 MACHINE_END
155 #endif
156 
157 #ifdef CONFIG_MACH_EDB9307
158 MACHINE_START(EDB9307, "Cirrus Logic EDB9307 Evaluation Board")
159 	/* Maintainer: Herbert Valerio Riedel <hvr@gnu.org> */
160 	.boot_params	= EP93XX_SDCE3_PHYS_BASE_SYNC + 0x100,
161 	.map_io		= ep93xx_map_io,
162 	.init_irq	= ep93xx_init_irq,
163 	.timer		= &ep93xx_timer,
164 	.init_machine	= edb93xx_init_machine,
165 MACHINE_END
166 #endif
167 
168 #ifdef CONFIG_MACH_EDB9307A
169 MACHINE_START(EDB9307A, "Cirrus Logic EDB9307A Evaluation Board")
170 	/* Maintainer: H Hartley Sweeten <hsweeten@visionengravers.com> */
171 	.boot_params	= EP93XX_SDCE0_PHYS_BASE + 0x100,
172 	.map_io		= ep93xx_map_io,
173 	.init_irq	= ep93xx_init_irq,
174 	.timer		= &ep93xx_timer,
175 	.init_machine	= edb93xx_init_machine,
176 MACHINE_END
177 #endif
178 
179 #ifdef CONFIG_MACH_EDB9312
180 MACHINE_START(EDB9312, "Cirrus Logic EDB9312 Evaluation Board")
181 	/* Maintainer: Toufeeq Hussain <toufeeq_hussain@infosys.com> */
182 	.boot_params	= EP93XX_SDCE3_PHYS_BASE_SYNC + 0x100,
183 	.map_io		= ep93xx_map_io,
184 	.init_irq	= ep93xx_init_irq,
185 	.timer		= &ep93xx_timer,
186 	.init_machine	= edb93xx_init_machine,
187 MACHINE_END
188 #endif
189 
190 #ifdef CONFIG_MACH_EDB9315
191 MACHINE_START(EDB9315, "Cirrus Logic EDB9315 Evaluation Board")
192 	/* Maintainer: Lennert Buytenhek <buytenh@wantstofly.org> */
193 	.boot_params	= EP93XX_SDCE3_PHYS_BASE_SYNC + 0x100,
194 	.map_io		= ep93xx_map_io,
195 	.init_irq	= ep93xx_init_irq,
196 	.timer		= &ep93xx_timer,
197 	.init_machine	= edb93xx_init_machine,
198 MACHINE_END
199 #endif
200 
201 #ifdef CONFIG_MACH_EDB9315A
202 MACHINE_START(EDB9315A, "Cirrus Logic EDB9315A Evaluation Board")
203 	/* Maintainer: Lennert Buytenhek <buytenh@wantstofly.org> */
204 	.boot_params	= EP93XX_SDCE0_PHYS_BASE + 0x100,
205 	.map_io		= ep93xx_map_io,
206 	.init_irq	= ep93xx_init_irq,
207 	.timer		= &ep93xx_timer,
208 	.init_machine	= edb93xx_init_machine,
209 MACHINE_END
210 #endif
211