summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjk7744.park <jk7744.park@samsung.com>2015-09-08 21:29:40 +0900
committerjk7744.park <jk7744.park@samsung.com>2015-09-08 21:29:40 +0900
commitac359615d389df132b9cf77207a478ead5b12efe (patch)
tree4ac508411390a37f1ed1045c0fc2567c9506265b
parentf54ae0c1b5457b6d9b981a7f1f98f82b3cac72cd (diff)
downloaddevice-manager-plugin-exynos3250-tizen_2.3.1.tar.gz
device-manager-plugin-exynos3250-tizen_2.3.1.tar.bz2
device-manager-plugin-exynos3250-tizen_2.3.1.zip
-rw-r--r--61-tizen-video-device.rules10
-rwxr-xr-xCMakeLists.txt37
-rw-r--r--LICENSE.Apache-2.0204
-rw-r--r--device-manager-plugin-exynos3250.manifest5
-rw-r--r--dump/dump_time.sh14
-rw-r--r--include/device_manager_io.h30
-rwxr-xr-xinclude/devman_define_node_path.h149
-rwxr-xr-xinclude/devman_plugin_intf.h270
-rw-r--r--packaging/device-manager-plugin-exynos3250.spec54
-rwxr-xr-xsrc/device_manager_TRM.c202
-rw-r--r--src/device_manager_TRM.h4
-rw-r--r--src/device_manager_io.c198
-rwxr-xr-xsrc/device_manager_plugin_exynos3250.c2007
-rw-r--r--src/mount_qcom_nonhlos5
14 files changed, 3189 insertions, 0 deletions
diff --git a/61-tizen-video-device.rules b/61-tizen-video-device.rules
new file mode 100644
index 0000000..d4bb723
--- /dev/null
+++ b/61-tizen-video-device.rules
@@ -0,0 +1,10 @@
+ACTION!="add", GOTO="tizen_video_device_end"
+
+# video
+KERNEL=="video[6-7]", GROUP="video", SECLABEL{smack}="device::hwcodec"
+KERNEL=="video1[3-4]", GROUP="video", SECLABEL{smack}="device::hwcodec"
+KERNEL=="video10[0-1]", GROUP="video", SECLABEL{smack}="device::camera"
+KERNEL=="video11[0-1]", GROUP="video", SECLABEL{smack}="device::camera"
+KERNEL=="video134", GROUP="video", SECLABEL{smack}="device::camera"
+
+LABEL="tizen_video_device_end"
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100755
index 0000000..31adba6
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,37 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(slp_devman_plugin C)
+
+SET(SRCS
+ src/device_manager_io.c
+ src/device_manager_TRM.c
+ src/device_manager_plugin_exynos3250.c)
+SET(DUMP_FILES
+ dump/dump_time.sh)
+
+IF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ SET(CMAKE_BUILD_TYPE "Release")
+ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+MESSAGE("Build type: ${CMAKE_BUILD_TYPE}")
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
+SET(CMAKE_C_FLAGS_RELEASE "-O2")
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED devman_plugin)
+
+FOREACH(flag ${pkgs_CFLAGS})
+ SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS})
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS})
+
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION lib COMPONENT RuntimeLibraries)
+INSTALL(PROGRAMS ${DUMP_FILES} DESTINATION /opt/etc/dump.d/module.d)
diff --git a/LICENSE.Apache-2.0 b/LICENSE.Apache-2.0
new file mode 100644
index 0000000..9c13a9b
--- /dev/null
+++ b/LICENSE.Apache-2.0
@@ -0,0 +1,204 @@
+Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/device-manager-plugin-exynos3250.manifest b/device-manager-plugin-exynos3250.manifest
new file mode 100644
index 0000000..af9b883
--- /dev/null
+++ b/device-manager-plugin-exynos3250.manifest
@@ -0,0 +1,5 @@
+<manifest>
+ <request>
+ <domain name="_" />
+ </request>
+</manifest>
diff --git a/dump/dump_time.sh b/dump/dump_time.sh
new file mode 100644
index 0000000..f90539e
--- /dev/null
+++ b/dump/dump_time.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+#--------------------------------------
+# time
+#--------------------------------------
+TIME_DEBUG=$1/time
+/bin/mkdir -p ${TIME_DEBUG}
+
+/bin/date > ${TIME_DEBUG}/status
+/bin/date +%s >> ${TIME_DEBUG}/status
+/bin/cat /sys/class/rtc/rtc0/since_epoch >> ${TIME_DEBUG}/status
+
+/bin/cat /sys/kernel/debug/s2m_rtc_debug/* >> ${TIME_DEBUG}/s2m_rtc_debug
+
diff --git a/include/device_manager_io.h b/include/device_manager_io.h
new file mode 100644
index 0000000..68933e5
--- /dev/null
+++ b/include/device_manager_io.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+
+#ifndef __DEVMAN_IO_H__
+#define __DEVMAN_IO_H__
+
+int sys_check_node(char *path);
+int sys_get_node(char *path, char *node);
+int sys_get_int_wo_convert(char *path, int *value);
+int sys_set_int_wo_convert(char *path, int value);
+int sys_get_int(char *fname, int *val);
+int sys_get_str(char *fname, char *str);
+int sys_set_int(char *fname, int val);
+int sys_set_str(char *fname, char *val);
+
+#endif /* __DEVMAN_PLUGIN_INTF_H__ */
diff --git a/include/devman_define_node_path.h b/include/devman_define_node_path.h
new file mode 100755
index 0000000..18bbc41
--- /dev/null
+++ b/include/devman_define_node_path.h
@@ -0,0 +1,149 @@
+/*
+* Copyright (c) 2012 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+#ifndef __DEVMAN_DEFINE_NODE_PATH_H
+#define __DEVMAN_DEFINE_NODE_PATH_H
+
+#define BACKLIGHT_PATH "/sys/class/backlight/"
+#define BACKLIGHT_MAX_BRIGHTNESS_PATH BACKLIGHT_PATH"%s/max_brightness"
+#define BACKLIGHT_MIN_BRIGHTNESS_PATH BACKLIGHT_PATH"%s/min_brightness"
+#define BACKLIGHT_BRIGHTNESS_PATH BACKLIGHT_PATH"%s/brightness"
+#define BACKLIGHT_DIMMING_PATH BACKLIGHT_PATH"%s/dimming"
+#define BACKLIGHT_OVERHEATING_PATH BACKLIGHT_PATH"%s/overheating"
+#define MDNIE_BACKLIGHT_BRIGHTNESS_PATH BACKLIGHT_PATH"mdnie-bl/brightness"
+#define MDNIE_BACKLIGHT_OVERHEATING_PATH BACKLIGHT_PATH"mdnie-bl/overheating"
+
+#define LCD_PATH "/sys/class/lcd/"
+#define LCD_WM_CONTROL_PATH LCD_PATH"%s/wm_mode"
+#define LCD_CABC_CONTROL_PATH LCD_PATH"%s/cabc"
+#define LCD_ACL_CONTROL_PATH LCD_PATH"%s/acl_control"
+#define LCD_HBM_CONTROL_PATH LCD_PATH"%s/hbm_control"
+#define LCD_ELVSS_CONTROL_PATH LCD_PATH"%s/elvss_control"
+#define LCD_POWER_PATH LCD_PATH"%s/lcd_power"
+#define IMAGE_ENHANCE_PATH "/sys/class/extension/mdnie/%s"
+#define IMAGE_ENHANCE_PATH_INFO "/sys/class/extension/mdnie"
+
+#define DRM_PATH "/sys/devices/platform/exynos-drm/drm/card0"
+
+#define DISPLAY_FRAME_RATE_PATH "/sys/class/graphics/fb0/dynamic_fps"
+#define DISPLAY_MISC_LCD_FPS_PATH "/sys/class/sec/sec_misc/lcd_fps"
+
+#define UART_PATH "/sys/devices/virtual/sec/switch/uart_sel"
+#define USB_PATH "/sys/devices/virtual/sec/switch/usb_sel"
+#define UART_PATH_TRATS "/sys/devices/platform/uart-select/path"
+#define USB_PATH_TRATS "/sys/devices/platform/usb-select/path"
+
+#define MUIC_ADC_ENABLE_PATH "/sys/devices/virtual/sec/switch/adc_enable"
+#define MUIC_USBID_PATH "/sys/devices/virtual/sec/switch/adc"
+
+#define COVER_STATUS_PATH "/sys/class/flip/hall_ic/cover_status"
+#define HAPTIC_MOTOR_LEVEL_PATH "/sys/class/haptic/motor/level"
+#define HAPTIC_MOTOR_LEVEL_MAX_PATH "/sys/class/haptic/motor/level_max"
+#define HAPTIC_MOTOR_ENABLE_PATH "/sys/class/haptic/motor/enable"
+#define HAPTIC_MOTOR_ONESHOT_PATH "/sys/class/haptic/motor/oneshot"
+
+#define KEY_WAKEUP_ENABLE_PATH "/sys/class/sec/sec_key/wakeup_keys"
+
+#define BATTERY_CAPACITY_PATH "/sys/class/power_supply/battery/capacity"
+#define BATTERY_CAPACITY_RAW_PATH "/sys/class/power_supply/battery/capacity_raw"
+#define BATTERY_CHARGE_FULL_PATH "/sys/class/power_supply/battery/charge_full"
+#define BATTERY_CHARGE_NOW_PATH "/sys/class/power_supply/battery/charge_now"
+#define BATTERY_PRESENT_PATH "/sys/class/power_supply/battery/present"
+#define BATTERY_HEALTH_PATH "/sys/class/power_supply/battery/health"
+
+#define JACK_CHARGER_ONLINE_PATH "/sys/devices/platform/jack/charger_online"
+#define JACK_EARJACK_ONLINE_PATH "/sys/class/switch/earjack/state"
+#define JACK_EARKEY_ONLINE_PATH "/sys/class/switch/earkey/state"
+#define JACK_HDMI_ONLINE_PATH "/sys/devices/platform/jack/hdmi_online"
+#define JACK_USB_ONLINE_PATH "/sys/devices/virtual/switch/usb_cable/state"
+#define JACK_CRADLE_ONLINE_PATH "/sys/class/switch/cradle/state"
+#define JACK_TVOUT_ONLINE_PATH "/sys/devices/platform/jack/tvout_online"
+#define JACK_KEYBOARD_ONLINE_PATH "/sys/devices/platform/jack/keyboard_online"
+
+#define LEDS_TORCH_MAX_BRIGHTNESS_PATH "/sys/class/leds/torch-sec1/max_brightness"
+#define LEDS_TORCH_BRIGHTNESS_PATH "/sys/class/leds/torch-sec1/brightness"
+
+#define POWER_STATE_PATH "/sys/power/state"
+#define POWER_AUTOSLEEP_PATH "/sys/power/autosleep"
+#define POWER_UNLOCK_PATH "/sys/power/wake_unlock"
+#define POWER_LOCK_PATH "/sys/power/wake_lock"
+#define POWER_WAKEUP_COUNT_PATH "/sys/power/wakeup_count"
+
+#define MEMNOTIFY_NODE "/dev/memnotify"
+#define MEMNOTIFY_VICTIM_TASK_PATH "/sys/class/memnotify/victim_task"
+#define MEMNOTIFY_THRESHOLD_LV1_PATH "/sys/class/memnotify/threshold_lv1"
+#define MEMNOTIFY_THRESHOLD_LV2_PATH "/sys/class/memnotify/threshold_lv2"
+
+#define TOUCH_EVENT_NODE "/dev/event2"
+
+#define PROCESS_MONITOR_NODE "/dev/pmon"
+#define PROCESS_MONITOR_MP_PNP_PATH "/sys/class/pmon/mp_pnp"
+#define PROCESS_MONITOR_MP_VIP_PATH "/sys/class/pmon/mp_vip"
+
+#define CPU_ENABLE_MAX_NUMBER_PATH "/sys/devices/system/cpu/cpu0/rq-stats/max_cpu_num_lock"
+#define CPU_ENABLE_MIN_NUMBER_PATH "/sys/devices/system/cpu/cpu0/rq-stats/min_cpu_num_lock"
+#define CPU_ENABLE_FIXED_NUMBER_PATH "/sys/devices/system/cpu/cpu0/rq-stats/hotplug_lock"
+
+#define CPUFREQ_CPUINFO_MAX_FREQ_PATH "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq"
+#define CPUFREQ_CPUINFO_MIN_FREQ_PATH "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq"
+#define CPUFREQ_SCALING_MAX_FREQ_PATH "/sys/devices/system/cpu/cpufreq/pmqos/cpufreq_max"
+#define CPUFREQ_SCALING_MIN_FREQ_PATH "/sys/devices/system/cpu/cpufreq/pmqos/cpufreq_min"
+#define CPUFREQ_POWER_MAX_FREQ_PATH "/sys/devices/system/cpu/cpufreq/pmqos/cpufreq_max"
+#define CPUFREQ_POWER_MIN_FREQ_PATH "/sys/devices/system/cpu/cpufreq/pmqos/cpufreq_min"
+#define CPUFREQ_ID_MAX_FREQ_PATH "/sys/devices/system/cpu/cpufreq/pmqos/cpufreq_max"
+#define CPUFREQ_ID_MIN_FREQ_PATH "/sys/devices/system/cpu/cpufreq/pmqos/cpufreq_min"
+
+#define GPUFREQ_ID_MAX_FREQ_PATH "/sys/class/kgsl/kgsl-3d0/max_pwrlevel"
+#define GPUFREQ_ID_MIN_FREQ_PATH "/sys/class/kgsl/kgsl-3d0/min_pwrlevel"
+
+
+/* For Non-Interactive settings */
+#define CPUFREQ_GOVERNOR_PATH "/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"
+#define CPUFREQ_ONDEMAND_SAMPLING_RATE "/sys/devices/system/cpu/cpufreq/ondemand/sampling_rate"
+#define CPUFREQ_ONDEMAND_OPTIMAL_FREQ "/sys/devices/system/cpu/cpufreq/ondemand/optimal_freq"
+#define CPUFREQ_ONDEMAND_SYNC_FREQ "/sys/devices/system/cpu/cpufreq/ondemand/sync_freq"
+
+
+#define TEMPERATURE_ADC_PATH "/sys/devices/platform/sec-thermistor/temp-adc"
+#define TEMPERATURE_VALUE_PATH "/sys/devices/platform/sec-thermistor/temperature"
+
+#define IRLED_CONTROL_PATH "/sys/class/sec/sec_ir/ir_send"
+
+#define SERVICE_LED_R_PATH "/sys/class/sec/led/led_r"
+#define SERVICE_LED_G_PATH "/sys/class/sec/led/led_g"
+#define SERVICE_LED_B_PATH "/sys/class/sec/led/led_b"
+
+#define SERVICE_LED_BLINK_PATH "/sys/class/sec/led/led_blink"
+#define SERVICE_LED_PATTERN_PATH "/sys/class/sec/led/led_pattern"
+
+#define KEY_MANUAL_RESET_PMIC_PATH "/sys/bus/platform/drivers/max77686-pmic/max77686-pmic/mrstb"
+#define KEY_MANUAL_RESET_SAFEOUT_PATH "/sys/bus/platform/drivers/max77693-safeout/max77693-safeout/mrstb"
+
+#define TOUCHKEY_LED_PATH "/sys/devices/virtual/sec/sec_touchkey/brightness"
+#define TOUCHKEY_GLOVE_MODE_PATH "/sys/devices/virtual/sec/sec_touchkey/glove_mode"
+#define TOUCHKEY_FLIP_MODE_PATH "/sys/devices/virtual/sec/sec_touchkey/flip_mode"
+
+#define TOUCHSCREEN_GLOVE_MODE_PATH "/sys/devices/virtual/sec/sec_touchscreen/glove_mode_enable"
+#define TOUCHSCREEN_CLEAR_COVER_PATH "/sys/devices/virtual/sec/sec_touchscreen/closed_cover_enable"
+
+#define BATTERY_TECHNOLOGY_PATH "/sys/class/power_supply/battery/technology"
+#define BATTERY_TEMPERATURE_PATH "/sys/class/power_supply/battery/temp"
+#define BATTERY_VOLTAGE_PATH "/sys/class/power_supply/battery/voltage_now"
+
+#define LEDS_FLASH_MOVIE_BRIGHTNESS_PATH "/sys/class/camera/flash/movie_brightness"
+
+#endif /* __DEVMAN_DEFINE_NODE_PATH_H */
diff --git a/include/devman_plugin_intf.h b/include/devman_plugin_intf.h
new file mode 100755
index 0000000..b9a1ea4
--- /dev/null
+++ b/include/devman_plugin_intf.h
@@ -0,0 +1,270 @@
+/*
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+
+#ifndef __DEVMAN_PLUGIN_INTF_H__
+#define __DEVMAN_PLUGIN_INTF_H__
+
+enum {
+ STATUS_OFFLINE = 0,
+ STATUS_ONLINE,
+};
+
+enum {
+ STATUS_OFF = 0,
+ STATUS_ON,
+};
+
+enum {
+ PATH_CP = 0,
+ PATH_AP,
+};
+
+enum {
+ BATTERY_NOT_FULLY_CHARGED = 0,
+ BATTERY_FULLY_CHARGED,
+};
+
+enum {
+ BATTERY_UNKNOWN = 0,
+ BATTERY_GOOD,
+ BATTERY_OVERHEAT,
+ BATTERY_DEAD,
+ BATTERY_OVERVOLTAGE,
+ BATTERY_UNSPECIFIED,
+ BATTERY_COLD,
+ BATTERY_HEALTH_MAX,
+};
+
+enum {
+ POWER_STATE_SUSPEND = 0,
+ POWER_STATE_PRE_SUSPEND,
+ POWER_STATE_POST_RESUME,
+};
+
+enum {
+ POWER_UNLOCK = 0,
+ POWER_LOCK,
+};
+
+enum {
+ LUX_DECREMENT,
+ LUX_NOCHANGE,
+ LUX_INCREMENT,
+};
+
+enum {
+ WM_MODE_MIN = 0x00,
+ WM_MODE_NORMAL = WM_MODE_MIN,
+ WM_MODE_CONSERVATIVE,
+ WM_MODE_MEDIUM,
+ WM_MODE_AGGRESSIVE,
+ WM_MODE_OUTDOOR,
+ WM_MODE_MAX = WM_MODE_OUTDOOR
+};
+
+struct color_blind_info {
+ bool power;
+ unsigned short RrCr;
+ unsigned short RgCg;
+ unsigned short RbCb;
+ unsigned short GrMr;
+ unsigned short GgMg;
+ unsigned short GbMb;
+ unsigned short BrYr;
+ unsigned short BgYg;
+ unsigned short BbYb;
+};
+
+enum {
+ KEY_WAKEUP,
+ KEY_MAX,
+};
+
+typedef struct {
+ int (*OEM_sys_get_display_count) (int *value);
+
+ int (*OEM_sys_get_backlight_min_brightness) (int index, int *value);
+ int (*OEM_sys_get_backlight_max_brightness) (int index, int *value);
+ int (*OEM_sys_set_backlight_max_brightness) (int index, int value);
+ int (*OEM_sys_get_backlight_brightness) (int index, int *value, int power_saving);
+ int (*OEM_sys_set_backlight_brightness) (int index, int value, int power_saving);
+
+ int (*OEM_sys_set_backlight_dimming) (int index, int value);
+
+ int (*OEM_sys_get_backlight_acl_control) (int index, int *value);
+ int (*OEM_sys_set_backlight_acl_control) (int index, int value);
+
+ int (*OEM_sys_get_lcd_power) (int index, int *value);
+ int (*OEM_sys_set_lcd_power) (int index, int value);
+
+ int (*OEM_sys_get_image_enhance_mode) (int *value);
+ int (*OEM_sys_set_image_enhance_mode) (int value);
+ int (*OEM_sys_get_image_enhance_scenario) (int *value);
+ int (*OEM_sys_set_image_enhance_scenario) (int value);
+ int (*OEM_sys_get_image_enhance_tone) (int *value);
+ int (*OEM_sys_set_image_enhance_tone) (int value);
+ int (*OEM_sys_get_image_enhance_outdoor) (int *value);
+ int (*OEM_sys_set_image_enhance_outdoor) (int value);
+
+ int (*OEM_sys_get_image_enhance_tune) (int *value);
+ int (*OEM_sys_set_image_enhance_tune) (int value);
+
+ int (*OEM_sys_image_enhance_info) (int *value);
+
+ int (*OEM_sys_get_image_enhance_color_blind) (int *value);
+ int (*OEM_sys_set_image_enhance_color_blind) (void *value);
+
+ int (*OEM_sys_set_display_frame_rate) (int value);
+
+ int (*OEM_sys_set_auto_screen_tone) (int index, int value);
+ int (*OEM_sys_get_auto_screen_tone) (int index, int *value);
+ int (*OEM_sys_set_auto_screen_tone_force) (int index, int value);
+
+ int (*OEM_sys_get_uart_path) (int *value);
+ int (*OEM_sys_set_uart_path) (int value);
+
+ int (*OEM_sys_get_usb_path) (int *value);
+ int (*OEM_sys_set_usb_path) (int value);
+
+ int (*OEM_sys_get_haptic_motor_level_max) (int *value);
+ int (*OEM_sys_get_haptic_motor_level) (int *value);
+ int (*OEM_sys_set_haptic_motor_level) (int value);
+ int (*OEM_sys_set_haptic_motor_enable) (int value);
+ int (*OEM_sys_set_haptic_motor_oneshot) (int value);
+
+ int (*OEM_sys_get_haptic_vibetones_level_max) (int *value);
+ int (*OEM_sys_get_haptic_vibetones_level) (int *value);
+ int (*OEM_sys_set_haptic_vibetones_level) (int value);
+ int (*OEM_sys_set_haptic_vibetones_enable) (int value);
+ int (*OEM_sys_set_haptic_vibetones_oneshot) (int value);
+
+ int (*OEM_sys_get_battery_capacity) (int *value);
+ int (*OEM_sys_get_battery_capacity_raw) (int *value);
+ int (*OEM_sys_get_battery_charge_full) (int *value);
+ int (*OEM_sys_get_battery_charge_now) (int *value);
+ int (*OEM_sys_get_battery_present) (int *value);
+ int (*OEM_sys_get_battery_health) (int *value);
+ int (*OEM_sys_get_battery_polling_required) (int *value);
+ int (*OEM_sys_get_battery_support_insuspend_charging) (int *value);
+
+ int (*OEM_sys_get_jack_charger_online) (int *value);
+ int (*OEM_sys_get_jack_earjack_online) (int *value);
+ int (*OEM_sys_get_jack_earkey_online) (int *value);
+ int (*OEM_sys_get_jack_hdmi_online) (int *value);
+ int (*OEM_sys_get_jack_usb_online) (int *value);
+ int (*OEM_sys_get_jack_cradle_online) (int *value);
+ int (*OEM_sys_get_jack_tvout_online) (int *value);
+ int (*OEM_sys_get_jack_keyboard_online) (int *value);
+
+ int (*OEM_sys_get_hdmi_support) (int *value);
+
+ int (*OEM_sys_get_leds_torch_max_brightness) (int *value);
+ int (*OEM_sys_get_leds_torch_brightness) (int *value);
+ int (*OEM_sys_set_leds_torch_brightness) (int value);
+
+ /* TODO: Change args type */
+ int (*OEM_sys_set_power_state) (int value);
+ int (*OEM_sys_set_power_lock) (int value);
+ int (*OEM_sys_get_power_lock_support)(int *value);
+
+ /* TODO: Should determine enum values of wakeup_count nodes */
+ int (*OEM_sys_get_power_wakeup_count) (int *value);
+ int (*OEM_sys_set_power_wakeup_count) (int value);
+
+ int (*OEM_sys_get_memnotify_node) (char *node);
+ int (*OEM_sys_get_memnotify_victim_task) (int *value);
+ int (*OEM_sys_set_memnotify_threshold_lv1) (int value);
+ int (*OEM_sys_set_memnotify_threshold_lv2) (int value);
+
+ int (*OEM_sys_get_process_monitor_node) (char *node);
+ int (*OEM_sys_set_process_monitor_mp_pnp) (int value);
+ int (*OEM_sys_set_process_monitor_mp_vip) (int value);
+
+ int (*OEM_sys_get_cpufreq_cpuinfo_max_freq) (int *value);
+ int (*OEM_sys_get_cpufreq_cpuinfo_min_freq) (int *value);
+ int (*OEM_sys_get_cpufreq_scaling_max_freq) (int *value);
+ int (*OEM_sys_set_cpufreq_scaling_max_freq) (int value);
+ int (*OEM_sys_get_cpufreq_scaling_min_freq) (int *value);
+ int (*OEM_sys_set_cpufreq_scaling_min_freq) (int value);
+ int (*OEM_sys_get_cpufreq_power_max_freq) (int *value);
+ int (*OEM_sys_set_cpufreq_power_max_freq) (int value);
+ int (*OEM_sys_get_cpufreq_power_min_freq) (int *value);
+ int (*OEM_sys_set_cpufreq_power_min_freq) (int value);
+
+ int (*OEM_sys_set_cpufreq_id_min_freq) (char *str);
+ int (*OEM_sys_set_cpufreq_id_max_freq) (char *str);
+
+ int (*OEM_sys_set_pm_scenario) (char *value);
+
+ int (*OEM_sys_get_cpu_enable_max_number) (int *value);
+ int (*OEM_sys_set_cpu_enable_max_number) (int value);
+ int (*OEM_sys_get_cpu_fixed_number) (int *value);
+ int (*OEM_sys_set_cpu_fixed_number) (int value);
+
+ int (*OEM_sys_get_temperature_adc) (int *value);
+ int (*OEM_sys_get_temperature_value) (int *value);
+
+ int (*OEM_sys_get_dynamic_dispfreq) (int *value);
+ int (*OEM_sys_set_dynamic_dispfreq) (int value);
+
+ int (*OEM_sys_get_backlight_brightness_by_lux) (unsigned int lux, int *value, int force);
+
+ int (*OEM_sys_get_whitemagic_mode) (int index, int *value);
+ int (*OEM_sys_set_whitemagic_mode) (int index, int value);
+
+ int (*OEM_sys_get_lcd_cabc) (int index, int *value);
+ int (*OEM_sys_set_lcd_cabc) (int index, int value);
+
+ int (*OEM_sys_set_irled_control) (char *value);
+ int (*OEM_sys_set_svcled_color) (int rgb, int led_on_ms, int led_off_ms);
+ int (*OEM_sys_set_svcled_color)(int val);
+ int (*OEM_sys_get_cover_status) (char *value);
+
+ int (*OEM_sys_get_hardkey_backlight) (int *value);
+ int (*OEM_sys_set_hardkey_backlight) (int value);
+
+ int (*OEM_sys_get_touchscreen_clear_cover) (int *value);
+ int (*OEM_sys_set_touchscreen_clear_cover) (int value);
+ int (*OEM_sys_get_touchscreen_glove_mode) (int *value);
+ int (*OEM_sys_set_touchscreen_glove_mode) (int value);
+
+ int (*OEM_sys_get_touchkey_flip_mode) (int *value);
+ int (*OEM_sys_set_touchkey_flip_mode) (int value);
+ int (*OEM_sys_get_touchkey_glove_mode) (int *value);
+ int (*OEM_sys_set_touchkey_glove_mode) (int value);
+
+ int (*OEM_sys_get_backlight_hbm_control) (int index, int *value);
+ int (*OEM_sys_set_backlight_hbm_control) (int index, int value);
+
+ int (*OEM_sys_get_leds_flash_brightness) (int *value);
+ int (*OEM_sys_set_leds_flash_brightness) (int value);
+
+ int (*OEM_sys_get_backlight_elvss_control) (int index, int *value);
+ int (*OEM_sys_set_backlight_elvss_control) (int index, int value);
+
+ int (*OEM_sys_set_key) (int index, int value);
+
+ int (*OEM_sys_set_backlight_max_brightness) (int index, int value);
+ int (*OEM_sys_set_auto_screen_tone_force) (int index, int value);
+
+ int (*OEM_sys_get_extcon) (int type, int *value);
+ int (*OEM_sys_set_extcon) (int type, int value);
+} OEM_sys_devman_plugin_interface;
+
+const OEM_sys_devman_plugin_interface *OEM_sys_get_devman_plugin_interface();
+
+#endif /* __DEVMAN_PLUGIN_INTF_H__ */
diff --git a/packaging/device-manager-plugin-exynos3250.spec b/packaging/device-manager-plugin-exynos3250.spec
new file mode 100644
index 0000000..246a741
--- /dev/null
+++ b/packaging/device-manager-plugin-exynos3250.spec
@@ -0,0 +1,54 @@
+#sbs-git:slp/pkgs/d/device-manager-plugin-e3250 device-manager-plugin-e3250 0.0.1 5bf2e95e0bb15c43ff928f7375e1978b0accb0f8
+Name: device-manager-plugin-e3250
+Summary: Device manager plugin e3250
+Version: 0.0.03
+Release: 0
+Group: TO_BE/FILLED_IN
+License: Apache-2.0
+Source0: %{name}-%{version}.tar.gz
+Requires(post): /sbin/ldconfig
+Requires(postun): /sbin/ldconfig
+
+BuildRequires: cmake
+BuildRequires: pkgconfig(devman_plugin)
+BuildRequires: pkgconfig(dlog)
+ExclusiveArch: %arm
+
+%if ("%{tizen_target_name}" == "B3")
+Excludearch: %arm
+%else
+BuildRequires: kernel-headers-3.4-exynos3250
+%endif
+
+%description
+Device manager plugin e3250
+
+%prep
+%setup -q
+
+%build
+cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix}
+
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+mkdir -p %{buildroot}/usr/share/license
+cp LICENSE.Apache-2.0 %{buildroot}/usr/share/license/%{name}
+mkdir -p %{buildroot}/usr/lib/udev/rules.d
+cp -a 61-tizen-video-device.rules %{buildroot}/usr/lib/udev/rules.d
+
+%make_install
+
+%post
+/sbin/ldconfig
+
+%postun
+/sbin/ldconfig
+
+%files
+%manifest device-manager-plugin-exynos3250.manifest
+/usr/share/license/device-manager-plugin-e3250
+/usr/lib/libslp_devman_plugin.so
+/usr/lib/udev/rules.d/61-tizen-video-device.rules
+/opt/etc/dump.d/module.d/*
diff --git a/src/device_manager_TRM.c b/src/device_manager_TRM.c
new file mode 100755
index 0000000..d9fa406
--- /dev/null
+++ b/src/device_manager_TRM.c
@@ -0,0 +1,202 @@
+/*
+ Tizen Resource Manager
+ yu.baek@samsung.com
+
+*/
+#include <string.h>
+#include <sys/types.h>
+#include <stdio.h>
+#include <dirent.h>
+#include <errno.h>
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#include "device_manager_TRM.h"
+#include "devman_define_node_path.h"
+#include "device_manager_io.h"
+
+#define DEVMGR_LOG
+#if defined (DEVMGR_LOG)
+#define LOG_TAG "DEVICE_PLUGIN"
+#include <dlog/dlog.h>
+#define devmgr_log(fmt, args...) SLOGI(fmt, ##args)
+#else
+#define devmgr_log(fmt, args...)
+#endif
+
+
+#include <pthread.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <linux/types.h>
+#include <linux/un.h>
+
+static pthread_t trm_server_thread;
+static int socketfd_scenario_listen = -1;
+#define TRM_SOCKET_FOR_OAL "/dev/socket/oal"
+static struct sockaddr_un addr;
+void *TRM_scenario_thread(void *data)
+{
+ #define MAX_REV_BUF_LEN 64
+
+ int ret;
+ socklen_t len;
+ int socketfd_connect = 0;
+ char receive_buf[MAX_REV_BUF_LEN] = {0, };
+
+ for (;;) {
+ len = sizeof(struct sockaddr_un);
+ socketfd_connect = accept(socketfd_scenario_listen, (struct sockaddr *) &addr, &len);
+ if (socketfd_connect == -1) {
+ devmgr_log("%s: accept failed", __func__);
+ continue;
+ }
+
+ memset(receive_buf, 0, MAX_REV_BUF_LEN);
+ ret = recv(socketfd_connect, receive_buf, MAX_REV_BUF_LEN, 0);
+ if (ret <= 0) {
+ devmgr_log("%s: recv failed", __func__);
+ goto close_connect;
+ }
+
+close_connect:
+ close(socketfd_connect);
+ }
+
+ return NULL;
+}
+
+int TRM_oal_socket_init()
+{
+ int ret = 0, running_step = 0;
+ devmgr_log("TRM_socket_init");
+
+ socketfd_scenario_listen = socket(PF_UNIX, SOCK_STREAM, 0);
+ if (socketfd_scenario_listen < 0) {
+ running_step = 1;
+ goto error;
+ }
+
+ memset(&addr, 0, sizeof(struct sockaddr_un));
+ snprintf(addr.sun_path, UNIX_PATH_MAX, TRM_SOCKET_FOR_OAL);
+ addr.sun_family = AF_UNIX;
+
+ ret = bind(socketfd_scenario_listen, (struct sockaddr *)&addr, sizeof(struct sockaddr_un));
+ if (ret != 0) {
+ running_step = 2;
+ goto error;
+ }
+
+ chmod(addr.sun_path, 0660);
+ ret = listen(socketfd_scenario_listen, 2);
+ if (ret != 0) {
+ running_step = 3;
+ goto error;
+ }
+
+ return 0;
+
+error:
+ devmgr_log("%s running_step=%d ret=%d", __FUNCTION__, running_step, ret);
+ if (socketfd_scenario_listen != -1) {
+ close(socketfd_scenario_listen);
+ socketfd_scenario_listen = -1;
+ }
+ return -1;
+}
+
+
+int TRM_demon_init()
+{
+ int ret = 0, running_step = 0;
+
+ if (access(TRM_SOCKET_FOR_OAL, F_OK) == 0)
+ goto success;
+
+ devmgr_log("%s\n", __FUNCTION__);
+
+ ret = TRM_oal_socket_init();
+ if (ret < 0) {
+ running_step = 1;
+ goto fail;
+ }
+
+ ret = pthread_create(&trm_server_thread, NULL, TRM_scenario_thread, NULL);
+ if (ret != 0) {
+ running_step = 2;
+ goto fail;
+ }
+ pthread_detach(trm_server_thread);
+success:
+ return 0;
+
+fail :
+ devmgr_log("%s running_step=%d ret=%d", __FUNCTION__, running_step, ret);
+ return -1;
+
+
+}
+
+
+void TRM_send_socket(char *soket_path, char *write_buf)
+{
+ int socket_fd = 0;
+ int ret = 0, running_step = 0;
+ struct sockaddr_un addr;
+ static int socket_exist = 0;
+
+ if (access(soket_path, F_OK) == 0) {
+ socket_exist = 1;
+ } else {
+ devmgr_log("%s do not exist\n", soket_path);
+ }
+
+ if (socket_exist == 0)
+ goto fail;
+
+ socket_fd = socket(AF_LOCAL, SOCK_STREAM, 0);
+ if (socket_fd < 0) {
+ running_step = 1;
+ goto fail;
+ }
+
+ memset(&addr, 0, sizeof(addr));
+ snprintf(addr.sun_path, UNIX_PATH_MAX, "%s", soket_path);
+ addr.sun_family = AF_LOCAL;
+
+ ret = connect(socket_fd, (struct sockaddr *) &addr ,sizeof(sa_family_t) + strlen(soket_path) );
+ if (ret != 0) {
+ running_step = 2;
+ close(socket_fd);
+ goto fail;
+ }
+
+ send(socket_fd, write_buf, strlen(write_buf), MSG_NOSIGNAL);
+
+ close(socket_fd);
+
+ return;
+
+fail :
+ return;
+
+}
+
+
+
+#define TRM_SOCKET_FOR_SCENARIO_INFO "/dev/socket/scenario_info"
+
+int Tizen_Resource_Manager(char *event_lock) {
+
+ if ((strstr(event_lock, "GpuWakeup") == 0) && (strstr(event_lock, "BrowserScroll") == 0))
+ devmgr_log("%s\n", event_lock);
+
+ TRM_send_socket(TRM_SOCKET_FOR_SCENARIO_INFO, event_lock);
+
+ return 0;
+
+}
+
+
diff --git a/src/device_manager_TRM.h b/src/device_manager_TRM.h
new file mode 100644
index 0000000..e452eef
--- /dev/null
+++ b/src/device_manager_TRM.h
@@ -0,0 +1,4 @@
+/* Tizen Resource Manager : TRM */
+
+int TRM_demon_init(void);
+int Tizen_Resource_Manager(char *event_lock); \ No newline at end of file
diff --git a/src/device_manager_io.c b/src/device_manager_io.c
new file mode 100644
index 0000000..d15b572
--- /dev/null
+++ b/src/device_manager_io.c
@@ -0,0 +1,198 @@
+/*
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
+#include <fcntl.h>
+#include <devman_plugin_intf.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#define EXPORT_API __attribute__((visibility("default")))
+
+#define DEVMGR_LOG
+#if defined(DEVMGR_LOG)
+#define LOG_TAG "DEVICE_PLUGIN"
+#include <dlog/dlog.h>
+#define devmgr_log(fmt, args...) SLOGD(fmt, ##args)
+#else
+#define devmgr_log(fmt, args...)
+#endif
+
+#define BUFF_MAX 255
+#define SUCCESS 0
+#define FAIL 1
+
+int sys_check_node(char *path)
+{
+ int fd = -1;
+
+ fd = open(path, O_RDONLY);
+
+ if (fd == -1) {
+ devmgr_log("%s: path:%s, %s.",
+ __func__, path, strerror(errno));
+ return -1;
+ }
+
+ close(fd);
+ return 0;
+}
+
+int sys_get_node(char *path, char *node)
+{
+ if (0 >= snprintf(node, strlen(path) + 1, "%s", path))
+ return -1;
+
+ return 0;
+}
+
+int sys_get_int_wo_convert(char *path, int *value)
+{
+ int fd = -1;
+
+ fd = open(path, O_RDONLY);
+ if (fd == -1) {
+ devmgr_log("%s: path:%s, %s.",
+ __func__, path, strerror(errno));
+ return -1;
+ }
+
+ if (0 > read(fd, value, sizeof(int))) {
+ close(fd);
+ return -1;
+ }
+ close (fd);
+
+ return 0;
+}
+
+int sys_set_int_wo_convert(char *path, int value)
+{
+ int fd = -1;
+
+ fd = open(path, O_WRONLY);
+ if (fd == -1) {
+ devmgr_log("%s: path:%s, %s.",
+ __func__, path, strerror(errno));
+ return -1;
+ }
+
+ if (0 > write(fd, &value, sizeof(int))) {
+ close(fd);
+ return -1;
+ }
+ close(fd);
+
+ return 0;
+}
+
+static int sys_read_buf(char *file, char *buf)
+{
+ int fd;
+ int r;
+
+ fd = open(file, O_RDONLY);
+ if (fd == -1) {
+ devmgr_log("%s: file:%s, %s.",
+ __func__, file, strerror(errno));
+ return -ENOENT;
+ }
+
+ r = read(fd, buf, BUFF_MAX);
+ close(fd);
+ if ((r >= 0) && (r < BUFF_MAX))
+ buf[r] = '\0';
+ else {
+ return -EIO;
+ }
+
+ return 0;
+}
+
+static int sys_write_buf(char *file, char *buf)
+{
+ int fd;
+ int r;
+
+ fd = open(file, O_WRONLY);
+ if (fd == -1) {
+ devmgr_log("%s: file:%s, %s.",
+ __func__, file, strerror(errno));
+ return -1;
+ }
+
+ r = write(fd, buf, strlen(buf));
+ close(fd);
+ if (r < 0) {
+ return -1;
+ }
+
+ return 0;
+}
+
+int sys_get_int(char *fname, int *val)
+{
+ char buf[BUFF_MAX];
+
+ if (sys_read_buf(fname, buf) == 0) {
+ *val = atoi(buf);
+ return 0;
+ } else {
+ *val = -1;
+ return -1;
+ }
+}
+
+int sys_get_str(char *fname, char *str)
+{
+ char buf[BUFF_MAX] = {0};
+
+ if (sys_read_buf(fname, buf) == 0)
+ {
+ strncpy(str, buf, strlen(buf));
+ return 0;
+ }
+
+ return -1;
+}
+
+int sys_set_int(char *fname, int val)
+{
+ char buf[BUFF_MAX];
+ int r = -1;
+ snprintf(buf, sizeof(buf), "%d", val);
+
+ if (sys_write_buf(fname, buf) == 0)
+ r = 0;
+
+ return r;
+}
+
+int sys_set_str(char *fname, char *val)
+{
+ int r = -1;
+
+ if (val != NULL) {
+ if (sys_write_buf(fname, val) == 0)
+ r = 0;
+ }
+
+ return r;
+}
diff --git a/src/device_manager_plugin_exynos3250.c b/src/device_manager_plugin_exynos3250.c
new file mode 100755
index 0000000..6efd78d
--- /dev/null
+++ b/src/device_manager_plugin_exynos3250.c
@@ -0,0 +1,2007 @@
+/*
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+
+#include <string.h>
+#include <sys/types.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <errno.h>
+/* #include <devman_plugin_intf.h> */
+#include <device-oal.h>
+
+#include "devman_define_node_path.h"
+#include "device_manager_io.h"
+#include "device_manager_TRM.h"
+
+#define MIN(a,b) ((a)<(b) ? (a):(b))
+#define EXPORT_API __attribute__((visibility("default")))
+
+#define BUFF_MAX 255
+#define MAX_NAME 255
+
+#define GENERATE_ACCESSORS_CHAR_RW(_suffix, _item) \
+char *OEM_sys_get_##_suffix() \
+{ \
+ return sys_get_str(_item); \
+} \
+ \
+int OEM_sys_set_##_suffix(char *str) \
+{ \
+ return sys_set_str(_item, value); \
+}
+
+#define GENERATE_ACCESSORS_CHAR_R(_suffix, _item) \
+char *OEM_sys_get_##_suffix() \
+{ \
+ return sys_get_str(_item); \
+}
+
+#define GENERATE_ACCESSORS_CHAR_W(_suffix, _item) \
+int OEM_sys_set_##_suffix(char *str) \
+{ \
+ return sys_set_str(_item, str); \
+}
+
+/* TODO: Add APIs has (char *) params */
+
+#define GENERATE_ACCESSORS_INT_RW(_suffix, _item) \
+int OEM_sys_get_##_suffix(int *value) \
+{ \
+ return sys_get_int(_item, value); \
+} \
+ \
+int OEM_sys_set_##_suffix(int value) \
+{ \
+ return sys_set_int(_item, value); \
+}
+
+#define GENERATE_ACCESSORS_INT_R(_suffix, _item) \
+int OEM_sys_get_##_suffix(int *value) \
+{ \
+ return sys_get_int(_item, value); \
+}
+
+#define GENERATE_ACCESSORS_INT_W(_suffix, _item) \
+int OEM_sys_set_##_suffix(int value) \
+{ \
+ return sys_set_int(_item, value); \
+}
+
+/*
+GENERATE_ACCESSORS_INT_R(backlight_max_brightness, BACKLIGHT_MAX_BRIGHTNESS_PATH)
+GENERATE_ACCESSORS_INT_RW(backlight_brightness, BACKLIGHT_BRIGHTNESS_PATH)
+GENERATE_ACCESSORS_INT_RW(backlight_acl_control, LCD_ACL_CONTROL_PATH)
+GENERATE_ACCESSORS_INT_RW(lcd_power, LCD_POWER_PATH)
+*/
+#define DEVMGR_LOG
+#if defined(DEVMGR_LOG)
+#define LOG_TAG "DEVICE_PLUGIN"
+#include <dlog/dlog.h>
+#define devmgr_log(fmt, args...) SLOGD(fmt, ##args)
+#else
+#define devmgr_log(fmt, args...)
+#endif
+
+enum display_type
+{
+ DISP_MAIN = 0,
+ DISP_SUB,
+ DISP_MAX
+};
+
+enum lux_status {
+ decrement,
+ increment,
+};
+
+enum CABC_MODE
+{
+ CABC_OFF = 0,
+ CABC_USER_INTERFACE,
+ CABC_STILL_PICTURE,
+ CABC_MOVING_IMAGE,
+ CABC_MAX,
+};
+
+struct display_info
+{
+ enum display_type etype; /* FIXME:!! Main LCD or Sub LCD node */
+ char bl_name[MAX_NAME+1]; /* backlight name */
+ char lcd_name[MAX_NAME+1]; /* lcd name */
+};
+
+
+#define MAX_CANDELA_CRITERION 300
+#define PWR_SAVING_CANDELA_CRITERION 20
+
+/* FIXME:!! change to global_ctx */
+int lcd_index;
+struct display_info disp_info[DISP_MAX];
+
+int current_brightness = -1;
+int backlight_max_brightness = 100;
+int elvss_temp_stage = TEMPERATURE_STAGE_0;
+static int glove_touch_state = 0;
+
+int OEM_sys_get_touchscreen_clear_cover(int *value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, TOUCHSCREEN_CLEAR_COVER_PATH);
+ ret = sys_get_int(path, value);
+ devmgr_log("path[%s]value[%d]", path, *value);
+
+ return ret;
+}
+
+int OEM_sys_set_touchscreen_clear_cover(int value)
+{
+ int ret = 0;
+ char path[MAX_NAME+1];
+
+ if (value) {
+ /* enable glove touch */
+ snprintf(path, MAX_NAME, TOUCHSCREEN_GLOVE_MODE_PATH);
+ devmgr_log("path[%s]value[%d]", path, 1);
+ ret |= sys_set_int(path, 1);
+ /* enable clear cover */
+ snprintf(path, MAX_NAME, TOUCHSCREEN_CLEAR_COVER_PATH);
+ devmgr_log("path[%s]value[%d]", path, value);
+ ret |= sys_set_int(path, value);
+ } else {
+ /* restore glove touch*/
+ snprintf(path, MAX_NAME, TOUCHSCREEN_GLOVE_MODE_PATH);
+ devmgr_log("path[%s]value[%d]", path, glove_touch_state);
+ ret |= sys_set_int(path, glove_touch_state);
+ /* disable clear cover */
+ snprintf(path, MAX_NAME, TOUCHSCREEN_CLEAR_COVER_PATH);
+ devmgr_log("path[%s]value[%d]", path, value);
+ ret |= sys_set_int(path, value);
+ }
+
+ return ret;
+}
+
+int OEM_sys_get_touchscreen_glove_mode(int *value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, TOUCHSCREEN_GLOVE_MODE_PATH);
+ ret = sys_get_int(path, value);
+ devmgr_log("path[%s]value[%d]", path, *value);
+
+ return ret;
+}
+
+int OEM_sys_set_touchscreen_glove_mode(int value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, TOUCHSCREEN_GLOVE_MODE_PATH);
+ glove_touch_state = value;
+ ret = sys_set_int(path, value);
+ devmgr_log("path[%s]value[%d]", path, value);
+
+ return ret;
+}
+
+int OEM_sys_get_touchkey_flip_mode(int *value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, TOUCHKEY_FLIP_MODE_PATH);
+ ret = sys_get_int(path, value);
+ devmgr_log("path[%s]value[%d]", path, *value);
+
+ return ret;
+}
+
+int OEM_sys_set_touchkey_flip_mode(int value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, TOUCHKEY_FLIP_MODE_PATH);
+ ret = sys_set_int(path, value);
+ devmgr_log("path[%s]value[%d]", path, value);
+
+ return ret;
+}
+
+int OEM_sys_get_touchkey_glove_mode(int *value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, TOUCHKEY_GLOVE_MODE_PATH);
+ ret = sys_get_int(path, value);
+ devmgr_log("path[%s]value[%d]", path, *value);
+
+ return ret;
+}
+
+int OEM_sys_set_touchkey_glove_mode(int value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, TOUCHKEY_GLOVE_MODE_PATH);
+ ret = sys_set_int(path, value);
+ devmgr_log("path[%s]value[%d]", path, value);
+
+ return ret;
+}
+
+int OEM_sys_get_hardkey_backlight(int *value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, TOUCHKEY_LED_PATH);
+ ret = sys_get_int(path, value);
+ devmgr_log("path[%s]value[%d]", path, *value);
+
+ return ret;
+}
+
+int OEM_sys_set_hardkey_backlight(int value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, TOUCHKEY_LED_PATH);
+ ret = sys_set_int(path, value);
+ devmgr_log("path[%s]value[%d]", path, value);
+
+ return ret;
+}
+
+int OEM_sys_get_hall_status(int *value)
+{
+ char path[MAX_NAME+1];
+ int ret = -1;
+
+ snprintf(path, MAX_NAME, COVER_STATUS_PATH);
+ ret = sys_get_int(path, value);
+
+ if (ret != 0)
+ devmgr_log("fail to get cover_status\n");
+ else
+ devmgr_log("path[%s]value[%d]", path, *value);
+
+ return ret;
+}
+
+int OEM_sys_get_whitemagic_mode(int index, int *value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ return ret;
+ }
+
+ snprintf(path, MAX_NAME, LCD_WM_CONTROL_PATH, disp_info[index].lcd_name);
+ ret = sys_get_int(path, value);
+ devmgr_log("path[%s]value[%d]", path, *value);
+
+ return ret;
+}
+
+int OEM_sys_set_whitemagic_mode(int index, int value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ return ret;
+ }
+
+ snprintf(path, MAX_NAME, LCD_WM_CONTROL_PATH, disp_info[index].lcd_name);
+ ret = sys_set_int(path, value);
+
+ return ret;
+}
+
+int OEM_sys_get_brightness(unsigned int lux)
+{
+ const unsigned int MIN_VALUE = 6;
+ const unsigned int MAX_VALUE = 100;
+ const unsigned int Nr_Table[] = {
+ 0, 0, 0, 0, 0, 0, 5, 5, 6, 6,
+ 7, 7, 7, 7, 8, 8, 8, 9, 9, 9,
+ 10, 10, 11, 12, 13, 14, 15, 15, 17, 19,
+ 20, 22, 25, 28, 32, 36, 42, 49, 50, 58,
+ 66, 83, 100, 131, 131, 168, 168, 207, 207, 247,
+ 247, 247, 318, 318, 318, 390, 390, 390, 500, 500,
+ 500, 737, 737, 737, 870, 870, 870, 1000, 1000, 1000,
+ 1000, 1250, 1250, 1250, 1500, 1500, 1500, 1750, 1750, 1750,
+ 2000, 2000, 2000, 3000, 3000, 3000, 4000, 4000, 4000, 4200,
+ 4200, 4200, 4400, 4400, 4400, 4700, 4700, 4700, 5000, 5000, 5000
+ };
+ int brightness;
+
+ for (brightness=MIN_VALUE; (lux > Nr_Table[brightness]) && (brightness < MAX_VALUE); brightness++);
+
+ return brightness;
+}
+
+static int auto_brightness[11] = {-1,};
+int OEM_sys_get_backlight_brightness_by_lux(unsigned int lux, int *value, int force)
+{
+ const unsigned int Max_Table[] = {
+ 0, 0, 0, 0, 0, 0, 15, 15, 15, 15,
+ 15, 15, 15, 15, 17, 17, 17, 19, 19, 19,
+ 22, 22, 24, 26, 28, 32, 36, 36, 40, 46,
+ 50, 56, 66, 66, 66, 80, 100, 120, 150, 170,
+ 200, 240, 294, 310, 310, 425, 425, 580, 580, 720,
+ 720, 720, 980, 980, 980, 1250, 1250, 1250, 1500, 1500,
+ 1500, 2000, 2000, 2000, 2600, 2600, 2600, 3301, 3301, 3301,
+ 3301, 4218, 4218, 4218, 5135, 5135, 5135, 5394, 5394, 5394,
+ 5652, 5652, 5652, 6458, 6458, 6458, 7108, 7108, 7108, 7108,
+ 7108, 7108, 7108, 7108, 7108, 7108, 7108, 7108, 40000, 40000,
+ 40000
+ };
+ const unsigned int Min_Table[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 2, 3, 4, 5, 6,
+ 7, 8, 9, 14, 14, 19, 19, 24, 24, 29,
+ 29, 29, 35, 35, 35, 42, 42, 42, 49, 49,
+ 49, 76, 76, 76, 103, 103, 103, 131, 131, 131,
+ 131, 189, 189, 189, 247, 247, 247, 318, 318, 318,
+ 390, 390, 390, 737, 737, 737, 1000, 1000, 1000, 1000,
+ 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
+ 1000
+ };
+ const unsigned int BrToLv[] = {
+ 0, 0, 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, 42, 43, 43, 44, 44, 45,
+ 45, 45, 46, 46, 46, 47, 47, 47, 48, 48,
+ 48, 49, 49, 49, 50, 50, 50, 51, 51, 51,
+ 51, 52, 52, 52, 53, 53, 53, 54, 54, 54,
+ 55, 55, 55, 56, 56, 56, 57, 57, 57, 58,
+ 58, 58, 59, 59, 59, 60, 60, 60, 61, 61,
+ 61
+ };
+ const unsigned int LvToBr[] = {
+ 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, 44, 46, 48, 51, 54, 57, 60, 63,
+ 66, 70, 73, 76, 79, 82, 85, 88, 91, 94,
+ 97, 100
+ };
+
+ static int brightness = -1;
+ int i, level, temp;
+ int level_offset[11] = {-9, -7, -5, -3, -2, 0, 2, 3, 5, 6, 8};
+ int low_level_offset[11] = {-4, -3, -3, -2, -1, 0, 1, 2, 3, 5, 6};
+
+ devmgr_log("lux: %d, force: %d.\n", lux, force);
+ if ((brightness == -1) || (force == 1))
+ brightness = OEM_sys_get_brightness(lux);
+ else if ((lux >= Max_Table[brightness]) || ((lux <= Min_Table[brightness]) && Min_Table[brightness] != 0))
+ brightness = OEM_sys_get_brightness(lux);
+ else
+ return 0;
+
+ level = BrToLv[brightness];
+
+ if (level < 11) {
+ for (i = 0; i < 11; i++) {
+ temp = low_level_offset[i] + level;
+ if (temp < 1)
+ temp = 1;
+ else if (temp > 61)
+ temp = 61;
+ auto_brightness[i] = LvToBr[temp];
+ }
+ } else {
+ for (i = 0; i < 11; i++) {
+ temp = level_offset[i] + level;
+ if (temp < 1)
+ temp = 1;
+ else if (temp > 61)
+ temp = 61;
+ auto_brightness[i] = LvToBr[temp];
+ }
+ }
+
+ memcpy(value, auto_brightness, sizeof(auto_brightness));
+ devmgr_log("lux: %d, default brightness: %d.\n", lux, auto_brightness[5]);
+
+ return 0;
+}
+
+static int OEM_sys_display_info(struct display_info *disp_info)
+{
+ struct dirent *dent;
+ DIR *dirp;
+ int i, index;
+ const char * bl_path = BACKLIGHT_PATH;
+ const char * lcd_path = LCD_PATH;
+
+ /* Backlight */
+ index = 0;
+ dirp = opendir(bl_path);
+ if (dirp) {
+ while(dent = readdir(dirp)) {
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ break;
+ }
+
+ if (!strcmp(".", dent->d_name) || !strcmp("..", dent->d_name))
+ continue;
+ else {
+ strcpy(disp_info[index].bl_name, dent->d_name);
+ index++;
+ }
+ }
+ closedir(dirp);
+ }
+
+ /*for (i = 0; i < index; i++)*/
+ /*devmgr_log("bl_name[%s]", disp_info[i].bl_name);*/
+
+ /* LCD */
+ index = 0;
+ dirp = opendir(lcd_path);
+ if (dirp) {
+ while(dent = readdir(dirp)) {
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ break;
+ }
+
+ if (!strcmp(".", dent->d_name) || !strcmp("..", dent->d_name))
+ continue;
+ else {
+ strcpy(disp_info[index].lcd_name, dent->d_name);
+ index++;
+ }
+ }
+ closedir(dirp);
+ }
+
+ /*for (i = 0; i < index; i++)*/
+ /*devmgr_log("lcd_name[%s]", disp_info[i].lcd_name);*/
+
+ lcd_index = index;
+
+ return 0;
+}
+
+int OEM_sys_get_display_count(int *value)
+{
+ int ret = -1;
+
+ /* TODO: We should implement to find out current number of display */
+ *value = lcd_index;
+ ret = 0;
+ /* ********************* */
+
+ /*devmgr_log("value[%d]", *value);*/
+
+ return ret;
+}
+
+int OEM_sys_get_backlight_max_brightness(int index, int *value)
+{
+ int ret = 0;
+ char path[MAX_NAME+1];
+
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ ret = -1;
+ return ret;
+ }
+
+ *value = backlight_max_brightness;
+
+ devmgr_log("path[%s]value[%d]", path, *value);
+
+ return ret;
+}
+
+int OEM_sys_set_backlight_max_brightness(int index, int value)
+{
+ int ret = 0;
+ int new_val = 0;
+
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ return -EINVAL;
+ }
+
+ if (value < 0)
+ return -EINVAL;
+
+ backlight_max_brightness = value;
+
+ devmgr_log("value[%d]", backlight_max_brightness);
+
+ if (current_brightness == -1)
+ return 0;
+
+ new_val = MIN(backlight_max_brightness, current_brightness);
+
+ ret = set_backlight_brightness(index, new_val);
+ if (ret)
+ devmgr_log("Can't set backlight brightness (%d)", new_val);
+
+ return ret;
+}
+
+int OEM_sys_get_backlight_min_brightness(int index, int *value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ return ret;
+ }
+
+ snprintf(path, MAX_NAME, BACKLIGHT_MIN_BRIGHTNESS_PATH, disp_info[index].bl_name);
+ ret = sys_get_int(path, value);
+ devmgr_log("path[%s]value[%d]", path, *value);
+
+ return ret;
+}
+
+
+int OEM_sys_get_backlight_brightness(int index, int *value, int power_saving)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+ int max_brightness;
+ int pwr_saving_offset;
+
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ return ret;
+ }
+
+ snprintf(path, MAX_NAME, MDNIE_BACKLIGHT_BRIGHTNESS_PATH);
+ if(!sys_check_node((char *)path)) {
+ ret = sys_get_int(path, value);
+ } else {
+ snprintf(path, MAX_NAME, BACKLIGHT_BRIGHTNESS_PATH, disp_info[index].bl_name);
+ ret = sys_get_int(path, value);
+ }
+
+ /*devmgr_log("path[%s]value[%d]power_saving[%d]", path, *value, power_saving);*/
+
+ if (power_saving)
+ devmgr_log("Doesn't support power saving for brightness control.\n");
+
+ return ret;
+}
+
+int OEM_sys_set_backlight_dimming(int index, int value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ devmgr_log("index is %d, value is %d", index, value);
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ return ret;
+ }
+
+ snprintf(path, MAX_NAME, BACKLIGHT_DIMMING_PATH, disp_info[index].bl_name);
+ devmgr_log("path[%s]value[%d]", path, value);
+ ret = sys_set_int(path, value);
+
+ return ret;
+}
+
+int set_backlight_brightness(int index, int value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ return ret;
+ }
+
+ snprintf(path, MAX_NAME, MDNIE_BACKLIGHT_BRIGHTNESS_PATH);
+ if(!sys_check_node((char *)path)) {
+ ret = sys_set_int(path, value);
+ } else {
+ snprintf(path, MAX_NAME, BACKLIGHT_BRIGHTNESS_PATH, disp_info[index].bl_name);
+ ret = sys_set_int(path, value);
+ }
+
+ return ret;
+}
+
+int OEM_sys_set_backlight_brightness(int index, int value, int power_saving)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+ int max_brightness;
+ int pwr_saving_offset;
+
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ return ret;
+ }
+
+ devmgr_log("path[%s]value[%d]power_saving[%d]", path, value, power_saving);
+
+ if (power_saving)
+ devmgr_log("Doesn't support power saving for brightness control.\n");
+
+ current_brightness = value;
+
+ if (value > backlight_max_brightness)
+ value = backlight_max_brightness;
+
+ ret = set_backlight_brightness(index, value);
+ if (ret)
+ {
+ devmgr_log("Can't set backlight brightness");
+ return ret;
+ }
+
+ return ret;
+}
+
+int OEM_sys_get_backlight_acl_control(int index, int *value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ return ret;
+ }
+
+ snprintf(path, MAX_NAME, LCD_ACL_CONTROL_PATH, disp_info[index].lcd_name);
+ ret = sys_get_int(path, value);
+ devmgr_log("path[%s]value[%d]", path, *value);
+
+ return ret;
+}
+int acl_status = 0;
+int siop_acl_status;
+int OEM_sys_set_backlight_acl_control(int index, int value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ return ret;
+ }
+
+ snprintf(path, MAX_NAME, LCD_ACL_CONTROL_PATH, disp_info[index].lcd_name);
+ devmgr_log("path[%s]value[%d]", path, value);
+ acl_status = value;
+
+ if (value)
+ ret = sys_set_int(path, value);
+ else
+ ret = sys_set_int(path, siop_acl_status);
+
+ return ret;
+}
+
+int OEM_sys_get_backlight_hbm_control(int index, int *value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ return ret;
+ }
+
+ snprintf(path, MAX_NAME, LCD_HBM_CONTROL_PATH, disp_info[index].lcd_name);
+ ret = sys_get_int(path, value);
+ devmgr_log("path[%s]value[%d]", path, *value);
+
+ return ret;
+}
+
+int OEM_sys_set_backlight_hbm_control(int index, int value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ return ret;
+ }
+
+ snprintf(path, MAX_NAME, LCD_HBM_CONTROL_PATH, disp_info[index].lcd_name);
+ devmgr_log("path[%s]value[%d]", path, value);
+ ret = sys_set_int(path, value);
+
+ return ret;
+}
+
+int OEM_sys_get_backlight_elvss_control(int index, int *value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ return ret;
+ }
+
+ snprintf(path, MAX_NAME, LCD_ELVSS_CONTROL_PATH, disp_info[index].lcd_name);
+ ret = sys_get_int(path, value);
+ devmgr_log("path[%s]value[%d]", path, *value);
+
+ return ret;
+}
+
+int OEM_sys_set_backlight_elvss_control(int index, int value)
+{
+ int ret = -1;
+ int temp;
+ char path[MAX_NAME+1];
+
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ return ret;
+ }
+ if (value > 0)
+ temp = TEMPERATURE_STAGE_0;
+ else if (value > -200)
+ temp = TEMPERATURE_STAGE_1;
+ else
+ temp = TEMPERATURE_STAGE_2;
+
+ if (elvss_temp_stage == temp)
+ ret = 0;
+ else {
+ elvss_temp_stage = temp;
+ snprintf(path, MAX_NAME, LCD_ELVSS_CONTROL_PATH, disp_info[index].lcd_name);
+ devmgr_log("path[%s]value[%d]", path, elvss_temp_stage);
+ ret = sys_set_int(path, elvss_temp_stage);
+ }
+
+ return ret;
+}
+
+int OEM_sys_get_lcd_power(int index, int *value)
+{
+ static const char *str_conn = "connected";
+ static const char *str_on = "On", *str_off = "Off";
+ DIR *dir;
+ struct dirent *dent;
+ char path[PATH_MAX], buf[BUFF_MAX] = {0,};
+ int ret, connected = 0;
+
+ dir = opendir(DRM_PATH);
+ if (!dir)
+ return -errno;
+
+ while ((dent = readdir(dir))) {
+ if (!(dent->d_type == DT_DIR && strstr(dent->d_name, "card0")))
+ continue;
+
+ snprintf(path, sizeof(path), "%s/%s/status", DRM_PATH, dent->d_name);
+ ret = sys_get_str(path, buf);
+ if (!strncmp(buf, str_conn, strlen(str_conn))) {
+ connected = 1;
+ break;
+ }
+ }
+
+ closedir(dir);
+
+ if (!connected)
+ return -ENOENT;
+
+ memset(buf, 0, sizeof(buf));
+ snprintf(path, sizeof(path), "%s/%s/dpms", DRM_PATH, dent->d_name);
+ ret = sys_get_str(path, buf);
+
+ if (!strncmp(buf, str_on, strlen(str_on)))
+ *value = 0;
+ else if (!strncmp(buf, str_off, strlen(str_off)))
+ *value = 4;
+ else
+ return -EPERM;
+
+ devmgr_log("%s - %d", path, *value);
+ return 0;
+}
+
+int OEM_sys_set_lcd_power(int index, int value)
+{
+ return -EPERM;
+}
+
+/* image_enhance */
+/* mode - dynamic, standard, natural, movie */
+enum image_enhance_mode {
+ MODE_DYNAMIC = 0,
+ MODE_STANDARD,
+ MODE_NATURAL,
+ MODE_MOVIE,
+};
+
+/* scenario - ui, gallery, video, vtcall, camera, browser, negative, bypass */
+enum image_enhance_scenario {
+ SCENARIO_UI = 0,
+ SCENARIO_GALLERY,
+ SCENARIO_VIDEO,
+ SCENARIO_VTCALL,
+ SCENARIO_CAMERA,
+ SCENARIO_BROWSER,
+ SCENARIO_NEGATIVE,
+ SCENARIO_BYPASS,
+};
+
+/* tone - normal, warm, cold */
+enum image_enhance_tone {
+ TONE_NORMAL = 0,
+ TONE_WARM,
+ TONE_COLD,
+};
+
+/* tone browser - tone1, tone2, tone3 */
+enum image_enhance_tone_br {
+ TONE_1 = 0,
+ TONE_2,
+ TONE_3,
+};
+
+/* outdoor - off, on */
+enum image_enhance_outdoor {
+ OUTDOOR_OFF = 0,
+ OUTDOOR_ON,
+};
+
+/* index - mode, scenario, tone, outdoor, tune */
+enum image_enhance_index {
+ INDEX_MODE,
+ INDEX_SCENARIO,
+ INDEX_TONE,
+ INDEX_OUTDOOR,
+ INDEX_TUNE,
+ INDEX_COLOR_BLIND,
+ INDEX_CABC,
+ INDEX_MAX,
+};
+
+const char *image_enhance_str[INDEX_MAX] = {
+ "mode",
+ "scenario",
+ "tone",
+ "outdoor",
+ "tune",
+ "color_blind",
+ "cabc",
+};
+
+struct image_enhance_info {
+ enum image_enhance_mode mode;
+ enum image_enhance_scenario scenario;
+ enum image_enhance_tone tone;
+ enum image_enhance_outdoor outdoor;
+};
+
+int set_wakeup_key(int value)
+{
+ const char enable_str[] = "114,115,139"; /* volume up/down, home key */
+ const char disable_str[] = "139"; /* home key */
+ char path[MAX_NAME+1];
+ int ret = -1;
+
+ snprintf(path, MAX_NAME, KEY_WAKEUP_ENABLE_PATH);
+
+ if (value) {
+ ret = sys_set_str(path, enable_str);
+ devmgr_log("path[%s]value[%s]", path, enable_str);
+ } else {
+ ret = sys_set_str(path, disable_str);
+ devmgr_log("path[%s]value[%s]", path, disable_str);
+ }
+
+ return ret;
+}
+
+int OEM_sys_set_key(int index, int value)
+{
+ int ret = -1;
+
+ switch(index) {
+ case KEY_WAKEUP:
+ ret = set_wakeup_key(value);
+ break;
+ case KEY_MAX:
+ default:
+ devmgr_log("fail to get key index.");
+ ret = -1;
+ }
+ return ret;
+}
+
+int OEM_sys_get_lcd_cabc(int index, int *value)
+{
+ char lcd_cabc_path[MAX_NAME+1];
+ char mdnie_cabc_path[MAX_NAME+1];
+ int ret = -1;
+
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ return ret;
+ }
+
+ snprintf(lcd_cabc_path, MAX_NAME, LCD_CABC_CONTROL_PATH, disp_info[index].lcd_name);
+ snprintf(mdnie_cabc_path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_CABC]);
+
+ if(!sys_check_node((char *)mdnie_cabc_path)) {
+ ret = sys_get_int((char *)mdnie_cabc_path, value);
+ devmgr_log("path[%s]value[%d]", mdnie_cabc_path, *value);
+ } else if (!sys_check_node((char *)lcd_cabc_path)) {
+ ret = sys_get_int((char *)lcd_cabc_path, value);
+ devmgr_log("path[%s]value[%d]", lcd_cabc_path, *value);
+ } else {
+ devmgr_log("fail to get cabc mode.");
+ ret = -1;
+ }
+
+ return ret;
+}
+
+int OEM_sys_set_lcd_cabc(int index, int value)
+{
+ char lcd_cabc_path[MAX_NAME+1];
+ char mdnie_cabc_path[MAX_NAME+1];
+ int ret = -1;
+
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ return ret;
+ }
+
+ snprintf(lcd_cabc_path, MAX_NAME, LCD_CABC_CONTROL_PATH, disp_info[index].lcd_name);
+ snprintf(mdnie_cabc_path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_CABC]);
+
+ if(!sys_check_node((char *)mdnie_cabc_path)) {
+ ret = sys_set_int((char *)mdnie_cabc_path, value);
+ devmgr_log("path[%s]value[%d]", mdnie_cabc_path, value);
+ } else if (!sys_check_node((char *)lcd_cabc_path)) {
+ ret = sys_set_int((char *)lcd_cabc_path, value);
+ devmgr_log("path[%s]value[%d]", lcd_cabc_path, value);
+ } else {
+ devmgr_log("fail to set cabc mode.");
+ ret = -1;
+ }
+
+ return ret;
+}
+
+int OEM_sys_get_auto_screen_tone(int index, int *value)
+{
+ char acl_path[MAX_NAME+1];
+ char lcd_cabc_path[MAX_NAME+1];
+ char mdnie_cabc_path[MAX_NAME+1];
+ int ret = -1;
+
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ return ret;
+ }
+
+ snprintf(acl_path, MAX_NAME, LCD_ACL_CONTROL_PATH, disp_info[index].lcd_name);
+ snprintf(lcd_cabc_path, MAX_NAME, LCD_CABC_CONTROL_PATH, disp_info[index].lcd_name);
+ snprintf(mdnie_cabc_path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_CABC]);
+
+ if(!sys_check_node((char *)acl_path)) {
+ ret = sys_get_int((char *)acl_path, value);
+ devmgr_log("path[%s]value[%d]", acl_path, *value);
+ } else {
+ if(!sys_check_node((char *)mdnie_cabc_path)) {
+ ret = sys_get_int((char *)mdnie_cabc_path, value);
+ devmgr_log("path[%s]value[%d]", mdnie_cabc_path, *value);
+ } else if (!sys_check_node((char *)lcd_cabc_path)) {
+ ret = sys_get_int((char *)lcd_cabc_path, value);
+ devmgr_log("path[%s]value[%d]", lcd_cabc_path, *value);
+ } else {
+ devmgr_log("fail to get auto screen tone.");
+ ret = -1;
+ }
+ }
+ return ret;
+}
+
+int OEM_sys_set_auto_screen_tone(int index, int value)
+{
+ char acl_path[MAX_NAME+1];
+ char lcd_cabc_path[MAX_NAME+1];
+ char mdnie_cabc_path[MAX_NAME+1];
+ int ret = -1;
+
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ return ret;
+ }
+
+ snprintf(acl_path, MAX_NAME, LCD_ACL_CONTROL_PATH, disp_info[index].lcd_name);
+ snprintf(lcd_cabc_path, MAX_NAME, LCD_CABC_CONTROL_PATH, disp_info[index].lcd_name);
+ snprintf(mdnie_cabc_path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_CABC]);
+
+ if(!sys_check_node((char *)acl_path)) {
+ acl_status = value;
+ if (value) {
+ ret = sys_set_int((char *)acl_path, value);
+ devmgr_log("path[%s]value[%d]", acl_path, value);
+ } else {
+ ret = sys_set_int((char *)acl_path, siop_acl_status);
+ devmgr_log("path[%s]siop_acl_value[%d]", acl_path, siop_acl_status);
+ }
+ } else {
+ if(!sys_check_node((char *)mdnie_cabc_path)) {
+ if (value > CABC_OFF)
+ value = CABC_USER_INTERFACE;
+ ret = sys_set_int((char *)mdnie_cabc_path, value);
+ devmgr_log("path[%s]value[%d]", mdnie_cabc_path, value);
+ } else if (!sys_check_node((char *)lcd_cabc_path)) {
+ if (value > CABC_OFF)
+ value = CABC_OFF;
+ ret = sys_set_int((char *)lcd_cabc_path, value);
+ devmgr_log("path[%s]value[%d]", lcd_cabc_path, value);
+ } else {
+ devmgr_log("fail to set auto screen tone.");
+ ret = -1;
+ }
+ }
+ return ret;
+}
+
+int OEM_sys_set_auto_screen_tone_force(int index, int value)
+{
+ char path[MAX_NAME+1] = {0};
+ int new_val = 0;
+
+ if (index >= DISP_MAX) {
+ devmgr_log("supports %d display node", DISP_MAX);
+ return -EINVAL;
+ }
+
+ snprintf(path, MAX_NAME, LCD_ACL_CONTROL_PATH, disp_info[index].lcd_name);
+ if (access(path, W_OK) != 0) {
+ devmgr_log("%s not exist", path);
+ return -EINVAL;
+ }
+
+ siop_acl_status = value;
+ new_val = acl_status | siop_acl_status;
+ return sys_set_int(path, new_val);
+}
+
+int OEM_sys_get_image_enhance_color_blind(int *value)
+{
+ char path[MAX_NAME+1];
+ int ret = -1;
+
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_COLOR_BLIND]);
+ ret = sys_get_int(path, value);
+ devmgr_log("path[%s] value[%d]", path, *value);
+
+ return ret;
+}
+
+int OEM_sys_set_image_enhance_color_blind(void *value)
+{
+ struct color_blind_info *color_blind_value = (struct color_blind_info *)value;
+ char value_string[MAX_NAME+1];
+ char path[MAX_NAME+1];
+ int ret = -1;
+
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_COLOR_BLIND]);
+ sprintf(value_string, "%d 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x",\
+ color_blind_value->power,\
+ color_blind_value->RrCr, color_blind_value->RgCg, color_blind_value->RbCb,\
+ color_blind_value->GrMr, color_blind_value->GgMg, color_blind_value->GbMb,\
+ color_blind_value->BrYr, color_blind_value->BgYg, color_blind_value->BbYb);
+
+ ret = sys_set_str(path, value_string);
+
+ devmgr_log("path[%s] value[%s]", path, value_string);
+
+ return ret;
+}
+
+int OEM_sys_get_image_enhance_save(void *image_enhance)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+ struct image_enhance_info *image_enhance_save = (struct image_enhance_info *)image_enhance;
+
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_MODE]);
+ ret = sys_get_int(path, &image_enhance_save->mode);
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_SCENARIO]);
+ ret = sys_get_int(path, &image_enhance_save->scenario);
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_TONE]);
+ ret = sys_get_int(path, &image_enhance_save->tone);
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_OUTDOOR]);
+ ret = sys_get_int(path, &image_enhance_save->outdoor);
+ devmgr_log("path[%s]mode[%d]scenario[%d]tone[%d]outdoor[%d]", path, image_enhance_save->mode,
+ image_enhance_save->scenario, image_enhance_save->tone, image_enhance_save->outdoor);
+
+ return ret;
+}
+
+int OEM_sys_set_image_enhance_restore(void *image_enhance)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+ struct image_enhance_info *image_enhance_restore = (struct image_enhance_info *)image_enhance;
+
+ devmgr_log("path[%s]mode[%d]scenario[%d]tone[%d]outdoor[%d]", path, image_enhance_restore->mode,
+ image_enhance_restore->scenario, image_enhance_restore->tone, image_enhance_restore->outdoor);
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_MODE]);
+ ret = sys_set_int(path, image_enhance_restore->mode);
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_SCENARIO]);
+ ret = sys_set_int(path, image_enhance_restore->scenario);
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_TONE]);
+ ret = sys_set_int(path, image_enhance_restore->tone);
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_OUTDOOR]);
+ ret = sys_set_int(path, image_enhance_restore->outdoor);
+
+ return ret;
+}
+
+int OEM_sys_get_image_enhance_mode(int *value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_MODE]);
+ ret = sys_get_int(path, value);
+ devmgr_log("path[%s]value[%d]", path, *value);
+
+ return ret;
+}
+
+int OEM_sys_set_image_enhance_mode(int value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_MODE]);
+ devmgr_log("path[%s]value[%d]", path, value);
+ ret = sys_set_int(path, value);
+
+ return ret;
+}
+
+int OEM_sys_get_image_enhance_scenario(int *value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_SCENARIO]);
+ ret = sys_get_int(path, value);
+ devmgr_log("path[%s]value[%d]", path, *value);
+
+ return ret;
+}
+
+int OEM_sys_set_image_enhance_scenario(int value)
+{
+ int ret = -1;
+ int screen_tone = 0;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_SCENARIO]);
+ devmgr_log("path[%s]value[%d]", path, value);
+ ret = sys_set_int(path, value);
+
+ return ret;
+}
+
+int OEM_sys_get_image_enhance_tone(int *value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_TONE]);
+ ret = sys_get_int(path, value);
+ devmgr_log("path[%s]value[%d]", path, *value);
+
+ return ret;
+}
+
+int OEM_sys_set_image_enhance_tone(int value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_TONE]);
+ devmgr_log("path[%s]value[%d]", path, value);
+ ret = sys_set_int(path, value);
+
+ return ret;
+}
+
+int OEM_sys_get_image_enhance_outdoor(int *value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_OUTDOOR]);
+ ret = sys_get_int(path, value);
+ devmgr_log("path[%s]value[%d]", path, *value);
+
+ return ret;
+}
+
+int OEM_sys_set_image_enhance_outdoor(int value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_OUTDOOR]);
+ devmgr_log("path[%s]value[%d]", path, value);
+ ret = sys_set_int(path, value);
+
+ return ret;
+}
+
+int OEM_sys_get_image_enhance_tune(int *value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_TUNE]);
+ ret = sys_get_int(path, value);
+ devmgr_log("path[%s]value[%d]", path, *value);
+
+ return ret;
+}
+
+int OEM_sys_set_image_enhance_tune(int value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, IMAGE_ENHANCE_PATH, image_enhance_str[INDEX_TUNE]);
+ devmgr_log("path[%s]value[%d]", path, value);
+ ret = sys_set_int(path, value);
+
+ return ret;
+}
+
+int OEM_sys_image_enhance_info(int *value)
+{
+ DIR *dir_info;
+ struct dirent *dir_entry;
+ int ret = -1;
+ const char * image_enhance_path_info = IMAGE_ENHANCE_PATH_INFO;
+
+ dir_info = opendir(image_enhance_path_info);
+
+ if (NULL != dir_info) {
+ *value = 1;
+ ret = 0;
+ } else {
+ *value = 0;
+ ret = -ENOENT;
+ }
+
+ if (NULL != dir_info)
+ closedir(dir_info);
+
+ return ret;
+}
+
+int OEM_sys_set_display_frame_rate(int value)
+{
+ int ret = -1;
+ char path[MAX_NAME+1];
+
+ snprintf(path, MAX_NAME, DISPLAY_FRAME_RATE_PATH);
+ devmgr_log("path[%s]value[%d]", path, value);
+ ret = sys_set_int(path, value);
+ if (ret) {
+ devmgr_log("display_frame_rate path node not found");
+ return -1;
+ }
+
+ snprintf(path, MAX_NAME, DISPLAY_MISC_LCD_FPS_PATH);
+ devmgr_log("path[%s]value[%d]", path, value);
+ ret = sys_set_int(path, value);
+ if (ret) {
+ devmgr_log("display_misc_lcd_fps path node not found");
+ return -1;
+ }
+
+ return ret;
+}
+
+GENERATE_ACCESSORS_INT_RW(haptic_motor_level, HAPTIC_MOTOR_LEVEL_PATH)
+GENERATE_ACCESSORS_INT_R(haptic_motor_level_max, HAPTIC_MOTOR_LEVEL_MAX_PATH)
+GENERATE_ACCESSORS_INT_W(haptic_motor_enable, HAPTIC_MOTOR_ENABLE_PATH)
+GENERATE_ACCESSORS_INT_W(haptic_motor_oneshot, HAPTIC_MOTOR_ONESHOT_PATH)
+
+GENERATE_ACCESSORS_INT_R(battery_capacity, BATTERY_CAPACITY_PATH)
+GENERATE_ACCESSORS_INT_R(battery_charge_full, BATTERY_CHARGE_FULL_PATH)
+GENERATE_ACCESSORS_INT_R(battery_charge_now, BATTERY_CHARGE_NOW_PATH)
+GENERATE_ACCESSORS_INT_R(battery_present, BATTERY_PRESENT_PATH)
+
+int OEM_sys_get_battery_capacity_raw(int *value)
+{
+ int ret;
+
+ ret = sys_get_int(BATTERY_CAPACITY_RAW_PATH, value);
+ if (ret == -1) {
+ return -ENODEV;
+ }
+
+ return ret;
+}
+
+static char *health_text[] = {
+ "Unknown", "Good", "Overheat", "Dead", "Over voltage",
+ "Unspecified failure", "Cold",
+};
+
+int OEM_sys_get_battery_health(int *value)
+{
+ char buf[BUFF_MAX] = {0};
+ int ret = 0;
+ int i = 0;
+
+ ret = sys_get_str(BATTERY_HEALTH_PATH, buf);
+ if (ret == -1)
+ return -1;
+
+ for (i = 0; i < BATTERY_HEALTH_MAX; i++) {
+ if (strncmp(buf, health_text[i], strlen(health_text[i])) == 0) {
+ *value = i;
+ return 0;
+ }
+ }
+
+ return -1;
+}
+
+int OEM_sys_get_battery_polling_required(int *value)
+{
+ *value = 0;
+
+ return 0;
+}
+
+int OEM_sys_get_battery_support_insuspend_charging(int *value)
+{
+ *value = 1;
+
+ return 0;
+}
+
+static char uart_node_path[MAX_NAME];
+static char usb_node_path[MAX_NAME];
+
+/* find uart/usb node path */
+static int OEM_sys_muic_node_path_info()
+{
+ int err = -1;
+
+ err = sys_check_node(UART_PATH);
+ if (!err)
+ sys_get_node(UART_PATH, uart_node_path);
+ else {
+ err = sys_check_node(UART_PATH_TRATS);
+ if (err) {
+ devmgr_log("uart path node not found");
+ return -1;
+ }
+ sys_get_node(UART_PATH_TRATS, uart_node_path);
+ }
+
+ err = sys_check_node(USB_PATH);
+ if (!err)
+ sys_get_node(USB_PATH, usb_node_path);
+ else {
+ err = sys_check_node(USB_PATH_TRATS);
+ if (err) {
+ devmgr_log("usb path node not found");
+ return -1;
+ }
+ sys_get_node(USB_PATH_TRATS, usb_node_path);
+ }
+ return 0;
+}
+
+int OEM_sys_get_uart_path(int *value)
+{
+ char buf[BUFF_MAX] = {0};
+ int ret = 0;
+
+ ret = sys_get_str(uart_node_path, buf);
+ if (ret == -1)
+ return -1;
+
+ if (strncmp(buf, "CP", 2) == 0) {
+ *value = PATH_CP;
+ return 0;
+ } else if (strncmp(buf, "AP", 2) == 0) {
+ *value = PATH_AP;
+ return 0;
+ }
+
+ return -1;
+}
+
+int OEM_sys_set_uart_path(int value)
+{
+ switch (value) {
+ case PATH_CP:
+ return sys_set_str(uart_node_path, "CP");
+ case PATH_AP:
+ return sys_set_str(uart_node_path, "AP");
+ }
+
+ return -1;
+}
+
+
+int OEM_sys_get_usb_path(int *value)
+{
+ char buf[BUFF_MAX] = {0};
+ int ret = 0;
+
+ ret = sys_get_str(usb_node_path, buf);
+ if (ret == -1)
+ return -1;
+
+ if (strncmp(buf, "PDA", 3) == 0) {
+ *value = PATH_AP;
+ return 0;
+ } else if (strncmp(buf, "MODEM", 5) == 0) {
+ *value = PATH_CP;
+ return 0;
+ }
+
+ return -1;
+}
+
+int OEM_sys_set_usb_path(int value)
+{
+ switch (value) {
+ case PATH_CP:
+ return sys_set_str(usb_node_path, "MODEM");
+ case PATH_AP:
+ return sys_set_str(usb_node_path, "PDA");
+ }
+
+ return -1;
+}
+
+GENERATE_ACCESSORS_INT_R(jack_charger_online, JACK_CHARGER_ONLINE_PATH)
+GENERATE_ACCESSORS_INT_R(jack_earjack_online, JACK_EARJACK_ONLINE_PATH)
+GENERATE_ACCESSORS_INT_R(jack_earkey_online, JACK_EARKEY_ONLINE_PATH)
+GENERATE_ACCESSORS_INT_R(jack_hdmi_online, JACK_HDMI_ONLINE_PATH)
+GENERATE_ACCESSORS_INT_R(jack_usb_online, JACK_USB_ONLINE_PATH)
+GENERATE_ACCESSORS_INT_R(jack_cradle_online, JACK_CRADLE_ONLINE_PATH)
+GENERATE_ACCESSORS_INT_R(jack_tvout_online, JACK_TVOUT_ONLINE_PATH)
+
+int OEM_sys_get_jack_keyboard_online(int *value)
+{
+ /* Currently, We don't provide SLP Based platform with keyboard I/F */
+ int ret = -1;
+ /*return sys_get_int(JACK_KEYBOARD_ONLINE_PATH, value);*/
+ return ret;
+}
+
+int OEM_sys_get_hdmi_support(int *value)
+{
+ *value = 1;
+
+ return 0;
+}
+
+int OEM_sys_set_irled_control(char *value)
+{
+ sys_set_str(IRLED_CONTROL_PATH, value);
+
+ return 0;
+}
+
+int OEM_sys_get_leds_torch_max_brightness(int *value)
+{
+ *value = 1;
+
+ return 0;
+}
+
+GENERATE_ACCESSORS_INT_RW(leds_torch_brightness, LEDS_TORCH_BRIGHTNESS_PATH)
+
+int OEM_sys_set_power_state(int value)
+{
+ char buf[BUFF_MAX] = {0};
+ int ret = 0;
+ switch (value) {
+ case POWER_STATE_SUSPEND:
+ return sys_set_str(POWER_STATE_PATH, "mem");
+#if 0
+ case POWER_STATE_PRE_SUSPEND:
+ return sys_set_str(POWER_STATE_PATH, "pre_suspend");
+#else
+ case POWER_STATE_PRE_SUSPEND:
+ {
+ ret = sys_get_str(CPUFREQ_GOVERNOR_PATH, buf);
+
+ if ((ret != -1) && (strncmp(buf, "ondemand", 8) == 0)) {
+ devmgr_log("---[LCD OFF] Non-Interactive mode setings for cpufreq parameters---\n");
+ sys_set_int(CPUFREQ_ONDEMAND_SAMPLING_RATE, 500000);
+ sys_set_int(CPUFREQ_ONDEMAND_OPTIMAL_FREQ, 300000);
+ sys_set_int(CPUFREQ_ONDEMAND_SYNC_FREQ, 300000);
+ }
+
+ return sys_set_str(POWER_AUTOSLEEP_PATH, "mem");
+ }
+#endif
+ case POWER_STATE_POST_RESUME:
+ {
+ ret = sys_get_str(CPUFREQ_GOVERNOR_PATH, buf);
+
+ if ((ret != -1) && (strncmp(buf, "ondemand", 8) == 0)) {
+ devmgr_log("---[LCD ON] Interactive mode setings for cpufreq parameters---\n");
+ sys_set_int(CPUFREQ_ONDEMAND_SAMPLING_RATE, 50000);
+ sys_set_int(CPUFREQ_ONDEMAND_OPTIMAL_FREQ, 960000);
+ sys_set_int(CPUFREQ_ONDEMAND_SYNC_FREQ, 1190400);
+ }
+
+ return sys_set_str(POWER_STATE_PATH, "post_resume");
+ }
+ }
+
+ return -1;
+}
+
+int OEM_sys_set_power_lock(int value)
+{
+ static int power_lock_state=-1;
+
+ if(power_lock_state == value)
+ return -1;
+ else
+ power_lock_state = value;
+
+ switch (value) {
+ case POWER_UNLOCK:
+ return sys_set_str(POWER_UNLOCK_PATH, "mainlock");
+ case POWER_LOCK:
+ return sys_set_str(POWER_LOCK_PATH, "mainlock");
+ }
+
+ return 0;
+}
+
+int OEM_sys_get_power_lock_support(int *value)
+{
+ int err = -1;
+
+ err = sys_check_node(POWER_LOCK_PATH);
+ if (err == -1) {
+ devmgr_log("power lock node not found");
+ *value = 0;
+ }
+ else
+ *value = 1;
+
+ return 0;
+}
+
+int OEM_sys_set_resetkey_disable (int value)
+{
+ int ret = -1;
+
+ if (value == 0)
+ value = 1;
+ else
+ value = 0;
+
+ ret= sys_set_int(KEY_MANUAL_RESET_PMIC_PATH, value);
+ ret= sys_set_int(KEY_MANUAL_RESET_SAFEOUT_PATH, value);
+
+ return ret;
+}
+
+GENERATE_ACCESSORS_INT_RW(power_wakeup_count, POWER_WAKEUP_COUNT_PATH)
+
+GENERATE_ACCESSORS_INT_W(memnotify_threshold_lv1, MEMNOTIFY_THRESHOLD_LV1_PATH)
+GENERATE_ACCESSORS_INT_W(memnotify_threshold_lv2, MEMNOTIFY_THRESHOLD_LV2_PATH)
+
+GENERATE_ACCESSORS_INT_R(cpufreq_cpuinfo_max_freq, CPUFREQ_CPUINFO_MAX_FREQ_PATH)
+GENERATE_ACCESSORS_INT_R(cpufreq_cpuinfo_min_freq, CPUFREQ_CPUINFO_MIN_FREQ_PATH)
+GENERATE_ACCESSORS_INT_RW(cpufreq_scaling_max_freq, CPUFREQ_SCALING_MAX_FREQ_PATH)
+GENERATE_ACCESSORS_INT_RW(cpufreq_scaling_min_freq, CPUFREQ_SCALING_MIN_FREQ_PATH)
+GENERATE_ACCESSORS_INT_RW(cpufreq_power_max_freq, CPUFREQ_POWER_MAX_FREQ_PATH)
+GENERATE_ACCESSORS_INT_RW(cpufreq_power_min_freq, CPUFREQ_POWER_MIN_FREQ_PATH)
+GENERATE_ACCESSORS_CHAR_W(cpufreq_id_max_freq, CPUFREQ_ID_MAX_FREQ_PATH)
+GENERATE_ACCESSORS_CHAR_W(cpufreq_id_min_freq, CPUFREQ_ID_MIN_FREQ_PATH)
+
+GENERATE_ACCESSORS_INT_R(cpu_enable_max_number, CPU_ENABLE_MAX_NUMBER_PATH)
+GENERATE_ACCESSORS_INT_W(cpu_enable_max_number, CPU_ENABLE_MAX_NUMBER_PATH)
+GENERATE_ACCESSORS_INT_R(cpu_enable_min_number, CPU_ENABLE_MIN_NUMBER_PATH)
+GENERATE_ACCESSORS_INT_W(cpu_enable_min_number, CPU_ENABLE_MIN_NUMBER_PATH)
+GENERATE_ACCESSORS_INT_R(cpu_fixed_number, CPU_ENABLE_FIXED_NUMBER_PATH)
+GENERATE_ACCESSORS_INT_W(cpu_fixed_number, CPU_ENABLE_FIXED_NUMBER_PATH)
+
+#define GENERATE_ACCESSORS_INT_R_NO_CONVERT(_suffix, _item) \
+int OEM_sys_get_##_suffix(int *value) \
+{ \
+ return sys_get_int_wo_convert(_item, value); \
+}
+
+#define GENERATE_ACCESSORS_INT_W_NO_CONVERT(_suffix, _item) \
+int OEM_sys_set_##_suffix(int value) \
+{ \
+ return sys_set_int_wo_convert(_item, value); \
+}
+
+GENERATE_ACCESSORS_INT_R_NO_CONVERT(memnotify_victim_task, MEMNOTIFY_VICTIM_TASK_PATH)
+GENERATE_ACCESSORS_INT_W_NO_CONVERT(process_monitor_mp_pnp, PROCESS_MONITOR_MP_PNP_PATH)
+GENERATE_ACCESSORS_INT_W_NO_CONVERT(process_monitor_mp_vip, PROCESS_MONITOR_MP_VIP_PATH)
+
+#define GENERATE_ACCESSORS_GET_NODE_PATH(_suffix, _item) \
+int OEM_sys_get_##_suffix(char *node) \
+{ \
+ return sys_get_node(_item, node); \
+}
+
+GENERATE_ACCESSORS_GET_NODE_PATH(touch_event, TOUCH_EVENT_NODE)
+GENERATE_ACCESSORS_GET_NODE_PATH(memnotify_node, MEMNOTIFY_NODE)
+GENERATE_ACCESSORS_GET_NODE_PATH(process_monitor_node, PROCESS_MONITOR_NODE)
+
+GENERATE_ACCESSORS_INT_R(temperature_adc, TEMPERATURE_ADC_PATH)
+GENERATE_ACCESSORS_INT_R(temperature_value, TEMPERATURE_VALUE_PATH)
+
+#define SVCLED_PATTERN_MASK 0xFF000000
+#define SVCLED_PATTERN_SHIFT 24
+#define SVCLED_RGB_MASK 0x00FFFFFF
+
+int OEM_sys_set_svcled_color(int rgb, int led_on_ms, int led_off_ms)
+{
+ int ret = -1;
+ unsigned int svcled_pattern, svcled_rgb;
+ char buf[BUFF_MAX];
+
+ devmgr_log("RGB: [%d], LED_On_ms: [%d], LED_Off_ms: [%d] ", rgb, led_on_ms, led_off_ms);
+
+ svcled_pattern = (rgb & SVCLED_PATTERN_MASK) >> SVCLED_PATTERN_SHIFT;
+
+ if (svcled_pattern)
+ ret = sys_set_int(SERVICE_LED_PATTERN_PATH, (int)svcled_pattern);
+ else {
+ svcled_rgb = rgb & SVCLED_RGB_MASK;
+ snprintf(buf, sizeof(buf), "0x%x %d %d", svcled_rgb, led_on_ms, led_off_ms);
+
+ ret = sys_set_str(SERVICE_LED_BLINK_PATH, buf);
+ if (ret != 0)
+ return ret;
+ }
+
+ return ret;
+}
+
+int OEM_sys_get_battery_technology(char *value)
+{
+ int err = -1;
+
+ err = sys_get_str(BATTERY_TECHNOLOGY_PATH, value);
+ if (err == 0)
+ return 0;
+ else
+ return -1;
+}
+
+int OEM_sys_get_battery_temperature(int *value)
+{
+ int err = -1;
+
+ err = sys_get_int(BATTERY_TEMPERATURE_PATH, value);
+
+ if (err == 0)
+ return 0;
+ else
+ return -1;
+}
+
+int OEM_sys_get_battery_voltage(int *value)
+{
+ int err = -1;
+
+ err = sys_get_int(BATTERY_VOLTAGE_PATH, value);
+
+ if (err == 0)
+ return 0;
+ else
+ return -1;
+}
+
+int OEM_sys_get_leds_flash_brightness(int *value)
+{
+ int err = -1;
+
+ err = sys_get_int(LEDS_FLASH_MOVIE_BRIGHTNESS_PATH, value);
+
+ if (err == 0)
+ return 0;
+ else
+ return -1;
+
+}
+
+int OEM_sys_set_leds_flash_brightness(int value)
+{
+ int ret = -1;
+
+ ret= sys_set_int(LEDS_FLASH_MOVIE_BRIGHTNESS_PATH, value);
+
+ return ret;
+
+}
+
+static int OEM_sys_get_extcon(int type, int *value)
+{
+ int ret = -1;
+
+ switch (type) {
+ case MUIC_ADC_ENABLE:
+ ret = sys_get_int(MUIC_ADC_ENABLE_PATH, value);
+ break;
+ case USB_ID:
+ {
+ char buf[BUFF_MAX] = {0};
+ char *stop;
+
+ ret = sys_get_str(MUIC_USBID_PATH, buf);
+ *value = (int)strtol(buf, &stop, 16);
+ break;
+ }
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+static int OEM_sys_set_extcon(int type, int value)
+{
+ int ret = -1;
+
+ switch (type) {
+ case MUIC_ADC_ENABLE:
+ if (value == 0 || value == 1 )
+ ret = sys_set_int(MUIC_ADC_ENABLE_PATH, value);
+ break;
+ case USB_ID:
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+
+static int OEM_sys_set_dummy(int value)
+{
+
+ return 0;
+}
+
+static OEM_sys_devman_plugin_interface devman_plugin_interface_exynos3250;
+
+EXPORT_API const OEM_sys_devman_plugin_interface *OEM_sys_get_devman_plugin_interface()
+{
+ /* Light interfaces */
+ devman_plugin_interface_exynos3250.OEM_sys_get_display_count = &OEM_sys_get_display_count;
+ devman_plugin_interface_exynos3250.OEM_sys_get_backlight_min_brightness = &OEM_sys_get_backlight_min_brightness;
+ devman_plugin_interface_exynos3250.OEM_sys_get_backlight_max_brightness = &OEM_sys_get_backlight_max_brightness;
+ devman_plugin_interface_exynos3250.OEM_sys_set_backlight_max_brightness = &OEM_sys_set_backlight_max_brightness;
+ devman_plugin_interface_exynos3250.OEM_sys_get_backlight_brightness = &OEM_sys_get_backlight_brightness;
+ devman_plugin_interface_exynos3250.OEM_sys_set_backlight_brightness = &OEM_sys_set_backlight_brightness;
+ devman_plugin_interface_exynos3250.OEM_sys_set_backlight_dimming = &OEM_sys_set_backlight_dimming;
+ devman_plugin_interface_exynos3250.OEM_sys_get_backlight_acl_control = &OEM_sys_get_backlight_acl_control;
+ devman_plugin_interface_exynos3250.OEM_sys_set_backlight_acl_control = &OEM_sys_set_backlight_acl_control;
+
+ devman_plugin_interface_exynos3250.OEM_sys_get_lcd_power = &OEM_sys_get_lcd_power;
+ devman_plugin_interface_exynos3250.OEM_sys_set_lcd_power = &OEM_sys_set_lcd_power;
+
+ /* Image Ehnhace interfaces */
+ devman_plugin_interface_exynos3250.OEM_sys_get_image_enhance_mode = &OEM_sys_get_image_enhance_mode;
+ devman_plugin_interface_exynos3250.OEM_sys_set_image_enhance_mode = &OEM_sys_set_image_enhance_mode;
+ devman_plugin_interface_exynos3250.OEM_sys_get_image_enhance_scenario = &OEM_sys_get_image_enhance_scenario;
+ devman_plugin_interface_exynos3250.OEM_sys_set_image_enhance_scenario = &OEM_sys_set_image_enhance_scenario;
+ devman_plugin_interface_exynos3250.OEM_sys_get_image_enhance_tone = &OEM_sys_get_image_enhance_tone;
+ devman_plugin_interface_exynos3250.OEM_sys_set_image_enhance_tone = &OEM_sys_set_image_enhance_tone;
+ devman_plugin_interface_exynos3250.OEM_sys_get_image_enhance_outdoor = &OEM_sys_get_image_enhance_outdoor;
+ devman_plugin_interface_exynos3250.OEM_sys_set_image_enhance_outdoor = &OEM_sys_set_image_enhance_outdoor;
+
+ devman_plugin_interface_exynos3250.OEM_sys_get_image_enhance_tune = &OEM_sys_get_image_enhance_tune;
+ devman_plugin_interface_exynos3250.OEM_sys_set_image_enhance_tune = &OEM_sys_set_image_enhance_tune;
+
+ devman_plugin_interface_exynos3250.OEM_sys_image_enhance_info = &OEM_sys_image_enhance_info;
+
+ devman_plugin_interface_exynos3250.OEM_sys_set_display_frame_rate = &OEM_sys_set_display_frame_rate;
+
+ devman_plugin_interface_exynos3250.OEM_sys_set_auto_screen_tone = &OEM_sys_set_auto_screen_tone;
+ devman_plugin_interface_exynos3250.OEM_sys_get_auto_screen_tone = &OEM_sys_get_auto_screen_tone;
+ devman_plugin_interface_exynos3250.OEM_sys_set_auto_screen_tone_force = &OEM_sys_set_auto_screen_tone_force;
+
+ devman_plugin_interface_exynos3250.OEM_sys_get_image_enhance_color_blind = &OEM_sys_get_image_enhance_color_blind;
+ devman_plugin_interface_exynos3250.OEM_sys_set_image_enhance_color_blind = &OEM_sys_set_image_enhance_color_blind;
+
+ /* UART path interfaces */
+ devman_plugin_interface_exynos3250.OEM_sys_get_uart_path = &OEM_sys_get_uart_path;
+ devman_plugin_interface_exynos3250.OEM_sys_set_uart_path = &OEM_sys_set_uart_path;
+
+ /* USB path interfaces */
+ devman_plugin_interface_exynos3250.OEM_sys_get_usb_path = &OEM_sys_get_usb_path;
+ devman_plugin_interface_exynos3250.OEM_sys_set_usb_path = &OEM_sys_set_usb_path;
+
+ /* Vibrator interfaces */
+ devman_plugin_interface_exynos3250.OEM_sys_get_haptic_vibetones_level_max = &OEM_sys_get_haptic_motor_level_max;
+ devman_plugin_interface_exynos3250.OEM_sys_get_haptic_vibetones_level = &OEM_sys_get_haptic_motor_level;
+ devman_plugin_interface_exynos3250.OEM_sys_set_haptic_vibetones_level = &OEM_sys_set_haptic_motor_level;
+ devman_plugin_interface_exynos3250.OEM_sys_set_haptic_vibetones_enable = &OEM_sys_set_haptic_motor_enable;
+ devman_plugin_interface_exynos3250.OEM_sys_set_haptic_vibetones_oneshot = &OEM_sys_set_haptic_motor_oneshot;
+
+ /* Battery interfaces */
+ devman_plugin_interface_exynos3250.OEM_sys_get_battery_capacity = &OEM_sys_get_battery_capacity;
+ devman_plugin_interface_exynos3250.OEM_sys_get_battery_capacity_raw = &OEM_sys_get_battery_capacity_raw;
+ devman_plugin_interface_exynos3250.OEM_sys_get_battery_charge_full = &OEM_sys_get_battery_charge_full;
+ devman_plugin_interface_exynos3250.OEM_sys_get_battery_charge_now = &OEM_sys_get_battery_charge_now;
+ devman_plugin_interface_exynos3250.OEM_sys_get_battery_present = &OEM_sys_get_battery_present;
+ devman_plugin_interface_exynos3250.OEM_sys_get_battery_health = &OEM_sys_get_battery_health;
+ devman_plugin_interface_exynos3250.OEM_sys_get_battery_polling_required= &OEM_sys_get_battery_polling_required;
+ devman_plugin_interface_exynos3250.OEM_sys_get_battery_support_insuspend_charging = &OEM_sys_get_battery_support_insuspend_charging;
+
+ /* Connection interfaces */
+ devman_plugin_interface_exynos3250.OEM_sys_get_jack_charger_online = &OEM_sys_get_jack_charger_online;
+ devman_plugin_interface_exynos3250.OEM_sys_get_jack_earjack_online = &OEM_sys_get_jack_earjack_online;
+ devman_plugin_interface_exynos3250.OEM_sys_get_jack_earkey_online = &OEM_sys_get_jack_earkey_online;
+ devman_plugin_interface_exynos3250.OEM_sys_get_jack_hdmi_online = &OEM_sys_get_jack_hdmi_online;
+ devman_plugin_interface_exynos3250.OEM_sys_get_jack_usb_online = &OEM_sys_get_jack_usb_online;
+ devman_plugin_interface_exynos3250.OEM_sys_get_jack_cradle_online = &OEM_sys_get_jack_cradle_online;
+ devman_plugin_interface_exynos3250.OEM_sys_get_jack_tvout_online = &OEM_sys_get_jack_tvout_online;
+ devman_plugin_interface_exynos3250.OEM_sys_get_jack_keyboard_online = &OEM_sys_get_jack_keyboard_online;
+
+ devman_plugin_interface_exynos3250.OEM_sys_get_hdmi_support = &OEM_sys_get_hdmi_support;
+
+ devman_plugin_interface_exynos3250.OEM_sys_get_extcon = &OEM_sys_get_extcon;
+ devman_plugin_interface_exynos3250.OEM_sys_set_extcon = &OEM_sys_set_extcon;
+
+ /* Torch interfaces */
+ devman_plugin_interface_exynos3250.OEM_sys_get_leds_torch_max_brightness = &OEM_sys_get_leds_torch_max_brightness;
+ devman_plugin_interface_exynos3250.OEM_sys_get_leds_torch_brightness = &OEM_sys_get_leds_torch_brightness;
+ devman_plugin_interface_exynos3250.OEM_sys_set_leds_torch_brightness = &OEM_sys_set_leds_torch_brightness;
+
+ /* Power management interfaces */
+ devman_plugin_interface_exynos3250.OEM_sys_set_power_state = &OEM_sys_set_power_state;
+ devman_plugin_interface_exynos3250.OEM_sys_set_power_lock = &OEM_sys_set_power_lock;
+ devman_plugin_interface_exynos3250.OEM_sys_get_power_lock_support = &OEM_sys_get_power_lock_support;
+
+ /* TODO: Should determine enum values of wakeup_count nodes */
+ devman_plugin_interface_exynos3250.OEM_sys_get_power_wakeup_count = &OEM_sys_get_power_wakeup_count;
+ devman_plugin_interface_exynos3250.OEM_sys_set_power_wakeup_count = &OEM_sys_set_power_wakeup_count;
+
+ /* OOM interfaces */
+ devman_plugin_interface_exynos3250.OEM_sys_get_memnotify_node = &OEM_sys_get_memnotify_node;
+ devman_plugin_interface_exynos3250.OEM_sys_get_memnotify_victim_task = &OEM_sys_get_memnotify_victim_task;
+ devman_plugin_interface_exynos3250.OEM_sys_set_memnotify_threshold_lv1 = &OEM_sys_set_memnotify_threshold_lv1;
+ devman_plugin_interface_exynos3250.OEM_sys_set_memnotify_threshold_lv2 = &OEM_sys_set_memnotify_threshold_lv2;
+
+ /* Process monitor interfaces */
+ devman_plugin_interface_exynos3250.OEM_sys_get_process_monitor_node = &OEM_sys_get_process_monitor_node;
+ devman_plugin_interface_exynos3250.OEM_sys_set_process_monitor_mp_pnp = &OEM_sys_set_process_monitor_mp_pnp;
+ devman_plugin_interface_exynos3250.OEM_sys_set_process_monitor_mp_vip = &OEM_sys_set_process_monitor_mp_vip;
+
+ /* UART path interfaces */
+ devman_plugin_interface_exynos3250.OEM_sys_get_cpufreq_cpuinfo_max_freq = &OEM_sys_get_cpufreq_cpuinfo_max_freq;
+ devman_plugin_interface_exynos3250.OEM_sys_get_cpufreq_cpuinfo_min_freq = &OEM_sys_get_cpufreq_cpuinfo_min_freq;
+ devman_plugin_interface_exynos3250.OEM_sys_get_cpufreq_scaling_max_freq = &OEM_sys_get_cpufreq_scaling_max_freq;
+ devman_plugin_interface_exynos3250.OEM_sys_set_cpufreq_scaling_max_freq = &OEM_sys_set_dummy;
+ devman_plugin_interface_exynos3250.OEM_sys_get_cpufreq_scaling_min_freq = &OEM_sys_get_cpufreq_scaling_min_freq;
+ devman_plugin_interface_exynos3250.OEM_sys_set_cpufreq_scaling_min_freq = &OEM_sys_set_cpufreq_scaling_min_freq;
+ devman_plugin_interface_exynos3250.OEM_sys_get_cpufreq_power_max_freq = &OEM_sys_get_cpufreq_power_max_freq;
+ devman_plugin_interface_exynos3250.OEM_sys_set_cpufreq_power_max_freq = &OEM_sys_set_dummy;
+ devman_plugin_interface_exynos3250.OEM_sys_get_cpufreq_power_min_freq = &OEM_sys_get_cpufreq_power_min_freq;
+ devman_plugin_interface_exynos3250.OEM_sys_set_cpufreq_power_min_freq = &OEM_sys_set_cpufreq_power_min_freq;
+ devman_plugin_interface_exynos3250.OEM_sys_set_cpufreq_id_min_freq = &OEM_sys_set_cpufreq_id_min_freq;
+ devman_plugin_interface_exynos3250.OEM_sys_set_cpufreq_id_max_freq = &OEM_sys_set_cpufreq_id_max_freq;
+
+ devman_plugin_interface_exynos3250.OEM_sys_get_cpu_enable_max_number = &OEM_sys_get_cpu_enable_max_number;
+ devman_plugin_interface_exynos3250.OEM_sys_set_cpu_enable_max_number= &OEM_sys_set_cpu_enable_max_number;
+
+ devman_plugin_interface_exynos3250.OEM_sys_get_cpu_fixed_number= &OEM_sys_get_cpu_fixed_number;
+ devman_plugin_interface_exynos3250.OEM_sys_set_cpu_fixed_number= &OEM_sys_set_cpu_fixed_number;
+
+ devman_plugin_interface_exynos3250.OEM_sys_set_pm_scenario = &Tizen_Resource_Manager;
+
+ devman_plugin_interface_exynos3250.OEM_sys_get_temperature_adc = &OEM_sys_get_temperature_adc;
+ devman_plugin_interface_exynos3250.OEM_sys_get_temperature_value = &OEM_sys_get_temperature_value;
+
+ devman_plugin_interface_exynos3250.OEM_sys_get_backlight_brightness_by_lux = &OEM_sys_get_backlight_brightness_by_lux;
+
+ devman_plugin_interface_exynos3250.OEM_sys_get_whitemagic_mode = &OEM_sys_get_whitemagic_mode;
+ devman_plugin_interface_exynos3250.OEM_sys_set_whitemagic_mode = &OEM_sys_set_whitemagic_mode;
+
+ devman_plugin_interface_exynos3250.OEM_sys_get_lcd_cabc = &OEM_sys_get_lcd_cabc;
+ devman_plugin_interface_exynos3250.OEM_sys_set_lcd_cabc = &OEM_sys_set_lcd_cabc;
+
+ devman_plugin_interface_exynos3250.OEM_sys_set_irled_control = &OEM_sys_set_irled_control;
+ devman_plugin_interface_exynos3250.OEM_sys_set_svcled_color = &OEM_sys_set_svcled_color;
+
+ devman_plugin_interface_exynos3250.OEM_sys_get_hall_status = &OEM_sys_get_hall_status;
+
+ devman_plugin_interface_exynos3250.OEM_sys_set_resetkey_disable = &OEM_sys_set_resetkey_disable;
+
+ devman_plugin_interface_exynos3250.OEM_sys_get_hardkey_backlight = &OEM_sys_get_hardkey_backlight;
+ devman_plugin_interface_exynos3250.OEM_sys_set_hardkey_backlight = &OEM_sys_set_hardkey_backlight;
+
+ devman_plugin_interface_exynos3250.OEM_sys_get_touchscreen_clear_cover = &OEM_sys_get_touchscreen_clear_cover;
+ devman_plugin_interface_exynos3250.OEM_sys_set_touchscreen_clear_cover = &OEM_sys_set_touchscreen_clear_cover;
+ devman_plugin_interface_exynos3250.OEM_sys_get_touchscreen_glove_mode = &OEM_sys_get_touchscreen_glove_mode;
+ devman_plugin_interface_exynos3250.OEM_sys_set_touchscreen_glove_mode = &OEM_sys_set_touchscreen_glove_mode;
+
+ devman_plugin_interface_exynos3250.OEM_sys_get_touchkey_flip_mode = &OEM_sys_get_touchkey_flip_mode;
+ devman_plugin_interface_exynos3250.OEM_sys_set_touchkey_flip_mode = &OEM_sys_set_touchkey_flip_mode;
+ devman_plugin_interface_exynos3250.OEM_sys_get_touchkey_glove_mode = &OEM_sys_get_touchkey_glove_mode;
+ devman_plugin_interface_exynos3250.OEM_sys_set_touchkey_glove_mode = &OEM_sys_set_touchkey_glove_mode;
+
+ devman_plugin_interface_exynos3250.OEM_sys_get_battery_technology = &OEM_sys_get_battery_technology;
+ devman_plugin_interface_exynos3250.OEM_sys_get_battery_temperature = &OEM_sys_get_battery_temperature;
+ devman_plugin_interface_exynos3250.OEM_sys_get_battery_voltage = &OEM_sys_get_battery_voltage;
+
+ devman_plugin_interface_exynos3250.OEM_sys_get_backlight_hbm_control = &OEM_sys_get_backlight_hbm_control;
+ devman_plugin_interface_exynos3250.OEM_sys_set_backlight_hbm_control = &OEM_sys_set_backlight_hbm_control;
+
+ devman_plugin_interface_exynos3250.OEM_sys_get_leds_flash_brightness = &OEM_sys_get_leds_flash_brightness;
+ devman_plugin_interface_exynos3250.OEM_sys_set_leds_flash_brightness = &OEM_sys_set_leds_flash_brightness;
+
+ devman_plugin_interface_exynos3250.OEM_sys_get_backlight_elvss_control = &OEM_sys_get_backlight_elvss_control;
+ devman_plugin_interface_exynos3250.OEM_sys_set_backlight_elvss_control = &OEM_sys_set_backlight_elvss_control;
+
+ devman_plugin_interface_exynos3250.OEM_sys_set_key = &OEM_sys_set_key;
+
+ OEM_sys_display_info(disp_info);
+ OEM_sys_muic_node_path_info();
+
+ return &devman_plugin_interface_exynos3250;
+}
diff --git a/src/mount_qcom_nonhlos b/src/mount_qcom_nonhlos
new file mode 100644
index 0000000..9646a6f
--- /dev/null
+++ b/src/mount_qcom_nonhlos
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+echo "Mount modem amd apnhlos"
+#mount -t vfat -o ro,shortname=lower /dev/mmcblk0p1 /lib/firmware/apnhlos
+mount -t vfat -o ro,shortname=lower /dev/mmcblk0p2 /lib/firmware/modem