123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- From fae82621ac33e2a4a96220c56e90d1ec6237d394 Mon Sep 17 00:00:00 2001
- From: Sam Shih <[email protected]>
- Date: Sun, 6 Nov 2022 09:01:12 +0100
- Subject: [PATCH] pinctrl: mediatek: extend pinctrl-moore to support new bias
- functions
- Commit fb34a9ae383a ("pinctrl: mediatek: support rsel feature")
- introduced SoC specify 'pull_type' attribute to mtk_pinconf_bias_set_combo
- and mtk_pinconf_bias_get_combo, and make the functions able to support
- almost all Mediatek SoCs that use pinctrl-mtk-common-v2.c.
- This patch enables pinctrl_moore to support these functions.
- Signed-off-by: Sam Shih <[email protected]>
- Signed-off-by: Frank Wunderlich <[email protected]>
- Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
- Link: https://lore.kernel.org/r/[email protected]
- Signed-off-by: Linus Walleij <[email protected]>
- ---
- drivers/pinctrl/mediatek/pinctrl-moore.c | 49 ++++++++++++++++++++----
- 1 file changed, 42 insertions(+), 7 deletions(-)
- --- a/drivers/pinctrl/mediatek/pinctrl-moore.c
- +++ b/drivers/pinctrl/mediatek/pinctrl-moore.c
- @@ -8,6 +8,7 @@
- *
- */
-
- +#include <dt-bindings/pinctrl/mt65xx.h>
- #include <linux/gpio/driver.h>
- #include "pinctrl-moore.h"
-
- @@ -105,7 +106,7 @@ static int mtk_pinconf_get(struct pinctr
- {
- struct mtk_pinctrl *hw = pinctrl_dev_get_drvdata(pctldev);
- u32 param = pinconf_to_config_param(*config);
- - int val, val2, err, reg, ret = 1;
- + int val, val2, err, pullup, reg, ret = 1;
- const struct mtk_pin_desc *desc;
-
- desc = (const struct mtk_pin_desc *)&hw->soc->pins[pin];
- @@ -114,7 +115,13 @@ static int mtk_pinconf_get(struct pinctr
-
- switch (param) {
- case PIN_CONFIG_BIAS_DISABLE:
- - if (hw->soc->bias_disable_get) {
- + if (hw->soc->bias_get_combo) {
- + err = hw->soc->bias_get_combo(hw, desc, &pullup, &ret);
- + if (err)
- + return err;
- + if (ret != MTK_PUPD_SET_R1R0_00 && ret != MTK_DISABLE)
- + return -EINVAL;
- + } else if (hw->soc->bias_disable_get) {
- err = hw->soc->bias_disable_get(hw, desc, &ret);
- if (err)
- return err;
- @@ -123,7 +130,15 @@ static int mtk_pinconf_get(struct pinctr
- }
- break;
- case PIN_CONFIG_BIAS_PULL_UP:
- - if (hw->soc->bias_get) {
- + if (hw->soc->bias_get_combo) {
- + err = hw->soc->bias_get_combo(hw, desc, &pullup, &ret);
- + if (err)
- + return err;
- + if (ret == MTK_PUPD_SET_R1R0_00 || ret == MTK_DISABLE)
- + return -EINVAL;
- + if (!pullup)
- + return -EINVAL;
- + } else if (hw->soc->bias_get) {
- err = hw->soc->bias_get(hw, desc, 1, &ret);
- if (err)
- return err;
- @@ -132,7 +147,15 @@ static int mtk_pinconf_get(struct pinctr
- }
- break;
- case PIN_CONFIG_BIAS_PULL_DOWN:
- - if (hw->soc->bias_get) {
- + if (hw->soc->bias_get_combo) {
- + err = hw->soc->bias_get_combo(hw, desc, &pullup, &ret);
- + if (err)
- + return err;
- + if (ret == MTK_PUPD_SET_R1R0_00 || ret == MTK_DISABLE)
- + return -EINVAL;
- + if (pullup)
- + return -EINVAL;
- + } else if (hw->soc->bias_get) {
- err = hw->soc->bias_get(hw, desc, 0, &ret);
- if (err)
- return err;
- @@ -235,7 +258,11 @@ static int mtk_pinconf_set(struct pinctr
-
- switch (param) {
- case PIN_CONFIG_BIAS_DISABLE:
- - if (hw->soc->bias_disable_set) {
- + if (hw->soc->bias_set_combo) {
- + err = hw->soc->bias_set_combo(hw, desc, 0, MTK_DISABLE);
- + if (err)
- + return err;
- + } else if (hw->soc->bias_disable_set) {
- err = hw->soc->bias_disable_set(hw, desc);
- if (err)
- return err;
- @@ -244,7 +271,11 @@ static int mtk_pinconf_set(struct pinctr
- }
- break;
- case PIN_CONFIG_BIAS_PULL_UP:
- - if (hw->soc->bias_set) {
- + if (hw->soc->bias_set_combo) {
- + err = hw->soc->bias_set_combo(hw, desc, 1, arg);
- + if (err)
- + return err;
- + } else if (hw->soc->bias_set) {
- err = hw->soc->bias_set(hw, desc, 1);
- if (err)
- return err;
- @@ -253,7 +284,11 @@ static int mtk_pinconf_set(struct pinctr
- }
- break;
- case PIN_CONFIG_BIAS_PULL_DOWN:
- - if (hw->soc->bias_set) {
- + if (hw->soc->bias_set_combo) {
- + err = hw->soc->bias_set_combo(hw, desc, 0, arg);
- + if (err)
- + return err;
- + } else if (hw->soc->bias_set) {
- err = hw->soc->bias_set(hw, desc, 0);
- if (err)
- return err;
|