37
37
38
38
#include "core.h"
39
39
#include "pinconf.h"
40
+ #include "pinctrl-rockchip.h"
40
41
41
42
/* GPIO control registers */
42
43
#define GPIO_SWPORT_DR 0x00
52
53
#define GPIO_EXT_PORT 0x50
53
54
#define GPIO_LS_SYNC 0x60
54
55
55
- enum rockchip_pinctrl_type {
56
- PX30 ,
57
- RV1108 ,
58
- RK2928 ,
59
- RK3066B ,
60
- RK3128 ,
61
- RK3188 ,
62
- RK3288 ,
63
- RK3308 ,
64
- RK3368 ,
65
- RK3399 ,
66
- RK3568 ,
67
- };
68
-
69
-
70
56
/**
71
57
* Generate a bitmask for setting a value (v) with a write mask bit in hiword
72
58
* register 31:16 area.
@@ -84,103 +70,6 @@ enum rockchip_pinctrl_type {
84
70
#define IOMUX_WIDTH_3BIT BIT(4)
85
71
#define IOMUX_WIDTH_2BIT BIT(5)
86
72
87
- /**
88
- * struct rockchip_iomux
89
- * @type: iomux variant using IOMUX_* constants
90
- * @offset: if initialized to -1 it will be autocalculated, by specifying
91
- * an initial offset value the relevant source offset can be reset
92
- * to a new value for autocalculating the following iomux registers.
93
- */
94
- struct rockchip_iomux {
95
- int type ;
96
- int offset ;
97
- };
98
-
99
- /*
100
- * enum type index corresponding to rockchip_perpin_drv_list arrays index.
101
- */
102
- enum rockchip_pin_drv_type {
103
- DRV_TYPE_IO_DEFAULT = 0 ,
104
- DRV_TYPE_IO_1V8_OR_3V0 ,
105
- DRV_TYPE_IO_1V8_ONLY ,
106
- DRV_TYPE_IO_1V8_3V0_AUTO ,
107
- DRV_TYPE_IO_3V3_ONLY ,
108
- DRV_TYPE_MAX
109
- };
110
-
111
- /*
112
- * enum type index corresponding to rockchip_pull_list arrays index.
113
- */
114
- enum rockchip_pin_pull_type {
115
- PULL_TYPE_IO_DEFAULT = 0 ,
116
- PULL_TYPE_IO_1V8_ONLY ,
117
- PULL_TYPE_MAX
118
- };
119
-
120
- /**
121
- * struct rockchip_drv
122
- * @drv_type: drive strength variant using rockchip_perpin_drv_type
123
- * @offset: if initialized to -1 it will be autocalculated, by specifying
124
- * an initial offset value the relevant source offset can be reset
125
- * to a new value for autocalculating the following drive strength
126
- * registers. if used chips own cal_drv func instead to calculate
127
- * registers offset, the variant could be ignored.
128
- */
129
- struct rockchip_drv {
130
- enum rockchip_pin_drv_type drv_type ;
131
- int offset ;
132
- };
133
-
134
- /**
135
- * struct rockchip_pin_bank
136
- * @reg_base: register base of the gpio bank
137
- * @regmap_pull: optional separate register for additional pull settings
138
- * @clk: clock of the gpio bank
139
- * @irq: interrupt of the gpio bank
140
- * @saved_masks: Saved content of GPIO_INTEN at suspend time.
141
- * @pin_base: first pin number
142
- * @nr_pins: number of pins in this bank
143
- * @name: name of the bank
144
- * @bank_num: number of the bank, to account for holes
145
- * @iomux: array describing the 4 iomux sources of the bank
146
- * @drv: array describing the 4 drive strength sources of the bank
147
- * @pull_type: array describing the 4 pull type sources of the bank
148
- * @valid: is all necessary information present
149
- * @of_node: dt node of this bank
150
- * @drvdata: common pinctrl basedata
151
- * @domain: irqdomain of the gpio bank
152
- * @gpio_chip: gpiolib chip
153
- * @grange: gpio range
154
- * @slock: spinlock for the gpio bank
155
- * @toggle_edge_mode: bit mask to toggle (falling/rising) edge mode
156
- * @recalced_mask: bit mask to indicate a need to recalulate the mask
157
- * @route_mask: bits describing the routing pins of per bank
158
- */
159
- struct rockchip_pin_bank {
160
- void __iomem * reg_base ;
161
- struct regmap * regmap_pull ;
162
- struct clk * clk ;
163
- int irq ;
164
- u32 saved_masks ;
165
- u32 pin_base ;
166
- u8 nr_pins ;
167
- char * name ;
168
- u8 bank_num ;
169
- struct rockchip_iomux iomux [4 ];
170
- struct rockchip_drv drv [4 ];
171
- enum rockchip_pin_pull_type pull_type [4 ];
172
- bool valid ;
173
- struct device_node * of_node ;
174
- struct rockchip_pinctrl * drvdata ;
175
- struct irq_domain * domain ;
176
- struct gpio_chip gpio_chip ;
177
- struct pinctrl_gpio_range grange ;
178
- raw_spinlock_t slock ;
179
- u32 toggle_edge_mode ;
180
- u32 recalced_mask ;
181
- u32 route_mask ;
182
- };
183
-
184
73
#define PIN_BANK (id , pins , label ) \
185
74
{ \
186
75
.bank_num = id, \
@@ -320,119 +209,6 @@ struct rockchip_pin_bank {
320
209
#define RK_MUXROUTE_PMU (ID , PIN , FUNC , REG , VAL ) \
321
210
PIN_BANK_MUX_ROUTE_FLAGS(ID, PIN, FUNC, REG, VAL, ROCKCHIP_ROUTE_PMU)
322
211
323
- /**
324
- * struct rockchip_mux_recalced_data: represent a pin iomux data.
325
- * @num: bank number.
326
- * @pin: pin number.
327
- * @bit: index at register.
328
- * @reg: register offset.
329
- * @mask: mask bit
330
- */
331
- struct rockchip_mux_recalced_data {
332
- u8 num ;
333
- u8 pin ;
334
- u32 reg ;
335
- u8 bit ;
336
- u8 mask ;
337
- };
338
-
339
- enum rockchip_mux_route_location {
340
- ROCKCHIP_ROUTE_SAME = 0 ,
341
- ROCKCHIP_ROUTE_PMU ,
342
- ROCKCHIP_ROUTE_GRF ,
343
- };
344
-
345
- /**
346
- * struct rockchip_mux_recalced_data: represent a pin iomux data.
347
- * @bank_num: bank number.
348
- * @pin: index at register or used to calc index.
349
- * @func: the min pin.
350
- * @route_location: the mux route location (same, pmu, grf).
351
- * @route_offset: the max pin.
352
- * @route_val: the register offset.
353
- */
354
- struct rockchip_mux_route_data {
355
- u8 bank_num ;
356
- u8 pin ;
357
- u8 func ;
358
- enum rockchip_mux_route_location route_location ;
359
- u32 route_offset ;
360
- u32 route_val ;
361
- };
362
-
363
- struct rockchip_pin_ctrl {
364
- struct rockchip_pin_bank * pin_banks ;
365
- u32 nr_banks ;
366
- u32 nr_pins ;
367
- char * label ;
368
- enum rockchip_pinctrl_type type ;
369
- int grf_mux_offset ;
370
- int pmu_mux_offset ;
371
- int grf_drv_offset ;
372
- int pmu_drv_offset ;
373
- struct rockchip_mux_recalced_data * iomux_recalced ;
374
- u32 niomux_recalced ;
375
- struct rockchip_mux_route_data * iomux_routes ;
376
- u32 niomux_routes ;
377
-
378
- void (* pull_calc_reg )(struct rockchip_pin_bank * bank ,
379
- int pin_num , struct regmap * * regmap ,
380
- int * reg , u8 * bit );
381
- void (* drv_calc_reg )(struct rockchip_pin_bank * bank ,
382
- int pin_num , struct regmap * * regmap ,
383
- int * reg , u8 * bit );
384
- int (* schmitt_calc_reg )(struct rockchip_pin_bank * bank ,
385
- int pin_num , struct regmap * * regmap ,
386
- int * reg , u8 * bit );
387
- };
388
-
389
- struct rockchip_pin_config {
390
- unsigned int func ;
391
- unsigned long * configs ;
392
- unsigned int nconfigs ;
393
- };
394
-
395
- /**
396
- * struct rockchip_pin_group: represent group of pins of a pinmux function.
397
- * @name: name of the pin group, used to lookup the group.
398
- * @pins: the pins included in this group.
399
- * @npins: number of pins included in this group.
400
- * @data: local pin configuration
401
- */
402
- struct rockchip_pin_group {
403
- const char * name ;
404
- unsigned int npins ;
405
- unsigned int * pins ;
406
- struct rockchip_pin_config * data ;
407
- };
408
-
409
- /**
410
- * struct rockchip_pmx_func: represent a pin function.
411
- * @name: name of the pin function, used to lookup the function.
412
- * @groups: one or more names of pin groups that provide this function.
413
- * @ngroups: number of groups included in @groups.
414
- */
415
- struct rockchip_pmx_func {
416
- const char * name ;
417
- const char * * groups ;
418
- u8 ngroups ;
419
- };
420
-
421
- struct rockchip_pinctrl {
422
- struct regmap * regmap_base ;
423
- int reg_size ;
424
- struct regmap * regmap_pull ;
425
- struct regmap * regmap_pmu ;
426
- struct device * dev ;
427
- struct rockchip_pin_ctrl * ctrl ;
428
- struct pinctrl_desc pctl ;
429
- struct pinctrl_dev * pctl_dev ;
430
- struct rockchip_pin_group * groups ;
431
- unsigned int ngroups ;
432
- struct rockchip_pmx_func * functions ;
433
- unsigned int nfunctions ;
434
- };
435
-
436
212
static struct regmap_config rockchip_regmap_config = {
437
213
.reg_bits = 32 ,
438
214
.val_bits = 32 ,
0 commit comments