mirror of
https://github.com/Evolution-X-Devices/device_google_walleye
synced 2026-01-29 05:25:53 +00:00
BUG:31534758 Manually merge commit '61c9045e7d8f7bebc4de2936e2a0ab50c1849c8f' into cw-f-dev
* commit '61c9045e7d8f7bebc4de2936e2a0ab50c1849c8f': Add perf and power init + services Enfore vendor products to system/vendor Add liblight to enable panel backlight HAL Build libbt-vendor to avoid bluetooth crash Fix PRODUCT_RESTRICT_VENDOR_FILES
This commit is contained in:
@@ -15,5 +15,6 @@
|
||||
#
|
||||
|
||||
TARGET_BOOTLOADER_BOARD_NAME := muskie
|
||||
DEFAULT_LOW_PERSISTENCE_MODE_BRIGHTNESS := 0x00000056
|
||||
|
||||
include device/google/muskie/CommonBoardConfig.mk
|
||||
|
||||
@@ -43,6 +43,8 @@ TARGET_BOARD_KERNEL_HEADERS := device/google/muskie/kernel-headers
|
||||
|
||||
TARGET_NO_BOOTLOADER := true
|
||||
|
||||
TARGET_COPY_OUT_VENDOR := system/vendor
|
||||
|
||||
# Install odex files into the other system image
|
||||
BOARD_USES_SYSTEM_OTHER_ODEX := true
|
||||
|
||||
@@ -52,4 +54,8 @@ TARGET_USES_HWC2 := true
|
||||
|
||||
BOARD_SEPOLICY_DIRS += device/google/muskie/sepolicy
|
||||
|
||||
QCOM_BOARD_PLATFORMS += msmcobalt
|
||||
BOARD_HAVE_BLUETOOTH_QCOM := true
|
||||
BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := device/google/muskie/bluetooth
|
||||
|
||||
-include vendor/google_devices/muskie/BoardConfigVendor.mk
|
||||
|
||||
@@ -23,7 +23,7 @@ PRODUCT_DEVICE := muskie
|
||||
PRODUCT_BRAND := Android
|
||||
PRODUCT_MODEL := AOSP on muskie
|
||||
PRODUCT_MANUFACTURER := Google
|
||||
PRODUCT_RESTRICT_VENDOR_FILES := true
|
||||
PRODUCT_RESTRICT_VENDOR_FILES := all
|
||||
|
||||
$(call inherit-product, device/google/muskie/utils.mk)
|
||||
$(call inherit-product, device/google/muskie/device.mk)
|
||||
|
||||
34
bluetooth/bdroid_buildcfg.h
Normal file
34
bluetooth/bdroid_buildcfg.h
Normal file
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2013, The Linux Foundation. All rights reserved.
|
||||
* Not a Contribution, Apache license notifications and license are retained
|
||||
* for attribution purposes only.
|
||||
*
|
||||
* Copyright (C) 2012 The Android Open Source Project
|
||||
*
|
||||
* 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 _BDROID_BUILDCFG_H
|
||||
#define _BDROID_BUILDCFG_H
|
||||
#define BTM_DEF_LOCAL_NAME "QCOM-BTD"
|
||||
// Disables read remote device feature
|
||||
#define BTA_SKIP_BLE_READ_REMOTE_FEAT FALSE
|
||||
#define MAX_ACL_CONNECTIONS 7
|
||||
#define MAX_L2CAP_CHANNELS 16
|
||||
#define BLE_VND_INCLUDED TRUE
|
||||
// skips conn update at conn completion
|
||||
#define BTA_BLE_SKIP_CONN_UPD FALSE
|
||||
#define BLE_PERIPHERAL_ADV_NAME FALSE
|
||||
#define BT_CLEAN_TURN_ON_DISABLED 1
|
||||
#endif
|
||||
@@ -45,9 +45,18 @@ BOARD_PERSISTIMAGE_FILE_SYSTEM_TYPE := ext4
|
||||
MSM_VIDC_TARGET_LIST := msmcobalt # Get the color format from kernel headers
|
||||
MASTER_SIDE_CP_TARGET_LIST := msmcobalt # ION specific settings
|
||||
|
||||
PRODUCT_COPY_FILES += \
|
||||
frameworks/native/data/etc/android.hardware.bluetooth.xml:system/etc/permissions/android.hardware.bluetooth.xml \
|
||||
frameworks/native/data/etc/android.hardware.bluetooth_le.xml:system/etc/permissions/android.hardware.bluetooth_le.xml \
|
||||
|
||||
PRODUCT_COPY_FILES += \
|
||||
$(LOCAL_PATH)/init.power.sh:system/bin/init.power.sh \
|
||||
|
||||
PRODUCT_PACKAGES += \
|
||||
hwcomposer.msmcobalt \
|
||||
gralloc.msmcobalt \
|
||||
libbt-vendor \
|
||||
lights.$(PRODUCT_HARDWARE) \
|
||||
|
||||
# setup dalvik vm configs
|
||||
$(call inherit-product, frameworks/native/build/phone-xhdpi-2048-dalvik-heap.mk)
|
||||
|
||||
@@ -49,3 +49,39 @@ on fs
|
||||
|
||||
wait /dev/block/bootdevice/by-name/modem
|
||||
mount vfat /dev/block/bootdevice/by-name/modem /firmware ro shortname=lower,uid=1000,gid=1000,dmask=227,fmask=337
|
||||
|
||||
on post-fs
|
||||
# set RLIMIT_MEMLOCK to 64MB
|
||||
setrlimit 8 67108864 67108864
|
||||
|
||||
# Since bootloader does not have a UI turn screen ON
|
||||
write /sys/class/leds/lcd-backlight/brightness 255
|
||||
|
||||
# Enable audio and video device for bootanim
|
||||
write /sys/kernel/boot_adsp/boot 1
|
||||
write /sys/kernel/boot_slpi/boot 1
|
||||
chmod 0664 /sys/devices/virtual/graphics/fb0/msm_cmd_autorefresh_en
|
||||
chown system graphics /sys/devices/virtual/graphics/fb0/msm_cmd_autorefresh_en
|
||||
|
||||
on post-fs-data
|
||||
# Create perfd related dirs
|
||||
mkdir /data/system/perfd 0770 root system
|
||||
chmod 2770 /data/system/perfd
|
||||
|
||||
on early-boot
|
||||
exec - root root system -- /system/bin/init.power.sh
|
||||
|
||||
service perfd /system/vendor/bin/perfd
|
||||
class main
|
||||
user root
|
||||
group root readproc
|
||||
socket perfd seqpacket 0666 root system
|
||||
|
||||
service thermal-engine /vendor/bin/thermal-engine
|
||||
class main
|
||||
user root
|
||||
group root system
|
||||
socket thermal-send-client stream 0666 system system
|
||||
socket thermal-recv-client stream 0660 system system
|
||||
socket thermal-recv-passive-client stream 0666 system system
|
||||
|
||||
|
||||
100
init.power.sh
Normal file
100
init.power.sh
Normal file
@@ -0,0 +1,100 @@
|
||||
#!/system/bin/sh
|
||||
|
||||
################################################################################
|
||||
# helper functions to allow Android init like script
|
||||
|
||||
function write() {
|
||||
echo -n $2 > $1
|
||||
}
|
||||
|
||||
function copy() {
|
||||
cat $1 > $2
|
||||
}
|
||||
|
||||
################################################################################
|
||||
|
||||
soc_revision=`cat /sys/devices/soc0/revision`
|
||||
if [ "$soc_revision" == "1.0" ]; then
|
||||
# Disable retention low power modes
|
||||
write /sys/module/lpm_levels/system/pwr/cpu0/ret/idle_enabled N
|
||||
write /sys/module/lpm_levels/system/pwr/cpu1/ret/idle_enabled N
|
||||
write /sys/module/lpm_levels/system/pwr/cpu2/ret/idle_enabled N
|
||||
write /sys/module/lpm_levels/system/pwr/cpu3/ret/idle_enabled N
|
||||
write /sys/module/lpm_levels/system/perf/cpu4/ret/idle_enabled N
|
||||
write /sys/module/lpm_levels/system/perf/cpu5/ret/idle_enabled N
|
||||
write /sys/module/lpm_levels/system/perf/cpu6/ret/idle_enabled N
|
||||
write /sys/module/lpm_levels/system/perf/cpu7/ret/idle_enabled N
|
||||
# Enable all LPMs by default
|
||||
write /sys/module/lpm_levels/parameters/sleep_disabled N
|
||||
fi
|
||||
|
||||
# disable thermal hotplug to switch governor
|
||||
write /sys/module/msm_thermal/core_control/enabled 0
|
||||
|
||||
# bring back main cores CPU 0,4
|
||||
write /sys/devices/system/cpu/cpu0/online 1
|
||||
write /sys/devices/system/cpu/cpu4/online 1
|
||||
|
||||
# Setting b.L scheduler parameters
|
||||
write /proc/sys/kernel/sched_migration_fixup 1
|
||||
write /proc/sys/kernel/sched_upmigrate 99
|
||||
write /proc/sys/kernel/sched_downmigrate 85
|
||||
write /proc/sys/kernel/sched_freq_inc_notify 400000
|
||||
write /proc/sys/kernel/sched_freq_dec_notify 400000
|
||||
write /proc/sys/kernel/sched_spill_nr_run 5
|
||||
write /proc/sys/kernel/sched_restrict_cluster_spill 1
|
||||
|
||||
# configure governor settings for little cluster
|
||||
write /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor "interactive"
|
||||
write /sys/devices/system/cpu/cpu0/cpufreq/interactive/use_sched_load 1
|
||||
write /sys/devices/system/cpu/cpu0/cpufreq/interactive/use_migration_notif 1
|
||||
write /sys/devices/system/cpu/cpu0/cpufreq/interactive/above_hispeed_delay 19000
|
||||
write /sys/devices/system/cpu/cpu0/cpufreq/interactive/go_hispeed_load 90
|
||||
write /sys/devices/system/cpu/cpu0/cpufreq/interactive/timer_rate 20000
|
||||
write /sys/devices/system/cpu/cpu0/cpufreq/interactive/hispeed_freq 1478400
|
||||
write /sys/devices/system/cpu/cpu0/cpufreq/interactive/io_is_busy 1
|
||||
write /sys/devices/system/cpu/cpu0/cpufreq/interactive/target_loads "83 1728000:90 1804800:95"
|
||||
write /sys/devices/system/cpu/cpu0/cpufreq/interactive/min_sample_time 19000
|
||||
write /sys/devices/system/cpu/cpu0/cpufreq/interactive/max_freq_hysteresis 79000
|
||||
write /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq 300000
|
||||
write /sys/devices/system/cpu/cpu0/cpufreq/interactive/ignore_hispeed_on_notif 1
|
||||
|
||||
# configure governor settings for big cluster
|
||||
write /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor "interactive"
|
||||
write /sys/devices/system/cpu/cpu4/cpufreq/interactive/use_sched_load 1
|
||||
write /sys/devices/system/cpu/cpu4/cpufreq/interactive/use_migration_notif 1
|
||||
write /sys/devices/system/cpu/cpu4/cpufreq/interactive/above_hispeed_delay 19000
|
||||
write /sys/devices/system/cpu/cpu4/cpufreq/interactive/go_hispeed_load 90
|
||||
write /sys/devices/system/cpu/cpu4/cpufreq/interactive/timer_rate 20000
|
||||
write /sys/devices/system/cpu/cpu4/cpufreq/interactive/hispeed_freq 1536000
|
||||
write /sys/devices/system/cpu/cpu4/cpufreq/interactive/io_is_busy 1
|
||||
write /sys/devices/system/cpu/cpu4/cpufreq/interactive/target_loads "83 1939200:90 2016000:95"
|
||||
write /sys/devices/system/cpu/cpu4/cpufreq/interactive/min_sample_time 19000
|
||||
write /sys/devices/system/cpu/cpu4/cpufreq/interactive/max_freq_hysteresis 79000
|
||||
write /sys/devices/system/cpu/cpu4/cpufreq/scaling_min_freq 300000
|
||||
write /sys/devices/system/cpu/cpu4/cpufreq/interactive/ignore_hispeed_on_notif 1
|
||||
|
||||
# re-enable thermal hotplug
|
||||
write /sys/module/msm_thermal/core_control/enabled 1
|
||||
|
||||
# Enable bus-dcvs
|
||||
for cpubw in /sys/class/devfreq/*qcom,cpubw*
|
||||
do
|
||||
write $cpubw/governor "bw_hwmon"
|
||||
write $cpubw/polling_interval 50
|
||||
write $cpubw/min_freq 1525
|
||||
write $cpubw/bw_hwmon/mbps_zones "3143 5859 11863 13763"
|
||||
write $cpubw/bw_hwmon/sample_ms 4
|
||||
write $cpubw/bw_hwmon/io_percent 34
|
||||
write $cpubw/bw_hwmon/hist_memory 20
|
||||
write $cpubw/bw_hwmon/hyst_length 10
|
||||
write $cpubw/bw_hwmon/low_power_ceil_mbps 0
|
||||
write $cpubw/bw_hwmon/low_power_io_percent 34
|
||||
write $cpubw/bw_hwmon/low_power_delay 20
|
||||
write $cpubw/bw_hwmon/guard_band_mbps 0
|
||||
write $cpubw/bw_hwmon/up_scale 250
|
||||
write $cpubw/bw_hwmon/idle_mbps 1600
|
||||
done
|
||||
|
||||
write /sys/class/devfreq/soc:qcom,mincpubw/governor "cpufreq"
|
||||
|
||||
136
kernel-headers/asm-generic/ioctls.h
Normal file
136
kernel-headers/asm-generic/ioctls.h
Normal file
@@ -0,0 +1,136 @@
|
||||
/****************************************************************************
|
||||
****************************************************************************
|
||||
***
|
||||
*** This header was automatically generated from a Linux kernel header
|
||||
*** of the same name, to make information necessary for userspace to
|
||||
*** call into the kernel available to libc. It contains only constants,
|
||||
*** structures, and macros generated from the original header, and thus,
|
||||
*** contains no copyrightable information.
|
||||
***
|
||||
*** To edit the content of this header, modify the corresponding
|
||||
*** source file (e.g. under external/kernel-headers/original/) then
|
||||
*** run bionic/libc/kernel/tools/update_all.py
|
||||
***
|
||||
*** Any manual change here will be lost the next time this script will
|
||||
*** be run. You've been warned!
|
||||
***
|
||||
****************************************************************************
|
||||
****************************************************************************/
|
||||
#ifndef __ASM_GENERIC_IOCTLS_H
|
||||
#define __ASM_GENERIC_IOCTLS_H
|
||||
#include <linux/ioctl.h>
|
||||
#define TCGETS 0x5401
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TCSETS 0x5402
|
||||
#define TCSETSW 0x5403
|
||||
#define TCSETSF 0x5404
|
||||
#define TCGETA 0x5405
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TCSETA 0x5406
|
||||
#define TCSETAW 0x5407
|
||||
#define TCSETAF 0x5408
|
||||
#define TCSBRK 0x5409
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TCXONC 0x540A
|
||||
#define TCFLSH 0x540B
|
||||
#define TIOCEXCL 0x540C
|
||||
#define TIOCNXCL 0x540D
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TIOCSCTTY 0x540E
|
||||
#define TIOCGPGRP 0x540F
|
||||
#define TIOCSPGRP 0x5410
|
||||
#define TIOCOUTQ 0x5411
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TIOCSTI 0x5412
|
||||
#define TIOCGWINSZ 0x5413
|
||||
#define TIOCSWINSZ 0x5414
|
||||
#define TIOCMGET 0x5415
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TIOCMBIS 0x5416
|
||||
#define TIOCMBIC 0x5417
|
||||
#define TIOCMSET 0x5418
|
||||
#define TIOCGSOFTCAR 0x5419
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TIOCSSOFTCAR 0x541A
|
||||
#define FIONREAD 0x541B
|
||||
#define TIOCINQ FIONREAD
|
||||
#define TIOCLINUX 0x541C
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TIOCCONS 0x541D
|
||||
#define TIOCGSERIAL 0x541E
|
||||
#define TIOCSSERIAL 0x541F
|
||||
#define TIOCPKT 0x5420
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define FIONBIO 0x5421
|
||||
#define TIOCNOTTY 0x5422
|
||||
#define TIOCSETD 0x5423
|
||||
#define TIOCGETD 0x5424
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TCSBRKP 0x5425
|
||||
#define TIOCSBRK 0x5427
|
||||
#define TIOCCBRK 0x5428
|
||||
#define TIOCGSID 0x5429
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TCGETS2 _IOR('T', 0x2A, struct termios2)
|
||||
#define TCSETS2 _IOW('T', 0x2B, struct termios2)
|
||||
#define TCSETSW2 _IOW('T', 0x2C, struct termios2)
|
||||
#define TCSETSF2 _IOW('T', 0x2D, struct termios2)
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TIOCGRS485 0x542E
|
||||
#ifndef TIOCSRS485
|
||||
#define TIOCSRS485 0x542F
|
||||
#endif
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TIOCGPTN _IOR('T', 0x30, unsigned int)
|
||||
#define TIOCSPTLCK _IOW('T', 0x31, int)
|
||||
#define TIOCGDEV _IOR('T', 0x32, unsigned int)
|
||||
#define TCGETX 0x5432
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TCSETX 0x5433
|
||||
#define TCSETXF 0x5434
|
||||
#define TCSETXW 0x5435
|
||||
#define TIOCSIG _IOW('T', 0x36, int)
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TIOCVHANGUP 0x5437
|
||||
#define TIOCGPKT _IOR('T', 0x38, int)
|
||||
#define TIOCGPTLCK _IOR('T', 0x39, int)
|
||||
#define TIOCGEXCL _IOR('T', 0x40, int)
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TIOCPMGET 0x5441
|
||||
#define TIOCPMPUT 0x5442
|
||||
#define TIOCPMACT 0x5443
|
||||
#define FIONCLEX 0x5450
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define FIOCLEX 0x5451
|
||||
#define FIOASYNC 0x5452
|
||||
#define TIOCSERCONFIG 0x5453
|
||||
#define TIOCSERGWILD 0x5454
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TIOCSERSWILD 0x5455
|
||||
#define TIOCGLCKTRMIOS 0x5456
|
||||
#define TIOCSLCKTRMIOS 0x5457
|
||||
#define TIOCSERGSTRUCT 0x5458
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TIOCSERGETLSR 0x5459
|
||||
#define TIOCSERGETMULTI 0x545A
|
||||
#define TIOCSERSETMULTI 0x545B
|
||||
#define TIOCMIWAIT 0x545C
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TIOCGICOUNT 0x545D
|
||||
#ifndef FIOQSIZE
|
||||
#define FIOQSIZE 0x5460
|
||||
#endif
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TIOCPKT_DATA 0
|
||||
#define TIOCPKT_FLUSHREAD 1
|
||||
#define TIOCPKT_FLUSHWRITE 2
|
||||
#define TIOCPKT_STOP 4
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TIOCPKT_START 8
|
||||
#define TIOCPKT_NOSTOP 16
|
||||
#define TIOCPKT_DOSTOP 32
|
||||
#define TIOCPKT_IOCTL 64
|
||||
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
|
||||
#define TIOCSER_TEMT 0x01
|
||||
#endif
|
||||
|
||||
29
liblight/Android.mk
Normal file
29
liblight/Android.mk
Normal file
@@ -0,0 +1,29 @@
|
||||
# Copyright (C) 2016 The Android Open Source Project
|
||||
#
|
||||
# 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.
|
||||
|
||||
LOCAL_PATH:= $(call my-dir)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_SRC_FILES := lights.c
|
||||
LOCAL_MODULE_RELATIVE_PATH := hw
|
||||
LOCAL_SHARED_LIBRARIES := libc libcutils liblog
|
||||
LOCAL_CFLAGS := $(common_flags) \
|
||||
-DLOG_TAG=\"qdlights\" \
|
||||
-DDEFAULT_LOW_PERSISTENCE_MODE_BRIGHTNESS=$(DEFAULT_LOW_PERSISTENCE_MODE_BRIGHTNESS)
|
||||
LOCAL_CLANG := true
|
||||
LOCAL_MODULE := lights.$(TARGET_DEVICE)
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
190
liblight/NOTICE
Normal file
190
liblight/NOTICE
Normal file
@@ -0,0 +1,190 @@
|
||||
|
||||
Copyright (c) 2008, The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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
|
||||
|
||||
403
liblight/lights.c
Normal file
403
liblight/lights.c
Normal file
@@ -0,0 +1,403 @@
|
||||
/*
|
||||
* Copyright (C) 2008 The Android Open Source Project
|
||||
* Copyright (C) 2014 The Linux Foundation. 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 <cutils/log.h>
|
||||
#include <cutils/properties.h>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#include <linux/msm_mdp.h>
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <hardware/lights.h>
|
||||
|
||||
/*
|
||||
* Change this to 1 to support battery notifications via BatteryService
|
||||
*/
|
||||
#define LIGHTS_SUPPORT_BATTERY 0
|
||||
#define CG_COLOR_ID_PROPERTY "ro.boot.hardware.color"
|
||||
|
||||
static pthread_once_t g_init = PTHREAD_ONCE_INIT;
|
||||
static pthread_mutex_t g_lock = PTHREAD_MUTEX_INITIALIZER;
|
||||
static struct light_state_t g_notification;
|
||||
static struct light_state_t g_battery;
|
||||
static int g_last_backlight_mode = BRIGHTNESS_MODE_USER;
|
||||
static int g_attention = 0;
|
||||
static int rgb_brightness_ratio = 255;
|
||||
|
||||
char const*const RED_LED_FILE
|
||||
= "/sys/class/leds/red/brightness";
|
||||
|
||||
char const*const GREEN_LED_FILE
|
||||
= "/sys/class/leds/green/brightness";
|
||||
|
||||
char const*const BLUE_LED_FILE
|
||||
= "/sys/class/leds/blue/brightness";
|
||||
|
||||
char const*const LCD_FILE
|
||||
= "/sys/class/leds/lcd-backlight/brightness";
|
||||
|
||||
char const*const PERSISTENCE_FILE
|
||||
= "/sys/class/leds/lcd-backlight/low_persistence";
|
||||
|
||||
char const*const BUTTON_FILE
|
||||
= "/sys/class/leds/button-backlight/brightness";
|
||||
|
||||
char const*const RED_BLINK_FILE
|
||||
= "/sys/class/leds/red/blink";
|
||||
|
||||
char const*const GREEN_BLINK_FILE
|
||||
= "/sys/class/leds/green/blink";
|
||||
|
||||
char const*const BLUE_BLINK_FILE
|
||||
= "/sys/class/leds/blue/blink";
|
||||
|
||||
char const*const RED_ON_OFF_MS_FILE
|
||||
= "/sys/class/leds/red/on_off_ms";
|
||||
|
||||
char const*const GREEN_ON_OFF_MS_FILE
|
||||
= "/sys/class/leds/green/on_off_ms";
|
||||
|
||||
char const*const BLUE_ON_OFF_MS_FILE
|
||||
= "/sys/class/leds/blue/on_off_ms";
|
||||
|
||||
char const*const RED_RGB_START_FILE
|
||||
= "/sys/class/leds/red/rgb_start";
|
||||
|
||||
char const*const GREEN_RGB_START_FILE
|
||||
= "/sys/class/leds/green/rgb_start";
|
||||
|
||||
char const*const BLUE_RGB_START_FILE
|
||||
= "/sys/class/leds/blue/rgb_start";
|
||||
|
||||
/**
|
||||
* device methods
|
||||
*/
|
||||
|
||||
void init_globals(void)
|
||||
{
|
||||
char color_id_prop[PROPERTY_VALUE_MAX] = {""};
|
||||
|
||||
// init the mutex
|
||||
pthread_mutex_init(&g_lock, NULL);
|
||||
|
||||
// check CG color
|
||||
property_get(CG_COLOR_ID_PROPERTY, color_id_prop, "DEF00");
|
||||
if (strcmp(color_id_prop, "GRA00") == 0) {
|
||||
rgb_brightness_ratio = 25;
|
||||
} else if (strcmp(color_id_prop, "SLV00") == 0) {
|
||||
rgb_brightness_ratio = 15;
|
||||
} else if (strcmp(color_id_prop, "BLU00") == 0) {
|
||||
rgb_brightness_ratio = 15;
|
||||
} else {
|
||||
rgb_brightness_ratio = 20;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
write_int(char const* path, int value)
|
||||
{
|
||||
int fd;
|
||||
static int already_warned = 0;
|
||||
|
||||
fd = open(path, O_WRONLY);
|
||||
if (fd >= 0) {
|
||||
char buffer[20];
|
||||
size_t bytes = snprintf(buffer, sizeof(buffer), "%d\n", value);
|
||||
if(bytes >= sizeof(buffer)) return -EINVAL;
|
||||
ssize_t amt = write(fd, buffer, bytes);
|
||||
close(fd);
|
||||
return amt == -1 ? -errno : 0;
|
||||
} else {
|
||||
if (already_warned == 0) {
|
||||
ALOGE("write_int failed to open %s\n", path);
|
||||
already_warned = 1;
|
||||
}
|
||||
return -errno;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
write_double_int(char const* path, int value1, int value2)
|
||||
{
|
||||
int fd;
|
||||
static int already_warned = 0;
|
||||
|
||||
fd = open(path, O_WRONLY);
|
||||
if (fd >= 0) {
|
||||
char buffer[20];
|
||||
size_t bytes = snprintf(buffer, sizeof(buffer), "%d %d\n", value1, value2);
|
||||
if(bytes >= sizeof(buffer)) return -EINVAL;
|
||||
ssize_t amt = write(fd, buffer, bytes);
|
||||
close(fd);
|
||||
return amt == -1 ? -errno : 0;
|
||||
} else {
|
||||
if (already_warned == 0) {
|
||||
ALOGE("write_int failed to open %s\n", path);
|
||||
already_warned = 1;
|
||||
}
|
||||
return -errno;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
is_lit(struct light_state_t const* state)
|
||||
{
|
||||
return state->color & 0x00ffffff;
|
||||
}
|
||||
|
||||
static int
|
||||
rgb_to_brightness(struct light_state_t const* state)
|
||||
{
|
||||
int color = state->color & 0x00ffffff;
|
||||
return ((77*((color>>16)&0x00ff))
|
||||
+ (150*((color>>8)&0x00ff)) + (29*(color&0x00ff))) >> 8;
|
||||
}
|
||||
|
||||
static int
|
||||
set_light_backlight(struct light_device_t* dev,
|
||||
struct light_state_t const* state)
|
||||
{
|
||||
int err = 0;
|
||||
int brightness = rgb_to_brightness(state);
|
||||
unsigned int lpEnabled = state->brightnessMode == BRIGHTNESS_MODE_LOW_PERSISTENCE;
|
||||
if(!dev) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
pthread_mutex_lock(&g_lock);
|
||||
|
||||
// If we're not in lp mode and it has been enabled or if we are in lp mode
|
||||
// and it has been disabled send an ioctl to the display with the update
|
||||
if ((g_last_backlight_mode != state->brightnessMode && lpEnabled) ||
|
||||
(!lpEnabled && g_last_backlight_mode == BRIGHTNESS_MODE_LOW_PERSISTENCE)) {
|
||||
if ((err = write_int(PERSISTENCE_FILE, lpEnabled)) != 0) {
|
||||
ALOGE("%s: Failed to write to %s: %s\n", __FUNCTION__, PERSISTENCE_FILE,
|
||||
strerror(errno));
|
||||
}
|
||||
if (lpEnabled != 0) {
|
||||
// This is defined in BoardConfig.mk.
|
||||
brightness = DEFAULT_LOW_PERSISTENCE_MODE_BRIGHTNESS;
|
||||
}
|
||||
}
|
||||
|
||||
g_last_backlight_mode = state->brightnessMode;
|
||||
|
||||
if (!err) {
|
||||
err = write_int(LCD_FILE, brightness);
|
||||
}
|
||||
|
||||
pthread_mutex_unlock(&g_lock);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int
|
||||
set_speaker_light_locked(struct light_device_t* dev,
|
||||
struct light_state_t const* state)
|
||||
{
|
||||
int red, green, blue;
|
||||
int blink;
|
||||
int onMS, offMS;
|
||||
unsigned int colorRGB;
|
||||
|
||||
if(!dev) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
switch (state->flashMode) {
|
||||
case LIGHT_FLASH_TIMED:
|
||||
onMS = state->flashOnMS;
|
||||
offMS = state->flashOffMS;
|
||||
break;
|
||||
case LIGHT_FLASH_NONE:
|
||||
default:
|
||||
onMS = 0;
|
||||
offMS = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
colorRGB = state->color;
|
||||
|
||||
#if 0
|
||||
ALOGD("set_speaker_light_locked mode %d, colorRGB=%08X, onMS=%d, offMS=%d\n",
|
||||
state->flashMode, colorRGB, onMS, offMS);
|
||||
#endif
|
||||
|
||||
red = ((colorRGB >> 16) & 0xFF) * rgb_brightness_ratio / 255;
|
||||
green = ((colorRGB >> 8) & 0xFF) * rgb_brightness_ratio / 255;
|
||||
blue = (colorRGB & 0xFF) * rgb_brightness_ratio / 255;
|
||||
|
||||
write_double_int(RED_ON_OFF_MS_FILE, onMS, offMS);
|
||||
write_int(RED_LED_FILE, red);
|
||||
write_double_int(GREEN_ON_OFF_MS_FILE, onMS, offMS);
|
||||
write_int(GREEN_LED_FILE, green);
|
||||
write_double_int(BLUE_ON_OFF_MS_FILE, onMS, offMS);
|
||||
write_int(BLUE_LED_FILE, blue);
|
||||
|
||||
if(!write_int(RED_RGB_START_FILE, 1))
|
||||
if(!write_int(GREEN_RGB_START_FILE, 1))
|
||||
if(!write_int(BLUE_RGB_START_FILE, 1))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
handle_speaker_battery_locked(struct light_device_t* dev)
|
||||
{
|
||||
if (is_lit(&g_battery)) {
|
||||
set_speaker_light_locked(dev, &g_battery);
|
||||
} else {
|
||||
set_speaker_light_locked(dev, &g_notification);
|
||||
}
|
||||
}
|
||||
|
||||
#if LIGHTS_SUPPORT_BATTERY
|
||||
static int
|
||||
set_light_battery(struct light_device_t* dev,
|
||||
struct light_state_t const* state)
|
||||
{
|
||||
pthread_mutex_lock(&g_lock);
|
||||
g_battery = *state;
|
||||
handle_speaker_battery_locked(dev);
|
||||
pthread_mutex_unlock(&g_lock);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int
|
||||
set_light_notifications(struct light_device_t* dev,
|
||||
struct light_state_t const* state)
|
||||
{
|
||||
pthread_mutex_lock(&g_lock);
|
||||
g_notification = *state;
|
||||
handle_speaker_battery_locked(dev);
|
||||
pthread_mutex_unlock(&g_lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
set_light_attention(struct light_device_t* dev,
|
||||
struct light_state_t const* state)
|
||||
{
|
||||
pthread_mutex_lock(&g_lock);
|
||||
if (state->flashMode == LIGHT_FLASH_HARDWARE) {
|
||||
g_attention = state->flashOnMS;
|
||||
} else if (state->flashMode == LIGHT_FLASH_NONE) {
|
||||
g_attention = 0;
|
||||
}
|
||||
handle_speaker_battery_locked(dev);
|
||||
pthread_mutex_unlock(&g_lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
set_light_buttons(struct light_device_t* dev,
|
||||
struct light_state_t const* state)
|
||||
{
|
||||
int err = 0;
|
||||
if(!dev) {
|
||||
return -1;
|
||||
}
|
||||
pthread_mutex_lock(&g_lock);
|
||||
err = write_int(BUTTON_FILE, state->color & 0xFF);
|
||||
pthread_mutex_unlock(&g_lock);
|
||||
return err;
|
||||
}
|
||||
|
||||
/** Close the lights device */
|
||||
static int
|
||||
close_lights(struct light_device_t *dev)
|
||||
{
|
||||
if (dev) {
|
||||
free(dev);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
/**
|
||||
* module methods
|
||||
*/
|
||||
|
||||
/** Open a new instance of a lights device using name */
|
||||
static int open_lights(const struct hw_module_t* module, char const* name,
|
||||
struct hw_device_t** device)
|
||||
{
|
||||
int (*set_light)(struct light_device_t* dev,
|
||||
struct light_state_t const* state);
|
||||
|
||||
if (0 == strcmp(LIGHT_ID_BACKLIGHT, name))
|
||||
set_light = set_light_backlight;
|
||||
#if LIGHTS_SUPPORT_BATTERY
|
||||
else if (0 == strcmp(LIGHT_ID_BATTERY, name))
|
||||
set_light = set_light_battery;
|
||||
#endif
|
||||
else if (0 == strcmp(LIGHT_ID_NOTIFICATIONS, name))
|
||||
set_light = set_light_notifications;
|
||||
else if (0 == strcmp(LIGHT_ID_BUTTONS, name))
|
||||
set_light = set_light_buttons;
|
||||
else if (0 == strcmp(LIGHT_ID_ATTENTION, name))
|
||||
set_light = set_light_attention;
|
||||
else
|
||||
return -EINVAL;
|
||||
|
||||
pthread_once(&g_init, init_globals);
|
||||
|
||||
struct light_device_t *dev = malloc(sizeof(struct light_device_t));
|
||||
|
||||
if(!dev)
|
||||
return -ENOMEM;
|
||||
|
||||
memset(dev, 0, sizeof(*dev));
|
||||
|
||||
dev->common.tag = HARDWARE_DEVICE_TAG;
|
||||
dev->common.version = LIGHTS_DEVICE_API_VERSION_2_0;
|
||||
dev->common.module = (struct hw_module_t*)module;
|
||||
dev->common.close = (int (*)(struct hw_device_t*))close_lights;
|
||||
dev->set_light = set_light;
|
||||
|
||||
*device = (struct hw_device_t*)dev;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct hw_module_methods_t lights_module_methods = {
|
||||
.open = open_lights,
|
||||
};
|
||||
|
||||
/*
|
||||
* The lights Module
|
||||
*/
|
||||
struct hw_module_t HAL_MODULE_INFO_SYM = {
|
||||
.tag = HARDWARE_MODULE_TAG,
|
||||
.version_major = 1,
|
||||
.version_minor = 0,
|
||||
.id = LIGHTS_HARDWARE_MODULE_ID,
|
||||
.name = "lights Module",
|
||||
.author = "Google, Inc.",
|
||||
.methods = &lights_module_methods,
|
||||
};
|
||||
120
original-kernel-headers/asm-generic/ioctls.h
Normal file
120
original-kernel-headers/asm-generic/ioctls.h
Normal file
@@ -0,0 +1,120 @@
|
||||
#ifndef __ASM_GENERIC_IOCTLS_H
|
||||
#define __ASM_GENERIC_IOCTLS_H
|
||||
|
||||
#include <linux/ioctl.h>
|
||||
|
||||
/*
|
||||
* These are the most common definitions for tty ioctl numbers.
|
||||
* Most of them do not use the recommended _IOC(), but there is
|
||||
* probably some source code out there hardcoding the number,
|
||||
* so we might as well use them for all new platforms.
|
||||
*
|
||||
* The architectures that use different values here typically
|
||||
* try to be compatible with some Unix variants for the same
|
||||
* architecture.
|
||||
*/
|
||||
|
||||
/* 0x54 is just a magic number to make these relatively unique ('T') */
|
||||
|
||||
#define TCGETS 0x5401
|
||||
#define TCSETS 0x5402
|
||||
#define TCSETSW 0x5403
|
||||
#define TCSETSF 0x5404
|
||||
#define TCGETA 0x5405
|
||||
#define TCSETA 0x5406
|
||||
#define TCSETAW 0x5407
|
||||
#define TCSETAF 0x5408
|
||||
#define TCSBRK 0x5409
|
||||
#define TCXONC 0x540A
|
||||
#define TCFLSH 0x540B
|
||||
#define TIOCEXCL 0x540C
|
||||
#define TIOCNXCL 0x540D
|
||||
#define TIOCSCTTY 0x540E
|
||||
#define TIOCGPGRP 0x540F
|
||||
#define TIOCSPGRP 0x5410
|
||||
#define TIOCOUTQ 0x5411
|
||||
#define TIOCSTI 0x5412
|
||||
#define TIOCGWINSZ 0x5413
|
||||
#define TIOCSWINSZ 0x5414
|
||||
#define TIOCMGET 0x5415
|
||||
#define TIOCMBIS 0x5416
|
||||
#define TIOCMBIC 0x5417
|
||||
#define TIOCMSET 0x5418
|
||||
#define TIOCGSOFTCAR 0x5419
|
||||
#define TIOCSSOFTCAR 0x541A
|
||||
#define FIONREAD 0x541B
|
||||
#define TIOCINQ FIONREAD
|
||||
#define TIOCLINUX 0x541C
|
||||
#define TIOCCONS 0x541D
|
||||
#define TIOCGSERIAL 0x541E
|
||||
#define TIOCSSERIAL 0x541F
|
||||
#define TIOCPKT 0x5420
|
||||
#define FIONBIO 0x5421
|
||||
#define TIOCNOTTY 0x5422
|
||||
#define TIOCSETD 0x5423
|
||||
#define TIOCGETD 0x5424
|
||||
#define TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */
|
||||
#define TIOCSBRK 0x5427 /* BSD compatibility */
|
||||
#define TIOCCBRK 0x5428 /* BSD compatibility */
|
||||
#define TIOCGSID 0x5429 /* Return the session ID of FD */
|
||||
#define TCGETS2 _IOR('T', 0x2A, struct termios2)
|
||||
#define TCSETS2 _IOW('T', 0x2B, struct termios2)
|
||||
#define TCSETSW2 _IOW('T', 0x2C, struct termios2)
|
||||
#define TCSETSF2 _IOW('T', 0x2D, struct termios2)
|
||||
#define TIOCGRS485 0x542E
|
||||
#ifndef TIOCSRS485
|
||||
#define TIOCSRS485 0x542F
|
||||
#endif
|
||||
#define TIOCGPTN _IOR('T', 0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
|
||||
#define TIOCSPTLCK _IOW('T', 0x31, int) /* Lock/unlock Pty */
|
||||
#define TIOCGDEV _IOR('T', 0x32, unsigned int) /* Get primary device node of /dev/console */
|
||||
#define TCGETX 0x5432 /* SYS5 TCGETX compatibility */
|
||||
#define TCSETX 0x5433
|
||||
#define TCSETXF 0x5434
|
||||
#define TCSETXW 0x5435
|
||||
#define TIOCSIG _IOW('T', 0x36, int) /* pty: generate signal */
|
||||
#define TIOCVHANGUP 0x5437
|
||||
#define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */
|
||||
#define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */
|
||||
#define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */
|
||||
#define TIOCPMGET 0x5441 /* PM get */
|
||||
#define TIOCPMPUT 0x5442 /* PM put */
|
||||
#define TIOCPMACT 0x5443 /* PM is active */
|
||||
|
||||
#define FIONCLEX 0x5450
|
||||
#define FIOCLEX 0x5451
|
||||
#define FIOASYNC 0x5452
|
||||
#define TIOCSERCONFIG 0x5453
|
||||
#define TIOCSERGWILD 0x5454
|
||||
#define TIOCSERSWILD 0x5455
|
||||
#define TIOCGLCKTRMIOS 0x5456
|
||||
#define TIOCSLCKTRMIOS 0x5457
|
||||
#define TIOCSERGSTRUCT 0x5458 /* For debugging only */
|
||||
#define TIOCSERGETLSR 0x5459 /* Get line status register */
|
||||
#define TIOCSERGETMULTI 0x545A /* Get multiport config */
|
||||
#define TIOCSERSETMULTI 0x545B /* Set multiport config */
|
||||
|
||||
#define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */
|
||||
#define TIOCGICOUNT 0x545D /* read serial port __inline__ interrupt counts */
|
||||
|
||||
/*
|
||||
* Some arches already define FIOQSIZE due to a historical
|
||||
* conflict with a Hayes modem-specific ioctl value.
|
||||
*/
|
||||
#ifndef FIOQSIZE
|
||||
# define FIOQSIZE 0x5460
|
||||
#endif
|
||||
|
||||
/* Used for packet mode */
|
||||
#define TIOCPKT_DATA 0
|
||||
#define TIOCPKT_FLUSHREAD 1
|
||||
#define TIOCPKT_FLUSHWRITE 2
|
||||
#define TIOCPKT_STOP 4
|
||||
#define TIOCPKT_START 8
|
||||
#define TIOCPKT_NOSTOP 16
|
||||
#define TIOCPKT_DOSTOP 32
|
||||
#define TIOCPKT_IOCTL 64
|
||||
|
||||
#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */
|
||||
|
||||
#endif /* __ASM_GENERIC_IOCTLS_H */
|
||||
7
sepolicy/file_contexts
Normal file
7
sepolicy/file_contexts
Normal file
@@ -0,0 +1,7 @@
|
||||
|
||||
# files in /system
|
||||
/system/bin/init\.power\.sh u:object_r:init_power_exec:s0
|
||||
|
||||
# files in /system/vendor
|
||||
/system/vendor/bin/perfd u:object_r:perfd_exec:s0
|
||||
/system/vendor/bin/thermal-engine u:object_r:thermal-engine_exec:s0
|
||||
4
sepolicy/init_power.te
Normal file
4
sepolicy/init_power.te
Normal file
@@ -0,0 +1,4 @@
|
||||
type init_power, domain;
|
||||
type init_power_exec, exec_type, file_type;
|
||||
|
||||
init_daemon_domain(init_power)
|
||||
4
sepolicy/perfd.te
Normal file
4
sepolicy/perfd.te
Normal file
@@ -0,0 +1,4 @@
|
||||
type perfd, domain;
|
||||
type perfd_exec, exec_type, file_type;
|
||||
|
||||
init_daemon_domain(perfd)
|
||||
4
sepolicy/thermal-engine.te
Normal file
4
sepolicy/thermal-engine.te
Normal file
@@ -0,0 +1,4 @@
|
||||
type thermal-engine, domain;
|
||||
type thermal-engine_exec, exec_type, file_type;
|
||||
|
||||
init_daemon_domain(thermal-engine)
|
||||
Reference in New Issue
Block a user