]>
Commit | Line | Data |
---|---|---|
2dab301c WD |
1 | /* |
2 | * MPC8260 I/O port pin manipulation functions | |
3 | */ | |
4 | ||
5 | #ifndef _ASM_IOPIN_8260_H_ | |
6 | #define _ASM_IOPIN_8260_H_ | |
7 | ||
8 | #include <linux/types.h> | |
9 | #include <asm/immap_8260.h> | |
10 | ||
11 | #ifdef __KERNEL__ | |
12 | ||
13 | typedef | |
14 | struct { | |
15 | u_char port:2; /* port number (A=0, B=1, C=2, D=3) */ | |
16 | u_char pin:5; /* port pin (0-31) */ | |
17 | u_char flag:1; /* for whatever */ | |
18 | } | |
19 | iopin_t; | |
20 | ||
21 | #define IOPIN_PORTA 0 | |
22 | #define IOPIN_PORTB 1 | |
23 | #define IOPIN_PORTC 2 | |
24 | #define IOPIN_PORTD 3 | |
25 | ||
26 | extern __inline__ void | |
27 | iopin_set_high(iopin_t *iopin) | |
28 | { | |
6d0f6bcf | 29 | volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdata; |
2dab301c WD |
30 | datp[iopin->port * 8] |= (1 << (31 - iopin->pin)); |
31 | } | |
32 | ||
33 | extern __inline__ void | |
34 | iopin_set_low(iopin_t *iopin) | |
35 | { | |
6d0f6bcf | 36 | volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdata; |
2dab301c WD |
37 | datp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); |
38 | } | |
39 | ||
40 | extern __inline__ uint | |
41 | iopin_is_high(iopin_t *iopin) | |
42 | { | |
6d0f6bcf | 43 | volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdata; |
2dab301c WD |
44 | return (datp[iopin->port * 8] >> (31 - iopin->pin)) & 1; |
45 | } | |
46 | ||
47 | extern __inline__ uint | |
48 | iopin_is_low(iopin_t *iopin) | |
49 | { | |
6d0f6bcf | 50 | volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdata; |
2dab301c WD |
51 | return ((datp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; |
52 | } | |
53 | ||
54 | extern __inline__ void | |
55 | iopin_set_out(iopin_t *iopin) | |
56 | { | |
6d0f6bcf | 57 | volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdira; |
2dab301c WD |
58 | dirp[iopin->port * 8] |= (1 << (31 - iopin->pin)); |
59 | } | |
60 | ||
61 | extern __inline__ void | |
62 | iopin_set_in(iopin_t *iopin) | |
63 | { | |
6d0f6bcf | 64 | volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdira; |
2dab301c WD |
65 | dirp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); |
66 | } | |
67 | ||
68 | extern __inline__ uint | |
69 | iopin_is_out(iopin_t *iopin) | |
70 | { | |
6d0f6bcf | 71 | volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdira; |
2dab301c WD |
72 | return (dirp[iopin->port * 8] >> (31 - iopin->pin)) & 1; |
73 | } | |
74 | ||
75 | extern __inline__ uint | |
76 | iopin_is_in(iopin_t *iopin) | |
77 | { | |
6d0f6bcf | 78 | volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdira; |
2dab301c WD |
79 | return ((dirp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; |
80 | } | |
81 | ||
82 | extern __inline__ void | |
83 | iopin_set_odr(iopin_t *iopin) | |
84 | { | |
6d0f6bcf | 85 | volatile uint *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_podra; |
2dab301c WD |
86 | odrp[iopin->port * 8] |= (1 << (31 - iopin->pin)); |
87 | } | |
88 | ||
89 | extern __inline__ void | |
90 | iopin_set_act(iopin_t *iopin) | |
91 | { | |
6d0f6bcf | 92 | volatile uint *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_podra; |
2dab301c WD |
93 | odrp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); |
94 | } | |
95 | ||
96 | extern __inline__ uint | |
97 | iopin_is_odr(iopin_t *iopin) | |
98 | { | |
6d0f6bcf | 99 | volatile uint *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_podra; |
2dab301c WD |
100 | return (odrp[iopin->port * 8] >> (31 - iopin->pin)) & 1; |
101 | } | |
102 | ||
103 | extern __inline__ uint | |
104 | iopin_is_act(iopin_t *iopin) | |
105 | { | |
6d0f6bcf | 106 | volatile uint *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_podra; |
2dab301c WD |
107 | return ((odrp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; |
108 | } | |
109 | ||
110 | extern __inline__ void | |
111 | iopin_set_ded(iopin_t *iopin) | |
112 | { | |
6d0f6bcf | 113 | volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_ppara; |
2dab301c WD |
114 | parp[iopin->port * 8] |= (1 << (31 - iopin->pin)); |
115 | } | |
116 | ||
117 | extern __inline__ void | |
118 | iopin_set_gen(iopin_t *iopin) | |
119 | { | |
6d0f6bcf | 120 | volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_ppara; |
2dab301c WD |
121 | parp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); |
122 | } | |
123 | ||
124 | extern __inline__ uint | |
125 | iopin_is_ded(iopin_t *iopin) | |
126 | { | |
6d0f6bcf | 127 | volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_ppara; |
2dab301c WD |
128 | return (parp[iopin->port * 8] >> (31 - iopin->pin)) & 1; |
129 | } | |
130 | ||
131 | extern __inline__ uint | |
132 | iopin_is_gen(iopin_t *iopin) | |
133 | { | |
6d0f6bcf | 134 | volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_ppara; |
2dab301c WD |
135 | return ((parp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; |
136 | } | |
137 | ||
138 | extern __inline__ void | |
139 | iopin_set_opt2(iopin_t *iopin) | |
140 | { | |
6d0f6bcf | 141 | volatile uint *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_psora; |
2dab301c WD |
142 | sorp[iopin->port * 8] |= (1 << (31 - iopin->pin)); |
143 | } | |
144 | ||
145 | extern __inline__ void | |
146 | iopin_set_opt1(iopin_t *iopin) | |
147 | { | |
6d0f6bcf | 148 | volatile uint *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_psora; |
2dab301c WD |
149 | sorp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); |
150 | } | |
151 | ||
152 | extern __inline__ uint | |
153 | iopin_is_opt2(iopin_t *iopin) | |
154 | { | |
6d0f6bcf | 155 | volatile uint *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_psora; |
2dab301c WD |
156 | return (sorp[iopin->port * 8] >> (31 - iopin->pin)) & 1; |
157 | } | |
158 | ||
159 | extern __inline__ uint | |
160 | iopin_is_opt1(iopin_t *iopin) | |
161 | { | |
6d0f6bcf | 162 | volatile uint *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_psora; |
2dab301c WD |
163 | return ((sorp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; |
164 | } | |
165 | ||
166 | #endif /* __KERNEL__ */ | |
167 | ||
168 | #endif /* _ASM_IOPIN_8260_H_ */ |