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
|