GNU Linux-libre 4.14.257-gnu1
[releases.git] / drivers / pinctrl / pinctrl-adi2.h
1 /*
2  * Pinctrl Driver for ADI GPIO2 controller
3  *
4  * Copyright 2007-2013 Analog Devices Inc.
5  *
6  * Licensed under the GPLv2 or later
7  */
8
9 #ifndef PINCTRL_PINCTRL_ADI2_H
10 #define PINCTRL_PINCTRL_ADI2_H
11
12 #include <linux/pinctrl/pinctrl.h>
13
14  /**
15  * struct adi_pin_group - describes a pin group
16  * @name: the name of this pin group
17  * @pins: an array of pins
18  * @num: the number of pins in this array
19  */
20 struct adi_pin_group {
21         const char *name;
22         const unsigned *pins;
23         const unsigned num;
24         const unsigned short *mux;
25 };
26
27 #define ADI_PIN_GROUP(n, p, m)  \
28         {                       \
29                 .name = n,      \
30                 .pins = p,      \
31                 .num = ARRAY_SIZE(p),   \
32                 .mux = m,                       \
33         }
34
35  /**
36  * struct adi_pmx_func - describes function mux setting of pin groups
37  * @name: the name of this function mux setting
38  * @groups: an array of pin groups
39  * @num_groups: the number of pin groups in this array
40  * @mux: the function mux setting array, end by zero
41  */
42 struct adi_pmx_func {
43         const char *name;
44         const char * const *groups;
45         const unsigned num_groups;
46 };
47
48 #define ADI_PMX_FUNCTION(n, g)          \
49         {                                       \
50                 .name = n,                      \
51                 .groups = g,                    \
52                 .num_groups = ARRAY_SIZE(g),    \
53         }
54
55 /**
56  * struct adi_pinctrl_soc_data - ADI pin controller per-SoC configuration
57  * @functions:  The functions supported on this SoC.
58  * @nfunction:  The number of entries in @functions.
59  * @groups:     An array describing all pin groups the pin SoC supports.
60  * @ngroups:    The number of entries in @groups.
61  * @pins:       An array describing all pins the pin controller affects.
62  * @npins:      The number of entries in @pins.
63  */
64 struct adi_pinctrl_soc_data {
65         const struct adi_pmx_func *functions;
66         int nfunctions;
67         const struct adi_pin_group *groups;
68         int ngroups;
69         const struct pinctrl_pin_desc *pins;
70         int npins;
71 };
72
73 void adi_pinctrl_soc_init(const struct adi_pinctrl_soc_data **soc);
74
75 #endif /* PINCTRL_PINCTRL_ADI2_H */