|
|
|
@ -21,6 +21,7 @@ |
|
|
|
|
#include <asm/arch/tegra.h> |
|
|
|
|
#include <asm/gpio.h> |
|
|
|
|
#include <dm/device-internal.h> |
|
|
|
|
#include <dt-bindings/gpio/gpio.h> |
|
|
|
|
|
|
|
|
|
DECLARE_GLOBAL_DATA_PTR; |
|
|
|
|
|
|
|
|
@ -251,6 +252,22 @@ static int tegra_gpio_get_function(struct udevice *dev, unsigned offset) |
|
|
|
|
return GPIOF_INPUT; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int tegra_gpio_xlate(struct udevice *dev, struct gpio_desc *desc, |
|
|
|
|
struct fdtdec_phandle_args *args) |
|
|
|
|
{ |
|
|
|
|
int gpio, port, ret; |
|
|
|
|
|
|
|
|
|
gpio = args->args[0]; |
|
|
|
|
port = gpio / TEGRA_GPIOS_PER_PORT; |
|
|
|
|
ret = device_get_child(dev, port, &desc->dev); |
|
|
|
|
if (ret) |
|
|
|
|
return ret; |
|
|
|
|
desc->offset = gpio % TEGRA_GPIOS_PER_PORT; |
|
|
|
|
desc->flags = args->args[1] & GPIO_ACTIVE_LOW ? GPIOD_ACTIVE_LOW : 0; |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static const struct dm_gpio_ops gpio_tegra_ops = { |
|
|
|
|
.request = tegra_gpio_request, |
|
|
|
|
.direction_input = tegra_gpio_direction_input, |
|
|
|
@ -258,6 +275,7 @@ static const struct dm_gpio_ops gpio_tegra_ops = { |
|
|
|
|
.get_value = tegra_gpio_get_value, |
|
|
|
|
.set_value = tegra_gpio_set_value, |
|
|
|
|
.get_function = tegra_gpio_get_function, |
|
|
|
|
.xlate = tegra_gpio_xlate, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|