@@ -106,13 +106,6 @@ struct ma35_pin_setting {
106106 unsigned int nconfigs ;
107107};
108108
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-
116109struct ma35_pin_bank {
117110 void __iomem * reg_base ;
118111 struct clk * clk ;
@@ -141,7 +134,7 @@ struct ma35_pinctrl {
141134 struct pinctrl_dev * pctl ;
142135 const struct ma35_pinctrl_soc_info * info ;
143136 struct regmap * regmap ;
144- struct ma35_pin_group * groups ;
137+ struct group_desc * groups ;
145138 unsigned int ngroups ;
146139 struct pinfunction * functions ;
147140 unsigned int nfunctions ;
@@ -160,7 +153,7 @@ static const char *ma35_get_group_name(struct pinctrl_dev *pctldev, unsigned int
160153{
161154 struct ma35_pinctrl * npctl = pinctrl_dev_get_drvdata (pctldev );
162155
163- return npctl -> groups [selector ].name ;
156+ return npctl -> groups [selector ].grp . name ;
164157}
165158
166159static 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
171164 if (selector >= npctl -> ngroups )
172165 return - EINVAL ;
173166
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 ;
176169
177170 return 0 ;
178171}
179172
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 )
182175{
183176 int i ;
184177
185178 for (i = 0 ; i < npctl -> ngroups ; i ++ ) {
186- if (!strcmp (npctl -> groups [i ].name , name ))
179+ if (!strcmp (npctl -> groups [i ].grp . name , name ))
187180 return & npctl -> groups [i ];
188181 }
189182 return NULL ;
@@ -195,9 +188,10 @@ static int ma35_pinctrl_dt_node_to_map_func(struct pinctrl_dev *pctldev,
195188 unsigned int * num_maps )
196189{
197190 struct ma35_pinctrl * npctl = pinctrl_dev_get_drvdata (pctldev );
198- struct ma35_pin_group * grp ;
191+ struct ma35_pin_setting * setting ;
199192 struct pinctrl_map * new_map ;
200193 struct device_node * parent ;
194+ struct group_desc * grp ;
201195 int map_num = 1 ;
202196 int i ;
203197
@@ -211,7 +205,7 @@ static int ma35_pinctrl_dt_node_to_map_func(struct pinctrl_dev *pctldev,
211205 return - EINVAL ;
212206 }
213207
214- map_num += grp -> npins ;
208+ map_num += grp -> grp . npins ;
215209 new_map = kcalloc (map_num , sizeof (* new_map ), GFP_KERNEL );
216210 if (!new_map )
217211 return - ENOMEM ;
@@ -223,17 +217,19 @@ static int ma35_pinctrl_dt_node_to_map_func(struct pinctrl_dev *pctldev,
223217 if (!parent )
224218 return - EINVAL ;
225219
220+ setting = grp -> data ;
221+
226222 new_map [0 ].type = PIN_MAP_TYPE_MUX_GROUP ;
227223 new_map [0 ].data .mux .function = parent -> name ;
228224 new_map [0 ].data .mux .group = np -> name ;
229225 of_node_put (parent );
230226
231227 new_map ++ ;
232- for (i = 0 ; i < grp -> npins ; i ++ ) {
228+ for (i = 0 ; i < grp -> grp . npins ; i ++ ) {
233229 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 ;
237233 }
238234 dev_dbg (pctldev -> dev , "maps: function %s group %s num %d\n" ,
239235 (* 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
281277 unsigned int group )
282278{
283279 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 ;
286282 u32 i , regval ;
287283
288284 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 );
290286
291- for (i = 0 ; i < grp -> npins ; i ++ ) {
287+ for (i = 0 ; i < grp -> grp . npins ; i ++ ) {
292288 regmap_read (npctl -> regmap , setting -> offset , & regval );
293289 regval &= ~GENMASK (setting -> shift + MA35_MFP_BITS_PER_PORT - 1 ,
294290 setting -> shift );
@@ -980,17 +976,16 @@ static const struct pinconf_ops ma35_pinconf_ops = {
980976 .is_generic = true,
981977};
982978
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 ,
984980 struct ma35_pinctrl * npctl , u32 index )
985981{
986982 struct ma35_pin_setting * pin ;
987983 unsigned long * configs ;
988984 unsigned int nconfigs ;
985+ unsigned int * pins ;
989986 int i , j , count , ret ;
990987 u32 * elems ;
991988
992- grp -> name = np -> name ;
993-
994989 ret = pinconf_generic_parse_dt_config (np , NULL , & configs , & nconfigs );
995990 if (ret )
996991 return ret ;
@@ -1003,29 +998,30 @@ static int ma35_pinctrl_parse_groups(struct device_node *np, struct ma35_pin_gro
1003998 if (!elems )
1004999 return - ENOMEM ;
10051000
1001+ grp -> grp .name = np -> name ;
1002+
10061003 ret = of_property_read_u32_array (np , "nuvoton,pins" , elems , count );
10071004 if (ret )
10081005 return - EINVAL ;
1006+ grp -> grp .npins = count / 3 ;
10091007
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 )
10141010 return - ENOMEM ;
1011+ grp -> grp .pins = pins ;
10151012
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 )
10181015 return - ENOMEM ;
1019-
1020- pin = grp -> settings ;
1016+ grp -> data = pin ;
10211017
10221018 for (i = 0 , j = 0 ; i < count ; i += 3 , j ++ ) {
10231019 pin -> offset = elems [i ] * MA35_MFP_REG_SZ_PER_BANK + MA35_MFP_REG_BASE ;
10241020 pin -> shift = (elems [i + 1 ] * MA35_MFP_BITS_PER_PORT ) % 32 ;
10251021 pin -> muxval = elems [i + 2 ];
10261022 pin -> configs = configs ;
10271023 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 );
10291025 pin ++ ;
10301026 }
10311027 return 0 ;
@@ -1036,7 +1032,7 @@ static int ma35_pinctrl_parse_functions(struct device_node *np, struct ma35_pinc
10361032{
10371033 struct device_node * child ;
10381034 struct pinfunction * func ;
1039- struct ma35_pin_group * grp ;
1035+ struct group_desc * grp ;
10401036 static u32 grp_index ;
10411037 const char * * groups ;
10421038 u32 ret , i = 0 ;
0 commit comments