From 4281b0f06abbe077d23d4b6f0e078cef95d4c091 Mon Sep 17 00:00:00 2001 From: Marcel Ziswiler Date: Tue, 5 Feb 2013 12:59:35 +0100 Subject: apalis_t30: add LVDS GPIO exports The THine THC63LVD827 LVDS transmitter uses 8 GPIOs for configuration. This patch configures and exports them for easy user-space access. Configure LG LP156WF1 15.6 inch full HD dual channel LVDS panel: root@apalis-t30:~# echo out > /sys/class/gpio/gpio216/direction root@apalis-t30:~# echo 0 > /sys/class/gpio/gpio216/value root@apalis-t30:~# echo out > /sys/class/gpio/gpio219/direction root@apalis-t30:~# echo 1 > /sys/class/gpio/gpio219/value root@apalis-t30:~# echo out > /sys/class/gpio/gpio220/direction root@apalis-t30:~# echo 1 > /sys/class/gpio/gpio220/value root@apalis-t30:~# echo out > /sys/class/gpio/gpio221/direction root@apalis-t30:~# echo 1 > /sys/class/gpio/gpio221/value root@apalis-t30:~# echo out > /sys/class/gpio/gpio222/direction root@apalis-t30:~# echo 1 > /sys/class/gpio/gpio222/value root@apalis-t30:~# echo out > /sys/class/gpio/gpio223/direction root@apalis-t30:~# echo 1 > /sys/class/gpio/gpio223/value root@apalis-t30:~# echo out > /sys/class/gpio/gpio225/direction root@apalis-t30:~# echo 1 > /sys/class/gpio/gpio225/value root@apalis-t30:~# echo out > /sys/class/gpio/gpio226/direction root@apalis-t30:~# echo 1 > /sys/class/gpio/gpio226/value root@apalis-t30:~# cat /sys/kernel/debug/gpio | grep LVDS gpio-216 (LVDS: Single/Dual Ch) out lo gpio-219 (LVDS: 18/24 Bit Mode) out hi gpio-220 (LVDS: Output Enable ) out hi gpio-221 (LVDS: Power Down ) out hi gpio-222 (LVDS: Clock Polarity) out hi gpio-223 (LVDS: Colour Mapping) out hi gpio-225 (LVDS: Swing Mode ) out hi gpio-226 (LVDS: DDRclk Disable) out hi --- arch/arm/mach-tegra/board-apalis_t30.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'arch') diff --git a/arch/arm/mach-tegra/board-apalis_t30.c b/arch/arm/mach-tegra/board-apalis_t30.c index 5501c75f1eef..809fbfe8165f 100644 --- a/arch/arm/mach-tegra/board-apalis_t30.c +++ b/arch/arm/mach-tegra/board-apalis_t30.c @@ -168,7 +168,36 @@ static struct tegra_clk_init_table apalis_t30_clk_init_table[] __initdata = { /* GPIO */ -//TODO: sysfs GPIO exports +static struct gpio apalis_t30_gpios[] = { + {TEGRA_GPIO_PBB0, GPIOF_IN, "LVDS: Single/Dual Ch"}, + {TEGRA_GPIO_PBB3, GPIOF_IN, "LVDS: 18/24 Bit Mode"}, + {TEGRA_GPIO_PBB4, GPIOF_IN, "LVDS: Output Enable"}, + {TEGRA_GPIO_PBB5, GPIOF_IN, "LVDS: Power Down"}, + {TEGRA_GPIO_PBB6, GPIOF_IN, "LVDS: Clock Polarity"}, + {TEGRA_GPIO_PBB7, GPIOF_IN, "LVDS: Colour Mapping"}, + {TEGRA_GPIO_PCC1, GPIOF_IN, "LVDS: Swing Mode"}, + {TEGRA_GPIO_PCC2, GPIOF_IN, "LVDS: DDRclk Disable"}, +}; + +static void apalis_t30_gpio_init(void) +{ + int i = 0; + int length = sizeof(apalis_t30_gpios) / sizeof(struct gpio); + int err = 0; + + for (i = 0; i < length; i++) { + err = gpio_request_one(apalis_t30_gpios[i].gpio, + apalis_t30_gpios[i].flags, + apalis_t30_gpios[i].label); + + if (err) { + pr_warning("gpio_request(%s) failed, err = %d", + apalis_t30_gpios[i].label, err); + } else { + gpio_export(apalis_t30_gpios[i].gpio, true); + } + } +} /* I2C */ @@ -1166,6 +1195,7 @@ static void __init apalis_t30_init(void) #endif tegra_serial_debug_init(TEGRA_UARTD_BASE, INT_WDT_CPU, NULL, -1, -1); apalis_t20_mcp2515_can_init(); + apalis_t30_gpio_init(); } static void __init apalis_t30_reserve(void) -- cgit v1.2.3