1#ifndef PINCTRL_PINCTRL_NOMADIK_H
2#define PINCTRL_PINCTRL_NOMADIK_H
3
4#include <linux/platform_data/pinctrl-nomadik.h>
5
6
7#define PINCTRL_NMK_STN8815 0
8#define PINCTRL_NMK_DB8500 1
9#define PINCTRL_NMK_DB8540 2
10
11#define PRCM_GPIOCR_ALTCX(pin_num,\
12 altc1_used, altc1_ri, altc1_cb,\
13 altc2_used, altc2_ri, altc2_cb,\
14 altc3_used, altc3_ri, altc3_cb,\
15 altc4_used, altc4_ri, altc4_cb)\
16{\
17 .pin = pin_num,\
18 .altcx[PRCM_IDX_GPIOCR_ALTC1] = {\
19 .used = altc1_used,\
20 .reg_index = altc1_ri,\
21 .control_bit = altc1_cb\
22 },\
23 .altcx[PRCM_IDX_GPIOCR_ALTC2] = {\
24 .used = altc2_used,\
25 .reg_index = altc2_ri,\
26 .control_bit = altc2_cb\
27 },\
28 .altcx[PRCM_IDX_GPIOCR_ALTC3] = {\
29 .used = altc3_used,\
30 .reg_index = altc3_ri,\
31 .control_bit = altc3_cb\
32 },\
33 .altcx[PRCM_IDX_GPIOCR_ALTC4] = {\
34 .used = altc4_used,\
35 .reg_index = altc4_ri,\
36 .control_bit = altc4_cb\
37 },\
38}
39
40
41
42
43
44enum prcm_gpiocr_reg_index {
45 PRCM_IDX_GPIOCR1,
46 PRCM_IDX_GPIOCR2,
47 PRCM_IDX_GPIOCR3
48};
49
50
51
52
53enum prcm_gpiocr_altcx_index {
54 PRCM_IDX_GPIOCR_ALTC1,
55 PRCM_IDX_GPIOCR_ALTC2,
56 PRCM_IDX_GPIOCR_ALTC3,
57 PRCM_IDX_GPIOCR_ALTC4,
58 PRCM_IDX_GPIOCR_ALTC_MAX,
59};
60
61
62
63
64
65
66
67struct prcm_gpiocr_altcx {
68 bool used:1;
69 u8 reg_index:2;
70 u8 control_bit:5;
71} __packed;
72
73
74
75
76
77
78struct prcm_gpiocr_altcx_pin_desc {
79 unsigned short pin;
80 struct prcm_gpiocr_altcx altcx[PRCM_IDX_GPIOCR_ALTC_MAX];
81};
82
83
84
85
86
87
88
89struct nmk_function {
90 const char *name;
91 const char * const *groups;
92 unsigned ngroups;
93};
94
95
96
97
98
99
100
101
102
103
104
105struct nmk_pingroup {
106 const char *name;
107 const unsigned int *pins;
108 const unsigned npins;
109 int altsetting;
110};
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129struct nmk_pinctrl_soc_data {
130 struct pinctrl_gpio_range *gpio_ranges;
131 unsigned gpio_num_ranges;
132 const struct pinctrl_pin_desc *pins;
133 unsigned npins;
134 const struct nmk_function *functions;
135 unsigned nfunctions;
136 const struct nmk_pingroup *groups;
137 unsigned ngroups;
138 const struct prcm_gpiocr_altcx_pin_desc *altcx_pins;
139 unsigned npins_altcx;
140 const u16 *prcm_gpiocr_registers;
141};
142
143#ifdef CONFIG_PINCTRL_STN8815
144
145void nmk_pinctrl_stn8815_init(const struct nmk_pinctrl_soc_data **soc);
146
147#else
148
149static inline void
150nmk_pinctrl_stn8815_init(const struct nmk_pinctrl_soc_data **soc)
151{
152}
153
154#endif
155
156#ifdef CONFIG_PINCTRL_DB8500
157
158void nmk_pinctrl_db8500_init(const struct nmk_pinctrl_soc_data **soc);
159
160#else
161
162static inline void
163nmk_pinctrl_db8500_init(const struct nmk_pinctrl_soc_data **soc)
164{
165}
166
167#endif
168
169#ifdef CONFIG_PINCTRL_DB8540
170
171void nmk_pinctrl_db8540_init(const struct nmk_pinctrl_soc_data **soc);
172
173#else
174
175static inline void
176nmk_pinctrl_db8540_init(const struct nmk_pinctrl_soc_data **soc)
177{
178}
179
180#endif
181
182#endif
183