]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
pinctrl: mediatek: add pullen, pullsel register support to pinctrl-mtk-common-v2.c
authorSean Wang <sean.wang@mediatek.com>
Sat, 8 Sep 2018 11:07:27 +0000 (19:07 +0800)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 18 Sep 2018 21:53:02 +0000 (14:53 -0700)
Certain SoCs have to program an extra PULLEN, PULLSEL register to configure
bias related function so that we add it in the existing path.

Signed-off-by: Ryder.Lee <ryder.lee@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
drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.h

index e66bf49a8c4c9ff0fafa3cdb4053e5d897dd63f6..86eefe899935efdd8b6f1370efe603c934587f53 100644 (file)
@@ -190,6 +190,7 @@ int mtk_hw_get_value(struct mtk_pinctrl *hw, int pin, int field, int *value)
        return 0;
 }
 
+/* Revision 0 */
 int mtk_pinconf_bias_disable_set(struct mtk_pinctrl *hw,
                                 const struct mtk_pin_desc *desc)
 {
@@ -268,6 +269,81 @@ int mtk_pinconf_bias_get(struct mtk_pinctrl *hw,
        return 0;
 }
 
+/* Revision 1 */
+int mtk_pinconf_bias_disable_set_rev1(struct mtk_pinctrl *hw,
+                                     const struct mtk_pin_desc *desc)
+{
+       int err;
+
+       err = mtk_hw_set_value(hw, desc->number, PINCTRL_PIN_REG_PULLEN,
+                              MTK_DISABLE);
+       if (err)
+               return err;
+
+       return 0;
+}
+
+int mtk_pinconf_bias_disable_get_rev1(struct mtk_pinctrl *hw,
+                                     const struct mtk_pin_desc *desc, int *res)
+{
+       int v, err;
+
+       err = mtk_hw_get_value(hw, desc->number, PINCTRL_PIN_REG_PULLEN, &v);
+       if (err)
+               return err;
+
+       if (v == MTK_ENABLE)
+               return -EINVAL;
+
+       *res = 1;
+
+       return 0;
+}
+
+int mtk_pinconf_bias_set_rev1(struct mtk_pinctrl *hw,
+                             const struct mtk_pin_desc *desc, bool pullup)
+{
+       int err, arg;
+
+       arg = pullup ? MTK_PULLUP : MTK_PULLDOWN;
+
+       err = mtk_hw_set_value(hw, desc->number, PINCTRL_PIN_REG_PULLEN,
+                              MTK_ENABLE);
+       if (err)
+               return err;
+
+       err = mtk_hw_set_value(hw, desc->number, PINCTRL_PIN_REG_PULLSEL, arg);
+       if (err)
+               return err;
+
+       return 0;
+}
+
+int mtk_pinconf_bias_get_rev1(struct mtk_pinctrl *hw,
+                             const struct mtk_pin_desc *desc, bool pullup,
+                             int *res)
+{
+       int err, v;
+
+       err = mtk_hw_get_value(hw, desc->number, PINCTRL_PIN_REG_PULLEN, &v);
+       if (err)
+               return err;
+
+       if (v == MTK_DISABLE)
+               return -EINVAL;
+
+       err = mtk_hw_get_value(hw, desc->number, PINCTRL_PIN_REG_PULLSEL, &v);
+       if (err)
+               return err;
+
+       if (pullup ^ (v == MTK_PULLUP))
+               return -EINVAL;
+
+       *res = 1;
+
+       return 0;
+}
+
 /* Revision 0 */
 int mtk_pinconf_drive_set(struct mtk_pinctrl *hw,
                          const struct mtk_pin_desc *desc, u32 arg)
index b01dbd831ef77886d48442170215959f7bd96bbe..d90788b0bd188580fa23fe8504e4aba62fca3aea 100644 (file)
@@ -13,6 +13,8 @@
 #define MTK_OUTPUT     1
 #define MTK_DISABLE    0
 #define MTK_ENABLE     1
+#define MTK_PULLDOWN   0
+#define MTK_PULLUP     1
 
 #define EINT_NA        -1
 
@@ -55,6 +57,8 @@ enum {
        PINCTRL_PIN_REG_R0,
        PINCTRL_PIN_REG_R1,
        PINCTRL_PIN_REG_IES,
+       PINCTRL_PIN_REG_PULLEN,
+       PINCTRL_PIN_REG_PULLSEL,
        PINCTRL_PIN_REG_MAX,
 };
 
@@ -201,6 +205,17 @@ int mtk_pinconf_bias_get(struct mtk_pinctrl *hw,
                         const struct mtk_pin_desc *desc, bool pullup,
                         int *res);
 
+int mtk_pinconf_bias_disable_set_rev1(struct mtk_pinctrl *hw,
+                                     const struct mtk_pin_desc *desc);
+int mtk_pinconf_bias_disable_get_rev1(struct mtk_pinctrl *hw,
+                                     const struct mtk_pin_desc *desc,
+                                     int *res);
+int mtk_pinconf_bias_set_rev1(struct mtk_pinctrl *hw,
+                             const struct mtk_pin_desc *desc, bool pullup);
+int mtk_pinconf_bias_get_rev1(struct mtk_pinctrl *hw,
+                             const struct mtk_pin_desc *desc, bool pullup,
+                             int *res);
+
 int mtk_pinconf_drive_set(struct mtk_pinctrl *hw,
                          const struct mtk_pin_desc *desc, u32 arg);
 int mtk_pinconf_drive_get(struct mtk_pinctrl *hw,