iopin_8260.h 4.3 KB

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