Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Marvell PXA2xx family pin control
0004  *
0005  * Copyright (C) 2015 Robert Jarzmik
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 /* __PINCTRL_PXA_H */