summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/board-apalis_t30.c
diff options
context:
space:
mode:
authorMarcel Ziswiler <marcel.ziswiler@toradex.com>2013-02-05 12:59:35 +0100
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2013-02-05 12:59:35 +0100
commit4281b0f06abbe077d23d4b6f0e078cef95d4c091 (patch)
tree2a9a338b15f53687a72c8f019962ddaf3cc195db /arch/arm/mach-tegra/board-apalis_t30.c
parent9c3a5de99af755b86ef12ca1a9314987aad6073a (diff)
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
Diffstat (limited to 'arch/arm/mach-tegra/board-apalis_t30.c')
-rw-r--r--arch/arm/mach-tegra/board-apalis_t30.c32
1 files changed, 31 insertions, 1 deletions
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)