1b886d83cSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
273317712SRobert Jarzmik /*
373317712SRobert Jarzmik  * Marvell PXA2xx family pin control
473317712SRobert Jarzmik  *
573317712SRobert Jarzmik  * Copyright (C) 2015 Robert Jarzmik
673317712SRobert Jarzmik  */
773317712SRobert Jarzmik 
873317712SRobert Jarzmik #ifndef __PINCTRL_PXA_H
973317712SRobert Jarzmik #define __PINCTRL_PXA_H
1073317712SRobert Jarzmik 
1173317712SRobert Jarzmik #define PXA_FUNCTION(_dir, _af, _name)				\
1273317712SRobert Jarzmik 	{							\
1373317712SRobert Jarzmik 		.name = _name,					\
1473317712SRobert Jarzmik 		.muxval = (_dir | (_af << 1)),			\
1573317712SRobert Jarzmik 	}
1673317712SRobert Jarzmik 
1773317712SRobert Jarzmik #define PXA_PIN(_pin, funcs...)					\
1873317712SRobert Jarzmik 	{							\
1973317712SRobert Jarzmik 		.pin = _pin,					\
2073317712SRobert Jarzmik 		.functions = (struct pxa_desc_function[]){	\
2173317712SRobert Jarzmik 			funcs, { } },				\
2273317712SRobert Jarzmik 	}
2373317712SRobert Jarzmik 
2473317712SRobert Jarzmik #define PXA_GPIO_PIN(_pin, funcs...)				\
2573317712SRobert Jarzmik 	{							\
2673317712SRobert Jarzmik 		.pin = _pin,					\
2773317712SRobert Jarzmik 		.functions = (struct pxa_desc_function[]){	\
2873317712SRobert Jarzmik 			PXA_FUNCTION(0, 0, "gpio_in"),		\
2973317712SRobert Jarzmik 			PXA_FUNCTION(1, 0, "gpio_out"),		\
3073317712SRobert Jarzmik 			funcs, { } },				\
3173317712SRobert Jarzmik 	}
3273317712SRobert Jarzmik 
3373317712SRobert Jarzmik #define PXA_GPIO_ONLY_PIN(_pin)					\
3473317712SRobert Jarzmik 	{							\
3573317712SRobert Jarzmik 		.pin = _pin,					\
3673317712SRobert Jarzmik 		.functions = (struct pxa_desc_function[]){	\
3773317712SRobert Jarzmik 			PXA_FUNCTION(0, 0, "gpio_in"),		\
3873317712SRobert Jarzmik 			PXA_FUNCTION(1, 0, "gpio_out"),		\
3973317712SRobert Jarzmik 			{ } },					\
4073317712SRobert Jarzmik 	}
4173317712SRobert Jarzmik 
4273317712SRobert Jarzmik #define PXA_PINCTRL_PIN(pin)		\
4373317712SRobert Jarzmik 	PINCTRL_PIN(pin, "P" #pin)
4473317712SRobert Jarzmik 
4573317712SRobert Jarzmik struct pxa_desc_function {
4673317712SRobert Jarzmik 	const char	*name;
4773317712SRobert Jarzmik 	u8		muxval;
4873317712SRobert Jarzmik };
4973317712SRobert Jarzmik 
5073317712SRobert Jarzmik struct pxa_desc_pin {
5173317712SRobert Jarzmik 	struct pinctrl_pin_desc		pin;
5273317712SRobert Jarzmik 	struct pxa_desc_function	*functions;
5373317712SRobert Jarzmik };
5473317712SRobert Jarzmik 
5573317712SRobert Jarzmik struct pxa_pinctrl_group {
5673317712SRobert Jarzmik 	const char	*name;
5773317712SRobert Jarzmik 	unsigned	pin;
5873317712SRobert Jarzmik };
5973317712SRobert Jarzmik 
6073317712SRobert Jarzmik struct pxa_pinctrl_function {
6173317712SRobert Jarzmik 	const char	*name;
6273317712SRobert Jarzmik 	const char	**groups;
6373317712SRobert Jarzmik 	unsigned	ngroups;
6473317712SRobert Jarzmik };
6573317712SRobert Jarzmik 
6673317712SRobert Jarzmik struct pxa_pinctrl {
6773317712SRobert Jarzmik 	spinlock_t			lock;
6873317712SRobert Jarzmik 	void __iomem			**base_gafr;
6973317712SRobert Jarzmik 	void __iomem			**base_gpdr;
7073317712SRobert Jarzmik 	void __iomem			**base_pgsr;
7173317712SRobert Jarzmik 	struct device			*dev;
7273317712SRobert Jarzmik 	struct pinctrl_desc		desc;
7373317712SRobert Jarzmik 	struct pinctrl_dev		*pctl_dev;
7473317712SRobert Jarzmik 	unsigned			npins;
7573317712SRobert Jarzmik 	const struct pxa_desc_pin	*ppins;
7673317712SRobert Jarzmik 	unsigned			ngroups;
7773317712SRobert Jarzmik 	struct pxa_pinctrl_group	*groups;
7873317712SRobert Jarzmik 	unsigned			nfuncs;
7973317712SRobert Jarzmik 	struct pxa_pinctrl_function	*functions;
8073317712SRobert Jarzmik 	char				*name;
8173317712SRobert Jarzmik };
8273317712SRobert Jarzmik 
8373317712SRobert Jarzmik int pxa2xx_pinctrl_init(struct platform_device *pdev,
8473317712SRobert Jarzmik 			const struct pxa_desc_pin *ppins, int npins,
8573317712SRobert Jarzmik 			void __iomem *base_gafr[], void __iomem *base_gpdr[],
8673317712SRobert Jarzmik 			void __iomem *base_gpsr[]);
8773317712SRobert Jarzmik 
8873317712SRobert Jarzmik #endif /* __PINCTRL_PXA_H */
89