summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSvyatoslav Ryhel <[email protected]>2025-04-11 08:49:12 +0300
committerSvyatoslav Ryhel <[email protected]>2025-05-08 08:30:53 +0300
commita87b564018ac3a2beb460439ba002e4c0cb59998 (patch)
treec17ad715c627366733acc74dd1eebda57c870de9
parent48db49b0977cc1c9c9abf82c0fb704238fcef4fd (diff)
gpio: tegra_gpio: implement rfree operation
Releasing a GPIO on Tegra necessitates changing its configuration to SFIO to activate its special function. Without this reconfiguration, the special function will be unavailable. Signed-off-by: Svyatoslav Ryhel <[email protected]>
-rw-r--r--drivers/gpio/tegra_gpio.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/gpio/tegra_gpio.c b/drivers/gpio/tegra_gpio.c
index b83df351e74..3d1e18854f2 100644
--- a/drivers/gpio/tegra_gpio.c
+++ b/drivers/gpio/tegra_gpio.c
@@ -248,6 +248,16 @@ static int tegra_gpio_xlate(struct udevice *dev, struct gpio_desc *desc,
return 0;
}
+static int tegra_gpio_rfree(struct udevice *dev, unsigned int offset)
+{
+ struct tegra_port_info *state = dev_get_priv(dev);
+
+ /* Set the pin as a SFIO */
+ set_config(state->base_gpio + offset, CFG_SFIO);
+
+ return 0;
+}
+
static const struct dm_gpio_ops gpio_tegra_ops = {
.direction_input = tegra_gpio_direction_input,
.direction_output = tegra_gpio_direction_output,
@@ -255,6 +265,7 @@ static const struct dm_gpio_ops gpio_tegra_ops = {
.set_value = tegra_gpio_set_value,
.get_function = tegra_gpio_get_function,
.xlate = tegra_gpio_xlate,
+ .rfree = tegra_gpio_rfree,
};
/*