]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
pinctrl-tegra: Add config property GPIO mode
authorPrathamesh Shete <pshete@nvidia.com>
Tue, 17 Dec 2024 15:32:49 +0000 (21:02 +0530)
committerLinus Walleij <linus.walleij@linaro.org>
Fri, 28 Feb 2025 08:37:25 +0000 (09:37 +0100)
The SFIO/GPIO select bit is a crucial part of Tegra's pin multiplexing
system:
- When set to 1, the pin operates in SFIO mode, controlled by the
  pin's assigned special function.
- When set to 0, the pin operates as a general-purpose GPIO.

This SFIO/GPIO select bit that is set for a given pin is not displayed,
adding the support to retrieve this information from the
pinmux set for each pin.

Signed-off-by: Prathamesh Shete <pshete@nvidia.com>
Link: https://lore.kernel.org/20241217153249.5712-1-pshete@nvidia.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/tegra/pinctrl-tegra.c
drivers/pinctrl/tegra/pinctrl-tegra.h

index c83e5a65e6801c5177f904034b315e69c7c3198f..314309c797d7df399053ad9422965cd6d9c01eb0 100644 (file)
@@ -96,6 +96,7 @@ static const struct cfg_param {
        {"nvidia,slew-rate-falling",    TEGRA_PINCONF_PARAM_SLEW_RATE_FALLING},
        {"nvidia,slew-rate-rising",     TEGRA_PINCONF_PARAM_SLEW_RATE_RISING},
        {"nvidia,drive-type",           TEGRA_PINCONF_PARAM_DRIVE_TYPE},
+       {"nvidia,gpio-mode",            TEGRA_PINCONF_PARAM_GPIO_MODE},
 };
 
 static int tegra_pinctrl_dt_subnode_to_map(struct pinctrl_dev *pctldev,
@@ -468,6 +469,16 @@ static int tegra_pinconf_reg(struct tegra_pmx *pmx,
                *bit = g->drvtype_bit;
                *width = 2;
                break;
+       case TEGRA_PINCONF_PARAM_GPIO_MODE:
+               if (pmx->soc->sfsel_in_mux) {
+                       *bank = g->mux_bank;
+                       *reg = g->mux_reg;
+                       *bit = g->sfsel_bit;
+                       *width = 1;
+               } else {
+                       *reg = -EINVAL;
+               }
+               break;
        default:
                dev_err(pmx->dev, "Invalid config param %04x\n", param);
                return -ENOTSUPP;
index b3289bdf727d8291ff6d23931eeb0b61ceae6576..216cc59b62b4ba4e5f433eec17a132d0e1e7f9f6 100644 (file)
@@ -54,6 +54,8 @@ enum tegra_pinconf_param {
        TEGRA_PINCONF_PARAM_SLEW_RATE_RISING,
        /* argument: Integer, range is HW-dependant */
        TEGRA_PINCONF_PARAM_DRIVE_TYPE,
+       /* argument: Boolean */
+       TEGRA_PINCONF_PARAM_GPIO_MODE,
 };
 
 enum tegra_pinconf_pull {