1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef AT91_PIO_H
15#define AT91_PIO_H
16
17
18#define AT91_ASM_PIO_RANGE 0x200
19#define AT91_ASM_PIOC_ASR \
20 (ATMEL_BASE_PIO + AT91_PIO_PORTC * AT91_ASM_PIO_RANGE + 0x70)
21#define AT91_ASM_PIOC_BSR \
22 (ATMEL_BASE_PIO + AT91_PIO_PORTC * AT91_ASM_PIO_RANGE + 0x74)
23#define AT91_ASM_PIOC_PDR \
24 (ATMEL_BASE_PIO + AT91_PIO_PORTC * AT91_ASM_PIO_RANGE + 0x04)
25#define AT91_ASM_PIOC_PUDR \
26 (ATMEL_BASE_PIO + AT91_PIO_PORTC * AT91_ASM_PIO_RANGE + 0x60)
27
28#define AT91_ASM_PIOD_PDR \
29 (ATMEL_BASE_PIO + AT91_PIO_PORTD * AT91_ASM_PIO_RANGE + 0x04)
30#define AT91_ASM_PIOD_PUDR \
31 (ATMEL_BASE_PIO + AT91_PIO_PORTD * AT91_ASM_PIO_RANGE + 0x60)
32#define AT91_ASM_PIOD_ASR \
33 (ATMEL_BASE_PIO + AT91_PIO_PORTD * AT91_ASM_PIO_RANGE + 0x70)
34
35#define PIO_SCDR_DIV 0x3fff
36
37#ifndef __ASSEMBLY__
38
39typedef struct at91_port {
40 u32 per;
41 u32 pdr;
42 u32 psr;
43 u32 reserved0;
44 u32 oer;
45 u32 odr;
46 u32 osr;
47 u32 reserved1;
48 u32 ifer;
49 u32 ifdr;
50 u32 ifsr;
51 u32 reserved2;
52 u32 sodr;
53 u32 codr;
54 u32 odsr;
55 u32 pdsr;
56 u32 ier;
57 u32 idr;
58 u32 imr;
59 u32 isr;
60 u32 mder;
61 u32 mddr;
62 u32 mdsr;
63 u32 reserved3;
64 u32 pudr;
65 u32 puer;
66 u32 pusr;
67 u32 reserved4;
68 union {
69 struct {
70 u32 abcdsr1;
71 u32 abcdsr2;
72 u32 reserved5[2];
73 u32 ifscdr;
74 u32 ifscer;
75 u32 ifscsr;
76 u32 scdr;
77 u32 ppddr;
78 u32 ppder;
79 u32 ppdsr;
80 u32 reserved6;
81 } pio3;
82
83 struct {
84 u32 asr;
85 u32 bsr;
86 u32 absr;
87 u32 reserved5[9];
88 } pio2;
89 } mux;
90
91 u32 ower;
92 u32 owdr;
93 u32 owsr;
94 u32 reserved7;
95 u32 aimer;
96 u32 aimdr;
97 u32 aimmr;
98 u32 reserved8;
99 u32 esr;
100 u32 lsr;
101 u32 elsr;
102 u32 reserved9;
103 u32 fellsr;
104 u32 rehlsr;
105 u32 frlhsr;
106 u32 reserved10;
107 u32 locksr;
108 u32 wpmr;
109 u32 wpsr;
110 u32 reserved11[5];
111 u32 schmitt;
112 u32 reserved12[4];
113 u32 driver1;
114 u32 driver12;
115 u32 driver2;
116 u32 reserved13[12];
117} at91_port_t;
118
119typedef union at91_pio {
120 struct {
121 at91_port_t pioa;
122 at91_port_t piob;
123 at91_port_t pioc;
124 at91_port_t piod;
125 at91_port_t pioe;
126 };
127 at91_port_t port[5];
128} at91_pio_t;
129
130#ifdef CONFIG_AT91_GPIO
131int at91_set_a_periph(unsigned port, unsigned pin, int use_pullup);
132int at91_set_b_periph(unsigned port, unsigned pin, int use_pullup);
133int at91_set_pio_input(unsigned port, unsigned pin, int use_pullup);
134int at91_set_pio_multi_drive(unsigned port, unsigned pin, int is_on);
135int at91_set_pio_output(unsigned port, unsigned pin, int value);
136int at91_set_pio_periph(unsigned port, unsigned pin, int use_pullup);
137int at91_set_pio_pullup(unsigned port, unsigned pin, int use_pullup);
138int at91_set_pio_deglitch(unsigned port, unsigned pin, int is_on);
139int at91_set_pio_value(unsigned port, unsigned pin, int value);
140int at91_get_pio_value(unsigned port, unsigned pin);
141
142int at91_pio3_set_a_periph(unsigned port, unsigned pin, int use_pullup);
143int at91_pio3_set_b_periph(unsigned port, unsigned pin, int use_pullup);
144int at91_pio3_set_c_periph(unsigned port, unsigned pin, int use_pullup);
145int at91_pio3_set_d_periph(unsigned port, unsigned pin, int use_pullup);
146int at91_pio3_set_pio_debounce(unsigned port, unsigned pin, int is_on, int div);
147int at91_pio3_set_pio_pullup(unsigned port, unsigned pin, int use_pullup);
148int at91_pio3_set_pio_pulldown(unsigned port, unsigned pin, int is_on);
149int at91_pio3_set_pio_disable_schmitt_trig(unsigned port, unsigned pin);
150#endif
151#endif
152
153#define AT91_PIO_PORTA 0x0
154#define AT91_PIO_PORTB 0x1
155#define AT91_PIO_PORTC 0x2
156#define AT91_PIO_PORTD 0x3
157#define AT91_PIO_PORTE 0x4
158
159#endif
160