diff options
author | jk7744.park <jk7744.park@samsung.com> | 2015-09-08 21:29:40 +0900 |
---|---|---|
committer | jk7744.park <jk7744.park@samsung.com> | 2015-09-08 21:29:40 +0900 |
commit | ac359615d389df132b9cf77207a478ead5b12efe (patch) | |
tree | 4ac508411390a37f1ed1045c0fc2567c9506265b | |
parent | f54ae0c1b5457b6d9b981a7f1f98f82b3cac72cd (diff) | |
download | device-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 |
tizen 2.3.1 releasetizen_2.3.1_releasesubmit/tizen_2.3.1/20150915.072209tizen_2.3.1
-rw-r--r-- | 61-tizen-video-device.rules | 10 | ||||
-rwxr-xr-x | CMakeLists.txt | 37 | ||||
-rw-r--r-- | LICENSE.Apache-2.0 | 204 | ||||
-rw-r--r-- | device-manager-plugin-exynos3250.manifest | 5 | ||||
-rw-r--r-- | dump/dump_time.sh | 14 | ||||
-rw-r--r-- | include/device_manager_io.h | 30 | ||||
-rwxr-xr-x | include/devman_define_node_path.h | 149 | ||||
-rwxr-xr-x | include/devman_plugin_intf.h | 270 | ||||
-rw-r--r-- | packaging/device-manager-plugin-exynos3250.spec | 54 | ||||
-rwxr-xr-x | src/device_manager_TRM.c | 202 | ||||
-rw-r--r-- | src/device_manager_TRM.h | 4 | ||||
-rw-r--r-- | src/device_manager_io.c | 198 | ||||
-rwxr-xr-x | src/device_manager_plugin_exynos3250.c | 2007 | ||||
-rw-r--r-- | src/mount_qcom_nonhlos | 5 |
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 |