1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29#include <common.h>
30#include <asm/io.h>
31#include <asm/arch/at91_common.h>
32#include <asm/arch/at91_pmc.h>
33#include <asm/arch/gpio.h>
34
35
36
37
38
39
40
41
42
43
44#ifdef CONFIG_AT91_GPIO_PULLUP
45# define PUP CONFIG_AT91_GPIO_PULLUP
46#else
47# define PUP 0
48#endif
49
50void at91_serial0_hw_init(void)
51{
52 at91_pmc_t *pmc = (at91_pmc_t *) ATMEL_BASE_PMC;
53
54 at91_set_a_periph(AT91_PIO_PORTA, 26, 1);
55 at91_set_a_periph(AT91_PIO_PORTA, 27, PUP);
56 writel(1 << ATMEL_ID_USART0, &pmc->pcer);
57}
58
59void at91_serial1_hw_init(void)
60{
61 at91_pmc_t *pmc = (at91_pmc_t *) ATMEL_BASE_PMC;
62
63 at91_set_a_periph(AT91_PIO_PORTD, 0, 1);
64 at91_set_a_periph(AT91_PIO_PORTD, 1, PUP);
65 writel(1 << ATMEL_ID_USART1, &pmc->pcer);
66}
67
68void at91_serial2_hw_init(void)
69{
70 at91_pmc_t *pmc = (at91_pmc_t *) ATMEL_BASE_PMC;
71
72 at91_set_a_periph(AT91_PIO_PORTD, 2, 1);
73 at91_set_a_periph(AT91_PIO_PORTD, 3, PUP);
74 writel(1 << ATMEL_ID_USART2, &pmc->pcer);
75}
76
77void at91_seriald_hw_init(void)
78{
79 at91_pmc_t *pmc = (at91_pmc_t *) ATMEL_BASE_PMC;
80
81 at91_set_a_periph(AT91_PIO_PORTC, 30, PUP);
82 at91_set_a_periph(AT91_PIO_PORTC, 31, 1);
83 writel(1 << ATMEL_ID_SYS, &pmc->pcer);
84}
85
86#if defined(CONFIG_HAS_DATAFLASH) || defined(CONFIG_ATMEL_SPI)
87void at91_spi0_hw_init(unsigned long cs_mask)
88{
89 at91_pmc_t *pmc = (at91_pmc_t *) ATMEL_BASE_PMC;
90
91 at91_set_b_periph(AT91_PIO_PORTA, 0, PUP);
92 at91_set_b_periph(AT91_PIO_PORTA, 1, PUP);
93 at91_set_b_periph(AT91_PIO_PORTA, 2, PUP);
94
95
96 writel(1 << ATMEL_ID_SPI0, &pmc->pcer);
97
98 if (cs_mask & (1 << 0)) {
99 at91_set_b_periph(AT91_PIO_PORTA, 5, 1);
100 }
101 if (cs_mask & (1 << 1)) {
102 at91_set_b_periph(AT91_PIO_PORTA, 3, 1);
103 }
104 if (cs_mask & (1 << 2)) {
105 at91_set_b_periph(AT91_PIO_PORTA, 4, 1);
106 }
107 if (cs_mask & (1 << 3)) {
108 at91_set_b_periph(AT91_PIO_PORTB, 11, 1);
109 }
110 if (cs_mask & (1 << 4)) {
111 at91_set_pio_output(AT91_PIO_PORTA, 5, 1);
112 }
113 if (cs_mask & (1 << 5)) {
114 at91_set_pio_output(AT91_PIO_PORTA, 3, 1);
115 }
116 if (cs_mask & (1 << 6)) {
117 at91_set_pio_output(AT91_PIO_PORTA, 4, 1);
118 }
119 if (cs_mask & (1 << 7)) {
120 at91_set_pio_output(AT91_PIO_PORTB, 11, 1);
121 }
122}
123
124void at91_spi1_hw_init(unsigned long cs_mask)
125{
126 at91_pmc_t *pmc = (at91_pmc_t *) ATMEL_BASE_PMC;
127
128 at91_set_a_periph(AT91_PIO_PORTB, 12, PUP);
129 at91_set_a_periph(AT91_PIO_PORTB, 13, PUP);
130 at91_set_a_periph(AT91_PIO_PORTB, 14, PUP);
131
132
133 writel(1 << ATMEL_ID_SPI1, &pmc->pcer);
134
135 if (cs_mask & (1 << 0)) {
136 at91_set_a_periph(AT91_PIO_PORTB, 15, 1);
137 }
138 if (cs_mask & (1 << 1)) {
139 at91_set_a_periph(AT91_PIO_PORTB, 16, 1);
140 }
141 if (cs_mask & (1 << 2)) {
142 at91_set_a_periph(AT91_PIO_PORTB, 17, 1);
143 }
144 if (cs_mask & (1 << 3)) {
145 at91_set_a_periph(AT91_PIO_PORTB, 18, 1);
146 }
147 if (cs_mask & (1 << 4)) {
148 at91_set_pio_output(AT91_PIO_PORTB, 15, 1);
149 }
150 if (cs_mask & (1 << 5)) {
151 at91_set_pio_output(AT91_PIO_PORTB, 16, 1);
152 }
153 if (cs_mask & (1 << 6)) {
154 at91_set_pio_output(AT91_PIO_PORTB, 17, 1);
155 }
156 if (cs_mask & (1 << 7)) {
157 at91_set_pio_output(AT91_PIO_PORTB, 18, 1);
158 }
159}
160#endif
161
162#ifdef CONFIG_MACB
163void at91_macb_hw_init(void)
164{
165 at91_set_a_periph(AT91_PIO_PORTE, 21, 0);
166 at91_set_b_periph(AT91_PIO_PORTC, 25, 0);
167 at91_set_a_periph(AT91_PIO_PORTE, 25, 0);
168 at91_set_a_periph(AT91_PIO_PORTE, 26, 0);
169 at91_set_a_periph(AT91_PIO_PORTE, 27, 0);
170 at91_set_a_periph(AT91_PIO_PORTE, 28, 0);
171 at91_set_a_periph(AT91_PIO_PORTE, 23, 0);
172 at91_set_a_periph(AT91_PIO_PORTE, 24, 0);
173 at91_set_a_periph(AT91_PIO_PORTE, 30, 0);
174 at91_set_a_periph(AT91_PIO_PORTE, 29, 0);
175
176#ifndef CONFIG_RMII
177 at91_set_a_periph(AT91_PIO_PORTE, 22, 0);
178 at91_set_b_periph(AT91_PIO_PORTC, 26, 0);
179 at91_set_b_periph(AT91_PIO_PORTC, 22, 0);
180 at91_set_b_periph(AT91_PIO_PORTC, 23, 0);
181 at91_set_b_periph(AT91_PIO_PORTC, 27, 0);
182 at91_set_b_periph(AT91_PIO_PORTC, 20, 0);
183 at91_set_b_periph(AT91_PIO_PORTC, 21, 0);
184 at91_set_b_periph(AT91_PIO_PORTC, 24, 0);
185#endif
186}
187#endif
188
189#ifdef CONFIG_USB_OHCI_NEW
190void at91_uhp_hw_init(void)
191{
192
193 at91_set_pio_output(AT91_PIO_PORTA, 21, 0);
194 at91_set_pio_output(AT91_PIO_PORTA, 24, 0);
195}
196#endif
197
198#ifdef CONFIG_AT91_CAN
199void at91_can_hw_init(void)
200{
201 at91_pmc_t *pmc = (at91_pmc_t *) ATMEL_BASE_PMC;
202
203 at91_set_a_periph(AT91_PIO_PORTA, 13, 0);
204 at91_set_a_periph(AT91_PIO_PORTA, 14, 1);
205
206
207 writel(1 << ATMEL_ID_CAN, &pmc->pcer);
208}
209#endif
210