Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/arm/mach-at91/board-pcontrol-g20.c
10817 views
1
/*
2
* Copyright (C) 2010 Christian Glindkamp <[email protected]>
3
* taskit GmbH
4
*
5
* This program is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation; either version 2 of the License, or
8
* (at your option) any later version.
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
*/
19
/*
20
* copied and adjusted from board-stamp9g20.c
21
* by Peter Gsellmann <[email protected]>
22
*/
23
24
#include <linux/mm.h>
25
#include <linux/platform_device.h>
26
#include <linux/gpio.h>
27
#include <linux/w1-gpio.h>
28
29
#include <asm/mach-types.h>
30
#include <asm/mach/arch.h>
31
32
#include <mach/board.h>
33
#include <mach/at91sam9_smc.h>
34
#include <mach/stamp9g20.h>
35
36
#include "sam9_smc.h"
37
#include "generic.h"
38
39
40
static void __init pcontrol_g20_init_early(void)
41
{
42
stamp9g20_init_early();
43
44
/* USART0 on ttyS1. (Rx, Tx, CTS, RTS) piggyback A2 */
45
at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS
46
| ATMEL_UART_RTS);
47
48
/* USART1 on ttyS2. (Rx, Tx, CTS, RTS) isolated RS485 X5 */
49
at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS
50
| ATMEL_UART_RTS);
51
52
/* USART2 on ttyS3. (Rx, Tx) 9bit-Bus Multidrop-mode X4 */
53
at91_register_uart(AT91SAM9260_ID_US4, 3, 0);
54
}
55
56
57
static void __init init_irq(void)
58
{
59
at91sam9260_init_interrupts(NULL);
60
}
61
62
63
static struct sam9_smc_config __initdata pcontrol_smc_config[2] = { {
64
.ncs_read_setup = 16,
65
.nrd_setup = 18,
66
.ncs_write_setup = 16,
67
.nwe_setup = 18,
68
69
.ncs_read_pulse = 63,
70
.nrd_pulse = 55,
71
.ncs_write_pulse = 63,
72
.nwe_pulse = 55,
73
74
.read_cycle = 127,
75
.write_cycle = 127,
76
77
.mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE
78
| AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_BAT_SELECT
79
| AT91_SMC_DBW_8 | AT91_SMC_PS_4
80
| AT91_SMC_TDFMODE,
81
.tdf_cycles = 3,
82
}, {
83
.ncs_read_setup = 0,
84
.nrd_setup = 0,
85
.ncs_write_setup = 0,
86
.nwe_setup = 1,
87
88
.ncs_read_pulse = 8,
89
.nrd_pulse = 8,
90
.ncs_write_pulse = 5,
91
.nwe_pulse = 4,
92
93
.read_cycle = 8,
94
.write_cycle = 7,
95
96
.mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE
97
| AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_BAT_SELECT
98
| AT91_SMC_DBW_16 | AT91_SMC_PS_8
99
| AT91_SMC_TDFMODE,
100
.tdf_cycles = 1,
101
} };
102
103
static void __init add_device_pcontrol(void)
104
{
105
/* configure chip-select 4 (IO compatible to 8051 X4 ) */
106
sam9_smc_configure(4, &pcontrol_smc_config[0]);
107
/* configure chip-select 7 (FerroRAM 256KiBx16bit MR2A16A D4 ) */
108
sam9_smc_configure(7, &pcontrol_smc_config[1]);
109
}
110
111
112
/*
113
* USB Host port
114
*/
115
static struct at91_usbh_data __initdata usbh_data = {
116
.ports = 2,
117
};
118
119
120
/*
121
* USB Device port
122
*/
123
static struct at91_udc_data __initdata pcontrol_g20_udc_data = {
124
.vbus_pin = AT91_PIN_PA22, /* Detect +5V bus voltage */
125
.pullup_pin = AT91_PIN_PA4, /* K-state, active low */
126
};
127
128
129
/*
130
* MACB Ethernet device
131
*/
132
static struct at91_eth_data __initdata macb_data = {
133
.phy_irq_pin = AT91_PIN_PA28,
134
.is_rmii = 1,
135
};
136
137
138
/*
139
* I2C devices: eeprom and phy/switch
140
*/
141
static struct i2c_board_info __initdata pcontrol_g20_i2c_devices[] = {
142
{ /* D7 address width=2, 8KiB */
143
I2C_BOARD_INFO("24c64", 0x50)
144
}, { /* D8 address width=1, 1 byte has 32 bits! */
145
I2C_BOARD_INFO("lan9303", 0x0a)
146
}, };
147
148
149
/*
150
* LEDs
151
*/
152
static struct gpio_led pcontrol_g20_leds[] = {
153
{
154
.name = "LED1", /* red H5 */
155
.gpio = AT91_PIN_PB18,
156
.active_low = 1,
157
.default_trigger = "none", /* supervisor */
158
}, {
159
.name = "LED2", /* yellow H7 */
160
.gpio = AT91_PIN_PB19,
161
.active_low = 1,
162
.default_trigger = "mmc0", /* SD-card activity */
163
}, {
164
.name = "LED3", /* green H2 */
165
.gpio = AT91_PIN_PB20,
166
.active_low = 1,
167
.default_trigger = "heartbeat", /* blinky */
168
}, {
169
.name = "LED4", /* red H3 */
170
.gpio = AT91_PIN_PC6,
171
.active_low = 1,
172
.default_trigger = "none", /* connection lost */
173
}, {
174
.name = "LED5", /* yellow H6 */
175
.gpio = AT91_PIN_PC7,
176
.active_low = 1,
177
.default_trigger = "none", /* unsent data */
178
}, {
179
.name = "LED6", /* green H1 */
180
.gpio = AT91_PIN_PC9,
181
.active_low = 1,
182
.default_trigger = "none", /* snafu */
183
}
184
};
185
186
187
/*
188
* SPI devices
189
*/
190
static struct spi_board_info pcontrol_g20_spi_devices[] = {
191
{
192
.modalias = "spidev", /* HMI port X4 */
193
.chip_select = 1,
194
.max_speed_hz = 50 * 1000 * 1000,
195
.bus_num = 0,
196
}, {
197
.modalias = "spidev", /* piggyback A2 */
198
.chip_select = 0,
199
.max_speed_hz = 50 * 1000 * 1000,
200
.bus_num = 1,
201
},
202
};
203
204
205
static void __init pcontrol_g20_board_init(void)
206
{
207
stamp9g20_board_init();
208
at91_add_device_usbh(&usbh_data);
209
at91_add_device_eth(&macb_data);
210
at91_add_device_i2c(pcontrol_g20_i2c_devices,
211
ARRAY_SIZE(pcontrol_g20_i2c_devices));
212
add_device_pcontrol();
213
at91_add_device_spi(pcontrol_g20_spi_devices,
214
ARRAY_SIZE(pcontrol_g20_spi_devices));
215
at91_add_device_udc(&pcontrol_g20_udc_data);
216
at91_gpio_leds(pcontrol_g20_leds,
217
ARRAY_SIZE(pcontrol_g20_leds));
218
/* piggyback A2 */
219
at91_set_gpio_output(AT91_PIN_PB31, 1);
220
}
221
222
223
MACHINE_START(PCONTROL_G20, "PControl G20")
224
/* Maintainer: [email protected] */
225
.timer = &at91sam926x_timer,
226
.map_io = at91sam9260_map_io,
227
.init_early = pcontrol_g20_init_early,
228
.init_irq = init_irq,
229
.init_machine = pcontrol_g20_board_init,
230
MACHINE_END
231
232