0001
0002
0003
0004
0005
0006
0007
0008 #ifndef __PINCTRL_PXA_H
0009 #define __PINCTRL_PXA_H
0010
0011 #define PXA_FUNCTION(_dir, _af, _name) \
0012 { \
0013 .name = _name, \
0014 .muxval = (_dir | (_af << 1)), \
0015 }
0016
0017 #define PXA_PIN(_pin, funcs...) \
0018 { \
0019 .pin = _pin, \
0020 .functions = (struct pxa_desc_function[]){ \
0021 funcs, { } }, \
0022 }
0023
0024 #define PXA_GPIO_PIN(_pin, funcs...) \
0025 { \
0026 .pin = _pin, \
0027 .functions = (struct pxa_desc_function[]){ \
0028 PXA_FUNCTION(0, 0, "gpio_in"), \
0029 PXA_FUNCTION(1, 0, "gpio_out"), \
0030 funcs, { } }, \
0031 }
0032
0033 #define PXA_GPIO_ONLY_PIN(_pin) \
0034 { \
0035 .pin = _pin, \
0036 .functions = (struct pxa_desc_function[]){ \
0037 PXA_FUNCTION(0, 0, "gpio_in"), \
0038 PXA_FUNCTION(1, 0, "gpio_out"), \
0039 { } }, \
0040 }
0041
0042 #define PXA_PINCTRL_PIN(pin) \
0043 PINCTRL_PIN(pin, "P" #pin)
0044
0045 struct pxa_desc_function {
0046 const char *name;
0047 u8 muxval;
0048 };
0049
0050 struct pxa_desc_pin {
0051 struct pinctrl_pin_desc pin;
0052 struct pxa_desc_function *functions;
0053 };
0054
0055 struct pxa_pinctrl_group {
0056 const char *name;
0057 unsigned pin;
0058 };
0059
0060 struct pxa_pinctrl_function {
0061 const char *name;
0062 const char **groups;
0063 unsigned ngroups;
0064 };
0065
0066 struct pxa_pinctrl {
0067 spinlock_t lock;
0068 void __iomem **base_gafr;
0069 void __iomem **base_gpdr;
0070 void __iomem **base_pgsr;
0071 struct device *dev;
0072 struct pinctrl_desc desc;
0073 struct pinctrl_dev *pctl_dev;
0074 unsigned npins;
0075 const struct pxa_desc_pin *ppins;
0076 unsigned ngroups;
0077 struct pxa_pinctrl_group *groups;
0078 unsigned nfuncs;
0079 struct pxa_pinctrl_function *functions;
0080 char *name;
0081 };
0082
0083 int pxa2xx_pinctrl_init(struct platform_device *pdev,
0084 const struct pxa_desc_pin *ppins, int npins,
0085 void __iomem *base_gafr[], void __iomem *base_gpdr[],
0086 void __iomem *base_gpsr[]);
0087
0088 #endif