Remove executable flag from non-executable files
[platform/hal/backend/tm1/device-tm1.git] / hw / display / display.c
1 /*
2  * device-node
3  *
4  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
5  *
6  * Licensed under the Apache License, Version 2.0 (the License);
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <string.h>
23 #include <errno.h>
24 #include <linux/limits.h>
25
26 #include <hw/display.h>
27 #include <hw/shared.h>
28
29 #ifndef BACKLIGHT_PATH
30 #define BACKLIGHT_PATH  "/sys/class/backlight/panel"
31 #endif
32
33 #ifndef LCD_PATH
34 #define LCD_PATH  "/sys/class/lcd/panel"
35 #endif
36
37 static int display_get_max_brightness(int *val)
38 {
39         static int max = -1;
40         int r;
41
42         if (!val)
43                 return -EINVAL;
44
45         if (max < 0) {
46                 r = sys_get_int(BACKLIGHT_PATH"/max_brightness", &max);
47                 if (r < 0)
48                         return r;
49         }
50
51         *val = max;
52         return 0;
53 }
54
55 static int display_get_brightness(int *brightness)
56 {
57         int r, v;
58
59         if (!brightness) {
60                 _E("wrong parameter");
61                 return -EINVAL;
62         }
63
64         r = sys_get_int(BACKLIGHT_PATH"/brightness", &v);
65         if (r < 0) {
66                 _E("fail to get brightness : %d", r);
67                 return r;
68         }
69
70         *brightness = v;
71         return 0;
72 }
73
74 static int display_set_brightness(int brightness)
75 {
76         int r, max;
77
78         r = display_get_max_brightness(&max);
79         if (r < 0) {
80                 _E("fail to get max brightness (errno:%d)", r);
81                 return r;
82         }
83
84         if (brightness < 0 || brightness > max) {
85                 _E("wrong parameter");
86                 return -EINVAL;
87         }
88
89         r = sys_set_int(BACKLIGHT_PATH"/brightness", brightness);
90         if (r < 0) {
91                 _E("fail to set brightness (errno:%d)", r);
92                 return r;
93         }
94
95         return 0;
96 }
97
98 static int display_get_state(enum display_state *state)
99 {
100         int r, v;
101
102         r = sys_get_int(LCD_PATH"/lcd_power", &v);
103         if (r < 0) {
104                 _E("fail to get state (errno:%d)", r);
105                 return r;
106         }
107
108         //remap LCD state
109         switch (v) {
110         case 0:
111                 *state = DISPLAY_ON;
112                 break;
113         case 4:
114                 *state = DISPLAY_OFF;
115                 break;
116         default:
117                 *state = -EINVAL;
118                 break;
119         }
120
121         return 0;
122 }
123
124 static int display_open(struct hw_info *info,
125                 const char *id, struct hw_common **common)
126 {
127         struct display_device *display_dev;
128
129         if (!info || !common)
130                 return -EINVAL;
131
132         display_dev = calloc(1, sizeof(struct display_device));
133         if (!display_dev)
134                 return -ENOMEM;
135
136         display_dev->common.info = info;
137         display_dev->get_max_brightness = display_get_max_brightness;
138         display_dev->get_brightness = display_get_brightness;
139         display_dev->set_brightness = display_set_brightness;
140         display_dev->get_state = display_get_state;
141
142         *common = (struct hw_common *)display_dev;
143         return 0;
144 }
145
146 static int display_close(struct hw_common *common)
147 {
148         if (!common)
149                 return -EINVAL;
150
151         free(common);
152         return 0;
153 }
154
155 HARDWARE_MODULE_STRUCTURE = {
156         .magic = HARDWARE_INFO_TAG,
157         .hal_version = HARDWARE_INFO_VERSION,
158         .device_version = DISPLAY_HARDWARE_DEVICE_VERSION,
159         .id = DISPLAY_HARDWARE_DEVICE_ID,
160         .name = "Display",
161         .open = display_open,
162         .close = display_close,
163 };