diff options
Diffstat (limited to 'include/linux/sh_pfc.h')
| -rw-r--r-- | include/linux/sh_pfc.h | 76 | 
1 files changed, 76 insertions, 0 deletions
diff --git a/include/linux/sh_pfc.h b/include/linux/sh_pfc.h index bc8c9208f7e..8446789216e 100644 --- a/include/linux/sh_pfc.h +++ b/include/linux/sh_pfc.h @@ -104,4 +104,80 @@ struct pinmux_info {  int register_pinmux(struct pinmux_info *pip);  int unregister_pinmux(struct pinmux_info *pip); +/* helper macro for port */ +#define PORT_1(fn, pfx, sfx) fn(pfx, sfx) + +#define PORT_10(fn, pfx, sfx) \ +	PORT_1(fn, pfx##0, sfx), PORT_1(fn, pfx##1, sfx),	\ +	PORT_1(fn, pfx##2, sfx), PORT_1(fn, pfx##3, sfx),	\ +	PORT_1(fn, pfx##4, sfx), PORT_1(fn, pfx##5, sfx),	\ +	PORT_1(fn, pfx##6, sfx), PORT_1(fn, pfx##7, sfx),	\ +	PORT_1(fn, pfx##8, sfx), PORT_1(fn, pfx##9, sfx) + +#define PORT_90(fn, pfx, sfx) \ +	PORT_10(fn, pfx##1, sfx), PORT_10(fn, pfx##2, sfx),	\ +	PORT_10(fn, pfx##3, sfx), PORT_10(fn, pfx##4, sfx),	\ +	PORT_10(fn, pfx##5, sfx), PORT_10(fn, pfx##6, sfx),	\ +	PORT_10(fn, pfx##7, sfx), PORT_10(fn, pfx##8, sfx),	\ +	PORT_10(fn, pfx##9, sfx) + +#define _PORT_ALL(pfx, sfx) pfx##_##sfx +#define _GPIO_PORT(pfx, sfx) PINMUX_GPIO(GPIO_PORT##pfx, PORT##pfx##_DATA) +#define PORT_ALL(str)	CPU_ALL_PORT(_PORT_ALL, PORT, str) +#define GPIO_PORT_ALL()	CPU_ALL_PORT(_GPIO_PORT, , unused) +#define GPIO_FN(str) PINMUX_GPIO(GPIO_FN_##str, str##_MARK) + +/* helper macro for pinmux_enum_t */ +#define PORT_DATA_I(nr)	\ +	PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_IN) + +#define PORT_DATA_I_PD(nr)	\ +	PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0,	\ +		    PORT##nr##_IN, PORT##nr##_IN_PD) + +#define PORT_DATA_I_PU(nr)	\ +	PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0,	\ +		    PORT##nr##_IN, PORT##nr##_IN_PU) + +#define PORT_DATA_I_PU_PD(nr)	\ +	PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0,			\ +		    PORT##nr##_IN, PORT##nr##_IN_PD, PORT##nr##_IN_PU) + +#define PORT_DATA_O(nr)		\ +	PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT) + +#define PORT_DATA_IO(nr)	\ +	PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT,	\ +		    PORT##nr##_IN) + +#define PORT_DATA_IO_PD(nr)	\ +	PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT,	\ +		    PORT##nr##_IN, PORT##nr##_IN_PD) + +#define PORT_DATA_IO_PU(nr)	\ +	PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT,	\ +		    PORT##nr##_IN, PORT##nr##_IN_PU) + +#define PORT_DATA_IO_PU_PD(nr)	\ +	PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT,	\ +		    PORT##nr##_IN, PORT##nr##_IN_PD, PORT##nr##_IN_PU) + +/* helper macro for top 4 bits in PORTnCR */ +#define _PCRH(in, in_pd, in_pu, out)	\ +	0, (out), (in), 0,		\ +	0, 0, 0, 0,			\ +	0, 0, (in_pd), 0,		\ +	0, 0, (in_pu), 0 + +#define PORTCR(nr, reg)							\ +	{								\ +		PINMUX_CFG_REG("PORT" nr "CR", reg, 8, 4) {		\ +			_PCRH(PORT##nr##_IN, PORT##nr##_IN_PD,		\ +			      PORT##nr##_IN_PU, PORT##nr##_OUT),	\ +				PORT##nr##_FN0, PORT##nr##_FN1,		\ +				PORT##nr##_FN2, PORT##nr##_FN3,		\ +				PORT##nr##_FN4, PORT##nr##_FN5,		\ +				PORT##nr##_FN6, PORT##nr##_FN7 }	\ +	} +  #endif /* __SH_PFC_H */  |