3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 * Licensed under the Apache License, Version 2.0 (the License);
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
21 #include <device-node.h>
24 #include "devman_internal.h"
27 #define DISPLAY_MAX_BRIGHTNESS 100
28 #define DISPLAY_MIN_BRIGHTNESS 0
30 #define DISP_INDEX_BIT 4
31 #define COMBINE_DISP_CMD(cmd, prop, index) (cmd = (prop | (index << DISP_INDEX_BIT)))
33 #define SET_FLAG(var, bit) (var |= (1<<bit))
34 #define UNSET_FLAG(var, bit) (var &= (~(1<<bit)))
38 static unsigned int disp_flag = 0x0;
40 API int device_get_battery_pct(void)
45 ret = device_get_property(DEVICE_TYPE_POWER, PROP_POWER_CAPACITY, &val);
49 if (val < 0 || val > 100) {
50 DEVERR("capacity value is wrong");
51 return DEVMAN_ERROR_OPERATION_FAILED;
57 API int device_is_battery_full(void)
62 ret = device_get_property(DEVICE_TYPE_POWER, PROP_POWER_CHARGE_FULL, &val);
66 if (val != 0 && val != 1) {
67 DEVERR("charge_full value is wrong");
68 return DEVMAN_ERROR_OPERATION_FAILED;
74 API int device_get_battery_health(void)
79 ret = device_get_property(DEVICE_TYPE_POWER, PROP_POWER_HEALTH, &val);
83 if (val < BAT_UNKNOWN || val > BAT_COLD) {
84 DEVERR("battery health value is wrong");
85 return DEVMAN_ERROR_OPERATION_FAILED;
91 API int device_get_battery_pct_raw(void)
96 ret = device_get_property(DEVICE_TYPE_POWER, PROP_POWER_CAPACITY_RAW, &val);
106 API int device_get_display_brt(display_num_t lcdnum)
112 COMBINE_DISP_CMD(cmd, PROP_DISPLAY_BRIGHTNESS, lcdnum);
113 ret = device_get_property(DEVICE_TYPE_DISPLAY, cmd, &val);
120 API int device_set_display_brt_with_settings(display_num_t lcdnum, int val)
127 if (vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &bat_state) != 0) {
128 DEVERR("Failed to get VCONFKEY_SYSMAN_BATTERY_STATUS_LOW value");
129 return DEVMAN_ERROR_OPERATION_FAILED;
132 if (bat_state < VCONFKEY_SYSMAN_BAT_WARNING_LOW) {
133 DEVLOG("can not set brightness for low battery");
134 return DEVMAN_ERROR_NONE;
137 if (vconf_get_int(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, &auto_brt_state) != 0) {
138 DEVERR("Failed to get VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT value");
139 return DEVMAN_ERROR_OPERATION_FAILED;
142 if (auto_brt_state == SETTING_BRIGHTNESS_AUTOMATIC_ON) {
143 DEVLOG("auto_brightness state is ON, can not change the brightness value");
144 return DEVMAN_ERROR_NONE;
147 COMBINE_DISP_CMD(cmd, PROP_DISPLAY_BRIGHTNESS, lcdnum);
148 ret = device_set_property(DEVICE_TYPE_DISPLAY, cmd, val);
152 if (vconf_set_int(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, val) != 0) {
153 DEVERR("Failed to set VCONFKEY_SETAPPL_LCD_BRIGHTNESS value");
156 if (vconf_set_int(VCONFKEY_PM_CURRENT_BRIGHTNESS, val) != 0) {
157 DEVERR("Failed to set VCONFKEY_PM_CURRENT_BRIGHTNESS value");
160 return DEVMAN_ERROR_NONE;
163 API int device_set_display_brt(display_num_t lcdnum, int val)
170 if (vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &bat_state) != 0) {
171 DEVERR("Failed to get VCONFKEY_SYSMAN_BATTERY_STATUS_LOW value");
172 return DEVMAN_ERROR_OPERATION_FAILED;
175 vconf_set_int(VCONFKEY_PM_CUSTOM_BRIGHTNESS_STATUS, VCONFKEY_PM_CUSTOM_BRIGHTNESS_ON);
176 if (bat_state < VCONFKEY_SYSMAN_BAT_WARNING_LOW) {
177 DEVLOG("can not set brightness for low battery");
178 return DEVMAN_ERROR_NONE;
181 if (vconf_get_int(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, &auto_brt_state) != 0) {
182 DEVERR("Failed to get VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT value");
183 return DEVMAN_ERROR_OPERATION_FAILED;
186 COMBINE_DISP_CMD(cmd, PROP_DISPLAY_BRIGHTNESS, lcdnum);
187 ret = device_set_property(DEVICE_TYPE_DISPLAY, cmd, val);
191 if (auto_brt_state == SETTING_BRIGHTNESS_AUTOMATIC_ON) {
192 DEVLOG("Auto brightness will be paused");
193 vconf_set_int(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, SETTING_BRIGHTNESS_AUTOMATIC_PAUSE);
196 if (vconf_set_int(VCONFKEY_PM_CURRENT_BRIGHTNESS, val) != 0) {
197 DEVERR("Failed to set VCONFKEY_PM_CURRENT_BRIGHTNESS value");
201 ret = display_register_postjob();
203 SET_FLAG(disp_flag, BRT_BIT);
204 return DEVMAN_ERROR_NONE;
207 API int device_release_brt_ctrl(display_num_t lcdnum)
213 int brt_changed_state;
217 if (vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &bat_state) != 0) {
218 DEVERR("Failed to get VCONFKEY_SYSMAN_BATTERY_STATUS_LOW value");
219 return DEVMAN_ERROR_OPERATION_FAILED;
222 if (vconf_get_int(VCONFKEY_SYSMAN_CHARGER_STATUS, &charger_state) != 0) {
223 DEVERR("Failed to get VCONFKEY_SYSMAN_CHARGER_STATUS value");
224 return DEVMAN_ERROR_OPERATION_FAILED;
227 if (vconf_get_bool(VCONFKEY_PM_BRIGHTNESS_CHANGED_IN_LPM, &brt_changed_state) != 0) {
228 DEVERR("Failed to get VCONFKEY_PM_BRIGHTNESS_CHANGED_IN_LPM value");
229 return DEVMAN_ERROR_OPERATION_FAILED;
232 vconf_set_int(VCONFKEY_PM_CUSTOM_BRIGHTNESS_STATUS, VCONFKEY_PM_CUSTOM_BRIGHTNESS_OFF);
233 if (bat_state < VCONFKEY_SYSMAN_BAT_WARNING_LOW) {
234 DEVLOG("can not set brightness for low battery");
235 return DEVMAN_ERROR_NONE;
238 if (vconf_get_int(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, &setting_val) != 0) {
239 DEVERR("Failed to get VCONFKEY_SETAPPL_LCD_BRIGHTNESS value");
240 return DEVMAN_ERROR_OPERATION_FAILED;
243 if (vconf_get_int(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, &auto_brt_state) != 0) {
244 DEVERR("Failed to get VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT value");
245 return DEVMAN_ERROR_OPERATION_FAILED;
249 if (bat_state == VCONFKEY_SYSMAN_BAT_WARNING_LOW &&
250 charger_state == VCONFKEY_SYSMAN_CHARGER_DISCONNECTED && !brt_changed_state) {
251 DEVLOG("batt warning low : brightness is not changed!");
252 COMBINE_DISP_CMD(cmd, PROP_DISPLAY_BRIGHTNESS, lcdnum);
253 device_set_property(DEVICE_TYPE_DISPLAY, cmd, 0);
254 return DEVMAN_ERROR_NONE;
257 if (auto_brt_state == SETTING_BRIGHTNESS_AUTOMATIC_OFF) {
258 COMBINE_DISP_CMD(cmd, PROP_DISPLAY_BRIGHTNESS, lcdnum);
259 device_set_property(DEVICE_TYPE_DISPLAY, cmd, setting_val);
260 } else if (auto_brt_state == SETTING_BRIGHTNESS_AUTOMATIC_PAUSE) {
261 DEVLOG("Auto brightness will be enable");
262 vconf_set_int(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, SETTING_BRIGHTNESS_AUTOMATIC_ON);
265 UNSET_FLAG(disp_flag, BRT_BIT);
267 display_cancel_postjob();
268 return DEVMAN_ERROR_NONE;
271 API int device_get_max_brt(display_num_t lcdnum)
273 return DISPLAY_MAX_BRIGHTNESS;
276 API int device_get_min_brt(display_num_t lcdnum)
278 return DISPLAY_MIN_BRIGHTNESS;
281 API int device_get_display_gamma(display_num_t lcdnum)
283 DEVERR("Not support this api");
284 return DEVMAN_ERROR_NOT_SUPPORTED;
287 API int device_set_display_gamma(display_num_t lcdnum, display_gamma_t val)
289 DEVERR("Not support this api");
290 return DEVMAN_ERROR_NOT_SUPPORTED;
293 API int device_release_gamma_ctrl(display_num_t lcdnum, display_gamma_t org_val)
295 DEVERR("Not support this api");
296 return DEVMAN_ERROR_NOT_SUPPORTED;
299 API int device_get_display_count(void)
304 ret = device_get_property(DEVICE_TYPE_DISPLAY, PROP_DISPLAY_DISPLAY_COUNT, &val);
311 API int device_get_image_enhance_mode(void)
316 ret = device_get_property(DEVICE_TYPE_DISPLAY, PROP_DISPLAY_IMAGE_ENHANCE_MODE, &val);
323 API int device_set_image_enhance_mode(int val)
327 ret = device_set_property(DEVICE_TYPE_DISPLAY, PROP_DISPLAY_IMAGE_ENHANCE_MODE, val);
331 return DEVMAN_ERROR_NONE;
334 API int device_get_image_enhance_scenario(void)
339 ret = device_get_property(DEVICE_TYPE_DISPLAY, PROP_DISPLAY_IMAGE_ENHANCE_SCENARIO, &val);
346 API int device_set_image_enhance_scenario(int val)
350 ret = device_set_property(DEVICE_TYPE_DISPLAY, PROP_DISPLAY_IMAGE_ENHANCE_SCENARIO, val);
354 return DEVMAN_ERROR_NONE;
357 API int device_get_image_enhance_tone(void)
362 ret = device_get_property(DEVICE_TYPE_DISPLAY, PROP_DISPLAY_IMAGE_ENHANCE_TONE, &val);
369 API int device_set_image_enhance_tone(int val)
373 ret = device_set_property(DEVICE_TYPE_DISPLAY, PROP_DISPLAY_IMAGE_ENHANCE_TONE, val);
377 return DEVMAN_ERROR_NONE;
380 API int device_get_image_enhance_outdoor(void)
385 ret = device_get_property(DEVICE_TYPE_DISPLAY, PROP_DISPLAY_IMAGE_ENHANCE_OUTDOOR, &val);
392 API int device_set_image_enhance_outdoor(int val)
396 ret = device_set_property(DEVICE_TYPE_DISPLAY, PROP_DISPLAY_IMAGE_ENHANCE_OUTDOOR, val);
400 return DEVMAN_ERROR_NONE;
403 API int device_get_image_enhance_info(void)
408 ret = device_get_property(DEVICE_TYPE_DISPLAY, PROP_DISPLAY_IMAGE_ENHANCE_INFO, &val);
415 API int device_get_led_brt(void)
420 ret = device_get_property(DEVTYPE_LED, LED_PROP_BRIGHTNESS, &val);
427 API int device_set_led_brt(int val)
431 ret = device_set_property(DEVTYPE_LED, LED_PROP_BRIGHTNESS, val);
436 UNSET_FLAG(disp_flag, LED_BIT);
438 display_cancel_postjob();
441 ret = display_register_postjob();
443 SET_FLAG(disp_flag, LED_BIT);
446 return DEVMAN_ERROR_NONE;
449 API int device_set_led_brt_without_noti(int val)
453 ret = device_set_property(DEVTYPE_LED, LED_PROP_BRIGHTNESS, val);
457 return DEVMAN_ERROR_NONE;
460 API int device_get_max_led(void)
465 ret = device_get_property(DEVTYPE_LED, LED_PROP_MAX_BRIGHTNESS, &val);
472 API int device_get_acl_control_status(display_num_t num)
478 COMBINE_DISP_CMD(cmd, PROP_DISPLAY_ACL_CONTROL, num);
479 ret = device_get_property(DEVICE_TYPE_DISPLAY, cmd, &val);
486 API int device_set_acl_control_status(display_num_t num, int val)
491 COMBINE_DISP_CMD(cmd, PROP_DISPLAY_ACL_CONTROL, num);
492 ret = device_set_property(DEVICE_TYPE_DISPLAY, cmd, val);
496 return DEVMAN_ERROR_NONE;