@@ -106,13 +106,6 @@ struct ma35_pin_setting {
106
106
unsigned int nconfigs ;
107
107
};
108
108
109
- struct ma35_pin_group {
110
- const char * name ;
111
- unsigned int npins ;
112
- unsigned int * pins ;
113
- struct ma35_pin_setting * settings ;
114
- };
115
-
116
109
struct ma35_pin_bank {
117
110
void __iomem * reg_base ;
118
111
struct clk * clk ;
@@ -141,7 +134,7 @@ struct ma35_pinctrl {
141
134
struct pinctrl_dev * pctl ;
142
135
const struct ma35_pinctrl_soc_info * info ;
143
136
struct regmap * regmap ;
144
- struct ma35_pin_group * groups ;
137
+ struct group_desc * groups ;
145
138
unsigned int ngroups ;
146
139
struct pinfunction * functions ;
147
140
unsigned int nfunctions ;
@@ -160,7 +153,7 @@ static const char *ma35_get_group_name(struct pinctrl_dev *pctldev, unsigned int
160
153
{
161
154
struct ma35_pinctrl * npctl = pinctrl_dev_get_drvdata (pctldev );
162
155
163
- return npctl -> groups [selector ].name ;
156
+ return npctl -> groups [selector ].grp . name ;
164
157
}
165
158
166
159
static int ma35_get_group_pins (struct pinctrl_dev * pctldev , unsigned int selector ,
@@ -171,19 +164,19 @@ static int ma35_get_group_pins(struct pinctrl_dev *pctldev, unsigned int selecto
171
164
if (selector >= npctl -> ngroups )
172
165
return - EINVAL ;
173
166
174
- * pins = npctl -> groups [selector ].pins ;
175
- * npins = npctl -> groups [selector ].npins ;
167
+ * pins = npctl -> groups [selector ].grp . pins ;
168
+ * npins = npctl -> groups [selector ].grp . npins ;
176
169
177
170
return 0 ;
178
171
}
179
172
180
- static struct ma35_pin_group * ma35_pinctrl_find_group_by_name (
181
- const struct ma35_pinctrl * npctl , const char * name )
173
+ static struct group_desc *
174
+ ma35_pinctrl_find_group_by_name ( const struct ma35_pinctrl * npctl , const char * name )
182
175
{
183
176
int i ;
184
177
185
178
for (i = 0 ; i < npctl -> ngroups ; i ++ ) {
186
- if (!strcmp (npctl -> groups [i ].name , name ))
179
+ if (!strcmp (npctl -> groups [i ].grp . name , name ))
187
180
return & npctl -> groups [i ];
188
181
}
189
182
return NULL ;
@@ -195,9 +188,10 @@ static int ma35_pinctrl_dt_node_to_map_func(struct pinctrl_dev *pctldev,
195
188
unsigned int * num_maps )
196
189
{
197
190
struct ma35_pinctrl * npctl = pinctrl_dev_get_drvdata (pctldev );
198
- struct ma35_pin_group * grp ;
191
+ struct ma35_pin_setting * setting ;
199
192
struct pinctrl_map * new_map ;
200
193
struct device_node * parent ;
194
+ struct group_desc * grp ;
201
195
int map_num = 1 ;
202
196
int i ;
203
197
@@ -211,7 +205,7 @@ static int ma35_pinctrl_dt_node_to_map_func(struct pinctrl_dev *pctldev,
211
205
return - EINVAL ;
212
206
}
213
207
214
- map_num += grp -> npins ;
208
+ map_num += grp -> grp . npins ;
215
209
new_map = kcalloc (map_num , sizeof (* new_map ), GFP_KERNEL );
216
210
if (!new_map )
217
211
return - ENOMEM ;
@@ -223,17 +217,19 @@ static int ma35_pinctrl_dt_node_to_map_func(struct pinctrl_dev *pctldev,
223
217
if (!parent )
224
218
return - EINVAL ;
225
219
220
+ setting = grp -> data ;
221
+
226
222
new_map [0 ].type = PIN_MAP_TYPE_MUX_GROUP ;
227
223
new_map [0 ].data .mux .function = parent -> name ;
228
224
new_map [0 ].data .mux .group = np -> name ;
229
225
of_node_put (parent );
230
226
231
227
new_map ++ ;
232
- for (i = 0 ; i < grp -> npins ; i ++ ) {
228
+ for (i = 0 ; i < grp -> grp . npins ; i ++ ) {
233
229
new_map [i ].type = PIN_MAP_TYPE_CONFIGS_PIN ;
234
- new_map [i ].data .configs .group_or_pin = pin_get_name (pctldev , grp -> pins [i ]);
235
- new_map [i ].data .configs .configs = grp -> settings [i ].configs ;
236
- new_map [i ].data .configs .num_configs = grp -> settings [i ].nconfigs ;
230
+ new_map [i ].data .configs .group_or_pin = pin_get_name (pctldev , grp -> grp . pins [i ]);
231
+ new_map [i ].data .configs .configs = setting [i ].configs ;
232
+ new_map [i ].data .configs .num_configs = setting [i ].nconfigs ;
237
233
}
238
234
dev_dbg (pctldev -> dev , "maps: function %s group %s num %d\n" ,
239
235
(* map )-> data .mux .function , (* map )-> data .mux .group , map_num );
@@ -281,14 +277,14 @@ static int ma35_pinmux_set_mux(struct pinctrl_dev *pctldev, unsigned int selecto
281
277
unsigned int group )
282
278
{
283
279
struct ma35_pinctrl * npctl = pinctrl_dev_get_drvdata (pctldev );
284
- struct ma35_pin_group * grp = & npctl -> groups [group ];
285
- struct ma35_pin_setting * setting = grp -> settings ;
280
+ struct group_desc * grp = & npctl -> groups [group ];
281
+ struct ma35_pin_setting * setting = grp -> data ;
286
282
u32 i , regval ;
287
283
288
284
dev_dbg (npctl -> dev , "enable function %s group %s\n" ,
289
- npctl -> functions [selector ].name , npctl -> groups [ group ] .name );
285
+ npctl -> functions [selector ].name , grp -> grp .name );
290
286
291
- for (i = 0 ; i < grp -> npins ; i ++ ) {
287
+ for (i = 0 ; i < grp -> grp . npins ; i ++ ) {
292
288
regmap_read (npctl -> regmap , setting -> offset , & regval );
293
289
regval &= ~GENMASK (setting -> shift + MA35_MFP_BITS_PER_PORT - 1 ,
294
290
setting -> shift );
@@ -980,17 +976,16 @@ static const struct pinconf_ops ma35_pinconf_ops = {
980
976
.is_generic = true,
981
977
};
982
978
983
- static int ma35_pinctrl_parse_groups (struct device_node * np , struct ma35_pin_group * grp ,
979
+ static int ma35_pinctrl_parse_groups (struct device_node * np , struct group_desc * grp ,
984
980
struct ma35_pinctrl * npctl , u32 index )
985
981
{
986
982
struct ma35_pin_setting * pin ;
987
983
unsigned long * configs ;
988
984
unsigned int nconfigs ;
985
+ unsigned int * pins ;
989
986
int i , j , count , ret ;
990
987
u32 * elems ;
991
988
992
- grp -> name = np -> name ;
993
-
994
989
ret = pinconf_generic_parse_dt_config (np , NULL , & configs , & nconfigs );
995
990
if (ret )
996
991
return ret ;
@@ -1003,29 +998,30 @@ static int ma35_pinctrl_parse_groups(struct device_node *np, struct ma35_pin_gro
1003
998
if (!elems )
1004
999
return - ENOMEM ;
1005
1000
1001
+ grp -> grp .name = np -> name ;
1002
+
1006
1003
ret = of_property_read_u32_array (np , "nuvoton,pins" , elems , count );
1007
1004
if (ret )
1008
1005
return - EINVAL ;
1006
+ grp -> grp .npins = count / 3 ;
1009
1007
1010
- grp -> npins = count / 3 ;
1011
-
1012
- grp -> pins = devm_kcalloc (npctl -> dev , grp -> npins , sizeof (* grp -> pins ), GFP_KERNEL );
1013
- if (!grp -> pins )
1008
+ pins = devm_kcalloc (npctl -> dev , grp -> grp .npins , sizeof (* pins ), GFP_KERNEL );
1009
+ if (!pins )
1014
1010
return - ENOMEM ;
1011
+ grp -> grp .pins = pins ;
1015
1012
1016
- grp -> settings = devm_kcalloc (npctl -> dev , grp -> npins , sizeof (* grp -> settings ), GFP_KERNEL );
1017
- if (!grp -> settings )
1013
+ pin = devm_kcalloc (npctl -> dev , grp -> grp . npins , sizeof (* pin ), GFP_KERNEL );
1014
+ if (!pin )
1018
1015
return - ENOMEM ;
1019
-
1020
- pin = grp -> settings ;
1016
+ grp -> data = pin ;
1021
1017
1022
1018
for (i = 0 , j = 0 ; i < count ; i += 3 , j ++ ) {
1023
1019
pin -> offset = elems [i ] * MA35_MFP_REG_SZ_PER_BANK + MA35_MFP_REG_BASE ;
1024
1020
pin -> shift = (elems [i + 1 ] * MA35_MFP_BITS_PER_PORT ) % 32 ;
1025
1021
pin -> muxval = elems [i + 2 ];
1026
1022
pin -> configs = configs ;
1027
1023
pin -> nconfigs = nconfigs ;
1028
- grp -> pins [j ] = npctl -> info -> get_pin_num (pin -> offset , pin -> shift );
1024
+ pins [j ] = npctl -> info -> get_pin_num (pin -> offset , pin -> shift );
1029
1025
pin ++ ;
1030
1026
}
1031
1027
return 0 ;
@@ -1036,7 +1032,7 @@ static int ma35_pinctrl_parse_functions(struct device_node *np, struct ma35_pinc
1036
1032
{
1037
1033
struct device_node * child ;
1038
1034
struct pinfunction * func ;
1039
- struct ma35_pin_group * grp ;
1035
+ struct group_desc * grp ;
1040
1036
static u32 grp_index ;
1041
1037
const char * * groups ;
1042
1038
u32 ret , i = 0 ;
0 commit comments