]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/pinctrl/pinctrl-adi2.h
NVMe: CPU hot plug notification
[karo-tx-linux.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 };
25
26 #define ADI_PIN_GROUP(n, p)  \
27         {                       \
28                 .name = n,      \
29                 .pins = p,      \
30                 .num = ARRAY_SIZE(p),   \
31         }
32
33  /**
34  * struct adi_pmx_func - describes function mux setting of pin groups
35  * @name: the name of this function mux setting
36  * @groups: an array of pin groups
37  * @num_groups: the number of pin groups in this array
38  * @mux: the function mux setting array, end by zero
39  */
40 struct adi_pmx_func {
41         const char *name;
42         const char * const *groups;
43         const unsigned num_groups;
44         const unsigned short *mux;
45 };
46
47 #define ADI_PMX_FUNCTION(n, g, m)               \
48         {                                       \
49                 .name = n,                      \
50                 .groups = g,                    \
51                 .num_groups = ARRAY_SIZE(g),    \
52                 .mux = m,                       \
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 */