summaryrefslogtreecommitdiff
path: root/patches.tizen/0811-video-cdf-panel-support-lcd-class-operations-for-s6d.patch
blob: a2df81fbb12374be5548bf95fc68ef60db48df9d (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
93
94
95
96
97
98
99
100
101
102
103
From d39c773d6367c5e176cf0fe460c1698f2f7b61b5 Mon Sep 17 00:00:00 2001
From: Donghwa Lee <dh09.lee@samsung.com>
Date: Fri, 27 Sep 2013 16:42:08 +0900
Subject: [PATCH 0811/1302] video: cdf-panel: support lcd class operations for
 s6d6aa1 panel

Signed-off-by: Donghwa Lee <dh09.lee@samsung.com>
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
---
 drivers/video/display/panel-s6d6aa1.c | 56 +++++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/drivers/video/display/panel-s6d6aa1.c b/drivers/video/display/panel-s6d6aa1.c
index d48f926..dd5285d 100644
--- a/drivers/video/display/panel-s6d6aa1.c
+++ b/drivers/video/display/panel-s6d6aa1.c
@@ -56,6 +56,7 @@ struct s6d6aa1 {
 	struct device *dev;
 
 	struct s6d6aa1_platform_data *pdata;
+	struct lcd_device *ld;
 	struct backlight_device *bd;
 	struct regulator_bulk_data supplies[2];
 
@@ -415,6 +416,51 @@ static const struct backlight_ops s6d6aa1_backlight_ops = {
 	.update_status = s6d6aa1_set_brightness,
 };
 
+static int s6d6aa1_set_power(struct lcd_device *ld, int power)
+{
+	struct s6d6aa1 *lcd = lcd_get_data(ld);
+	enum display_entity_state state;
+	int ret = 0;
+
+	switch (power) {
+	case FB_BLANK_UNBLANK:
+		state = DISPLAY_ENTITY_STATE_ON;
+		ret = display_entity_set_state(&lcd->entity, state);
+		if (ret)
+			goto unlock;
+
+		s6d6aa1_brightness_ctrl(lcd, lcd->bd->props.brightness);
+		break;
+	case FB_BLANK_POWERDOWN:
+		s6d6aa1_brightness_ctrl(lcd, 0);
+
+		state = DISPLAY_ENTITY_STATE_OFF;
+		ret = display_entity_set_state(&lcd->entity, state);
+		if (ret)
+			goto unlock;
+		break;
+	default:
+		state = DISPLAY_ENTITY_STATE_STANDBY;
+	}
+
+	lcd->power = power;
+
+unlock:
+	return ret;
+}
+
+static int s6d6aa1_get_power(struct lcd_device *ld)
+{
+	struct s6d6aa1 *lcd = lcd_get_data(ld);
+
+	return lcd->power;
+}
+
+static struct lcd_ops s6d6aa1_lcd_ops = {
+	.set_power = s6d6aa1_set_power,
+	.get_power = s6d6aa1_get_power,
+};
+
 static int s6d6aa1_check_mtp(struct s6d6aa1 *lcd)
 {
 	s6d6aa1_apply_level_1_key(lcd);
@@ -679,6 +725,14 @@ static int s6d6aa1_probe(struct platform_device *pdev)
 		goto err_regulator_bulk_get;
 	}
 
+	lcd->ld = lcd_device_register("s6d6aa1", &pdev->dev, lcd,
+			&s6d6aa1_lcd_ops);
+	if (IS_ERR(lcd->ld)) {
+		dev_err(lcd->dev, "failed to register lcd ops.\n");
+		ret = PTR_ERR(lcd->ld);
+		goto err_lcd_register;
+	}
+
 	lcd->bd = backlight_device_register("s6d6aa1", &pdev->dev, lcd,
 			&s6d6aa1_backlight_ops, NULL);
 	if (IS_ERR(lcd->bd)) {
@@ -712,6 +766,8 @@ static int s6d6aa1_probe(struct platform_device *pdev)
 err_display_register:
 	backlight_device_unregister(lcd->bd);
 err_backlight_register:
+	lcd_device_unregister(lcd->ld);
+err_lcd_register:
 	regulator_bulk_free(ARRAY_SIZE(lcd->supplies), lcd->supplies);
 err_regulator_bulk_get:
 	kfree(lcd);
-- 
1.8.3.2