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
|