Merge drm/drm-next into drm-intel-gt-next
[linux-2.6-microblaze.git] / drivers / pinctrl / pinctrl-rockchip.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (c) 2020-2021 Rockchip Electronics Co. Ltd.
4  *
5  * Copyright (c) 2013 MundoReader S.L.
6  * Author: Heiko Stuebner <heiko@sntech.de>
7  *
8  * With some ideas taken from pinctrl-samsung:
9  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
10  *              http://www.samsung.com
11  * Copyright (c) 2012 Linaro Ltd
12  *              https://www.linaro.org
13  *
14  * and pinctrl-at91:
15  * Copyright (C) 2011-2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
16  */
17
18 #ifndef _PINCTRL_ROCKCHIP_H
19 #define _PINCTRL_ROCKCHIP_H
20
21 #define RK_GPIO0_A0     0
22 #define RK_GPIO0_A1     1
23 #define RK_GPIO0_A2     2
24 #define RK_GPIO0_A3     3
25 #define RK_GPIO0_A4     4
26 #define RK_GPIO0_A5     5
27 #define RK_GPIO0_A6     6
28 #define RK_GPIO0_A7     7
29 #define RK_GPIO0_B0     8
30 #define RK_GPIO0_B1     9
31 #define RK_GPIO0_B2     10
32 #define RK_GPIO0_B3     11
33 #define RK_GPIO0_B4     12
34 #define RK_GPIO0_B5     13
35 #define RK_GPIO0_B6     14
36 #define RK_GPIO0_B7     15
37 #define RK_GPIO0_C0     16
38 #define RK_GPIO0_C1     17
39 #define RK_GPIO0_C2     18
40 #define RK_GPIO0_C3     19
41 #define RK_GPIO0_C4     20
42 #define RK_GPIO0_C5     21
43 #define RK_GPIO0_C6     22
44 #define RK_GPIO0_C7     23
45 #define RK_GPIO0_D0     24
46 #define RK_GPIO0_D1     25
47 #define RK_GPIO0_D2     26
48 #define RK_GPIO0_D3     27
49 #define RK_GPIO0_D4     28
50 #define RK_GPIO0_D5     29
51 #define RK_GPIO0_D6     30
52 #define RK_GPIO0_D7     31
53
54 #define RK_GPIO1_A0     32
55 #define RK_GPIO1_A1     33
56 #define RK_GPIO1_A2     34
57 #define RK_GPIO1_A3     35
58 #define RK_GPIO1_A4     36
59 #define RK_GPIO1_A5     37
60 #define RK_GPIO1_A6     38
61 #define RK_GPIO1_A7     39
62 #define RK_GPIO1_B0     40
63 #define RK_GPIO1_B1     41
64 #define RK_GPIO1_B2     42
65 #define RK_GPIO1_B3     43
66 #define RK_GPIO1_B4     44
67 #define RK_GPIO1_B5     45
68 #define RK_GPIO1_B6     46
69 #define RK_GPIO1_B7     47
70 #define RK_GPIO1_C0     48
71 #define RK_GPIO1_C1     49
72 #define RK_GPIO1_C2     50
73 #define RK_GPIO1_C3     51
74 #define RK_GPIO1_C4     52
75 #define RK_GPIO1_C5     53
76 #define RK_GPIO1_C6     54
77 #define RK_GPIO1_C7     55
78 #define RK_GPIO1_D0     56
79 #define RK_GPIO1_D1     57
80 #define RK_GPIO1_D2     58
81 #define RK_GPIO1_D3     59
82 #define RK_GPIO1_D4     60
83 #define RK_GPIO1_D5     61
84 #define RK_GPIO1_D6     62
85 #define RK_GPIO1_D7     63
86
87 #define RK_GPIO2_A0     64
88 #define RK_GPIO2_A1     65
89 #define RK_GPIO2_A2     66
90 #define RK_GPIO2_A3     67
91 #define RK_GPIO2_A4     68
92 #define RK_GPIO2_A5     69
93 #define RK_GPIO2_A6     70
94 #define RK_GPIO2_A7     71
95 #define RK_GPIO2_B0     72
96 #define RK_GPIO2_B1     73
97 #define RK_GPIO2_B2     74
98 #define RK_GPIO2_B3     75
99 #define RK_GPIO2_B4     76
100 #define RK_GPIO2_B5     77
101 #define RK_GPIO2_B6     78
102 #define RK_GPIO2_B7     79
103 #define RK_GPIO2_C0     80
104 #define RK_GPIO2_C1     81
105 #define RK_GPIO2_C2     82
106 #define RK_GPIO2_C3     83
107 #define RK_GPIO2_C4     84
108 #define RK_GPIO2_C5     85
109 #define RK_GPIO2_C6     86
110 #define RK_GPIO2_C7     87
111 #define RK_GPIO2_D0     88
112 #define RK_GPIO2_D1     89
113 #define RK_GPIO2_D2     90
114 #define RK_GPIO2_D3     91
115 #define RK_GPIO2_D4     92
116 #define RK_GPIO2_D5     93
117 #define RK_GPIO2_D6     94
118 #define RK_GPIO2_D7     95
119
120 #define RK_GPIO3_A0     96
121 #define RK_GPIO3_A1     97
122 #define RK_GPIO3_A2     98
123 #define RK_GPIO3_A3     99
124 #define RK_GPIO3_A4     100
125 #define RK_GPIO3_A5     101
126 #define RK_GPIO3_A6     102
127 #define RK_GPIO3_A7     103
128 #define RK_GPIO3_B0     104
129 #define RK_GPIO3_B1     105
130 #define RK_GPIO3_B2     106
131 #define RK_GPIO3_B3     107
132 #define RK_GPIO3_B4     108
133 #define RK_GPIO3_B5     109
134 #define RK_GPIO3_B6     110
135 #define RK_GPIO3_B7     111
136 #define RK_GPIO3_C0     112
137 #define RK_GPIO3_C1     113
138 #define RK_GPIO3_C2     114
139 #define RK_GPIO3_C3     115
140 #define RK_GPIO3_C4     116
141 #define RK_GPIO3_C5     117
142 #define RK_GPIO3_C6     118
143 #define RK_GPIO3_C7     119
144 #define RK_GPIO3_D0     120
145 #define RK_GPIO3_D1     121
146 #define RK_GPIO3_D2     122
147 #define RK_GPIO3_D3     123
148 #define RK_GPIO3_D4     124
149 #define RK_GPIO3_D5     125
150 #define RK_GPIO3_D6     126
151 #define RK_GPIO3_D7     127
152
153 #define RK_GPIO4_A0     128
154 #define RK_GPIO4_A1     129
155 #define RK_GPIO4_A2     130
156 #define RK_GPIO4_A3     131
157 #define RK_GPIO4_A4     132
158 #define RK_GPIO4_A5     133
159 #define RK_GPIO4_A6     134
160 #define RK_GPIO4_A7     135
161 #define RK_GPIO4_B0     136
162 #define RK_GPIO4_B1     137
163 #define RK_GPIO4_B2     138
164 #define RK_GPIO4_B3     139
165 #define RK_GPIO4_B4     140
166 #define RK_GPIO4_B5     141
167 #define RK_GPIO4_B6     142
168 #define RK_GPIO4_B7     143
169 #define RK_GPIO4_C0     144
170 #define RK_GPIO4_C1     145
171 #define RK_GPIO4_C2     146
172 #define RK_GPIO4_C3     147
173 #define RK_GPIO4_C4     148
174 #define RK_GPIO4_C5     149
175 #define RK_GPIO4_C6     150
176 #define RK_GPIO4_C7     151
177 #define RK_GPIO4_D0     152
178 #define RK_GPIO4_D1     153
179 #define RK_GPIO4_D2     154
180 #define RK_GPIO4_D3     155
181 #define RK_GPIO4_D4     156
182 #define RK_GPIO4_D5     157
183 #define RK_GPIO4_D6     158
184 #define RK_GPIO4_D7     159
185
186 enum rockchip_pinctrl_type {
187         PX30,
188         RV1108,
189         RV1126,
190         RK2928,
191         RK3066B,
192         RK3128,
193         RK3188,
194         RK3288,
195         RK3308,
196         RK3368,
197         RK3399,
198         RK3568,
199         RK3588,
200 };
201
202 /**
203  * struct rockchip_gpio_regs
204  * @port_dr: data register
205  * @port_ddr: data direction register
206  * @int_en: interrupt enable
207  * @int_mask: interrupt mask
208  * @int_type: interrupt trigger type, such as high, low, edge trriger type.
209  * @int_polarity: interrupt polarity enable register
210  * @int_bothedge: interrupt bothedge enable register
211  * @int_status: interrupt status register
212  * @int_rawstatus: int_status = int_rawstatus & int_mask
213  * @debounce: enable debounce for interrupt signal
214  * @dbclk_div_en: enable divider for debounce clock
215  * @dbclk_div_con: setting for divider of debounce clock
216  * @port_eoi: end of interrupt of the port
217  * @ext_port: port data from external
218  * @version_id: controller version register
219  */
220 struct rockchip_gpio_regs {
221         u32 port_dr;
222         u32 port_ddr;
223         u32 int_en;
224         u32 int_mask;
225         u32 int_type;
226         u32 int_polarity;
227         u32 int_bothedge;
228         u32 int_status;
229         u32 int_rawstatus;
230         u32 debounce;
231         u32 dbclk_div_en;
232         u32 dbclk_div_con;
233         u32 port_eoi;
234         u32 ext_port;
235         u32 version_id;
236 };
237
238 /**
239  * struct rockchip_iomux
240  * @type: iomux variant using IOMUX_* constants
241  * @offset: if initialized to -1 it will be autocalculated, by specifying
242  *          an initial offset value the relevant source offset can be reset
243  *          to a new value for autocalculating the following iomux registers.
244  */
245 struct rockchip_iomux {
246         int type;
247         int offset;
248 };
249
250 /*
251  * enum type index corresponding to rockchip_perpin_drv_list arrays index.
252  */
253 enum rockchip_pin_drv_type {
254         DRV_TYPE_IO_DEFAULT = 0,
255         DRV_TYPE_IO_1V8_OR_3V0,
256         DRV_TYPE_IO_1V8_ONLY,
257         DRV_TYPE_IO_1V8_3V0_AUTO,
258         DRV_TYPE_IO_3V3_ONLY,
259         DRV_TYPE_MAX
260 };
261
262 /*
263  * enum type index corresponding to rockchip_pull_list arrays index.
264  */
265 enum rockchip_pin_pull_type {
266         PULL_TYPE_IO_DEFAULT = 0,
267         PULL_TYPE_IO_1V8_ONLY,
268         PULL_TYPE_MAX
269 };
270
271 /**
272  * struct rockchip_drv
273  * @drv_type: drive strength variant using rockchip_perpin_drv_type
274  * @offset: if initialized to -1 it will be autocalculated, by specifying
275  *          an initial offset value the relevant source offset can be reset
276  *          to a new value for autocalculating the following drive strength
277  *          registers. if used chips own cal_drv func instead to calculate
278  *          registers offset, the variant could be ignored.
279  */
280 struct rockchip_drv {
281         enum rockchip_pin_drv_type      drv_type;
282         int                             offset;
283 };
284
285 /**
286  * struct rockchip_pin_bank
287  * @dev: the pinctrl device bind to the bank
288  * @reg_base: register base of the gpio bank
289  * @regmap_pull: optional separate register for additional pull settings
290  * @clk: clock of the gpio bank
291  * @db_clk: clock of the gpio debounce
292  * @irq: interrupt of the gpio bank
293  * @saved_masks: Saved content of GPIO_INTEN at suspend time.
294  * @pin_base: first pin number
295  * @nr_pins: number of pins in this bank
296  * @name: name of the bank
297  * @bank_num: number of the bank, to account for holes
298  * @iomux: array describing the 4 iomux sources of the bank
299  * @drv: array describing the 4 drive strength sources of the bank
300  * @pull_type: array describing the 4 pull type sources of the bank
301  * @valid: is all necessary information present
302  * @of_node: dt node of this bank
303  * @drvdata: common pinctrl basedata
304  * @domain: irqdomain of the gpio bank
305  * @gpio_chip: gpiolib chip
306  * @grange: gpio range
307  * @slock: spinlock for the gpio bank
308  * @toggle_edge_mode: bit mask to toggle (falling/rising) edge mode
309  * @recalced_mask: bit mask to indicate a need to recalulate the mask
310  * @route_mask: bits describing the routing pins of per bank
311  * @deferred_output: gpio output settings to be done after gpio bank probed
312  * @deferred_lock: mutex for the deferred_output shared btw gpio and pinctrl
313  */
314 struct rockchip_pin_bank {
315         struct device                   *dev;
316         void __iomem                    *reg_base;
317         struct regmap                   *regmap_pull;
318         struct clk                      *clk;
319         struct clk                      *db_clk;
320         int                             irq;
321         u32                             saved_masks;
322         u32                             pin_base;
323         u8                              nr_pins;
324         char                            *name;
325         u8                              bank_num;
326         struct rockchip_iomux           iomux[4];
327         struct rockchip_drv             drv[4];
328         enum rockchip_pin_pull_type     pull_type[4];
329         bool                            valid;
330         struct device_node              *of_node;
331         struct rockchip_pinctrl         *drvdata;
332         struct irq_domain               *domain;
333         struct gpio_chip                gpio_chip;
334         struct pinctrl_gpio_range       grange;
335         raw_spinlock_t                  slock;
336         const struct rockchip_gpio_regs *gpio_regs;
337         u32                             gpio_type;
338         u32                             toggle_edge_mode;
339         u32                             recalced_mask;
340         u32                             route_mask;
341         struct list_head                deferred_pins;
342         struct mutex                    deferred_lock;
343 };
344
345 /**
346  * struct rockchip_mux_recalced_data: represent a pin iomux data.
347  * @num: bank number.
348  * @pin: pin number.
349  * @bit: index at register.
350  * @reg: register offset.
351  * @mask: mask bit
352  */
353 struct rockchip_mux_recalced_data {
354         u8 num;
355         u8 pin;
356         u32 reg;
357         u8 bit;
358         u8 mask;
359 };
360
361 enum rockchip_mux_route_location {
362         ROCKCHIP_ROUTE_SAME = 0,
363         ROCKCHIP_ROUTE_PMU,
364         ROCKCHIP_ROUTE_GRF,
365 };
366
367 /**
368  * struct rockchip_mux_recalced_data: represent a pin iomux data.
369  * @bank_num: bank number.
370  * @pin: index at register or used to calc index.
371  * @func: the min pin.
372  * @route_location: the mux route location (same, pmu, grf).
373  * @route_offset: the max pin.
374  * @route_val: the register offset.
375  */
376 struct rockchip_mux_route_data {
377         u8 bank_num;
378         u8 pin;
379         u8 func;
380         enum rockchip_mux_route_location route_location;
381         u32 route_offset;
382         u32 route_val;
383 };
384
385 struct rockchip_pin_ctrl {
386         struct rockchip_pin_bank        *pin_banks;
387         u32                             nr_banks;
388         u32                             nr_pins;
389         char                            *label;
390         enum rockchip_pinctrl_type      type;
391         int                             grf_mux_offset;
392         int                             pmu_mux_offset;
393         int                             grf_drv_offset;
394         int                             pmu_drv_offset;
395         struct rockchip_mux_recalced_data *iomux_recalced;
396         u32                             niomux_recalced;
397         struct rockchip_mux_route_data *iomux_routes;
398         u32                             niomux_routes;
399
400         int     (*pull_calc_reg)(struct rockchip_pin_bank *bank,
401                                     int pin_num, struct regmap **regmap,
402                                     int *reg, u8 *bit);
403         int     (*drv_calc_reg)(struct rockchip_pin_bank *bank,
404                                     int pin_num, struct regmap **regmap,
405                                     int *reg, u8 *bit);
406         int     (*schmitt_calc_reg)(struct rockchip_pin_bank *bank,
407                                     int pin_num, struct regmap **regmap,
408                                     int *reg, u8 *bit);
409 };
410
411 struct rockchip_pin_config {
412         unsigned int            func;
413         unsigned long           *configs;
414         unsigned int            nconfigs;
415 };
416
417 enum pin_config_param;
418
419 struct rockchip_pin_deferred {
420         struct list_head head;
421         unsigned int pin;
422         enum pin_config_param param;
423         u32 arg;
424 };
425
426 /**
427  * struct rockchip_pin_group: represent group of pins of a pinmux function.
428  * @name: name of the pin group, used to lookup the group.
429  * @pins: the pins included in this group.
430  * @npins: number of pins included in this group.
431  * @data: local pin configuration
432  */
433 struct rockchip_pin_group {
434         const char                      *name;
435         unsigned int                    npins;
436         unsigned int                    *pins;
437         struct rockchip_pin_config      *data;
438 };
439
440 /**
441  * struct rockchip_pmx_func: represent a pin function.
442  * @name: name of the pin function, used to lookup the function.
443  * @groups: one or more names of pin groups that provide this function.
444  * @ngroups: number of groups included in @groups.
445  */
446 struct rockchip_pmx_func {
447         const char              *name;
448         const char              **groups;
449         u8                      ngroups;
450 };
451
452 struct rockchip_pinctrl {
453         struct regmap                   *regmap_base;
454         int                             reg_size;
455         struct regmap                   *regmap_pull;
456         struct regmap                   *regmap_pmu;
457         struct device                   *dev;
458         struct rockchip_pin_ctrl        *ctrl;
459         struct pinctrl_desc             pctl;
460         struct pinctrl_dev              *pctl_dev;
461         struct rockchip_pin_group       *groups;
462         unsigned int                    ngroups;
463         struct rockchip_pmx_func        *functions;
464         unsigned int                    nfunctions;
465 };
466
467 #endif