diff options
Diffstat (limited to 'src/soc/nvidia/tegra')
-rw-r--r-- | src/soc/nvidia/tegra/gpio.c | 23 | ||||
-rw-r--r-- | src/soc/nvidia/tegra/gpio.h | 20 | ||||
-rw-r--r-- | src/soc/nvidia/tegra/software_i2c.c | 6 |
3 files changed, 23 insertions, 26 deletions
diff --git a/src/soc/nvidia/tegra/gpio.c b/src/soc/nvidia/tegra/gpio.c index 9f09f24547..009334f74c 100644 --- a/src/soc/nvidia/tegra/gpio.c +++ b/src/soc/nvidia/tegra/gpio.c @@ -19,16 +19,15 @@ #include <arch/io.h> #include <console/console.h> +#include <gpio.h> #include <soc/addressmap.h> #include <stddef.h> #include <stdint.h> #include <delay.h> -#include <gpiolib.h> -#include "gpio.h" #include "pinmux.h" -void __gpio_input(gpio_t gpio, u32 pull) +static void __gpio_input(gpio_t gpio, u32 pull) { u32 pinmux_config = PINMUX_INPUT_ENABLE | pull; @@ -38,10 +37,10 @@ void __gpio_input(gpio_t gpio, u32 pull) pinmux_set_config(gpio >> GPIO_PINMUX_SHIFT, pinmux_config); } -void __gpio_output(gpio_t gpio, int value, u32 od) +static void __gpio_output(gpio_t gpio, int value, u32 od) { gpio_set_int_enable(gpio, 0); - gpio_set_out_value(gpio, value); + gpio_set(gpio, value); gpio_set_out_enable(gpio, 1); gpio_set_mode(gpio, GPIO_MODE_GPIO); pinmux_set_config(gpio >> GPIO_PINMUX_SHIFT, PINMUX_PULL_NONE | od); @@ -121,7 +120,7 @@ int gpio_get_out_enable(gpio_t gpio) return (port & (1 << bit)) != 0; } -void gpio_set_out_value(gpio_t gpio, int value) +void gpio_set(gpio_t gpio, int value) { int bit = gpio % GPIO_GPIOS_PER_PORT; gpio_write_port(gpio & ((1 << GPIO_PINMUX_SHIFT) - 1), @@ -137,7 +136,7 @@ int gpio_get_out_value(gpio_t gpio) return (port & (1 << bit)) != 0; } -int gpio_get_in_value(gpio_t gpio) +int gpio_get(gpio_t gpio) { int bit = gpio % GPIO_GPIOS_PER_PORT; u32 port = gpio_read_port(gpio & ((1 << GPIO_PINMUX_SHIFT) - 1), @@ -212,3 +211,13 @@ void gpio_input(gpio_t gpio) { __gpio_input(gpio, PINMUX_PULL_NONE); } + +void gpio_output(gpio_t gpio, int value) +{ + __gpio_output(gpio, value, 0); +} + +void gpio_output_open_drain(gpio_t gpio, int value) +{ + __gpio_output(gpio, value, PINMUX_OPEN_DRAIN); +} diff --git a/src/soc/nvidia/tegra/gpio.h b/src/soc/nvidia/tegra/gpio.h index 2ad3ab3e5f..72c7179f7c 100644 --- a/src/soc/nvidia/tegra/gpio.h +++ b/src/soc/nvidia/tegra/gpio.h @@ -21,29 +21,15 @@ #define __SOC_NVIDIA_TEGRA_GPIO_H__ #include <stdint.h> -#include <gpiolib.h> #include "pinmux.h" +typedef u32 gpio_t; + #define GPIO_PINMUX_SHIFT 16 #define GPIO(name) ((gpio_t)(GPIO_##name##_INDEX | \ (PINMUX_GPIO_##name << GPIO_PINMUX_SHIFT))) -void __gpio_output(gpio_t gpio, int value, u32 open_drain); -void __gpio_input(gpio_t gpio, u32 pull); - -/* Higher level function wrappers for common GPIO configurations. */ - -static inline void gpio_output(gpio_t gpio, int value) -{ - __gpio_output(gpio, value, 0); -} - -static inline void gpio_output_open_drain(gpio_t gpio, int value) -{ - __gpio_output(gpio, value, PINMUX_OPEN_DRAIN); -} - /* Functions to modify specific GPIO control values. */ enum gpio_mode { @@ -72,6 +58,8 @@ void gpio_get_int_level(gpio_t gpio, int *high_rise, int *edge, int *delta); void gpio_set_int_clear(gpio_t gpio); +void gpio_output_open_drain(gpio_t gpio, int value); + /* Hardware definitions. */ enum { diff --git a/src/soc/nvidia/tegra/software_i2c.c b/src/soc/nvidia/tegra/software_i2c.c index 35fc1af3cc..d1172bcde6 100644 --- a/src/soc/nvidia/tegra/software_i2c.c +++ b/src/soc/nvidia/tegra/software_i2c.c @@ -18,7 +18,7 @@ */ #include <device/i2c.h> -#include <soc/gpio.h> +#include <gpio.h> #include <soc/pinmux.h> #include "i2c.h" @@ -58,12 +58,12 @@ static void tegra_set_scl(unsigned bus, int high) static int tegra_get_sda(unsigned bus) { - return gpio_get_in_value(pins[bus].sda); + return gpio_get(pins[bus].sda); } static int tegra_get_scl(unsigned bus) { - return gpio_get_in_value(pins[bus].scl); + return gpio_get(pins[bus].scl); } static struct software_i2c_ops tegra_ops = { |