forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/pinctrl/actions/pinctrl-owl.h
....@@ -15,12 +15,135 @@
1515 #define OWL_PINCONF_SLEW_SLOW 0
1616 #define OWL_PINCONF_SLEW_FAST 1
1717
18
-enum owl_pinconf_pull {
19
- OWL_PINCONF_PULL_HIZ,
20
- OWL_PINCONF_PULL_DOWN,
21
- OWL_PINCONF_PULL_UP,
22
- OWL_PINCONF_PULL_HOLD,
23
-};
18
+#define MUX_PG(group_name, reg, shift, width) \
19
+ { \
20
+ .name = #group_name, \
21
+ .pads = group_name##_pads, \
22
+ .npads = ARRAY_SIZE(group_name##_pads), \
23
+ .funcs = group_name##_funcs, \
24
+ .nfuncs = ARRAY_SIZE(group_name##_funcs), \
25
+ .mfpctl_reg = MFCTL##reg, \
26
+ .mfpctl_shift = shift, \
27
+ .mfpctl_width = width, \
28
+ .drv_reg = -1, \
29
+ .drv_shift = -1, \
30
+ .drv_width = -1, \
31
+ .sr_reg = -1, \
32
+ .sr_shift = -1, \
33
+ .sr_width = -1, \
34
+ }
35
+
36
+#define DRV_PG(group_name, reg, shift, width) \
37
+ { \
38
+ .name = #group_name, \
39
+ .pads = group_name##_pads, \
40
+ .npads = ARRAY_SIZE(group_name##_pads), \
41
+ .mfpctl_reg = -1, \
42
+ .mfpctl_shift = -1, \
43
+ .mfpctl_width = -1, \
44
+ .drv_reg = PAD_DRV##reg, \
45
+ .drv_shift = shift, \
46
+ .drv_width = width, \
47
+ .sr_reg = -1, \
48
+ .sr_shift = -1, \
49
+ .sr_width = -1, \
50
+ }
51
+
52
+#define SR_PG(group_name, reg, shift, width) \
53
+ { \
54
+ .name = #group_name, \
55
+ .pads = group_name##_pads, \
56
+ .npads = ARRAY_SIZE(group_name##_pads), \
57
+ .mfpctl_reg = -1, \
58
+ .mfpctl_shift = -1, \
59
+ .mfpctl_width = -1, \
60
+ .drv_reg = -1, \
61
+ .drv_shift = -1, \
62
+ .drv_width = -1, \
63
+ .sr_reg = PAD_SR##reg, \
64
+ .sr_shift = shift, \
65
+ .sr_width = width, \
66
+ }
67
+
68
+#define FUNCTION(fname) \
69
+ { \
70
+ .name = #fname, \
71
+ .groups = fname##_groups, \
72
+ .ngroups = ARRAY_SIZE(fname##_groups), \
73
+ }
74
+
75
+/* PAD PULL UP/DOWN CONFIGURES */
76
+#define PULLCTL_CONF(pull_reg, pull_sft, pull_wdt) \
77
+ { \
78
+ .reg = PAD_PULLCTL##pull_reg, \
79
+ .shift = pull_sft, \
80
+ .width = pull_wdt, \
81
+ }
82
+
83
+#define PAD_PULLCTL_CONF(pad_name, pull_reg, pull_sft, pull_wdt) \
84
+ struct owl_pullctl pad_name##_pullctl_conf \
85
+ = PULLCTL_CONF(pull_reg, pull_sft, pull_wdt)
86
+
87
+#define ST_CONF(st_reg, st_sft, st_wdt) \
88
+ { \
89
+ .reg = PAD_ST##st_reg, \
90
+ .shift = st_sft, \
91
+ .width = st_wdt, \
92
+ }
93
+
94
+#define PAD_ST_CONF(pad_name, st_reg, st_sft, st_wdt) \
95
+ struct owl_st pad_name##_st_conf \
96
+ = ST_CONF(st_reg, st_sft, st_wdt)
97
+
98
+#define PAD_INFO(name) \
99
+ { \
100
+ .pad = name, \
101
+ .pullctl = NULL, \
102
+ .st = NULL, \
103
+ }
104
+
105
+#define PAD_INFO_ST(name) \
106
+ { \
107
+ .pad = name, \
108
+ .pullctl = NULL, \
109
+ .st = &name##_st_conf, \
110
+ }
111
+
112
+#define PAD_INFO_PULLCTL(name) \
113
+ { \
114
+ .pad = name, \
115
+ .pullctl = &name##_pullctl_conf, \
116
+ .st = NULL, \
117
+ }
118
+
119
+#define PAD_INFO_PULLCTL_ST(name) \
120
+ { \
121
+ .pad = name, \
122
+ .pullctl = &name##_pullctl_conf, \
123
+ .st = &name##_st_conf, \
124
+ }
125
+
126
+#define OWL_GPIO_PORT_A 0
127
+#define OWL_GPIO_PORT_B 1
128
+#define OWL_GPIO_PORT_C 2
129
+#define OWL_GPIO_PORT_D 3
130
+#define OWL_GPIO_PORT_E 4
131
+#define OWL_GPIO_PORT_F 5
132
+
133
+#define OWL_GPIO_PORT(port, base, count, _outen, _inen, _dat, _intc_ctl,\
134
+ _intc_pd, _intc_msk, _intc_type, _share) \
135
+ [OWL_GPIO_PORT_##port] = { \
136
+ .offset = base, \
137
+ .pins = count, \
138
+ .outen = _outen, \
139
+ .inen = _inen, \
140
+ .dat = _dat, \
141
+ .intc_ctl = _intc_ctl, \
142
+ .intc_pd = _intc_pd, \
143
+ .intc_msk = _intc_msk, \
144
+ .intc_type = _intc_type, \
145
+ .shared_ctl_offset = _share, \
146
+ }
24147
25148 enum owl_pinconf_drv {
26149 OWL_PINCONF_DRV_2MA,
....@@ -148,6 +271,7 @@
148271 unsigned int intc_pd;
149272 unsigned int intc_msk;
150273 unsigned int intc_type;
274
+ u8 shared_ctl_offset;
151275 };
152276
153277 /**
....@@ -174,6 +298,12 @@
174298 unsigned int ngpios;
175299 const struct owl_gpio_port *ports;
176300 unsigned int nports;
301
+ int (*padctl_val2arg)(const struct owl_padinfo *padinfo,
302
+ unsigned int param,
303
+ u32 *arg);
304
+ int (*padctl_arg2val)(const struct owl_padinfo *info,
305
+ unsigned int param,
306
+ u32 *arg);
177307 };
178308
179309 int owl_pinctrl_probe(struct platform_device *pdev,