Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

pinctrl: mediatek: Refine mtk_pinconf_get() and mtk_pinconf_set()

1.Refine mtk_pinconf_get():
Use only one occurrence of return at end of this function.

2.Refine mtk_pinconf_set():
2.1 Use only one occurrence of return at end of this function.
2.2 Modify case of PIN_CONFIG_INPUT_ENABLE -
2.2.1
Regard all non-zero setting value as enable, instead of always enable.
2.2.2
Remove check of ies_present flag and always invoke mtk_hw_set_value()
since mtk_hw_pin_field_lookup() invoked inside mtk_hw_set_value() has
the same effect of checking if ies control is supported.
[The rationale is that: available of a control is always checked
in mtk_hw_pin_field_lookup() and no need to add ies_present flag
specially for ies control.]
2.3 Simply code logic for case of PIN_CONFIG_INPUT_SCHMITT.
2.4 Add case for PIN_CONFIG_INPUT_SCHMITT_ENABLE and process it with the
same code for case of PIN_CONFIG_INPUT_SCHMITT.

Signed-off-by: Light Hsieh <light.hsieh@mediatek.com>
Link: https://lore.kernel.org/r/1579675994-7001-3-git-send-email-light.hsieh@mediatek.com
Acked-by: Sean Wang <sean.wang@kernel.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

authored by

Light Hsieh and committed by
Linus Walleij
3599cc52 5f755e1f

+65 -108
-1
drivers/pinctrl/mediatek/pinctrl-mt6765.c
··· 1070 1070 .ngrps = ARRAY_SIZE(mtk_pins_mt6765), 1071 1071 .eint_hw = &mt6765_eint_hw, 1072 1072 .gpio_m = 0, 1073 - .ies_present = true, 1074 1073 .base_names = mt6765_pinctrl_register_base_names, 1075 1074 .nbase_names = ARRAY_SIZE(mt6765_pinctrl_register_base_names), 1076 1075 .bias_disable_set = mtk_pinconf_bias_disable_set,
-1
drivers/pinctrl/mediatek/pinctrl-mt8183.c
··· 554 554 .ngrps = ARRAY_SIZE(mtk_pins_mt8183), 555 555 .eint_hw = &mt8183_eint_hw, 556 556 .gpio_m = 0, 557 - .ies_present = true, 558 557 .base_names = mt8183_pinctrl_register_base_names, 559 558 .nbase_names = ARRAY_SIZE(mt8183_pinctrl_register_base_names), 560 559 .bias_disable_set = mtk_pinconf_bias_disable_set_rev1,
+65 -106
drivers/pinctrl/mediatek/pinctrl-paris.c
··· 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); ··· 119 126 case PIN_CONFIG_OUTPUT_ENABLE: 120 127 err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_DIR, &val); 121 128 if (err) 122 - return err; 123 - 124 - /* HW takes input mode as zero; output mode as non-zero */ 125 - if ((val && param == PIN_CONFIG_INPUT_ENABLE) || 126 - (!val && param == PIN_CONFIG_OUTPUT_ENABLE)) 127 - return -EINVAL; 129 + goto out; 130 + /* CONFIG Current direction return value 131 + * ------------- ----------------- ---------------------- 132 + * OUTPUT_ENABLE output 1 (= HW value) 133 + * input 0 (= HW value) 134 + * INPUT_ENABLE output 0 (= reverse HW value) 135 + * input 1 (= reverse HW value) 136 + */ 137 + if (param == PIN_CONFIG_INPUT_ENABLE) 138 + val = !val; 128 139 129 140 break; 130 141 case PIN_CONFIG_INPUT_SCHMITT_ENABLE: ··· 145 148 146 149 break; 147 150 case PIN_CONFIG_DRIVE_STRENGTH: 148 - if (hw->soc->drive_get) { 151 + if (hw->soc->drive_get) 149 152 err = hw->soc->drive_get(hw, desc, &ret); 150 - if (err) 151 - return err; 152 - } else { 153 + else 153 154 err = -ENOTSUPP; 154 - } 155 155 break; 156 156 case MTK_PIN_CONFIG_TDSEL: 157 157 case MTK_PIN_CONFIG_RDSEL: ··· 169 175 170 176 pullup = param == MTK_PIN_CONFIG_PU_ADV; 171 177 err = hw->soc->adv_pull_get(hw, desc, pullup, &ret); 172 - if (err) 173 - return err; 174 - } else { 175 - return -ENOTSUPP; 176 - } 178 + } else 179 + err = -ENOTSUPP; 177 180 break; 178 181 case MTK_PIN_CONFIG_DRV_ADV: 179 - if (hw->soc->adv_drive_get) { 182 + if (hw->soc->adv_drive_get) 180 183 err = hw->soc->adv_drive_get(hw, desc, &ret); 181 - if (err) 182 - return err; 183 - } else { 184 - return -ENOTSUPP; 185 - } 184 + else 185 + err = -ENOTSUPP; 186 186 break; 187 187 default: 188 - return -ENOTSUPP; 188 + err = -ENOTSUPP; 189 189 } 190 190 191 - *config = pinconf_to_config_packed(param, ret); 191 + out: 192 + if (!err) 193 + *config = pinconf_to_config_packed(param, ret); 192 194 193 - return 0; 195 + return err; 194 196 } 195 197 196 198 static int mtk_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin, ··· 206 216 207 217 switch ((u32)param) { 208 218 case PIN_CONFIG_BIAS_DISABLE: 209 - if (hw->soc->bias_disable_set) { 219 + if (hw->soc->bias_disable_set) 210 220 err = hw->soc->bias_disable_set(hw, desc); 211 - if (err) 212 - return err; 213 - } else { 214 - return -ENOTSUPP; 215 - } 221 + else 222 + err = -ENOTSUPP; 216 223 break; 217 224 case PIN_CONFIG_BIAS_PULL_UP: 218 - if (hw->soc->bias_set) { 225 + if (hw->soc->bias_set) 219 226 err = hw->soc->bias_set(hw, desc, 1); 220 - if (err) 221 - return err; 222 - } else { 223 - return -ENOTSUPP; 224 - } 227 + else 228 + err = -ENOTSUPP; 225 229 break; 226 230 case PIN_CONFIG_BIAS_PULL_DOWN: 227 - if (hw->soc->bias_set) { 231 + if (hw->soc->bias_set) 228 232 err = hw->soc->bias_set(hw, desc, 0); 229 - if (err) 230 - return err; 231 - } else { 232 - return -ENOTSUPP; 233 - } 233 + else 234 + err = -ENOTSUPP; 234 235 break; 235 236 case PIN_CONFIG_OUTPUT_ENABLE: 236 237 err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_SMT, 237 238 MTK_DISABLE); 238 - if (err) 239 + /* Keep set direction to consider the case that a GPIO pin 240 + * does not have SMT control 241 + */ 242 + if (err != -ENOTSUPP) 239 243 goto err; 240 244 241 245 err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_DIR, 242 246 MTK_OUTPUT); 243 - if (err) 244 - goto err; 245 247 break; 246 248 case PIN_CONFIG_INPUT_ENABLE: 247 - if (hw->soc->ies_present) { 248 - mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_IES, 249 - MTK_ENABLE); 250 - } 249 + /* regard all non-zero value as enable */ 250 + err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_IES, !!arg); 251 + if (err) 252 + goto err; 251 253 252 254 err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_DIR, 253 255 MTK_INPUT); 254 - if (err) 255 - goto err; 256 256 break; 257 257 case PIN_CONFIG_SLEW_RATE: 258 - err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_SR, 259 - arg); 260 - if (err) 261 - goto err; 262 - 258 + /* regard all non-zero value as enable */ 259 + err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_SR, !!arg); 263 260 break; 264 261 case PIN_CONFIG_OUTPUT: 265 262 err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_DIR, ··· 256 279 257 280 err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_DO, 258 281 arg); 259 - if (err) 260 - goto err; 261 282 break; 283 + case PIN_CONFIG_INPUT_SCHMITT: 262 284 case PIN_CONFIG_INPUT_SCHMITT_ENABLE: 263 285 /* arg = 1: Input mode & SMT enable ; 264 286 * arg = 0: Output mode & SMT disable 265 287 */ 266 - arg = arg ? 2 : 1; 267 - err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_DIR, 268 - arg & 1); 288 + err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_DIR, !arg); 269 289 if (err) 270 290 goto err; 271 291 272 - err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_SMT, 273 - !!(arg & 2)); 274 - if (err) 275 - goto err; 292 + err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_SMT, !!arg); 276 293 break; 277 294 case PIN_CONFIG_DRIVE_STRENGTH: 278 - if (hw->soc->drive_set) { 295 + if (hw->soc->drive_set) 279 296 err = hw->soc->drive_set(hw, desc, arg); 280 - if (err) 281 - return err; 282 - } else { 283 - return -ENOTSUPP; 284 - } 297 + else 298 + err = -ENOTSUPP; 285 299 break; 286 300 case MTK_PIN_CONFIG_TDSEL: 287 301 case MTK_PIN_CONFIG_RDSEL: 288 302 reg = (param == MTK_PIN_CONFIG_TDSEL) ? 289 303 PINCTRL_PIN_REG_TDSEL : PINCTRL_PIN_REG_RDSEL; 290 - 291 304 err = mtk_hw_set_value(hw, desc, reg, arg); 292 - if (err) 293 - goto err; 294 305 break; 295 306 case MTK_PIN_CONFIG_PU_ADV: 296 307 case MTK_PIN_CONFIG_PD_ADV: ··· 288 323 pullup = param == MTK_PIN_CONFIG_PU_ADV; 289 324 err = hw->soc->adv_pull_set(hw, desc, pullup, 290 325 arg); 291 - if (err) 292 - return err; 293 - } else { 294 - return -ENOTSUPP; 295 - } 326 + } else 327 + err = -ENOTSUPP; 296 328 break; 297 329 case MTK_PIN_CONFIG_DRV_ADV: 298 - if (hw->soc->adv_drive_set) { 330 + if (hw->soc->adv_drive_set) 299 331 err = hw->soc->adv_drive_set(hw, desc, arg); 300 - if (err) 301 - return err; 302 - } else { 303 - return -ENOTSUPP; 304 - } 332 + else 333 + err = -ENOTSUPP; 305 334 break; 306 335 default: 307 336 err = -ENOTSUPP;