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 iopin_set_high(iopin_t * iopin)27iopin_set_high(iopin_t *iopin) 28 { 29 volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdata; 30 datp[iopin->port * 8] |= (1 << (31 - iopin->pin)); 31 } 32 33 extern __inline__ void iopin_set_low(iopin_t * iopin)34iopin_set_low(iopin_t *iopin) 35 { 36 volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdata; 37 datp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); 38 } 39 40 extern __inline__ uint iopin_is_high(iopin_t * iopin)41iopin_is_high(iopin_t *iopin) 42 { 43 volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdata; 44 return (datp[iopin->port * 8] >> (31 - iopin->pin)) & 1; 45 } 46 47 extern __inline__ uint iopin_is_low(iopin_t * iopin)48iopin_is_low(iopin_t *iopin) 49 { 50 volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdata; 51 return ((datp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; 52 } 53 54 extern __inline__ void iopin_set_out(iopin_t * iopin)55iopin_set_out(iopin_t *iopin) 56 { 57 volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdira; 58 dirp[iopin->port * 8] |= (1 << (31 - iopin->pin)); 59 } 60 61 extern __inline__ void iopin_set_in(iopin_t * iopin)62iopin_set_in(iopin_t *iopin) 63 { 64 volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdira; 65 dirp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); 66 } 67 68 extern __inline__ uint iopin_is_out(iopin_t * iopin)69iopin_is_out(iopin_t *iopin) 70 { 71 volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdira; 72 return (dirp[iopin->port * 8] >> (31 - iopin->pin)) & 1; 73 } 74 75 extern __inline__ uint iopin_is_in(iopin_t * iopin)76iopin_is_in(iopin_t *iopin) 77 { 78 volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdira; 79 return ((dirp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; 80 } 81 82 extern __inline__ void iopin_set_odr(iopin_t * iopin)83iopin_set_odr(iopin_t *iopin) 84 { 85 volatile uint *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_podra; 86 odrp[iopin->port * 8] |= (1 << (31 - iopin->pin)); 87 } 88 89 extern __inline__ void iopin_set_act(iopin_t * iopin)90iopin_set_act(iopin_t *iopin) 91 { 92 volatile uint *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_podra; 93 odrp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); 94 } 95 96 extern __inline__ uint iopin_is_odr(iopin_t * iopin)97iopin_is_odr(iopin_t *iopin) 98 { 99 volatile uint *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_podra; 100 return (odrp[iopin->port * 8] >> (31 - iopin->pin)) & 1; 101 } 102 103 extern __inline__ uint iopin_is_act(iopin_t * iopin)104iopin_is_act(iopin_t *iopin) 105 { 106 volatile uint *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_podra; 107 return ((odrp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; 108 } 109 110 extern __inline__ void iopin_set_ded(iopin_t * iopin)111iopin_set_ded(iopin_t *iopin) 112 { 113 volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_ppara; 114 parp[iopin->port * 8] |= (1 << (31 - iopin->pin)); 115 } 116 117 extern __inline__ void iopin_set_gen(iopin_t * iopin)118iopin_set_gen(iopin_t *iopin) 119 { 120 volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_ppara; 121 parp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); 122 } 123 124 extern __inline__ uint iopin_is_ded(iopin_t * iopin)125iopin_is_ded(iopin_t *iopin) 126 { 127 volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_ppara; 128 return (parp[iopin->port * 8] >> (31 - iopin->pin)) & 1; 129 } 130 131 extern __inline__ uint iopin_is_gen(iopin_t * iopin)132iopin_is_gen(iopin_t *iopin) 133 { 134 volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_ppara; 135 return ((parp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; 136 } 137 138 extern __inline__ void iopin_set_opt2(iopin_t * iopin)139iopin_set_opt2(iopin_t *iopin) 140 { 141 volatile uint *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_psora; 142 sorp[iopin->port * 8] |= (1 << (31 - iopin->pin)); 143 } 144 145 extern __inline__ void iopin_set_opt1(iopin_t * iopin)146iopin_set_opt1(iopin_t *iopin) 147 { 148 volatile uint *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_psora; 149 sorp[iopin->port * 8] &= ~(1 << (31 - iopin->pin)); 150 } 151 152 extern __inline__ uint iopin_is_opt2(iopin_t * iopin)153iopin_is_opt2(iopin_t *iopin) 154 { 155 volatile uint *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_psora; 156 return (sorp[iopin->port * 8] >> (31 - iopin->pin)) & 1; 157 } 158 159 extern __inline__ uint iopin_is_opt1(iopin_t * iopin)160iopin_is_opt1(iopin_t *iopin) 161 { 162 volatile uint *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_psora; 163 return ((sorp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1; 164 } 165 166 #endif /* __KERNEL__ */ 167 168 #endif /* _ASM_IOPIN_8260_H_ */ 169