1*b886d83cSThomas 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