@@ -81,37 +81,30 @@ static int mtk_pinconf_get(struct pinctrl_dev *pctldev,
81
81
int val , val2 , err , reg , ret = 1 ;
82
82
const struct mtk_pin_desc * desc ;
83
83
84
- if (pin >= hw -> soc -> npins )
85
- return - EINVAL ;
84
+ if (pin >= hw -> soc -> npins ) {
85
+ err = - EINVAL ;
86
+ goto out ;
87
+ }
86
88
desc = (const struct mtk_pin_desc * )& hw -> soc -> pins [pin ];
87
89
88
90
switch (param ) {
89
91
case PIN_CONFIG_BIAS_DISABLE :
90
- if (hw -> soc -> bias_disable_get ) {
92
+ if (hw -> soc -> bias_disable_get )
91
93
err = hw -> soc -> bias_disable_get (hw , desc , & ret );
92
- if (err )
93
- return err ;
94
- } else {
95
- return - ENOTSUPP ;
96
- }
94
+ else
95
+ err = - ENOTSUPP ;
97
96
break ;
98
97
case PIN_CONFIG_BIAS_PULL_UP :
99
- if (hw -> soc -> bias_get ) {
98
+ if (hw -> soc -> bias_get )
100
99
err = hw -> soc -> bias_get (hw , desc , 1 , & ret );
101
- if (err )
102
- return err ;
103
- } else {
104
- return - ENOTSUPP ;
105
- }
100
+ else
101
+ err = - ENOTSUPP ;
106
102
break ;
107
103
case PIN_CONFIG_BIAS_PULL_DOWN :
108
- if (hw -> soc -> bias_get ) {
104
+ if (hw -> soc -> bias_get )
109
105
err = hw -> soc -> bias_get (hw , desc , 0 , & ret );
110
- if (err )
111
- return err ;
112
- } else {
113
- return - ENOTSUPP ;
114
- }
106
+ else
107
+ err = - ENOTSUPP ;
115
108
break ;
116
109
case PIN_CONFIG_SLEW_RATE :
117
110
err = mtk_hw_get_value (hw , desc , PINCTRL_PIN_REG_SR , & val );
@@ -126,12 +119,16 @@ static int mtk_pinconf_get(struct pinctrl_dev *pctldev,
126
119
case PIN_CONFIG_OUTPUT_ENABLE :
127
120
err = mtk_hw_get_value (hw , desc , PINCTRL_PIN_REG_DIR , & val );
128
121
if (err )
129
- return err ;
130
-
131
- /* HW takes input mode as zero; output mode as non-zero */
132
- if ((val && param == PIN_CONFIG_INPUT_ENABLE ) ||
133
- (!val && param == PIN_CONFIG_OUTPUT_ENABLE ))
134
- return - EINVAL ;
122
+ goto out ;
123
+ /* CONFIG Current direction return value
124
+ * ------------- ----------------- ----------------------
125
+ * OUTPUT_ENABLE output 1 (= HW value)
126
+ * input 0 (= HW value)
127
+ * INPUT_ENABLE output 0 (= reverse HW value)
128
+ * input 1 (= reverse HW value)
129
+ */
130
+ if (param == PIN_CONFIG_INPUT_ENABLE )
131
+ val = !val ;
135
132
136
133
break ;
137
134
case PIN_CONFIG_INPUT_SCHMITT_ENABLE :
@@ -148,13 +145,10 @@ static int mtk_pinconf_get(struct pinctrl_dev *pctldev,
148
145
149
146
break ;
150
147
case PIN_CONFIG_DRIVE_STRENGTH :
151
- if (hw -> soc -> drive_get ) {
148
+ if (hw -> soc -> drive_get )
152
149
err = hw -> soc -> drive_get (hw , desc , & ret );
153
- if (err )
154
- return err ;
155
- } else {
150
+ else
156
151
err = - ENOTSUPP ;
157
- }
158
152
break ;
159
153
case MTK_PIN_CONFIG_TDSEL :
160
154
case MTK_PIN_CONFIG_RDSEL :
@@ -175,28 +169,24 @@ static int mtk_pinconf_get(struct pinctrl_dev *pctldev,
175
169
176
170
pullup = param == MTK_PIN_CONFIG_PU_ADV ;
177
171
err = hw -> soc -> adv_pull_get (hw , desc , pullup , & ret );
178
- if (err )
179
- return err ;
180
- } else {
181
- return - ENOTSUPP ;
182
- }
172
+ } else
173
+ err = - ENOTSUPP ;
183
174
break ;
184
175
case MTK_PIN_CONFIG_DRV_ADV :
185
- if (hw -> soc -> adv_drive_get ) {
176
+ if (hw -> soc -> adv_drive_get )
186
177
err = hw -> soc -> adv_drive_get (hw , desc , & ret );
187
- if (err )
188
- return err ;
189
- } else {
190
- return - ENOTSUPP ;
191
- }
178
+ else
179
+ err = - ENOTSUPP ;
192
180
break ;
193
181
default :
194
- return - ENOTSUPP ;
182
+ err = - ENOTSUPP ;
195
183
}
196
184
197
- * config = pinconf_to_config_packed (param , ret );
185
+ out :
186
+ if (!err )
187
+ * config = pinconf_to_config_packed (param , ret );
198
188
199
- return 0 ;
189
+ return err ;
200
190
}
201
191
202
192
static int mtk_pinconf_set (struct pinctrl_dev * pctldev , unsigned int pin ,
@@ -216,60 +206,47 @@ static int mtk_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
216
206
217
207
switch ((u32 )param ) {
218
208
case PIN_CONFIG_BIAS_DISABLE :
219
- if (hw -> soc -> bias_disable_set ) {
209
+ if (hw -> soc -> bias_disable_set )
220
210
err = hw -> soc -> bias_disable_set (hw , desc );
221
- if (err )
222
- return err ;
223
- } else {
224
- return - ENOTSUPP ;
225
- }
211
+ else
212
+ err = - ENOTSUPP ;
226
213
break ;
227
214
case PIN_CONFIG_BIAS_PULL_UP :
228
- if (hw -> soc -> bias_set ) {
215
+ if (hw -> soc -> bias_set )
229
216
err = hw -> soc -> bias_set (hw , desc , 1 );
230
- if (err )
231
- return err ;
232
- } else {
233
- return - ENOTSUPP ;
234
- }
217
+ else
218
+ err = - ENOTSUPP ;
235
219
break ;
236
220
case PIN_CONFIG_BIAS_PULL_DOWN :
237
- if (hw -> soc -> bias_set ) {
221
+ if (hw -> soc -> bias_set )
238
222
err = hw -> soc -> bias_set (hw , desc , 0 );
239
- if (err )
240
- return err ;
241
- } else {
242
- return - ENOTSUPP ;
243
- }
223
+ else
224
+ err = - ENOTSUPP ;
244
225
break ;
245
226
case PIN_CONFIG_OUTPUT_ENABLE :
246
227
err = mtk_hw_set_value (hw , desc , PINCTRL_PIN_REG_SMT ,
247
228
MTK_DISABLE );
248
- if (err )
229
+ /* Keep set direction to consider the case that a GPIO pin
230
+ * does not have SMT control
231
+ */
232
+ if (err != - ENOTSUPP )
249
233
goto err ;
250
234
251
235
err = mtk_hw_set_value (hw , desc , PINCTRL_PIN_REG_DIR ,
252
236
MTK_OUTPUT );
253
- if (err )
254
- goto err ;
255
237
break ;
256
238
case PIN_CONFIG_INPUT_ENABLE :
257
- if ( hw -> soc -> ies_present ) {
258
- mtk_hw_set_value (hw , desc , PINCTRL_PIN_REG_IES ,
259
- MTK_ENABLE );
260
- }
239
+ /* regard all non-zero value as enable */
240
+ err = mtk_hw_set_value (hw , desc , PINCTRL_PIN_REG_IES , !! arg );
241
+ if ( err )
242
+ goto err ;
261
243
262
244
err = mtk_hw_set_value (hw , desc , PINCTRL_PIN_REG_DIR ,
263
245
MTK_INPUT );
264
- if (err )
265
- goto err ;
266
246
break ;
267
247
case PIN_CONFIG_SLEW_RATE :
268
- err = mtk_hw_set_value (hw , desc , PINCTRL_PIN_REG_SR ,
269
- arg );
270
- if (err )
271
- goto err ;
272
-
248
+ /* regard all non-zero value as enable */
249
+ err = mtk_hw_set_value (hw , desc , PINCTRL_PIN_REG_SR , !!arg );
273
250
break ;
274
251
case PIN_CONFIG_OUTPUT :
275
252
err = mtk_hw_set_value (hw , desc , PINCTRL_PIN_REG_DIR ,
@@ -279,41 +256,29 @@ static int mtk_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
279
256
280
257
err = mtk_hw_set_value (hw , desc , PINCTRL_PIN_REG_DO ,
281
258
arg );
282
- if (err )
283
- goto err ;
284
259
break ;
260
+ case PIN_CONFIG_INPUT_SCHMITT :
285
261
case PIN_CONFIG_INPUT_SCHMITT_ENABLE :
286
262
/* arg = 1: Input mode & SMT enable ;
287
263
* arg = 0: Output mode & SMT disable
288
264
*/
289
- arg = arg ? 2 : 1 ;
290
- err = mtk_hw_set_value (hw , desc , PINCTRL_PIN_REG_DIR ,
291
- arg & 1 );
265
+ err = mtk_hw_set_value (hw , desc , PINCTRL_PIN_REG_DIR , !arg );
292
266
if (err )
293
267
goto err ;
294
268
295
- err = mtk_hw_set_value (hw , desc , PINCTRL_PIN_REG_SMT ,
296
- !!(arg & 2 ));
297
- if (err )
298
- goto err ;
269
+ err = mtk_hw_set_value (hw , desc , PINCTRL_PIN_REG_SMT , !!arg );
299
270
break ;
300
271
case PIN_CONFIG_DRIVE_STRENGTH :
301
- if (hw -> soc -> drive_set ) {
272
+ if (hw -> soc -> drive_set )
302
273
err = hw -> soc -> drive_set (hw , desc , arg );
303
- if (err )
304
- return err ;
305
- } else {
306
- return - ENOTSUPP ;
307
- }
274
+ else
275
+ err = - ENOTSUPP ;
308
276
break ;
309
277
case MTK_PIN_CONFIG_TDSEL :
310
278
case MTK_PIN_CONFIG_RDSEL :
311
279
reg = (param == MTK_PIN_CONFIG_TDSEL ) ?
312
280
PINCTRL_PIN_REG_TDSEL : PINCTRL_PIN_REG_RDSEL ;
313
-
314
281
err = mtk_hw_set_value (hw , desc , reg , arg );
315
- if (err )
316
- goto err ;
317
282
break ;
318
283
case MTK_PIN_CONFIG_PU_ADV :
319
284
case MTK_PIN_CONFIG_PD_ADV :
@@ -323,20 +288,14 @@ static int mtk_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
323
288
pullup = param == MTK_PIN_CONFIG_PU_ADV ;
324
289
err = hw -> soc -> adv_pull_set (hw , desc , pullup ,
325
290
arg );
326
- if (err )
327
- return err ;
328
- } else {
329
- return - ENOTSUPP ;
330
- }
291
+ } else
292
+ err = - ENOTSUPP ;
331
293
break ;
332
294
case MTK_PIN_CONFIG_DRV_ADV :
333
- if (hw -> soc -> adv_drive_set ) {
295
+ if (hw -> soc -> adv_drive_set )
334
296
err = hw -> soc -> adv_drive_set (hw , desc , arg );
335
- if (err )
336
- return err ;
337
- } else {
338
- return - ENOTSUPP ;
339
- }
297
+ else
298
+ err = - ENOTSUPP ;
340
299
break ;
341
300
default :
342
301
err = - ENOTSUPP ;
0 commit comments