a47a12becf
As discussed on the list, move "arch/ppc" to "arch/powerpc" to better match the Linux directory structure. Please note that this patch also changes the "ppc" target in MAKEALL to "powerpc" to match this new infrastructure. But "ppc" is kept as an alias for now, to not break compatibility with scripts using this name. Signed-off-by: Stefan Roese <sr@denx.de> Acked-by: Wolfgang Denk <wd@denx.de> Acked-by: Detlev Zundel <dzu@denx.de> Acked-by: Kim Phillips <kim.phillips@freescale.com> Cc: Peter Tyser <ptyser@xes-inc.com> Cc: Anatolij Gustschin <agust@denx.de>
169 lines
4.3 KiB
C
169 lines
4.3 KiB
C
/*
|
|
* MPC8260 I/O port pin manipulation functions
|
|
*/
|
|
|
|
#ifndef _ASM_IOPIN_8260_H_
|
|
#define _ASM_IOPIN_8260_H_
|
|
|
|
#include <linux/types.h>
|
|
#include <asm/immap_8260.h>
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
typedef
|
|
struct {
|
|
u_char port:2; /* port number (A=0, B=1, C=2, D=3) */
|
|
u_char pin:5; /* port pin (0-31) */
|
|
u_char flag:1; /* for whatever */
|
|
}
|
|
iopin_t;
|
|
|
|
#define IOPIN_PORTA 0
|
|
#define IOPIN_PORTB 1
|
|
#define IOPIN_PORTC 2
|
|
#define IOPIN_PORTD 3
|
|
|
|
extern __inline__ void
|
|
iopin_set_high(iopin_t *iopin)
|
|
{
|
|
volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdata;
|
|
datp[iopin->port * 8] |= (1 << (31 - iopin->pin));
|
|
}
|
|
|
|
extern __inline__ void
|
|
iopin_set_low(iopin_t *iopin)
|
|
{
|
|
volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdata;
|
|
datp[iopin->port * 8] &= ~(1 << (31 - iopin->pin));
|
|
}
|
|
|
|
extern __inline__ uint
|
|
iopin_is_high(iopin_t *iopin)
|
|
{
|
|
volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdata;
|
|
return (datp[iopin->port * 8] >> (31 - iopin->pin)) & 1;
|
|
}
|
|
|
|
extern __inline__ uint
|
|
iopin_is_low(iopin_t *iopin)
|
|
{
|
|
volatile uint *datp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdata;
|
|
return ((datp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1;
|
|
}
|
|
|
|
extern __inline__ void
|
|
iopin_set_out(iopin_t *iopin)
|
|
{
|
|
volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdira;
|
|
dirp[iopin->port * 8] |= (1 << (31 - iopin->pin));
|
|
}
|
|
|
|
extern __inline__ void
|
|
iopin_set_in(iopin_t *iopin)
|
|
{
|
|
volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdira;
|
|
dirp[iopin->port * 8] &= ~(1 << (31 - iopin->pin));
|
|
}
|
|
|
|
extern __inline__ uint
|
|
iopin_is_out(iopin_t *iopin)
|
|
{
|
|
volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdira;
|
|
return (dirp[iopin->port * 8] >> (31 - iopin->pin)) & 1;
|
|
}
|
|
|
|
extern __inline__ uint
|
|
iopin_is_in(iopin_t *iopin)
|
|
{
|
|
volatile uint *dirp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_pdira;
|
|
return ((dirp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1;
|
|
}
|
|
|
|
extern __inline__ void
|
|
iopin_set_odr(iopin_t *iopin)
|
|
{
|
|
volatile uint *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_podra;
|
|
odrp[iopin->port * 8] |= (1 << (31 - iopin->pin));
|
|
}
|
|
|
|
extern __inline__ void
|
|
iopin_set_act(iopin_t *iopin)
|
|
{
|
|
volatile uint *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_podra;
|
|
odrp[iopin->port * 8] &= ~(1 << (31 - iopin->pin));
|
|
}
|
|
|
|
extern __inline__ uint
|
|
iopin_is_odr(iopin_t *iopin)
|
|
{
|
|
volatile uint *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_podra;
|
|
return (odrp[iopin->port * 8] >> (31 - iopin->pin)) & 1;
|
|
}
|
|
|
|
extern __inline__ uint
|
|
iopin_is_act(iopin_t *iopin)
|
|
{
|
|
volatile uint *odrp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_podra;
|
|
return ((odrp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1;
|
|
}
|
|
|
|
extern __inline__ void
|
|
iopin_set_ded(iopin_t *iopin)
|
|
{
|
|
volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_ppara;
|
|
parp[iopin->port * 8] |= (1 << (31 - iopin->pin));
|
|
}
|
|
|
|
extern __inline__ void
|
|
iopin_set_gen(iopin_t *iopin)
|
|
{
|
|
volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_ppara;
|
|
parp[iopin->port * 8] &= ~(1 << (31 - iopin->pin));
|
|
}
|
|
|
|
extern __inline__ uint
|
|
iopin_is_ded(iopin_t *iopin)
|
|
{
|
|
volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_ppara;
|
|
return (parp[iopin->port * 8] >> (31 - iopin->pin)) & 1;
|
|
}
|
|
|
|
extern __inline__ uint
|
|
iopin_is_gen(iopin_t *iopin)
|
|
{
|
|
volatile uint *parp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_ppara;
|
|
return ((parp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1;
|
|
}
|
|
|
|
extern __inline__ void
|
|
iopin_set_opt2(iopin_t *iopin)
|
|
{
|
|
volatile uint *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_psora;
|
|
sorp[iopin->port * 8] |= (1 << (31 - iopin->pin));
|
|
}
|
|
|
|
extern __inline__ void
|
|
iopin_set_opt1(iopin_t *iopin)
|
|
{
|
|
volatile uint *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_psora;
|
|
sorp[iopin->port * 8] &= ~(1 << (31 - iopin->pin));
|
|
}
|
|
|
|
extern __inline__ uint
|
|
iopin_is_opt2(iopin_t *iopin)
|
|
{
|
|
volatile uint *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_psora;
|
|
return (sorp[iopin->port * 8] >> (31 - iopin->pin)) & 1;
|
|
}
|
|
|
|
extern __inline__ uint
|
|
iopin_is_opt1(iopin_t *iopin)
|
|
{
|
|
volatile uint *sorp = &((immap_t *)CONFIG_SYS_IMMR)->im_ioport.iop_psora;
|
|
return ((sorp[iopin->port * 8] >> (31 - iopin->pin)) & 1) ^ 1;
|
|
}
|
|
|
|
#endif /* __KERNEL__ */
|
|
|
|
#endif /* _ASM_IOPIN_8260_H_ */
|