]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
pinctrl: mediatek: extend advanced pull support in pinctrl-mtk-common-v2.c
authorSean Wang <sean.wang@mediatek.com>
Sat, 8 Sep 2018 11:07:35 +0000 (19:07 +0800)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 18 Sep 2018 21:53:32 +0000 (14:53 -0700)
Extend the advanced pull based on the legacy bias plus additional r0 and r1
to tweak the resistor level.

Signed-off-by: Zhiyong Tao <zhiyong.tao@mediatek.com>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c

index 7cdd46f6671eaebd861264bbbfca9fb0d41d94ce..7d5f570d7211ebf58cde8003ae70aa0f7ddb9ffc 100644 (file)
@@ -476,6 +476,19 @@ int mtk_pinconf_adv_pull_set(struct mtk_pinctrl *hw,
 
        err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_PUPD, arg);
 
+       /* If PUPD register is not supported for that pin, let's fallback to
+        * general bias control.
+        */
+       if (err == -ENOTSUPP) {
+               if (hw->soc->bias_set) {
+                       err = hw->soc->bias_set(hw, desc, pullup);
+                       if (err)
+                               return err;
+               } else {
+                       return -ENOTSUPP;
+               }
+       }
+
        return err;
 }
 
@@ -487,12 +500,26 @@ int mtk_pinconf_adv_pull_get(struct mtk_pinctrl *hw,
        int err;
 
        err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_PUPD, &t);
-       if (err)
-               return err;
 
-       /* t == 0 supposes PULLUP for the customized PULL setup */
-       if (pullup ^ !t)
-               return -EINVAL;
+       /* If PUPD register is not supported for that pin, let's fallback to
+        * general bias control.
+        */
+       if (err == -ENOTSUPP) {
+               if (hw->soc->bias_get) {
+                       err = hw->soc->bias_get(hw, desc, pullup, val);
+                       if (err)
+                               return err;
+               } else {
+                       return -ENOTSUPP;
+               }
+       } else {
+               /* t == 0 supposes PULLUP for the customized PULL setup */
+               if (err)
+                       return err;
+
+               if (pullup ^ !t)
+                       return -EINVAL;
+       }
 
        err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_R0, &t);
        if (err)