diff options
author | Sean Wang <sean.wang@mediatek.com> | 2018-09-08 07:07:35 -0400 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2018-09-18 17:53:32 -0400 |
commit | 79348f6fb713a339be94ed14dfa210d5d20cf17d (patch) | |
tree | ceb22d31735488478d121ed27fd2862ce1d2db35 /drivers/pinctrl/mediatek | |
parent | 750cd15d908151afa2df0f48d3917301e7af2369 (diff) |
pinctrl: mediatek: extend advanced pull support in pinctrl-mtk-common-v2.c
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>
Diffstat (limited to 'drivers/pinctrl/mediatek')
-rw-r--r-- | drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c index 7cdd46f6671e..7d5f570d7211 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c +++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c | |||
@@ -476,6 +476,19 @@ int mtk_pinconf_adv_pull_set(struct mtk_pinctrl *hw, | |||
476 | 476 | ||
477 | err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_PUPD, arg); | 477 | err = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_PUPD, arg); |
478 | 478 | ||
479 | /* If PUPD register is not supported for that pin, let's fallback to | ||
480 | * general bias control. | ||
481 | */ | ||
482 | if (err == -ENOTSUPP) { | ||
483 | if (hw->soc->bias_set) { | ||
484 | err = hw->soc->bias_set(hw, desc, pullup); | ||
485 | if (err) | ||
486 | return err; | ||
487 | } else { | ||
488 | return -ENOTSUPP; | ||
489 | } | ||
490 | } | ||
491 | |||
479 | return err; | 492 | return err; |
480 | } | 493 | } |
481 | 494 | ||
@@ -487,12 +500,26 @@ int mtk_pinconf_adv_pull_get(struct mtk_pinctrl *hw, | |||
487 | int err; | 500 | int err; |
488 | 501 | ||
489 | err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_PUPD, &t); | 502 | err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_PUPD, &t); |
490 | if (err) | ||
491 | return err; | ||
492 | 503 | ||
493 | /* t == 0 supposes PULLUP for the customized PULL setup */ | 504 | /* If PUPD register is not supported for that pin, let's fallback to |
494 | if (pullup ^ !t) | 505 | * general bias control. |
495 | return -EINVAL; | 506 | */ |
507 | if (err == -ENOTSUPP) { | ||
508 | if (hw->soc->bias_get) { | ||
509 | err = hw->soc->bias_get(hw, desc, pullup, val); | ||
510 | if (err) | ||
511 | return err; | ||
512 | } else { | ||
513 | return -ENOTSUPP; | ||
514 | } | ||
515 | } else { | ||
516 | /* t == 0 supposes PULLUP for the customized PULL setup */ | ||
517 | if (err) | ||
518 | return err; | ||
519 | |||
520 | if (pullup ^ !t) | ||
521 | return -EINVAL; | ||
522 | } | ||
496 | 523 | ||
497 | err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_R0, &t); | 524 | err = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_R0, &t); |
498 | if (err) | 525 | if (err) |