1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Marvell PXA2xx family pin control 4 * 5 * Copyright (C) 2015 Robert Jarzmik 6 */ 7 8 #ifndef __PINCTRL_PXA_H 9 #define __PINCTRL_PXA_H 10 11 #define PXA_FUNCTION(_dir, _af, _name) \ 12 { \ 13 .name = _name, \ 14 .muxval = (_dir | (_af << 1)), \ 15 } 16 17 #define PXA_PIN(_pin, funcs...) \ 18 { \ 19 .pin = _pin, \ 20 .functions = (struct pxa_desc_function[]){ \ 21 funcs, { } }, \ 22 } 23 24 #define PXA_GPIO_PIN(_pin, funcs...) \ 25 { \ 26 .pin = _pin, \ 27 .functions = (struct pxa_desc_function[]){ \ 28 PXA_FUNCTION(0, 0, "gpio_in"), \ 29 PXA_FUNCTION(1, 0, "gpio_out"), \ 30 funcs, { } }, \ 31 } 32 33 #define PXA_GPIO_ONLY_PIN(_pin) \ 34 { \ 35 .pin = _pin, \ 36 .functions = (struct pxa_desc_function[]){ \ 37 PXA_FUNCTION(0, 0, "gpio_in"), \ 38 PXA_FUNCTION(1, 0, "gpio_out"), \ 39 { } }, \ 40 } 41 42 #define PXA_PINCTRL_PIN(pin) \ 43 PINCTRL_PIN(pin, "P" #pin) 44 45 struct pxa_desc_function { 46 const char *name; 47 u8 muxval; 48 }; 49 50 struct pxa_desc_pin { 51 struct pinctrl_pin_desc pin; 52 struct pxa_desc_function *functions; 53 }; 54 55 struct pxa_pinctrl_group { 56 const char *name; 57 unsigned pin; 58 }; 59 60 struct pxa_pinctrl_function { 61 const char *name; 62 const char **groups; 63 unsigned ngroups; 64 }; 65 66 struct pxa_pinctrl { 67 spinlock_t lock; 68 void __iomem **base_gafr; 69 void __iomem **base_gpdr; 70 void __iomem **base_pgsr; 71 struct device *dev; 72 struct pinctrl_desc desc; 73 struct pinctrl_dev *pctl_dev; 74 unsigned npins; 75 const struct pxa_desc_pin *ppins; 76 unsigned ngroups; 77 struct pxa_pinctrl_group *groups; 78 unsigned nfuncs; 79 struct pxa_pinctrl_function *functions; 80 char *name; 81 }; 82 83 int pxa2xx_pinctrl_init(struct platform_device *pdev, 84 const struct pxa_desc_pin *ppins, int npins, 85 void __iomem *base_gafr[], void __iomem *base_gpdr[], 86 void __iomem *base_gpsr[]); 87 88 #endif /* __PINCTRL_PXA_H */ 89