]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
pinctrl: sprd: Add pin high impedance mode support
authorLinhua Xu <linhua.xu@unisoc.com>
Wed, 25 Mar 2020 08:25:28 +0000 (16:25 +0800)
committerLinus Walleij <linus.walleij@linaro.org>
Fri, 27 Mar 2020 21:08:46 +0000 (22:08 +0100)
For Spreadtrum pin controller, it will be the high impedance
mode if disable input and output mode for a pin. Thus add
PIN_CONFIG_BIAS_HIGH_IMPEDANCE configuration to support it.

Signed-off-by: Linhua Xu <linhua.xu@unisoc.com>
Signed-off-by: Baolin Wang <baolin.wang7@gmail.com>
Link: https://lore.kernel.org/r/3bdac4c2673b54c940e511f3fa569ee33b87b8d5.1585124562.git.baolin.wang7@gmail.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/sprd/pinctrl-sprd.c

index 8e396104ad1ac2b9553c4e49a89f406d30af8cf6..48cbf2a2837f128c27a1339335d2e5f56bc3f175 100644 (file)
@@ -467,6 +467,12 @@ static int sprd_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin_id,
                case PIN_CONFIG_OUTPUT_ENABLE:
                        arg = reg & SLEEP_OUTPUT_MASK;
                        break;
+               case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
+                       if ((reg & SLEEP_OUTPUT) || (reg & SLEEP_INPUT))
+                               return -EINVAL;
+
+                       arg = 1;
+                       break;
                case PIN_CONFIG_DRIVE_STRENGTH:
                        arg = (reg >> DRIVE_STRENGTH_SHIFT) &
                                DRIVE_STRENGTH_MASK;
@@ -646,6 +652,12 @@ static int sprd_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin_id,
                                        shift = SLEEP_OUTPUT_SHIFT;
                                }
                                break;
+                       case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
+                               if (is_sleep_config == true) {
+                                       val = shift = 0;
+                                       mask = SLEEP_OUTPUT | SLEEP_INPUT;
+                               }
+                               break;
                        case PIN_CONFIG_DRIVE_STRENGTH:
                                if (arg < 2 || arg > 60)
                                        return -EINVAL;