aboutsummaryrefslogtreecommitdiff
path: root/linux/3.1.6/0011-n35-Powermanagement-for-some-LCD-stuff-on-Acer-n35.patch
blob: 68e7ed49fe4af0d93d45a4929966edff374f2de0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
From 3dad22d3a6e269ea7387c756592fd831fbd7810e Mon Sep 17 00:00:00 2001
From: Jiri Pinkava <jiri.pinkava@vscht.cz>
Date: Mon, 24 May 2010 11:03:52 +0200
Subject: [PATCH 11/14] n35: Powermanagement for some LCD stuff on Acer n35

Signed-off-by: Jiri Pinkava <jiri.pinkava@vscht.cz>
---
 arch/arm/mach-s3c2410/mach-n30.c |   47 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 47 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-s3c2410/mach-n30.c b/arch/arm/mach-s3c2410/mach-n30.c
index 9c0e5b8..3c784e4 100644
--- a/arch/arm/mach-s3c2410/mach-n30.c
+++ b/arch/arm/mach-s3c2410/mach-n30.c
@@ -56,6 +56,8 @@
 #include <plat/ts.h>
 #include <plat/udc.h>
 
+#include <video/platform_lcd.h>
+
 #ifdef CONFIG_MTD_PARTITIONS
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/nand.h>
@@ -563,6 +565,45 @@ static struct platform_device n35_backlight = {
 	.id   = -1,
 };
 
+static void n35_lcd_set_power(struct plat_lcd_data *pd, unsigned int power)
+{
+	if (power) {
+		gpio_set_value(S3C2410_GPB(8), 1);
+		s3c_gpio_setpull(S3C2410_GPB(8), S3C_GPIO_PULL_UP);
+
+		s3c_gpio_cfgpin(S3C2410_GPB(9), S3C2410_GPIO_OUTPUT);
+		gpio_set_value(S3C2410_GPB(9), 1);
+		s3c_gpio_setpull(S3C2410_GPB(9), S3C_GPIO_PULL_UP);
+
+		s3c_gpio_cfgpin(S3C2410_GPB(10), S3C2410_GPIO_OUTPUT);
+		gpio_set_value(S3C2410_GPB(10), 1);
+		s3c_gpio_setpull(S3C2410_GPB(10), S3C_GPIO_PULL_UP);
+	} else {
+		gpio_set_value(S3C2410_GPB(8), 0);
+		s3c_gpio_setpull(S3C2410_GPB(8), S3C_GPIO_PULL_DOWN);
+
+		s3c_gpio_cfgpin(S3C2410_GPB(9), S3C2410_GPIO_INPUT);
+		s3c_gpio_setpull(S3C2410_GPB(9), S3C_GPIO_PULL_DOWN);
+
+		s3c_gpio_cfgpin(S3C2410_GPB(10), S3C2410_GPIO_INPUT);
+		s3c_gpio_setpull(S3C2410_GPB(10), S3C_GPIO_PULL_DOWN);
+	}
+}
+
+
+static struct plat_lcd_data n35_lcd_power_data = {
+	.set_power = n35_lcd_set_power,
+};
+
+static struct platform_device n35_lcd_powerdev = {
+	.name	= "platform-lcd",
+	.id	= -1,
+	.dev	= {
+		.parent		= &s3c_device_lcd.dev,
+		.platform_data	= &n35_lcd_power_data,
+	},
+};
+
 static void n30_sdi_set_power(unsigned char power_mode, unsigned short vdd)
 {
 	switch (power_mode) {
@@ -617,6 +658,7 @@ static struct platform_device *n35_devices[] __initdata = {
 	&s3c_device_ts,
 	&s3c_device_timer[0],
 	&n35_backlight,
+	&n35_lcd_powerdev,
 	&n30_battery,
 	&n35_button_device,
 	&n35_blue_led,
@@ -806,6 +848,11 @@ static void __init n30_init(void)
 	if (machine_is_n35()) {
 		s3c_nand_set_platdata(&n35_nand_info);
 
+		WARN_ON(gpio_request(S3C2410_GPB(8), "LCD driver"));
+		WARN_ON(gpio_request(S3C2410_GPB(9), "LCD HSYNC"));
+		WARN_ON(gpio_request(S3C2410_GPB(10), "LCD VSYNC"));
+		s3c_gpio_cfgpin(S3C2410_GPB(8), S3C2410_GPIO_OUTPUT);
+
 		/* Clear any locks and write protects on the flash. */
 		WARN_ON(gpio_request(S3C2410_GPC(5), "NAND write protection"));
 		gpio_set_value(S3C2410_GPC(5), 1);
-- 
1.7.3.1