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()

Correct cases for PIN_CONFIG_SLEW_RATE, PIN_CONFIG_INPUT_SCHMITT_ENABLE,
and PIN_CONFIG_OUTPUT_ENABLE -
Use variable ret to receive value in mtk_hw_get_value() (instead of
variable val) since pinconf_to_config_packed() at end of this function
use variable ret to pack config value.

Signed-off-by: Light Hsieh <light.hsieh@mediatek.com>
Link: https://lore.kernel.org/r/1579675994-7001-4-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
1bea6afb 3599cc52

+15 -25
+15 -25
drivers/pinctrl/mediatek/pinctrl-paris.c
··· 78 78 { 79 79 struct mtk_pinctrl *hw = pinctrl_dev_get_drvdata(pctldev); 80 80 u32 param = pinconf_to_config_param(*config); 81 - int val, val2, err, reg, ret = 1; 81 + int err, reg, ret = 1; 82 82 const struct mtk_pin_desc *desc; 83 83 84 84 if (pin >= hw->soc->npins) { ··· 107 107 err = -ENOTSUPP; 108 108 break; 109 109 case PIN_CONFIG_SLEW_RATE: 110 - err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_SR, &val); 111 - if (err) 112 - return err; 113 - 114 - if (!val) 115 - return -EINVAL; 116 - 110 + err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_SR, &ret); 117 111 break; 118 112 case PIN_CONFIG_INPUT_ENABLE: 119 113 case PIN_CONFIG_OUTPUT_ENABLE: 120 - err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_DIR, &val); 114 + err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_DIR, &ret); 121 115 if (err) 122 116 goto out; 123 117 /* CONFIG Current direction return value ··· 122 128 * input 1 (= reverse HW value) 123 129 */ 124 130 if (param == PIN_CONFIG_INPUT_ENABLE) 125 - val = !val; 131 + ret = !ret; 126 132 127 133 break; 128 134 case PIN_CONFIG_INPUT_SCHMITT_ENABLE: 129 - err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_DIR, &val); 135 + err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_DIR, &ret); 130 136 if (err) 131 - return err; 137 + goto out; 138 + /* return error when in output mode 139 + * because schmitt trigger only work in input mode 140 + */ 141 + if (ret) { 142 + err = -EINVAL; 143 + goto out; 144 + } 132 145 133 - err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_SMT, &val2); 134 - if (err) 135 - return err; 136 - 137 - if (val || !val2) 138 - return -EINVAL; 146 + err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_SMT, &ret); 139 147 140 148 break; 141 149 case PIN_CONFIG_DRIVE_STRENGTH: ··· 150 154 case MTK_PIN_CONFIG_RDSEL: 151 155 reg = (param == MTK_PIN_CONFIG_TDSEL) ? 152 156 PINCTRL_PIN_REG_TDSEL : PINCTRL_PIN_REG_RDSEL; 153 - 154 - err = mtk_hw_get_value(hw, desc, reg, &val); 155 - if (err) 156 - return err; 157 - 158 - ret = val; 159 - 157 + err = mtk_hw_get_value(hw, desc, reg, &ret); 160 158 break; 161 159 case MTK_PIN_CONFIG_PU_ADV: 162 160 case MTK_PIN_CONFIG_PD_ADV: