pinctrl: qcom: spmi-gpio: Fix the GPIO strength mapping
authorAnjelique Melendez <quic_amelende@quicinc.com>
Mon, 12 Sep 2022 21:06:25 +0000 (14:06 -0700)
committerLinus Walleij <linus.walleij@linaro.org>
Mon, 19 Sep 2022 11:52:13 +0000 (13:52 +0200)
The SPMI based PMICs have the HIGH and LOW GPIO output strength mappings
interchanged, fix them.

Signed-off-by: Anjelique Melendez <quic_amelende@quicinc.com>
Link: https://lore.kernel.org/r/20220912210624.4527-3-quic_amelende@quicinc.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/qcom/pinctrl-spmi-gpio.c

index 9534bdffe6fbd74bc1dd1ec1250c8a5195aa3274..8f4235f878d5c55bb2e0dde8036c901ac0c6c15f 100644 (file)
 #define PMIC_GPIO_OUT_BUF_OPEN_DRAIN_NMOS      1
 #define PMIC_GPIO_OUT_BUF_OPEN_DRAIN_PMOS      2
 
+#define PMIC_GPIO_OUT_STRENGTH_LOW             1
+#define PMIC_GPIO_OUT_STRENGTH_HIGH            3
+
 /* PMIC_GPIO_REG_EN_CTL */
 #define PMIC_GPIO_REG_MASTER_EN_SHIFT          7
 
@@ -439,7 +442,17 @@ static int pmic_gpio_config_get(struct pinctrl_dev *pctldev,
                arg = pad->pullup;
                break;
        case PMIC_GPIO_CONF_STRENGTH:
-               arg = pad->strength;
+               switch (pad->strength) {
+               case PMIC_GPIO_OUT_STRENGTH_HIGH:
+                       arg = PMIC_GPIO_STRENGTH_HIGH;
+                       break;
+               case PMIC_GPIO_OUT_STRENGTH_LOW:
+                       arg = PMIC_GPIO_STRENGTH_LOW;
+                       break;
+               default:
+                       arg = pad->strength;
+                       break;
+               }
                break;
        case PMIC_GPIO_CONF_ATEST:
                arg = pad->atest;
@@ -526,7 +539,17 @@ static int pmic_gpio_config_set(struct pinctrl_dev *pctldev, unsigned int pin,
                case PMIC_GPIO_CONF_STRENGTH:
                        if (arg > PMIC_GPIO_STRENGTH_LOW)
                                return -EINVAL;
-                       pad->strength = arg;
+                       switch (arg) {
+                       case PMIC_GPIO_STRENGTH_HIGH:
+                               pad->strength = PMIC_GPIO_OUT_STRENGTH_HIGH;
+                               break;
+                       case PMIC_GPIO_STRENGTH_LOW:
+                               pad->strength = PMIC_GPIO_OUT_STRENGTH_LOW;
+                               break;
+                       default:
+                               pad->strength = arg;
+                               break;
+                       }
                        break;
                case PMIC_GPIO_CONF_ATEST:
                        if (!pad->lv_mv_type || arg > 4)