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