]>
git.ipfire.org Git - people/ms/u-boot.git/blob - include/asm-ppc/iopin_8xx.h
2 * See file CREDITS for list of people who contributed to this
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License as
7 * published by the Free Software Foundation; either version 2 of
8 * the License, or (at your option) any later version.
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.
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,
22 * MPC8xx I/O port pin manipulation functions
23 * Roughly based on iopin_8260.h
26 #ifndef _ASM_IOPIN_8XX_H_
27 #define _ASM_IOPIN_8XX_H_
29 #include <linux/types.h>
30 #include <asm/8xx_immap.h>
35 u_char port
:2; /* port number (A=0, B=1, C=2, D=3) */
36 u_char pin
:5; /* port pin (0-31) */
37 u_char flag
:1; /* for whatever */
45 extern __inline__
void
46 iopin_set_high(iopin_t
*iopin
)
48 if (iopin
->port
== IOPIN_PORTA
) {
49 volatile ushort
*datp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_padat
;
50 *datp
|= (1 << (15 - iopin
->pin
));
51 } else if (iopin
->port
== IOPIN_PORTB
) {
52 volatile uint
*datp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_cpm
.cp_pbdat
;
53 *datp
|= (1 << (31 - iopin
->pin
));
54 } else if (iopin
->port
== IOPIN_PORTC
) {
55 volatile ushort
*datp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcdat
;
56 *datp
|= (1 << (15 - iopin
->pin
));
57 } else if (iopin
->port
== IOPIN_PORTD
) {
58 volatile ushort
*datp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pddat
;
59 *datp
|= (1 << (15 - iopin
->pin
));
63 extern __inline__
void
64 iopin_set_low(iopin_t
*iopin
)
66 if (iopin
->port
== IOPIN_PORTA
) {
67 volatile ushort
*datp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_padat
;
68 *datp
&= ~(1 << (15 - iopin
->pin
));
69 } else if (iopin
->port
== IOPIN_PORTB
) {
70 volatile uint
*datp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_cpm
.cp_pbdat
;
71 *datp
&= ~(1 << (31 - iopin
->pin
));
72 } else if (iopin
->port
== IOPIN_PORTC
) {
73 volatile ushort
*datp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcdat
;
74 *datp
&= ~(1 << (15 - iopin
->pin
));
75 } else if (iopin
->port
== IOPIN_PORTD
) {
76 volatile ushort
*datp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pddat
;
77 *datp
&= ~(1 << (15 - iopin
->pin
));
81 extern __inline__ uint
82 iopin_is_high(iopin_t
*iopin
)
84 if (iopin
->port
== IOPIN_PORTA
) {
85 volatile ushort
*datp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_padat
;
86 return (*datp
>> (15 - iopin
->pin
)) & 1;
87 } else if (iopin
->port
== IOPIN_PORTB
) {
88 volatile uint
*datp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_cpm
.cp_pbdat
;
89 return (*datp
>> (31 - iopin
->pin
)) & 1;
90 } else if (iopin
->port
== IOPIN_PORTC
) {
91 volatile ushort
*datp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcdat
;
92 return (*datp
>> (15 - iopin
->pin
)) & 1;
93 } else if (iopin
->port
== IOPIN_PORTD
) {
94 volatile ushort
*datp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pddat
;
95 return (*datp
>> (15 - iopin
->pin
)) & 1;
100 extern __inline__ uint
101 iopin_is_low(iopin_t
*iopin
)
103 if (iopin
->port
== IOPIN_PORTA
) {
104 volatile ushort
*datp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_padat
;
105 return ((*datp
>> (15 - iopin
->pin
)) & 1) ^ 1;
106 } else if (iopin
->port
== IOPIN_PORTB
) {
107 volatile uint
*datp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_cpm
.cp_pbdat
;
108 return ((*datp
>> (31 - iopin
->pin
)) & 1) ^ 1;
109 } else if (iopin
->port
== IOPIN_PORTC
) {
110 volatile ushort
*datp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcdat
;
111 return ((*datp
>> (15 - iopin
->pin
)) & 1) ^ 1;
112 } else if (iopin
->port
== IOPIN_PORTD
) {
113 volatile ushort
*datp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pddat
;
114 return ((*datp
>> (15 - iopin
->pin
)) & 1) ^ 1;
119 extern __inline__
void
120 iopin_set_out(iopin_t
*iopin
)
122 if (iopin
->port
== IOPIN_PORTA
) {
123 volatile ushort
*dirp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_padir
;
124 *dirp
|= (1 << (15 - iopin
->pin
));
125 } else if (iopin
->port
== IOPIN_PORTB
) {
126 volatile uint
*dirp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_cpm
.cp_pbdir
;
127 *dirp
|= (1 << (31 - iopin
->pin
));
128 } else if (iopin
->port
== IOPIN_PORTC
) {
129 volatile ushort
*dirp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcdir
;
130 *dirp
|= (1 << (15 - iopin
->pin
));
131 } else if (iopin
->port
== IOPIN_PORTD
) {
132 volatile ushort
*dirp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pddir
;
133 *dirp
|= (1 << (15 - iopin
->pin
));
137 extern __inline__
void
138 iopin_set_in(iopin_t
*iopin
)
140 if (iopin
->port
== IOPIN_PORTA
) {
141 volatile ushort
*dirp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_padir
;
142 *dirp
&= ~(1 << (15 - iopin
->pin
));
143 } else if (iopin
->port
== IOPIN_PORTB
) {
144 volatile uint
*dirp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_cpm
.cp_pbdir
;
145 *dirp
&= ~(1 << (31 - iopin
->pin
));
146 } else if (iopin
->port
== IOPIN_PORTC
) {
147 volatile ushort
*dirp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcdir
;
148 *dirp
&= ~(1 << (15 - iopin
->pin
));
149 } else if (iopin
->port
== IOPIN_PORTD
) {
150 volatile ushort
*dirp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pddir
;
151 *dirp
&= ~(1 << (15 - iopin
->pin
));
155 extern __inline__ uint
156 iopin_is_out(iopin_t
*iopin
)
158 if (iopin
->port
== IOPIN_PORTA
) {
159 volatile ushort
*dirp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_padir
;
160 return (*dirp
>> (15 - iopin
->pin
)) & 1;
161 } else if (iopin
->port
== IOPIN_PORTB
) {
162 volatile uint
*dirp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_cpm
.cp_pbdir
;
163 return (*dirp
>> (31 - iopin
->pin
)) & 1;
164 } else if (iopin
->port
== IOPIN_PORTC
) {
165 volatile ushort
*dirp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcdir
;
166 return (*dirp
>> (15 - iopin
->pin
)) & 1;
167 } else if (iopin
->port
== IOPIN_PORTD
) {
168 volatile ushort
*dirp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pddir
;
169 return (*dirp
>> (15 - iopin
->pin
)) & 1;
174 extern __inline__ uint
175 iopin_is_in(iopin_t
*iopin
)
177 if (iopin
->port
== IOPIN_PORTA
) {
178 volatile ushort
*dirp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_padir
;
179 return ((*dirp
>> (15 - iopin
->pin
)) & 1) ^ 1;
180 } else if (iopin
->port
== IOPIN_PORTB
) {
181 volatile uint
*dirp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_cpm
.cp_pbdir
;
182 return ((*dirp
>> (31 - iopin
->pin
)) & 1) ^ 1;
183 } else if (iopin
->port
== IOPIN_PORTC
) {
184 volatile ushort
*dirp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcdir
;
185 return ((*dirp
>> (15 - iopin
->pin
)) & 1) ^ 1;
186 } else if (iopin
->port
== IOPIN_PORTD
) {
187 volatile ushort
*dirp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pddir
;
188 return ((*dirp
>> (15 - iopin
->pin
)) & 1) ^ 1;
193 extern __inline__
void
194 iopin_set_odr(iopin_t
*iopin
)
196 if (iopin
->port
== IOPIN_PORTA
) {
197 volatile ushort
*odrp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_paodr
;
198 *odrp
|= (1 << (15 - iopin
->pin
));
199 } else if (iopin
->port
== IOPIN_PORTB
) {
200 volatile ushort
*odrp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_cpm
.cp_pbodr
;
201 *odrp
|= (1 << (31 - iopin
->pin
));
205 extern __inline__
void
206 iopin_set_act(iopin_t
*iopin
)
208 if (iopin
->port
== IOPIN_PORTA
) {
209 volatile ushort
*odrp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_paodr
;
210 *odrp
&= ~(1 << (15 - iopin
->pin
));
211 } else if (iopin
->port
== IOPIN_PORTB
) {
212 volatile ushort
*odrp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_cpm
.cp_pbodr
;
213 *odrp
&= ~(1 << (31 - iopin
->pin
));
217 extern __inline__ uint
218 iopin_is_odr(iopin_t
*iopin
)
220 if (iopin
->port
== IOPIN_PORTA
) {
221 volatile ushort
*odrp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_paodr
;
222 return (*odrp
>> (15 - iopin
->pin
)) & 1;
223 } else if (iopin
->port
== IOPIN_PORTB
) {
224 volatile ushort
*odrp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_cpm
.cp_pbodr
;
225 return (*odrp
>> (31 - iopin
->pin
)) & 1;
230 extern __inline__ uint
231 iopin_is_act(iopin_t
*iopin
)
233 if (iopin
->port
== IOPIN_PORTA
) {
234 volatile ushort
*odrp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_paodr
;
235 return ((*odrp
>> (15 - iopin
->pin
)) & 1) ^ 1;
236 } else if (iopin
->port
== IOPIN_PORTB
) {
237 volatile ushort
*odrp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_cpm
.cp_pbodr
;
238 return ((*odrp
>> (31 - iopin
->pin
)) & 1) ^ 1;
243 extern __inline__
void
244 iopin_set_ded(iopin_t
*iopin
)
246 if (iopin
->port
== IOPIN_PORTA
) {
247 volatile ushort
*parp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_papar
;
248 *parp
|= (1 << (15 - iopin
->pin
));
249 } else if (iopin
->port
== IOPIN_PORTB
) {
250 volatile uint
*parp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_cpm
.cp_pbpar
;
251 *parp
|= (1 << (31 - iopin
->pin
));
252 } else if (iopin
->port
== IOPIN_PORTC
) {
253 volatile ushort
*parp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcpar
;
254 *parp
|= (1 << (15 - iopin
->pin
));
255 } else if (iopin
->port
== IOPIN_PORTD
) {
256 volatile ushort
*parp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pdpar
;
257 *parp
|= (1 << (15 - iopin
->pin
));
261 extern __inline__
void
262 iopin_set_gen(iopin_t
*iopin
)
264 if (iopin
->port
== IOPIN_PORTA
) {
265 volatile ushort
*parp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_papar
;
266 *parp
&= ~(1 << (15 - iopin
->pin
));
267 } else if (iopin
->port
== IOPIN_PORTB
) {
268 volatile uint
*parp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_cpm
.cp_pbpar
;
269 *parp
&= ~(1 << (31 - iopin
->pin
));
270 } else if (iopin
->port
== IOPIN_PORTC
) {
271 volatile ushort
*parp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcpar
;
272 *parp
&= ~(1 << (15 - iopin
->pin
));
273 } else if (iopin
->port
== IOPIN_PORTD
) {
274 volatile ushort
*parp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pdpar
;
275 *parp
&= ~(1 << (15 - iopin
->pin
));
279 extern __inline__ uint
280 iopin_is_ded(iopin_t
*iopin
)
282 if (iopin
->port
== IOPIN_PORTA
) {
283 volatile ushort
*parp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_papar
;
284 return (*parp
>> (15 - iopin
->pin
)) & 1;
285 } else if (iopin
->port
== IOPIN_PORTB
) {
286 volatile uint
*parp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_cpm
.cp_pbpar
;
287 return (*parp
>> (31 - iopin
->pin
)) & 1;
288 } else if (iopin
->port
== IOPIN_PORTC
) {
289 volatile ushort
*parp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcpar
;
290 return (*parp
>> (15 - iopin
->pin
)) & 1;
291 } else if (iopin
->port
== IOPIN_PORTD
) {
292 volatile ushort
*parp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pdpar
;
293 return (*parp
>> (15 - iopin
->pin
)) & 1;
298 extern __inline__ uint
299 iopin_is_gen(iopin_t
*iopin
)
301 if (iopin
->port
== IOPIN_PORTA
) {
302 volatile ushort
*parp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_papar
;
303 return ((*parp
>> (15 - iopin
->pin
)) & 1) ^ 1;
304 } else if (iopin
->port
== IOPIN_PORTB
) {
305 volatile uint
*parp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_cpm
.cp_pbpar
;
306 return ((*parp
>> (31 - iopin
->pin
)) & 1) ^ 1;
307 } else if (iopin
->port
== IOPIN_PORTC
) {
308 volatile ushort
*parp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcpar
;
309 return ((*parp
>> (15 - iopin
->pin
)) & 1) ^ 1;
310 } else if (iopin
->port
== IOPIN_PORTD
) {
311 volatile ushort
*parp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pdpar
;
312 return ((*parp
>> (15 - iopin
->pin
)) & 1) ^ 1;
317 extern __inline__
void
318 iopin_set_opt2(iopin_t
*iopin
)
320 if (iopin
->port
== IOPIN_PORTC
) {
321 volatile ushort
*sorp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcso
;
322 *sorp
|= (1 << (15 - iopin
->pin
));
326 extern __inline__
void
327 iopin_set_opt1(iopin_t
*iopin
)
329 if (iopin
->port
== IOPIN_PORTC
) {
330 volatile ushort
*sorp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcso
;
331 *sorp
&= ~(1 << (15 - iopin
->pin
));
335 extern __inline__ uint
336 iopin_is_opt2(iopin_t
*iopin
)
338 if (iopin
->port
== IOPIN_PORTC
) {
339 volatile ushort
*sorp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcso
;
340 return (*sorp
>> (15 - iopin
->pin
)) & 1;
345 extern __inline__ uint
346 iopin_is_opt1(iopin_t
*iopin
)
348 if (iopin
->port
== IOPIN_PORTC
) {
349 volatile ushort
*sorp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcso
;
350 return ((*sorp
>> (15 - iopin
->pin
)) & 1) ^ 1;
355 extern __inline__
void
356 iopin_set_falledge(iopin_t
*iopin
)
358 if (iopin
->port
== IOPIN_PORTC
) {
359 volatile ushort
*intp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcint
;
360 *intp
|= (1 << (15 - iopin
->pin
));
364 extern __inline__
void
365 iopin_set_anyedge(iopin_t
*iopin
)
367 if (iopin
->port
== IOPIN_PORTC
) {
368 volatile ushort
*intp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcint
;
369 *intp
&= ~(1 << (15 - iopin
->pin
));
373 extern __inline__ uint
374 iopin_is_falledge(iopin_t
*iopin
)
376 if (iopin
->port
== IOPIN_PORTC
) {
377 volatile ushort
*intp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcint
;
378 return (*intp
>> (15 - iopin
->pin
)) & 1;
383 extern __inline__ uint
384 iopin_is_anyedge(iopin_t
*iopin
)
386 if (iopin
->port
== IOPIN_PORTC
) {
387 volatile ushort
*intp
= &((immap_t
*)CONFIG_SYS_IMMR
)->im_ioport
.iop_pcint
;
388 return ((*intp
>> (15 - iopin
->pin
)) & 1) ^ 1;
393 #endif /* __KERNEL__ */
395 #endif /* _ASM_IOPIN_8XX_H_ */