Added initial repo files derived from fortuna device tree.
diff --git a/Android.mk b/Android.mk
new file mode 100644
index 0000000..68a9746
--- /dev/null
+++ b/Android.mk
@@ -0,0 +1,62 @@
+LOCAL_PATH := $(call my-dir)
+
+ifeq ($(TARGET_DEVICE),gprimeltecan)
+
+include $(call all-subdir-makefiles,$(LOCAL_PATH))
+include $(call all-makefiles-under,$(LOCAL_PATH))
+
+include $(CLEAR_VARS)
+
+# AiO /firmware
+FIRMWARE_IMAGES := \
+ cmnlib.b00 cmnlib.b01 cmnlib.b02 cmnlib.b03 cmnlib.mdt \
+ dmverity.b00 dmverity.b01 dmverity.b02 dmverity.b03 dmverity.mdt \
+ isdbtmm.b00 isdbtmm.b01 isdbtmm.b02 isdbtmm.b03 isdbtmm.mdt \
+ keymaste.b00 keymaste.b01 keymaste.b02 keymaste.b03 keymaste.mdt \
+ playread.b00 playread.b01 playread.b02 playread.b03 playread.mdt \
+ prov.b00 prov.b01 prov.b02 prov.b03 prov.mdt \
+ reactive.b00 reactive.b01 reactive.b02 reactive.b03 reactive.mdt \
+ sec_stor.b00 sec_stor.b01 sec_stor.b02 sec_stor.b03 sec_stor.mdt \
+ skm.b00 skm.b01 skm.b02 skm.b03 skm.mdt \
+ skmm_ta.b00 skmm_ta.b01 skmm_ta.b02 skmm_ta.b03 skmm_ta.mdt \
+ sshdcpap.b00 sshdcpap.b01 sshdcpap.b02 sshdcpap.b03 sshdcpap.mdt \
+ tbase.b00 tbase.b01 tbase.b02 tbase.b03 tbase.mdt \
+ tima_atn.b00 tima_atn.b01 tima_atn.b02 tima_atn.b03 tima_atn.mdt \
+ tima_key.b00 tima_key.b01 tima_key.b02 tima_key.b03 tima_key.mdt \
+ tima_lkm.b00 tima_lkm.b01 tima_lkm.b02 tima_lkm.b03 tima_lkm.mdt \
+ tima_pkm.b00 tima_pkm.b01 tima_pkm.b02 tima_pkm.b03 tima_pkm.mdt \
+ tz_ccm.b00 tz_ccm.b01 tz_ccm.b02 tz_ccm.b03 tz_ccm.mdt \
+ tz_otp.b00 tz_otp.b01 tz_otp.b02 tz_otp.b03 tz_otp.mdt \
+ venus.b00 venus.b01 venus.b02 venus.b03 venus.b04 venus.mdt \
+ wcnss.b00 wcnss.b01 wcnss.b02 wcnss.b04 wcnss.b06 wcnss.b09 wcnss.b10 wcnss.b11 wcnss.mdt \
+ widevine.b00 widevine.b01 widevine.b02 widevine.b03 widevine.mdt \
+
+FIRMWARE_SYMLINKS := $(addprefix $(TARGET_OUT_ETC)/firmware/,$(notdir $(FIRMWARE_IMAGES)))
+$(FIRMWARE_SYMLINKS): $(LOCAL_INSTALLED_MODULE)
+ @echo "Firmware link: $@"
+ @mkdir -p $(dir $@)
+ @rm -rf $@
+ $(hide) ln -sf /firmware/image/$(notdir $@) $@
+
+ALL_DEFAULT_INSTALLED_MODULES += $(FIRMWARE_SYMLINKS)
+
+# /firmware-modem
+FIRMWARE_MODEM_IMAGES := \
+ mba.mbn modem.b00 modem.b01 modem.b02 modem.b03 modem.b04 \
+ modem.b05 modem.b06 modem.b07 modem.b08 modem.b10 modem.b11 \
+ modem.b14 modem.b15 modem.b16 modem.b17 modem.b18 modem.b19 \
+ modem.b20 modem.b23 modem.b24 modem.b25 modem.b27 modem.b28 \
+ modem.mdt
+
+FIRMWARE_MODEM_SYMLINKS := $(addprefix $(TARGET_OUT_ETC)/firmware/,$(notdir $(FIRMWARE_MODEM_IMAGES)))
+$(FIRMWARE_MODEM_SYMLINKS): $(LOCAL_INSTALLED_MODULE)
+ @echo "Firmware Modem link: $@"
+ @mkdir -p $(dir $@)
+ @rm -rf $@
+ $(hide) ln -sf /firmware-modem/image/$(notdir $@) $@
+
+ALL_DEFAULT_INSTALLED_MODULES += $(FIRMWARE_MODEM_SYMLINKS)
+
+include $(CLEAR_VARS)
+
+endif
diff --git a/AndroidProducts.mk b/AndroidProducts.mk
new file mode 100644
index 0000000..720007b
--- /dev/null
+++ b/AndroidProducts.mk
@@ -0,0 +1,2 @@
+PRODUCT_MAKEFILES := \
+ $(LOCAL_DIR)/full_gprimeltecan.mk
diff --git a/BoardConfig.mk b/BoardConfig.mk
new file mode 100644
index 0000000..5707221
--- /dev/null
+++ b/BoardConfig.mk
@@ -0,0 +1,230 @@
+FORCE_32_BIT := true
+
+-include vendor/samsung/gprimeltecan/BoardConfigVendor.mk
+#-include vendor/qcom/msm8916/BoardConfig.mk
+
+LOCAL_PATH := device/samsung/gprimeltecan
+
+# Inherit from common
+-include device/samsung/qcom-common/BoardConfigCommon.mk
+
+TARGET_SPECIFIC_HEADER_PATH := $(LOCAL_PATH)/include
+
+# ANT+
+BOARD_ANT_WIRELESS_DEVICE := "vfs-prerelease"
+
+# Platform
+TARGET_ARCH := arm
+#TARGET_NO_BOOTLOADER := true
+#TARGET_BOARD_PLATFORM := msm8916
+TARGET_CPU_ABI := armeabi-v7a
+TARGET_CPU_ABI2 := armeabi
+TARGET_ARCH_VARIANT := armv7-a-neon
+#TARGET_BOARD_PLATFORM_GPU := qcom-adreno306
+#ARCH_ARM_HAVE_TLS_REGISTER := true
+
+# Architecture
+TARGET_CPU_SMP := true
+TARGET_CPU_VARIANT := cortex-a53
+TARGET_GLOBAL_CFLAGS += -mfpu=neon -mfloat-abi=softfp
+TARGET_GLOBAL_CPPFLAGS += -mfpu=neon -mfloat-abi=softfp
+
+# Audio
+AUDIO_FEATURE_LOW_LATENCY_PRIMARY := true
+BOARD_USES_ALSA_AUDIO := true
+
+# Asserts
+#TARGET_OTA_ASSERT_DEVICE := gprimeltecan,gprimeltevl,fortunave3g
+TARGET_OTA_ASSERT_DEVICE := grandprimelte,gprimeltevl,gprimeltecan,gprimeltevlve3g,samsung_sm_g530h
+
+# Bluetooth
+BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := $(LOCAL_PATH)/bluetooth
+BOARD_HAVE_BLUETOOTH := true
+BOARD_HAVE_BLUETOOTH_QCOM := true
+BLUETOOTH_HCI_USE_MCT := true
+
+# Bootloader
+TARGET_BOOTLOADER_BOARD_NAME := MSM8916
+
+# Camera
+TARGET_USE_VENDOR_CAMERA_EXT := true
+USE_DEVICE_SPECIFIC_CAMERA := true
+
+# Charger
+# BOARD_CHARGER_ENABLE_SUSPEND := true
+# BOARD_CHARGER_SHOW_PERCENTAGE := true
+
+# CMHW
+BOARD_HARDWARE_CLASS += $(LOCAL_PATH)/cmhw
+
+# Crypto
+TARGET_HW_DISK_ENCRYPTION := true
+
+# default.prop
+ADDITIONAL_DEFAULT_PROPERTIES += \
+ camera2.portability.force_api=1
+
+# Display
+MAX_EGL_CACHE_KEY_SIZE := 12*1024
+MAX_EGL_CACHE_SIZE := 2048*1024
+NUM_FRAMEBUFFER_SURFACE_BUFFERS := 3
+OVERRIDE_RS_DRIVER := libRSDriver_adreno.so
+TARGET_CONTINUOUS_SPLASH_ENABLED := true
+TARGET_HAVE_NEW_GRALLOC := true
+
+# Encryption
+TARGET_SWV8_DISK_ENCRYPTION := true
+
+# FM
+AUDIO_FEATURE_ENABLED_FM := true
+TARGET_QCOM_NO_FM_FIRMWARE := true
+
+# Fonts
+EXTENDED_FONT_FOOTPRINT := true
+
+# GPS
+#TARGET_GPS_HAL_PATH := $(LOCAL_PATH)/gps
+TARGET_NO_RPC := true
+
+# Init
+TARGET_INIT_VENDOR_LIB := libinit_msm
+TARGET_LIBINIT_DEFINES_FILE := $(LOCAL_PATH)/init/init_gprimeltecan.cpp
+TARGET_PLATFORM_DEVICE_BASE := /devices/soc.0/
+TARGET_UNIFIED_DEVICE := true
+TARGET_PROVIDES_INIT_RC := true
+
+# Kernel
+BOARD_CUSTOM_BOOTIMG_MK := $(LOCAL_PATH)/mkbootimg.mk
+BOARD_KERNEL_BASE := 0x80000000
+BOARD_KERNEL_CMDLINE := console=null androidboot.hardware=qcom user_debug=23 msm_rtb.filter=0x3F ehci-hcd.park=3 androidboot.bootdevice=7824900.sdhci androidboot.selinux=permissive
+BOARD_KERNEL_PAGESIZE := 2048
+BOARD_KERNEL_SEPARATED_DT := true
+BOARD_KERNEL_TAGS_OFFSET := 0x01E00000
+BOARD_RAMDISK_OFFSET := 0x02000000
+#BOARD_SECOND_OFFSET := 0x00F00000
+TARGET_PREBUILT_KERNEL := $(LOCAL_PATH)/kernel
+#TARGET_KERNEL_CONFIG := msm8916_sec_defconfig
+#TARGET_KERNEL_VARIANT_CONFIG := msm8916_sec_fortuna_eur_defconfig
+#TARGET_KERNEL_SELINUX_CONFIG := selinux_defconfig
+#TARGET_KERNEL_SOURCE := kernel/samsung/fortuna
+
+# Lights
+TARGET_PROVIDES_LIBLIGHT := true
+
+# malloc implementation
+MALLOC_IMPL := dlmalloc
+
+# Partitions
+# Partition sizes
+TARGET_USERIMAGES_USE_EXT4 := true
+BOARD_BOOTIMAGE_PARTITION_SIZE := 13631488
+BOARD_RECOVERYIMAGE_PARTITION_SIZE := 15728640
+BOARD_SYSTEMIMAGE_PARTITION_SIZE := 2359296000
+BOARD_SYSTEMIMAGE_PARTITION_TPE := ext4
+BOARD_CACHEIMAGE_PARTITION_SIZE := 314572800
+BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := ext4
+BOARD_PERSISTIMAGE_PARTITION_SIZE := 8388608
+BOARD_PERSISTIMAGE_FILE_SYSTEM_TYPE := ext4
+# (5731495936 - 16384)
+BOARD_USERDATAIMAGE_PARTITION_SIZE := 4942966784
+BOARD_FLASH_BLOCK_SIZE := 131072
+# Platform
+TARGET_BOARD_PLATFORM := msm8916
+TARGET_BOARD_PLATFORM_GPU := qcom-adreno306
+
+# Power
+TARGET_POWERHAL_VARIANT := qcom
+
+# Qualcomm support
+TARGET_USES_QCOM_BSP := true
+COMMON_GLOBAL_CFLAGS += -DQCOM_HARDWARE -DQCOM_BSP
+
+# Recovery
+BOARD_USE_CUSTOM_RECOVERY_FONT := \"roboto_15x24.h\"
+BOARD_SUPPRESS_EMMC_WIPE := true
+TARGET_RECOVERY_PIXEL_FORMAT := ABGR_8888
+TARGET_RECOVERY_QCOM_RTC_FIX := true
+TARGET_USERIMAGES_USE_EXT4 := true
+TARGET_USERIMAGES_USE_F2FS := true
+
+# RIL
+TARGET_RIL_VARIANT := caf
+
+# SELinux
+include device/qcom/sepolicy/sepolicy.mk
+
+BOARD_SEPOLICY_DIRS += \
+ device/samsung/gprimeltecan/sepolicy
+
+BOARD_SEPOLICY_UNION += \
+ bluetooth_loader.te \
+ file.te \
+ healthd.te \
+ qseecomd.te \
+ surfaceflinger.te \
+ system_server.te \
+ wcnss_service.te \
+ file_contexts \
+ property_contexts
+
+# Time services
+BOARD_USES_QC_TIME_SERVICES := true
+
+# TWRP
+#RECOVERY_VARIANT := twrp
+BOARD_HAS_LARGE_FILESYSTEM := true
+BOARD_HAS_NO_SELECT_BUTTON := true
+BOARD_SUPPRESS_SECURE_ERASE := true
+RECOVERY_GRAPHICS_USE_LINELENGTH := true
+RECOVERY_SDCARD_ON_DATA := true
+TW_BRIGHTNESS_PATH := /sys/class/leds/lcd-backlight/brightness
+# TW_CRYPTO_FS_OPTIONS := "nosuid,nodev,noatime,noauto_da_alloc,discard,journal_async_commit,errors=panic wait,check,encryptable=footer"
+# TW_CRYPTO_FS_TYPE := "ext4"
+# TW_CRYPTO_KEY_LOC := "footer"
+# TW_CRYPTO_MNT_POINT := "/data"
+# TW_CRYPTO_REAL_BLKDEV := "/dev/block/platform/7824900.sdhci/by-name/userdata"
+TW_EXCLUDE_ENCRYPTED_BACKUPS := true
+TW_HAS_DOWNLOAD_MODE := true
+TW_HAS_MTP := true
+# TW_IGNORE_MAJOR_AXIS_0 := true
+TW_INCLUDE_CRYPTO := true
+TW_INPUT_BLACKLIST := "accelerometer"
+TW_INTERNAL_STORAGE_PATH := "/data/media/0"
+#TW_INTERNAL_STORAGE_MOUNT_POINT := "data"
+# TW_MAX_BRIGHTNESS := 255
+# TW_MTP_DEVICE := /dev/usb_mtp_gadget
+TW_NEW_ION_HEAP := true
+TW_NO_REBOOT_BOOTLOADER := true
+TW_NO_SCREEN_TIMEOUT := true
+TW_NO_USB_STORAGE := true
+TW_TARGET_USES_QCOM_BSP := true
+TW_THEME := portrait_hdpi
+ifeq ($(TW),)
+ TARGET_RECOVERY_FSTAB := $(LOCAL_PATH)/recovery.fstab
+else
+ TARGET_RECOVERY_FSTAB := $(LOCAL_PATH)/recovery/twrp.fstab
+ TARGET_CPU_VARIANT := cortex-a7
+endif
+
+# Vold
+BOARD_VOLD_DISC_HAS_MULTIPLE_MAJORS := true
+BOARD_VOLD_MAX_PARTITIONS := 67
+TARGET_USE_CUSTOM_LUN_FILE_PATH := /sys/devices/platform/msm_hsusb/gadget/lun%d/file
+
+# Wifi
+BOARD_HAS_QCOM_WLAN := true
+BOARD_HAS_QCOM_WLAN_SDK := true
+BOARD_HAVE_SAMSUNG_WIFI := true
+BOARD_HOSTAPD_DRIVER := NL80211
+BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_qcwcn
+BOARD_WLAN_DEVICE := qcwcn
+BOARD_WPA_SUPPLICANT_DRIVER := NL80211
+BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_qcwcn
+TARGET_USES_QCOM_WCNSS_QMI := true
+TARGET_USES_WCNSS_CTRL := true
+WIFI_DRIVER_FW_PATH_AP := "ap"
+WIFI_DRIVER_FW_PATH_STA := "sta"
+WPA_SUPPLICANT_VERSION := VER_0_8_X
+
+# inherit from the proprietary version
+-include vendor/samsung/gprimeltecan/BoardConfigVendor.mk
diff --git a/InputDisabler/Android.mk b/InputDisabler/Android.mk
new file mode 100644
index 0000000..f58a631
--- /dev/null
+++ b/InputDisabler/Android.mk
@@ -0,0 +1,14 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := InputDisabler
+
+LOCAL_CERTIFICATE := platform
+
+LOCAL_PRIVILEGED_MODULE := true
+
+include $(BUILD_PACKAGE)
diff --git a/InputDisabler/AndroidManifest.xml b/InputDisabler/AndroidManifest.xml
new file mode 100644
index 0000000..95a8831
--- /dev/null
+++ b/InputDisabler/AndroidManifest.xml
@@ -0,0 +1,28 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="org.davis.inputdisabler"
+ coreApp="true"
+ android:sharedUserId="android.uid.system">
+
+ <!-- Need permission to listen when boot is completed (and start the service at that point) -->
+ <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
+
+ <!-- During phone calls, proximity sensor blanks the screen, we need to disable the inputs -->
+ <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+
+ <application android:allowBackup="true"
+ android:label="@string/app_name">
+
+ <!-- Receives action to start the update service -->
+ <receiver android:name=".BootCompleteReceiver">
+ <intent-filter>
+ <action android:name="android.intent.action.BOOT_COMPLETED" />
+ </intent-filter>
+ </receiver>
+
+ <!-- Updater service -->
+ <service
+ android:enabled="true"
+ android:name=".InputDisablerService" />
+ </application>
+
+</manifest>
diff --git a/InputDisabler/res/layout/activity_main.xml b/InputDisabler/res/layout/activity_main.xml
new file mode 100644
index 0000000..3509b84
--- /dev/null
+++ b/InputDisabler/res/layout/activity_main.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical" android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+</LinearLayout>
\ No newline at end of file
diff --git a/InputDisabler/res/mipmap-hdpi/ic_launcher.png b/InputDisabler/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..cde69bc
--- /dev/null
+++ b/InputDisabler/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/InputDisabler/res/mipmap-mdpi/ic_launcher.png b/InputDisabler/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c133a0c
--- /dev/null
+++ b/InputDisabler/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/InputDisabler/res/mipmap-xhdpi/ic_launcher.png b/InputDisabler/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..bfa42f0
--- /dev/null
+++ b/InputDisabler/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/InputDisabler/res/mipmap-xxhdpi/ic_launcher.png b/InputDisabler/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..324e72c
--- /dev/null
+++ b/InputDisabler/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/InputDisabler/res/mipmap-xxxhdpi/ic_launcher.png b/InputDisabler/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..aee44e1
--- /dev/null
+++ b/InputDisabler/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/InputDisabler/res/values/colors.xml b/InputDisabler/res/values/colors.xml
new file mode 100644
index 0000000..3ab3e9c
--- /dev/null
+++ b/InputDisabler/res/values/colors.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="colorPrimary">#3F51B5</color>
+ <color name="colorPrimaryDark">#303F9F</color>
+ <color name="colorAccent">#FF4081</color>
+</resources>
diff --git a/InputDisabler/res/values/strings.xml b/InputDisabler/res/values/strings.xml
new file mode 100644
index 0000000..aea1044
--- /dev/null
+++ b/InputDisabler/res/values/strings.xml
@@ -0,0 +1,3 @@
+<resources>
+ <string name="app_name">InputDisabler</string>
+</resources>
diff --git a/InputDisabler/res/values/styles.xml b/InputDisabler/res/values/styles.xml
new file mode 100644
index 0000000..5d32ef3
--- /dev/null
+++ b/InputDisabler/res/values/styles.xml
@@ -0,0 +1,8 @@
+<resources>
+
+ <!-- Base application theme. -->
+ <style name="AppTheme" parent="@android:style/Theme.Material.Light">
+ <!-- Customize your theme here. -->
+ </style>
+
+</resources>
diff --git a/InputDisabler/src/org/davis/inputdisabler/BootCompleteReceiver.java b/InputDisabler/src/org/davis/inputdisabler/BootCompleteReceiver.java
new file mode 100644
index 0000000..1c5dcf7
--- /dev/null
+++ b/InputDisabler/src/org/davis/inputdisabler/BootCompleteReceiver.java
@@ -0,0 +1,25 @@
+package org.davis.inputdisabler;
+
+/*
+ * Created by Dāvis Mālnieks on 04/10/2015
+ */
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+public class BootCompleteReceiver extends BroadcastReceiver {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
+ // Setup the intent for the service
+ Intent startIntent = new Intent();
+ startIntent.setClass(context, InputDisablerService.class);
+
+ // Start the service
+ context.startService(startIntent);
+ }
+ }
+}
+
diff --git a/InputDisabler/src/org/davis/inputdisabler/Constants.java b/InputDisabler/src/org/davis/inputdisabler/Constants.java
new file mode 100644
index 0000000..87ca0d7
--- /dev/null
+++ b/InputDisabler/src/org/davis/inputdisabler/Constants.java
@@ -0,0 +1,17 @@
+package org.davis.inputdisabler;
+
+/*
+ * Created by Dāvis Mālnieks on 04/10/2015
+ */
+
+public final class Constants {
+ private Constants() {
+
+ }
+
+ public static final String TS_PATH = "/sys/class/input/input3/enabled";
+
+ // Doze intent
+
+ public static final String ACTION_DOZE_PULSE_STARTING = "android.intent.action.DOZE_PULSE_STARTING";
+}
diff --git a/InputDisabler/src/org/davis/inputdisabler/InputDisablerService.java b/InputDisabler/src/org/davis/inputdisabler/InputDisablerService.java
new file mode 100644
index 0000000..4853a19
--- /dev/null
+++ b/InputDisabler/src/org/davis/inputdisabler/InputDisablerService.java
@@ -0,0 +1,50 @@
+package org.davis.inputdisabler;
+
+/*
+ * Created by Dāvis Mālnieks on 04/10/2015
+ */
+
+import android.app.Service;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.IBinder;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+
+import org.davis.inputdisabler.Constants;
+
+public class InputDisablerService extends Service {
+
+ public static final String TAG = "InputDisablerService";
+
+ ScreenStateReceiver mScreenStateReceiver;
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(Intent.ACTION_SCREEN_ON);
+ intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
+ intentFilter.addAction(Constants.ACTION_DOZE_PULSE_STARTING);
+ intentFilter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
+
+ // Create the receiver
+ mScreenStateReceiver = new ScreenStateReceiver();
+ registerReceiver(mScreenStateReceiver, intentFilter);
+
+ return START_STICKY;
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+
+ if(mScreenStateReceiver != null)
+ unregisterReceiver(mScreenStateReceiver);
+ }
+}
diff --git a/InputDisabler/src/org/davis/inputdisabler/MainActivity.java b/InputDisabler/src/org/davis/inputdisabler/MainActivity.java
new file mode 100644
index 0000000..1f7ad92
--- /dev/null
+++ b/InputDisabler/src/org/davis/inputdisabler/MainActivity.java
@@ -0,0 +1,23 @@
+package org.davis.inputdisabler;
+
+/*
+ * Created by Dāvis Mālnieks on 04/10/2015
+ */
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+
+public class MainActivity extends Activity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Set the UI
+ setContentView(R.layout.activity_main);
+
+ // Start the service
+ startService(new Intent(this, InputDisablerService.class));
+ }
+}
diff --git a/InputDisabler/src/org/davis/inputdisabler/ScreenStateReceiver.java b/InputDisabler/src/org/davis/inputdisabler/ScreenStateReceiver.java
new file mode 100644
index 0000000..5ab3a91
--- /dev/null
+++ b/InputDisabler/src/org/davis/inputdisabler/ScreenStateReceiver.java
@@ -0,0 +1,126 @@
+package org.davis.inputdisabler;
+
+/*
+ * Created by Dāvis Mālnieks on 04/10/2015
+ */
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.hardware.Sensor;
+import android.hardware.SensorEvent;
+import android.hardware.SensorEventListener;
+import android.hardware.SensorManager;
+import android.os.Handler;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.davis.inputdisabler.Constants;
+
+public class ScreenStateReceiver extends BroadcastReceiver implements SensorEventListener {
+
+ public static final String TAG = "ScreenStateReceiver";
+
+ public static final boolean DEBUG = true;
+
+ SensorManager mSensorManager;
+
+ Sensor mSensor;
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+
+ if(DEBUG){
+ Log.d(TAG, "Received intent");
+ }
+
+ switch (intent.getAction()) {
+ case Intent.ACTION_SCREEN_ON:
+ Log.d(TAG, "Screen on!");
+ enableDevices(true);
+ break;
+ case Intent.ACTION_SCREEN_OFF:
+ Log.d(TAG, "Screen off!");
+ enableDevices(false);
+ break;
+ case TelephonyManager.ACTION_PHONE_STATE_CHANGED:
+ Log.d(TAG, "Phone state changed!");
+
+ final TelephonyManager telephonyManager =
+ (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+
+ switch (telephonyManager.getCallState()) {
+ case TelephonyManager.CALL_STATE_OFFHOOK:
+ mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
+ mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
+ mSensorManager.registerListener(this, mSensor, 3);
+ break;
+ case TelephonyManager.CALL_STATE_IDLE:
+ if(mSensorManager != null) {
+ mSensorManager.unregisterListener(this);
+ }
+ break;
+ }
+ break;
+ }
+ }
+
+ @Override
+ public void onSensorChanged(SensorEvent sensorEvent) {
+ if(sensorEvent.values[0] == 0.0f) {
+ if(DEBUG){
+ Log.d(TAG, "Proximity: screen off");
+ }
+ enableDevices(false);
+ } else {
+ if(DEBUG){
+ Log.d(TAG, "Proximity: screen on");
+ }
+ enableDevices(true);
+ }
+ }
+
+
+ // Wrapper method
+ private void enableDevices(boolean enable) {
+ boolean ret;
+ if(enable) {
+ // Turn on touch input
+ ret = write_sysfs(Constants.TS_PATH, true);
+ if(DEBUG){
+ Log.d(TAG, "Enabled touchscreen, success? " + ret);
+ }
+ } else {
+ // Turn off touch input
+ ret = write_sysfs(Constants.TS_PATH, false);
+ if(DEBUG){
+ Log.d(TAG, "Disabled touchscreen, success? " + ret);
+ }
+ }
+ }
+
+ // Writes to sysfs node, returns true if success, false if fail
+ private boolean write_sysfs(String path, boolean on) {
+ try {
+ FileOutputStream fos = new FileOutputStream(path);
+ byte[] bytes = new byte[2];
+ bytes[0] = (byte)(on ? '1' : '0');
+ bytes[1] = '\n';
+ fos.write(bytes);
+ fos.close();
+ } catch (Exception e) {
+ Log.e(TAG, "Fail: " + e.getLocalizedMessage());
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public void onAccuracyChanged(Sensor sensor, int i) {
+
+ }
+}
diff --git a/README.md b/README.md
index bd3710b..5dbec42 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,31 @@
-# android_device_samsung_gprimeltecan
-Samsung Galaxy Grand Prime G530W Device Tree
+# android_device_samsung_fortuna
+## Device tree for Samsung Galaxy Grand Prime [Fortuna]
+
+Basic | Spec Sheet
+-------:|:-------------------------
+CPU | Quad-core 1.2 GHz ARM® Cortex™ A53
+CHIPSET | Qualcomm MSM8916 Snapdragon 410
+GPU | Adreno 306
+Memory | 1 GB
+Shipped Android Version | 4.4.4 and 5.0.2
+Storage | 8 GB
+MicroSD | Up to 64 GB
+Battery | 2600 mAh (removable)
+Dimensions | 144.8 x 72.1 x 8.6 mm
+Display | 540 x 960 (qHD), 5.0" (126.4mm)
+Rear Camera | 8.0 MP, LED flash
+Front Camera | 5.0 MP
+
+
+Check the [`local_manifests`](./local_manifests) and [`patch`](./patch) directory
+
+
+## Credits:
+- [x] Huawei Honor 4/4X (codename:cherry) contributors (https://github.com/CyanogenMod)
+- [x] Moto E 2015 (codename:surnia) contributors (https://github.com/Motorola-CyanogenMod)
+- [x] Moto G 2015 (codename:osprey) contributors (https://github.com/CyanogenMod)
+- [x] YU YUPHORIA (codename:lettuce) contributors (https://github.com/CyanogenMod)
+- [x] Samsung Galaxy A5 (codename:a5ultexx) contributor Dāvis Mālnieks aka TheWhisp (https://github.com/TheWhisp)
+- [x] CM contributors developing msm8916 (https://github.com/CyanogenMod)
+- [x] Tell me if I have forgotten about you :)
diff --git a/audio/Bluetooth_cal.acdb b/audio/Bluetooth_cal.acdb
new file mode 100644
index 0000000..d8dcc82
--- /dev/null
+++ b/audio/Bluetooth_cal.acdb
Binary files differ
diff --git a/audio/General_cal.acdb b/audio/General_cal.acdb
new file mode 100644
index 0000000..cd13d93
--- /dev/null
+++ b/audio/General_cal.acdb
Binary files differ
diff --git a/audio/Global_cal.acdb b/audio/Global_cal.acdb
new file mode 100644
index 0000000..277caa7
--- /dev/null
+++ b/audio/Global_cal.acdb
Binary files differ
diff --git a/audio/Handset_cal.acdb b/audio/Handset_cal.acdb
new file mode 100644
index 0000000..2e38382
--- /dev/null
+++ b/audio/Handset_cal.acdb
Binary files differ
diff --git a/audio/Hdmi_cal.acdb b/audio/Hdmi_cal.acdb
new file mode 100644
index 0000000..bcd494d
--- /dev/null
+++ b/audio/Hdmi_cal.acdb
Binary files differ
diff --git a/audio/Headset_cal.acdb b/audio/Headset_cal.acdb
new file mode 100644
index 0000000..c35d7bd
--- /dev/null
+++ b/audio/Headset_cal.acdb
Binary files differ
diff --git a/audio/Speaker_cal.acdb b/audio/Speaker_cal.acdb
new file mode 100644
index 0000000..69086a3
--- /dev/null
+++ b/audio/Speaker_cal.acdb
Binary files differ
diff --git a/audio/audio_effects.conf b/audio/audio_effects.conf
new file mode 100644
index 0000000..8f7d40c
--- /dev/null
+++ b/audio/audio_effects.conf
@@ -0,0 +1,242 @@
+# List of effect libraries to load. Each library element must contain a "path" element
+# giving the full path of the library .so file.
+# libraries {
+# <lib name> {
+# path <lib path>
+# }
+# }
+libraries {
+# This is a proxy library that will be an abstraction for
+# the HW and SW effects
+ proxy {
+ path /system/lib/soundfx/libeffectproxy.so
+ }
+# This is the HW implementation library for the effect
+ offload {
+ path /system/lib/soundfx/libaudioeffectoffload.so
+ }
+ bundle {
+ path /system/lib/soundfx/libbundlewrapper.so
+ }
+ reverb {
+ path /system/lib/soundfx/libreverbwrapper.so
+ }
+ qcbassboost {
+ path /vendor/lib/soundfx/libqcbassboost.so
+ }
+ qcvirt {
+ path /vendor/lib/soundfx/libqcvirt.so
+ }
+ qcreverb {
+ path /vendor/lib/soundfx/libqcreverb.so
+ }
+ visualizer_sw {
+ path /system/lib/soundfx/libvisualizer.so
+ }
+ visualizer_hw {
+ path /system/lib/soundfx/libqcomvisualizer.so
+ }
+ downmix {
+ path /system/lib/soundfx/libdownmix.so
+ }
+ soundalive {
+ path /system/lib/libaudiosa.so
+ }
+ soundalive_sec {
+ path /system/lib/soundfx/libaudiosa_sec.so
+ }
+ loudness_enhancer {
+ path /system/lib/soundfx/libldnhncr.so
+ }
+ pre_processing {
+ path /system/lib/soundfx/libqcomvoiceprocessing.so
+ }
+ offload_bundle {
+ path /system/lib/soundfx/libqcompostprocbundle.so
+ }
+ audio_pre_processing {
+ path /system/lib/soundfx/libqcomvoiceprocessing.so
+ }
+}
+
+# Default pre-processing library. Add to audio_effect.conf "libraries" section if
+# audio HAL implements support for default software audio pre-processing effects
+#
+# pre_processing {
+# path /system/lib/soundfx/libaudiopreprocessing.so
+# }
+
+# list of effects to load. Each effect element must contain a "library" and a "uuid" element.
+# The value of the "library" element must correspond to the name of one library element in the
+# "libraries" element.
+# The name of the effect element is indicative, only the value of the "uuid" element
+# designates the effect.
+# The uuid is the implementation specific UUID as specified by the effect vendor. This is not the
+# generic effect type UUID.
+# effects {
+# <fx name> {
+# library <lib name>
+# uuid <effect uuid>
+# }
+# ...
+# }
+
+effects {
+ soundalive {
+ library proxy
+ uuid 05227ea0-50bb-11e3-ac69-0002a5d5c51b
+ libsw {
+ library soundalive_sec
+ uuid cf65eb39-ce2f-48a8-a903-ceb818c06745
+ }
+ libhw {
+ library offload
+ uuid 0b2dbc60-50bb-11e3-988b-0002a5d5c51b
+ }
+ }
+ bassboost {
+ library proxy
+ uuid 10e50dc0-50bb-11e3-a9b0-0002a5d5c51b
+ libsw {
+ library soundalive
+ uuid a926a540-418a-11e1-b2f1-0002a5d5c51b
+ }
+ libhw {
+ library offload
+ uuid 16a70d80-50bb-11e3-8959-0002a5d5c51b
+ }
+ }
+ virtualizer {
+ library proxy
+ uuid 1db5b180-50bb-11e3-888e-0002a5d5c51b
+ libsw {
+ library soundalive
+ uuid c747f6a0-418a-11e1-a621-0002a5d5c51b
+ }
+ libhw {
+ library offload
+ uuid 23318080-50bb-11e3-9101-0002a5d5c51b
+ }
+ }
+ equalizer {
+ library proxy
+ uuid 295b42c0-50bb-11e3-a6ed-0002a5d5c51b
+ libsw {
+ library soundalive
+ uuid c117b70-f97f-11e0-be50-0002a5d5c51b
+ }
+ libhw {
+ library offload
+ uuid 2f2afe20-50bb-11e3-bc97-0002a5d5c51b
+ }
+ }
+ volume {
+ library bundle
+ uuid 119341a0-8469-11df-81f9-0002a5d5c51b
+ }
+ reverb_env_aux {
+ library reverb
+ uuid 4a387fc0-8ab3-11df-8bad-0002a5d5c51b
+ }
+ reverb_env_ins {
+ library reverb
+ uuid c7a511a0-a3bb-11df-860e-0002a5d5c51b
+ }
+ reverb_pre_aux {
+ library reverb
+ uuid f29a1400-a3bb-11df-8ddc-0002a5d5c51b
+ }
+ reverb_pre_ins {
+ library reverb
+ uuid 172cdf00-a3bc-11df-a72f-0002a5d5c51b
+ }
+ visualizer {
+ library proxy
+ uuid 1d0a1a53-7d5d-48f2-8e71-27fbd10d842c
+ libsw {
+ library visualizer_sw
+ uuid d069d9e0-8329-11df-9168-0002a5d5c51b
+ }
+ libhw {
+ library visualizer_hw
+ uuid 7a8044a0-1a71-11e3-a184-0002a5d5c51b
+ }
+ }
+ downmix {
+ library downmix
+ uuid 93f04452-e4fe-41cc-91f9-e475b6d1d69f
+ }
+ loudness_enhancer {
+ library loudness_enhancer
+ uuid fa415329-2034-4bea-b5dc-5b381c8d1e2c
+ }
+ aec {
+ library pre_processing
+ uuid 0f8d0d2a-59e5-45fe-b6e4-248c8a799109
+ }
+ ns {
+ library pre_processing
+ uuid 1d97bb0b-9e2f-4403-9ae3-58c2554306
+ }
+}
+
+# Default pre-processing effects. Add to audio_effect.conf "effects" section if
+# audio HAL implements support for them.
+#
+# agc {
+# library pre_processing
+# uuid aa8130e0-66fc-11e0-bad0-0002a5d5c51b
+# }
+# aec {
+# library pre_processing
+# uuid 0f8d0d2a-59e5-45fe-b6e4-248c8a799109
+# }
+# ns {
+# library pre_processing
+# uuid c06c8400-8e06-11e0-9cb6-0002a5d5c51b
+# }
+
+# Audio preprocessor configurations.
+# The pre processor configuration consists in a list of elements each describing
+# pre processor settings for a given input source. Valid input source names are:
+# "mic", "camcorder", "voice_recognition", "voice_communication"
+# Each input source element contains a list of effects elements. The name of the effect
+# element must be the name of one of the effects in the "effects" list of the file.
+# Each effect element may optionally contain a list of parameters and their
+# default value to apply when the pre processor effect is created.
+# A parameter is defined by a "param" element and a "value" element. Each of these elements
+# consists in one or more elements specifying a type followed by a value.
+# The types defined are: "int", "short", "float", "bool" and "string"
+# When both "param" and "value" are a single int, a simple form is allowed where just
+# the param and value pair is present in the parameter description
+# pre_processing {
+# <input source name> {
+# <fx name> {
+# <param 1 name> {
+# param {
+# int|short|float|bool|string <value>
+# [ int|short|float|bool|string <value> ]
+# ...
+# }
+# value {
+# int|short|float|bool|string <value>
+# [ int|short|float|bool|string <value> ]
+# ...
+# }
+# }
+# <param 2 name > {<param> <value>}
+# ...
+# }
+# ...
+# }
+# ...
+# }
+
+#
+# TODO: add default audio pre processor configurations after debug and tuning phase
+#
+ pre_processing {
+ voice_communication {
+ aec {}
+ }
+ }
diff --git a/audio/audio_policy.conf b/audio/audio_policy.conf
new file mode 100644
index 0000000..363d4be
--- /dev/null
+++ b/audio/audio_policy.conf
@@ -0,0 +1,140 @@
+# Global configuration section: lists input and output devices always present on the device
+# as well as the output device selected by default.
+# Devices are designated by a string that corresponds to the enum in audio.h
+
+global_configuration {
+ attached_output_devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_TELEPHONY_TX
+ default_output_device AUDIO_DEVICE_OUT_SPEAKER
+ attached_input_devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_BACK_MIC|AUDIO_DEVICE_IN_THIRD_MIC|AUDIO_DEVICE_IN_REMOTE_SUBMIX|AUDIO_DEVICE_IN_FM_RX|AUDIO_DEVICE_IN_FM_RX_A2DP|AUDIO_DEVICE_IN_TELEPHONY_RX|AUDIO_DEVICE_IN_VOICE_CALL
+}
+
+# audio hardware module section: contains descriptors for all audio hw modules present on the
+# device. Each hw module node is named after the corresponding hw module library base name.
+# For instance, "primary" corresponds to audio.primary.<device>.so.
+# The "primary" module is mandatory and must include at least one output with
+# AUDIO_OUTPUT_FLAG_PRIMARY flag.
+# Each module descriptor contains one or more output profile descriptors and zero or more
+# input profile descriptors. Each profile lists all the parameters supported by a given output
+# or input stream category.
+# The "channel_masks", "formats", "devices" and "flags" are specified using strings corresponding
+# to enums in audio.h and audio_policy.h. They are concatenated by use of "|" without space or "\n".
+
+audio_hw_modules {
+ primary {
+ outputs {
+ primary {
+ sampling_rates 44100|48000
+ channel_masks AUDIO_CHANNEL_OUT_STEREO
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_FM|AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET
+ flags AUDIO_OUTPUT_FLAG_PRIMARY
+ }
+ fast {
+ sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000
+ channel_masks AUDIO_CHANNEL_OUT_STEREO
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET
+ flags AUDIO_OUTPUT_FLAG_FAST
+ }
+ hdmi {
+ sampling_rates 48000
+ channel_masks dynamic
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_OUT_AUX_DIGITAL
+ flags AUDIO_OUTPUT_FLAG_MULTI_CH
+ }
+ compress_offload {
+ sampling_rates 8000|11025|16000|22050|32000|44100|48000
+ channel_masks AUDIO_CHANNEL_OUT_MONO|AUDIO_CHANNEL_OUT_STEREO|AUDIO_CHANNEL_OUT_2POINT1|AUDIO_CHANNEL_OUT_QUAD|AUDIO_CHANNEL_OUT_PENTA|AUDIO_CHANNEL_OUT_5POINT1|AUDIO_CHANNEL_OUT_6POINT1|AUDIO_CHANNEL_OUT_7POINT1
+ formats AUDIO_FORMAT_MP3|AUDIO_FORMAT_AAC|AUDIO_FORMAT_AC3|AUDIO_FORMAT_EAC3
+ devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET
+ flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD|AUDIO_OUTPUT_FLAG_NON_BLOCKING
+ }
+ voip_rx {
+ sampling_rates 8000|16000
+ channel_masks AUDIO_CHANNEL_OUT_MONO
+ formats AUDIO_FORMAT_PCM_16_BIT|AUDIO_FORMAT_AMR_NB|AUDIO_FORMAT_AMR_WB|AUDIO_FORMAT_QCELP|AUDIO_FORMAT_EVRC|AUDIO_FORMAT_EVRCB|AUDIO_FORMAT_EVRCWB|AUDIO_FORMAT_EVRCNW
+ devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_LINE
+ flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_VOIP_RX
+ }
+ }
+ inputs {
+ primary {
+ sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000
+ channel_masks AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO|AUDIO_CHANNEL_IN_FRONT_BACK|AUDIO_CHANNEL_IN_VOICE_UPLINK|AUDIO_CHANNEL_IN_VOICE_DNLINK
+ formats AUDIO_FORMAT_PCM_16_BIT|AUDIO_FORMAT_AMR_NB|AUDIO_FORMAT_AMR_WB|AUDIO_FORMAT_QCELP|AUDIO_FORMAT_EVRC|AUDIO_FORMAT_EVRCB|AUDIO_FORMAT_EVRCWB|AUDIO_FORMAT_EVRCNW
+ devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET|AUDIO_DEVICE_IN_WIRED_HEADSET|AUDIO_DEVICE_IN_WIRED_HEADPHONE|AUDIO_DEVICE_IN_AUX_DIGITAL|AUDIO_DEVICE_IN_VOICE_CALL|AUDIO_DEVICE_IN_BACK_MIC|AUDIO_DEVICE_IN_THIRD_MIC|AUDIO_DEVICE_IN_FM|AUDIO_DEVICE_IN_FM_RX|AUDIO_DEVICE_IN_FM_RX_A2DP
+ }
+ }
+ }
+ a2dp {
+ outputs {
+ a2dp {
+ sampling_rates 44100
+ channel_masks AUDIO_CHANNEL_OUT_STEREO
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_OUT_ALL_A2DP
+ }
+ }
+ inputs {
+ a2dp {
+ sampling_rates 44100|48000
+ channel_masks AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_IN_BLUETOOTH_A2DP
+ }
+ }
+ }
+ usb {
+ outputs {
+ usb_accessory {
+ sampling_rates 44100
+ channel_masks AUDIO_CHANNEL_OUT_STEREO
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_OUT_USB_ACCESSORY
+ }
+ usb_device {
+ sampling_rates 44100|48000
+ channel_masks dynamic
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_OUT_USB_DEVICE|AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET
+ }
+ }
+ }
+ tms {
+ outputs {
+ tms {
+ sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000
+ channel_masks AUDIO_CHANNEL_OUT_STEREO
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_OUT_EXTERNAL_TMS
+ }
+ }
+ inputs {
+ tms {
+ sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000
+ channel_masks AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_IN_EXTERNAL_TMS
+ }
+ }
+ }
+ r_submix {
+ outputs {
+ submix {
+ sampling_rates 48000
+ channel_masks AUDIO_CHANNEL_OUT_STEREO
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_OUT_REMOTE_SUBMIX
+ }
+ }
+ inputs {
+ submix {
+ sampling_rates 48000
+ channel_masks AUDIO_CHANNEL_IN_STEREO
+ formats AUDIO_FORMAT_PCM_16_BIT
+ devices AUDIO_DEVICE_IN_REMOTE_SUBMIX
+ }
+ }
+ }
+}
diff --git a/audio/mixer_paths.xml b/audio/mixer_paths.xml
new file mode 100644
index 0000000..a1178a0
--- /dev/null
+++ b/audio/mixer_paths.xml
@@ -0,0 +1,1832 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<mixer>
+ <!-- Fortuna 3G EUR OPEN ================================================ -->
+ <!-- These are the initial mixer settings -->
+ <!-- reset RX/TX Start -->
+ <ctl name="PRI_MI2S_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="PRI_MI2S_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="PRI_MI2S_RX Audio Mixer MultiMedia5" value="0" />
+ <ctl name="PRI_MI2S_RX_Voice Mixer Voice2" value="0" />
+ <ctl name="PRI_MI2S_RX_Voice Mixer CSVoice" value="0" />
+ <ctl name="PRI_MI2S_RX_Voice Mixer Voip" value="0" />
+ <ctl name="PRI_MI2S_RX_Voice Mixer QCHAT" value="0" />
+ <ctl name="PRI_MI2S_RX Port Mixer INTERNAL_FM_TX" value="0" />
+ <ctl name="PRI_MI2S_RX_Voice Mixer VoWLAN" value="0" />
+
+ <ctl name="PRI_MI2S_RX Port Mixer TERT_MI2S_TX" value="0" />
+
+ <ctl name="AFE_PCM_RX_Voice Mixer Voice2" value="0" />
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="AFE_PCM_RX_Voice Mixer VoWLAN" value="0" />
+
+ <ctl name="INTERNAL_BT_SCO_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="INTERNAL_BT_SCO_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="INTERNAL_BT_SCO_RX Audio Mixer MultiMedia5" value="0" />
+ <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer CSVoice" value="0" />
+ <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer Voice2" value="0" />
+ <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer QCHAT" value="0" />
+ <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer Voip" value="0" />
+ <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer VoWLAN" value="0" />
+
+ <ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia1" value="0" />
+ <ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia4" value="0" />
+ <ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia5" value="0" />
+
+ <ctl name="Incall_Music Audio Mixer MultiMedia2" value="0" />
+ <ctl name="Incall_Music_2 Audio Mixer MultiMedia9" value="0" />
+
+ <ctl name="RX2 MIX2 INP2" value="ZERO" />
+ <ctl name="RX2 MIX2 INP1" value="ZERO" />
+ <ctl name="RX1 MIX2 INP2" value="ZERO" />
+ <ctl name="RX1 MIX2 INP1" value="ZERO" />
+ <ctl name="RX3 MIX1 INP2" value="ZERO" />
+ <ctl name="RX3 MIX1 INP1" value="ZERO" />
+ <ctl name="RX2 MIX1 INP2" value="ZERO" />
+ <ctl name="RX2 MIX1 INP1" value="ZERO" />
+ <ctl name="RX1 MIX1 INP2" value="ZERO" />
+ <ctl name="RX1 MIX1 INP1" value="ZERO" />
+
+ <ctl name="RX1 Digital Volume" value="84" />
+ <ctl name="RX2 Digital Volume" value="84" />
+ <ctl name="RX3 Digital Volume" value="84" />
+
+ <ctl name="Voice Rx Device Mute" id="0" value="0" />
+ <ctl name="Voice Rx Device Mute" id="1" value="-1" />
+ <ctl name="Voice Rx Device Mute" id="2" value="20" />
+ <ctl name="Voice Rx Gain" id="0" value="0" />
+ <ctl name="Voice Rx Gain" id="1" value="-1" />
+ <ctl name="Voice Rx Gain" id="2" value="20" />
+ <ctl name="Voip Rx Gain" id="0" value="0" />
+ <ctl name="Voip Rx Gain" id="1" value="20" />
+
+ <ctl name="Internal FM RX Volume" value="0" />
+ <ctl name="EAR PA Gain" value="POS_6_DB" />
+ <ctl name="SPK DAC Switch" value="0" />
+ <ctl name="EAR_S" value="ZERO" />
+ <ctl name="HPHL" value="ZERO" />
+ <ctl name="HPHR" value="ZERO" />
+ <ctl name="MI2S_RX Channels" value="One" />
+
+ <ctl name="HDMI_RX_Voice Mixer VoWLAN" value="0" />
+
+ <!-- reset TX part -->
+ <ctl name="MultiMedia1 Mixer TERT_MI2S_TX" value="0" />
+ <ctl name="MultiMedia1 Mixer INTERNAL_BT_SCO_TX" value="0" />
+ <ctl name="MultiMedia1 Mixer INTERNAL_FM_TX" value="0" />
+ <ctl name="MultiMedia1 Mixer VOC_REC_UL" value="0" />
+ <ctl name="MultiMedia1 Mixer VOC_REC_DL" value="0" />
+ <ctl name="MultiMedia2 Mixer INTERNAL_FM_TX" value="0" />
+
+ <ctl name="Voice_Tx Mixer INTERNAL_BT_SCO_TX_Voice" value="0" />
+ <ctl name="Voice_Tx Mixer PRI_MI2S_TX_Voice" value="0" />
+
+ <ctl name="Voice2_Tx Mixer PRI_MI2S_TX_Voice2" value="0" />
+ <ctl name="Voice2_Tx Mixer AFE_PCM_TX_Voice2" value="0" />
+ <ctl name="Voice2_Tx Mixer INTERNAL_BT_SCO_TX_Voice2" value="0" />
+ <ctl name="Voice_Tx Mixer TERT_MI2S_TX_Voice" value="0" />
+
+ <ctl name="Voip_Tx Mixer PRI_MI2S_TX_Voip" value="0" />
+ <ctl name="Voip_Tx Mixer INTERNAL_BT_SCO_TX_Voip" value="0" />
+ <ctl name="Voip_Tx Mixer TERT_MI2S_TX_Voip" value="0" />
+
+ <ctl name="VoWLAN_Tx Mixer TERT_MI2S_TX_VoWLAN" value="0" />
+ <ctl name="VoWLAN_Tx Mixer INTERNAL_BT_SCO_TX_VoWLAN" value="0" />
+ <ctl name="VoWLAN_Tx Mixer AFE_PCM_TX_VoWLAN" value="0" />
+
+ <ctl name="QCHAT_Tx Mixer PRI_MI2S_TX_QCHAT" value="0" />
+ <ctl name="QCHAT_Tx Mixer INTERNAL_BT_SCO_TX_QCHAT" value="0" />
+ <ctl name="QCHAT_Tx Mixer TERT_MI2S_TX_QCHAT" value="0" />
+
+ <ctl name="Voice Tx Mute" id="0" value="0" />
+ <ctl name="Voice Tx Mute" id="1" value="-1" />
+ <ctl name="Voice Tx Mute" id="2" value="500" />
+ <ctl name="Voip Tx Mute" id="0" value="0" />
+ <ctl name="Voip Tx Mute" id="1" value="500" />
+
+ <ctl name="IIR1 INP1 Volume" value="84" />
+ <ctl name="IIR1 INP2 Volume" value="84" />
+ <ctl name="IIR1 INP3 Volume" value="84" />
+ <ctl name="IIR1 INP4 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="13" />
+ <ctl name="ADC2 Volume" value="13" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="DEC2 Volume" value="84" />
+
+ <ctl name="DEC2 MUX" value="ZERO" />
+ <ctl name="DEC1 MUX" value="ZERO" />
+ <ctl name="ADC2 MUX" value="ZERO" />
+
+ <ctl name="MI2S_TX Channels" value="One" />
+
+ <ctl name="Internal BTSCO SampleRate" value="8000" />
+
+ <ctl name="Voip Mode Config" value="12" />
+ <ctl name="Voip Rate Config" value="0" />
+ <ctl name="Voip Evrc Min Max Rate Config" id="0" value="1" />
+ <ctl name="Voip Evrc Min Max Rate Config" id="1" value="4" />
+ <ctl name="Voip Dtx Mode" value="0" />
+
+ <ctl name="TTY Mode" value="Off" />
+
+ <ctl name="MICBIAS CAPLESS Switch" value="0" />
+
+ <!-- IIR -->
+ <ctl name="IIR1 Band1" id ="0" value="268435456" />
+ <ctl name="IIR1 Band1" id ="1" value="0" />
+ <ctl name="IIR1 Band1" id ="2" value="0" />
+ <ctl name="IIR1 Band1" id ="3" value="0" />
+ <ctl name="IIR1 Band1" id ="4" value="0" />
+ <ctl name="IIR1 Band2" id ="0" value="268435456" />
+ <ctl name="IIR1 Band2" id ="1" value="0" />
+ <ctl name="IIR1 Band2" id ="2" value="0" />
+ <ctl name="IIR1 Band2" id ="3" value="0" />
+ <ctl name="IIR1 Band2" id ="4" value="0" />
+ <ctl name="IIR1 Band3" id ="0" value="268435456" />
+ <ctl name="IIR1 Band3" id ="1" value="0" />
+ <ctl name="IIR1 Band3" id ="2" value="0" />
+ <ctl name="IIR1 Band3" id ="3" value="0" />
+ <ctl name="IIR1 Band3" id ="4" value="0" />
+ <ctl name="IIR1 Band4" id ="0" value="268435456" />
+ <ctl name="IIR1 Band4" id ="1" value="0" />
+ <ctl name="IIR1 Band4" id ="2" value="0" />
+ <ctl name="IIR1 Band4" id ="3" value="0" />
+ <ctl name="IIR1 Band4" id ="4" value="0" />
+ <ctl name="IIR1 Band5" id ="0" value="268435456" />
+ <ctl name="IIR1 Band5" id ="1" value="0" />
+ <ctl name="IIR1 Band5" id ="2" value="0" />
+ <ctl name="IIR1 Band5" id ="3" value="0" />
+ <ctl name="IIR1 Band5" id ="4" value="0" />
+ <ctl name="IIR1 Enable Band1" value="0" />
+ <ctl name="IIR1 Enable Band2" value="0" />
+ <ctl name="IIR1 Enable Band3" value="0" />
+ <ctl name="IIR1 Enable Band4" value="0" />
+ <ctl name="IIR1 Enable Band5" value="0" />
+ <!-- IIR -->
+ <!-- reset RX/TX End -->
+
+ <!-- ================================================================ -->
+ <!-- Verb -->
+ <!-- RX part -->
+ <!-- hifi -->
+ <path name="deep-buffer-playback">
+ <ctl name="PRI_MI2S_RX Audio Mixer MultiMedia1" value="1" />
+ </path>
+
+ <path name="deep-buffer-playback bt-sco">
+ <ctl name="INTERNAL_BT_SCO_RX Audio Mixer MultiMedia1" value="1" />
+ </path>
+
+ <path name="deep-buffer-playback bt-sco-wb">
+ <path name="deep-buffer-playback bt-sco" />
+ </path>
+
+ <path name="deep-buffer-playback afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia1" value="1" />
+ </path>
+
+ <path name="deep-buffer-playback usb-headphones">
+ <path name="deep-buffer-playback afe-proxy" />
+ </path>
+
+ <path name="deep-buffer-playback speaker-and-usb-headphones">
+ <path name="deep-buffer-playback usb-headphones" />
+ <path name="deep-buffer-playback" />
+ </path>
+
+ <path name="deep-buffer-playback transmission-fm">
+ <ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia1" value="1" />
+ </path>
+
+ <!-- low latency -->
+ <path name="low-latency-playback">
+ <ctl name="PRI_MI2S_RX Audio Mixer MultiMedia5" value="1" />
+ </path>
+
+ <path name="low-latency-playback bt-sco">
+ <ctl name="INTERNAL_BT_SCO_RX Audio Mixer MultiMedia5" value="1" />
+ </path>
+
+ <path name="low-latency-playback bt-sco-wb">
+ <path name="low-latency-playback bt-sco" />
+ </path>
+
+ <path name="low-latency-playback afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia5" value="1" />
+ </path>
+
+ <path name="low-latency-playback usb-headphones">
+ <path name="low-latency-playback afe-proxy" />
+ </path>
+
+ <path name="low-latency-playback speaker-and-usb-headphones">
+ <path name="low-latency-playback usb-headphones" />
+ <path name="low-latency-playback" />
+ </path>
+
+ <path name="low-latency-playback transmission-fm">
+ <ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia5" value="1" />
+ </path>
+
+ <!-- tunnel -->
+ <path name="compress-offload-playback">
+ <ctl name="PRI_MI2S_RX Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="compress-offload-playback bt-sco">
+ <ctl name="INTERNAL_BT_SCO_RX Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="compress-offload-playback bt-sco-wb">
+ <ctl name="Internal BTSCO SampleRate" value="16000" />
+ <path name="compress-offload-playback bt-sco" />
+ </path>
+
+ <path name="compress-offload-playback afe-proxy">
+ <ctl name="AFE_PCM_RX Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <path name="compress-offload-playback usb-headphones">
+ <path name="compress-offload-playback afe-proxy" />
+ </path>
+
+ <path name="compress-offload-playback speaker-and-usb-headphones">
+ <path name="compress-offload-playback usb-headphones" />
+ <path name="compress-offload-playback" />
+ </path>
+
+ <path name="compress-offload-playback transmission-fm">
+ <ctl name="INTERNAL_FM_RX Audio Mixer MultiMedia4" value="1" />
+ </path>
+
+ <!-- TX part -->
+ <path name="audio-record">
+ <ctl name="MultiMedia1 Mixer TERT_MI2S_TX" value="1" />
+ </path>
+
+ <path name="audio-record bt-sco">
+ <ctl name="MultiMedia1 Mixer INTERNAL_BT_SCO_TX" value="1" />
+ </path>
+
+ <path name="audio-record bt-sco-wb">
+ <ctl name="Internal BTSCO SampleRate" value="16000" />
+ <path name="audio-record bt-sco" />
+ </path>
+
+ <path name="audio-record usb-headset-mic">
+ <ctl name="MultiMedia1 Mixer AFE_PCM_TX" value="1" />
+ </path>
+
+ <path name="audio-record capture-fm">
+ <ctl name="MultiMedia1 Mixer INTERNAL_FM_TX" value="1" />
+ </path>
+
+ <path name="fm-virtual-record capture-fm">
+ <ctl name="MultiMedia2 Mixer INTERNAL_FM_TX" value="1" />
+ </path>
+
+ <!-- call part -->
+ <path name="voice-call">
+ <ctl name="PRI_MI2S_RX_Voice Mixer CSVoice" value="1" />
+ <ctl name="Voice_Tx Mixer TERT_MI2S_TX_Voice" value="1" />
+ </path>
+
+ <path name="voice-call bt-sco">
+ <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer CSVoice" value="1" />
+ <ctl name="Voice_Tx Mixer INTERNAL_BT_SCO_TX_Voice" value="1" />
+ </path>
+
+ <path name="voice-call bt-sco-wb">
+ <ctl name="Internal BTSCO SampleRate" value="16000" />
+ <path name="voice-call bt-sco" />
+ </path>
+
+ <path name="voice-call usb-headphones">
+ <ctl name="AFE_PCM_RX_Voice Mixer CSVoice" value="1" />
+ <ctl name="Voice_Tx Mixer AFE_PCM_TX_Voice" value="1" />
+ </path>
+
+ <path name="voice-call-cp2">
+ <ctl name="PRI_MI2S_RX_Voice Mixer Voice2" value="1" />
+ <ctl name="Voice2_Tx Mixer TERT_MI2S_TX_Voice2" value="1" />
+ </path>
+
+ <path name="voice-call-cp2 bt-sco">
+ <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer Voice2" value="1" />
+ <ctl name="Voice2_Tx Mixer INTERNAL_BT_SCO_TX_Voice2" value="1" />
+ </path>
+
+ <path name="play-fm">
+ <ctl name="Internal FM RX Volume" value="1" />
+ <ctl name="PRI_MI2S_RX Port Mixer INTERNAL_FM_TX" value="1" />
+ </path>
+
+ <path name="fm-input">
+ <path name="audio-record capture-fm" />
+ </path>
+
+ <path name="vowlan-call">
+ <ctl name="PRI_MI2S_RX_Voice Mixer VoWLAN" value="1" />
+ <ctl name="VoWLAN_Tx Mixer TERT_MI2S_TX_VoWLAN" value="1" />
+ </path>
+
+ <path name="vowlan-call hdmi">
+ <ctl name="HDMI_RX_Voice Mixer VoWLAN" value="1" />
+ <ctl name="VoWLAN_Tx Mixer TERT_MI2S_TX_VoWLAN" value="1" />
+ </path>
+
+ <path name="vowlan-call bt-sco">
+ <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer VoWLAN" value="1" />
+ <ctl name="VoWLAN_Tx Mixer INTERNAL_BT_SCO_TX_VoWLAN" value="1" />
+ </path>
+
+ <path name="vowlan-call bt-sco-wb">
+ <ctl name="Internal BTSCO SampleRate" value="16000" />
+ <path name="vowlan-call bt-sco" />
+ </path>
+
+ <path name="vowlan-call usb-headphones">
+ <ctl name="AFE_PCM_RX_Voice Mixer VoWLAN" value="1" />
+ <ctl name="VoWLAN_Tx Mixer AFE_PCM_TX_VoWLAN" value="1" />
+ </path>
+
+ <path name="hfp-sco">
+ <ctl name="PRI_MI2S_RX Port Mixer INTERNAL_BT_SCO_TX" value="1" />
+ <ctl name="INTERNAL_BT_SCO_RX Audio Mixer MultiMedia6" value="1" />
+ <ctl name="MultiMedia6 Mixer TERT_MI2S_TX" value="1" />
+ </path>
+
+ <path name="hfp-sco-wb">
+ <ctl name="Internal BTSCO SampleRate" value="16000" />
+ <path name="hfp-sco" />
+ </path>
+
+ <path name="incall-rec-uplink">
+ <ctl name="MultiMedia1 Mixer VOC_REC_UL" value="1" />
+ </path>
+
+ <path name="incall-rec-uplink bt-sco">
+ <path name="incall-rec-uplink" />
+ </path>
+
+ <path name="incall-rec-uplink bt-sco-wb">
+ <path name="incall-rec-uplink" />
+ </path>
+
+ <path name="incall-rec-downlink">
+ <ctl name="MultiMedia1 Mixer VOC_REC_DL" value="1" />
+ </path>
+
+ <path name="incall-rec-downlink bt-sco">
+ <path name="incall-rec-downlink" />
+ </path>
+
+ <path name="incall-rec-downlink bt-sco-wb">
+ <path name="incall-rec-downlink" />
+ </path>
+
+ <path name="incall-rec-uplink-and-downlink">
+ <path name="incall-rec-uplink" />
+ <path name="incall-rec-downlink" />
+ </path>
+
+ <path name="incall-rec-uplink-and-downlink bt-sco">
+ <path name="incall-rec-uplink-and-downlink" />
+ </path>
+
+ <path name="incall-rec-uplink-and-downlink bt-sco-wb">
+ <path name="incall-rec-uplink-and-downlink" />
+ </path>
+
+ <path name="incall_music_uplink">
+ <ctl name="Incall_Music Audio Mixer MultiMedia2" value="1" />
+ </path>
+
+ <path name="incall_music_uplink2">
+ <ctl name="Incall_Music_2 Audio Mixer MultiMedia9" value="1" />
+ </path>
+
+ <path name="incall-rec-uplink-cp2">
+ <ctl name="MultiMedia1 Mixer VOC_REC_UL" value="1" />
+ </path>
+
+ <path name="incall-rec-downlink-cp2">
+ <ctl name="MultiMedia1 Mixer VOC_REC_DL" value="1" />
+ </path>
+
+ <path name="incall-rec-uplink-and-downlink-cp2">
+ <path name="incall-rec-uplink-cp2" />
+ <path name="incall-rec-downlink-cp2" />
+ </path>
+
+ <path name="incall-rec-uplink-and-downlink-cp2 bt-sco">
+ <path name="incall-rec-uplink-cp2" />
+ <path name="incall-rec-downlink-cp2" />
+ </path>
+
+ <path name="voip-call">
+ <ctl name="PRI_MI2S_RX_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer TERT_MI2S_TX_Voip" value="1" />
+ </path>
+
+ <path name="voip-call bt-sco">
+ <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer INTERNAL_BT_SCO_TX_Voip" value="1" />
+ </path>
+
+ <path name="volte-call">
+ <ctl name="PRI_MI2S_RX_Voice Mixer VoLTE" value="1" />
+ <ctl name="VoLTE_Tx Mixer TERT_MI2S_TX_VoLTE" value="1" />
+ </path>
+
+ <path name="volte-call hdmi">
+ <ctl name="HDMI_RX_Voice Mixer VoLTE" value="1" />
+ <ctl name="VoLTE_Tx Mixer SLIM_0_TX_VoLTE" value="1" />
+ </path>
+
+ <path name="volte-call bt-sco">
+ <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer VoLTE" value="1" />
+ <ctl name="VoLTE_Tx Mixer INTERNAL_BT_SCO_TX_VoLTE" value="1" />
+ </path>
+
+ <path name="volte-call bt-sco-wb">
+ <ctl name="Internal BTSCO SampleRate" value="16000" />
+ <path name="volte-call bt-sco" />
+ </path>
+
+ <path name="volte-call usb-headphones">
+ <ctl name="AFE_PCM_RX_Voice Mixer VoLTE" value="1" />
+ <ctl name="VoLTE_Tx Mixer AFE_PCM_TX_VoLTE" value="1" />
+ </path>
+
+ <path name="compress-voip-call">
+ <ctl name="PRI_MI2S_RX_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer TERT_MI2S_TX_Voip" value="1" />
+ </path>
+
+ <path name="compress-voip-call bt-sco">
+ <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer Voip" value="1" />
+ <ctl name="Voip_Tx Mixer INTERNAL_BT_SCO_TX_Voip" value="1" />
+ </path>
+
+ <path name="compress-voip-call bt-sco-wb">
+ <ctl name="Internal BTSCO SampleRate" value="16000" />
+ <path name="compress-voip-call bt-sco" />
+ </path>
+
+ <path name="qchat-call">
+ <ctl name="PRI_MI2S_RX_Voice Mixer QCHAT" value="1" />
+ <ctl name="QCHAT_Tx Mixer TERT_MI2S_TX_QCHAT" value="1" />
+ </path>
+
+ <path name="qchat-call bt-sco">
+ <ctl name="INTERNAL_BT_SCO_RX_Voice Mixer QCHAT" value="1" />
+ <ctl name="QCHAT_Tx Mixer INTERNAL_BT_SCO_TX_QCHAT" value="1" />
+ </path>
+
+ <path name="qchat-call bt-sco-wb">
+ <ctl name="Internal BTSCO SampleRate" value="16000" />
+ <path name="qchat-call bt-sco" />
+ </path>
+ <!-- end of Verb -->
+
+ <!-- ================================================================ -->
+ <!-- Device -->
+ <!-- RX part -->
+
+ <path name="rcv">
+ <ctl name="RX1 MIX1 INP1" value="RX1" />
+ <ctl name="RDAC2 MUX" value="RX1" />
+ <ctl name="EAR_S" value="Switch" />
+ </path>
+
+ <path name="spk">
+ <ctl name="MI2S_RX Channels" value="Two" />
+ <ctl name="RX3 MIX1 INP1" value="RX1" />
+ <ctl name="RX3 MIX1 INP2" value="RX2" />
+ <ctl name="SPK DAC Switch" value="1" />
+ <ctl name="Speaker Boost" value="ENABLE" />
+ </path>
+
+ <path name="ear">
+ <ctl name="MI2S_RX Channels" value="Two" />
+ <ctl name="RX1 MIX1 INP1" value="RX1" />
+ <ctl name="RX2 MIX1 INP1" value="RX2" />
+ <ctl name="RDAC2 MUX" value="RX2" />
+ <ctl name="HPHL" value="Switch" />
+ <ctl name="HPHR" value="Switch" />
+ </path>
+
+ <path name="lineout">
+ <ctl name="MI2S_RX Channels" value="Two" />
+ <ctl name="RX1 MIX1 INP1" value="RX1" />
+ <ctl name="RX2 MIX1 INP1" value="RX2" />
+ <ctl name="RDAC2 MUX" value="RX2" />
+ <ctl name="HPHL" value="Switch" />
+ <ctl name="HPHR" value="Switch" />
+ </path>
+
+ <path name="spk-lineout">
+ <ctl name="MI2S_RX Channels" value="Two" />
+ <ctl name="RX1 MIX1 INP1" value="RX1" />
+ <ctl name="RX2 MIX1 INP1" value="RX2" />
+ <ctl name="RX3 MIX1 INP1" value="RX1" />
+ <ctl name="RX3 MIX1 INP2" value="RX2" />
+ <ctl name="RDAC2 MUX" value="RX2" />
+ <ctl name="SPK DAC Switch" value="1" />
+ <ctl name="HPHL" value="Switch" />
+ <ctl name="HPHR" value="Switch" />
+ </path>
+
+ <path name="spk-ear">
+ <ctl name="MI2S_RX Channels" value="Two" />
+ <ctl name="RX1 MIX1 INP1" value="RX1" />
+ <ctl name="RX2 MIX1 INP1" value="RX2" />
+ <ctl name="RX3 MIX1 INP1" value="RX1" />
+ <ctl name="RX3 MIX1 INP2" value="RX2" />
+ <ctl name="RDAC2 MUX" value="RX2" />
+ <ctl name="SPK DAC Switch" value="1" />
+ <ctl name="HPHL" value="Switch" />
+ <ctl name="HPHR" value="Switch" />
+ </path>
+
+ <!-- TX part -->
+ <path name="main-mic">
+ <ctl name="DEC1 MUX" value="ADC1" />
+ <ctl name="MICBIAS CAPLESS Switch" value="1" />
+ </path>
+
+ <path name="sub-mic">
+ <ctl name="DEC1 MUX" value="ADC2" />
+ <ctl name="ADC2 MUX" value="INP3" />
+ </path>
+
+ <path name="3rd-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC1 Volume" value="68" />
+ </path>
+
+ <path name="ear-mic">
+ <ctl name="DEC1 MUX" value="ADC2" />
+ <ctl name="ADC2 MUX" value="INP2" />
+ <ctl name="IIR1 INP1 MUX" value="DEC1" />
+ <ctl name="MICBIAS CAPLESS Switch" value="0" />
+ </path>
+
+ <path name="main-sub-mic">
+ <ctl name="MI2S_TX Channels" value="Two" />
+ <ctl name="DEC1 MUX" value="ADC1" />
+ <ctl name="DEC2 MUX" value="ADC2" />
+ <ctl name="ADC2 MUX" value="INP3" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC1 Volume" value="4" />
+ <ctl name="DEC2 Volume" value="82" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="sub-main-mic">
+ <ctl name="MI2S_TX Channels" value="Two" />
+ <ctl name="DEC1 MUX" value="ADC1" />
+ <ctl name="DEC2 MUX" value="ADC2" />
+ <ctl name="ADC2 MUX" value="INP3" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC1 Volume" value="4" />
+ <ctl name="DEC2 Volume" value="82" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="sub-3rd-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC1 Volume" value="68" />
+ </path>
+
+ <path name="main-3rd-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC1 Volume" value="68" />
+ </path>
+
+ <path name="main-sub-3rd-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC1 Volume" value="68" />
+ </path>
+
+ <path name="3rd-sub-main-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC1 Volume" value="68" />
+ </path>
+ <!-- end of Device -->
+
+ <!-- ================================================================ -->
+ <!-- Play Scenario -->
+ <path name="handset">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ </path>
+
+ <path name="speaker">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="80" />
+ </path>
+
+ <path name="headset">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ <ctl name="RX2 Digital Volume" value="81" />
+ </path>
+
+ <path name="dock">
+ <path name="lineout" />
+ <ctl name="RX1 Digital Volume" value="83" />
+ <ctl name="RX2 Digital Volume" value="83" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <path name="headphones">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ <ctl name="RX2 Digital Volume" value="81" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <path name="speaker-and-headphones">
+ <path name="spk-ear" />
+ <ctl name="RX1 Digital Volume" value="56" />
+ <ctl name="RX2 Digital Volume" value="56" />
+ <ctl name="RX3 Digital Volume" value="79" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <path name="speaker-and-hdmi">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="84" />
+ </path>
+
+ <path name="speaker-and-proxy">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="84" />
+ </path>
+
+ <path name="speaker-and-dock">
+ <path name="spk-lineout" />
+ <ctl name="RX1 Digital Volume" value="56" />
+ <ctl name="RX2 Digital Volume" value="56" />
+ <ctl name="RX3 Digital Volume" value="81" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <path name="fm-speaker">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="76" />
+ </path>
+
+ <path name="fm-headset">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ <ctl name="RX2 Digital Volume" value="84" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <!-- end of Play Scenario -->
+
+ <!-- ================================================================ -->
+ <!-- Recording Scenario -->
+ <path name="rec-main-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="89" />
+ <ctl name="ADC1 Volume" value="2" />
+ </path>
+
+ <path name="rec-sub-mic">
+ <path name="sub-mic" />
+ <ctl name="DEC1 Volume" value="82" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="rec-headset-mic">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="82" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="rec-stereo-mic">
+ <path name="rec-main-mic" />
+ </path>
+
+ <path name="rec-high-gain-main-mic">
+ <path name="rec-main-mic" />
+ </path>
+
+ <path name="rec-high-gain-sub-mic">
+ <path name="rec-sub-mic" />
+ </path>
+
+ <path name="rec-high-gain-headset-mic">
+ <path name="rec-headset-mic" />
+ </path>
+
+ <path name="rec-high-gain-stereo-mic">
+ <path name="rec-main-mic" />
+ </path>
+
+ <path name="rec-NS-mic-interview">
+ <path name="main-sub-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="rec-NS-mic-conversation">
+ <path name="main-sub-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="rec-NS-mic-conference">
+ <path name="main-sub-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+ <!-- end of Recording Scenario -->
+
+ <!-- ================================================================ -->
+ <!-- recognition Scenario -->
+ <path name="vr-main-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="80" />
+ <ctl name="ADC1 Volume" value="40" />
+ </path>
+
+ <path name="vr-sub-mic">
+ <path name="sub-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="vr-headset-mic">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="88" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="bargein1-main-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="82" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="bargein1-sub-mic">
+ <path name="sub-mic" />
+ <ctl name="DEC1 Volume" value="103" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="bargein1-earphone-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="82" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="bargein1-headset-mic">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="82" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="bargein2-main-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="82" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="bargein2-sub-mic">
+ <path name="sub-mic" />
+ <ctl name="DEC1 Volume" value="103" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="bargein2-earphone-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="82" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="bargein2-headset-mic">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="82" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="svoice-main-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="82" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="svoice-NS-mic">
+ <path name="main-sub-mic" />
+ </path>
+
+ <path name="sdriving-NS-mic">
+ <path name="main-sub-mic" />
+ </path>
+
+ <path name="voice-wakeup">
+ </path>
+
+ <path name="voice-wakeup-lpsd">
+ </path>
+ <!-- end of recognition Scenario -->
+
+ <!-- ================================================================ -->
+ <!-- Voice call Scenario -->
+ <!-- RX part -->
+ <path name="voice-call-handset">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="79" />
+ </path>
+
+ <path name="voice-call-handset-extra-vol">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="79" />
+ </path>
+
+ <path name="voice-call-handset-emergency">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ </path>
+
+ <path name="voice-call-handset-hac">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ </path>
+
+ <path name="voice-call-speaker">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="82" />
+ </path>
+
+ <path name="voice-call-speaker-extra-vol">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="82" />
+ </path>
+
+ <path name="voice-call-speaker-emergency">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="83" />
+ </path>
+
+ <path name="voice-call-headset">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ <ctl name="RX2 Digital Volume" value="84" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <path name="voice-call-dock">
+ </path>
+
+ <!-- TX part -->
+ <path name="voice-call-main-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="voice-call-main-mic-emergency">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="voice-call-sub-mic">
+ <path name="sub-mic" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="voice-call-sub-mic-emergency">
+ <path name="sub-mic" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="voice-call-headphone-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="voice-call-headset-mic">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="94" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="voice-call-NS-mic-handset">
+ <path name="voice-call-main-mic" />
+ </path>
+
+ <path name="voice-call-NS-mic-speaker">
+ <path name="voice-call-main-mic" />
+ </path>
+ <!-- end of Voice call Scenario -->
+
+ <!-- ================================================================ -->
+ <!-- Voice call cp2 Scenario -->
+ <!-- RX part -->
+ <path name="voice-call-cp2-handset">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="79" />
+ </path>
+
+ <path name="voice-call-cp2-handset-extra-vol">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="79" />
+ </path>
+
+ <path name="voice-call-cp2-handset-emergency">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ </path>
+
+ <path name="voice-call-cp2-handset-hac">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ </path>
+
+ <path name="voice-call-cp2-speaker">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="84" />
+ </path>
+
+ <path name="voice-call-cp2-speaker-extra-vol">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="84" />
+ </path>
+
+ <path name="voice-call-cp2-speaker-emergency">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="80" />
+ </path>
+
+ <path name="voice-call-cp2-headset">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ <ctl name="RX2 Digital Volume" value="84" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <path name="voice-call-cp2-dock">
+ </path>
+
+ <!-- TX part -->
+ <path name="voice-call-cp2-main-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="voice-call-cp2-main-mic-emergency">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="voice-call-cp2-sub-mic">
+ <path name="sub-mic" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="voice-call-cp2-sub-mic-emergency">
+ <path name="sub-mic" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="voice-call-cp2-headphone-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="voice-call-cp2-headset-mic">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="94" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="voice-call-cp2-NS-mic-handset">
+ <path name="voice-call-main-mic" />
+ </path>
+
+ <path name="voice-call-cp2-NS-mic-speaker">
+ <path name="voice-call-main-mic" />
+ </path>
+ <!-- end of Voice call cp2 Scenario -->
+
+ <!-- ================================================================ -->
+ <!-- call forward Scenario -->
+ <path name="voice-call-forward">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="0" />
+ </path>
+
+ <path name="voice-call-forward-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="0" />
+ <ctl name="ADC1 Volume" value="0" />
+ </path>
+ <!-- end of call forward Scenario -->
+
+ <!-- ================================================================ -->
+ <!-- Video call Scenario -->
+ <!-- RX part -->
+ <path name="video-call-handset">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ </path>
+
+ <path name="video-call-handset-extra-vol">
+ <path name="video-call-handset" />
+ </path>
+
+ <path name="video-call-speaker">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="82" />
+ </path>
+
+ <path name="video-call-speaker-extra-vol">
+ <path name="video-call-speaker" />
+ </path>
+
+ <path name="video-call-headset">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ <ctl name="RX2 Digital Volume" value="84" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <path name="video-call-dock">
+ </path>
+
+ <!-- TX part -->
+ <path name="video-call-main-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="video-call-sub-mic">
+ <path name="voice-call-sub-mic" />
+ </path>
+
+ <path name="video-call-headphone-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="video-call-headset-mic">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="video-call-NS-mic-handset">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="video-call-NS-mic-speaker">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+ <!-- end of Video call Scenario -->
+
+ <!-- ================================================================ -->
+ <!-- VoLTE Voice call Scenario -->
+ <!-- RX part -->
+ <path name="VoLTE-voice-handset">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ </path>
+
+ <path name="VoLTE-voice-handset-extra-vol">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ </path>
+
+ <path name="VoLTE-voice-handset-hac">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ </path>
+
+ <path name="VoLTE-voice-speaker">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="80" />
+ </path>
+
+ <path name="VoLTE-voice-speaker-extra-vol">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="80" />
+ </path>
+
+ <path name="VoLTE-voice-headset">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ <ctl name="RX2 Digital Volume" value="84" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <path name="VoLTE-voice-dock">
+ </path>
+
+ <!-- TX part -->
+ <path name="VoLTE-voice-main-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="VoLTE-voice-sub-mic">
+ <path name="sub-mic" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="VoLTE-voice-headphone-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="VoLTE-voice-headset-mic">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="VoLTE-voice-NS-mic-handset">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="VoLTE-voice-NS-mic-speaker">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+ <!-- end of VoLTE Voice call Scenario -->
+
+ <!-- ================================================================ -->
+ <!-- VoLTE Video call Scenario -->
+ <!-- RX part -->
+ <path name="VoLTE-video-handset">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ </path>
+
+ <path name="VoLTE-video-handset-extra-vol">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ </path>
+
+ <path name="VoLTE-video-speaker">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="80" />
+ </path>
+
+ <path name="VoLTE-video-speaker-extra-vol">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="80" />
+ </path>
+
+ <path name="VoLTE-video-headset">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ <ctl name="RX2 Digital Volume" value="84" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <path name="VoLTE-video-dock">
+ </path>
+
+ <!-- TX part -->
+ <path name="VoLTE-video-main-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="VoLTE-video-sub-mic">
+ <path name="sub-mic" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="VoLTE-video-headphone-mic">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="VoLTE-video-headset-mic">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="VoLTE-video-NS-mic-handset">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="VoLTE-video-NS-mic-speaker">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+ <!-- end of VoLTE Video call Scenario -->
+
+ <!-- ================================================================ -->
+ <!-- TTY Scenario -->
+ <!-- RX part -->
+ <path name="TTY-handset">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ </path>
+
+ <path name="TTY-handset-extra-vol">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ </path>
+
+ <path name="TTY-headset">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="86" />
+ <ctl name="RX2 Digital Volume" value="86" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <path name="TTY-full">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="86" />
+ <ctl name="RX2 Digital Volume" value="86" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <!-- TX part -->
+ <path name="TTY-vco-mic">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="TTY-headset-mic">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="TTY-full-mic">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+ <!-- end of TTY Scenario -->
+
+ <!-- ================================================================ -->
+ <!-- VoIP Scenario -->
+ <!-- RX part -->
+ <path name="voip-handset-comm">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ </path>
+
+ <path name="voip-speaker-comm">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="80" />
+ </path>
+
+ <path name="voip-headset-comm">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ <ctl name="RX2 Digital Volume" value="84" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <path name="voip-handset-others">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ </path>
+
+ <path name="voip-speaker-others">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="80" />
+ </path>
+
+ <path name="voip-headset-others">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="86" />
+ <ctl name="RX2 Digital Volume" value="86" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <path name="voip-handset-chaton">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ </path>
+
+ <path name="voip-speaker-chaton">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="80" />
+ </path>
+
+ <path name="voip-headset-chaton">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="86" />
+ <ctl name="RX2 Digital Volume" value="86" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <path name="voip-handset-callforwarding">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ </path>
+
+ <path name="voip-speaker-callforwarding">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="80" />
+ </path>
+
+ <path name="voip-headset-callforwarding">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="86" />
+ <ctl name="RX2 Digital Volume" value="86" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <path name="voip-handset-webex">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ </path>
+
+ <path name="voip-speaker-webex">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="80" />
+ </path>
+
+ <path name="voip-headset-webex">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="86" />
+ <ctl name="RX2 Digital Volume" value="86" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <path name="voip-handset-carrier">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ </path>
+
+ <path name="voip-speaker-carrier">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="80" />
+ </path>
+
+ <path name="voip-headset-carrier">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="86" />
+ <ctl name="RX2 Digital Volume" value="86" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <path name="voip-handset-nonpcm">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="81" />
+ </path>
+
+ <path name="voip-speaker-nonpcm">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="80" />
+ </path>
+
+ <path name="voip-headset-nonpcm">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="86" />
+ <ctl name="RX2 Digital Volume" value="86" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <!-- TX part -->
+ <path name="voip-main-mic-comm">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="voip-sub-mic-comm">
+ <path name="sub-mic" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="voip-headphone-mic-comm">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="voip-headset-mic-comm">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="voip-main-mic-others">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="voip-sub-mic-others">
+ <path name="sub-mic" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="voip-headphone-mic-others">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="voip-headset-mic-others">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="voip-main-mic-chaton">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="voip-sub-mic-chaton">
+ <path name="sub-main-mic" />
+ </path>
+
+ <path name="voip-headphone-mic-chaton">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="voip-headset-mic-chaton">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="voip-main-mic-callforwarding">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="voip-sub-mic-callforwarding">
+ <path name="sub-mic" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="voip-headphone-mic-callforwarding">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="voip-headset-mic-callforwarding">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="voip-main-mic-webex">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="voip-sub-mic-webex">
+ <path name="sub-mic" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="voip-headphone-mic-webex">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="voip-headset-mic-webex">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="voip-main-mic-carrier">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="voip-sub-mic-carrier">
+ <path name="sub-mic" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="voip-headphone-mic-carrier">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="voip-headset-mic-carrier">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+
+ <path name="voip-main-mic-nonpcm">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="voip-sub-mic-nonpcm">
+ <path name="sub-mic" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="voip-headphone-mic-nonpcm">
+ <path name="main-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="4" />
+ </path>
+
+ <path name="voip-headset-mic-nonpcm">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="4" />
+ </path>
+ <!-- end of VoIP Scenario -->
+
+ <!-- ================================================================ -->
+ <!-- Factory Scenario -->
+ <!-- RX part -->
+ <path name="loopback-handset-DSP">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ </path>
+
+ <path name="loopback-handset-2mic-on-DSP">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ </path>
+
+ <path name="loopback-speaker-DSP">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="80" />
+ </path>
+
+ <path name="loopback-headset-DSP">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ <ctl name="RX2 Digital Volume" value="84" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <path name="loopback-handset">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ </path>
+
+ <path name="loopback-handset-2mic-on">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ </path>
+
+ <path name="loopback-speaker">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="80" />
+ </path>
+
+ <path name="loopback-headset">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ <ctl name="RX2 Digital Volume" value="84" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <!-- TX part -->
+ <path name="loopback-main-mic-DSP">
+ <path name="main-mic" />
+ <ctl name="ADC1 Volume" value="10" />
+ <ctl name="DEC1 Volume" value="81" />
+ </path>
+
+ <path name="loopback-main-mic-2mic-on-DSP">
+ <path name="main-mic" />
+ <ctl name="ADC1 Volume" value="4" />
+ <ctl name="DEC1 Volume" value="69" />
+ </path>
+
+ <path name="loopback-sub-mic-DSP">
+ <path name="loopback-main-mic-DSP" />
+ </path>
+
+ <path name="loopback-3rd-mic-DSP">
+ <path name="loopback-main-mic-DSP" />
+ </path>
+
+ <path name="loopback-headphone-mic-DSP">
+ <path name="main-mic" />
+ <ctl name="ADC1 Volume" value="4" />
+ <ctl name="DEC1 Volume" value="69" />
+ </path>
+
+ <path name="loopback-headset-mic-DSP">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="20" />
+ </path>
+
+ <path name="loopback-main-mic">
+ <path name="main-mic" />
+ <ctl name="ADC1 Volume" value="4" />
+ <ctl name="DEC1 Volume" value="69" />
+ </path>
+
+ <path name="loopback-main-mic-2mic-on">
+ <path name="main-mic" />
+ <ctl name="ADC1 Volume" value="4" />
+ <ctl name="DEC1 Volume" value="69" />
+ </path>
+
+ <path name="loopback-sub-mic">
+ <path name="sub-mic" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="loopback-3rd-mic">
+ <path name="3rd-mic" />
+ </path>
+
+ <path name="loopback-headphone-mic">
+ <path name="main-mic" />
+ <ctl name="ADC1 Volume" value="4" />
+ <ctl name="DEC1 Volume" value="69" />
+ </path>
+
+ <path name="loopback-headset-mic">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="20" />
+ </path>
+ <!-- end of Factory Scenario -->
+
+ <!-- Factory Scenario CP2-->
+ <!-- RX part -->
+ <path name="loopback-cp2-handset-DSP">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ </path>
+
+ <path name="loopback-cp2-handset-2mic-on-DSP">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ </path>
+
+ <path name="loopback-cp2-speaker-DSP">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="80" />
+ </path>
+
+ <path name="loopback-cp2-headset-DSP">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ <ctl name="RX2 Digital Volume" value="84" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <path name="loopback-cp2-handset">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ </path>
+
+ <path name="loopback-cp2-handset-2mic-on">
+ <path name="rcv" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ </path>
+
+ <path name="loopback-cp2-speaker">
+ <path name="spk" />
+ <ctl name="RX3 Digital Volume" value="80" />
+ </path>
+
+ <path name="loopback-cp2-headset">
+ <path name="ear" />
+ <ctl name="RX1 Digital Volume" value="84" />
+ <ctl name="RX2 Digital Volume" value="84" />
+ <ctl name="EAR PA Gain" value="POS_1P5_DB" />
+ </path>
+
+ <!-- TX part -->
+ <path name="loopback-cp2-main-mic-DSP">
+ <path name="main-mic" />
+ <ctl name="ADC1 Volume" value="4" />
+ <ctl name="DEC1 Volume" value="69" />
+ </path>
+
+ <path name="loopback-cp2-main-mic-2mic-on-DSP">
+ <path name="main-mic" />
+ <ctl name="ADC1 Volume" value="4" />
+ <ctl name="DEC1 Volume" value="69" />
+ </path>
+
+ <path name="loopback-cp2-sub-mic-DSP">
+ <path name="loopback-main-mic-DSP" />
+ </path>
+
+ <path name="loopback-cp2-3rd-mic-DSP">
+ <path name="loopback-main-mic-DSP" />
+ </path>
+
+ <path name="loopback-cp2-headphone-mic-DSP">
+ <path name="main-mic" />
+ <ctl name="ADC1 Volume" value="4" />
+ <ctl name="DEC1 Volume" value="69" />
+ </path>
+
+ <path name="loopback-cp2-headset-mic-DSP">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="20" />
+ </path>
+
+ <path name="loopback-cp2-main-mic">
+ <path name="main-mic" />
+ <ctl name="ADC1 Volume" value="4" />
+ <ctl name="DEC1 Volume" value="69" />
+ </path>
+
+ <path name="loopback-cp2-main-mic-2mic-on">
+ <path name="main-mic" />
+ <ctl name="ADC1 Volume" value="4" />
+ <ctl name="DEC1 Volume" value="69" />
+ </path>
+
+ <path name="loopback-cp2-sub-mic">
+ <path name="sub-mic" />
+ <ctl name="DEC1 Volume" value="68" />
+ <ctl name="ADC3 Volume" value="4" />
+ </path>
+
+ <path name="loopback-cp2-3rd-mic">
+ <path name="3rd-mic" />
+ </path>
+
+ <path name="loopback-cp2-headphone-mic">
+ <path name="main-mic" />
+ <ctl name="ADC1 Volume" value="4" />
+ <ctl name="DEC1 Volume" value="69" />
+ </path>
+
+ <path name="loopback-cp2-headset-mic">
+ <path name="ear-mic" />
+ <ctl name="DEC1 Volume" value="84" />
+ <ctl name="ADC2 Volume" value="20" />
+ </path>
+ <!-- end of Factory Scenario cp2-->
+
+ <path name="dummy">
+ </path>
+
+</mixer>
diff --git a/bluetooth/bdroid_buildcfg.h b/bluetooth/bdroid_buildcfg.h
new file mode 100644
index 0000000..ba7c0af
--- /dev/null
+++ b/bluetooth/bdroid_buildcfg.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2014 The CyanogenMod 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 "Galaxy Grand Prime"
+#define BLUETOOTH_QTI_SW TRUE
+#define BTA_DISABLE_DELAY 1000 /* in milliseconds */
+#define BLUETOOTH_QCOM_SW TRUE
+#define BLUETOOTH_QCOM_LE_INTL_SCAN TRUE
+#define BTC_INCLUDED TRUE
+// Disables read remote device feature
+#define BTA_SKIP_BLE_READ_REMOTE_FEAT FALSE
+#define MAX_ACL_CONNECTIONS 7
+#define MAX_L2CAP_CHANNELS 16
+// skips conn update at conn completion
+#define BTA_BLE_SKIP_CONN_UPD FALSE
+#define BLE_VND_INCLUDED TRUE
+#define BLE_PERIPHERAL_ADV_NAME TRUE
+#endif
diff --git a/cm.dependencies b/cm.dependencies
new file mode 100644
index 0000000..207aa7a
--- /dev/null
+++ b/cm.dependencies
@@ -0,0 +1,6 @@
+[
+ {
+ "repository": "android_hardware_samsung",
+ "target_path": "hardware/samsung"
+ }
+]
\ No newline at end of file
diff --git a/cm.mk b/cm.mk
new file mode 100644
index 0000000..b604a49
--- /dev/null
+++ b/cm.mk
@@ -0,0 +1,24 @@
+# Release name
+PRODUCT_RELEASE_NAME := Samsung Galaxy Grand Prime
+
+# Boot animation
+TARGET_SCREEN_WIDTH := 540
+TARGET_SCREEN_HEIGHT := 960
+
+$(call inherit-product, device/samsung/gprimeltecan/full_gprimeltecan.mk)
+
+# Enhanced NFC
+$(call inherit-product, vendor/cm/config/nfc_enhanced.mk)
+
+# Inherit some common CM stuff.
+$(call inherit-product, vendor/cm/config/common_full_phone.mk)
+
+## Device identifier. This must come after all inclusions
+PRODUCT_DEVICE := gprimeltecan
+PRODUCT_NAME := cm_gprimeltecan
+PRODUCT_BRAND := samsung
+PRODUCT_MODEL := SM-G530W
+PRODUCT_MANUFACTURER := samsung
+PRODUCT_CHARACTERISTICS := phone
+
+PRODUCT_GMS_CLIENTID_BASE := android-samsung
diff --git a/cmhw/src/org/cyanogenmod/hardware/DisplayColorCalibration.java b/cmhw/src/org/cyanogenmod/hardware/DisplayColorCalibration.java
new file mode 100644
index 0000000..80bbfad
--- /dev/null
+++ b/cmhw/src/org/cyanogenmod/hardware/DisplayColorCalibration.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2014 The CyanogenMod 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.
+ */
+
+package org.cyanogenmod.hardware;
+
+import java.io.File;
+import java.util.Scanner;
+import org.cyanogenmod.hardware.util.FileUtils;
+
+public class DisplayColorCalibration {
+ private static final String COLOR_FILE = "/sys/class/graphics/fb0/rgb";
+
+ public static boolean isSupported() {
+ File f = new File(COLOR_FILE);
+ return f.exists();
+ }
+
+ public static int getMaxValue() {
+ return 32768;
+ }
+
+ public static int getMinValue() {
+ return 255;
+ }
+
+ public static int getDefValue() {
+ return getMaxValue();
+ }
+
+ public static String getCurColors() {
+ return FileUtils.readOneLine(COLOR_FILE);
+ }
+
+ public static boolean setColors(String colors) {
+ return FileUtils.writeLine(COLOR_FILE, colors);
+ }
+}
diff --git a/configs/data/dsi_config.xml b/configs/data/dsi_config.xml
new file mode 100644
index 0000000..01958ca
--- /dev/null
+++ b/configs/data/dsi_config.xml
@@ -0,0 +1,110 @@
+<!--
+ DSI Module configuration XML file
+ Copyright (c) 2013 Qualcomm Technologies, Inc. All Rights Reserved.
+ Qualcomm Technologies Proprietary and Confidential.
+-->
+
+<?xml version="1.0" encoding="UTF-8"?>
+<list name="dsi_config">
+ <!-- Configuration for fusion4.5 PCIe -->
+ <listitem name="fusion4_5_pcie">
+
+ <data name="qos_enabled" type="int"> 0 </data>
+ <data name="rmnet_data_enabled" type="int"> 1 </data>
+ <data name="phys_net_dev" type="string"> rmnet_mhi0 </data>
+
+ <data name="single_qmux_channel_enabled" type="int"> 1 </data>
+ <data name="single_qmux_channel_name" type="string"> rmnet_mhi0 </data>
+
+ <data name="num_dsi_handles" type="int"> 8 </data>
+ <list name="device_names">
+ <data type="string"> rmnet_data0 </data>
+ <data type="string"> rmnet_data1 </data>
+ <data type="string"> rmnet_data2 </data>
+ <data type="string"> rmnet_data3 </data>
+ <data type="string"> rmnet_data4 </data>
+ <data type="string"> rmnet_data5 </data>
+ <data type="string"> rmnet_data6 </data>
+ <data type="string"> rmnet_data7 </data>
+ </list>
+
+ <list name="control_port_names">
+ <data type="string"> rmnet_mhi0 </data>
+ <data type="string"> rmnet_mhi0 </data>
+ <data type="string"> rmnet_mhi0 </data>
+ <data type="string"> rmnet_mhi0 </data>
+ <data type="string"> rmnet_mhi0 </data>
+ <data type="string"> rmnet_mhi0 </data>
+ <data type="string"> rmnet_mhi0 </data>
+ <data type="string"> rmnet_mhi0 </data>
+ </list>
+ </listitem>
+
+ <!-- Configuration for MSM8994 -->
+ <listitem name="msm8994">
+
+ <data name="qos_enabled" type="int"> 1 </data>
+ <data name="rmnet_data_enabled" type="int"> 1 </data>
+ <data name="phys_net_dev" type="string"> rmnet_ipa0 </data>
+
+ <data name="single_qmux_channel_enabled" type="int"> 1 </data>
+ <data name="single_qmux_channel_name" type="string"> rmnet0 </data>
+
+ <data name="num_dsi_handles" type="int"> 8 </data>
+ <list name="device_names">
+ <data type="string"> rmnet_data0 </data>
+ <data type="string"> rmnet_data1 </data>
+ <data type="string"> rmnet_data2 </data>
+ <data type="string"> rmnet_data3 </data>
+ <data type="string"> rmnet_data4 </data>
+ <data type="string"> rmnet_data5 </data>
+ <data type="string"> rmnet_data6 </data>
+ <data type="string"> rmnet_data7 </data>
+ </list>
+
+ <list name="control_port_names">
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ </list>
+ </listitem>
+
+ <!-- Configuration for dpm_2_0 targets -->
+ <listitem name="dpm_2_0">
+ <data name="qos_enabled" type="int"> 1 </data>
+ <data name="rmnet_data_enabled" type="int"> 1 </data>
+ <data name="phys_net_dev" type="string"> rmnet0 </data>
+
+ <data name="single_qmux_channel_enabled" type="int"> 1 </data>
+ <data name="single_qmux_channel_name" type="string"> rmnet0 </data>
+
+ <data name="num_dsi_handles" type="int"> 8 </data>
+ <list name="device_names">
+ <data type="string"> rmnet_data0 </data>
+ <data type="string"> rmnet_data1 </data>
+ <data type="string"> rmnet_data2 </data>
+ <data type="string"> rmnet_data3 </data>
+ <data type="string"> rmnet_data4 </data>
+ <data type="string"> rmnet_data5 </data>
+ <data type="string"> rmnet_data6 </data>
+ <data type="string"> rmnet_data7 </data>
+ </list>
+
+ <list name="control_port_names">
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ </list>
+ </listitem>
+</list>
+
diff --git a/configs/data/netmgr_config.xml b/configs/data/netmgr_config.xml
new file mode 100644
index 0000000..d4e6aa1
--- /dev/null
+++ b/configs/data/netmgr_config.xml
@@ -0,0 +1,248 @@
+<!--
+ Netmgr Module configuration XML file
+ Copyright (c) 2013 Qualcomm Technologies, Inc. All Rights Reserved.
+ Qualcomm Technologies Proprietary and Confidential.
+-->
+
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- QMI configuration -->
+<list name="netmgr_config">
+
+ <!-- Fusion4.5 (PCIe) parameters -->
+ <listitem name = "fusion4_5_pcie">
+
+ <data name="qmi_dpm_enabled" type="int"> 0 </data>
+ <data name="wda_data_format_enabled" type="int"> 1 </data>
+
+ <data name="single_qmux_ch_enabled" type="int"> 1 </data>
+ <data name="single_qmux_ch_conn_id_str" type="string"> rmnet_mhi0 </data>
+ <data name="single_qmux_ch_name" type="string"> MHICTL0 </data>
+
+ <data name="rmnet_data_enabled" type="int"> 1 </data>
+ <data name="dataformat_agg_dl_pkt" type="int"> 1 </data>
+ <data name="dataformat_agg_dl_size" type="int"> 2048 </data>
+ <data name="dataformat_dl_data_aggregation_protocol" type="int"> 7 </data>
+ <data name="phys_net_dev" type="string"> rmnet_mhi0 </data>
+
+ <data name="rps_mask" type="int"> 1 </data>
+ <data name="netdev_budget" type="int"> 9 </data>
+
+ <data name="low_latency_filters" type="int"> 1 </data>
+
+ <data name="num_modems" type="int"> 2 </data>
+ <list name="modems_enabled">
+ <data type="int"> 1 </data> <!-- MODEM_MSM -->
+ <data type="int"> 0 </data> <!-- MODEM_MDM -->
+ </list>
+
+ <data name="control_ports_len" type="int"> 8 </data>
+ <list name="control_ports">
+ <data type="string"> rmnet_data0 </data>
+ <data type="string"> rmnet_data1 </data>
+ <data type="string"> rmnet_data2 </data>
+ <data type="string"> rmnet_data3 </data>
+ <data type="string"> rmnet_data4 </data>
+ <data type="string"> rmnet_data5 </data>
+ <data type="string"> rmnet_data6 </data>
+ <data type="string"> rmnet_data7 </data>
+ </list>
+
+ <data name="data_ports_len" type="int"> 8 </data>
+ <list name="data_ports">
+ <data type="string"> rmnet_data0 </data>
+ <data type="string"> rmnet_data1 </data>
+ <data type="string"> rmnet_data2 </data>
+ <data type="string"> rmnet_data3 </data>
+ <data type="string"> rmnet_data4 </data>
+ <data type="string"> rmnet_data5 </data>
+ <data type="string"> rmnet_data6 </data>
+ <data type="string"> rmnet_data7 </data>
+ </list>
+
+ <data name="iwlan_enable" type="int"> 1 </data>
+ <data name="rev_control_ports_len" type="int"> 9 </data>
+ <list name="rev_control_ports">
+ <data type="string"> r_rmnet_data0 </data>
+ <data type="string"> r_rmnet_data1 </data>
+ <data type="string"> r_rmnet_data2 </data>
+ <data type="string"> r_rmnet_data3 </data>
+ <data type="string"> r_rmnet_data4 </data>
+ <data type="string"> r_rmnet_data5 </data>
+ <data type="string"> r_rmnet_data6 </data>
+ <data type="string"> r_rmnet_data7 </data>
+ <data type="string"> r_rmnet_data8 </data>
+ </list>
+
+ <data name="rev_data_ports_len" type="int"> 9 </data>
+ <list name="rev_data_ports">
+ <data type="string"> r_rmnet_data0 </data>
+ <data type="string"> r_rmnet_data1 </data>
+ <data type="string"> r_rmnet_data2 </data>
+ <data type="string"> r_rmnet_data3 </data>
+ <data type="string"> r_rmnet_data4 </data>
+ <data type="string"> r_rmnet_data5 </data>
+ <data type="string"> r_rmnet_data6 </data>
+ <data type="string"> r_rmnet_data7 </data>
+ <data type="string"> r_rmnet_data8 </data>
+ </list>
+
+ </listitem>
+
+ <!-- MSM8994 parameters -->
+ <listitem name = "msm8994">
+
+ <data name="qmi_dpm_enabled" type="int"> 1 </data>
+ <data name="wda_data_format_enabled" type="int"> 1 </data>
+
+ <data name="single_qmux_ch_enabled" type="int"> 1 </data>
+ <data name="single_qmux_ch_conn_id_str" type="string"> rmnet0 </data>
+ <data name="single_qmux_ch_name" type="string"> DATA5_CNTL </data>
+
+ <data name="rmnet_data_enabled" type="int"> 1 </data>
+ <data name="dataformat_agg_dl_pkt" type="int"> 1 </data>
+ <data name="dataformat_agg_dl_size" type="int"> 2048 </data>
+ <data name="dataformat_dl_data_aggregation_protocol" type="int"> 7 </data>
+ <data name="phys_net_dev" type="string"> rmnet_ipa0 </data>
+
+ <data name="rps_mask" type="int"> 0 </data>
+ <data name="netdev_budget" type="int"> 0 </data>
+ <data name="low_latency_filters" type="int"> 0 </data>
+
+ <data name="num_modems" type="int"> 2 </data>
+ <list name="modems_enabled">
+ <data type="int"> 1 </data> <!-- MODEM_MSM -->
+ <data type="int"> 0 </data> <!-- MODEM_MDM -->
+ </list>
+
+ <data name="control_ports_len" type="int"> 8 </data>
+ <list name="control_ports">
+ <data type="string"> rmnet_data0 </data>
+ <data type="string"> rmnet_data1 </data>
+ <data type="string"> rmnet_data2 </data>
+ <data type="string"> rmnet_data3 </data>
+ <data type="string"> rmnet_data4 </data>
+ <data type="string"> rmnet_data5 </data>
+ <data type="string"> rmnet_data6 </data>
+ <data type="string"> rmnet_data7 </data>
+ </list>
+
+ <data name="data_ports_len" type="int"> 8 </data>
+ <list name="data_ports">
+ <data type="string"> rmnet_data0 </data>
+ <data type="string"> rmnet_data1 </data>
+ <data type="string"> rmnet_data2 </data>
+ <data type="string"> rmnet_data3 </data>
+ <data type="string"> rmnet_data4 </data>
+ <data type="string"> rmnet_data5 </data>
+ <data type="string"> rmnet_data6 </data>
+ <data type="string"> rmnet_data7 </data>
+ </list>
+
+ <!-- iWLAN ports -->
+ <data name="iwlan_enable" type="int"> 1 </data>
+ <data name="rev_control_ports_len" type="int"> 9 </data>
+ <list name="rev_control_ports">
+ <data type="string"> r_rmnet_data0 </data>
+ <data type="string"> r_rmnet_data1 </data>
+ <data type="string"> r_rmnet_data2 </data>
+ <data type="string"> r_rmnet_data3 </data>
+ <data type="string"> r_rmnet_data4 </data>
+ <data type="string"> r_rmnet_data5 </data>
+ <data type="string"> r_rmnet_data6 </data>
+ <data type="string"> r_rmnet_data7 </data>
+ <data type="string"> r_rmnet_data8 </data>
+ </list>
+
+ <data name="rev_data_ports_len" type="int"> 9 </data>
+ <list name="rev_data_ports">
+ <data type="string"> r_rmnet_data0 </data>
+ <data type="string"> r_rmnet_data1 </data>
+ <data type="string"> r_rmnet_data2 </data>
+ <data type="string"> r_rmnet_data3 </data>
+ <data type="string"> r_rmnet_data4 </data>
+ <data type="string"> r_rmnet_data5 </data>
+ <data type="string"> r_rmnet_data6 </data>
+ <data type="string"> r_rmnet_data7 </data>
+ <data type="string"> r_rmnet_data8 </data>
+ </list>
+
+ </listitem>
+
+ <!-- DPM 2.0 parameters -->
+ <listitem name = "dpm_2_0">
+
+ <data name="qmi_dpm_enabled" type="int"> 0 </data>
+ <data name="wda_data_format_enabled" type="int"> 1 </data>
+
+ <data name="single_qmux_ch_enabled" type="int"> 1 </data>
+ <data name="single_qmux_ch_conn_id_str" type="string"> rmnet0 </data>
+ <data name="single_qmux_ch_name" type="string"> DATA5_CNTL </data>
+
+ <data name="rmnet_data_enabled" type="int"> 1 </data>
+ <data name="dataformat_agg_dl_pkt" type="int"> 1 </data>
+ <data name="dataformat_agg_dl_size" type="int"> 2048 </data>
+ <data name="phys_net_dev" type="string"> rmnet0 </data>
+ <data name="dataformat_dl_data_aggregation_protocol" type="int"> 5 </data>
+ <data name="rps_mask" type="int"> 10 </data>
+ <data name="netdev_budget" type="int"> 0 </data>
+ <data name="low_latency_filters" type="int"> 0 </data>
+ <data name="num_modems" type="int"> 2 </data>
+ <list name="modems_enabled">
+ <data type="int"> 1 </data> <!-- MODEM_MSM -->
+ <data type="int"> 0 </data> <!-- MODEM_MDM -->
+ </list>
+
+ <data name="control_ports_len" type="int"> 8 </data>
+ <list name="control_ports">
+ <data type="string"> rmnet_data0 </data>
+ <data type="string"> rmnet_data1 </data>
+ <data type="string"> rmnet_data2 </data>
+ <data type="string"> rmnet_data3 </data>
+ <data type="string"> rmnet_data4 </data>
+ <data type="string"> rmnet_data5 </data>
+ <data type="string"> rmnet_data6 </data>
+ <data type="string"> rmnet_data7 </data>
+ </list>
+
+ <data name="data_ports_len" type="int"> 8 </data>
+ <list name="data_ports">
+ <data type="string"> rmnet_data0 </data>
+ <data type="string"> rmnet_data1 </data>
+ <data type="string"> rmnet_data2 </data>
+ <data type="string"> rmnet_data3 </data>
+ <data type="string"> rmnet_data4 </data>
+ <data type="string"> rmnet_data5 </data>
+ <data type="string"> rmnet_data6 </data>
+ <data type="string"> rmnet_data7 </data>
+ </list>
+
+ <data name="iwlan_enable" type="int"> 0 </data>
+ <data name="rev_control_ports_len" type="int"> 9 </data>
+ <list name="rev_control_ports">
+ <data type="string"> r_rmnet_data0 </data>
+ <data type="string"> r_rmnet_data1 </data>
+ <data type="string"> r_rmnet_data2 </data>
+ <data type="string"> r_rmnet_data3 </data>
+ <data type="string"> r_rmnet_data4 </data>
+ <data type="string"> r_rmnet_data5 </data>
+ <data type="string"> r_rmnet_data6 </data>
+ <data type="string"> r_rmnet_data7 </data>
+ <data type="string"> r_rmnet_data8 </data>
+ </list>
+
+ <data name="rev_data_ports_len" type="int"> 9 </data>
+ <list name="rev_data_ports">
+ <data type="string"> r_rmnet_data0 </data>
+ <data type="string"> r_rmnet_data1 </data>
+ <data type="string"> r_rmnet_data2 </data>
+ <data type="string"> r_rmnet_data3 </data>
+ <data type="string"> r_rmnet_data4 </data>
+ <data type="string"> r_rmnet_data5 </data>
+ <data type="string"> r_rmnet_data6 </data>
+ <data type="string"> r_rmnet_data7 </data>
+ <data type="string"> r_rmnet_data8 </data>
+ </list>
+
+ </listitem>
+</list>
diff --git a/configs/data/qmi_config.xml b/configs/data/qmi_config.xml
new file mode 100644
index 0000000..a2361b8
--- /dev/null
+++ b/configs/data/qmi_config.xml
@@ -0,0 +1,107 @@
+<!--
+ QMI Module configuration XML file
+ Copyright (c) 2013-2014 Qualcomm Technologies, Inc. All Rights Reserved.
+ Qualcomm Technologies Proprietary and Confidential.
+-->
+
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- QMI configuration -->
+<list name="qmi_config">
+
+ <!-- Fusion4.5 (PCIe) parameters -->
+ <listitem name = "fusion4_5_pcie">
+
+ <data name="single_qmux_ch" type="int"> 1 </data>
+ <data name="control_ports_len" type="int"> 2 </data>
+
+ <list name="conn_str">
+ <data type="string"> QMI_PORT_RMNET_MHI_0 </data>
+ <data type="string"> QMI_PORT_RMNET_MHI_1 </data>
+ </list>
+
+ <list name="conn_id">
+ <data type="string"> QMI_CONN_ID_RMNET_MHI_0 </data>
+ <data type="string"> QMI_CONN_ID_RMNET_MHI_1 </data>
+ </list>
+
+ <list name="dev_name">
+ <data type="string"> /dev/mhi_pipe_14 </data>
+ <data type="string"> /dev/mhi_pipe_16 </data>
+ </list>
+
+ <list name="dev_name_test">
+ <data type="string"> /tmp/data/mhi_pipe_14 </data>
+ <data type="string"> /tmp/data/mhi_pipe_16 </data>
+ </list>
+
+ <list name="ch_name">
+ <data type="string"> MHICTL0 </data>
+ <data type="string"> MHICTL1 </data>
+ </list>
+
+ <list name="transport">
+ <data type="string"> LINUX_QMI_TRANSPORT_MHI </data>
+ <data type="string"> LINUX_QMI_TRANSPORT_MHI </data>
+ </list>
+
+ <list name="enabled">
+ <data type="int"> 1 </data>
+ <data type="int"> 1 </data>
+ </list>
+
+ <list name="open_at_powerup">
+ <data type="int"> 1 </data>
+ <data type="int"> 0 </data>
+ </list>
+
+ </listitem>
+
+ <!-- MSM8994 parameters -->
+ <listitem name = "msm8994">
+
+ <data name="single_qmux_ch" type="int"> 1 </data>
+ <data name="control_ports_len" type="int"> 1 </data>
+
+ <list name="conn_str">
+ <data type="string"> QMI_PORT_RMNET_IPA_0 </data>
+ </list>
+
+ <list name="conn_id">
+ <data type="string"> QMI_CONN_ID_RMNET_0 </data>
+ <data type="string"> QMI_CONN_ID_RMNET_8 </data>
+ </list>
+
+ <list name="dev_name">
+ <data type="string"> /dev/smdcntl0 </data>
+ <data type="string"> /dev/smdcntl8 </data>
+ </list>
+
+ <list name="dev_name_test">
+ <data type="string"> /tmp/data/smdcntl0 </data>
+ <data type="string"> /tmp/data/smdcntl8 </data>
+ </list>
+
+ <list name="ch_name">
+ <data type="string"> DATA5_CNTL </data>
+ <data type="string"> DATA14_CNTL </data>
+ </list>
+
+ <list name="transport">
+ <data type="string"> LINUX_QMI_TRANSPORT_SMD </data>
+ <data type="string"> LINUX_QMI_TRANSPORT_SMD </data>
+ </list>
+
+ <list name="enabled">
+ <data type="int"> 1 </data>
+ <data type="int"> 1 </data>
+ </list>
+
+ <list name="open_at_powerup">
+ <data type="int"> 1 </data>
+ </list>
+
+ </listitem>
+
+</list>
+
diff --git a/configs/msm_irqbalance.conf b/configs/msm_irqbalance.conf
new file mode 100644
index 0000000..7902c27
--- /dev/null
+++ b/configs/msm_irqbalance.conf
@@ -0,0 +1,2 @@
+PRIO=0,0,0,0,1,1,1,1
+IGNORED_IRQ=20,39,200,203
diff --git a/configs/sec_config b/configs/sec_config
new file mode 100755
index 0000000..b6f2516
--- /dev/null
+++ b/configs/sec_config
@@ -0,0 +1,271 @@
+/* IPC Security Config */
+/* <GPS QMI Service ID - 16>:<GPS QMI Instance ID - all instances>:<Client Group ID> */
+16:4294967295:1000:3004
+/* Allow SS CTL service to be used by system and net_raw processes */
+43:4294967295:1000:3004
+/* Allow Sensor services to be used by sensor process */
+256:4294967295:3011
+257:4294967295:3011
+258:4294967295:3011
+259:4294967295:3011
+260:4294967295:3011
+261:4294967295:3011
+262:4294967295:3011
+263:4294967295:3011
+264:4294967295:3011
+265:4294967295:3011
+266:4294967295:3011
+267:4294967295:3011
+268:4294967295:3011
+269:4294967295:3011
+270:4294967295:3011
+271:4294967295:3011
+272:4294967295:3011
+273:4294967295:3011
+274:4294967295:3011
+275:4294967295:3011
+276:4294967295:3011
+277:4294967295:3011
+278:4294967295:3011
+279:4294967295:3011
+280:4294967295:3011
+281:4294967295:3011
+282:4294967295:3011
+283:4294967295:3011
+284:4294967295:3011
+285:4294967295:3011
+286:4294967295:3011
+287:4294967295:3011
+288:4294967295:3011
+289:4294967295:3011
+290:4294967295:3011
+291:4294967295:3011
+292:4294967295:3011
+293:4294967295:3011
+294:4294967295:3011
+295:4294967295:3011
+296:4294967295:3011
+297:4294967295:3011
+298:4294967295:3011
+299:4294967295:3011
+300:4294967295:3011
+301:4294967295:3011
+302:4294967295:3011
+303:4294967295:3011
+304:4294967295:3011
+305:4294967295:3011
+306:4294967295:3011
+307:4294967295:3011
+308:4294967295:3011
+309:4294967295:3011
+310:4294967295:3011
+311:4294967295:3011
+312:4294967295:3011
+313:4294967295:3011
+314:4294967295:3011
+315:4294967295:3011
+316:4294967295:3011
+317:4294967295:3011
+318:4294967295:3011
+319:4294967295:3011
+320:4294967295:3011
+321:4294967295:3011
+322:4294967295:3011
+323:4294967295:3011
+324:4294967295:3011
+325:4294967295:3011
+326:4294967295:3011
+327:4294967295:3011
+328:4294967295:3011
+329:4294967295:3011
+330:4294967295:3011
+331:4294967295:3011
+332:4294967295:3011
+333:4294967295:3011
+334:4294967295:3011
+335:4294967295:3011
+336:4294967295:3011
+337:4294967295:3011
+338:4294967295:3011
+339:4294967295:3011
+340:4294967295:3011
+341:4294967295:3011
+342:4294967295:3011
+343:4294967295:3011
+344:4294967295:3011
+345:4294967295:3011
+346:4294967295:3011
+347:4294967295:3011
+348:4294967295:3011
+349:4294967295:3011
+350:4294967295:3011
+351:4294967295:3011
+352:4294967295:3011
+353:4294967295:3011
+354:4294967295:3011
+355:4294967295:3011
+356:4294967295:3011
+357:4294967295:3011
+358:4294967295:3011
+359:4294967295:3011
+360:4294967295:3011
+361:4294967295:3011
+362:4294967295:3011
+363:4294967295:3011
+364:4294967295:3011
+365:4294967295:3011
+366:4294967295:3011
+367:4294967295:3011
+368:4294967295:3011
+369:4294967295:3011
+370:4294967295:3011
+371:4294967295:3011
+372:4294967295:3011
+373:4294967295:3011
+374:4294967295:3011
+375:4294967295:3011
+376:4294967295:3011
+377:4294967295:3011
+378:4294967295:3011
+379:4294967295:3011
+380:4294967295:3011
+381:4294967295:3011
+382:4294967295:3011
+383:4294967295:3011
+384:4294967295:3011
+385:4294967295:3011
+386:4294967295:3011
+387:4294967295:3011
+388:4294967295:3011
+389:4294967295:3011
+390:4294967295:3011
+391:4294967295:3011
+392:4294967295:3011
+393:4294967295:3011
+394:4294967295:3011
+395:4294967295:3011
+396:4294967295:3011
+397:4294967295:3011
+398:4294967295:3011
+399:4294967295:3011
+400:4294967295:3011
+401:4294967295:3011
+402:4294967295:3011
+403:4294967295:3011
+404:4294967295:3011
+405:4294967295:3011
+406:4294967295:3011
+407:4294967295:3011
+408:4294967295:3011
+409:4294967295:3011
+410:4294967295:3011
+411:4294967295:3011
+412:4294967295:3011
+413:4294967295:3011
+414:4294967295:3011
+415:4294967295:3011
+416:4294967295:3011
+417:4294967295:3011
+418:4294967295:3011
+419:4294967295:3011
+420:4294967295:3011
+421:4294967295:3011
+422:4294967295:3011
+423:4294967295:3011
+424:4294967295:3011
+425:4294967295:3011
+426:4294967295:3011
+427:4294967295:3011
+428:4294967295:3011
+429:4294967295:3011
+430:4294967295:3011
+431:4294967295:3011
+432:4294967295:3011
+433:4294967295:3011
+434:4294967295:3011
+435:4294967295:3011
+436:4294967295:3011
+437:4294967295:3011
+438:4294967295:3011
+439:4294967295:3011
+440:4294967295:3011
+441:4294967295:3011
+442:4294967295:3011
+443:4294967295:3011
+444:4294967295:3011
+445:4294967295:3011
+446:4294967295:3011
+447:4294967295:3011
+448:4294967295:3011
+449:4294967295:3011
+450:4294967295:3011
+451:4294967295:3011
+452:4294967295:3011
+453:4294967295:3011
+454:4294967295:3011
+455:4294967295:3011
+456:4294967295:3011
+457:4294967295:3011
+458:4294967295:3011
+459:4294967295:3011
+460:4294967295:3011
+461:4294967295:3011
+462:4294967295:3011
+463:4294967295:3011
+464:4294967295:3011
+465:4294967295:3011
+466:4294967295:3011
+467:4294967295:3011
+468:4294967295:3011
+469:4294967295:3011
+470:4294967295:3011
+471:4294967295:3011
+472:4294967295:3011
+473:4294967295:3011
+474:4294967295:3011
+475:4294967295:3011
+476:4294967295:3011
+477:4294967295:3011
+478:4294967295:3011
+479:4294967295:3011
+480:4294967295:3011
+481:4294967295:3011
+482:4294967295:3011
+483:4294967295:3011
+484:4294967295:3011
+485:4294967295:3011
+486:4294967295:3011
+487:4294967295:3011
+488:4294967295:3011
+489:4294967295:3011
+490:4294967295:3011
+491:4294967295:3011
+492:4294967295:3011
+493:4294967295:3011
+494:4294967295:3011
+495:4294967295:3011
+496:4294967295:3011
+497:4294967295:3011
+498:4294967295:3011
+499:4294967295:3011
+500:4294967295:3011
+501:4294967295:3011
+502:4294967295:3011
+503:4294967295:3011
+504:4294967295:3011
+505:4294967295:3011
+506:4294967295:3011
+507:4294967295:3011
+508:4294967295:3011
+509:4294967295:3011
+510:4294967295:3011
+511:4294967295:3011
+/* Allow RCS service to aquire net_raw permission */
+18:4294967295:1001:3004
+/* Allow QMID service to aquire net_raw permission */
+3:4294967295:1001:3004
+2:4294967295:1001:3004
+42:4294967295:1001:3004
+18:4294967295:1001:3004
+9:4294967295:1001:3004
+1:4294967295:1001:3004
diff --git a/device.mk b/device.mk
new file mode 100644
index 0000000..d564e3d
--- /dev/null
+++ b/device.mk
@@ -0,0 +1,275 @@
+LOCAL_PATH := device/samsung/gprimeltecan
+$(call inherit-product-if-exists, vendor/samsung/gprimeltecan/gprimeltecan-vendor.mk)
+$(call inherit-product, $(SRC_TARGET_DIR)/product/languages_full.mk)
+
+# Inherit from common
+$(call inherit-product, device/samsung/qcom-common/qcom-common.mk)
+
+# Also get non-open-source specific aspects if available
+$(call inherit-product-if-exists, vendor/samsung/gprimeltecan/gprimeltecan-common-vendor.mk)
+
+# Common overlay
+DEVICE_PACKAGE_OVERLAYS += device/samsung/gprimeltecan/overlay
+
+ifeq ($(TARGET_PREBUILT_KERNEL),)
+ LOCAL_KERNEL := device/samsung/gprimeltecan/kernel
+else
+ LOCAL_KERNEL := $(TARGET_PREBUILT_KERNEL)
+endif
+
+PRODUCT_COPY_FILES += \
+ $(LOCAL_KERNEL):kernel
+
+#Android EGL implementation
+PRODUCT_PACKAGES += libGLES_android
+
+PRODUCT_PACKAGES += libtime_genoff
+
+# ANT+
+PRODUCT_PACKAGES += \
+ AntHalService \
+ antradio_app \
+ com.dsi.ant.antradio_library \
+ libantradio
+
+# Audio
+PRODUCT_PACKAGES += \
+ audio.a2dp.default \
+ audio.primary.msm8916 \
+ audio.r_submix.default \
+ audio.usb.default \
+ audiod \
+ libaudio-resampler \
+ libqcompostprocbundle \
+ libqcomvisualizer \
+ libqcomvoiceprocessing \
+ tinymix
+
+# Audio configuration
+PRODUCT_COPY_FILES += \
+ $(LOCAL_PATH)/audio/Bluetooth_cal.acdb:system/etc/Bluetooth_cal.acdb \
+ $(LOCAL_PATH)/audio/General_cal.acdb:system/etc/General_cal.acdb \
+ $(LOCAL_PATH)/audio/Global_cal.acdb:system/etc/Global_cal.acdb \
+ $(LOCAL_PATH)/audio/Handset_cal.acdb:system/etc/Handset_cal.acdb \
+ $(LOCAL_PATH)/audio/Hdmi_cal.acdb:system/etc/Hdmi_cal.acdb \
+ $(LOCAL_PATH)/audio/Headset_cal.acdb:system/etc/Headset_cal.acdb \
+ $(LOCAL_PATH)/audio/Speaker_cal.acdb:system/etc/Speaker_cal.acdb \
+ $(LOCAL_PATH)/audio/audio_effects.conf:system/vendor/etc/audio_effects.conf \
+ $(LOCAL_PATH)/audio/audio_policy.conf:system/etc/audio_policy.conf \
+ $(LOCAL_PATH)/audio/mixer_paths.xml:system/etc/mixer_paths.xml
+
+# Boot jars
+PRODUCT_BOOT_JARS += \
+ qcom.fmradio \
+# oem-services \
+ tcmiface \
+ qcmediaplayer
+
+# Connectivity Engine support
+PRODUCT_PACKAGES += \
+ libcnefeatureconfig
+
+# Display
+PRODUCT_PACKAGES += \
+ copybit.msm8916 \
+ gralloc.msm8916 \
+ hwcomposer.msm8916 \
+ libtinyxml \
+ memtrack.msm8916
+
+# Ebtables
+PRODUCT_PACKAGES += \
+ ebtables \
+ ethertypes \
+ libebtc
+
+# FM
+PRODUCT_PACKAGES += \
+# FM2 \
+# FMRecord \
+ libqcomfm_jni \
+ qcom.fmradio
+
+# INIT
+PRODUCT_PACKAGES += \
+ fstab.qcom \
+ init.carrier.rc \
+ init.class_main.sh \
+ init.mdm.sh \
+ init.qcom.bms.sh \
+ init.qcom.class_core.sh \
+ init.qcom.early_boot.sh \
+ init.qcom.factory.sh \
+ init.qcom.syspart_fixup.sh \
+ init.qcom.usb.rc \
+ init.qcom.usb.sh \
+ init.qcom.rc \
+ init.qcom.sh \
+ init.target.rc \
+ ueventd.qcom.rc
+
+# Keylayout
+PRODUCT_COPY_FILES += \
+ $(LOCAL_PATH)/keylayout/ft5x06_ts.kl:system/usr/keylayout/ft5x06_ts.kl \
+ $(LOCAL_PATH)/keylayout/gpio-keys.kl:system/usr/keylayout/gpio-keys.kl \
+ $(LOCAL_PATH)/keylayout/synaptics_dsx.kl:system/usr/keylayout/synaptics_dsx.kl \
+ $(LOCAL_PATH)/keylayout/synaptics_rmi4_i2c.kl:system/usr/keylayout/synaptics_rmi4_i2c.kl
+
+# Keystore
+PRODUCT_PACKAGES += \
+ keystore.msm8916
+
+# libhealthd.qcom
+PRODUCT_PACKAGES += \
+ libhealthd
+
+# Lights
+PRODUCT_PACKAGES += \
+ lights.msm8916
+
+# Live Wallpapers
+PRODUCT_PACKAGES += \
+ librs_jni
+
+# GPS
+PRODUCT_PACKAGES += \
+ gps.msm8916
+
+PRODUCT_COPY_FILES += \
+ $(LOCAL_PATH)/gps/flp.conf:system/etc/flp.conf \
+ $(LOCAL_PATH)/gps/gps.conf:system/etc/gps.conf \
+ $(LOCAL_PATH)/gps/izat.conf:system/etc/izat.conf \
+ $(LOCAL_PATH)/gps/sap.conf:system/etc/sap.conf
+
+# macloader
+PRODUCT_PACKAGES += macloader
+
+# Media
+PRODUCT_COPY_FILES += \
+ frameworks/av/media/libstagefright/data/media_codecs_google_audio.xml:system/etc/media_codecs_google_audio.xml \
+ frameworks/av/media/libstagefright/data/media_codecs_google_telephony.xml:system/etc/media_codecs_google_telephony.xml \
+ frameworks/av/media/libstagefright/data/media_codecs_google_video.xml:system/etc/media_codecs_google_video.xml \
+# frameworks/av/media/libstagefright/data/media_codecs_ffmpeg.xml:system/etc/media_codecs_ffmpeg.xml \
+ $(LOCAL_PATH)/media/media_codecs.xml:system/etc/media_codecs.xml \
+ $(LOCAL_PATH)/media/media_profiles.xml:system/etc/media_profiles.xml
+
+# MSM IRQ Balancer configuration file
+PRODUCT_COPY_FILES += \
+ $(LOCAL_PATH)/configs/msm_irqbalance.conf:system/vendor/etc/msm_irqbalance.conf
+
+# Misc
+PRODUCT_PACKAGES += \
+ curl \
+ libbson \
+ libcurl \
+ tcpdump
+
+# OMX
+PRODUCT_PACKAGES += \
+ libdashplayer \
+ libdivxdrmdecrypt \
+ libmm-omxcore \
+ libOmxAacEnc \
+ libOmxAmrEnc \
+ libOmxCore \
+ libOmxEvrcEnc \
+ libOmxQcelp13Enc \
+ libOmxSwVencMpeg4 \
+ libOmxVdec \
+ libOmxVdecHevc \
+ libOmxVenc \
+ libOmxVidEnc \
+ libOmxVdpp \
+ libstagefrighthw \
+ qcmediaplayer
+
+# Overlay
+DEVICE_PACKAGE_OVERLAYS += $(LOCAL_PATH)/overlay
+
+# Permissions
+PRODUCT_COPY_FILES += \
+ frameworks/native/data/etc/android.hardware.audio.low_latency.xml:system/etc/permissions/android.hardware.audio.low_latency.xml \
+ 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 \
+ frameworks/native/data/etc/android.hardware.camera.flash-autofocus.xml:system/etc/permissions/android.hardware.camera.flash-autofocus.xml \
+ frameworks/native/data/etc/android.hardware.camera.front.xml:system/etc/permissions/android.hardware.camera.front.xml \
+ frameworks/native/data/etc/android.hardware.location.gps.xml:system/etc/permissions/android.hardware.location.gps.xml \
+ frameworks/native/data/etc/android.hardware.nfc.hce.xml:system/etc/permissions/android.hardware.nfc.hce.xml \
+ frameworks/native/data/etc/android.hardware.nfc.xml:system/etc/permissions/android.hardware.nfc.xml \
+ frameworks/native/data/etc/android.hardware.sensor.accelerometer.xml:system/etc/permissions/android.hardware.sensor.accelerometer.xml \
+ frameworks/native/data/etc/android.hardware.sensor.compass.xml:system/etc/permissions/android.hardware.sensor.compass.xml \
+ frameworks/native/data/etc/android.hardware.sensor.gyroscope.xml:system/etc/permissions/android.hardware.sensor.gyroscope.xml \
+ frameworks/native/data/etc/android.hardware.sensor.light.xml:system/etc/permissions/android.hardware.sensor.light.xml \
+ frameworks/native/data/etc/android.hardware.sensor.proximity.xml:system/etc/permissions/android.hardware.sensor.proximity.xml \
+ frameworks/native/data/etc/android.hardware.telephony.cdma.xml:system/etc/permissions/android.hardware.telephony.cdma.xml \
+ frameworks/native/data/etc/android.hardware.telephony.gsm.xml:system/etc/permissions/android.hardware.telephony.gsm.xml \
+ frameworks/native/data/etc/android.hardware.touchscreen.multitouch.jazzhand.xml:system/etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml \
+ frameworks/native/data/etc/android.hardware.usb.accessory.xml:system/etc/permissions/android.hardware.usb.accessory.xml \
+ frameworks/native/data/etc/android.hardware.usb.host.xml:system/etc/permissions/android.hardware.usb.host.xml \
+ frameworks/native/data/etc/android.hardware.wifi.direct.xml:system/etc/permissions/android.hardware.wifi.direct.xml \
+ frameworks/native/data/etc/android.hardware.wifi.xml:system/etc/permissions/android.hardware.wifi.xml \
+ frameworks/native/data/etc/android.software.print.xml:system/etc/permissions/android.software.print.xml \
+ frameworks/native/data/etc/android.software.sip.voip.xml:system/etc/permissions/android.software.sip.voip.xml \
+ frameworks/native/data/etc/handheld_core_hardware.xml:system/etc/permissions/handheld_core_hardware.xml
+
+# Power HAL
+PRODUCT_PACKAGES += \
+ power.msm8916
+
+# Prebuilt
+PRODUCT_COPY_FILES += \
+ $(LOCAL_PATH)/prebuilt/dsi_config.xml:system/etc/data/dsi_config.xml \
+ $(LOCAL_PATH)/prebuilt/netmgr_config.xml:system/etc/data/netmgr_config.xml \
+ $(LOCAL_PATH)/prebuilt/qmi_config.xml:system/etc/data/qmi_config.xml
+
+# Properties
+PRODUCT_PROPERTY_OVERRIDES += \
+ ro.use_data_netmgrd=false \
+ dalvik.vm.heapgrowthlimit=128m \
+ ro.security.icd.flagmode=single \
+ ro.vendor.extension_library=libqti-perfd-client.so \
+ persist.radio.apm_sim_not_pwdn=1 \
+ persist.gps.qc_nlp_in_use=1 \
+ persist.loc.nlp_name=com.qualcomm.location \
+ ro.gps.agps_provider=1 \
+ ro.pip.gated=0
+
+# Ril
+PRODUCT_PACKAGES += \
+ libxml2
+
+# Screen density
+PRODUCT_AAPT_CONFIG := normal hdpi xhdpi
+PRODUCT_AAPT_PREF_CONFIG := xhdpi
+
+# security config
+PRODUCT_COPY_FILES += \
+ $(LOCAL_PATH)/configs/sec_config:system/etc/sec_config
+
+# Terminal
+PRODUCT_PACKAGES += Terminal
+
+# USB
+PRODUCT_PACKAGES += \
+ com.android.future.usb.accessory
+
+# Wifi
+PRODUCT_COPY_FILES += \
+ $(LOCAL_PATH)/wifi/wpa_supplicant.conf:system/etc/wifi/wpa_supplicant.conf \
+ $(LOCAL_PATH)/wifi/p2p_supplicant_overlay.conf:system/etc/wifi/p2p_supplicant_overlay.conf \
+ $(LOCAL_PATH)/wifi/wpa_supplicant_overlay.conf:system/etc/wifi/wpa_supplicant_overlay.conf \
+ $(LOCAL_PATH)/wifi/WCNSS_cfg.dat:system/etc/firmware/wlan/prima/WCNSS_cfg.dat \
+ $(LOCAL_PATH)/wifi/WCNSS_qcom_cfg.ini:system/etc/firmware/wlan/prima/WCNSS_qcom_cfg.ini \
+ $(LOCAL_PATH)/wifi/WCNSS_qcom_wlan_nv.bin:system/etc/firmware/wlan/prima/WCNSS_qcom_wlan_nv.bin
+
+PRODUCT_PACKAGES += \
+ hostapd \
+ hostapd_cli \
+ libQWiFiSoftApCfg \
+ libqsap_sdk \
+ libwpa_client \
+ wcnss_service \
+ wpa_supplicant
+
+# Inhert dalvik heap values from aosp
+$(call inherit-product, frameworks/native/build/phone-xhdpi-1024-dalvik-heap.mk)
diff --git a/dt.img b/dt.img
new file mode 100644
index 0000000..d8ab7a5
--- /dev/null
+++ b/dt.img
Binary files differ
diff --git a/full_gprimeltecan.mk b/full_gprimeltecan.mk
new file mode 100644
index 0000000..c47ce33
--- /dev/null
+++ b/full_gprimeltecan.mk
@@ -0,0 +1,31 @@
+#
+# Copyright (C) 2015 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.
+#
+
+# Inherit from those products. Most specific first.
+$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base_telephony.mk)
+
+# Inherit from device.mk
+$(call inherit-product, device/samsung/gprimeltecan/device.mk)
+
+# Device identifier. This must come after all inclusions
+PRODUCT_DEVICE := gprimeltecan
+PRODUCT_NAME := full_gprimeltecan
+PRODUCT_BRAND := samsung
+PRODUCT_MODEL := SM-G530W
+PRODUCT_MANUFACTURER := samsung
+
+
+$(call inherit-product-if-exists, vendor/samsung/gprimeltecan/gprimeltecan-vendor.mk)
diff --git a/gps.tgz b/gps.tgz
new file mode 100644
index 0000000..16709f4
--- /dev/null
+++ b/gps.tgz
Binary files differ
diff --git a/gps/flp.conf b/gps/flp.conf
new file mode 100644
index 0000000..7d6002f
--- /dev/null
+++ b/gps/flp.conf
@@ -0,0 +1,60 @@
+###################################
+##### FLP settings #####
+###################################
+
+###################################
+# FLP BATCHING SIZE
+###################################
+# The number of batched locations
+# requested to modem. The desired number
+# defined below may not be satisfied, as
+# the modem can only return the number
+# of batched locations that can be allocated,
+# which is limited by memory. The default
+# batch size defined as 20 as below.
+BATCH_SIZE=20
+
+###################################
+# FLP BATCHING SESSION TIMEOUT
+###################################
+# Duration with which batch session timeout
+# happens in milliseconds. If not specified
+# or set to zero, batching session timeout
+# defaults to 20 seconds by the modem.
+# BATCH_SESSION_TIMEOUT=20000
+
+###################################
+# FLP CAPABILITIES BIT MASK
+###################################
+# GEOFENCE = 0x01
+# BATCHING = 0x02
+# default = GEOFENCE | BATCHING
+CAPABILITIES=0x03
+
+###################################
+# FLP BATCHING ACCURACY
+###################################
+# Set to one of the defined values below
+# to define the accuracy of batching.
+# If not specified, accuracy defaults
+# to LOW.
+# FLP BATCHING ACCURACY values:
+# Low accuracy = 0
+# Medium accuracy = 1
+# High accuracy = 2
+ACCURACY=0
+
+###################################
+# FLP GEOFENCE RESPONSIVENESS
+###################################
+# If set to one of the defined values below,
+# it will override the responsiveness for
+# FLP geofence, which implements the fused
+# location API. If not set to a value defined
+# below, which is default, it will not
+# override the responsivness.
+# FLP_GEOFENCE_RESPONSIVENESS_OVERRIDE Values:
+# 1: LOW responsiveness
+# 2: MEDIUM responsiveness
+# 3: HIGH responsiveness
+FLP_GEOFENCE_RESPONSIVENESS_OVERRIDE = 0
diff --git a/gps/gps.conf b/gps/gps.conf
new file mode 100644
index 0000000..be9755d
--- /dev/null
+++ b/gps/gps.conf
@@ -0,0 +1,119 @@
+#Uncommenting these urls would only enable
+#the power up auto injection and force injection(test case).
+XTRA_SERVER_1=http://xtrapath1.izatcloud.net/xtra3grc.bin
+XTRA_SERVER_2=http://xtrapath2.izatcloud.net/xtra3grc.bin
+XTRA_SERVER_3=http://xtrapath3.izatcloud.net/xtra3grc.bin
+
+#Version check for XTRA
+#DISABLE = 0
+#AUTO = 1
+#XTRA2 = 2
+#XTRA3 = 3
+XTRA_VERSION_CHECK=0
+
+# Error Estimate
+# _SET = 1
+# _CLEAR = 0
+ERR_ESTIMATE=0
+
+#Test
+NTP_SERVER=time.izatcloud.net
+#Asia
+# NTP_SERVER=asia.pool.ntp.org
+#Europe
+# NTP_SERVER=europe.pool.ntp.org
+#North America
+# NTP_SERVER=north-america.pool.ntp.org
+
+# DEBUG LEVELS: 0 - none, 1 - Error, 2 - Warning, 3 - Info
+# 4 - Debug, 5 - Verbose
+# If DEBUG_LEVEL is commented, Android's logging levels will be used
+DEBUG_LEVEL = 4
+
+# Intermediate position report, 1=enable, 0=disable
+INTERMEDIATE_POS=0
+
+# Below bit mask configures how GPS functionalities
+# should be locked when user turns off GPS on Settings
+# Set bit 0x1 if MO GPS functionalities are to be locked
+# Set bit 0x2 if NI GPS functionalities are to be locked
+# default - non is locked for backward compatibility
+#GPS_LOCK = 0
+
+# supl version 1.0
+SUPL_VER=0x10000
+
+# Emergency SUPL, 1=enable, 0=disable
+SUPL_ES=0
+# Sensor R&D : Non-SUPL ES should be default
+
+#Choose PDN for Emergency SUPL
+#1 - Use emergency PDN
+#0 - Use regular SUPL PDN for Emergency SUPL
+USE_EMERGENCY_PDN_FOR_EMERGENCY_SUPL=1
+
+#SUPL_MODE is a bit mask set in config.xml per carrier by default.
+#If it is uncommented here, this value will over write the value from
+#config.xml.
+#MSA=0X2
+#MSB=0X1
+#Sensor R&D : Change default bit mask
+SUPL_MODE=3
+
+# GPS Capabilities bit mask
+# SCHEDULING = 0x01
+# MSB = 0x02
+# MSA = 0x04
+# ON_DEMAND_TIME = 0x10
+# GEOFENCE = 0x20
+# default = ON_DEMAND_TIME | MSA | MSB | SCHEDULING | GEOFENCE
+CAPABILITIES=0x37
+
+# Accuracy threshold for intermediate positions
+# less accurate positions are ignored, 0 for passing all positions
+# ACCURACY_THRES=5000
+
+################################
+##### AGPS server settings #####
+################################
+
+# FOR SUPL SUPPORT, set the following
+# SUPL_HOST=supl.host.com or IP
+# SUPL_PORT=1234
+
+# FOR C2K PDE SUPPORT, set the following
+# C2K_HOST=c2k.pde.com or IP
+# C2K_PORT=1234
+
+# Bitmask of slots that are available
+# for write/install to, where 1s indicate writable,
+# and the default value is 0 where no slots
+# are writable. For example, AGPS_CERT_WRITABLE_MASK
+# of b1000001010 makes 3 slots available
+# and the remaining 7 slots unwritable.
+#AGPS_CERT_WRITABLE_MASK=0
+
+####################################
+# LTE Positioning Profile Settings
+####################################
+# 0: Enable RRLP on LTE(Default)
+# 1: Enable LPP_User_Plane on LTE
+# 2: Enable LPP_Control_Plane
+# 3: Enable both LPP_User_Plane and LPP_Control_Plane
+LPP_PROFILE = 0 # Sensor R&D : This will not be injected to MODEM
+
+################################
+# EXTRA SETTINGS
+################################
+# NMEA provider (1=Modem Processor, 0=Application Processor)
+NMEA_PROVIDER=1
+# Mark if it is a SGLTE target (1=SGLTE, 0=nonSGLTE)
+SGLTE_TARGET=0
+
+##################################################
+# Select Positioning Protocol on A-GLONASS system
+##################################################
+# 0x1: RRC CPlane
+# 0x2: RRLP UPlane
+# 0x4: LLP Uplane
+A_GLONASS_POS_PROTOCOL_SELECT = 0 #Sensor R&D : This will not be injected to MODEM
diff --git a/gps/izat.conf b/gps/izat.conf
new file mode 100644
index 0000000..52dd983
--- /dev/null
+++ b/gps/izat.conf
@@ -0,0 +1,170 @@
+########################################
+# NLP/WIFI positioning options bit mask
+########################################
+# Enable NLP fixes for WIPER/ODCPI feature => WIPER = 0x1
+# Enable free wifi scan injections for GEOFENCE => FREE_WIFI = 0x2
+# Enable SUPL2 MLD wifi => SUPL_WIFI = 0x4
+# Enable Attached Wifi AP info injection for GEOFENCE => FREE_AP_INFO = 0x8
+# default = WIPER | FREE_WIFI | SUPL_WIFI | FREE_AP_INFO
+NLP_WIFI_LISTENER_MODE = 0
+
+##################################################
+# Select WIFI Wait Timeout value in seconds for SUPL
+##################################################
+WIFI_WAIT_TIMEOUT_SELECT = 0
+
+################################
+# NLP Settings
+################################
+# NLP_MODE 1: GNP Only, 2: QNP Only, 3: Combo
+# NLP_TOLERANCE_TIME_FIRST: Time in ms used in Combo mode
+# to determine how much Tolerance for first position
+# NLP_TOLERANCE_TIME_AFTER: Time in ms used in Combo mode
+# to determine how much Tolerance for positions after first
+# NLP_THRESHOLD: Sets how many failures needed before
+# switching preferred NLP in Combo mode
+# NLP_ACCURACY_MULTIPLE: Determines how far off the accuracy
+# must be, in multiples, between two NLP location reports to
+# be considered much worse accuracy. Used in switching logic
+NLP_MODE = 1
+NLP_TOLERANCE_TIME_FIRST = 5000
+NLP_TOLERANCE_TIME_AFTER = 20000
+NLP_THRESHOLD = 3
+NLP_ACCURACY_MULTIPLE = 2
+
+# Threshold period for ZPP triggers
+ZPP_TRIGGER_THRESHOLD=10000
+
+###################################
+# GEOFENCE SERVICES
+###################################
+# If set to one of the defined values below, it will override
+# the responsiveness for geofence services, which implements
+# the Proximity Alert API. If not set to a value defined below,
+# which is default, it will not override the responsivness.
+# The geofence HAL API is unaffected by this value.
+# GEOFENCE_SERVICES_RESPONSIVENESS_OVERRIDE Values:
+# 1: LOW responsiveness
+# 2: MEDIUM responsiveness
+# 3: HIGH responsiveness
+GEOFENCE_SERVICES_RESPONSIVENESS_OVERRIDE = 0
+
+#####################################
+# IZAT PREMIUM FEATURE SETTINGS
+#####################################
+#Possible states of a feature:
+#DISABLED
+#BASIC
+#PREMIUM
+
+#GTP_CELL_PROC valid options:
+# AP
+# MODEM
+GTP_CELL_PROC=MODEM
+
+#GTP_CELL valid modes:
+# DISABLED
+# BASIC
+GTP_CELL=BASIC
+
+#GTP_WIFI valid modes:
+# DISABLED
+# BASIC
+GTP_WIFI=BASIC
+
+#SAP valid modes:
+# DISABLED
+# BASIC
+# PREMIUM
+SAP=BASIC
+
+#PIP valid modes:
+# DISABLED
+# PREMIUM
+PIP=DISABLED
+
+#####################################
+# Location process launcher settings
+#####################################
+
+#Values for PROCESS_STATE:
+# ENABLED
+# DISABLED
+
+#FEATURE MASKS:
+# GTP-WIFI 0X03
+# GTP-CELL 0X0c
+# PIP 0x30
+# SAP 0Xc0
+
+#Values for PLATFORMS can be:
+#1. Any valid values obtained from ro.board.platform separated by single space. For example: msm8960 msm8226
+#2. all -> for All platforms
+
+#Values for BASEBAND can be:
+#1. Any valid values obtained from ro.baseband separated by single space. For example: sglte sglte2
+#2. all -> for all basebands
+
+PROCESS_NAME=/system/bin/gpsone_daemon
+PROCESS_STATE=DISABLED
+PROCESS_GROUPS=inet net_raw
+PREMIUM_FEATURE=0
+IZAT_FEATURE_MASK=0
+PLATFORMS=msm7630_fusion
+BASEBAND=svlte2a sglte sglte2
+
+PROCESS_NAME=/system/bin/location-mq
+PROCESS_STATE=ENABLED
+PROCESS_GROUPS=gps
+PREMIUM_FEATURE=1
+IZAT_FEATURE_MASK=0x3f
+PLATFORMS=all
+BASEBAND=all
+
+PROCESS_NAME=/system/bin/lowi-server
+PROCESS_STATE=ENABLED
+PROCESS_GROUPS=gps net_admin wifi inet qcom_diag net_raw
+PREMIUM_FEATURE=1
+IZAT_FEATURE_MASK=0x33
+PLATFORMS=all
+BASEBAND=all
+
+PROCESS_NAME=/system/bin/quipc_igsn
+PROCESS_STATE=ENABLED
+PROCESS_GROUPS=inet gps qcom_diag
+PREMIUM_FEATURE=1
+IZAT_FEATURE_MASK=0x30
+PLATFORMS=all
+BASEBAND=all
+
+PROCESS_NAME=/system/bin/quipc_main
+PROCESS_STATE=ENABLED
+PROCESS_GROUPS=gps net_admin wifi inet qcom_diag
+PREMIUM_FEATURE=1
+IZAT_FEATURE_MASK=0x30
+PLATFORMS=all
+BASEBAND=all
+
+PROCESS_NAME=/system/bin/xtwifi-inet-agent
+PROCESS_STATE=ENABLED
+PROCESS_GROUPS=inet gps
+PREMIUM_FEATURE=1
+IZAT_FEATURE_MASK=0x0f
+PLATFORMS=all
+BASEBAND=all
+
+PROCESS_NAME=/system/bin/xtwifi-client
+PROCESS_STATE=ENABLED
+PROCESS_GROUPS=net_admin wifi inet gps
+PREMIUM_FEATURE=1
+IZAT_FEATURE_MASK=0x0f
+PLATFORMS=all
+BASEBAND=all
+
+PROCESS_NAME=/system/bin/gsiff_daemon
+PROCESS_STATE=ENABLED
+PROCESS_GROUPS=gps net_raw misc qcom_oncrpc
+PREMIUM_FEATURE=1
+IZAT_FEATURE_MASK=0xf0
+PLATFORMS=all
+BASEBAND=all
diff --git a/gps/sap.conf b/gps/sap.conf
new file mode 100644
index 0000000..8f5e396
--- /dev/null
+++ b/gps/sap.conf
@@ -0,0 +1,42 @@
+################################
+# Sensor Settings
+################################
+
+# Needs to be set explicitly based on sensor
+# There is no default value.
+# used in loc_eng_reinit
+#GYRO_BIAS_RANDOM_WALK=
+#ACCEL_RANDOM_WALK_SPECTRAL_DENSITY=
+#ANGLE_RANDOM_WALK_SPECTRAL_DENSITY=
+#RATE_RANDOM_WALK_SPECTRAL_DENSITY=
+#VELOCITY_RANDOM_WALK_SPECTRAL_DENSITY=
+
+# Sensor Sampling Rate Parameters for Low-Data Rate Filter (should be greater than 0)
+# used in loc_eng_reinit
+SENSOR_ACCEL_BATCHES_PER_SEC=3
+SENSOR_ACCEL_SAMPLES_PER_BATCH=5
+SENSOR_GYRO_BATCHES_PER_SEC=3
+SENSOR_GYRO_SAMPLES_PER_BATCH=5
+# Sensor Sampling Rate Parameters for High-Data Rate Filter (should be greater than 0)
+SENSOR_ACCEL_BATCHES_PER_SEC_HIGH=4
+SENSOR_ACCEL_SAMPLES_PER_BATCH_HIGH=25
+SENSOR_GYRO_BATCHES_PER_SEC_HIGH=4
+SENSOR_GYRO_SAMPLES_PER_BATCH_HIGH=25
+
+# Sensor Control Mode (0=AUTO, 1=FORCE_ON)
+# used in loc_eng_reinit
+SENSOR_CONTROL_MODE=0
+
+# Enable or Disable Sensors for GPS use (0=Enable, 1=Disable)
+# used in loc_eng_reinit
+SENSOR_USAGE=1
+
+# Choose GSIFF sensor provider (1=Snapdragon Sensors Core, 2=Android NDK)
+SENSOR_PROVIDER=2
+
+# Bit mask used to define which sensor algorithms are used.
+# Setting each bit has the following definition:
+# 0x1 - DISABLE_INS_POSITIONING_FILTER
+# 0x0 - ENABLE_INS_POSITIONING_FILTER
+SENSOR_ALGORITHM_CONFIG_MASK=0x1
+
diff --git a/init/init_gprimeltecan.cpp b/init/init_gprimeltecan.cpp
new file mode 100644
index 0000000..ce519b0
--- /dev/null
+++ b/init/init_gprimeltecan.cpp
@@ -0,0 +1,54 @@
+/*
+ Copyright (c) 2013, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdlib.h>
+
+#include "vendor_init.h"
+#include "property_service.h"
+#include "log.h"
+#include "util.h"
+
+#include "init_msm.h"
+
+void init_msm_properties(unsigned long msm_id, unsigned long msm_ver, char *board_type)
+{
+ char platform[PROP_VALUE_MAX];
+ int rc;
+
+ UNUSED(msm_id);
+ UNUSED(msm_ver);
+ UNUSED(board_type);
+
+ rc = property_get("ro.board.platform", platform);
+ if (!rc || !ISMATCH(platform, ANDROID_TARGET))
+ return;
+
+ property_set("ro.product.model", "SM-G530W");
+ property_set("ro.product.device", "gprimeltecan");
+}
diff --git a/kernel b/kernel
new file mode 100755
index 0000000..9b9c380
--- /dev/null
+++ b/kernel
Binary files differ
diff --git a/keylayout/AVRCP.kl b/keylayout/AVRCP.kl
new file mode 100644
index 0000000..ccd0209
--- /dev/null
+++ b/keylayout/AVRCP.kl
@@ -0,0 +1,23 @@
+# Copyright (C) 2010 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.
+
+# Key layout used for Bluetooth AVRCP support.
+
+key 200 MEDIA_PLAY
+key 201 MEDIA_PAUSE
+key 166 MEDIA_STOP
+key 163 MEDIA_NEXT
+key 165 MEDIA_PREVIOUS
+key 168 MEDIA_REWIND
+key 208 MEDIA_FAST_FORWARD
diff --git a/keylayout/Generic.kl b/keylayout/Generic.kl
new file mode 100644
index 0000000..8eedbb0
--- /dev/null
+++ b/keylayout/Generic.kl
@@ -0,0 +1,477 @@
+# Copyright (C) 2010 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.
+
+#
+# Generic key layout file for full alphabetic US English PC style external keyboards.
+#
+# This file is intentionally very generic and is intended to support a broad rang of keyboards.
+# Do not edit the generic key layout to support a specific keyboard; instead, create
+# a new key layout file with the required keyboard configuration.
+#
+
+key 1 ESCAPE
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 55 NUMPAD_MULTIPLY
+key 56 ALT_LEFT
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 69 NUM_LOCK
+key 70 SCROLL_LOCK
+key 71 NUMPAD_7
+key 72 NUMPAD_8
+key 73 NUMPAD_9
+key 74 NUMPAD_SUBTRACT
+key 75 NUMPAD_4
+key 76 NUMPAD_5
+key 77 NUMPAD_6
+key 78 NUMPAD_ADD
+key 79 NUMPAD_1
+key 80 NUMPAD_2
+key 81 NUMPAD_3
+key 82 NUMPAD_0
+key 83 NUMPAD_DOT
+# key 84 (undefined)
+key 85 ZENKAKU_HANKAKU
+key 86 BACKSLASH
+key 87 F11
+key 88 F12
+key 89 RO
+# key 90 "KEY_KATAKANA"
+# key 91 "KEY_HIRAGANA"
+key 92 HENKAN
+key 93 KATAKANA_HIRAGANA
+key 94 MUHENKAN
+key 95 NUMPAD_COMMA
+key 96 NUMPAD_ENTER
+key 97 CTRL_RIGHT
+key 98 NUMPAD_DIVIDE
+key 99 SYSRQ
+key 100 ALT_RIGHT
+# key 101 "KEY_LINEFEED"
+key 102 MOVE_HOME
+key 103 DPAD_UP
+key 104 PAGE_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+#key 107 (CHN FOLDER MODEL)
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 109 PAGE_DOWN
+key 110 INSERT
+key 111 FORWARD_DEL
+# key 112 "KEY_MACRO"
+key 113 VOLUME_MUTE
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+key 116 POWER
+key 117 NUMPAD_EQUALS
+# key 118 "KEY_KPPLUSMINUS"
+key 119 BREAK
+# key 120 (undefined)
+key 121 NUMPAD_COMMA
+key 122 LANG
+key 123 EISU
+key 124 YEN
+key 125 META_LEFT
+key 126 META_RIGHT
+key 127 MENU
+key 128 MEDIA_STOP
+# key 129 "KEY_AGAIN"
+# key 130 "KEY_PROPS"
+# key 131 "KEY_UNDO"
+# key 132 "KEY_FRONT"
+# key 133 "KEY_COPY"
+# key 134 "KEY_OPEN"
+# key 135 "KEY_PASTE"
+# key 136 "KEY_FIND"
+# key 137 "KEY_CUT"
+# key 138 "KEY_HELP"
+key 139 MENU
+key 140 CALCULATOR
+# key 141 "KEY_SETUP"
+key 142 SLEEP
+key 143 WAKEUP
+# key 144 "KEY_FILE"
+# key 145 "KEY_SENDFILE"
+# key 146 "KEY_DELETEFILE"
+# key 147 "KEY_XFER"
+# key 148 "KEY_PROG1"
+# key 149 "KEY_PROG2"
+key 150 EXPLORER
+# key 151 "KEY_MSDOS"
+key 152 POWER
+# key 153 "KEY_DIRECTION"
+# key 154 "KEY_CYCLEWINDOWS"
+key 155 ENVELOPE
+key 156 BOOKMARK
+# key 157 "KEY_COMPUTER"
+key 158 BACK
+key 159 FORWARD
+key 160 MEDIA_CLOSE
+key 161 MEDIA_EJECT
+key 162 MEDIA_EJECT
+key 163 MEDIA_NEXT
+key 164 MEDIA_PLAY_PAUSE
+key 165 MEDIA_PREVIOUS
+key 166 MEDIA_STOP
+key 167 MEDIA_RECORD
+key 168 MEDIA_REWIND
+key 169 CALL
+# key 170 "KEY_ISO"
+key 171 MUSIC
+#input_fw added wake attribute for home
+key 172 HOME
+# key 173 "KEY_REFRESH"
+# key 174 "KEY_EXIT"
+# key 175 "KEY_MOVE"
+# key 176 "KEY_EDIT"
+key 177 PAGE_UP
+key 178 PAGE_DOWN
+key 179 NUMPAD_LEFT_PAREN
+key 180 NUMPAD_RIGHT_PAREN
+# key 181 "KEY_NEW"
+# key 182 "KEY_REDO"
+# key 183 F13
+# key 184 F14
+# key 185 F15
+# key 186 F16
+# key 187 F17
+# key 188 F18
+# key 189 F19
+# key 190 F20
+# key 191 F21
+# key 192 F22
+# key 193 F23
+# key 194 F24
+# key 195 (undefined)
+# key 196 (undefined)
+# key 197 (undefined)
+# key 198 (undefined)
+# key 199 (undefined)
+# input_fw for voice wakeup
+key 198 VOICE_WAKEUP_LPSD
+key 199 VOICE_WAKEUP
+key 200 MEDIA_PLAY
+key 201 MEDIA_PAUSE
+# key 202 "KEY_PROG3"
+# key 203 "KEY_PROG4"
+# key 204 (undefined)
+# key 205 "KEY_SUSPEND"
+# key 206 "KEY_CLOSE"
+key 207 MEDIA_PLAY
+key 208 MEDIA_FAST_FORWARD
+# key 209 "KEY_BASSBOOST"
+# key 210 "KEY_PRINT"
+# key 211 "KEY_HP"
+key 212 CAMERA
+key 213 MUSIC
+# key 214 "KEY_QUESTION"
+key 215 ENVELOPE
+# key 216 "KEY_CHAT"
+key 217 SEARCH
+# key 218 "KEY_CONNECT"
+# key 219 "KEY_FINANCE"
+# key 220 "KEY_SPORT"
+# key 221 "KEY_SHOP"
+# key 222 "KEY_ALTERASE"
+# key 223 "KEY_CANCEL"
+key 224 BRIGHTNESS_DOWN
+key 225 BRIGHTNESS_UP
+key 226 HEADSETHOOK
+
+# samsung
+key 252 USER
+
+# samsung
+key 254 APP_SWITCH
+
+key 256 BUTTON_1
+key 257 BUTTON_2
+key 258 BUTTON_3
+key 259 BUTTON_4
+key 260 BUTTON_5
+key 261 BUTTON_6
+key 262 BUTTON_7
+key 263 BUTTON_8
+key 264 BUTTON_9
+key 265 BUTTON_10
+key 266 BUTTON_11
+key 267 BUTTON_12
+key 268 BUTTON_13
+key 269 BUTTON_14
+key 270 BUTTON_15
+key 271 BUTTON_16
+
+key 288 BUTTON_1
+key 289 BUTTON_2
+key 290 BUTTON_3
+key 291 BUTTON_4
+key 292 BUTTON_5
+key 293 BUTTON_6
+key 294 BUTTON_7
+key 295 BUTTON_8
+key 296 BUTTON_9
+key 297 BUTTON_10
+key 298 BUTTON_11
+key 299 BUTTON_12
+key 300 BUTTON_13
+key 301 BUTTON_14
+key 302 BUTTON_15
+key 303 BUTTON_16
+
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 306 BUTTON_C
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 309 BUTTON_Z
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 312 BUTTON_L2
+key 313 BUTTON_R2
+key 314 BUTTON_SELECT
+key 315 BUTTON_START
+key 316 BUTTON_MODE
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+
+# key 352 "KEY_OK"
+# key 353 DPAD_CENTER
+# key 354 "KEY_GOTO"
+# key 355 "KEY_CLEAR"
+# key 356 "KEY_POWER2"
+# key 357 "KEY_OPTION"
+# key 358 "KEY_INFO"
+# key 359 "KEY_TIME"
+# key 360 "KEY_VENDOR"
+# key 361 "KEY_ARCHIVE"
+key 362 GUIDE
+# key 363 "KEY_CHANNEL"
+# key 364 "KEY_FAVORITES"
+# key 365 "KEY_EPG"
+key 366 DVR
+# key 367 "KEY_MHP"
+# key 368 "KEY_LANGUAGE"
+# key 369 "KEY_TITLE"
+# key 370 "KEY_SUBTITLE"
+# key 371 "KEY_ANGLE"
+# key 372 "KEY_ZOOM"
+# key 373 "KEY_MODE"
+# key 374 "KEY_KEYBOARD"
+# key 375 "KEY_SCREEN"
+# key 376 "KEY_PC"
+key 377 TV
+# key 378 "KEY_TV2"
+# key 379 "KEY_VCR"
+# key 380 "KEY_VCR2"
+# key 381 "KEY_SAT"
+# key 382 "KEY_SAT2"
+# key 383 "KEY_CD"
+# key 384 "KEY_TAPE"
+# key 385 "KEY_RADIO"
+# key 386 "KEY_TUNER"
+# key 387 "KEY_PLAYER"
+# key 388 "KEY_TEXT"
+# key 389 "KEY_DVD"
+# key 390 "KEY_AUX"
+# key 391 "KEY_MP3"
+# key 392 "KEY_AUDIO"
+# key 393 "KEY_VIDEO"
+# key 394 "KEY_DIRECTORY"
+# key 395 "KEY_LIST"
+# key 396 "KEY_MEMO"
+key 397 CALENDAR
+# key 398 "KEY_RED"
+# key 399 "KEY_GREEN"
+# key 400 "KEY_YELLOW"
+# key 401 "KEY_BLUE"
+key 402 CHANNEL_UP
+key 403 CHANNEL_DOWN
+# key 404 "KEY_FIRST"
+# key 405 "KEY_LAST"
+# key 406 "KEY_AB"
+# key 407 "KEY_NEXT"
+# key 408 "KEY_RESTART"
+# key 409 "KEY_SLOW"
+# key 410 "KEY_SHUFFLE"
+# key 411 "KEY_BREAK"
+# key 412 "KEY_PREVIOUS"
+# key 413 "KEY_DIGITS"
+# key 414 "KEY_TEEN"
+# key 415 "KEY_TWEN"
+
+key 429 CONTACTS
+
+# key 448 "KEY_DEL_EOL"
+# key 449 "KEY_DEL_EOS"
+# key 450 "KEY_INS_LINE"
+# key 451 "KEY_DEL_LINE"
+
+key 452 CAM_QUICK_REAR
+key 453 CAM_QUICK_FRONT
+key 454 2ND_SCREEN_WAKEUP
+
+# key 455 used for blackscreenUI
+# key 456 KEY_BLACK_UI_QUICKAPP_ACCESS
+# key 457 KEY_BLACK_UI_DIRECT_INDICATOR
+
+# input_fw for swipe gestures from sides, used for wakeup
+key 458 SIDE_GESTURE_RIGHT
+key 459 SIDE_GESTURE_LEFT
+
+key 464 FUNCTION
+key 465 ESCAPE FUNCTION
+key 466 F1 FUNCTION
+key 467 F2 FUNCTION
+key 468 F3 FUNCTION
+key 469 F4 FUNCTION
+key 470 F5 FUNCTION
+key 471 F6 FUNCTION
+key 472 F7 FUNCTION
+key 473 F8 FUNCTION
+key 474 F9 FUNCTION
+key 475 F10 FUNCTION
+key 476 F11 FUNCTION
+key 477 F12 FUNCTION
+key 478 1 FUNCTION
+key 479 2 FUNCTION
+key 480 D FUNCTION
+key 481 E FUNCTION
+key 482 F FUNCTION
+key 483 S FUNCTION
+key 484 B FUNCTION
+
+
+# key 497 KEY_BRL_DOT1
+# key 498 KEY_BRL_DOT2
+# key 499 KEY_BRL_DOT3
+# key 500 KEY_BRL_DOT4
+# key 501 KEY_BRL_DOT5
+# key 502 KEY_BRL_DOT6
+# key 503 KEY_BRL_DOT7
+# key 504 KEY_BRL_DOT8
+
+key 522 STAR
+key 523 POUND
+
+# samsung camera
+key 528 FOCUS
+
+# samsung DMB
+key 539 DMB_ANT_OPEN
+key 540 DMB_ANT_CLOSE
+
+#key 544 NETWORK_SEL (CHN FOLDER MODEL)
+#key 545 3G (CHN FOLDER MODEL)
+
+#key 576 don't use (specific value used by camera project) - refer to InputReader.cpp
+
+key 582 VOICE_ASSIST
+
+# Keys defined by HID usages
+key usage 0x0c006F BRIGHTNESS_UP
+key usage 0x0c0070 BRIGHTNESS_DOWN
+
+# Joystick and game controller axes.
+# Axes that are not mapped will be assigned generic axis numbers by the input subsystem.
+axis 0x00 X
+axis 0x01 Y
+axis 0x02 Z
+axis 0x03 RX
+axis 0x04 RY
+axis 0x05 RZ
+axis 0x06 THROTTLE
+axis 0x07 RUDDER
+axis 0x08 WHEEL
+axis 0x09 GAS
+axis 0x0a BRAKE
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
+
+# LEDs
+led 0x00 NUM_LOCK
+led 0x01 CAPS_LOCK
+led 0x02 SCROLL_LOCK
+led 0x03 COMPOSE
+led 0x04 KANA
+led 0x05 SLEEP
+led 0x06 SUSPEND
+led 0x07 MUTE
+led 0x08 MISC
+led 0x09 MAIL
+led 0x0a CHARGING
diff --git a/keylayout/Vendor_0079_Product_0011.kl b/keylayout/Vendor_0079_Product_0011.kl
new file mode 100644
index 0000000..2ae2a01
--- /dev/null
+++ b/keylayout/Vendor_0079_Product_0011.kl
@@ -0,0 +1,23 @@
+# Copyright (C) 2013 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.
+
+# Classic NES Controller
+
+key 289 BUTTON_A
+key 290 BUTTON_B
+key 297 BUTTON_START
+key 296 BUTTON_SELECT
+
+axis 0x00 HAT_X
+axis 0x01 HAT_Y
diff --git a/keylayout/Vendor_045e_Product_028e.kl b/keylayout/Vendor_045e_Product_028e.kl
new file mode 100644
index 0000000..301601a
--- /dev/null
+++ b/keylayout/Vendor_045e_Product_028e.kl
@@ -0,0 +1,46 @@
+# Copyright (C) 2011 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.
+
+#
+# XBox 360 USB Controller
+#
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 314 BACK
+key 315 BUTTON_START
+key 316 HOME
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+# Left and right stick.
+# The reported value for flat is 128 out of a range from -32767 to 32768, which is absurd.
+# This confuses applications that rely on the flat value because the joystick actually
+# settles in a flat range of +/- 4096 or so.
+axis 0x00 X flat 4096
+axis 0x01 Y flat 4096
+axis 0x03 Z flat 4096
+axis 0x04 RZ flat 4096
+
+# Triggers.
+axis 0x02 LTRIGGER
+axis 0x05 RTRIGGER
+
+# Hat.
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
diff --git a/keylayout/Vendor_0461_Product_4dfc.kl b/keylayout/Vendor_0461_Product_4dfc.kl
new file mode 100644
index 0000000..f622327
--- /dev/null
+++ b/keylayout/Vendor_0461_Product_4dfc.kl
@@ -0,0 +1,409 @@
+# Copyright (C) 2010 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.
+
+#
+# Generic key layout file for full alphabetic US English PC style external keyboards.
+#
+# This file is intentionally very generic and is intended to support a broad rang of keyboards.
+# Do not edit the generic key layout to support a specific keyboard; instead, create
+# a new key layout file with the required keyboard configuration.
+#
+
+key 1 BACK
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 55 NUMPAD_MULTIPLY
+# key 56 ALT_LEFT
+key 56 ALT_GR
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 69 NUM_LOCK
+key 70 SCROLL_LOCK
+key 71 NUMPAD_7
+key 72 NUMPAD_8
+key 73 NUMPAD_9
+key 74 NUMPAD_SUBTRACT
+key 75 NUMPAD_4
+key 76 NUMPAD_5
+key 77 NUMPAD_6
+key 78 NUMPAD_ADD
+key 79 NUMPAD_1
+key 80 NUMPAD_2
+key 81 NUMPAD_3
+key 82 NUMPAD_0
+key 83 NUMPAD_DOT
+# key 84 (undefined)
+# key 85 "KEY_ZENKAKUHANKAKU"
+key 86 BACKSLASH
+key 87 F11
+key 88 F12
+# key 89 "KEY_RO"
+# key 90 "KEY_KATAKANA"
+# key 91 "KEY_HIRAGANA"
+# key 92 "KEY_HENKAN"
+# key 93 "KEY_KATAKANAHIRAGANA"
+# key 94 "KEY_MUHENKAN"
+key 95 NUMPAD_COMMA
+key 96 NUMPAD_ENTER
+key 97 CTRL_RIGHT
+key 98 NUMPAD_DIVIDE
+key 99 SYSRQ
+key 100 ALT_GR
+# key 101 "KEY_LINEFEED"
+key 102 MOVE_HOME
+key 103 DPAD_UP
+key 104 PAGE_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 109 PAGE_DOWN
+key 110 INSERT
+key 111 FORWARD_DEL
+# key 112 "KEY_MACRO"
+key 113 VOLUME_MUTE
+
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+key 116 POWER
+key 117 NUMPAD_EQUALS
+# key 118 "KEY_KPPLUSMINUS"
+key 119 BREAK
+# key 120 (undefined)
+key 121 NUMPAD_COMMA
+# key 122 "KEY_HANGEUL"
+# key 123 "KEY_HANJA"
+# key 124 "KEY_YEN"
+key 125 META_LEFT
+key 126 META_RIGHT
+key 127 MENU
+key 128 MEDIA_STOP
+# key 129 "KEY_AGAIN"
+# key 130 "KEY_PROPS"
+# key 131 "KEY_UNDO"
+# key 132 "KEY_FRONT"
+# key 133 "KEY_COPY"
+# key 134 "KEY_OPEN"
+# key 135 "KEY_PASTE"
+# key 136 "KEY_FIND"
+# key 137 "KEY_CUT"
+# key 138 "KEY_HELP"
+key 139 MENU
+# key 140 "KEY_CALC"
+# key 141 "KEY_SETUP"
+# key 142 "KEY_SLEEP"
+# key 143 "KEY_WAKEUP"
+# key 144 "KEY_FILE"
+# key 145 "KEY_SENDFILE"
+# key 146 "KEY_DELETEFILE"
+# key 147 "KEY_XFER"
+# key 148 "KEY_PROG1"
+# key 149 "KEY_PROG2"
+key 150 EXPLORER
+# key 151 "KEY_MSDOS"
+# key 152 "KEY_COFFEE"
+key 152 POWER
+# key 153 "KEY_DIRECTION"
+# key 154 "KEY_CYCLEWINDOWS"
+key 155 EMAIL
+key 156 BOOKMARK
+# key 157 "KEY_COMPUTER"
+key 158 BACK
+key 159 FORWARD
+key 160 MEDIA_CLOSE
+key 161 MEDIA_EJECT
+key 162 MEDIA_EJECT
+key 163 MEDIA_NEXT
+key 164 MEDIA_PLAY_PAUSE
+key 165 MEDIA_PREVIOUS
+key 166 MEDIA_STOP
+key 167 MEDIA_RECORD
+key 168 MEDIA_REWIND
+key 169 CALL
+# key 170 "KEY_ISO"
+# key 171 "KEY_CONFIG"
+key 172 HOME
+# key 173 "KEY_REFRESH"
+# key 174 "KEY_EXIT"
+# key 175 "KEY_MOVE"
+# key 176 "KEY_EDIT"
+key 177 PAGE_UP
+key 178 PAGE_DOWN
+key 179 NUMPAD_LEFT_PAREN
+key 180 NUMPAD_RIGHT_PAREN
+# key 181 "KEY_NEW"
+# key 182 "KEY_REDO"
+# key 183 F13
+# key 184 F14
+# key 185 F15
+# key 186 F16
+# key 187 F17
+# key 188 F18
+# key 189 F19
+# key 190 F20
+# key 191 F21
+# key 192 F22
+# key 193 F23
+# key 194 F24
+# key 195 (undefined)
+# key 196 (undefined)
+# key 197 (undefined)
+# key 198 (undefined)
+# key 199 (undefined)
+key 200 MEDIA_PLAY
+key 201 MEDIA_PAUSE
+# key 202 "KEY_PROG3"
+# key 203 "KEY_PROG4"
+# key 204 (undefined)
+# key 205 "KEY_SUSPEND"
+# key 206 "KEY_CLOSE"
+key 207 MEDIA_PLAY
+key 208 MEDIA_FAST_FORWARD
+# key 209 "KEY_BASSBOOST"
+# key 210 "KEY_PRINT"
+# key 211 "KEY_HP"
+key 212 CAMERA
+# key 213 "KEY_SOUND"
+# key 214 "KEY_QUESTION"
+key 215 ENVELOPE
+# key 216 "KEY_CHAT"
+key 217 SEARCH
+# key 218 "KEY_CONNECT"
+# key 219 "KEY_FINANCE"
+# key 220 "KEY_SPORT"
+# key 221 "KEY_SHOP"
+# key 222 "KEY_ALTERASE"
+# key 223 "KEY_CANCEL"
+key 224 BRIGHTNESS_DOWN
+key 225 BRIGHTNESS_UP
+key 226 HEADSETHOOK
+key 227 STAR
+key 228 POUND
+key 229 SOFT_LEFT
+key 230 SOFT_RIGHT
+key 231 CALL
+key 232 DPAD_CENTER
+key 233 HEADSETHOOK
+# key 234 "KEY_0_5" or "KEY_SAVE"
+# key 235 "KEY_2_5" or "KEY_DOCUMENTS"
+# key 236 "KEY_SWITCHVIDEOMODE" or "KEY_BATTERY"
+# key 237 "KEY_KBDILLUMTOGGLE"
+# key 238 "KEY_KBDILLUMDOWN"
+# key 239 "KEY_KBDILLUMUP"
+# key 240 "KEY_UNKNOWN"
+
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 306 BUTTON_C
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 309 BUTTON_Z
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 312 BUTTON_L2
+key 313 BUTTON_R2
+key 314 BUTTON_SELECT
+key 315 BUTTON_START
+key 316 BUTTON_MODE
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+
+# key 352 "KEY_OK"
+# key 353 "KEY_SELECT"
+# key 354 "KEY_GOTO"
+# key 355 "KEY_CLEAR"
+# key 356 "KEY_POWER2"
+# key 357 "KEY_OPTION"
+# key 358 "KEY_INFO"
+# key 359 "KEY_TIME"
+# key 360 "KEY_VENDOR"
+# key 361 "KEY_ARCHIVE"
+key 362 GUIDE
+# key 363 "KEY_CHANNEL"
+# key 364 "KEY_FAVORITES"
+# key 365 "KEY_EPG"
+key 366 DVR
+# key 367 "KEY_MHP"
+# key 368 "KEY_LANGUAGE"
+key 368 LANG
+# key 369 "KEY_TITLE"
+# key 370 "KEY_SUBTITLE"
+# key 371 "KEY_ANGLE"
+# key 372 "KEY_ZOOM"
+# key 373 "KEY_MODE"
+# key 374 "KEY_KEYBOARD"
+# key 375 "KEY_SCREEN"
+# key 376 "KEY_PC"
+key 377 TV
+# key 378 "KEY_TV2"
+# key 379 "KEY_VCR"
+# key 380 "KEY_VCR2"
+# key 381 "KEY_SAT"
+# key 382 "KEY_SAT2"
+# key 383 "KEY_CD"
+# key 384 "KEY_TAPE"
+# key 385 "KEY_RADIO"
+# key 386 "KEY_TUNER"
+# key 387 "KEY_PLAYER"
+# key 388 "KEY_TEXT"
+# key 389 "KEY_DVD"
+# key 390 "KEY_AUX"
+# key 391 "KEY_MP3"
+# key 392 "KEY_AUDIO"
+# key 393 "KEY_VIDEO"
+# key 394 "KEY_DIRECTORY"
+# key 395 "KEY_LIST"
+# key 396 "KEY_MEMO"
+# key 397 "KEY_CALENDAR"
+# key 398 "KEY_RED"
+# key 399 "KEY_GREEN"
+# key 400 "KEY_YELLOW"
+# key 401 "KEY_BLUE"
+key 402 CHANNEL_UP
+key 403 CHANNEL_DOWN
+# key 404 "KEY_FIRST"
+# key 405 "KEY_LAST"
+# key 406 "KEY_AB"
+# key 407 "KEY_NEXT"
+# key 408 "KEY_RESTART"
+# key 409 "KEY_SLOW"
+# key 410 "KEY_SHUFFLE"
+# key 411 "KEY_BREAK"
+# key 412 "KEY_PREVIOUS"
+# key 413 "KEY_DIGITS"
+# key 414 "KEY_TEEN"
+# key 415 "KEY_TWEN"
+
+
+# key 448 "KEY_DEL_EOL"
+# key 449 "KEY_DEL_EOS"
+# key 450 "KEY_INS_LINE"
+# key 451 "KEY_DEL_LINE"
+
+
+key 464 FUNCTION
+key 465 ESCAPE FUNCTION
+key 466 F1 FUNCTION
+key 467 F2 FUNCTION
+key 468 F3 FUNCTION
+key 469 F4 FUNCTION
+key 470 F5 FUNCTION
+key 471 F6 FUNCTION
+key 472 F7 FUNCTION
+key 473 F8 FUNCTION
+key 474 F9 FUNCTION
+key 475 F10 FUNCTION
+key 476 F11 FUNCTION
+key 477 F12 FUNCTION
+key 478 1 FUNCTION
+key 479 2 FUNCTION
+key 480 D FUNCTION
+key 481 E FUNCTION
+key 482 F FUNCTION
+key 483 S FUNCTION
+key 484 B FUNCTION
+
+
+# key 497 KEY_BRL_DOT1
+# key 498 KEY_BRL_DOT2
+# key 499 KEY_BRL_DOT3
+# key 500 KEY_BRL_DOT4
+# key 501 KEY_BRL_DOT5
+# key 502 KEY_BRL_DOT6
+# key 503 KEY_BRL_DOT7
+# key 504 KEY_BRL_DOT8
+
+
+key 704 RECENTAPPS
+key 705 APPLICATION
+key 706 SIP_ON_OFF
+key 707 VOICESEARCH
+key 708 QPANEL_ON_OFF
+
+
+# LEDs
+led 0x00 NUM_LOCK
+led 0x01 CAPS_LOCK
+led 0x02 SCROLL_LOCK
+led 0x03 COMPOSE
+led 0x04 KANA
+led 0x05 SLEEP
+led 0x06 SUSPEND
+led 0x07 MUTE
+led 0x08 MISC
+led 0x09 MAIL
+led 0x0a CHARGING
\ No newline at end of file
diff --git a/keylayout/Vendor_046d_Product_b32f.kl b/keylayout/Vendor_046d_Product_b32f.kl
new file mode 100644
index 0000000..b76bf25
--- /dev/null
+++ b/keylayout/Vendor_046d_Product_b32f.kl
@@ -0,0 +1,420 @@
+# Copyright (C) 2010 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.
+
+#
+# key layout file for full alphabetic US English PC style external keyboards.
+#
+# This file is supporting the logitech (vid = 0x046d) keyboard (pid = 0xb32f) with standard
+# mapping, as well as access to enhanced functionnality for the user via F13-F24.
+# This mapping file also restores access to MUSIC, CALENDAR and CONTACTS apps via standard
+# consumerkey usages (USB HUT).
+#
+
+key 1 ESCAPE
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 55 NUMPAD_MULTIPLY
+key 56 ALT_LEFT
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 69 NUM_LOCK
+key 70 SCROLL_LOCK
+key 71 NUMPAD_7
+key 72 NUMPAD_8
+key 73 NUMPAD_9
+key 74 NUMPAD_SUBTRACT
+key 75 NUMPAD_4
+key 76 NUMPAD_5
+key 77 NUMPAD_6
+key 78 NUMPAD_ADD
+key 79 NUMPAD_1
+key 80 NUMPAD_2
+key 81 NUMPAD_3
+key 82 NUMPAD_0
+key 83 NUMPAD_DOT
+# key 84 (undefined)
+# key 85 "KEY_ZENKAKUHANKAKU"
+key 86 BACKSLASH
+key 87 F11
+key 88 F12
+# key 89 "KEY_RO"
+# key 90 "KEY_KATAKANA"
+# key 91 "KEY_HIRAGANA"
+# key 92 "KEY_HENKAN"
+# key 93 "KEY_KATAKANAHIRAGANA"
+# key 94 "KEY_MUHENKAN"
+key 95 NUMPAD_COMMA
+key 96 NUMPAD_ENTER
+key 97 CTRL_RIGHT
+key 98 NUMPAD_DIVIDE
+key 99 SYSRQ
+key 100 ALT_RIGHT
+# key 101 "KEY_LINEFEED"
+key 102 MOVE_HOME
+key 103 DPAD_UP
+key 104 PAGE_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 109 PAGE_DOWN
+key 110 INSERT
+key 111 FORWARD_DEL
+# key 112 "KEY_MACRO"
+key 113 VOLUME_MUTE
+
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+key 116 POWER
+key 117 NUMPAD_EQUALS
+# key 118 "KEY_KPPLUSMINUS"
+key 119 BREAK
+# key 120 (undefined)
+key 121 NUMPAD_COMMA
+# key 122 "KEY_HANGEUL"
+# key 123 "KEY_HANJA"
+# key 124 "KEY_YEN"
+key 125 META_LEFT
+key 126 META_RIGHT
+key 127 MENU
+key 128 MEDIA_STOP
+# key 129 "KEY_AGAIN"
+# key 130 "KEY_PROPS"
+# key 131 "KEY_UNDO"
+# key 132 "KEY_FRONT"
+# key 133 "KEY_COPY"
+# key 134 "KEY_OPEN"
+# key 135 "KEY_PASTE"
+# key 136 "KEY_FIND"
+# key 137 "KEY_CUT"
+# key 138 "KEY_HELP"
+key 139 MENU
+# key 140 "KEY_CALC"
+# key 141 "KEY_SETUP"
+# key 142 "KEY_SLEEP"
+# key 143 "KEY_WAKEUP"
+# key 144 "KEY_FILE"
+# key 145 "KEY_SENDFILE"
+# key 146 "KEY_DELETEFILE"
+# key 147 "KEY_XFER"
+# key 148 "KEY_PROG1"
+# key 149 "KEY_PROG2"
+key 150 EXPLORER
+# key 151 "KEY_MSDOS"
+# key 152 "KEY_COFFEE"
+key 152 POWER
+# key 153 "KEY_DIRECTION"
+# key 154 "KEY_CYCLEWINDOWS"
+key 155 ENVELOPE
+key 156 BOOKMARK
+# key 157 "KEY_COMPUTER"
+key 158 BACK
+key 159 FORWARD
+key 160 MEDIA_CLOSE
+key 161 MEDIA_EJECT
+key 162 MEDIA_EJECT
+key 163 MEDIA_NEXT
+key 164 MEDIA_PLAY_PAUSE
+key 165 MEDIA_PREVIOUS
+key 166 MEDIA_STOP
+key 167 MEDIA_RECORD
+key 168 MEDIA_REWIND
+key 169 CALL
+# key 170 "KEY_ISO"
+key 171 MUSIC
+key 172 HOME
+# key 173 "KEY_REFRESH"
+# key 174 "KEY_EXIT"
+# key 175 "KEY_MOVE"
+# key 176 "KEY_EDIT"
+key 177 PAGE_UP
+key 178 PAGE_DOWN
+key 179 NUMPAD_LEFT_PAREN
+key 180 NUMPAD_RIGHT_PAREN
+# key 181 "KEY_NEW"
+# key 182 "KEY_REDO"
+
+
+key 183 RECENTAPPS #F13
+key 184 APPLICATION #F14
+key 185 SIP_ON_OFF #F15
+key 186 VOICESEARCH #F16
+key 187 QPANEL_ON_OFF #F17
+key 188 LANG #F18
+key 189 BRIGHTNESS_DOWN #F19
+key 190 BRIGHTNESS_UP #F20
+key 191 EMAIL #F21
+key 192 MULTI_WINDOW #F22
+key 193 CONTACTS #F23
+# key 194 F24
+# key 195 (undefined)
+# key 196 (undefined)
+# key 197 (undefined)
+# key 198 (undefined)
+# key 199 (undefined)
+key 200 MEDIA_PLAY
+key 201 MEDIA_PAUSE
+# key 202 "KEY_PROG3"
+# key 203 "KEY_PROG4"
+# key 204 (undefined)
+# key 205 "KEY_SUSPEND"
+# key 206 "KEY_CLOSE"
+key 207 MEDIA_PLAY
+key 208 MEDIA_FAST_FORWARD
+# key 209 "KEY_BASSBOOST"
+# key 210 "KEY_PRINT"
+# key 211 "KEY_HP"
+key 212 CAMERA
+# key 213 "KEY_SOUND"
+# key 214 "KEY_QUESTION"
+key 215 ENVELOPE
+# key 216 "KEY_CHAT"
+key 217 SEARCH
+# key 218 "KEY_CONNECT"
+# key 219 "KEY_FINANCE"
+# key 220 "KEY_SPORT"
+# key 221 "KEY_SHOP"
+# key 222 "KEY_ALTERASE"
+# key 223 "KEY_CANCEL"
+key 224 BRIGHTNESS_DOWN
+key 225 BRIGHTNESS_UP
+key 226 HEADSETHOOK
+key 227 STAR
+key 228 POUND
+key 229 SOFT_LEFT
+key 230 SOFT_RIGHT
+key 231 CALL
+key 232 DPAD_CENTER
+key 233 HEADSETHOOK
+# key 234 "KEY_0_5" or "KEY_SAVE"
+# key 235 "KEY_2_5" or "KEY_DOCUMENTS"
+# key 236 "KEY_SWITCHVIDEOMODE" or "KEY_BATTERY"
+# key 237 "KEY_KBDILLUMTOGGLE"
+# key 238 "KEY_KBDILLUMDOWN"
+# key 239 "KEY_KBDILLUMUP"
+# key 240 "KEY_UNKNOWN"
+
+# Keys defined by HID usages
+key usage 0x0c006F BRIGHTNESS_UP
+key usage 0x0c0070 BRIGHTNESS_DOWN
+
+
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 306 BUTTON_C
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 309 BUTTON_Z
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 312 BUTTON_L2
+key 313 BUTTON_R2
+key 314 BUTTON_SELECT
+key 315 BUTTON_START
+key 316 BUTTON_MODE
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+
+# key 352 "KEY_OK"
+# key 353 "KEY_SELECT"
+# key 354 "KEY_GOTO"
+# key 355 "KEY_CLEAR"
+# key 356 "KEY_POWER2"
+# key 357 "KEY_OPTION"
+# key 358 "KEY_INFO"
+# key 359 "KEY_TIME"
+# key 360 "KEY_VENDOR"
+# key 361 "KEY_ARCHIVE"
+key 362 GUIDE
+# key 363 "KEY_CHANNEL"
+# key 364 "KEY_FAVORITES"
+# key 365 "KEY_EPG"
+key 366 DVR
+# key 367 "KEY_MHP"
+# key 368 "KEY_LANGUAGE"
+key 368 LANG
+# key 369 "KEY_TITLE"
+# key 370 "KEY_SUBTITLE"
+# key 371 "KEY_ANGLE"
+# key 372 "KEY_ZOOM"
+# key 373 "KEY_MODE"
+key 374 LANG # 374 is KEY_KEYBOARD mapped from consumer key 0x0C 0x01AE
+# key 375 "KEY_SCREEN"
+# key 376 "KEY_PC"
+key 377 TV
+# key 378 "KEY_TV2"
+# key 379 "KEY_VCR"
+# key 380 "KEY_VCR2"
+# key 381 "KEY_SAT"
+# key 382 "KEY_SAT2"
+# key 383 "KEY_CD"
+# key 384 "KEY_TAPE"
+# key 385 "KEY_RADIO"
+# key 386 "KEY_TUNER"
+# key 387 "KEY_PLAYER"
+# key 388 "KEY_TEXT"
+# key 389 "KEY_DVD"
+# key 390 "KEY_AUX"
+# key 391 "KEY_MP3"
+# key 392 "KEY_AUDIO"
+# key 393 "KEY_VIDEO"
+# key 394 "KEY_DIRECTORY"
+# key 395 "KEY_LIST"
+# key 396 "KEY_MEMO"
+key 397 CALENDAR
+# key 398 "KEY_RED"
+# key 399 "KEY_GREEN"
+# key 400 "KEY_YELLOW"
+# key 401 "KEY_BLUE"
+key 402 CHANNEL_UP
+key 403 CHANNEL_DOWN
+# key 404 "KEY_FIRST"
+# key 405 "KEY_LAST"
+# key 406 "KEY_AB"
+# key 407 "KEY_NEXT"
+# key 408 "KEY_RESTART"
+# key 409 "KEY_SLOW"
+# key 410 "KEY_SHUFFLE"
+# key 411 "KEY_BREAK"
+# key 412 "KEY_PREVIOUS"
+# key 413 "KEY_DIGITS"
+# key 414 "KEY_TEEN"
+# key 415 "KEY_TWEN"
+
+key 429 CONTACTS
+
+
+
+
+# key 448 "KEY_DEL_EOL"
+# key 449 "KEY_DEL_EOS"
+# key 450 "KEY_INS_LINE"
+# key 451 "KEY_DEL_LINE"
+
+
+key 464 FUNCTION
+key 465 ESCAPE FUNCTION
+key 466 F1 FUNCTION
+key 467 F2 FUNCTION
+key 468 F3 FUNCTION
+key 469 F4 FUNCTION
+key 470 F5 FUNCTION
+key 471 F6 FUNCTION
+key 472 F7 FUNCTION
+key 473 F8 FUNCTION
+key 474 F9 FUNCTION
+key 475 F10 FUNCTION
+key 476 F11 FUNCTION
+key 477 F12 FUNCTION
+key 478 1 FUNCTION
+key 479 2 FUNCTION
+key 480 D FUNCTION
+key 481 E FUNCTION
+key 482 F FUNCTION
+key 483 S FUNCTION
+key 484 B FUNCTION
+
+
+# key 497 KEY_BRL_DOT1
+# key 498 KEY_BRL_DOT2
+# key 499 KEY_BRL_DOT3
+# key 500 KEY_BRL_DOT4
+# key 501 KEY_BRL_DOT5
+# key 502 KEY_BRL_DOT6
+# key 503 KEY_BRL_DOT7
+# key 504 KEY_BRL_DOT8
+
+
+key 704 RECENTAPPS
+key 705 APPLICATION
+key 706 SIP_ON_OFF
+key 707 VOICESEARCH
+key 708 QPANEL_ON_OFF
+
+
+# LEDs
+led 0x00 NUM_LOCK
+led 0x01 CAPS_LOCK
+led 0x02 SCROLL_LOCK
+led 0x03 COMPOSE
+led 0x04 KANA
+led 0x05 SLEEP
+led 0x06 SUSPEND
+led 0x07 MUTE
+led 0x08 MISC
+led 0x09 MAIL
+led 0x0a CHARGING
\ No newline at end of file
diff --git a/keylayout/Vendor_046d_Product_b330.kl b/keylayout/Vendor_046d_Product_b330.kl
new file mode 100644
index 0000000..b479b14
--- /dev/null
+++ b/keylayout/Vendor_046d_Product_b330.kl
@@ -0,0 +1,420 @@
+# Copyright (C) 2010 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.
+
+#
+# key layout file for full alphabetic US English PC style external keyboards.
+#
+# This file is supporting the logitech (vid = 0x046d) keyboard (pid = 0xb330) with standard
+# mapping, as well as access to enhanced functionnality for the user via F13-F24.
+# This mapping file also restores access to MUSIC, CALENDAR and CONTACTS apps via standard
+# consumerkey usages (USB HUT).
+#
+
+key 1 ESCAPE
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 55 NUMPAD_MULTIPLY
+key 56 ALT_LEFT
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 69 NUM_LOCK
+key 70 SCROLL_LOCK
+key 71 NUMPAD_7
+key 72 NUMPAD_8
+key 73 NUMPAD_9
+key 74 NUMPAD_SUBTRACT
+key 75 NUMPAD_4
+key 76 NUMPAD_5
+key 77 NUMPAD_6
+key 78 NUMPAD_ADD
+key 79 NUMPAD_1
+key 80 NUMPAD_2
+key 81 NUMPAD_3
+key 82 NUMPAD_0
+key 83 NUMPAD_DOT
+# key 84 (undefined)
+# key 85 "KEY_ZENKAKUHANKAKU"
+key 86 BACKSLASH
+key 87 F11
+key 88 F12
+# key 89 "KEY_RO"
+# key 90 "KEY_KATAKANA"
+# key 91 "KEY_HIRAGANA"
+# key 92 "KEY_HENKAN"
+# key 93 "KEY_KATAKANAHIRAGANA"
+# key 94 "KEY_MUHENKAN"
+key 95 NUMPAD_COMMA
+key 96 NUMPAD_ENTER
+key 97 CTRL_RIGHT
+key 98 NUMPAD_DIVIDE
+key 99 SYSRQ
+key 100 ALT_RIGHT
+# key 101 "KEY_LINEFEED"
+key 102 MOVE_HOME
+key 103 DPAD_UP
+key 104 PAGE_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 109 PAGE_DOWN
+key 110 INSERT
+key 111 FORWARD_DEL
+# key 112 "KEY_MACRO"
+key 113 VOLUME_MUTE
+
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+key 116 POWER
+key 117 NUMPAD_EQUALS
+# key 118 "KEY_KPPLUSMINUS"
+key 119 BREAK
+# key 120 (undefined)
+key 121 NUMPAD_COMMA
+# key 122 "KEY_HANGEUL"
+# key 123 "KEY_HANJA"
+# key 124 "KEY_YEN"
+key 125 META_LEFT
+key 126 META_RIGHT
+key 127 MENU
+key 128 MEDIA_STOP
+# key 129 "KEY_AGAIN"
+# key 130 "KEY_PROPS"
+# key 131 "KEY_UNDO"
+# key 132 "KEY_FRONT"
+# key 133 "KEY_COPY"
+# key 134 "KEY_OPEN"
+# key 135 "KEY_PASTE"
+# key 136 "KEY_FIND"
+# key 137 "KEY_CUT"
+# key 138 "KEY_HELP"
+key 139 MENU
+# key 140 "KEY_CALC"
+# key 141 "KEY_SETUP"
+# key 142 "KEY_SLEEP"
+# key 143 "KEY_WAKEUP"
+# key 144 "KEY_FILE"
+# key 145 "KEY_SENDFILE"
+# key 146 "KEY_DELETEFILE"
+# key 147 "KEY_XFER"
+# key 148 "KEY_PROG1"
+# key 149 "KEY_PROG2"
+key 150 EXPLORER
+# key 151 "KEY_MSDOS"
+# key 152 "KEY_COFFEE"
+key 152 POWER
+# key 153 "KEY_DIRECTION"
+# key 154 "KEY_CYCLEWINDOWS"
+key 155 ENVELOPE
+key 156 BOOKMARK
+# key 157 "KEY_COMPUTER"
+key 158 BACK
+key 159 FORWARD
+key 160 MEDIA_CLOSE
+key 161 MEDIA_EJECT
+key 162 MEDIA_EJECT
+key 163 MEDIA_NEXT
+key 164 MEDIA_PLAY_PAUSE
+key 165 MEDIA_PREVIOUS
+key 166 MEDIA_STOP
+key 167 MEDIA_RECORD
+key 168 MEDIA_REWIND
+key 169 CALL
+# key 170 "KEY_ISO"
+key 171 MUSIC
+key 172 HOME
+# key 173 "KEY_REFRESH"
+# key 174 "KEY_EXIT"
+# key 175 "KEY_MOVE"
+# key 176 "KEY_EDIT"
+key 177 PAGE_UP
+key 178 PAGE_DOWN
+key 179 NUMPAD_LEFT_PAREN
+key 180 NUMPAD_RIGHT_PAREN
+# key 181 "KEY_NEW"
+# key 182 "KEY_REDO"
+
+
+key 183 RECENTAPPS #F13
+key 184 APPLICATION #F14
+key 185 SIP_ON_OFF #F15
+key 186 VOICESEARCH #F16
+key 187 QPANEL_ON_OFF #F17
+key 188 LANG #F18
+key 189 BRIGHTNESS_DOWN #F19
+key 190 BRIGHTNESS_UP #F20
+key 191 EMAIL #F21
+#key 192 MULTI_WINDOW #F22
+key 193 CONTACTS #F23
+# key 194 F24
+# key 195 (undefined)
+# key 196 (undefined)
+# key 197 (undefined)
+# key 198 (undefined)
+# key 199 (undefined)
+key 200 MEDIA_PLAY
+key 201 MEDIA_PAUSE
+# key 202 "KEY_PROG3"
+# key 203 "KEY_PROG4"
+# key 204 (undefined)
+# key 205 "KEY_SUSPEND"
+# key 206 "KEY_CLOSE"
+key 207 MEDIA_PLAY
+key 208 MEDIA_FAST_FORWARD
+# key 209 "KEY_BASSBOOST"
+# key 210 "KEY_PRINT"
+# key 211 "KEY_HP"
+key 212 CAMERA
+# key 213 "KEY_SOUND"
+# key 214 "KEY_QUESTION"
+key 215 ENVELOPE
+# key 216 "KEY_CHAT"
+key 217 SEARCH
+# key 218 "KEY_CONNECT"
+# key 219 "KEY_FINANCE"
+# key 220 "KEY_SPORT"
+# key 221 "KEY_SHOP"
+# key 222 "KEY_ALTERASE"
+# key 223 "KEY_CANCEL"
+key 224 BRIGHTNESS_DOWN
+key 225 BRIGHTNESS_UP
+key 226 HEADSETHOOK
+key 227 STAR
+key 228 POUND
+key 229 SOFT_LEFT
+key 230 SOFT_RIGHT
+key 231 CALL
+key 232 DPAD_CENTER
+key 233 HEADSETHOOK
+# key 234 "KEY_0_5" or "KEY_SAVE"
+# key 235 "KEY_2_5" or "KEY_DOCUMENTS"
+# key 236 "KEY_SWITCHVIDEOMODE" or "KEY_BATTERY"
+# key 237 "KEY_KBDILLUMTOGGLE"
+# key 238 "KEY_KBDILLUMDOWN"
+# key 239 "KEY_KBDILLUMUP"
+# key 240 "KEY_UNKNOWN"
+
+# Keys defined by HID usages
+key usage 0x0c006F BRIGHTNESS_UP
+key usage 0x0c0070 BRIGHTNESS_DOWN
+
+
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 306 BUTTON_C
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 309 BUTTON_Z
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 312 BUTTON_L2
+key 313 BUTTON_R2
+key 314 BUTTON_SELECT
+key 315 BUTTON_START
+key 316 BUTTON_MODE
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+
+# key 352 "KEY_OK"
+# key 353 "KEY_SELECT"
+# key 354 "KEY_GOTO"
+# key 355 "KEY_CLEAR"
+# key 356 "KEY_POWER2"
+# key 357 "KEY_OPTION"
+# key 358 "KEY_INFO"
+# key 359 "KEY_TIME"
+# key 360 "KEY_VENDOR"
+# key 361 "KEY_ARCHIVE"
+key 362 GUIDE
+# key 363 "KEY_CHANNEL"
+# key 364 "KEY_FAVORITES"
+# key 365 "KEY_EPG"
+key 366 DVR
+# key 367 "KEY_MHP"
+# key 368 "KEY_LANGUAGE"
+key 368 LANG
+# key 369 "KEY_TITLE"
+# key 370 "KEY_SUBTITLE"
+# key 371 "KEY_ANGLE"
+# key 372 "KEY_ZOOM"
+# key 373 "KEY_MODE"
+key 374 LANG # 374 is KEY_KEYBOARD mapped from consumer key 0x0C 0x01AE
+# key 375 "KEY_SCREEN"
+# key 376 "KEY_PC"
+key 377 TV
+# key 378 "KEY_TV2"
+# key 379 "KEY_VCR"
+# key 380 "KEY_VCR2"
+# key 381 "KEY_SAT"
+# key 382 "KEY_SAT2"
+# key 383 "KEY_CD"
+# key 384 "KEY_TAPE"
+# key 385 "KEY_RADIO"
+# key 386 "KEY_TUNER"
+# key 387 "KEY_PLAYER"
+# key 388 "KEY_TEXT"
+# key 389 "KEY_DVD"
+# key 390 "KEY_AUX"
+# key 391 "KEY_MP3"
+# key 392 "KEY_AUDIO"
+# key 393 "KEY_VIDEO"
+# key 394 "KEY_DIRECTORY"
+# key 395 "KEY_LIST"
+# key 396 "KEY_MEMO"
+key 397 CALENDAR
+# key 398 "KEY_RED"
+# key 399 "KEY_GREEN"
+# key 400 "KEY_YELLOW"
+# key 401 "KEY_BLUE"
+key 402 CHANNEL_UP
+key 403 CHANNEL_DOWN
+# key 404 "KEY_FIRST"
+# key 405 "KEY_LAST"
+# key 406 "KEY_AB"
+# key 407 "KEY_NEXT"
+# key 408 "KEY_RESTART"
+# key 409 "KEY_SLOW"
+# key 410 "KEY_SHUFFLE"
+# key 411 "KEY_BREAK"
+# key 412 "KEY_PREVIOUS"
+# key 413 "KEY_DIGITS"
+# key 414 "KEY_TEEN"
+# key 415 "KEY_TWEN"
+
+key 429 CONTACTS
+
+
+
+
+# key 448 "KEY_DEL_EOL"
+# key 449 "KEY_DEL_EOS"
+# key 450 "KEY_INS_LINE"
+# key 451 "KEY_DEL_LINE"
+
+
+key 464 FUNCTION
+key 465 ESCAPE FUNCTION
+key 466 F1 FUNCTION
+key 467 F2 FUNCTION
+key 468 F3 FUNCTION
+key 469 F4 FUNCTION
+key 470 F5 FUNCTION
+key 471 F6 FUNCTION
+key 472 F7 FUNCTION
+key 473 F8 FUNCTION
+key 474 F9 FUNCTION
+key 475 F10 FUNCTION
+key 476 F11 FUNCTION
+key 477 F12 FUNCTION
+key 478 1 FUNCTION
+key 479 2 FUNCTION
+key 480 D FUNCTION
+key 481 E FUNCTION
+key 482 F FUNCTION
+key 483 S FUNCTION
+key 484 B FUNCTION
+
+
+# key 497 KEY_BRL_DOT1
+# key 498 KEY_BRL_DOT2
+# key 499 KEY_BRL_DOT3
+# key 500 KEY_BRL_DOT4
+# key 501 KEY_BRL_DOT5
+# key 502 KEY_BRL_DOT6
+# key 503 KEY_BRL_DOT7
+# key 504 KEY_BRL_DOT8
+
+
+key 704 RECENTAPPS
+key 705 APPLICATION
+key 706 SIP_ON_OFF
+key 707 VOICESEARCH
+key 708 QPANEL_ON_OFF
+
+
+# LEDs
+led 0x00 NUM_LOCK
+led 0x01 CAPS_LOCK
+led 0x02 SCROLL_LOCK
+led 0x03 COMPOSE
+led 0x04 KANA
+led 0x05 SLEEP
+led 0x06 SUSPEND
+led 0x07 MUTE
+led 0x08 MISC
+led 0x09 MAIL
+led 0x0a CHARGING
\ No newline at end of file
diff --git a/keylayout/Vendor_046d_Product_b331.kl b/keylayout/Vendor_046d_Product_b331.kl
new file mode 100644
index 0000000..7c33169
--- /dev/null
+++ b/keylayout/Vendor_046d_Product_b331.kl
@@ -0,0 +1,420 @@
+# Copyright (C) 2010 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.
+
+#
+# key layout file for full alphabetic US English PC style external keyboards.
+#
+# This file is supporting the logitech (vid = 0x046d) keyboard (pid = 0xb331) with standard
+# mapping, as well as access to enhanced functionnality for the user via F13-F24.
+# This mapping file also restores access to MUSIC, CALENDAR and CONTACTS apps via standard
+# consumerkey usages (USB HUT).
+#
+
+key 1 ESCAPE
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 55 NUMPAD_MULTIPLY
+key 56 ALT_LEFT
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 69 NUM_LOCK
+key 70 SCROLL_LOCK
+key 71 NUMPAD_7
+key 72 NUMPAD_8
+key 73 NUMPAD_9
+key 74 NUMPAD_SUBTRACT
+key 75 NUMPAD_4
+key 76 NUMPAD_5
+key 77 NUMPAD_6
+key 78 NUMPAD_ADD
+key 79 NUMPAD_1
+key 80 NUMPAD_2
+key 81 NUMPAD_3
+key 82 NUMPAD_0
+key 83 NUMPAD_DOT
+# key 84 (undefined)
+# key 85 "KEY_ZENKAKUHANKAKU"
+key 86 BACKSLASH
+key 87 F11
+key 88 F12
+# key 89 "KEY_RO"
+# key 90 "KEY_KATAKANA"
+# key 91 "KEY_HIRAGANA"
+# key 92 "KEY_HENKAN"
+# key 93 "KEY_KATAKANAHIRAGANA"
+# key 94 "KEY_MUHENKAN"
+key 95 NUMPAD_COMMA
+key 96 NUMPAD_ENTER
+key 97 CTRL_RIGHT
+key 98 NUMPAD_DIVIDE
+key 99 SYSRQ
+key 100 ALT_RIGHT
+# key 101 "KEY_LINEFEED"
+key 102 MOVE_HOME
+key 103 DPAD_UP
+key 104 PAGE_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 109 PAGE_DOWN
+key 110 INSERT
+key 111 FORWARD_DEL
+# key 112 "KEY_MACRO"
+key 113 VOLUME_MUTE
+
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+key 116 POWER
+key 117 NUMPAD_EQUALS
+# key 118 "KEY_KPPLUSMINUS"
+key 119 BREAK
+# key 120 (undefined)
+key 121 NUMPAD_COMMA
+# key 122 "KEY_HANGEUL"
+# key 123 "KEY_HANJA"
+# key 124 "KEY_YEN"
+key 125 META_LEFT
+key 126 META_RIGHT
+key 127 MENU
+key 128 MEDIA_STOP
+# key 129 "KEY_AGAIN"
+# key 130 "KEY_PROPS"
+# key 131 "KEY_UNDO"
+# key 132 "KEY_FRONT"
+# key 133 "KEY_COPY"
+# key 134 "KEY_OPEN"
+# key 135 "KEY_PASTE"
+# key 136 "KEY_FIND"
+# key 137 "KEY_CUT"
+# key 138 "KEY_HELP"
+key 139 MENU
+# key 140 "KEY_CALC"
+# key 141 "KEY_SETUP"
+# key 142 "KEY_SLEEP"
+# key 143 "KEY_WAKEUP"
+# key 144 "KEY_FILE"
+# key 145 "KEY_SENDFILE"
+# key 146 "KEY_DELETEFILE"
+# key 147 "KEY_XFER"
+# key 148 "KEY_PROG1"
+# key 149 "KEY_PROG2"
+key 150 EXPLORER
+# key 151 "KEY_MSDOS"
+# key 152 "KEY_COFFEE"
+key 152 POWER
+# key 153 "KEY_DIRECTION"
+# key 154 "KEY_CYCLEWINDOWS"
+key 155 ENVELOPE
+key 156 BOOKMARK
+# key 157 "KEY_COMPUTER"
+key 158 BACK
+key 159 FORWARD
+key 160 MEDIA_CLOSE
+key 161 MEDIA_EJECT
+key 162 MEDIA_EJECT
+key 163 MEDIA_NEXT
+key 164 MEDIA_PLAY_PAUSE
+key 165 MEDIA_PREVIOUS
+key 166 MEDIA_STOP
+key 167 MEDIA_RECORD
+key 168 MEDIA_REWIND
+key 169 CALL
+# key 170 "KEY_ISO"
+key 171 MUSIC
+key 172 HOME
+# key 173 "KEY_REFRESH"
+# key 174 "KEY_EXIT"
+# key 175 "KEY_MOVE"
+# key 176 "KEY_EDIT"
+key 177 PAGE_UP
+key 178 PAGE_DOWN
+key 179 NUMPAD_LEFT_PAREN
+key 180 NUMPAD_RIGHT_PAREN
+# key 181 "KEY_NEW"
+# key 182 "KEY_REDO"
+
+
+key 183 RECENTAPPS #F13
+key 184 APPLICATION #F14
+key 185 SIP_ON_OFF #F15
+key 186 VOICESEARCH #F16
+key 187 QPANEL_ON_OFF #F17
+key 188 LANG #F18
+key 189 BRIGHTNESS_DOWN #F19
+key 190 BRIGHTNESS_UP #F20
+key 191 EMAIL #F21
+#key 192 MULTI_WINDOW #F22
+key 193 CONTACTS #F23
+# key 194 F24
+# key 195 (undefined)
+# key 196 (undefined)
+# key 197 (undefined)
+# key 198 (undefined)
+# key 199 (undefined)
+key 200 MEDIA_PLAY
+key 201 MEDIA_PAUSE
+# key 202 "KEY_PROG3"
+# key 203 "KEY_PROG4"
+# key 204 (undefined)
+# key 205 "KEY_SUSPEND"
+# key 206 "KEY_CLOSE"
+key 207 MEDIA_PLAY
+key 208 MEDIA_FAST_FORWARD
+# key 209 "KEY_BASSBOOST"
+# key 210 "KEY_PRINT"
+# key 211 "KEY_HP"
+key 212 CAMERA
+# key 213 "KEY_SOUND"
+# key 214 "KEY_QUESTION"
+key 215 ENVELOPE
+# key 216 "KEY_CHAT"
+key 217 SEARCH
+# key 218 "KEY_CONNECT"
+# key 219 "KEY_FINANCE"
+# key 220 "KEY_SPORT"
+# key 221 "KEY_SHOP"
+# key 222 "KEY_ALTERASE"
+# key 223 "KEY_CANCEL"
+key 224 BRIGHTNESS_DOWN
+key 225 BRIGHTNESS_UP
+key 226 HEADSETHOOK
+key 227 STAR
+key 228 POUND
+key 229 SOFT_LEFT
+key 230 SOFT_RIGHT
+key 231 CALL
+key 232 DPAD_CENTER
+key 233 HEADSETHOOK
+# key 234 "KEY_0_5" or "KEY_SAVE"
+# key 235 "KEY_2_5" or "KEY_DOCUMENTS"
+# key 236 "KEY_SWITCHVIDEOMODE" or "KEY_BATTERY"
+# key 237 "KEY_KBDILLUMTOGGLE"
+# key 238 "KEY_KBDILLUMDOWN"
+# key 239 "KEY_KBDILLUMUP"
+# key 240 "KEY_UNKNOWN"
+
+# Keys defined by HID usages
+key usage 0x0c006F BRIGHTNESS_UP
+key usage 0x0c0070 BRIGHTNESS_DOWN
+
+
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 306 BUTTON_C
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 309 BUTTON_Z
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 312 BUTTON_L2
+key 313 BUTTON_R2
+key 314 BUTTON_SELECT
+key 315 BUTTON_START
+key 316 BUTTON_MODE
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+
+# key 352 "KEY_OK"
+# key 353 "KEY_SELECT"
+# key 354 "KEY_GOTO"
+# key 355 "KEY_CLEAR"
+# key 356 "KEY_POWER2"
+# key 357 "KEY_OPTION"
+# key 358 "KEY_INFO"
+# key 359 "KEY_TIME"
+# key 360 "KEY_VENDOR"
+# key 361 "KEY_ARCHIVE"
+key 362 GUIDE
+# key 363 "KEY_CHANNEL"
+# key 364 "KEY_FAVORITES"
+# key 365 "KEY_EPG"
+key 366 DVR
+# key 367 "KEY_MHP"
+# key 368 "KEY_LANGUAGE"
+key 368 LANG
+# key 369 "KEY_TITLE"
+# key 370 "KEY_SUBTITLE"
+# key 371 "KEY_ANGLE"
+# key 372 "KEY_ZOOM"
+# key 373 "KEY_MODE"
+key 374 LANG # 374 is KEY_KEYBOARD mapped from consumer key 0x0C 0x01AE
+# key 375 "KEY_SCREEN"
+# key 376 "KEY_PC"
+key 377 TV
+# key 378 "KEY_TV2"
+# key 379 "KEY_VCR"
+# key 380 "KEY_VCR2"
+# key 381 "KEY_SAT"
+# key 382 "KEY_SAT2"
+# key 383 "KEY_CD"
+# key 384 "KEY_TAPE"
+# key 385 "KEY_RADIO"
+# key 386 "KEY_TUNER"
+# key 387 "KEY_PLAYER"
+# key 388 "KEY_TEXT"
+# key 389 "KEY_DVD"
+# key 390 "KEY_AUX"
+# key 391 "KEY_MP3"
+# key 392 "KEY_AUDIO"
+# key 393 "KEY_VIDEO"
+# key 394 "KEY_DIRECTORY"
+# key 395 "KEY_LIST"
+# key 396 "KEY_MEMO"
+key 397 CALENDAR
+# key 398 "KEY_RED"
+# key 399 "KEY_GREEN"
+# key 400 "KEY_YELLOW"
+# key 401 "KEY_BLUE"
+key 402 CHANNEL_UP
+key 403 CHANNEL_DOWN
+# key 404 "KEY_FIRST"
+# key 405 "KEY_LAST"
+# key 406 "KEY_AB"
+# key 407 "KEY_NEXT"
+# key 408 "KEY_RESTART"
+# key 409 "KEY_SLOW"
+# key 410 "KEY_SHUFFLE"
+# key 411 "KEY_BREAK"
+# key 412 "KEY_PREVIOUS"
+# key 413 "KEY_DIGITS"
+# key 414 "KEY_TEEN"
+# key 415 "KEY_TWEN"
+
+key 429 CONTACTS
+
+
+
+
+# key 448 "KEY_DEL_EOL"
+# key 449 "KEY_DEL_EOS"
+# key 450 "KEY_INS_LINE"
+# key 451 "KEY_DEL_LINE"
+
+
+key 464 FUNCTION
+key 465 ESCAPE FUNCTION
+key 466 F1 FUNCTION
+key 467 F2 FUNCTION
+key 468 F3 FUNCTION
+key 469 F4 FUNCTION
+key 470 F5 FUNCTION
+key 471 F6 FUNCTION
+key 472 F7 FUNCTION
+key 473 F8 FUNCTION
+key 474 F9 FUNCTION
+key 475 F10 FUNCTION
+key 476 F11 FUNCTION
+key 477 F12 FUNCTION
+key 478 1 FUNCTION
+key 479 2 FUNCTION
+key 480 D FUNCTION
+key 481 E FUNCTION
+key 482 F FUNCTION
+key 483 S FUNCTION
+key 484 B FUNCTION
+
+
+# key 497 KEY_BRL_DOT1
+# key 498 KEY_BRL_DOT2
+# key 499 KEY_BRL_DOT3
+# key 500 KEY_BRL_DOT4
+# key 501 KEY_BRL_DOT5
+# key 502 KEY_BRL_DOT6
+# key 503 KEY_BRL_DOT7
+# key 504 KEY_BRL_DOT8
+
+
+key 704 RECENTAPPS
+key 705 APPLICATION
+key 706 SIP_ON_OFF
+key 707 VOICESEARCH
+key 708 QPANEL_ON_OFF
+
+
+# LEDs
+led 0x00 NUM_LOCK
+led 0x01 CAPS_LOCK
+led 0x02 SCROLL_LOCK
+led 0x03 COMPOSE
+led 0x04 KANA
+led 0x05 SLEEP
+led 0x06 SUSPEND
+led 0x07 MUTE
+led 0x08 MISC
+led 0x09 MAIL
+led 0x0a CHARGING
\ No newline at end of file
diff --git a/keylayout/Vendor_046d_Product_b332.kl b/keylayout/Vendor_046d_Product_b332.kl
new file mode 100644
index 0000000..52f514a
--- /dev/null
+++ b/keylayout/Vendor_046d_Product_b332.kl
@@ -0,0 +1,420 @@
+# Copyright (C) 2010 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.
+
+#
+# key layout file for full alphabetic US English PC style external keyboards.
+#
+# This file is supporting the logitech (vid = 0x046d) keyboard (pid = 0xb332) with standard
+# mapping, as well as access to enhanced functionnality for the user via F13-F24.
+# This mapping file also restores access to MUSIC, CALENDAR and CONTACTS apps via standard
+# consumerkey usages (USB HUT).
+#
+
+key 1 ESCAPE
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 55 NUMPAD_MULTIPLY
+key 56 ALT_LEFT
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 69 NUM_LOCK
+key 70 SCROLL_LOCK
+key 71 NUMPAD_7
+key 72 NUMPAD_8
+key 73 NUMPAD_9
+key 74 NUMPAD_SUBTRACT
+key 75 NUMPAD_4
+key 76 NUMPAD_5
+key 77 NUMPAD_6
+key 78 NUMPAD_ADD
+key 79 NUMPAD_1
+key 80 NUMPAD_2
+key 81 NUMPAD_3
+key 82 NUMPAD_0
+key 83 NUMPAD_DOT
+# key 84 (undefined)
+# key 85 "KEY_ZENKAKUHANKAKU"
+key 86 BACKSLASH
+key 87 F11
+key 88 F12
+# key 89 "KEY_RO"
+# key 90 "KEY_KATAKANA"
+# key 91 "KEY_HIRAGANA"
+# key 92 "KEY_HENKAN"
+# key 93 "KEY_KATAKANAHIRAGANA"
+# key 94 "KEY_MUHENKAN"
+key 95 NUMPAD_COMMA
+key 96 NUMPAD_ENTER
+key 97 CTRL_RIGHT
+key 98 NUMPAD_DIVIDE
+key 99 SYSRQ
+key 100 ALT_RIGHT
+# key 101 "KEY_LINEFEED"
+key 102 MOVE_HOME
+key 103 DPAD_UP
+key 104 PAGE_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 109 PAGE_DOWN
+key 110 INSERT
+key 111 FORWARD_DEL
+# key 112 "KEY_MACRO"
+key 113 VOLUME_MUTE
+
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+key 116 POWER
+key 117 NUMPAD_EQUALS
+# key 118 "KEY_KPPLUSMINUS"
+key 119 BREAK
+# key 120 (undefined)
+key 121 NUMPAD_COMMA
+# key 122 "KEY_HANGEUL"
+# key 123 "KEY_HANJA"
+# key 124 "KEY_YEN"
+key 125 META_LEFT
+key 126 META_RIGHT
+key 127 MENU
+key 128 MEDIA_STOP
+# key 129 "KEY_AGAIN"
+# key 130 "KEY_PROPS"
+# key 131 "KEY_UNDO"
+# key 132 "KEY_FRONT"
+# key 133 "KEY_COPY"
+# key 134 "KEY_OPEN"
+# key 135 "KEY_PASTE"
+# key 136 "KEY_FIND"
+# key 137 "KEY_CUT"
+# key 138 "KEY_HELP"
+key 139 MENU
+# key 140 "KEY_CALC"
+# key 141 "KEY_SETUP"
+# key 142 "KEY_SLEEP"
+# key 143 "KEY_WAKEUP"
+# key 144 "KEY_FILE"
+# key 145 "KEY_SENDFILE"
+# key 146 "KEY_DELETEFILE"
+# key 147 "KEY_XFER"
+# key 148 "KEY_PROG1"
+# key 149 "KEY_PROG2"
+key 150 EXPLORER
+# key 151 "KEY_MSDOS"
+# key 152 "KEY_COFFEE"
+key 152 POWER
+# key 153 "KEY_DIRECTION"
+# key 154 "KEY_CYCLEWINDOWS"
+key 155 ENVELOPE
+key 156 BOOKMARK
+# key 157 "KEY_COMPUTER"
+key 158 BACK
+key 159 FORWARD
+key 160 MEDIA_CLOSE
+key 161 MEDIA_EJECT
+key 162 MEDIA_EJECT
+key 163 MEDIA_NEXT
+key 164 MEDIA_PLAY_PAUSE
+key 165 MEDIA_PREVIOUS
+key 166 MEDIA_STOP
+key 167 MEDIA_RECORD
+key 168 MEDIA_REWIND
+key 169 CALL
+# key 170 "KEY_ISO"
+key 171 MUSIC
+key 172 HOME
+# key 173 "KEY_REFRESH"
+# key 174 "KEY_EXIT"
+# key 175 "KEY_MOVE"
+# key 176 "KEY_EDIT"
+key 177 PAGE_UP
+key 178 PAGE_DOWN
+key 179 NUMPAD_LEFT_PAREN
+key 180 NUMPAD_RIGHT_PAREN
+# key 181 "KEY_NEW"
+# key 182 "KEY_REDO"
+
+
+key 183 RECENTAPPS #F13
+key 184 APPLICATION #F14
+key 185 SIP_ON_OFF #F15
+key 186 VOICESEARCH #F16
+key 187 QPANEL_ON_OFF #F17
+key 188 LANG #F18
+key 189 BRIGHTNESS_DOWN #F19
+key 190 BRIGHTNESS_UP #F20
+key 191 EMAIL #F21
+#key 192 MULTI_WINDOW #F22
+key 193 CONTACTS #F23
+# key 194 F24
+# key 195 (undefined)
+# key 196 (undefined)
+# key 197 (undefined)
+# key 198 (undefined)
+# key 199 (undefined)
+key 200 MEDIA_PLAY
+key 201 MEDIA_PAUSE
+# key 202 "KEY_PROG3"
+# key 203 "KEY_PROG4"
+# key 204 (undefined)
+# key 205 "KEY_SUSPEND"
+# key 206 "KEY_CLOSE"
+key 207 MEDIA_PLAY
+key 208 MEDIA_FAST_FORWARD
+# key 209 "KEY_BASSBOOST"
+# key 210 "KEY_PRINT"
+# key 211 "KEY_HP"
+key 212 CAMERA
+# key 213 "KEY_SOUND"
+# key 214 "KEY_QUESTION"
+key 215 ENVELOPE
+# key 216 "KEY_CHAT"
+key 217 SEARCH
+# key 218 "KEY_CONNECT"
+# key 219 "KEY_FINANCE"
+# key 220 "KEY_SPORT"
+# key 221 "KEY_SHOP"
+# key 222 "KEY_ALTERASE"
+# key 223 "KEY_CANCEL"
+key 224 BRIGHTNESS_DOWN
+key 225 BRIGHTNESS_UP
+key 226 HEADSETHOOK
+key 227 STAR
+key 228 POUND
+key 229 SOFT_LEFT
+key 230 SOFT_RIGHT
+key 231 CALL
+key 232 DPAD_CENTER
+key 233 HEADSETHOOK
+# key 234 "KEY_0_5" or "KEY_SAVE"
+# key 235 "KEY_2_5" or "KEY_DOCUMENTS"
+# key 236 "KEY_SWITCHVIDEOMODE" or "KEY_BATTERY"
+# key 237 "KEY_KBDILLUMTOGGLE"
+# key 238 "KEY_KBDILLUMDOWN"
+# key 239 "KEY_KBDILLUMUP"
+# key 240 "KEY_UNKNOWN"
+
+# Keys defined by HID usages
+key usage 0x0c006F BRIGHTNESS_UP
+key usage 0x0c0070 BRIGHTNESS_DOWN
+
+
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 306 BUTTON_C
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 309 BUTTON_Z
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 312 BUTTON_L2
+key 313 BUTTON_R2
+key 314 BUTTON_SELECT
+key 315 BUTTON_START
+key 316 BUTTON_MODE
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+
+# key 352 "KEY_OK"
+# key 353 "KEY_SELECT"
+# key 354 "KEY_GOTO"
+# key 355 "KEY_CLEAR"
+# key 356 "KEY_POWER2"
+# key 357 "KEY_OPTION"
+# key 358 "KEY_INFO"
+# key 359 "KEY_TIME"
+# key 360 "KEY_VENDOR"
+# key 361 "KEY_ARCHIVE"
+key 362 GUIDE
+# key 363 "KEY_CHANNEL"
+# key 364 "KEY_FAVORITES"
+# key 365 "KEY_EPG"
+key 366 DVR
+# key 367 "KEY_MHP"
+# key 368 "KEY_LANGUAGE"
+key 368 LANG
+# key 369 "KEY_TITLE"
+# key 370 "KEY_SUBTITLE"
+# key 371 "KEY_ANGLE"
+# key 372 "KEY_ZOOM"
+# key 373 "KEY_MODE"
+key 374 LANG # 374 is KEY_KEYBOARD mapped from consumer key 0x0C 0x01AE
+# key 375 "KEY_SCREEN"
+# key 376 "KEY_PC"
+key 377 TV
+# key 378 "KEY_TV2"
+# key 379 "KEY_VCR"
+# key 380 "KEY_VCR2"
+# key 381 "KEY_SAT"
+# key 382 "KEY_SAT2"
+# key 383 "KEY_CD"
+# key 384 "KEY_TAPE"
+# key 385 "KEY_RADIO"
+# key 386 "KEY_TUNER"
+# key 387 "KEY_PLAYER"
+# key 388 "KEY_TEXT"
+# key 389 "KEY_DVD"
+# key 390 "KEY_AUX"
+# key 391 "KEY_MP3"
+# key 392 "KEY_AUDIO"
+# key 393 "KEY_VIDEO"
+# key 394 "KEY_DIRECTORY"
+# key 395 "KEY_LIST"
+# key 396 "KEY_MEMO"
+key 397 CALENDAR
+# key 398 "KEY_RED"
+# key 399 "KEY_GREEN"
+# key 400 "KEY_YELLOW"
+# key 401 "KEY_BLUE"
+key 402 CHANNEL_UP
+key 403 CHANNEL_DOWN
+# key 404 "KEY_FIRST"
+# key 405 "KEY_LAST"
+# key 406 "KEY_AB"
+# key 407 "KEY_NEXT"
+# key 408 "KEY_RESTART"
+# key 409 "KEY_SLOW"
+# key 410 "KEY_SHUFFLE"
+# key 411 "KEY_BREAK"
+# key 412 "KEY_PREVIOUS"
+# key 413 "KEY_DIGITS"
+# key 414 "KEY_TEEN"
+# key 415 "KEY_TWEN"
+
+key 429 CONTACTS
+
+
+
+
+# key 448 "KEY_DEL_EOL"
+# key 449 "KEY_DEL_EOS"
+# key 450 "KEY_INS_LINE"
+# key 451 "KEY_DEL_LINE"
+
+
+key 464 FUNCTION
+key 465 ESCAPE FUNCTION
+key 466 F1 FUNCTION
+key 467 F2 FUNCTION
+key 468 F3 FUNCTION
+key 469 F4 FUNCTION
+key 470 F5 FUNCTION
+key 471 F6 FUNCTION
+key 472 F7 FUNCTION
+key 473 F8 FUNCTION
+key 474 F9 FUNCTION
+key 475 F10 FUNCTION
+key 476 F11 FUNCTION
+key 477 F12 FUNCTION
+key 478 1 FUNCTION
+key 479 2 FUNCTION
+key 480 D FUNCTION
+key 481 E FUNCTION
+key 482 F FUNCTION
+key 483 S FUNCTION
+key 484 B FUNCTION
+
+
+# key 497 KEY_BRL_DOT1
+# key 498 KEY_BRL_DOT2
+# key 499 KEY_BRL_DOT3
+# key 500 KEY_BRL_DOT4
+# key 501 KEY_BRL_DOT5
+# key 502 KEY_BRL_DOT6
+# key 503 KEY_BRL_DOT7
+# key 504 KEY_BRL_DOT8
+
+
+key 704 RECENTAPPS
+key 705 APPLICATION
+key 706 SIP_ON_OFF
+key 707 VOICESEARCH
+key 708 QPANEL_ON_OFF
+
+
+# LEDs
+led 0x00 NUM_LOCK
+led 0x01 CAPS_LOCK
+led 0x02 SCROLL_LOCK
+led 0x03 COMPOSE
+led 0x04 KANA
+led 0x05 SLEEP
+led 0x06 SUSPEND
+led 0x07 MUTE
+led 0x08 MISC
+led 0x09 MAIL
+led 0x0a CHARGING
\ No newline at end of file
diff --git a/keylayout/Vendor_046d_Product_b343.kl b/keylayout/Vendor_046d_Product_b343.kl
new file mode 100644
index 0000000..ada0f14
--- /dev/null
+++ b/keylayout/Vendor_046d_Product_b343.kl
@@ -0,0 +1,419 @@
+# Copyright (C) 2010 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.
+
+#
+# key layout file for full alphabetic US English PC style external keyboards.
+#
+# This file is supporting the logitech (vid = 0x046d) keyboard (pid = 0xb343) with standard
+# mapping, as well as access to enhanced functionnality for the user via F13-F24.
+# This mapping file also restores access to MUSIC, CALENDAR and CONTACTS apps via standard
+# consumerkey usages (USB HUT).
+#
+
+key 1 ESCAPE
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 55 NUMPAD_MULTIPLY
+key 56 ALT_LEFT
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 69 NUM_LOCK
+key 70 SCROLL_LOCK
+key 71 NUMPAD_7
+key 72 NUMPAD_8
+key 73 NUMPAD_9
+key 74 NUMPAD_SUBTRACT
+key 75 NUMPAD_4
+key 76 NUMPAD_5
+key 77 NUMPAD_6
+key 78 NUMPAD_ADD
+key 79 NUMPAD_1
+key 80 NUMPAD_2
+key 81 NUMPAD_3
+key 82 NUMPAD_0
+key 83 NUMPAD_DOT
+# key 84 (undefined)
+# key 85 "KEY_ZENKAKUHANKAKU"
+key 86 BACKSLASH
+key 87 F11
+key 88 F12
+# key 89 "KEY_RO"
+# key 90 "KEY_KATAKANA"
+# key 91 "KEY_HIRAGANA"
+# key 92 "KEY_HENKAN"
+# key 93 "KEY_KATAKANAHIRAGANA"
+# key 94 "KEY_MUHENKAN"
+key 95 NUMPAD_COMMA
+key 96 NUMPAD_ENTER
+key 97 CTRL_RIGHT
+key 98 NUMPAD_DIVIDE
+key 99 SYSRQ
+key 100 ALT_RIGHT
+# key 101 "KEY_LINEFEED"
+key 102 MOVE_HOME
+key 103 DPAD_UP
+key 104 PAGE_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 109 PAGE_DOWN
+key 110 INSERT
+key 111 FORWARD_DEL
+# key 112 "KEY_MACRO"
+key 113 VOLUME_MUTE
+
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+key 116 POWER
+key 117 NUMPAD_EQUALS
+# key 118 "KEY_KPPLUSMINUS"
+key 119 BREAK
+# key 120 (undefined)
+key 121 NUMPAD_COMMA
+# key 122 "KEY_HANGEUL"
+# key 123 "KEY_HANJA"
+# key 124 "KEY_YEN"
+key 125 META_LEFT
+key 126 META_RIGHT
+key 127 MENU
+key 128 MEDIA_STOP
+# key 129 "KEY_AGAIN"
+# key 130 "KEY_PROPS"
+# key 131 "KEY_UNDO"
+# key 132 "KEY_FRONT"
+# key 133 "KEY_COPY"
+# key 134 "KEY_OPEN"
+# key 135 "KEY_PASTE"
+# key 136 "KEY_FIND"
+# key 137 "KEY_CUT"
+# key 138 "KEY_HELP"
+key 139 MENU
+# key 140 "KEY_CALC"
+# key 141 "KEY_SETUP"
+# key 142 "KEY_SLEEP"
+# key 143 "KEY_WAKEUP"
+# key 144 "KEY_FILE"
+# key 145 "KEY_SENDFILE"
+# key 146 "KEY_DELETEFILE"
+# key 147 "KEY_XFER"
+# key 148 "KEY_PROG1"
+# key 149 "KEY_PROG2"
+key 150 EXPLORER
+# key 151 "KEY_MSDOS"
+# key 152 "KEY_COFFEE"
+key 152 POWER
+# key 153 "KEY_DIRECTION"
+# key 154 "KEY_CYCLEWINDOWS"
+key 155 ENVELOPE
+key 156 BOOKMARK
+# key 157 "KEY_COMPUTER"
+key 158 BACK
+key 159 FORWARD
+key 160 MEDIA_CLOSE
+key 161 MEDIA_EJECT
+key 162 MEDIA_EJECT
+key 163 MEDIA_NEXT
+key 164 MEDIA_PLAY_PAUSE
+key 165 MEDIA_PREVIOUS
+key 166 MEDIA_STOP
+key 167 MEDIA_RECORD
+key 168 MEDIA_REWIND
+key 169 CALL
+# key 170 "KEY_ISO"
+key 171 MUSIC
+key 172 HOME
+# key 173 "KEY_REFRESH"
+# key 174 "KEY_EXIT"
+# key 175 "KEY_MOVE"
+# key 176 "KEY_EDIT"
+key 177 PAGE_UP
+key 178 PAGE_DOWN
+key 179 NUMPAD_LEFT_PAREN
+key 180 NUMPAD_RIGHT_PAREN
+# key 181 "KEY_NEW"
+# key 182 "KEY_REDO"
+
+
+key 183 RECENTAPPS #F13
+key 184 APPLICATION #F14
+key 185 SIP_ON_OFF #F15
+key 186 VOICESEARCH #F16
+key 187 QPANEL_ON_OFF #F17
+key 188 LANG #F18
+key 189 BRIGHTNESS_DOWN #F19
+key 190 BRIGHTNESS_UP #F20
+key 191 EMAIL #F21
+#key 192 MULTI_WINDOW #F22
+key 193 CONTACTS #F23
+# key 194 F24
+# key 195 (undefined)
+# key 196 (undefined)
+# key 197 (undefined)
+# key 198 (undefined)
+# key 199 (undefined)
+key 200 MEDIA_PLAY
+key 201 MEDIA_PAUSE
+# key 202 "KEY_PROG3"
+# key 203 "KEY_PROG4"
+# key 204 (undefined)
+# key 205 "KEY_SUSPEND"
+# key 206 "KEY_CLOSE"
+key 207 MEDIA_PLAY
+key 208 MEDIA_FAST_FORWARD
+# key 209 "KEY_BASSBOOST"
+# key 210 "KEY_PRINT"
+# key 211 "KEY_HP"
+key 212 CAMERA
+# key 213 "KEY_SOUND"
+# key 214 "KEY_QUESTION"
+key 215 ENVELOPE
+# key 216 "KEY_CHAT"
+key 217 SEARCH
+# key 218 "KEY_CONNECT"
+# key 219 "KEY_FINANCE"
+# key 220 "KEY_SPORT"
+# key 221 "KEY_SHOP"
+# key 222 "KEY_ALTERASE"
+# key 223 "KEY_CANCEL"
+key 224 BRIGHTNESS_DOWN
+key 225 BRIGHTNESS_UP
+key 226 HEADSETHOOK
+key 227 STAR
+key 228 POUND
+key 229 SOFT_LEFT
+key 230 SOFT_RIGHT
+key 231 CALL
+key 232 DPAD_CENTER
+key 233 HEADSETHOOK
+# key 234 "KEY_0_5" or "KEY_SAVE"
+# key 235 "KEY_2_5" or "KEY_DOCUMENTS"
+# key 236 "KEY_SWITCHVIDEOMODE" or "KEY_BATTERY"
+# key 237 "KEY_KBDILLUMTOGGLE"
+# key 238 "KEY_KBDILLUMDOWN"
+# key 239 "KEY_KBDILLUMUP"
+# key 240 "KEY_UNKNOWN"
+
+# Keys defined by HID usages
+key usage 0x0c006F BRIGHTNESS_UP
+key usage 0x0c0070 BRIGHTNESS_DOWN
+
+
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 306 BUTTON_C
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 309 BUTTON_Z
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 312 BUTTON_L2
+key 313 BUTTON_R2
+key 314 BUTTON_SELECT
+key 315 BUTTON_START
+key 316 BUTTON_MODE
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+
+# key 352 "KEY_OK"
+# key 353 "KEY_SELECT"
+# key 354 "KEY_GOTO"
+# key 355 "KEY_CLEAR"
+# key 356 "KEY_POWER2"
+# key 357 "KEY_OPTION"
+# key 358 "KEY_INFO"
+# key 359 "KEY_TIME"
+# key 360 "KEY_VENDOR"
+# key 361 "KEY_ARCHIVE"
+key 362 GUIDE
+# key 363 "KEY_CHANNEL"
+# key 364 "KEY_FAVORITES"
+# key 365 "KEY_EPG"
+key 366 DVR
+# key 367 "KEY_MHP"
+# key 368 "KEY_LANGUAGE"
+key 368 LANG
+# key 369 "KEY_TITLE"
+# key 370 "KEY_SUBTITLE"
+# key 371 "KEY_ANGLE"
+# key 372 "KEY_ZOOM"
+# key 373 "KEY_MODE"
+key 374 LANG # 374 is KEY_KEYBOARD mapped from consumer key 0x0C 0x01AE
+# key 375 "KEY_SCREEN"
+# key 376 "KEY_PC"
+key 377 TV
+# key 378 "KEY_TV2"
+# key 379 "KEY_VCR"
+# key 380 "KEY_VCR2"
+# key 381 "KEY_SAT"
+# key 382 "KEY_SAT2"
+# key 383 "KEY_CD"
+# key 384 "KEY_TAPE"
+# key 385 "KEY_RADIO"
+# key 386 "KEY_TUNER"
+# key 387 "KEY_PLAYER"
+# key 388 "KEY_TEXT"
+# key 389 "KEY_DVD"
+# key 390 "KEY_AUX"
+# key 391 "KEY_MP3"
+# key 392 "KEY_AUDIO"
+# key 393 "KEY_VIDEO"
+# key 394 "KEY_DIRECTORY"
+# key 395 "KEY_LIST"
+# key 396 "KEY_MEMO"
+key 397 CALENDAR
+# key 398 "KEY_RED"
+# key 399 "KEY_GREEN"
+# key 400 "KEY_YELLOW"
+# key 401 "KEY_BLUE"
+key 402 CHANNEL_UP
+key 403 CHANNEL_DOWN
+# key 404 "KEY_FIRST"
+# key 405 "KEY_LAST"
+# key 406 "KEY_AB"
+# key 407 "KEY_NEXT"
+# key 408 "KEY_RESTART"
+# key 409 "KEY_SLOW"
+# key 410 "KEY_SHUFFLE"
+# key 411 "KEY_BREAK"
+# key 412 "KEY_PREVIOUS"
+# key 413 "KEY_DIGITS"
+# key 414 "KEY_TEEN"
+# key 415 "KEY_TWEN"
+
+key 429 CONTACTS
+
+
+
+
+# key 448 "KEY_DEL_EOL"
+# key 449 "KEY_DEL_EOS"
+# key 450 "KEY_INS_LINE"
+# key 451 "KEY_DEL_LINE"
+
+
+key 464 FUNCTION
+key 465 ESCAPE FUNCTION
+key 466 F1 FUNCTION
+key 467 F2 FUNCTION
+key 468 F3 FUNCTION
+key 469 F4 FUNCTION
+key 470 F5 FUNCTION
+key 471 F6 FUNCTION
+key 472 F7 FUNCTION
+key 473 F8 FUNCTION
+key 474 F9 FUNCTION
+key 475 F10 FUNCTION
+key 476 F11 FUNCTION
+key 477 F12 FUNCTION
+key 478 1 FUNCTION
+key 479 2 FUNCTION
+key 480 D FUNCTION
+key 481 E FUNCTION
+key 482 F FUNCTION
+key 483 S FUNCTION
+key 484 B FUNCTION
+
+
+# key 497 KEY_BRL_DOT1
+# key 498 KEY_BRL_DOT2
+# key 499 KEY_BRL_DOT3
+# key 500 KEY_BRL_DOT4
+# key 501 KEY_BRL_DOT5
+# key 502 KEY_BRL_DOT6
+# key 503 KEY_BRL_DOT7
+# key 504 KEY_BRL_DOT8
+
+
+key 704 RECENTAPPS
+key 705 APPLICATION
+key 706 SIP_ON_OFF
+key 707 VOICESEARCH
+key 708 QPANEL_ON_OFF
+
+# LEDs
+led 0x00 NUM_LOCK
+led 0x01 CAPS_LOCK
+led 0x02 SCROLL_LOCK
+led 0x03 COMPOSE
+led 0x04 KANA
+led 0x05 SLEEP
+led 0x06 SUSPEND
+led 0x07 MUTE
+led 0x08 MISC
+led 0x09 MAIL
+led 0x0a CHARGING
\ No newline at end of file
diff --git a/keylayout/Vendor_046d_Product_b344.kl b/keylayout/Vendor_046d_Product_b344.kl
new file mode 100644
index 0000000..1b8340c
--- /dev/null
+++ b/keylayout/Vendor_046d_Product_b344.kl
@@ -0,0 +1,419 @@
+# Copyright (C) 2010 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.
+
+#
+# key layout file for full alphabetic US English PC style external keyboards.
+#
+# This file is supporting the logitech (vid = 0x046d) keyboard (pid = 0xb344) with standard
+# mapping, as well as access to enhanced functionnality for the user via F13-F24.
+# This mapping file also restores access to MUSIC, CALENDAR and CONTACTS apps via standard
+# consumerkey usages (USB HUT).
+#
+
+key 1 ESCAPE
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 55 NUMPAD_MULTIPLY
+key 56 ALT_LEFT
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 69 NUM_LOCK
+key 70 SCROLL_LOCK
+key 71 NUMPAD_7
+key 72 NUMPAD_8
+key 73 NUMPAD_9
+key 74 NUMPAD_SUBTRACT
+key 75 NUMPAD_4
+key 76 NUMPAD_5
+key 77 NUMPAD_6
+key 78 NUMPAD_ADD
+key 79 NUMPAD_1
+key 80 NUMPAD_2
+key 81 NUMPAD_3
+key 82 NUMPAD_0
+key 83 NUMPAD_DOT
+# key 84 (undefined)
+# key 85 "KEY_ZENKAKUHANKAKU"
+key 86 BACKSLASH
+key 87 F11
+key 88 F12
+# key 89 "KEY_RO"
+# key 90 "KEY_KATAKANA"
+# key 91 "KEY_HIRAGANA"
+# key 92 "KEY_HENKAN"
+# key 93 "KEY_KATAKANAHIRAGANA"
+# key 94 "KEY_MUHENKAN"
+key 95 NUMPAD_COMMA
+key 96 NUMPAD_ENTER
+key 97 CTRL_RIGHT
+key 98 NUMPAD_DIVIDE
+key 99 SYSRQ
+key 100 ALT_RIGHT
+# key 101 "KEY_LINEFEED"
+key 102 MOVE_HOME
+key 103 DPAD_UP
+key 104 PAGE_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 109 PAGE_DOWN
+key 110 INSERT
+key 111 FORWARD_DEL
+# key 112 "KEY_MACRO"
+key 113 VOLUME_MUTE
+
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+key 116 POWER
+key 117 NUMPAD_EQUALS
+# key 118 "KEY_KPPLUSMINUS"
+key 119 BREAK
+# key 120 (undefined)
+key 121 NUMPAD_COMMA
+# key 122 "KEY_HANGEUL"
+# key 123 "KEY_HANJA"
+# key 124 "KEY_YEN"
+key 125 META_LEFT
+key 126 META_RIGHT
+key 127 MENU
+key 128 MEDIA_STOP
+# key 129 "KEY_AGAIN"
+# key 130 "KEY_PROPS"
+# key 131 "KEY_UNDO"
+# key 132 "KEY_FRONT"
+# key 133 "KEY_COPY"
+# key 134 "KEY_OPEN"
+# key 135 "KEY_PASTE"
+# key 136 "KEY_FIND"
+# key 137 "KEY_CUT"
+# key 138 "KEY_HELP"
+key 139 MENU
+# key 140 "KEY_CALC"
+# key 141 "KEY_SETUP"
+# key 142 "KEY_SLEEP"
+# key 143 "KEY_WAKEUP"
+# key 144 "KEY_FILE"
+# key 145 "KEY_SENDFILE"
+# key 146 "KEY_DELETEFILE"
+# key 147 "KEY_XFER"
+# key 148 "KEY_PROG1"
+# key 149 "KEY_PROG2"
+key 150 EXPLORER
+# key 151 "KEY_MSDOS"
+# key 152 "KEY_COFFEE"
+key 152 POWER
+# key 153 "KEY_DIRECTION"
+# key 154 "KEY_CYCLEWINDOWS"
+key 155 ENVELOPE
+key 156 BOOKMARK
+# key 157 "KEY_COMPUTER"
+key 158 BACK
+key 159 FORWARD
+key 160 MEDIA_CLOSE
+key 161 MEDIA_EJECT
+key 162 MEDIA_EJECT
+key 163 MEDIA_NEXT
+key 164 MEDIA_PLAY_PAUSE
+key 165 MEDIA_PREVIOUS
+key 166 MEDIA_STOP
+key 167 MEDIA_RECORD
+key 168 MEDIA_REWIND
+key 169 CALL
+# key 170 "KEY_ISO"
+key 171 MUSIC
+key 172 HOME
+# key 173 "KEY_REFRESH"
+# key 174 "KEY_EXIT"
+# key 175 "KEY_MOVE"
+# key 176 "KEY_EDIT"
+key 177 PAGE_UP
+key 178 PAGE_DOWN
+key 179 NUMPAD_LEFT_PAREN
+key 180 NUMPAD_RIGHT_PAREN
+# key 181 "KEY_NEW"
+# key 182 "KEY_REDO"
+
+
+key 183 RECENTAPPS #F13
+key 184 APPLICATION #F14
+key 185 SIP_ON_OFF #F15
+key 186 VOICESEARCH #F16
+key 187 QPANEL_ON_OFF #F17
+key 188 LANG #F18
+key 189 BRIGHTNESS_DOWN #F19
+key 190 BRIGHTNESS_UP #F20
+key 191 EMAIL #F21
+#key 192 MULTI_WINDOW #F22
+key 193 CONTACTS #F23
+# key 194 F24
+# key 195 (undefined)
+# key 196 (undefined)
+# key 197 (undefined)
+# key 198 (undefined)
+# key 199 (undefined)
+key 200 MEDIA_PLAY
+key 201 MEDIA_PAUSE
+# key 202 "KEY_PROG3"
+# key 203 "KEY_PROG4"
+# key 204 (undefined)
+# key 205 "KEY_SUSPEND"
+# key 206 "KEY_CLOSE"
+key 207 MEDIA_PLAY
+key 208 MEDIA_FAST_FORWARD
+# key 209 "KEY_BASSBOOST"
+# key 210 "KEY_PRINT"
+# key 211 "KEY_HP"
+key 212 CAMERA
+# key 213 "KEY_SOUND"
+# key 214 "KEY_QUESTION"
+key 215 ENVELOPE
+# key 216 "KEY_CHAT"
+key 217 SEARCH
+# key 218 "KEY_CONNECT"
+# key 219 "KEY_FINANCE"
+# key 220 "KEY_SPORT"
+# key 221 "KEY_SHOP"
+# key 222 "KEY_ALTERASE"
+# key 223 "KEY_CANCEL"
+key 224 BRIGHTNESS_DOWN
+key 225 BRIGHTNESS_UP
+key 226 HEADSETHOOK
+key 227 STAR
+key 228 POUND
+key 229 SOFT_LEFT
+key 230 SOFT_RIGHT
+key 231 CALL
+key 232 DPAD_CENTER
+key 233 HEADSETHOOK
+# key 234 "KEY_0_5" or "KEY_SAVE"
+# key 235 "KEY_2_5" or "KEY_DOCUMENTS"
+# key 236 "KEY_SWITCHVIDEOMODE" or "KEY_BATTERY"
+# key 237 "KEY_KBDILLUMTOGGLE"
+# key 238 "KEY_KBDILLUMDOWN"
+# key 239 "KEY_KBDILLUMUP"
+# key 240 "KEY_UNKNOWN"
+
+# Keys defined by HID usages
+key usage 0x0c006F BRIGHTNESS_UP
+key usage 0x0c0070 BRIGHTNESS_DOWN
+
+
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 306 BUTTON_C
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 309 BUTTON_Z
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 312 BUTTON_L2
+key 313 BUTTON_R2
+key 314 BUTTON_SELECT
+key 315 BUTTON_START
+key 316 BUTTON_MODE
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+
+# key 352 "KEY_OK"
+# key 353 "KEY_SELECT"
+# key 354 "KEY_GOTO"
+# key 355 "KEY_CLEAR"
+# key 356 "KEY_POWER2"
+# key 357 "KEY_OPTION"
+# key 358 "KEY_INFO"
+# key 359 "KEY_TIME"
+# key 360 "KEY_VENDOR"
+# key 361 "KEY_ARCHIVE"
+key 362 GUIDE
+# key 363 "KEY_CHANNEL"
+# key 364 "KEY_FAVORITES"
+# key 365 "KEY_EPG"
+key 366 DVR
+# key 367 "KEY_MHP"
+# key 368 "KEY_LANGUAGE"
+key 368 LANG
+# key 369 "KEY_TITLE"
+# key 370 "KEY_SUBTITLE"
+# key 371 "KEY_ANGLE"
+# key 372 "KEY_ZOOM"
+# key 373 "KEY_MODE"
+key 374 LANG # 374 is KEY_KEYBOARD mapped from consumer key 0x0C 0x01AE
+# key 375 "KEY_SCREEN"
+# key 376 "KEY_PC"
+key 377 TV
+# key 378 "KEY_TV2"
+# key 379 "KEY_VCR"
+# key 380 "KEY_VCR2"
+# key 381 "KEY_SAT"
+# key 382 "KEY_SAT2"
+# key 383 "KEY_CD"
+# key 384 "KEY_TAPE"
+# key 385 "KEY_RADIO"
+# key 386 "KEY_TUNER"
+# key 387 "KEY_PLAYER"
+# key 388 "KEY_TEXT"
+# key 389 "KEY_DVD"
+# key 390 "KEY_AUX"
+# key 391 "KEY_MP3"
+# key 392 "KEY_AUDIO"
+# key 393 "KEY_VIDEO"
+# key 394 "KEY_DIRECTORY"
+# key 395 "KEY_LIST"
+# key 396 "KEY_MEMO"
+key 397 CALENDAR
+# key 398 "KEY_RED"
+# key 399 "KEY_GREEN"
+# key 400 "KEY_YELLOW"
+# key 401 "KEY_BLUE"
+key 402 CHANNEL_UP
+key 403 CHANNEL_DOWN
+# key 404 "KEY_FIRST"
+# key 405 "KEY_LAST"
+# key 406 "KEY_AB"
+# key 407 "KEY_NEXT"
+# key 408 "KEY_RESTART"
+# key 409 "KEY_SLOW"
+# key 410 "KEY_SHUFFLE"
+# key 411 "KEY_BREAK"
+# key 412 "KEY_PREVIOUS"
+# key 413 "KEY_DIGITS"
+# key 414 "KEY_TEEN"
+# key 415 "KEY_TWEN"
+
+key 429 CONTACTS
+
+
+
+
+# key 448 "KEY_DEL_EOL"
+# key 449 "KEY_DEL_EOS"
+# key 450 "KEY_INS_LINE"
+# key 451 "KEY_DEL_LINE"
+
+
+key 464 FUNCTION
+key 465 ESCAPE FUNCTION
+key 466 F1 FUNCTION
+key 467 F2 FUNCTION
+key 468 F3 FUNCTION
+key 469 F4 FUNCTION
+key 470 F5 FUNCTION
+key 471 F6 FUNCTION
+key 472 F7 FUNCTION
+key 473 F8 FUNCTION
+key 474 F9 FUNCTION
+key 475 F10 FUNCTION
+key 476 F11 FUNCTION
+key 477 F12 FUNCTION
+key 478 1 FUNCTION
+key 479 2 FUNCTION
+key 480 D FUNCTION
+key 481 E FUNCTION
+key 482 F FUNCTION
+key 483 S FUNCTION
+key 484 B FUNCTION
+
+
+# key 497 KEY_BRL_DOT1
+# key 498 KEY_BRL_DOT2
+# key 499 KEY_BRL_DOT3
+# key 500 KEY_BRL_DOT4
+# key 501 KEY_BRL_DOT5
+# key 502 KEY_BRL_DOT6
+# key 503 KEY_BRL_DOT7
+# key 504 KEY_BRL_DOT8
+
+
+key 704 RECENTAPPS
+key 705 APPLICATION
+key 706 SIP_ON_OFF
+key 707 VOICESEARCH
+key 708 QPANEL_ON_OFF
+
+# LEDs
+led 0x00 NUM_LOCK
+led 0x01 CAPS_LOCK
+led 0x02 SCROLL_LOCK
+led 0x03 COMPOSE
+led 0x04 KANA
+led 0x05 SLEEP
+led 0x06 SUSPEND
+led 0x07 MUTE
+led 0x08 MISC
+led 0x09 MAIL
+led 0x0a CHARGING
\ No newline at end of file
diff --git a/keylayout/Vendor_046d_Product_c216.kl b/keylayout/Vendor_046d_Product_c216.kl
new file mode 100644
index 0000000..6743323
--- /dev/null
+++ b/keylayout/Vendor_046d_Product_c216.kl
@@ -0,0 +1,37 @@
+# Copyright (C) 2011 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.
+
+#
+# Logitech Dual Action Controller
+#
+
+key 0x120 BUTTON_A
+key 0x123 BUTTON_B
+key 0x121 BUTTON_X
+key 0x122 BUTTON_Y
+key 0x124 BUTTON_L1
+key 0x125 BUTTON_R1
+key 0x126 BUTTON_L2
+key 0x127 BUTTON_R2
+key 0x128 BUTTON_SELECT
+key 0x129 BUTTON_START
+key 0x12a BUTTON_THUMBL
+key 0x12b BUTTON_THUMBR
+
+axis 0x00 X
+axis 0x01 Y
+axis 0x02 Z
+axis 0x05 RZ
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
diff --git a/keylayout/Vendor_046d_Product_c219.kl b/keylayout/Vendor_046d_Product_c219.kl
new file mode 100644
index 0000000..2fa964c
--- /dev/null
+++ b/keylayout/Vendor_046d_Product_c219.kl
@@ -0,0 +1,35 @@
+# Copyright (C) 2013 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.
+
+# Logitech Logitech Cordless RumblePad 2
+
+key 305 BUTTON_A
+key 306 BUTTON_B
+key 304 BUTTON_X
+key 307 BUTTON_Y
+key 308 BUTTON_L1
+key 309 BUTTON_R1
+key 310 BUTTON_L2
+key 311 BUTTON_R2
+key 313 BUTTON_START
+key 312 BACK
+key 314 BUTTON_THUMBL
+key 315 BUTTON_THUMBR
+
+axis 0x00 X
+axis 0x01 Y
+axis 0x02 Z
+axis 0x05 RZ
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
diff --git a/keylayout/Vendor_046d_Product_c21d.kl b/keylayout/Vendor_046d_Product_c21d.kl
new file mode 100644
index 0000000..3fbdecc
--- /dev/null
+++ b/keylayout/Vendor_046d_Product_c21d.kl
@@ -0,0 +1,36 @@
+# Copyright (C) 2014 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.
+
+# Logitech F310
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 315 BUTTON_START
+key 314 BACK
+key 316 HOME
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+axis 0x00 X
+axis 0x01 Y
+axis 0x03 Z
+axis 0x04 RZ
+axis 0x05 GAS
+axis 0x02 BRAKE
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
diff --git a/keylayout/Vendor_046d_Product_c21f.kl b/keylayout/Vendor_046d_Product_c21f.kl
new file mode 100644
index 0000000..a9ba378
--- /dev/null
+++ b/keylayout/Vendor_046d_Product_c21f.kl
@@ -0,0 +1,36 @@
+# Copyright (C) 2013 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.
+
+# Logitech Wireless Gamepad F710
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 315 BUTTON_START
+key 314 BACK
+key 316 HOME
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+axis 0x00 X
+axis 0x01 Y
+axis 0x03 Z
+axis 0x04 RZ
+axis 0x05 RTRIGGER
+axis 0x02 LTRIGGER
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
diff --git a/keylayout/Vendor_046d_Product_c294.kl b/keylayout/Vendor_046d_Product_c294.kl
new file mode 100644
index 0000000..5492f49
--- /dev/null
+++ b/keylayout/Vendor_046d_Product_c294.kl
@@ -0,0 +1,53 @@
+# Copyright (C) 2011 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.
+
+#
+# Logitech G25 Racing Wheel (in Compatibility Mode)
+#
+
+# 4 way buttons above hat
+key 0x121 BUTTON_A
+key 0x123 BUTTON_B
+key 0x120 BUTTON_X
+key 0x122 BUTTON_Y
+
+# Row of buttons under hat
+key 0x12b BUTTON_1
+key 0x128 BUTTON_2
+key 0x129 BUTTON_3
+key 0x12a BUTTON_4
+
+# Gear shift positions
+# 0x12a top-left gear (aliased as BUTTON_4)
+# 0x12b bottom-left gear (aliased as BUTTON_1)
+
+# Buttons on wheel
+key 0x127 BUTTON_L1
+key 0x126 BUTTON_R1
+
+# Toggles under wheel
+key 0x125 BUTTON_L2
+key 0x124 BUTTON_R2
+
+# Hat
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
+
+# Steering Wheel
+axis 0x00 WHEEL
+
+# Accelerator / Brake
+# 00..7e : accelerator
+# 80..ff : brake
+axis 0x01 split 0x7f GAS BRAKE
diff --git a/keylayout/Vendor_046d_Product_c299.kl b/keylayout/Vendor_046d_Product_c299.kl
new file mode 100644
index 0000000..d42963d
--- /dev/null
+++ b/keylayout/Vendor_046d_Product_c299.kl
@@ -0,0 +1,62 @@
+# Copyright (C) 2011 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.
+
+#
+# Logitech G25 Racing Wheel (in Native Mode)
+#
+
+# 4 way buttons above hat
+key 0x121 BUTTON_A
+key 0x123 BUTTON_B
+key 0x120 BUTTON_X
+key 0x122 BUTTON_Y
+
+# Row of buttons under hat
+key 0x12b BUTTON_1
+key 0x128 BUTTON_2
+key 0x129 BUTTON_3
+key 0x12a BUTTON_4
+
+# Gear shift positions
+key 0x12c BUTTON_5
+key 0x12d BUTTON_6
+key 0x12e BUTTON_7
+key 0x12f BUTTON_8
+key 0x2d0 BUTTON_9
+key 0x2d1 BUTTON_10
+key 0x2d2 BUTTON_11
+
+# Buttons on wheel
+key 0x127 BUTTON_L1
+key 0x126 BUTTON_R1
+
+# Toggles under wheel
+key 0x125 BUTTON_L2
+key 0x124 BUTTON_R2
+
+# Hat
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
+
+# Steering Wheel
+axis 0x00 WHEEL
+
+# Clutch
+axis 0x01 invert GENERIC_1
+
+# Accelerator
+axis 0x02 invert GAS
+
+# Brake
+axis 0x05 invert BRAKE
diff --git a/keylayout/Vendor_046d_Product_c532.kl b/keylayout/Vendor_046d_Product_c532.kl
new file mode 100644
index 0000000..1ba718c
--- /dev/null
+++ b/keylayout/Vendor_046d_Product_c532.kl
@@ -0,0 +1,146 @@
+# Copyright (C) 2010 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.
+
+#
+# Logitech Revue Wireless keyboard
+#
+# Notes:
+# - The GRAVE key is emulated by the keyboard.
+# ALT + LEFT_BRACKET produces GRAVE.
+# ALT + RIGHT_BRACKET produces SHIFT + GRAVE.
+# - FORWARD_DEL is produced by fn + BACKSPACE
+# - PAGE_UP / PAGE_DOWN is produced by fn + CHANNEL_UP / CHANNEL_DOWN
+# - The AVR / STB / TV power and input buttons seem to be non-functional
+# as well as several of the other fn buttons and the PIP button?
+
+key 1 ESCAPE
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 56 ALT_RIGHT
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 87 F11
+key 88 F12
+key 96 DPAD_CENTER
+key 97 CTRL_RIGHT
+key 102 MOVE_HOME
+key 103 DPAD_UP
+key 104 PAGE_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 109 PAGE_DOWN
+key 110 NUMPAD_ENTER
+key 111 FORWARD_DEL
+key 113 VOLUME_MUTE
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+key 119 MEDIA_PAUSE
+key 125 SEARCH
+key 127 MENU
+key 156 BOOKMARK
+key 158 BACK
+key 163 MEDIA_NEXT
+key 165 MEDIA_PREVIOUS
+key 166 MEDIA_STOP
+key 167 MEDIA_RECORD
+key 168 MEDIA_REWIND
+key 172 HOME
+key 207 MEDIA_PLAY
+key 208 MEDIA_FAST_FORWARD
+# key 288 left mouse button
+# key 289 right mouse button (fn + button)
+key 362 GUIDE
+key 366 DVR
+key 377 TV
+key 402 CHANNEL_UP
+key 403 CHANNEL_DOWN
+key 418 ZOOM_IN
+key 419 ZOOM_OUT
+
+
+# LEDs
+led 0x00 NUM_LOCK
+led 0x01 CAPS_LOCK
+led 0x02 SCROLL_LOCK
+led 0x03 COMPOSE
+led 0x04 KANA
+led 0x05 SLEEP
+led 0x06 SUSPEND
+led 0x07 MUTE
+led 0x08 MISC
+led 0x09 MAIL
+led 0x0a CHARGING
\ No newline at end of file
diff --git a/keylayout/Vendor_04e8_Product_7021.kl b/keylayout/Vendor_04e8_Product_7021.kl
new file mode 100644
index 0000000..645e481
--- /dev/null
+++ b/keylayout/Vendor_04e8_Product_7021.kl
@@ -0,0 +1,408 @@
+# Copyright (C) 2010 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.
+
+#
+# Generic key layout file for full alphabetic US English PC style external keyboards.
+#
+# This file is intentionally very generic and is intended to support a broad rang of keyboards.
+# Do not edit the generic key layout to support a specific keyboard; instead, create
+# a new key layout file with the required keyboard configuration.
+#
+
+key 1 BACK
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 55 NUMPAD_MULTIPLY
+key 56 ALT_LEFT
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 69 NUM_LOCK
+key 70 SCROLL_LOCK
+key 71 NUMPAD_7
+key 72 NUMPAD_8
+key 73 NUMPAD_9
+key 74 NUMPAD_SUBTRACT
+key 75 NUMPAD_4
+key 76 NUMPAD_5
+key 77 NUMPAD_6
+key 78 NUMPAD_ADD
+key 79 NUMPAD_1
+key 80 NUMPAD_2
+key 81 NUMPAD_3
+key 82 NUMPAD_0
+key 83 NUMPAD_DOT
+# key 84 (undefined)
+# key 85 "KEY_ZENKAKUHANKAKU"
+key 86 BACKSLASH
+key 87 F11
+key 88 F12
+key 89 RO
+# key 90 "KEY_KATAKANA"
+# key 91 "KEY_HIRAGANA"
+# key 92 "KEY_HENKAN"
+# key 93 "KEY_KATAKANAHIRAGANA"
+# key 94 "KEY_MUHENKAN"
+key 95 NUMPAD_COMMA
+key 96 NUMPAD_ENTER
+key 97 CTRL_RIGHT
+key 98 NUMPAD_DIVIDE
+key 99 SYSRQ
+key 100 ALT_RIGHT
+# key 101 "KEY_LINEFEED"
+key 102 MOVE_HOME
+key 103 DPAD_UP
+key 104 PAGE_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 109 PAGE_DOWN
+key 110 INSERT
+key 111 FORWARD_DEL
+# key 112 "KEY_MACRO"
+key 113 VOLUME_MUTE
+
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+key 116 POWER
+key 117 NUMPAD_EQUALS
+# key 118 "KEY_KPPLUSMINUS"
+key 119 BREAK
+# key 120 (undefined)
+key 121 NUMPAD_COMMA
+key 122 LANG
+# key 123 "KEY_HANJA"
+# key 124 "KEY_YEN"
+key 125 META_LEFT
+key 126 META_RIGHT
+key 127 MENU
+key 128 MEDIA_STOP
+# key 129 "KEY_AGAIN"
+# key 130 "KEY_PROPS"
+# key 131 "KEY_UNDO"
+# key 132 "KEY_FRONT"
+# key 133 "KEY_COPY"
+# key 134 "KEY_OPEN"
+# key 135 "KEY_PASTE"
+# key 136 "KEY_FIND"
+# key 137 "KEY_CUT"
+# key 138 "KEY_HELP"
+key 139 MENU
+# key 140 "KEY_CALC"
+# key 141 "KEY_SETUP"
+# key 142 "KEY_SLEEP"
+# key 143 "KEY_WAKEUP"
+# key 144 "KEY_FILE"
+# key 145 "KEY_SENDFILE"
+# key 146 "KEY_DELETEFILE"
+# key 147 "KEY_XFER"
+# key 148 "KEY_PROG1"
+# key 149 "KEY_PROG2"
+key 150 EXPLORER
+# key 151 "KEY_MSDOS"
+# key 152 "KEY_COFFEE"
+key 152 POWER
+# key 153 "KEY_DIRECTION"
+# key 154 "KEY_CYCLEWINDOWS"
+key 155 EMAIL
+key 156 BOOKMARK
+# key 157 "KEY_COMPUTER"
+key 158 BACK
+key 159 FORWARD
+key 160 MEDIA_CLOSE
+key 161 MEDIA_EJECT
+key 162 MEDIA_EJECT
+key 163 MEDIA_NEXT
+key 164 MEDIA_PLAY_PAUSE
+key 165 MEDIA_PREVIOUS
+key 166 MEDIA_STOP
+key 167 MEDIA_RECORD
+key 168 MEDIA_REWIND
+key 169 CALL
+# key 170 "KEY_ISO"
+# key 171 "KEY_CONFIG"
+key 172 HOME
+# key 173 "KEY_REFRESH"
+# key 174 "KEY_EXIT"
+# key 175 "KEY_MOVE"
+# key 176 "KEY_EDIT"
+key 177 PAGE_UP
+key 178 PAGE_DOWN
+key 179 NUMPAD_LEFT_PAREN
+key 180 NUMPAD_RIGHT_PAREN
+# key 181 "KEY_NEW"
+# key 182 "KEY_REDO"
+# key 183 F13
+# key 184 F14
+# key 185 F15
+# key 186 F16
+# key 187 F17
+# key 188 F18
+# key 189 F19
+# key 190 F20
+# key 191 F21
+# key 192 F22
+# key 193 F23
+# key 194 F24
+# key 195 (undefined)
+# key 196 (undefined)
+# key 197 (undefined)
+# key 198 (undefined)
+# key 199 (undefined)
+key 200 MEDIA_PLAY
+key 201 MEDIA_PAUSE
+# key 202 "KEY_PROG3"
+# key 203 "KEY_PROG4"
+# key 204 (undefined)
+# key 205 "KEY_SUSPEND"
+# key 206 "KEY_CLOSE"
+key 207 MEDIA_PLAY
+key 208 MEDIA_FAST_FORWARD
+# key 209 "KEY_BASSBOOST"
+# key 210 "KEY_PRINT"
+# key 211 "KEY_HP"
+key 212 CAMERA
+# key 213 "KEY_SOUND"
+# key 214 "KEY_QUESTION"
+key 215 ENVELOPE
+# key 216 "KEY_CHAT"
+key 217 SEARCH
+# key 218 "KEY_CONNECT"
+# key 219 "KEY_FINANCE"
+# key 220 "KEY_SPORT"
+# key 221 "KEY_SHOP"
+# key 222 "KEY_ALTERASE"
+# key 223 "KEY_CANCEL"
+key 224 BRIGHTNESS_DOWN
+key 225 BRIGHTNESS_UP
+key 226 HEADSETHOOK
+key 227 STAR
+key 228 POUND
+key 229 SOFT_LEFT
+key 230 SOFT_RIGHT
+key 231 CALL
+key 232 DPAD_CENTER
+key 233 HEADSETHOOK
+# key 234 "KEY_0_5" or "KEY_SAVE"
+# key 235 "KEY_2_5" or "KEY_DOCUMENTS"
+# key 236 "KEY_SWITCHVIDEOMODE" or "KEY_BATTERY"
+# key 237 "KEY_KBDILLUMTOGGLE"
+# key 238 "KEY_KBDILLUMDOWN"
+# key 239 "KEY_KBDILLUMUP"
+# key 240 "KEY_UNKNOWN"
+
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 306 BUTTON_C
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 309 BUTTON_Z
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 312 BUTTON_L2
+key 313 BUTTON_R2
+key 314 BUTTON_SELECT
+key 315 BUTTON_START
+key 316 BUTTON_MODE
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+
+# key 352 "KEY_OK"
+# key 353 "KEY_SELECT"
+# key 354 "KEY_GOTO"
+# key 355 "KEY_CLEAR"
+# key 356 "KEY_POWER2"
+# key 357 "KEY_OPTION"
+# key 358 "KEY_INFO"
+# key 359 "KEY_TIME"
+# key 360 "KEY_VENDOR"
+# key 361 "KEY_ARCHIVE"
+key 362 GUIDE
+# key 363 "KEY_CHANNEL"
+# key 364 "KEY_FAVORITES"
+# key 365 "KEY_EPG"
+key 366 DVR
+# key 367 "KEY_MHP"
+# key 368 "KEY_LANGUAGE"
+key 368 LANG
+# key 369 "KEY_TITLE"
+# key 370 "KEY_SUBTITLE"
+# key 371 "KEY_ANGLE"
+# key 372 "KEY_ZOOM"
+# key 373 "KEY_MODE"
+# key 374 "KEY_KEYBOARD"
+# key 375 "KEY_SCREEN"
+# key 376 "KEY_PC"
+key 377 TV
+# key 378 "KEY_TV2"
+# key 379 "KEY_VCR"
+# key 380 "KEY_VCR2"
+# key 381 "KEY_SAT"
+# key 382 "KEY_SAT2"
+# key 383 "KEY_CD"
+# key 384 "KEY_TAPE"
+# key 385 "KEY_RADIO"
+# key 386 "KEY_TUNER"
+# key 387 "KEY_PLAYER"
+# key 388 "KEY_TEXT"
+# key 389 "KEY_DVD"
+# key 390 "KEY_AUX"
+# key 391 "KEY_MP3"
+# key 392 "KEY_AUDIO"
+# key 393 "KEY_VIDEO"
+# key 394 "KEY_DIRECTORY"
+# key 395 "KEY_LIST"
+# key 396 "KEY_MEMO"
+# key 397 "KEY_CALENDAR"
+# key 398 "KEY_RED"
+# key 399 "KEY_GREEN"
+# key 400 "KEY_YELLOW"
+# key 401 "KEY_BLUE"
+key 402 CHANNEL_UP
+key 403 CHANNEL_DOWN
+# key 404 "KEY_FIRST"
+# key 405 "KEY_LAST"
+# key 406 "KEY_AB"
+# key 407 "KEY_NEXT"
+# key 408 "KEY_RESTART"
+# key 409 "KEY_SLOW"
+# key 410 "KEY_SHUFFLE"
+# key 411 "KEY_BREAK"
+# key 412 "KEY_PREVIOUS"
+# key 413 "KEY_DIGITS"
+# key 414 "KEY_TEEN"
+# key 415 "KEY_TWEN"
+
+
+# key 448 "KEY_DEL_EOL"
+# key 449 "KEY_DEL_EOS"
+# key 450 "KEY_INS_LINE"
+# key 451 "KEY_DEL_LINE"
+
+
+key 464 FUNCTION
+key 465 ESCAPE FUNCTION
+key 466 F1 FUNCTION
+key 467 F2 FUNCTION
+key 468 F3 FUNCTION
+key 469 F4 FUNCTION
+key 470 F5 FUNCTION
+key 471 F6 FUNCTION
+key 472 F7 FUNCTION
+key 473 F8 FUNCTION
+key 474 F9 FUNCTION
+key 475 F10 FUNCTION
+key 476 F11 FUNCTION
+key 477 F12 FUNCTION
+key 478 1 FUNCTION
+key 479 2 FUNCTION
+key 480 D FUNCTION
+key 481 E FUNCTION
+key 482 F FUNCTION
+key 483 S FUNCTION
+key 484 B FUNCTION
+
+
+# key 497 KEY_BRL_DOT1
+# key 498 KEY_BRL_DOT2
+# key 499 KEY_BRL_DOT3
+# key 500 KEY_BRL_DOT4
+# key 501 KEY_BRL_DOT5
+# key 502 KEY_BRL_DOT6
+# key 503 KEY_BRL_DOT7
+# key 504 KEY_BRL_DOT8
+
+
+key 704 RECENTAPPS
+key 705 APPLICATION
+key 706 SIP_ON_OFF
+key 707 VOICESEARCH
+key 708 QPANEL_ON_OFF
+
+
+# LEDs
+led 0x00 NUM_LOCK
+led 0x01 CAPS_LOCK
+led 0x02 SCROLL_LOCK
+led 0x03 COMPOSE
+led 0x04 KANA
+led 0x05 SLEEP
+led 0x06 SUSPEND
+led 0x07 MUTE
+led 0x08 MISC
+led 0x09 MAIL
+led 0x0a CHARGING
\ No newline at end of file
diff --git a/keylayout/Vendor_04e8_Product_a000.kl b/keylayout/Vendor_04e8_Product_a000.kl
new file mode 100644
index 0000000..dd04ac8
--- /dev/null
+++ b/keylayout/Vendor_04e8_Product_a000.kl
Binary files differ
diff --git a/keylayout/Vendor_04e8_Product_a005.kl b/keylayout/Vendor_04e8_Product_a005.kl
new file mode 100644
index 0000000..7141a0f
--- /dev/null
+++ b/keylayout/Vendor_04e8_Product_a005.kl
@@ -0,0 +1,410 @@
+# Copyright (C) 2010 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.
+
+#
+# Generic key layout file for full alphabetic US English PC style external keyboards.
+#
+# This file is intentionally very generic and is intended to support a broad rang of keyboards.
+# Do not edit the generic key layout to support a specific keyboard; instead, create
+# a new key layout file with the required keyboard configuration.
+#
+
+key 1 ESCAPE
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 55 NUMPAD_MULTIPLY
+key 56 ALT_LEFT
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 69 NUM_LOCK
+key 70 SCROLL_LOCK
+key 71 NUMPAD_7
+key 72 NUMPAD_8
+key 73 NUMPAD_9
+key 74 NUMPAD_SUBTRACT
+key 75 NUMPAD_4
+key 76 NUMPAD_5
+key 77 NUMPAD_6
+key 78 NUMPAD_ADD
+key 79 NUMPAD_1
+key 80 NUMPAD_2
+key 81 NUMPAD_3
+key 82 NUMPAD_0
+key 83 NUMPAD_DOT
+# key 84 (undefined)
+# key 85 "KEY_ZENKAKUHANKAKU"
+key 86 BACKSLASH
+key 87 F11
+key 88 F12
+key 89 RO
+# key 90 "KEY_KATAKANA"
+# key 91 "KEY_HIRAGANA"
+# key 92 "KEY_HENKAN"
+# key 93 "KEY_KATAKANAHIRAGANA"
+# key 94 "KEY_MUHENKAN"
+key 95 NUMPAD_COMMA
+key 96 NUMPAD_ENTER
+key 97 CTRL_RIGHT
+key 98 NUMPAD_DIVIDE
+key 99 SYSRQ
+key 100 ALT_RIGHT
+# key 101 "KEY_LINEFEED"
+key 102 MOVE_HOME
+key 103 DPAD_UP
+key 104 PAGE_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 109 PAGE_DOWN
+key 110 INSERT
+key 111 FORWARD_DEL
+# key 112 "KEY_MACRO"
+key 113 VOLUME_MUTE
+
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+key 116 POWER
+key 117 NUMPAD_EQUALS
+# key 118 "KEY_KPPLUSMINUS"
+key 119 BREAK
+# key 120 (undefined)
+key 121 NUMPAD_COMMA
+key 122 LANG
+# key 123 "KEY_HANJA"
+# key 124 "KEY_YEN"
+key 125 META_LEFT
+key 126 META_RIGHT
+key 127 MENU
+key 128 MEDIA_STOP
+# key 129 "KEY_AGAIN"
+# key 130 "KEY_PROPS"
+# key 131 "KEY_UNDO"
+# key 132 "KEY_FRONT"
+# key 133 "KEY_COPY"
+# key 134 "KEY_OPEN"
+# key 135 "KEY_PASTE"
+# key 136 "KEY_FIND"
+# key 137 "KEY_CUT"
+# key 138 "KEY_HELP"
+key 139 MENU
+# key 140 "KEY_CALC"
+# key 141 "KEY_SETUP"
+# key 142 "KEY_SLEEP"
+# key 143 "KEY_WAKEUP"
+# key 144 "KEY_FILE"
+# key 145 "KEY_SENDFILE"
+# key 146 "KEY_DELETEFILE"
+# key 147 "KEY_XFER"
+# key 148 "KEY_PROG1"
+# key 149 "KEY_PROG2"
+key 150 EXPLORER
+# key 151 "KEY_MSDOS"
+# key 152 "KEY_COFFEE"
+key 152 POWER
+# key 153 "KEY_DIRECTION"
+# key 154 "KEY_CYCLEWINDOWS"
+key 155 EMAIL
+key 156 BOOKMARK
+# key 157 "KEY_COMPUTER"
+key 158 BACK
+key 159 FORWARD
+key 160 MEDIA_CLOSE
+key 161 MEDIA_EJECT
+key 162 MEDIA_EJECT
+key 163 MEDIA_NEXT
+key 164 MEDIA_PLAY_PAUSE
+key 165 MEDIA_PREVIOUS
+key 166 MEDIA_STOP
+key 167 MEDIA_RECORD
+key 168 MEDIA_REWIND
+key 169 CALL
+# key 170 "KEY_ISO"
+# key 171 "KEY_CONFIG"
+key 172 HOME
+# key 173 "KEY_REFRESH"
+# key 174 "KEY_EXIT"
+# key 175 "KEY_MOVE"
+# key 176 "KEY_EDIT"
+key 177 PAGE_UP
+key 178 PAGE_DOWN
+key 179 NUMPAD_LEFT_PAREN
+key 180 NUMPAD_RIGHT_PAREN
+# key 181 "KEY_NEW"
+# key 182 "KEY_REDO"
+# key 183 F13
+# key 184 F14
+# key 185 F15
+# key 186 F16
+# key 187 F17
+# key 188 F18
+# key 189 F19
+# key 190 F20
+# key 191 F21
+# key 192 F22
+# key 193 F23
+# key 194 F24
+# key 195 (undefined)
+# key 196 (undefined)
+# key 197 (undefined)
+# key 198 (undefined)
+# key 199 (undefined)
+key 200 MEDIA_PLAY
+key 201 MEDIA_PAUSE
+# key 202 "KEY_PROG3"
+# key 203 "KEY_PROG4"
+# key 204 (undefined)
+# key 205 "KEY_SUSPEND"
+# key 206 "KEY_CLOSE"
+key 207 MEDIA_PLAY
+key 208 MEDIA_FAST_FORWARD
+# key 209 "KEY_BASSBOOST"
+# key 210 "KEY_PRINT"
+# key 211 "KEY_HP"
+key 212 CAMERA
+# key 213 "KEY_SOUND"
+# key 214 "KEY_QUESTION"
+key 215 ENVELOPE
+# key 216 "KEY_CHAT"
+key 217 SEARCH
+# key 218 "KEY_CONNECT"
+# key 219 "KEY_FINANCE"
+# key 220 "KEY_SPORT"
+# key 221 "KEY_SHOP"
+# key 222 "KEY_ALTERASE"
+# key 223 "KEY_CANCEL"
+key 224 BRIGHTNESS_DOWN
+key 225 BRIGHTNESS_UP
+key 226 HEADSETHOOK
+key 227 STAR
+key 228 POUND
+key 229 SOFT_LEFT
+key 230 SOFT_RIGHT
+key 231 CALL
+key 232 DPAD_CENTER
+key 233 HEADSETHOOK
+# key 234 "KEY_0_5" or "KEY_SAVE"
+# key 235 "KEY_2_5" or "KEY_DOCUMENTS"
+# key 236 "KEY_SWITCHVIDEOMODE" or "KEY_BATTERY"
+# key 237 "KEY_KBDILLUMTOGGLE"
+# key 238 "KEY_KBDILLUMDOWN"
+# key 239 "KEY_KBDILLUMUP"
+# key 240 "KEY_UNKNOWN"
+
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 306 BUTTON_C
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 309 BUTTON_Z
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 312 BUTTON_L2
+key 313 BUTTON_R2
+key 314 BUTTON_SELECT
+key 315 BUTTON_START
+key 316 BUTTON_MODE
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+
+# key 352 "KEY_OK"
+# key 353 "KEY_SELECT"
+# key 354 "KEY_GOTO"
+# key 355 "KEY_CLEAR"
+# key 356 "KEY_POWER2"
+# key 357 "KEY_OPTION"
+# key 358 "KEY_INFO"
+# key 359 "KEY_TIME"
+# key 360 "KEY_VENDOR"
+# key 361 "KEY_ARCHIVE"
+key 362 GUIDE
+# key 363 "KEY_CHANNEL"
+# key 364 "KEY_FAVORITES"
+# key 365 "KEY_EPG"
+key 366 DVR
+# key 367 "KEY_MHP"
+# key 368 "KEY_LANGUAGE"
+key 368 LANG
+# key 369 "KEY_TITLE"
+# key 370 "KEY_SUBTITLE"
+# key 371 "KEY_ANGLE"
+# key 372 "KEY_ZOOM"
+# key 373 "KEY_MODE"
+# key 374 "KEY_KEYBOARD"
+# key 375 "KEY_SCREEN"
+# key 376 "KEY_PC"
+key 377 TV
+# key 378 "KEY_TV2"
+# key 379 "KEY_VCR"
+# key 380 "KEY_VCR2"
+# key 381 "KEY_SAT"
+# key 382 "KEY_SAT2"
+# key 383 "KEY_CD"
+# key 384 "KEY_TAPE"
+# key 385 "KEY_RADIO"
+# key 386 "KEY_TUNER"
+# key 387 "KEY_PLAYER"
+# key 388 "KEY_TEXT"
+# key 389 "KEY_DVD"
+# key 390 "KEY_AUX"
+# key 391 "KEY_MP3"
+# key 392 "KEY_AUDIO"
+# key 393 "KEY_VIDEO"
+# key 394 "KEY_DIRECTORY"
+# key 395 "KEY_LIST"
+# key 396 "KEY_MEMO"
+# key 397 "KEY_CALENDAR"
+# key 398 "KEY_RED"
+# key 399 "KEY_GREEN"
+# key 400 "KEY_YELLOW"
+# key 401 "KEY_BLUE"
+key 402 CHANNEL_UP
+key 403 CHANNEL_DOWN
+# key 404 "KEY_FIRST"
+# key 405 "KEY_LAST"
+# key 406 "KEY_AB"
+# key 407 "KEY_NEXT"
+# key 408 "KEY_RESTART"
+# key 409 "KEY_SLOW"
+# key 410 "KEY_SHUFFLE"
+# key 411 "KEY_BREAK"
+# key 412 "KEY_PREVIOUS"
+# key 413 "KEY_DIGITS"
+# key 414 "KEY_TEEN"
+# key 415 "KEY_TWEN"
+
+
+# key 448 "KEY_DEL_EOL"
+# key 449 "KEY_DEL_EOS"
+# key 450 "KEY_INS_LINE"
+# key 451 "KEY_DEL_LINE"
+
+
+key 464 FUNCTION
+key 465 ESCAPE FUNCTION
+key 466 F1 FUNCTION
+key 467 F2 FUNCTION
+key 468 F3 FUNCTION
+key 469 F4 FUNCTION
+key 470 F5 FUNCTION
+key 471 F6 FUNCTION
+key 472 F7 FUNCTION
+key 473 F8 FUNCTION
+key 474 F9 FUNCTION
+key 475 F10 FUNCTION
+key 476 F11 FUNCTION
+key 477 F12 FUNCTION
+key 478 1 FUNCTION
+key 479 2 FUNCTION
+key 480 D FUNCTION
+key 481 E FUNCTION
+key 482 F FUNCTION
+key 483 S FUNCTION
+key 484 B FUNCTION
+
+
+# key 497 KEY_BRL_DOT1
+# key 498 KEY_BRL_DOT2
+# key 499 KEY_BRL_DOT3
+# key 500 KEY_BRL_DOT4
+# key 501 KEY_BRL_DOT5
+# key 502 KEY_BRL_DOT6
+# key 503 KEY_BRL_DOT7
+# key 504 KEY_BRL_DOT8
+
+
+key 704 RECENTAPPS
+key 705 APPLICATION
+key 706 SIP_ON_OFF
+key 707 VOICESEARCH
+key 708 QPANEL_ON_OFF
+key 710 SFINDER
+key 712 MULTI_WINDOW
+
+
+# LEDs
+led 0x00 NUM_LOCK
+led 0x01 CAPS_LOCK
+led 0x02 SCROLL_LOCK
+led 0x03 COMPOSE
+led 0x04 KANA
+led 0x05 SLEEP
+led 0x06 SUSPEND
+led 0x07 MUTE
+led 0x08 MISC
+led 0x09 MAIL
+led 0x0a CHARGING
\ No newline at end of file
diff --git a/keylayout/Vendor_04e8_Product_a006.kl b/keylayout/Vendor_04e8_Product_a006.kl
new file mode 100644
index 0000000..b1b1076
--- /dev/null
+++ b/keylayout/Vendor_04e8_Product_a006.kl
@@ -0,0 +1,410 @@
+# Copyright (C) 2010 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.
+
+#
+# Generic key layout file for full alphabetic US English PC style external keyboards.
+#
+# This file is intentionally very generic and is intended to support a broad rang of keyboards.
+# Do not edit the generic key layout to support a specific keyboard; instead, create
+# a new key layout file with the required keyboard configuration.
+#
+
+key 1 ESCAPE
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 55 NUMPAD_MULTIPLY
+key 56 ALT_LEFT
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 69 NUM_LOCK
+key 70 SCROLL_LOCK
+key 71 NUMPAD_7
+key 72 NUMPAD_8
+key 73 NUMPAD_9
+key 74 NUMPAD_SUBTRACT
+key 75 NUMPAD_4
+key 76 NUMPAD_5
+key 77 NUMPAD_6
+key 78 NUMPAD_ADD
+key 79 NUMPAD_1
+key 80 NUMPAD_2
+key 81 NUMPAD_3
+key 82 NUMPAD_0
+key 83 NUMPAD_DOT
+# key 84 (undefined)
+# key 85 "KEY_ZENKAKUHANKAKU"
+key 86 BACKSLASH
+key 87 F11
+key 88 F12
+key 89 RO
+# key 90 "KEY_KATAKANA"
+# key 91 "KEY_HIRAGANA"
+# key 92 "KEY_HENKAN"
+# key 93 "KEY_KATAKANAHIRAGANA"
+# key 94 "KEY_MUHENKAN"
+key 95 NUMPAD_COMMA
+key 96 NUMPAD_ENTER
+key 97 CTRL_RIGHT
+key 98 NUMPAD_DIVIDE
+key 99 SYSRQ
+key 100 ALT_RIGHT
+# key 101 "KEY_LINEFEED"
+key 102 MOVE_HOME
+key 103 DPAD_UP
+key 104 PAGE_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 109 PAGE_DOWN
+key 110 INSERT
+key 111 FORWARD_DEL
+# key 112 "KEY_MACRO"
+key 113 VOLUME_MUTE
+
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+key 116 POWER
+key 117 NUMPAD_EQUALS
+# key 118 "KEY_KPPLUSMINUS"
+key 119 BREAK
+# key 120 (undefined)
+key 121 NUMPAD_COMMA
+key 122 LANG
+# key 123 "KEY_HANJA"
+# key 124 "KEY_YEN"
+key 125 META_LEFT
+key 126 META_RIGHT
+key 127 MENU
+key 128 MEDIA_STOP
+# key 129 "KEY_AGAIN"
+# key 130 "KEY_PROPS"
+# key 131 "KEY_UNDO"
+# key 132 "KEY_FRONT"
+# key 133 "KEY_COPY"
+# key 134 "KEY_OPEN"
+# key 135 "KEY_PASTE"
+# key 136 "KEY_FIND"
+# key 137 "KEY_CUT"
+# key 138 "KEY_HELP"
+key 139 MENU
+# key 140 "KEY_CALC"
+# key 141 "KEY_SETUP"
+# key 142 "KEY_SLEEP"
+# key 143 "KEY_WAKEUP"
+# key 144 "KEY_FILE"
+# key 145 "KEY_SENDFILE"
+# key 146 "KEY_DELETEFILE"
+# key 147 "KEY_XFER"
+# key 148 "KEY_PROG1"
+# key 149 "KEY_PROG2"
+key 150 EXPLORER
+# key 151 "KEY_MSDOS"
+# key 152 "KEY_COFFEE"
+key 152 POWER
+# key 153 "KEY_DIRECTION"
+# key 154 "KEY_CYCLEWINDOWS"
+key 155 EMAIL
+key 156 BOOKMARK
+# key 157 "KEY_COMPUTER"
+key 158 BACK
+key 159 FORWARD
+key 160 MEDIA_CLOSE
+key 161 MEDIA_EJECT
+key 162 MEDIA_EJECT
+key 163 MEDIA_NEXT
+key 164 MEDIA_PLAY_PAUSE
+key 165 MEDIA_PREVIOUS
+key 166 MEDIA_STOP
+key 167 MEDIA_RECORD
+key 168 MEDIA_REWIND
+key 169 CALL
+# key 170 "KEY_ISO"
+# key 171 "KEY_CONFIG"
+key 172 HOME
+# key 173 "KEY_REFRESH"
+# key 174 "KEY_EXIT"
+# key 175 "KEY_MOVE"
+# key 176 "KEY_EDIT"
+key 177 PAGE_UP
+key 178 PAGE_DOWN
+key 179 NUMPAD_LEFT_PAREN
+key 180 NUMPAD_RIGHT_PAREN
+# key 181 "KEY_NEW"
+# key 182 "KEY_REDO"
+# key 183 F13
+# key 184 F14
+# key 185 F15
+# key 186 F16
+# key 187 F17
+# key 188 F18
+# key 189 F19
+# key 190 F20
+# key 191 F21
+# key 192 F22
+# key 193 F23
+# key 194 F24
+# key 195 (undefined)
+# key 196 (undefined)
+# key 197 (undefined)
+# key 198 (undefined)
+# key 199 (undefined)
+key 200 MEDIA_PLAY
+key 201 MEDIA_PAUSE
+# key 202 "KEY_PROG3"
+# key 203 "KEY_PROG4"
+# key 204 (undefined)
+# key 205 "KEY_SUSPEND"
+# key 206 "KEY_CLOSE"
+key 207 MEDIA_PLAY
+key 208 MEDIA_FAST_FORWARD
+# key 209 "KEY_BASSBOOST"
+# key 210 "KEY_PRINT"
+# key 211 "KEY_HP"
+key 212 CAMERA
+# key 213 "KEY_SOUND"
+# key 214 "KEY_QUESTION"
+key 215 ENVELOPE
+# key 216 "KEY_CHAT"
+key 217 SEARCH
+# key 218 "KEY_CONNECT"
+# key 219 "KEY_FINANCE"
+# key 220 "KEY_SPORT"
+# key 221 "KEY_SHOP"
+# key 222 "KEY_ALTERASE"
+# key 223 "KEY_CANCEL"
+key 224 BRIGHTNESS_DOWN
+key 225 BRIGHTNESS_UP
+key 226 HEADSETHOOK
+key 227 STAR
+key 228 POUND
+key 229 SOFT_LEFT
+key 230 SOFT_RIGHT
+key 231 CALL
+key 232 DPAD_CENTER
+key 233 HEADSETHOOK
+# key 234 "KEY_0_5" or "KEY_SAVE"
+# key 235 "KEY_2_5" or "KEY_DOCUMENTS"
+# key 236 "KEY_SWITCHVIDEOMODE" or "KEY_BATTERY"
+# key 237 "KEY_KBDILLUMTOGGLE"
+# key 238 "KEY_KBDILLUMDOWN"
+# key 239 "KEY_KBDILLUMUP"
+# key 240 "KEY_UNKNOWN"
+
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 306 BUTTON_C
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 309 BUTTON_Z
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 312 BUTTON_L2
+key 313 BUTTON_R2
+key 314 BUTTON_SELECT
+key 315 BUTTON_START
+key 316 BUTTON_MODE
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+
+# key 352 "KEY_OK"
+# key 353 "KEY_SELECT"
+# key 354 "KEY_GOTO"
+# key 355 "KEY_CLEAR"
+# key 356 "KEY_POWER2"
+# key 357 "KEY_OPTION"
+# key 358 "KEY_INFO"
+# key 359 "KEY_TIME"
+# key 360 "KEY_VENDOR"
+# key 361 "KEY_ARCHIVE"
+key 362 GUIDE
+# key 363 "KEY_CHANNEL"
+# key 364 "KEY_FAVORITES"
+# key 365 "KEY_EPG"
+key 366 DVR
+# key 367 "KEY_MHP"
+# key 368 "KEY_LANGUAGE"
+key 368 LANG
+# key 369 "KEY_TITLE"
+# key 370 "KEY_SUBTITLE"
+# key 371 "KEY_ANGLE"
+# key 372 "KEY_ZOOM"
+# key 373 "KEY_MODE"
+# key 374 "KEY_KEYBOARD"
+# key 375 "KEY_SCREEN"
+# key 376 "KEY_PC"
+key 377 TV
+# key 378 "KEY_TV2"
+# key 379 "KEY_VCR"
+# key 380 "KEY_VCR2"
+# key 381 "KEY_SAT"
+# key 382 "KEY_SAT2"
+# key 383 "KEY_CD"
+# key 384 "KEY_TAPE"
+# key 385 "KEY_RADIO"
+# key 386 "KEY_TUNER"
+# key 387 "KEY_PLAYER"
+# key 388 "KEY_TEXT"
+# key 389 "KEY_DVD"
+# key 390 "KEY_AUX"
+# key 391 "KEY_MP3"
+# key 392 "KEY_AUDIO"
+# key 393 "KEY_VIDEO"
+# key 394 "KEY_DIRECTORY"
+# key 395 "KEY_LIST"
+# key 396 "KEY_MEMO"
+# key 397 "KEY_CALENDAR"
+# key 398 "KEY_RED"
+# key 399 "KEY_GREEN"
+# key 400 "KEY_YELLOW"
+# key 401 "KEY_BLUE"
+key 402 CHANNEL_UP
+key 403 CHANNEL_DOWN
+# key 404 "KEY_FIRST"
+# key 405 "KEY_LAST"
+# key 406 "KEY_AB"
+# key 407 "KEY_NEXT"
+# key 408 "KEY_RESTART"
+# key 409 "KEY_SLOW"
+# key 410 "KEY_SHUFFLE"
+# key 411 "KEY_BREAK"
+# key 412 "KEY_PREVIOUS"
+# key 413 "KEY_DIGITS"
+# key 414 "KEY_TEEN"
+# key 415 "KEY_TWEN"
+
+
+# key 448 "KEY_DEL_EOL"
+# key 449 "KEY_DEL_EOS"
+# key 450 "KEY_INS_LINE"
+# key 451 "KEY_DEL_LINE"
+
+
+key 464 FUNCTION
+key 465 ESCAPE FUNCTION
+key 466 F1 FUNCTION
+key 467 F2 FUNCTION
+key 468 F3 FUNCTION
+key 469 F4 FUNCTION
+key 470 F5 FUNCTION
+key 471 F6 FUNCTION
+key 472 F7 FUNCTION
+key 473 F8 FUNCTION
+key 474 F9 FUNCTION
+key 475 F10 FUNCTION
+key 476 F11 FUNCTION
+key 477 F12 FUNCTION
+key 478 1 FUNCTION
+key 479 2 FUNCTION
+key 480 D FUNCTION
+key 481 E FUNCTION
+key 482 F FUNCTION
+key 483 S FUNCTION
+key 484 B FUNCTION
+
+
+# key 497 KEY_BRL_DOT1
+# key 498 KEY_BRL_DOT2
+# key 499 KEY_BRL_DOT3
+# key 500 KEY_BRL_DOT4
+# key 501 KEY_BRL_DOT5
+# key 502 KEY_BRL_DOT6
+# key 503 KEY_BRL_DOT7
+# key 504 KEY_BRL_DOT8
+
+
+key 704 RECENTAPPS
+key 705 APPLICATION
+key 706 SIP_ON_OFF
+key 707 VOICESEARCH
+key 708 QPANEL_ON_OFF
+key 710 SFINDER
+key 712 MULTI_WINDOW
+
+
+# LEDs
+led 0x00 NUM_LOCK
+led 0x01 CAPS_LOCK
+led 0x02 SCROLL_LOCK
+led 0x03 COMPOSE
+led 0x04 KANA
+led 0x05 SLEEP
+led 0x06 SUSPEND
+led 0x07 MUTE
+led 0x08 MISC
+led 0x09 MAIL
+led 0x0a CHARGING
\ No newline at end of file
diff --git a/keylayout/Vendor_054c_Product_0268.kl b/keylayout/Vendor_054c_Product_0268.kl
new file mode 100644
index 0000000..7c60137
--- /dev/null
+++ b/keylayout/Vendor_054c_Product_0268.kl
@@ -0,0 +1,76 @@
+# Copyright (C) 2011 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.
+
+#
+# Sony Playstation(R)3 Controller
+#
+
+key 0x124 DPAD_UP
+key 0x125 DPAD_RIGHT
+key 0x126 DPAD_DOWN
+key 0x127 DPAD_LEFT
+
+key 0x120 BUTTON_SELECT
+key 0x123 BUTTON_START
+key 0x12e BUTTON_A
+key 0x12d BUTTON_B
+key 0x12f BUTTON_X
+key 0x12c BUTTON_Y
+key 0x12a BUTTON_L1
+key 0x12b BUTTON_R1
+key 0x128 BUTTON_L2
+key 0x129 BUTTON_R2
+key 0x121 BUTTON_THUMBL
+key 0x122 BUTTON_THUMBR
+
+# PS key
+key 0x2d0 HOME
+
+# Left Analog Stick
+axis 0x00 X
+axis 0x01 Y
+
+# Right Analog Stick
+axis 0x02 Z
+axis 0x05 RZ
+
+# DPAD
+# axis 0x2c -HAT_Y
+# axis 0x2d +HAT_X
+# axis 0x2e +HAT_Y
+# axis 0x2f -HAT_X
+
+# L2 trigger
+axis 0x30 LTRIGGER
+
+# R2 trigger
+axis 0x31 RTRIGGER
+
+# L1 trigger
+# axis 0x32
+
+# R1 trigger
+# axis 0x33
+
+# Triangle
+# axis 0x34
+
+# Circle
+# axis 0x35
+
+# Cross
+# axis 0x36
+
+# Square
+# axis 0x37
diff --git a/keylayout/Vendor_0583_Product_2060.kl b/keylayout/Vendor_0583_Product_2060.kl
new file mode 100644
index 0000000..92c8a14
--- /dev/null
+++ b/keylayout/Vendor_0583_Product_2060.kl
@@ -0,0 +1,27 @@
+# Copyright (C) 2013 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.
+
+# ION GO PAD
+
+key 288 BUTTON_A
+key 289 BUTTON_B
+key 290 BUTTON_X
+key 291 BUTTON_Y
+key 294 BUTTON_L1
+key 295 BUTTON_R1
+key 292 BUTTON_L2
+key 293 BUTTON_R2
+
+axis 0x00 HAT_X
+axis 0x01 HAT_Y
diff --git a/keylayout/Vendor_05ac_Product_0239.kl b/keylayout/Vendor_05ac_Product_0239.kl
new file mode 100644
index 0000000..587f967
--- /dev/null
+++ b/keylayout/Vendor_05ac_Product_0239.kl
@@ -0,0 +1,133 @@
+# Copyright (C) 2010 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.
+
+#
+# Apple Wireless Keyboard
+#
+# Notes:
+# - Keys such as PAGE_UP and FORWARD_DEL are produced using the
+# function key.
+# - Special function keys for brightness control, etc. are not
+# implemented here.
+
+key 1 ESCAPE
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 56 ALT_LEFT
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 87 F11
+key 88 F12
+key 100 ALT_RIGHT
+key 102 MOVE_HOME
+key 103 DPAD_UP
+key 104 PAGE_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 109 PAGE_DOWN
+key 110 NUMPAD_ENTER
+key 111 FORWARD_DEL
+key 113 VOLUME_MUTE
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+key 120 APP_SWITCH
+key 125 META_LEFT
+key 126 META_RIGHT
+key 161 MEDIA_EJECT
+key 163 MEDIA_NEXT
+key 164 MEDIA_PLAY_PAUSE
+key 165 MEDIA_PREVIOUS
+# key 204 show gadgets
+key 224 BRIGHTNESS_DOWN
+key 225 BRIGHTNESS_UP
+# key 229 blank special function on F5
+# key 230 blank special function on F6
+key 464 FUNCTION
+
+
+# LEDs
+led 0x00 NUM_LOCK
+led 0x01 CAPS_LOCK
+led 0x02 SCROLL_LOCK
+led 0x03 COMPOSE
+led 0x04 KANA
+led 0x05 SLEEP
+led 0x06 SUSPEND
+led 0x07 MUTE
+led 0x08 MISC
+led 0x09 MAIL
+led 0x0a CHARGING
\ No newline at end of file
diff --git a/keylayout/Vendor_05ac_Product_0255.kl b/keylayout/Vendor_05ac_Product_0255.kl
new file mode 100644
index 0000000..4122df6
--- /dev/null
+++ b/keylayout/Vendor_05ac_Product_0255.kl
@@ -0,0 +1,133 @@
+# Copyright (C) 2010 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.
+
+#
+# Apple Wireless Keyboard
+#
+# Notes:
+# - Keys such as PAGE_UP and FORWARD_DEL are produced using the
+# function key.
+# - Special function keys for brightness control, etc. are not
+# implemented here.
+
+key 1 ESCAPE
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 56 ALT_LEFT
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 87 F11
+key 88 F12
+key 100 ALT_RIGHT
+key 102 MOVE_HOME
+key 103 DPAD_UP
+key 104 PAGE_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 109 PAGE_DOWN
+key 110 NUMPAD_ENTER
+key 111 FORWARD_DEL
+key 113 VOLUME_MUTE
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+key 120 APP_SWITCH
+key 125 META_LEFT
+key 126 META_RIGHT
+key 161 MEDIA_EJECT
+key 163 MEDIA_NEXT
+key 164 MEDIA_PLAY_PAUSE
+key 165 MEDIA_PREVIOUS
+# key 204 show gadgets
+# key 224 reduce brightness
+# key 225 increase brightness
+# key 229 blank special function on F5
+# key 230 blank special function on F6
+key 464 FUNCTION
+
+
+# LEDs
+led 0x00 NUM_LOCK
+led 0x01 CAPS_LOCK
+led 0x02 SCROLL_LOCK
+led 0x03 COMPOSE
+led 0x04 KANA
+led 0x05 SLEEP
+led 0x06 SUSPEND
+led 0x07 MUTE
+led 0x08 MISC
+led 0x09 MAIL
+led 0x0a CHARGING
\ No newline at end of file
diff --git a/keylayout/Vendor_0b05_Product_4500.kl b/keylayout/Vendor_0b05_Product_4500.kl
new file mode 100644
index 0000000..a7d519e
--- /dev/null
+++ b/keylayout/Vendor_0b05_Product_4500.kl
@@ -0,0 +1,42 @@
+# Copyright (C) 2014 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.
+
+# Asus Gamepad
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 316 BUTTON_MODE
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+key 158 BACK
+key 172 HOME
+
+axis 0x00 X
+axis 0x01 Y
+axis 0x02 Z
+axis 0x05 RZ
+axis 0x09 RTRIGGER
+axis 0x0a LTRIGGER
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
+
+led 0x00 CONTROLLER_1
+led 0x01 CONTROLLER_2
+led 0x02 CONTROLLER_3
+led 0x03 CONTROLLER_4
diff --git a/keylayout/Vendor_1038_Product_1412.kl b/keylayout/Vendor_1038_Product_1412.kl
new file mode 100644
index 0000000..551b0bd
--- /dev/null
+++ b/keylayout/Vendor_1038_Product_1412.kl
@@ -0,0 +1,31 @@
+# Copyright (C) 2013 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.
+
+# Steelseries Free
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 315 BUTTON_START
+key 316 BUTTON_SELECT
+
+axis 0x00 X
+axis 0x01 Y
+axis 0x02 Z
+axis 0x05 RZ
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
diff --git a/keylayout/Vendor_12bd_Product_d015.kl b/keylayout/Vendor_12bd_Product_d015.kl
new file mode 100644
index 0000000..557d62f
--- /dev/null
+++ b/keylayout/Vendor_12bd_Product_d015.kl
@@ -0,0 +1,27 @@
+# Copyright (C) 2013 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.
+
+# Hitgaming SNES Retro
+
+key 306 BUTTON_A
+key 305 BUTTON_B
+key 307 BUTTON_X
+key 304 BUTTON_Y
+key 308 BUTTON_L1
+key 309 BUTTON_R1
+key 313 BUTTON_START
+key 312 BUTTON_SELECT
+
+axis 0x00 HAT_X
+axis 0x01 HAT_Y
diff --git a/keylayout/Vendor_1689_Product_fd00.kl b/keylayout/Vendor_1689_Product_fd00.kl
new file mode 100644
index 0000000..8407b13
--- /dev/null
+++ b/keylayout/Vendor_1689_Product_fd00.kl
@@ -0,0 +1,38 @@
+# Copyright (C) 2013 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.
+
+# Razer Onza Tournament Edition
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 315 BUTTON_START
+key 314 BACK
+key 316 HOME
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+key 706 DPAD_UP
+key 705 DPAD_RIGHT
+key 707 DPAD_DOWN
+key 704 DPAD_LEFT
+
+axis 0x00 X
+axis 0x01 Y
+axis 0x03 Z
+axis 0x04 RZ
+axis 0x05 RTRIGGER
+axis 0x02 LTRIGGER
diff --git a/keylayout/Vendor_1689_Product_fd01.kl b/keylayout/Vendor_1689_Product_fd01.kl
new file mode 100644
index 0000000..cacc075
--- /dev/null
+++ b/keylayout/Vendor_1689_Product_fd01.kl
@@ -0,0 +1,36 @@
+# Copyright (C) 2013 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.
+
+# Razer Xbox 360 Gamepad
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 315 BUTTON_START
+key 314 BACK
+key 316 HOME
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+axis 0x00 X
+axis 0x01 Y
+axis 0x03 Z
+axis 0x04 RZ
+axis 0x05 RTRIGGER
+axis 0x02 LTRIGGER
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
diff --git a/keylayout/Vendor_1689_Product_fe00.kl b/keylayout/Vendor_1689_Product_fe00.kl
new file mode 100644
index 0000000..467173f
--- /dev/null
+++ b/keylayout/Vendor_1689_Product_fe00.kl
@@ -0,0 +1,36 @@
+# Copyright (C) 2013 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.
+
+# Razer Sabertooth Elite
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 315 BUTTON_START
+key 314 BACK
+key 316 HOME
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+axis 0x00 X
+axis 0x01 Y
+axis 0x03 Z
+axis 0x04 RZ
+axis 0x05 RTRIGGER
+axis 0x02 LTRIGGER
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
diff --git a/keylayout/Vendor_18d1_Product_2c40.kl b/keylayout/Vendor_18d1_Product_2c40.kl
new file mode 100644
index 0000000..6efde4f
--- /dev/null
+++ b/keylayout/Vendor_18d1_Product_2c40.kl
@@ -0,0 +1,42 @@
+# Copyright (C) 2013 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.
+
+# Odie
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 316 BUTTON_MODE
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+key 158 BACK
+key 172 HOME
+
+axis 0x00 X
+axis 0x01 Y
+axis 0x02 Z
+axis 0x05 RZ
+axis 0x09 RTRIGGER
+axis 0x0a LTRIGGER
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
+
+led 0x00 CONTROLLER_1
+led 0x01 CONTROLLER_2
+led 0x02 CONTROLLER_3
+led 0x03 CONTROLLER_4
diff --git a/keylayout/Vendor_1949_Product_0401.kl b/keylayout/Vendor_1949_Product_0401.kl
new file mode 100644
index 0000000..ab24bcd
--- /dev/null
+++ b/keylayout/Vendor_1949_Product_0401.kl
@@ -0,0 +1,27 @@
+# Copyright (C) 2014 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.
+
+# Amazon Fire TV remote
+
+key 103 DPAD_UP
+key 108 DPAD_DOWN
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 96 DPAD_CENTER
+key 158 BACK
+key 172 HOME
+key 168 MEDIA_REWIND
+key 208 MEDIA_FAST_FORWARD
+key 164 MEDIA_PLAY_PAUSE
+key 217 ASSIST
diff --git a/keylayout/Vendor_1bad_Product_f016.kl b/keylayout/Vendor_1bad_Product_f016.kl
new file mode 100644
index 0000000..00f8559
--- /dev/null
+++ b/keylayout/Vendor_1bad_Product_f016.kl
@@ -0,0 +1,36 @@
+# Copyright (C) 2013 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.
+
+# Madcatz Gamepad
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 315 BUTTON_START
+key 314 BACK
+key 316 HOME
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+axis 0x00 X
+axis 0x01 Y
+axis 0x03 Z
+axis 0x04 RZ
+axis 0x05 RTRIGGER
+axis 0x02 LTRIGGER
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
diff --git a/keylayout/Vendor_1bad_Product_f023.kl b/keylayout/Vendor_1bad_Product_f023.kl
new file mode 100644
index 0000000..175a523
--- /dev/null
+++ b/keylayout/Vendor_1bad_Product_f023.kl
@@ -0,0 +1,35 @@
+# Copyright (C) 2013 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.
+
+# Mad Catz MLG GamePad for Xbox 360
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 315 BUTTON_START
+key 314 BACK
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+axis 0x00 X
+axis 0x01 Y
+axis 0x03 Z
+axis 0x04 RZ
+axis 0x05 RTRIGGER
+axis 0x02 LTRIGGER
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
diff --git a/keylayout/Vendor_1bad_Product_f027.kl b/keylayout/Vendor_1bad_Product_f027.kl
new file mode 100644
index 0000000..216e3da
--- /dev/null
+++ b/keylayout/Vendor_1bad_Product_f027.kl
@@ -0,0 +1,36 @@
+# Copyright (C) 2013 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.
+
+# MadCatz FPS Pro
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 315 BUTTON_START
+key 314 BACK
+key 316 HOME
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+axis 0x00 X
+axis 0x01 Y
+axis 0x03 Z
+axis 0x04 RZ
+axis 0x05 RTRIGGER
+axis 0x02 LTRIGGER
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
diff --git a/keylayout/Vendor_1bad_Product_f036.kl b/keylayout/Vendor_1bad_Product_f036.kl
new file mode 100644
index 0000000..f27de1c
--- /dev/null
+++ b/keylayout/Vendor_1bad_Product_f036.kl
@@ -0,0 +1,36 @@
+# Copyright (C) 2013 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.
+
+# MadCatz Generic XBox Controller
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 315 BUTTON_START
+key 314 BACK
+key 316 HOME
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+axis 0x00 X
+axis 0x01 Y
+axis 0x03 Z
+axis 0x04 RZ
+axis 0x05 RTRIGGER
+axis 0x02 LTRIGGER
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
diff --git a/keylayout/Vendor_1d79_Product_0009.kl b/keylayout/Vendor_1d79_Product_0009.kl
new file mode 100644
index 0000000..a3d5bbd
--- /dev/null
+++ b/keylayout/Vendor_1d79_Product_0009.kl
@@ -0,0 +1,40 @@
+# Copyright (C) 2013 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.
+
+# Nyko Playpad / Playpad Pro
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 315 BUTTON_START
+key 158 BACK
+key 172 HOME
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+key 103 DPAD_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 108 DPAD_DOWN
+
+axis 0x00 X
+axis 0x01 Y
+axis 0x02 Z
+axis 0x05 RZ
+axis 0x09 RTRIGGER
+axis 0x0a LTRIGGER
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
diff --git a/keylayout/Vendor_22b8_Product_093d.kl b/keylayout/Vendor_22b8_Product_093d.kl
new file mode 100644
index 0000000..a2df779
--- /dev/null
+++ b/keylayout/Vendor_22b8_Product_093d.kl
@@ -0,0 +1,121 @@
+# Copyright (C) 2010 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.
+
+#
+# Motorola Bluetooth Wireless Keyboard.
+#
+
+key 1 BACK
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 56 ALT_LEFT
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 87 F11
+key 88 F12
+key 97 CTRL_RIGHT
+key 102 HOME
+key 103 DPAD_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 111 FORWARD_DEL
+key 113 VOLUME_MUTE
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+# add LANG by samsung
+key 122 LANG
+key 125 MENU
+key 127 SEARCH
+key 163 MEDIA_NEXT
+key 164 MEDIA_PLAY_PAUSE
+key 165 MEDIA_PREVIOUS
+key 166 MEDIA_STOP
+# key 226 tbd reserved key
+
+
+# LEDs
+led 0x00 NUM_LOCK
+led 0x01 CAPS_LOCK
+led 0x02 SCROLL_LOCK
+led 0x03 COMPOSE
+led 0x04 KANA
+led 0x05 SLEEP
+led 0x06 SUSPEND
+led 0x07 MUTE
+led 0x08 MISC
+led 0x09 MAIL
+led 0x0a CHARGING
\ No newline at end of file
diff --git a/keylayout/Vendor_2378_Product_1008.kl b/keylayout/Vendor_2378_Product_1008.kl
new file mode 100644
index 0000000..478da03
--- /dev/null
+++ b/keylayout/Vendor_2378_Product_1008.kl
@@ -0,0 +1,35 @@
+# Copyright (C) 2014 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.
+
+# OnLive, Inc. OnLive Wireless Controller, USB adapter
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 315 BUTTON_START
+key 314 BUTTON_SELECT
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+axis 0x00 X
+axis 0x01 Y
+axis 0x03 Z
+axis 0x04 RZ
+axis 0x05 RTRIGGER
+axis 0x02 LTRIGGER
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
diff --git a/keylayout/Vendor_2378_Product_100a.kl b/keylayout/Vendor_2378_Product_100a.kl
new file mode 100644
index 0000000..d9cd171
--- /dev/null
+++ b/keylayout/Vendor_2378_Product_100a.kl
@@ -0,0 +1,35 @@
+# Copyright (C) 2013 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.
+
+# OnLive, Inc. OnLive Wireless Controller
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 315 BUTTON_START
+key 314 BUTTON_SELECT
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+axis 0x00 X
+axis 0x01 Y
+axis 0x03 Z
+axis 0x04 RZ
+axis 0x05 RTRIGGER
+axis 0x02 LTRIGGER
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
diff --git a/keylayout/Vendor_2943_Product_0020.kl b/keylayout/Vendor_2943_Product_0020.kl
new file mode 100644
index 0000000..b2b7fad
--- /dev/null
+++ b/keylayout/Vendor_2943_Product_0020.kl
@@ -0,0 +1,428 @@
+# Copyright (C) 2010 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.
+
+#
+# Generic key layout file for full alphabetic US English PC style external keyboards.
+#
+# This file is intentionally very generic and is intended to support a broad rang of keyboards.
+# Do not edit the generic key layout to support a specific keyboard; instead, create
+# a new key layout file with the required keyboard configuration.
+#
+
+key 1 BACK
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 55 NUMPAD_MULTIPLY
+key 56 ALT_LEFT
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 69 NUM_LOCK
+key 70 SCROLL_LOCK
+key 71 NUMPAD_7
+key 72 NUMPAD_8
+key 73 NUMPAD_9
+key 74 NUMPAD_SUBTRACT
+key 75 NUMPAD_4
+key 76 NUMPAD_5
+key 77 NUMPAD_6
+key 78 NUMPAD_ADD
+key 79 NUMPAD_1
+key 80 NUMPAD_2
+key 81 NUMPAD_3
+key 82 NUMPAD_0
+key 83 NUMPAD_DOT
+# key 84 (undefined)
+# key 85 "KEY_ZENKAKUHANKAKU"
+key 86 BACKSLASH
+key 87 F11
+key 88 F12
+# key 89 "KEY_RO"
+# key 90 "KEY_KATAKANA"
+# key 91 "KEY_HIRAGANA"
+# key 92 "KEY_HENKAN"
+# key 93 "KEY_KATAKANAHIRAGANA"
+# key 94 "KEY_MUHENKAN"
+key 95 NUMPAD_COMMA
+key 96 NUMPAD_ENTER
+key 97 CTRL_RIGHT
+key 98 NUMPAD_DIVIDE
+key 99 SYSRQ
+key 100 ALT_RIGHT
+# key 101 "KEY_LINEFEED"
+key 102 MOVE_HOME
+key 103 DPAD_UP
+key 104 PAGE_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 109 PAGE_DOWN
+key 110 INSERT
+key 111 FORWARD_DEL
+# key 112 "KEY_MACRO"
+key 113 VOLUME_MUTE
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+key 116 POWER
+key 117 NUMPAD_EQUALS
+# key 118 "KEY_KPPLUSMINUS"
+key 119 BREAK
+# key 120 (undefined)
+key 121 NUMPAD_COMMA
+# key 122 "KEY_HANGEUL"
+# key 123 "KEY_HANJA"
+# key 124 "KEY_YEN"
+key 125 META_LEFT
+key 126 META_RIGHT
+key 127 MENU
+key 128 MEDIA_STOP
+# key 129 "KEY_AGAIN"
+# key 130 "KEY_PROPS"
+# key 131 "KEY_UNDO"
+# key 132 "KEY_FRONT"
+# key 133 "KEY_COPY"
+# key 134 "KEY_OPEN"
+# key 135 "KEY_PASTE"
+# key 136 "KEY_FIND"
+# key 137 "KEY_CUT"
+# key 138 "KEY_HELP"
+key 139 MENU
+key 140 CALCULATOR
+# key 141 "KEY_SETUP"
+key 142 POWER
+key 143 POWER
+# key 144 "KEY_FILE"
+# key 145 "KEY_SENDFILE"
+# key 146 "KEY_DELETEFILE"
+# key 147 "KEY_XFER"
+# key 148 "KEY_PROG1"
+# key 149 "KEY_PROG2"
+key 150 EXPLORER
+# key 151 "KEY_MSDOS"
+key 152 POWER
+# key 153 "KEY_DIRECTION"
+# key 154 "KEY_CYCLEWINDOWS"
+key 155 ENVELOPE
+key 156 BOOKMARK
+# key 157 "KEY_COMPUTER"
+key 158 BACK
+key 159 FORWARD
+key 160 MEDIA_CLOSE
+key 161 MEDIA_EJECT
+key 162 MEDIA_EJECT
+key 163 MEDIA_NEXT
+key 164 MEDIA_PLAY_PAUSE
+key 165 MEDIA_PREVIOUS
+key 166 MEDIA_STOP
+key 167 MEDIA_RECORD
+key 168 MEDIA_REWIND
+key 169 CALL
+# key 170 "KEY_ISO"
+key 171 MUSIC
+key 172 HOME
+# key 173 "KEY_REFRESH"
+# key 174 "KEY_EXIT"
+# key 175 "KEY_MOVE"
+# key 176 "KEY_EDIT"
+key 177 PAGE_UP
+key 178 PAGE_DOWN
+key 179 NUMPAD_LEFT_PAREN
+key 180 NUMPAD_RIGHT_PAREN
+# key 181 "KEY_NEW"
+# key 182 "KEY_REDO"
+# key 183 F13
+# key 184 F14
+# key 185 F15
+# key 186 F16
+# key 187 F17
+# key 188 F18
+# key 189 F19
+# key 190 F20
+# key 191 F21
+# key 192 F22
+# key 193 F23
+# key 194 F24
+# key 195 (undefined)
+# key 196 (undefined)
+# key 197 (undefined)
+# key 198 (undefined)
+# key 199 (undefined)
+key 200 MEDIA_PLAY
+key 201 MEDIA_PAUSE
+# key 202 "KEY_PROG3"
+# key 203 "KEY_PROG4"
+# key 204 (undefined)
+# key 205 "KEY_SUSPEND"
+# key 206 "KEY_CLOSE"
+key 207 MEDIA_PLAY
+key 208 MEDIA_FAST_FORWARD
+# key 209 "KEY_BASSBOOST"
+# key 210 "KEY_PRINT"
+# key 211 "KEY_HP"
+key 212 CAMERA
+key 213 MUSIC
+# key 214 "KEY_QUESTION"
+key 215 ENVELOPE
+# key 216 "KEY_CHAT"
+key 217 SEARCH
+# key 218 "KEY_CONNECT"
+# key 219 "KEY_FINANCE"
+# key 220 "KEY_SPORT"
+# key 221 "KEY_SHOP"
+# key 222 "KEY_ALTERASE"
+# key 223 "KEY_CANCEL"
+key 224 BRIGHTNESS_DOWN
+key 225 BRIGHTNESS_UP
+key 226 HEADSETHOOK
+
+key 256 BUTTON_1
+key 257 BUTTON_2
+key 258 BUTTON_3
+key 259 BUTTON_4
+key 260 BUTTON_5
+key 261 BUTTON_6
+key 262 BUTTON_7
+key 263 BUTTON_8
+key 264 BUTTON_9
+key 265 BUTTON_10
+key 266 BUTTON_11
+key 267 BUTTON_12
+key 268 BUTTON_13
+key 269 BUTTON_14
+key 270 BUTTON_15
+key 271 BUTTON_16
+
+key 288 BUTTON_1
+key 289 BUTTON_2
+key 290 BUTTON_3
+key 291 BUTTON_4
+key 292 BUTTON_5
+key 293 BUTTON_6
+key 294 BUTTON_7
+key 295 BUTTON_8
+key 296 BUTTON_9
+key 297 BUTTON_10
+key 298 BUTTON_11
+key 299 BUTTON_12
+key 300 BUTTON_13
+key 301 BUTTON_14
+key 302 BUTTON_15
+key 303 BUTTON_16
+
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 306 BUTTON_C
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 309 BUTTON_Z
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 312 BUTTON_L2
+key 313 BUTTON_R2
+key 314 BUTTON_SELECT
+key 315 BUTTON_START
+key 316 BUTTON_MODE
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+
+# key 352 "KEY_OK"
+# key 353 DPAD_CENTER
+# key 354 "KEY_GOTO"
+key 355 CLEAR
+# key 356 "KEY_POWER2"
+# key 357 "KEY_OPTION"
+key 358 INFO
+# key 359 "KEY_TIME"
+# key 360 "KEY_VENDOR"
+# key 361 "KEY_ARCHIVE"
+key 362 GUIDE
+# key 363 "KEY_CHANNEL"
+# key 364 "KEY_FAVORITES"
+# key 365 "KEY_EPG"
+key 366 DVR
+# key 367 "KEY_MHP"
+key 368 LANG
+# key 369 "KEY_TITLE"
+# key 370 "KEY_SUBTITLE"
+# key 371 "KEY_ANGLE"
+# key 372 "KEY_ZOOM"
+# key 373 "KEY_MODE"
+# key 374 "KEY_KEYBOARD"
+# key 375 "KEY_SCREEN"
+# key 376 "KEY_PC"
+key 377 TV
+# key 378 "KEY_TV2"
+# key 379 "KEY_VCR"
+# key 380 "KEY_VCR2"
+# key 381 "KEY_SAT"
+# key 382 "KEY_SAT2"
+# key 383 "KEY_CD"
+# key 384 "KEY_TAPE"
+# key 385 "KEY_RADIO"
+# key 386 "KEY_TUNER"
+# key 387 "KEY_PLAYER"
+# key 388 "KEY_TEXT"
+# key 389 "KEY_DVD"
+# key 390 "KEY_AUX"
+# key 391 "KEY_MP3"
+# key 392 "KEY_AUDIO"
+# key 393 "KEY_VIDEO"
+# key 394 "KEY_DIRECTORY"
+# key 395 "KEY_LIST"
+# key 396 "KEY_MEMO"
+key 397 CALENDAR
+key 398 PROG_RED
+key 399 PROG_GREEN
+key 400 PROG_YELLOW
+key 401 PROG_BLUE
+key 402 CHANNEL_UP
+key 403 CHANNEL_DOWN
+# key 404 "KEY_FIRST"
+# key 405 "KEY_LAST"
+# key 406 "KEY_AB"
+# key 407 "KEY_NEXT"
+# key 408 "KEY_RESTART"
+# key 409 "KEY_SLOW"
+# key 410 "KEY_SHUFFLE"
+key 411 BREAK
+# key 412 "KEY_PREVIOUS"
+# key 413 "KEY_DIGITS"
+# key 414 "KEY_TEEN"
+# key 415 "KEY_TWEN"
+
+key 429 CONTACTS
+
+# key 448 "KEY_DEL_EOL"
+# key 449 "KEY_DEL_EOS"
+# key 450 "KEY_INS_LINE"
+# key 451 "KEY_DEL_LINE"
+
+
+key 464 FUNCTION
+key 465 ESCAPE FUNCTION
+key 466 F1 FUNCTION
+key 467 F2 FUNCTION
+key 468 F3 FUNCTION
+key 469 F4 FUNCTION
+key 470 F5 FUNCTION
+key 471 F6 FUNCTION
+key 472 F7 FUNCTION
+key 473 F8 FUNCTION
+key 474 F9 FUNCTION
+key 475 F10 FUNCTION
+key 476 F11 FUNCTION
+key 477 F12 FUNCTION
+key 478 1 FUNCTION
+key 479 2 FUNCTION
+key 480 D FUNCTION
+key 481 E FUNCTION
+key 482 F FUNCTION
+key 483 S FUNCTION
+key 484 B FUNCTION
+
+
+# key 497 KEY_BRL_DOT1
+# key 498 KEY_BRL_DOT2
+# key 499 KEY_BRL_DOT3
+# key 500 KEY_BRL_DOT4
+# key 501 KEY_BRL_DOT5
+# key 502 KEY_BRL_DOT6
+# key 503 KEY_BRL_DOT7
+# key 504 KEY_BRL_DOT8
+
+
+key 704 RECENTAPPS
+key 705 APPLICATION
+key 706 SIP_ON_OFF
+key 707 VOICESEARCH
+key 708 QPANEL_ON_OFF
+key 710 SFINDER
+key 712 MULTI_WINDOW
+
+
+# LEDs
+led 0x00 NUM_LOCK
+led 0x01 CAPS_LOCK
+led 0x02 SCROLL_LOCK
+led 0x03 COMPOSE
+led 0x04 KANA
+led 0x05 SLEEP
+led 0x06 SUSPEND
+led 0x07 MUTE
+led 0x08 MISC
+led 0x09 MAIL
+led 0x0a CHARGING
\ No newline at end of file
diff --git a/keylayout/ft5x06_ts.kl b/keylayout/ft5x06_ts.kl
new file mode 100644
index 0000000..153959d
--- /dev/null
+++ b/keylayout/ft5x06_ts.kl
@@ -0,0 +1,31 @@
+# Copyright (c) 2014, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of The Linux Foundation nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+key 158 BACK
+key 139 MENU
+key 172 HOME
+key 217 SEARCH
diff --git a/keylayout/gpio-keys.kl b/keylayout/gpio-keys.kl
new file mode 100644
index 0000000..70b8e5a
--- /dev/null
+++ b/keylayout/gpio-keys.kl
@@ -0,0 +1,32 @@
+# Copyright (c) 2014, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of The Linux Foundation nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+key 115 VOLUME_UP
+key 114 VOLUME_DOWN
+key 172 HOME
+key 528 FOCUS
+key 766 CAMERA
diff --git a/keylayout/qwerty.kl b/keylayout/qwerty.kl
new file mode 100644
index 0000000..58bf654
--- /dev/null
+++ b/keylayout/qwerty.kl
@@ -0,0 +1,112 @@
+# Copyright (C) 2010 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.
+
+#
+# Emulator keyboard layout #1.
+#
+# This file is no longer used as the platform's default keyboard layout.
+# Refer to Generic.kl instead.
+#
+
+key 399 GRAVE
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 158 BACK
+key 230 SOFT_RIGHT
+key 60 SOFT_LEFT
+key 107 ENDCALL
+key 62 ENDCALL
+key 229 MENU
+key 139 MENU
+key 59 MENU
+key 127 SEARCH
+key 217 SEARCH
+key 228 POUND
+key 227 STAR
+key 231 CALL
+key 61 CALL
+key 232 DPAD_CENTER
+key 108 DPAD_DOWN
+key 103 DPAD_UP
+key 102 HOME
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 115 VOLUME_UP
+key 114 VOLUME_DOWN
+key 116 POWER
+key 212 CAMERA
+
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 43 BACKSLASH
+
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 14 DEL
+
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 28 ENTER
+
+key 56 ALT_LEFT
+key 100 ALT_RIGHT
+key 42 SHIFT_LEFT
+key 54 SHIFT_RIGHT
+key 15 TAB
+key 57 SPACE
+key 150 EXPLORER
+key 155 ENVELOPE
+
+key 12 MINUS
+key 13 EQUALS
+key 215 AT
+
+# On an AT keyboard: ESC, F10
+key 1 BACK
+key 68 MENU
diff --git a/keylayout/synaptics_dsx.kl b/keylayout/synaptics_dsx.kl
new file mode 100644
index 0000000..153959d
--- /dev/null
+++ b/keylayout/synaptics_dsx.kl
@@ -0,0 +1,31 @@
+# Copyright (c) 2014, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of The Linux Foundation nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+key 158 BACK
+key 139 MENU
+key 172 HOME
+key 217 SEARCH
diff --git a/keylayout/synaptics_rmi4_i2c.kl b/keylayout/synaptics_rmi4_i2c.kl
new file mode 100644
index 0000000..153959d
--- /dev/null
+++ b/keylayout/synaptics_rmi4_i2c.kl
@@ -0,0 +1,31 @@
+# Copyright (c) 2014, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of The Linux Foundation nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+key 158 BACK
+key 139 MENU
+key 172 HOME
+key 217 SEARCH
diff --git a/liblight/Android.mk b/liblight/Android.mk
new file mode 100644
index 0000000..b85b4db
--- /dev/null
+++ b/liblight/Android.mk
@@ -0,0 +1,27 @@
+#
+# Copyright (C) 2014 The CyanogenMod 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)
+# HAL module implemenation stored in
+# hw/<COPYPIX_HARDWARE_MODULE_ID>.<ro.board.platform>.so
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := lights.c
+LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
+LOCAL_SHARED_LIBRARIES := liblog
+LOCAL_MODULE := lights.$(TARGET_BOARD_PLATFORM)
+LOCAL_MODULE_TAGS := optional
+
+include $(BUILD_SHARED_LIBRARY)
diff --git a/liblight/NOTICE b/liblight/NOTICE
new file mode 100644
index 0000000..316b4eb
--- /dev/null
+++ b/liblight/NOTICE
@@ -0,0 +1,190 @@
+
+ Copyright (c) 2014, 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
+
diff --git a/liblight/lights.c b/liblight/lights.c
new file mode 100644
index 0000000..4bfa442
--- /dev/null
+++ b/liblight/lights.c
@@ -0,0 +1,312 @@
+/*
+ * Copyright (C) 2014 The CyanogenMod 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.
+ */
+
+#include <cutils/log.h>
+#include <cutils/properties.h>
+#include <stdint.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <math.h>
+
+#include <sys/ioctl.h>
+#include <sys/types.h>
+
+#include <hardware/lights.h>
+
+/******************************************************************************/
+
+#define MAX_PATH_SIZE 80
+#define LOG_TAG "lights"
+
+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_attention = 0;
+
+char const*const WHITE_LED_FILE
+ = "/sys/class/leds/charging/brightness";
+
+char const*const LCD_FILE
+ = "/sys/class/leds/lcd-backlight/brightness";
+
+char const *const WHITE_LED_TRIGGER = "/sys/class/leds/charging/trigger";
+char const *const WHITE_LED_DELAY_ON = "/sys/class/leds/charging/delay_on";
+char const *const WHITE_LED_DELAY_OFF = "/sys/class/leds/charging/delay_off";
+/**
+ * device methods
+ */
+
+void init_globals(void)
+{
+ // init the mutex
+ pthread_mutex_init(&g_lock, NULL);
+}
+
+static int
+write_int(char const* path, int value)
+{
+ int fd;
+ static int already_warned = 0;
+
+ fd = open(path, O_RDWR);
+ if (fd >= 0) {
+ char buffer[20];
+ int bytes = sprintf(buffer, "%d\n", value);
+ int 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_str(char const* path, char *value)
+{
+ int fd;
+ static int already_warned = 0;
+
+ fd = open(path, O_RDWR);
+ if (fd >= 0) {
+ char buffer[PAGE_SIZE];
+ int bytes = sprintf(buffer, "%s\n", value);
+ int amt = write(fd, buffer, bytes);
+ close(fd);
+ return amt == -1 ? -errno : 0;
+ } else {
+ if (already_warned == 0) {
+ ALOGE("write_str 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);
+ pthread_mutex_lock(&g_lock);
+ 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 len;
+ int blink;
+ int onMS, offMS, ramp;
+ unsigned int colorRGB;
+ char blink_pattern[PAGE_SIZE];
+
+ 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 1
+ ALOGD("set_speaker_light_locked mode %d, colorRGB=%08X, onMS=%d, offMS=%d\n",
+ state->flashMode, colorRGB, onMS, offMS);
+#endif
+
+
+ if (onMS > 0 && offMS > 0) {
+
+ blink = 1;
+ ramp = 1;
+ } else {
+ blink = 0;
+ ramp = 0;
+ }
+
+ // See hardware/libhardware/include/hardware/lights.h
+ int brightness = ((77 * ((colorRGB >> 16) & 0xFF)) +
+ (150 * ((colorRGB >> 8) & 0xFF)) +
+ (29 * (colorRGB & 0xFF))) >> 8;
+ write_int(WHITE_LED_FILE, (int) brightness);
+
+ if (blink) {
+ write_str(WHITE_LED_TRIGGER, "notification");
+ sprintf(blink_pattern, "%d", onMS);
+ write_str(WHITE_LED_DELAY_ON, blink_pattern);
+ sprintf(blink_pattern, "%d", offMS);
+ write_str(WHITE_LED_DELAY_OFF, blink_pattern);
+ }else{
+ write_str(WHITE_LED_TRIGGER, "none");
+ }
+
+ return brightness;
+}
+
+static void
+handle_speaker_battery_locked(struct light_device_t* dev)
+{
+ int res = set_speaker_light_locked(dev, &g_notification);
+ if (res){
+ ALOGD("notification on\n");
+ return;
+ }
+ res = set_speaker_light_locked(dev, &g_battery);
+ if (res){
+ ALOGD("battery on\n");
+ }else{
+ ALOGD("no notification\n");
+ }
+}
+
+static int
+set_light_notifications(struct light_device_t* dev,
+ struct light_state_t const* state)
+{
+ pthread_mutex_lock(&g_lock);
+ ALOGD("notification light %d\n", state->color);
+ 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_battery(struct light_device_t* dev,
+ struct light_state_t const* state)
+{
+ pthread_mutex_lock(&g_lock);
+ g_battery = *state;
+ ALOGD("batterie led\n");
+ handle_speaker_battery_locked(dev);
+ pthread_mutex_unlock(&g_lock);
+ return 0;
+}
+
+
+
+/** 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;
+ else if (0 == strcmp(LIGHT_ID_BATTERY, name))
+ set_light = set_light_battery;
+ else if (0 == strcmp(LIGHT_ID_NOTIFICATIONS, name))
+ set_light = set_light_notifications;
+ 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));
+ memset(dev, 0, sizeof(*dev));
+
+ dev->common.tag = HARDWARE_DEVICE_TAG;
+ dev->common.version = 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
+ * Based on dhacker29 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 = "MSM8916 lights Module",
+ .author = "Google, Inc., scritch007",
+ .methods = &lights_module_methods,
+};
diff --git a/local_manifests/fortuna.xml b/local_manifests/fortuna.xml
new file mode 100644
index 0000000..db95814
--- /dev/null
+++ b/local_manifests/fortuna.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<manifest>
+ <!--project name="GrandPrime/android_device_samsung_fortuna" path="device/samsung/fortuna" remote="github" revision="cm-12.1" /-->
+ <!--project name="GrandPrime/android_kernel_samsung_fortuna" path="kernel/samsung/fortuna" remote="github" revision="cm-12.1" /-->
+ <!--project name="GrandPrime/android_vendor_samsung_fortuna" path="vendor/samsung/fortuna" remote="github" revision="cm-12.1" /-->
+
+ <project name="omnirom/android_bootable_recovery" path="bootable/recovery-twrp" remote="github" revision="android-5.1" />
+ <project name="CyanogenMod/android_device_samsung_qcom-common" path="device/samsung/qcom-common" remote="github" revision="cm-12.0" />
+ <project name="CyanogenMod/android_device_qcom_common" path="device/qcom/common" remote="github" revision="cm-12.0" />
+ <project name="CyanogenMod/android_external_mm-dash" path="external/mm-dash" remote="github" revision="cm-12.0" />
+ <project name="CyanogenMod/android_hardware_qcom_fm" path="hardware/qcom/fm" remote="github" revision="cm-12.0" />
+ <project name="CyanogenMod/android_hardware_samsung" path="hardware/samsung" remote="github" revision="cm-12.0" />
+</manifest>
+
diff --git a/local_manifests/setup.sh b/local_manifests/setup.sh
new file mode 100755
index 0000000..a6e577b
--- /dev/null
+++ b/local_manifests/setup.sh
@@ -0,0 +1,2 @@
+rm ../../../../.repo/local_manifests/fortuna.xml
+cp fortuna.xml ../../../../.repo/local_manifests/fortuna.xml
\ No newline at end of file
diff --git a/media/media_codecs.xml b/media/media_codecs.xml
new file mode 100644
index 0000000..3e551ad
--- /dev/null
+++ b/media/media_codecs.xml
@@ -0,0 +1,326 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+ Copyright (C) 2014 The Linux Foundation. All rights reserved.
+ Not a contribution.
+
+ 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.
+-->
+
+<!--
+<!DOCTYPE MediaCodecs [
+<!ELEMENT Include EMPTY>
+<!ATTLIST Include href CDATA #REQUIRED>
+<!ELEMENT MediaCodecs (Decoders|Encoders|Include)*>
+<!ELEMENT Decoders (MediaCodec|Include)*>
+<!ELEMENT Encoders (MediaCodec|Include)*>
+<!ELEMENT MediaCodec (Type|Quirk|Include)*>
+<!ATTLIST MediaCodec name CDATA #REQUIRED>
+<!ATTLIST MediaCodec type CDATA>
+<!ELEMENT Type EMPTY>
+<!ATTLIST Type name CDATA #REQUIRED>
+<!ELEMENT Quirk EMPTY>
+<!ATTLIST Quirk name CDATA #REQUIRED>
+]>
+
+There's a simple and a complex syntax to declare the availability of a
+media codec:
+
+A codec that properly follows the OpenMax spec and therefore doesn't have any
+quirks and that only supports a single content type can be declared like so:
+
+ <MediaCodec name="OMX.foo.bar" type="something/interesting" />
+
+If a codec has quirks OR supports multiple content types, the following syntax
+can be used:
+
+ <MediaCodec name="OMX.foo.bar" >
+ <Type name="something/interesting" />
+ <Type name="something/else" />
+ ...
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Quirk name="output-buffers-are-unreadable" />
+ </MediaCodec>
+
+Only the three quirks included above are recognized at this point:
+
+"requires-allocate-on-input-ports"
+ must be advertised if the component does not properly support specification
+ of input buffers using the OMX_UseBuffer(...) API but instead requires
+ OMX_AllocateBuffer to be used.
+
+"requires-allocate-on-output-ports"
+ must be advertised if the component does not properly support specification
+ of output buffers using the OMX_UseBuffer(...) API but instead requires
+ OMX_AllocateBuffer to be used.
+
+"output-buffers-are-unreadable"
+ must be advertised if the emitted output buffers of a decoder component
+ are not readable, i.e. use a custom format even though abusing one of
+ the official OMX colorspace constants.
+ Clients of such decoders will not be able to access the decoded data,
+ naturally making the component much less useful. The only use for
+ a component with this quirk is to render the output to the screen.
+ Audio decoders MUST NOT advertise this quirk.
+ Video decoders that advertise this quirk must be accompanied by a
+ corresponding color space converter for thumbnail extraction,
+ matching surfaceflinger support that can render the custom format to
+ a texture and possibly other code, so just DON'T USE THIS QUIRK.
+
+
+-->
+
+<!--
+ Decoder capabilities for 8916
+_________________________________________________________________
+ | Codec | W H fps Mbps MB/s | Encode Secure-dec |
+ |__________|_________________________________________|___________________|
+ | h264 | 1920 1088 30 20 244800 | Y Y |
+ | hevc | 1280 720 30 3 108300 | N N | // Software
+ | mpeg4 | 1920 1088 30 20 244800 | Y N |
+ | vc1 | 1920 1088 30 20 244800 | N Y |
+ | vp8 | 1920 1088 30 20 244800 | N N |
+ | divx3 | 720 480 30 2 40500 | N N |
+ | div4/5/6 | 1920 1088 30 10 244800 | N N |
+ | h263 | 864 480 30 2 48600 | Y N |
+ | mpeg2 | 1920 1088 30 20 244800 | N Y |
+ |__________|_________________________________________|___________________|
+-->
+
+<!--
+ Encoder capabilities for 8916
+___________________________________________________
+ | Codec | W H fps Mbps MB/s |
+ |__________|_________________________________________|
+ | h264 | 1920 1088 30 20 244800 |
+ | mpeg4 | 1920 1088 30 20 244800 |
+ | h263 | 720 576 30 2 48600 |
+ | vp8 | 1920 1088 30 20 244800 |
+ |____________________________________________________|
+-->
+<MediaCodecs>
+ <Include href="media_codecs_google_audio.xml" />
+ <Include href="media_codecs_google_telephony.xml" />
+ <Encoders>
+ <!-- Audio Hardware -->
+ <MediaCodec name="OMX.qcom.audio.encoder.evrc" type="audio/evrc" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.audio.encoder.qcelp13" type="audio/qcelp" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ </MediaCodec>
+ <!-- Audio Software -->
+ <!-- Video Hardware -->
+ <MediaCodec name="OMX.qcom.video.encoder.avc" type="video/avc" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Quirk name="requires-loaded-to-idle-after-allocation" />
+ <Limit name="size" min="96x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-20000000" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.encoder.mpeg4" type="video/mp4v-es" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Quirk name="requires-loaded-to-idle-after-allocation"/>
+ <Limit name="size" min="96x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-20000000" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.encoder.h263" type="video/3gpp" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Quirk name="requires-loaded-to-idle-after-allocation" />
+ <Limit name="size" min="96x64" max="720x576" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="48600" />
+ <Limit name="bitrate" range="1-2000000" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.encoder.vp8" type="video/x-vnd.on2.vp8" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Quirk name="requires-loaded-to-idle-after-allocation" />
+ <Limit name="size" min="96x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-20000000" />
+ </MediaCodec>
+ </Encoders>
+ <Decoders>
+ <!-- Audio Hardware -->
+ <MediaCodec name="OMX.qcom.audio.decoder.wma" type="audio/x-ms-wma" >
+ <Quirk name="requires-global-flush" />
+ <Quirk name="requires-wma-pro-component" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.audio.decoder.wmaLossLess" type="audio/x-ms-wma-lossless" >
+ <Quirk name="requires-global-flush" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.audio.decoder.wma10Pro" type="audio/x-ms-wma-pro" >
+ <Quirk name="requires-global-flush" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.audio.decoder.amrwbplus" type="audio/amr-wb-plus" >
+ </MediaCodec>
+ <!-- Audio Software -->
+ <MediaCodec name="OMX.google.aac.decoder" type="audio/mp4a-latm" />
+ <MediaCodec name="OMX.qcom.audio.decoder.Qcelp13" type="audio/qcelp" >
+ <Quirk name="requires-global-flush" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.audio.decoder.evrc" type="audio/evrc" >
+ <Quirk name="requires-global-flush" />
+ </MediaCodec>
+ <!-- Video Hardware -->
+ <MediaCodec name="OMX.qcom.video.decoder.avc" type="video/avc" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-20000000" />
+ <Feature name="adaptive-playback" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.avc.secure" type="video/avc" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-20000000" />
+ <Feature name="adaptive-playback" />
+ <Feature name="secure-playback" required="true" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.mpeg2" type="video/mpeg2" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-20000000" />
+ <Feature name="adaptive-playback" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.mpeg2.secure" type="video/mpeg2" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-20000000" />
+ <Feature name="adaptive-playback" />
+ <Feature name="secure-playback" required="true" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.mpeg4" type="video/mp4v-es" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-20000000" />
+ <Feature name="adaptive-playback" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.h263" type="video/3gpp" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="864x480" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="48600" />
+ <Limit name="bitrate" range="1-2000000" />
+ <Feature name="adaptive-playback" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.vc1" type="video/x-ms-wmv" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-20000000" />
+ <Feature name="adaptive-playback" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.vc1.secure" type="video/x-ms-wmv" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-20000000" />
+ <Feature name="adaptive-playback" />
+ <Feature name="secure-playback" required="true" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.divx" type="video/divx" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-10000000" />
+ <Feature name="adaptive-playback" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.divx311" type="video/divx311" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="720x480" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="40500" />
+ <Limit name="bitrate" range="1-2000000" />
+ <Feature name="adaptive-playback" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.divx4" type="video/divx4" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-10000000" />
+ <Feature name="adaptive-playback" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.vp8" type="video/x-vnd.on2.vp8" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1920x1088" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="244800" />
+ <Limit name="bitrate" range="1-20000000" />
+ <Feature name="adaptive-playback" />
+ </MediaCodec>
+ <MediaCodec name="OMX.qcom.video.decoder.hevcswvdec" type="video/hevc" >
+ <Quirk name="requires-allocate-on-input-ports" />
+ <Quirk name="requires-allocate-on-output-ports" />
+ <Limit name="size" min="64x64" max="1280x720" />
+ <Limit name="alignment" value="2x2" />
+ <Limit name="block-size" value="16x16" />
+ <Limit name="blocks-per-second" min="1" max="108300" />
+ <Limit name="bitrate" range="1-3000000" />
+ <Feature name="adaptive-playback" />
+ </MediaCodec>
+ </Decoders>
+ <Include href="media_codecs_google_video.xml" />
+ <Include href="media_codecs_ffmpeg.xml" />
+</MediaCodecs>
diff --git a/media/media_profiles.xml b/media/media_profiles.xml
new file mode 100644
index 0000000..87c8df2
--- /dev/null
+++ b/media/media_profiles.xml
@@ -0,0 +1,845 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+ Copyright (C) 2014 The Linux Foundation. All rights reserved.
+ Not a contribution.
+
+ 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.
+-->
+<!DOCTYPE MediaSettings [
+<!ELEMENT MediaSettings (CamcorderProfiles,
+ EncoderOutputFileFormat+,
+ VideoEncoderCap+,
+ AudioEncoderCap+,
+ VideoDecoderCap,
+ AudioDecoderCap)>
+<!ELEMENT CamcorderProfiles (EncoderProfile+, ImageEncoding+, ImageDecoding, Camera)>
+<!ELEMENT EncoderProfile (Video, Audio)>
+<!ATTLIST EncoderProfile quality (high|low) #REQUIRED>
+<!ATTLIST EncoderProfile fileFormat (mp4|3gp) #REQUIRED>
+<!ATTLIST EncoderProfile duration (30|60) #REQUIRED>
+<!ATTLIST EncoderProfile cameraId (0|1) #REQUIRED>
+<!ELEMENT Video EMPTY>
+<!ATTLIST Video codec (h264|h263|m4v) #REQUIRED>
+<!ATTLIST Video bitRate CDATA #REQUIRED>
+<!ATTLIST Video width CDATA #REQUIRED>
+<!ATTLIST Video height CDATA #REQUIRED>
+<!ATTLIST Video frameRate CDATA #REQUIRED>
+<!ELEMENT Audio EMPTY>
+<!ATTLIST Audio codec (amrnb|amrwb|aac|lpcm) #REQUIRED>
+<!ATTLIST Audio bitRate CDATA #REQUIRED>
+<!ATTLIST Audio sampleRate CDATA #REQUIRED>
+<!ATTLIST Audio channels (1|2|6) #REQUIRED>
+<!ELEMENT ImageEncoding EMPTY>
+<!ATTLIST ImageEncoding quality (90|80|70|60|50|40) #REQUIRED>
+<!ELEMENT ImageDecoding EMPTY>
+<!ATTLIST ImageDecoding memCap CDATA #REQUIRED>
+<!ELEMENT Camera EMPTY>
+<!ELEMENT EncoderOutputFileFormat EMPTY>
+<!ATTLIST EncoderOutputFileFormat name (mp4|3gp) #REQUIRED>
+<!ELEMENT VideoEncoderCap EMPTY>
+<!ATTLIST VideoEncoderCap name (h264|h263|m4v|wmv) #REQUIRED>
+<!ATTLIST VideoEncoderCap enabled (true|false) #REQUIRED>
+<!ATTLIST VideoEncoderCap minBitRate CDATA #REQUIRED>
+<!ATTLIST VideoEncoderCap maxBitRate CDATA #REQUIRED>
+<!ATTLIST VideoEncoderCap minFrameWidth CDATA #REQUIRED>
+<!ATTLIST VideoEncoderCap maxFrameWidth CDATA #REQUIRED>
+<!ATTLIST VideoEncoderCap minFrameHeight CDATA #REQUIRED>
+<!ATTLIST VideoEncoderCap maxFrameHeight CDATA #REQUIRED>
+<!ATTLIST VideoEncoderCap minFrameRate CDATA #REQUIRED>
+<!ATTLIST VideoEncoderCap maxFrameRate CDATA #REQUIRED>
+<!ATTLIST VideoEncoderCap maxHFRFrameWidth CDATA #REQUIRED>
+<!ATTLIST VideoEncoderCap maxHFRFrameHeight CDATA #REQUIRED>
+<!ATTLIST VideoEncoderCap maxHFRMode CDATA #REQUIRED>
+<!ELEMENT AudioEncoderCap EMPTY>
+<!ATTLIST AudioEncoderCap name (amrnb|amrwb|aac|wma|lpcm) #REQUIRED>
+<!ATTLIST AudioEncoderCap enabled (true|false) #REQUIRED>
+<!ATTLIST AudioEncoderCap minBitRate CDATA #REQUIRED>
+<!ATTLIST AudioEncoderCap maxBitRate CDATA #REQUIRED>
+<!ATTLIST AudioEncoderCap minSampleRate CDATA #REQUIRED>
+<!ATTLIST AudioEncoderCap maxSampleRate CDATA #REQUIRED>
+<!ATTLIST AudioEncoderCap minChannels (1|2|6) #REQUIRED>
+<!ATTLIST AudioEncoderCap maxChannels (1|2|6) #REQUIRED>
+<!ELEMENT VideoDecoderCap EMPTY>
+<!ATTLIST VideoDecoderCap name (wmv) #REQUIRED>
+<!ATTLIST VideoDecoderCap enabled (true|false) #REQUIRED>
+<!ELEMENT AudioDecoderCap EMPTY>
+<!ATTLIST AudioDecoderCap name (wma) #REQUIRED>
+<!ATTLIST AudioDecoderCap enabled (true|false) #REQUIRED>
+<!ELEMENT VideoEditorCap EMPTY>
+<!ATTLIST VideoEditorCap maxInputFrameWidth CDATA #REQUIRED>
+<!ATTLIST VideoEditorCap maxInputFrameHeight CDATA #REQUIRED>
+<!ATTLIST VideoEditorCap maxOutputFrameWidth CDATA #REQUIRED>
+<!ATTLIST VideoEditorCap maxOutputFrameHeight CDATA #REQUIRED>
+<!ATTLIST VideoEditorCap maxPrefetchYUVFrames CDATA #REQUIRED>
+<!ELEMENT ExportVideoProfile EMPTY>
+<!ATTLIST ExportVideoProfile name (h264|h263|m4v) #REQUIRED>
+<!ATTLIST ExportVideoProfile profile CDATA #REQUIRED>
+<!ATTLIST ExportVideoProfile level CDATA #REQUIRED>
+]>
+<!--
+ This file is used to declare the multimedia profiles and capabilities
+ on an android-powered device.
+-->
+<MediaSettings>
+ <!-- Each camcorder profile defines a set of predefined configuration parameters -->
+ <!-- Back Camera -->
+ <CamcorderProfiles cameraId="0" startOffsetMs="300">
+
+ <EncoderProfile quality="low" fileFormat="3gp" duration="30">
+ <Video codec="h264"
+ bitRate="192000"
+ width="176"
+ height="144"
+ frameRate="30" />
+
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="high" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="20000000"
+ width="1920"
+ height="1080"
+ frameRate="30" />
+
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="qvga" fileFormat="mp4" duration="60">
+ <Video codec="h264"
+ bitRate="512000"
+ width="320"
+ height="240"
+ frameRate="30" />
+
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="cif" fileFormat="3gp" duration="30">
+ <Video codec="h264"
+ bitRate="720000"
+ width="352"
+ height="288"
+ frameRate="30" />
+
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="fwvga" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="2000000"
+ width="864"
+ height="480"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="480p" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="2000000"
+ width="720"
+ height="480"
+ frameRate="30" />
+
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="720p" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="14000000"
+ width="1280"
+ height="720"
+ frameRate="30" />
+
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="1080p" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="20000000"
+ width="1920"
+ height="1080"
+ frameRate="30" />
+
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="qcif" fileFormat="3gp" duration="30">
+ <Video codec="h264"
+ bitRate="192000"
+ width="176"
+ height="144"
+ frameRate="30" />
+
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="wvga" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="2000000"
+ width="800"
+ height="480"
+ frameRate="30" />
+
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="vga" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="2000000"
+ width="640"
+ height="480"
+ frameRate="30" />
+
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapselow" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="192000"
+ width="176"
+ height="144"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapsehigh" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="20000000"
+ width="1920"
+ height="1080"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapseqcif" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="192000"
+ width="176"
+ height="144"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapsecif" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="720000"
+ width="352"
+ height="288"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+
+ <EncoderProfile quality="timelapseqvga" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="512000"
+ width="320"
+ height="240"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapsewqvga" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="720000"
+ width="432"
+ height="240"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapsevga" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="2000000"
+ width="640"
+ height="480"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapsewvga" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="2000000"
+ width="800"
+ height="480"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapsefwvga" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="2000000"
+ width="864"
+ height="480"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="2000000"
+ width="640"
+ height="480"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="14000000"
+ width="1280"
+ height="720"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapse1080p" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="20000000"
+ width="1920"
+ height="1080"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <ImageEncoding quality="95" />
+ <ImageEncoding quality="80" />
+ <ImageEncoding quality="70" />
+ <ImageDecoding memCap="20000000" />
+
+ </CamcorderProfiles>
+ <!-- Front Camera -->
+ <CamcorderProfiles cameraId="1" startOffsetMs="300">
+
+ <EncoderProfile quality="low" fileFormat="3gp" duration="30">
+ <Video codec="h264"
+ bitRate="192000"
+ width="176"
+ height="144"
+ frameRate="30" />
+
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="high" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="20000000"
+ width="1920"
+ height="1080"
+ frameRate="30" />
+
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="qvga" fileFormat="mp4" duration="60">
+ <Video codec="h264"
+ bitRate="512000"
+ width="320"
+ height="240"
+ frameRate="30" />
+
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="cif" fileFormat="3gp" duration="30">
+ <Video codec="h264"
+ bitRate="720000"
+ width="352"
+ height="288"
+ frameRate="30" />
+
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="fwvga" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="2000000"
+ width="864"
+ height="480"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="480p" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="2000000"
+ width="720"
+ height="480"
+ frameRate="30" />
+
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="720p" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="14000000"
+ width="1280"
+ height="720"
+ frameRate="30" />
+
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="1080p" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="20000000"
+ width="1920"
+ height="1080"
+ frameRate="30" />
+
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="qcif" fileFormat="3gp" duration="30">
+ <Video codec="h264"
+ bitRate="192000"
+ width="176"
+ height="144"
+ frameRate="30" />
+
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="wvga" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="2000000"
+ width="800"
+ height="480"
+ frameRate="30" />
+
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="vga" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="2000000"
+ width="640"
+ height="480"
+ frameRate="30" />
+
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapselow" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="192000"
+ width="176"
+ height="144"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapsehigh" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="20000000"
+ width="1920"
+ height="1080"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapseqcif" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="192000"
+ width="176"
+ height="144"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapsecif" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="1200000"
+ width="352"
+ height="288"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="aac"
+ bitRate="96000"
+ sampleRate="48000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapseqvga" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="512000"
+ width="320"
+ height="240"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapsewqvga" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="720000"
+ width="432"
+ height="240"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapsevga" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="2000000"
+ width="640"
+ height="480"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapsewvga" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="2000000"
+ width="800"
+ height="480"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapsefwvga" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="2000000"
+ width="864"
+ height="480"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="amrnb"
+ bitRate="12200"
+ sampleRate="8000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="5000000"
+ width="720"
+ height="480"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="aac"
+ bitRate="96000"
+ sampleRate="48000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="8000000"
+ width="1280"
+ height="720"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="aac"
+ bitRate="96000"
+ sampleRate="48000"
+ channels="1" />
+ </EncoderProfile>
+
+ <EncoderProfile quality="timelapse1080p" fileFormat="mp4" duration="30">
+ <Video codec="h264"
+ bitRate="20000000"
+ width="1920"
+ height="1080"
+ frameRate="30" />
+
+ <!-- audio setting is ignored -->
+ <Audio codec="aac"
+ bitRate="156000"
+ sampleRate="48000"
+ channels="2" />
+ </EncoderProfile>
+
+ <ImageEncoding quality="95" />
+ <ImageEncoding quality="80" />
+ <ImageEncoding quality="70" />
+ <ImageDecoding memCap="20000000" />
+
+ </CamcorderProfiles>
+
+ <EncoderOutputFileFormat name="3gp" />
+ <EncoderOutputFileFormat name="mp4" />
+
+ <!--
+ If a codec is not enabled, it is invisible to the applications
+ In other words, the applications won't be able to use the codec
+ or query the capabilities of the codec at all if it is disabled
+ -->
+ <VideoEncoderCap name="h264" enabled="true"
+ minBitRate="64000" maxBitRate="20000000"
+ minFrameWidth="176" maxFrameWidth="1920"
+ minFrameHeight="144" maxFrameHeight="1088"
+ minFrameRate="15" maxFrameRate="30"
+ maxHFRFrameWidth="1280" maxHFRFrameHeight="720"
+ maxHFRMode="60" />
+
+ <VideoEncoderCap name="h263" enabled="true"
+ minBitRate="64000" maxBitRate="2000000"
+ minFrameWidth="176" maxFrameWidth="800"
+ minFrameHeight="144" maxFrameHeight="480"
+ minFrameRate="15" maxFrameRate="30"
+ maxHFRFrameWidth="0" maxHFRFrameHeight="0"
+ maxHFRMode="0" />
+
+ <VideoEncoderCap name="m4v" enabled="true"
+ minBitRate="64000" maxBitRate="20000000"
+ minFrameWidth="176" maxFrameWidth="1920"
+ minFrameHeight="144" maxFrameHeight="1088"
+ minFrameRate="15" maxFrameRate="30"
+ maxHFRFrameWidth="0" maxHFRFrameHeight="0"
+ maxHFRMode="0" />
+
+ <AudioEncoderCap name="aac" enabled="true"
+ minBitRate="8000" maxBitRate="96000"
+ minSampleRate="8000" maxSampleRate="48000"
+ minChannels="1" maxChannels="6" />
+
+ <AudioEncoderCap name="heaac" enabled="true"
+ minBitRate="8000" maxBitRate="64000"
+ minSampleRate="16000" maxSampleRate="48000"
+ minChannels="1" maxChannels="1" />
+
+ <AudioEncoderCap name="aaceld" enabled="true"
+ minBitRate="16000" maxBitRate="192000"
+ minSampleRate="16000" maxSampleRate="48000"
+ minChannels="1" maxChannels="1" />
+
+ <AudioEncoderCap name="amrwb" enabled="true"
+ minBitRate="6600" maxBitRate="23850"
+ minSampleRate="16000" maxSampleRate="16000"
+ minChannels="1" maxChannels="1" />
+
+ <AudioEncoderCap name="amrnb" enabled="true"
+ minBitRate="5525" maxBitRate="12200"
+ minSampleRate="8000" maxSampleRate="8000"
+ minChannels="1" maxChannels="1" />
+
+ <AudioEncoderCap name="lpcm" enabled="true"
+ minBitRate="768000" maxBitRate="4608000"
+ minSampleRate="48000" maxSampleRate="48000"
+ minChannels="1" maxChannels="6" />
+
+ <!--
+ FIXME:
+ We do not check decoder capabilities at present
+ At present, we only check whether windows media is visible
+ for TEST applications. For other applications, we do
+ not perform any checks at all.
+ -->
+ <VideoDecoderCap name="wmv" enabled="true"/>
+ <AudioDecoderCap name="wma" enabled="true"/>
+
+ <!--
+ The VideoEditor Capability configuration:
+ - maxInputFrameWidth: maximum video width of imported video clip.
+ - maxInputFrameHeight: maximum video height of imported video clip.
+ - maxOutputFrameWidth: maximum video width of exported video clip.
+ - maxOutputFrameHeight: maximum video height of exported video clip.
+ - maxPrefetchYUVFrames: maximum prefetch YUV frames for encoder,
+ used to limit the amount of memory for prefetched YUV frames.
+ For this platform, it allows maximum 30MB(3MB per 1080p frame x 10
+ frames) memory.
+ -->
+ <VideoEditorCap maxInputFrameWidth="1280"
+ maxInputFrameHeight="720" maxOutputFrameWidth="1280"
+ maxOutputFrameHeight="720" maxPrefetchYUVFrames="10"/>
+ <!--
+ The VideoEditor Export codec profile and level values
+ correspond to the values in OMX_Video.h.
+ E.g. for h264, profile value 1 means OMX_VIDEO_AVCProfileBaseline
+ and level 4096 means OMX_VIDEO_AVCLevel41.
+ Please note that the values are in decimal.
+ These values are for video encoder.
+ -->
+ <!--
+ Codec = h.264, Baseline profile, level 4.0
+ -->
+ <ExportVideoProfile name="h264" profile= "1" level="2048"/>
+ <!--
+ Codec = h.263, Baseline profile, level 70
+ -->
+ <ExportVideoProfile name="h263" profile= "1" level="128"/>
+ <!--
+ Codec = mpeg4, Simple profile, level 5
+ -->
+ <ExportVideoProfile name="m4v" profile= "1" level="128"/>
+</MediaSettings>
diff --git a/mkbootimg.mk b/mkbootimg.mk
new file mode 100644
index 0000000..a17a139
--- /dev/null
+++ b/mkbootimg.mk
@@ -0,0 +1,31 @@
+LOCAL_PATH := $(call my-dir)
+
+## Build and run dtbtool
+INSTALLED_DTIMAGE_TARGET := $(LOCAL_PATH)/dt.img
+
+ifneq ($(TARGET_KERNEL_ARCH),)
+KERNEL_ARCH := $(TARGET_KERNEL_ARCH)
+else
+KERNEL_ARCH := $(TARGET_ARCH)
+endif
+## Overload bootimg generation: Same as the original, + --dt arg
+$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES) $(INSTALLED_DTIMAGE_TARGET)
+ $(call pretty,"Target boot image: $@")
+ $(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) \
+ --base $(BOARD_KERNEL_BASE) --pagesize $(BOARD_KERNEL_PAGESIZE) --dt $(INSTALLED_DTIMAGE_TARGET) --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --output $@
+# --second_offset $(BOARD_SECOND_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) \
+ $(hide) $(call assert-max-image-size,$@,$(BOARD_BOOTIMAGE_PARTITION_SIZE),raw)
+ @echo -e ${CL_CYN}"Made boot image: $@"${CL_RST}
+
+## Overload recoveryimg generation: Same as the original, + --dt arg
+$(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTIMG) $(INSTALLED_DTIMAGE_TARGET) \
+ $(recovery_ramdisk) \
+ $(recovery_kernel)
+ @echo -e ${CL_CYN}"----- Making recovery image ------"${CL_RST}
+ $(hide) $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) \
+ --base $(BOARD_KERNEL_BASE) --pagesize $(BOARD_KERNEL_PAGESIZE) --dt $(INSTALLED_DTIMAGE_TARGET) --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --output $@
+# --second_offset $(BOARD_SECOND_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) \
+ $(hide) $(call assert-max-image-size,$@,$(BOARD_RECOVERYIMAGE_PARTITION_SIZE),raw)
+ @echo -e ${CL_CYN}"Made recovery image: $@"${CL_RST}
+
+
diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml
new file mode 100644
index 0000000..4d72df4
--- /dev/null
+++ b/overlay/frameworks/base/core/res/res/values/config.xml
@@ -0,0 +1,258 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2013, 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.
+*/
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+
+ <!-- Whether a software navigation bar should be shown. NOTE: in the future this may be
+ autodetected from the Configuration. -->
+ <bool name="config_showNavigationBar">false</bool>
+
+ <!-- Flag indicating whether the we should enable the automatic brightness in Settings.
+ Software implementation will be used if config_hardware_auto_brightness_available is not set -->
+ <bool name="config_automatic_brightness_available">false</bool>
+
+ <!-- Array of light sensor LUX values to define our levels for auto backlight brightness support.
+ The N entries of this array define N 1 zones as follows:
+
+ Zone 0: 0 <= LUX < array[0]
+ Zone 1: array[0] <= LUX < array[1]
+ ...
+ Zone N: array[N - 1] <= LUX < array[N]
+ Zone N + 1 array[N] <= LUX < infinity
+
+ Must be overridden in platform specific overlays -->
+ <integer-array name="config_autoBrightnessLevels">
+ <item>10</item>
+ <item>30</item>
+ <item>60</item>
+ <item>100</item>
+ <item>150</item>
+ <item>210</item>
+ <item>255</item>
+ </integer-array>
+
+ <!-- Array of output values for LCD backlight corresponding to the LUX values
+ in the config_autoBrightnessLevels array. This array should have size one greater
+ than the size of the config_autoBrightnessLevels array.
+ This must be overridden in platform specific overlays -->
+ <integer-array name="config_autoBrightnessLcdBacklightValues">
+ <item>10</item>
+ <item>20</item>
+ <item>40</item>
+ <item>70</item>
+ <item>110</item>
+ <item>160</item>
+ <item>200</item>
+ <item>255</item>
+ </integer-array>
+
+ <!-- Array of output values for button backlight corresponding to the LUX values
+ in the config_autoBrightnessLevels array. This array should have size one greater
+ than the size of the config_autoBrightnessLevels array.
+ This must be overridden in platform specific overlays -->
+ <array name="config_autoBrightnessButtonBacklightValues" />
+
+ <string-array name="config_locationProviderPackageNames">
+ <item>com.google.android.gms</item>
+ <item>com.android.location.fused</item>
+ </string-array>
+
+ <!-- Minimum screen brightness allowed by the power manager. -->
+ <integer name="config_screenBrightnessDim">10</integer>
+
+ <!-- Default screen brightness setting.
+ Must be in the range specified by minimum and maximum. -->
+ <integer name="config_screenBrightnessSettingDefault">143</integer>
+
+ <!-- Minimum screen brightness setting allowed by the power manager.
+ The user is forbidden from setting the brightness below this level. -->
+ <integer name="config_screenBrightnessSettingMinimum">10</integer>
+
+ <!-- If this is true, the screen will come on when you unplug usb/power/whatever. -->
+ <bool name="config_unplugTurnsOnScreen">true</bool>
+
+ <!-- Set to true to add links to Cell Broadcast app from Settings and MMS app. -->
+ <bool name="config_cellBroadcastAppLinks">true</bool>
+
+ <!-- Shutdown if the battery temperature exceeds (this value * 0.1) Celsius. -->
+ <integer name="config_shutdownBatteryTemperature">680</integer>
+
+ <!-- Is the notification LED intrusive? Used to decide if there should be a disable option -->
+ <bool name="config_intrusiveNotificationLed">false</bool>
+
+ <!-- Default color for notification LED is white. -->
+ <color name="config_defaultNotificationColor">#ffffffff</color>
+
+ <!-- Default LED on time for notification LED in milliseconds. -->
+ <integer name="config_defaultNotificationLedOn">500</integer>
+
+ <!-- Default LED off time for notification LED in milliseconds. -->
+ <integer name="config_defaultNotificationLedOff">2000</integer>
+
+ <!-- reference volume index for music stream to limit headphone volume and display warning -->
+ <integer name="config_safe_media_volume_index">10</integer>
+
+ <!-- List of regexpressions describing the interface (if any) that represent tetherable
+ USB interfaces. If the device doesn't want to support tething over USB this should
+ be empty. An example would be "usb.*" -->
+ <string-array translatable="false" name="config_tether_usb_regexs">
+ <item>usb\\d</item>
+ <item>rndis\\d</item>
+ </string-array>
+
+ <!-- List of regexpressions describing the interface (if any) that represent tetherable
+ Wifi interfaces. If the device doesn't want to support tethering over Wifi this
+ should be empty. An example would be "softap.*" -->
+ <string-array translatable="false" name="config_tether_wifi_regexs">
+ <item>"wlan0"</item>
+ </string-array>
+
+ <!-- List of regexpressions describing the interface (if any) that represent tetherable
+ bluetooth interfaces. If the device doesn't want to support tethering over bluetooth this
+ should be empty. -->
+ <string-array translatable="false" name="config_tether_bluetooth_regexs">
+ <item>"bnep\\d"</item>
+ <item>"bt-pan"</item>
+ </string-array>
+
+ <!-- Array of allowable ConnectivityManager network types for tethering -->
+ <!-- Common options are [1, 4] for TYPE_WIFI and TYPE_MOBILE_DUN or
+ [0,1,5,7] for TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI and TYPE_BLUETOOTH -->
+ <integer-array name="config_tether_upstream_types">
+ <item>0</item>
+ <item>1</item>
+ <item>4</item>
+ <item>5</item>
+ <item>7</item>
+ </integer-array>
+
+ <!-- This string array should be overridden by the device to present a list of network
+ attributes. This is used by the connectivity manager to decide which networks can coexist
+ based on the hardware -->
+ <!-- An Array of "[Connection name],[ConnectivityManager.TYPE_xxxx],
+ [associated radio-type],[priority],[restoral-timer(ms)],[dependencyMet] -->
+ <!-- the 5th element "resore-time" indicates the number of milliseconds to delay
+ before automatically restore the default connection. Set -1 if the connection
+ does not require auto-restore. -->
+ <!-- the 6th element indicates boot-time dependency-met value. -->
+ <string-array name="networkAttributes">
+ <item>wifi,1,1,1,-1,true</item>
+ <item>mobile,0,0,0,-1,true</item>
+ <item>mobile_mms,2,0,2,240000,true</item>
+ <item>mobile_supl,3,0,2,60000,true</item>
+ <item>mobile_dun,4,0,2,60000,true</item>
+ <item>mobile_hipri,5,0,3,60000,true</item>
+ <item>bluetooth,7,7,0,-1,true</item>
+ <item>ethernet,9,9,2,-1,ture</item>
+ <item>mobile_fota,10,0,2,60000,true</item>
+ <item>mobile_ims,11,0,1,-1,true</item>
+ <item>mobile_cbs,12,0,2,60000,true</item>
+ <item>wifi_p2p,13,1,0,-1,true</item>
+ <item>mobile_ia,14,0,2,-1,true</item>
+ <item>mobile_emergency,15,0,2,-1,true</item>
+ <item>mobile_bip,23,0,2,60000,true</item>
+ <item>mobile_cas,24,0,3,60000,true</item>
+ <item>mobile_xcap,27,0,2,60000,true</item>
+ <item>mobile_ent1,28,0,2,-1,true</item>
+ <item>mobile_ent2,29,0,2,-1,true</item>
+ </string-array>
+
+ <!-- This string array should be overridden by the device to present a list of radio
+ attributes. This is used by the connectivity manager to decide which networks can coexist
+ based on the hardware -->
+ <!-- An Array of "[ConnectivityManager connectionType],
+ [# simultaneous connection types]" -->
+ <string-array name="radioAttributes">
+ <item>1,1</item>
+ <item>0,1</item>
+ <item>7,1</item>
+ </string-array>
+
+ <!-- The VoiceMail default value is displayed to my own number if it is true -->
+ <bool name="config_telephony_use_own_number_for_voicemail">false</bool>
+
+ <!-- Component name of the geofence services provider. -->
+ <add-resource name="config_geofenceServicesProvider" type="string">com.qualcomm.location</add-resource>
+
+ <integer-array name="config_longPressVibePattern">
+ <item>0</item>
+ <item>1</item>
+ <item>20</item>
+ <item>21</item>
+ </integer-array>
+ <integer-array name="config_virtualKeyVibePattern">
+ <item>0</item>
+ <item>10</item>
+ <item>20</item>
+ <item>30</item>
+ </integer-array>
+ <integer-array name="config_keyboardTapVibePattern">
+ <item>40</item>
+ </integer-array>
+ <integer-array name="config_safeModeDisabledVibePattern">
+ <item>0</item>
+ <item>1</item>
+ <item>20</item>
+ <item>21</item>
+ </integer-array>
+ <integer-array name="config_safeModeEnabledVibePattern">
+ <item>0</item>
+ <item>1</item>
+ <item>20</item>
+ <item>21</item>
+ <item>500</item>
+ <item>600</item>
+ </integer-array>
+ <integer-array name="config_scrollBarrierVibePattern">
+ <item>0</item>
+ <item>15</item>
+ <item>10</item>
+ <item>10</item>
+ </integer-array>
+
+ <!-- Is the device capable of hot swapping an UICC Card -->
+ <bool name="config_hotswapCapable">true</bool>
+
+ <!-- Default interface to monitor data use -->
+ <string name="config_datause_iface">rmnet0</string>
+
+ <!-- Boolean indicating if restoring network selection should be skipped -->
+ <!-- The restoring is handled by modem if it is true-->
+ <bool name="skip_restoring_network_selection">true</bool>
+
+ <!-- Maximum number of supported users -->
+ <integer name="config_multiuserMaximumUsers">1</integer>
+ <!-- Whether Multiuser UI should be shown -->
+ <bool name="config_enableMultiUserUI">false</bool>
+
+ <!-- Hardware keys present on the device, stored as a bit field.
+ This integer should equal the sum of the corresponding value for each
+ of the following keys present:
+ 1 - Home
+ 2 - Back
+ 4 - Menu
+ 8 - Assistant (search)
+ 16 - App switch
+ 32 - Camera
+ 64 - Volume rocker
+ For example, a device with Home, Back and Menu keys would set this
+ config to 7. -->
+ <integer name="config_deviceHardwareKeys">67</integer>
+
+</resources>
diff --git a/overlay/frameworks/base/core/res/res/xml/power_profile.xml b/overlay/frameworks/base/core/res/res/xml/power_profile.xml
new file mode 100644
index 0000000..fef21ba
--- /dev/null
+++ b/overlay/frameworks/base/core/res/res/xml/power_profile.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<device name="Android">
+ <item name="none">0</item>
+ <item name="screen.on">402</item>
+ <item name="screen.full">901</item>
+ <item name="bluetooth.active">25</item>
+ <item name="bluetooth.on">15</item>
+ <item name="wifi.on">1</item>
+ <item name="wifi.active">211</item>
+ <item name="wifi.scan">78</item>
+ <item name="dsp.audio">48</item>
+ <item name="dsp.video">54.0</item>
+ <item name="gps.on">50</item>
+ <item name="radio.active">0</item>
+ <item name="radio.scanning">0</item>
+ <array name="radio.on">
+ <value>0</value>
+ </array>
+ <array name="cpu.speeds">
+ <value>1700000</value>
+ <value>1600000</value>
+ <value>1500000</value>
+ <value>1400000</value>
+ <value>1300000</value>
+ <value>1200000</value>
+ <value>1100000</value>
+ <value>1000000</value>
+ <value>900000</value>
+ <value>800000</value>
+ <value>700000</value>
+ <value>600000</value>
+ <value>500000</value>
+ <value>400000</value>
+ <value>300000</value>
+ <value>200000</value>
+ </array>
+ <item name="cpu.idle">4</item>
+ <item name="cpu.awake">167</item>
+ <array name="cpu.active">
+ <value>1003</value>
+ <value>937</value>
+ <value>825</value>
+ <value>710</value>
+ <value>633</value>
+ <value>584</value>
+ <value>546</value>
+ <value>510</value>
+ <value>431</value>
+ <value>413</value>
+ <value>386</value>
+ <value>333</value>
+ <value>315</value>
+ <value>295</value>
+ <value>284</value>
+ <value>231</value>
+ </array>
+ <item name="battery.capacity">2600</item> /* mAh */
+</device>
\ No newline at end of file
diff --git a/overlay/frameworks/base/core/res/res/xml/storage_list.xml b/overlay/frameworks/base/core/res/res/xml/storage_list.xml
new file mode 100644
index 0000000..d02b14a
--- /dev/null
+++ b/overlay/frameworks/base/core/res/res/xml/storage_list.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<StorageList xmlns:android="http://schemas.android.com/apk/res/android">
+ <storage android:mountPoint="/storage/sdcard0"
+ android:storageDescription="@string/storage_internal"
+ android:primary="true"
+ android:emulated="true"
+ android:mtpReserve="100" />
+
+ <storage android:mountPoint="/storage/sdcard1"
+ android:storageDescription="@string/storage_sd_card"
+ android:primary="false"
+ android:emulated="false"
+ android:removable="true"
+ android:allowMassStorage="true" />
+
+ <storage android:mountPoint="/storage/usbdisk"
+ android:storageDescription="@string/storage_usb"
+ android:primary="false"
+ android:removable="true" />
+</StorageList>
diff --git a/overlay/frameworks/base/packages/Keyguard/res/values/dimens.xml b/overlay/frameworks/base/packages/Keyguard/res/values/dimens.xml
new file mode 100644
index 0000000..4dbe053
--- /dev/null
+++ b/overlay/frameworks/base/packages/Keyguard/res/values/dimens.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (c) 2014, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
+-->
+<resources>
+ <dimen name="widget_big_font_size">68dp</dimen>
+</resources>
diff --git a/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
new file mode 100644
index 0000000..63d6758
--- /dev/null
+++ b/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright (c) 2013, 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.
+ */
+-->
+<resources>
+ <!-- Set the automatic brightness mode on by default -->
+ <bool name="def_screen_brightness_automatic_mode">true</bool>
+
+ <!-- Default screen brightness, from 0 to 255. 102 is 40%. -->
+ <integer name="def_screen_brightness">102</integer>
+
+ <!-- 600 seconds (10 minutes) for default screen timeout
+ Will be change when systemui will fix -->
+ <integer name="def_screen_off_timeout">600000</integer>
+</resources>
diff --git a/overlay/packages/apps/Bluetooth/res/values/config.xml b/overlay/packages/apps/Bluetooth/res/values/config.xml
new file mode 100644
index 0000000..c460e47
--- /dev/null
+++ b/overlay/packages/apps/Bluetooth/res/values/config.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (c) 2014, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted (subject to the limitations in the
+ disclaimer below) provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of the Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
+ GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+ HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<resources>
+ <bool name="profile_supported_hfpclient">true</bool>
+ <bool name="profile_supported_avrcp_controller">true</bool>
+ <bool name="profile_supported_a2dp_sink">true</bool>
+</resources>
\ No newline at end of file
diff --git a/overlay/packages/apps/Dialer/res/values/config.xml b/overlay/packages/apps/Dialer/res/values/config.xml
new file mode 100644
index 0000000..f4512d1
--- /dev/null
+++ b/overlay/packages/apps/Dialer/res/values/config.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (C) 2015 The CyanogenMod 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.
+-->
+<resources>
+ <bool name="call_recording_enabled">true</bool>
+ <integer name="call_recording_audio_source">4</integer>
+</resources>
diff --git a/overlay/packages/apps/Phone/res/values/config.xml b/overlay/packages/apps/Phone/res/values/config.xml
new file mode 100644
index 0000000..c045ee6
--- /dev/null
+++ b/overlay/packages/apps/Phone/res/values/config.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 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.
+-->
+
+<!-- Phone app resources that may need to be customized
+ for different hardware or product builds. -->
+<resources>
+ <!-- Determine whether calls to mute the microphone in PhoneUtils
+ are routed through the android.media.AudioManager class (true) or through
+ the com.android.internal.telephony.Phone interface (false). -->
+ <bool name="send_mic_mute_to_AudioManager">true</bool>
+ <!-- Flag indicating if the tty is enabled -->
+ <bool name="tty_enabled">true</bool>
+</resources>
diff --git a/overlay/packages/apps/Settings/res/values/bool.xml b/overlay/packages/apps/Settings/res/values/bool.xml
new file mode 100644
index 0000000..3f1814c
--- /dev/null
+++ b/overlay/packages/apps/Settings/res/values/bool.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2015 The CyanogenMod 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.
+-->
+
+<resources>
+ <!-- Volume Rocker Wake -->
+ <bool name="config_show_volumeRockerWake">true</bool>
+</resources>
diff --git a/overlay/packages/apps/Settings/res/values/config.xml b/overlay/packages/apps/Settings/res/values/config.xml
new file mode 100644
index 0000000..5b5b631
--- /dev/null
+++ b/overlay/packages/apps/Settings/res/values/config.xml
@@ -0,0 +1,5 @@
+<resources xmlns:xliff="urnasis:names:tc:xliff:document:1.2 ">
+ <!-- Volume Rocker Wake Support. Some devices do not support (PMU) this.
+ Setting to false will disable Volume Rocker Wake support -->
+ <bool name="config_show_volumeRockerWake">true</bool>
+</resources>
diff --git a/overlay/packages/services/Telecomm/res/values/config.xml b/overlay/packages/services/Telecomm/res/values/config.xml
new file mode 100644
index 0000000..a74d5b9
--- /dev/null
+++ b/overlay/packages/services/Telecomm/res/values/config.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The CyanogenMod 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.
+-->
+
+<resources>
+
+ <!-- Flag indicating if the tty is enabled -->
+ <bool name="tty_enabled">true</bool>
+
+ <bool name="allow_emergency_numbers_in_call_log">true</bool>
+</resources>
\ No newline at end of file
diff --git a/overlay/packages/services/Telephony/res/values-mcc310-mnc120/config.xml b/overlay/packages/services/Telephony/res/values-mcc310-mnc120/config.xml
new file mode 100644
index 0000000..99b07de
--- /dev/null
+++ b/overlay/packages/services/Telephony/res/values-mcc310-mnc120/config.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The CyanogenMod 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.
+-->
+
+<resources>
+ <!-- Sprint Message Wait Indicator Quirk -->
+ <bool name="sprint_mwi_quirk">true</bool>
+
+ <!-- Show cdma auto network mode in (global) roaming -->
+ <bool name="config_show_cdma" translatable="false">true</bool>
+</resources>
diff --git a/overlay/packages/services/Telephony/res/values/config.xml b/overlay/packages/services/Telephony/res/values/config.xml
new file mode 100644
index 0000000..f520040
--- /dev/null
+++ b/overlay/packages/services/Telephony/res/values/config.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The CyanogenMod 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.
+-->
+
+<resources>
+ <!-- Determine whether calls to mute the microphone in PhoneUtils
+ are routed through the android.media.AudioManager class (true) or through
+ the com.android.internal.telephony.Phone interface (false). -->
+ <bool name="send_mic_mute_to_AudioManager">true</bool>
+
+ <!-- This device implements a noise suppression device for in call audio-->
+ <bool name="has_in_call_noise_suppression">true</bool>
+ <!-- Show enabled lte option for lte device -->
+ <bool name="config_enabled_lte" translatable="false">true</bool>
+
+</resources>
diff --git a/partitions.txt b/partitions.txt
new file mode 100644
index 0000000..eb3cefc
--- /dev/null
+++ b/partitions.txt
@@ -0,0 +1,69 @@
+u0_a130@grandprimelte:/ $ ls -l /dev/block/platform/7824900.sdhci/by-name/
+aboot -> /dev/block/mmcblk0p5
+apnhlos -> /dev/block/mmcblk0p1
+backup -> /dev/block/mmcblk0p19
+boot -> /dev/block/mmcblk0p16
+cache -> /dev/block/mmcblk0p25
+ddr -> /dev/block/mmcblk0p4
+efs -> /dev/block/mmcblk0p13
+fota -> /dev/block/mmcblk0p18
+fsc -> /dev/block/mmcblk0p20
+fsg -> /dev/block/mmcblk0p9
+hidden -> /dev/block/mmcblk0p26
+modem -> /dev/block/mmcblk0p2
+modemst1 -> /dev/block/mmcblk0p14
+modemst2 -> /dev/block/mmcblk0p15
+pad -> /dev/block/mmcblk0p11
+param -> /dev/block/mmcblk0p12
+persdata -> /dev/block/mmcblk0p23
+persist -> /dev/block/mmcblk0p22
+qhee -> /dev/block/mmcblk0p8
+qsee -> /dev/block/mmcblk0p7
+recovery -> /dev/block/mmcblk0p17
+rpm -> /dev/block/mmcblk0p6
+sbl1 -> /dev/block/mmcblk0p3
+sec -> /dev/block/mmcblk0p10
+ssd -> /dev/block/mmcblk0p21
+system -> /dev/block/mmcblk0p24
+userdata -> /dev/block/mmcblk0p27
+####################
+cat /proc/partitions
+
+major minor #blocks name
+
+7 0 8348 loop0
+253 0 307200 zram0
+179 0 7634944 mmcblk0
+179 1 15360 mmcblk0p1
+179 2 58816 mmcblk0p2
+179 3 512 mmcblk0p3
+179 4 32 mmcblk0p4
+179 5 2048 mmcblk0p5
+179 6 512 mmcblk0p6
+179 7 512 mmcblk0p7
+179 8 512 mmcblk0p8
+179 9 3072 mmcblk0p9
+179 10 16 mmcblk0p10
+179 11 10768 mmcblk0p11
+179 12 10240 mmcblk0p12
+179 13 14336 mmcblk0p13
+179 14 3072 mmcblk0p14
+179 15 3072 mmcblk0p15
+179 16 13312 mmcblk0p16
+179 17 15360 mmcblk0p17
+179 18 5121 mmcblk0p18
+179 19 7159 mmcblk0p19
+179 20 3072 mmcblk0p20
+179 21 8 mmcblk0p21
+179 22 8192 mmcblk0p22
+179 23 9216 mmcblk0p23
+179 24 1531904 mmcblk0p24
+179 25 307200 mmcblk0p25
+179 26 102400 mmcblk0p26
+179 27 5505004 mmcblk0p27
+179 32 2048 mmcblk0rpmb
+179 64 15440896 mmcblk1
+179 65 14667497 mmcblk1p1
+179 66 254804 mmcblk1p2
+179 67 518144 mmcblk1p3
+254 0 8347 dm-0
\ No newline at end of file
diff --git a/prebuilt/dsi_config.xml b/prebuilt/dsi_config.xml
new file mode 100755
index 0000000..73fe0ee
--- /dev/null
+++ b/prebuilt/dsi_config.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<list name="dsi_config">
+ <!-- Configuration for fusion4.5 PCIe -->
+ <listitem name="fusion4_5_pcie">
+
+ <data name="qos_enabled" type="int"> 0 </data>
+ <data name="rmnet_data_enabled" type="int"> 1 </data>
+ <data name="phys_net_dev" type="string"> rmnet_mhi0 </data>
+
+ <data name="single_qmux_channel_enabled" type="int"> 1 </data>
+ <data name="single_qmux_channel_name" type="string"> rmnet_mhi0 </data>
+
+ <data name="num_dsi_handles" type="int"> 8 </data>
+ <list name="device_names">
+ <data type="string"> rmnet_data0 </data>
+ <data type="string"> rmnet_data1 </data>
+ <data type="string"> rmnet_data2 </data>
+ <data type="string"> rmnet_data3 </data>
+ <data type="string"> rmnet_data4 </data>
+ <data type="string"> rmnet_data5 </data>
+ <data type="string"> rmnet_data6 </data>
+ <data type="string"> rmnet_data7 </data>
+ </list>
+
+ <list name="control_port_names">
+ <data type="string"> rmnet_mhi0 </data>
+ <data type="string"> rmnet_mhi0 </data>
+ <data type="string"> rmnet_mhi0 </data>
+ <data type="string"> rmnet_mhi0 </data>
+ <data type="string"> rmnet_mhi0 </data>
+ <data type="string"> rmnet_mhi0 </data>
+ <data type="string"> rmnet_mhi0 </data>
+ <data type="string"> rmnet_mhi0 </data>
+ </list>
+ </listitem>
+
+ <!-- Configuration for MSM8994 -->
+ <listitem name="msm8994">
+
+ <data name="qos_enabled" type="int"> 1 </data>
+ <data name="rmnet_data_enabled" type="int"> 1 </data>
+ <data name="phys_net_dev" type="string"> rmnet_ipa0 </data>
+
+ <data name="single_qmux_channel_enabled" type="int"> 1 </data>
+ <data name="single_qmux_channel_name" type="string"> rmnet0 </data>
+
+ <data name="num_dsi_handles" type="int"> 8 </data>
+ <list name="device_names">
+ <data type="string"> rmnet_data0 </data>
+ <data type="string"> rmnet_data1 </data>
+ <data type="string"> rmnet_data2 </data>
+ <data type="string"> rmnet_data3 </data>
+ <data type="string"> rmnet_data4 </data>
+ <data type="string"> rmnet_data5 </data>
+ <data type="string"> rmnet_data6 </data>
+ <data type="string"> rmnet_data7 </data>
+ </list>
+
+ <list name="control_port_names">
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ </list>
+ </listitem>
+
+ <!-- Configuration for dpm_2_0 targets -->
+ <listitem name="dpm_2_0">
+ <data name="qos_enabled" type="int"> 1 </data>
+ <data name="rmnet_data_enabled" type="int"> 1 </data>
+ <data name="phys_net_dev" type="string"> rmnet0 </data>
+
+ <data name="single_qmux_channel_enabled" type="int"> 1 </data>
+ <data name="single_qmux_channel_name" type="string"> rmnet0 </data>
+
+ <data name="num_dsi_handles" type="int"> 8 </data>
+ <list name="device_names">
+ <data type="string"> rmnet_data0 </data>
+ <data type="string"> rmnet_data1 </data>
+ <data type="string"> rmnet_data2 </data>
+ <data type="string"> rmnet_data3 </data>
+ <data type="string"> rmnet_data4 </data>
+ <data type="string"> rmnet_data5 </data>
+ <data type="string"> rmnet_data6 </data>
+ <data type="string"> rmnet_data7 </data>
+ </list>
+
+ <list name="control_port_names">
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ <data type="string"> rmnet0 </data>
+ </list>
+ </listitem>
+</list>
+
diff --git a/prebuilt/netmgr_config.xml b/prebuilt/netmgr_config.xml
new file mode 100755
index 0000000..e4d1c2e
--- /dev/null
+++ b/prebuilt/netmgr_config.xml
@@ -0,0 +1,242 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- QMI configuration -->
+<list name="netmgr_config">
+
+ <!-- Fusion4.5 (PCIe) parameters -->
+ <listitem name = "fusion4_5_pcie">
+
+ <data name="qmi_dpm_enabled" type="int"> 0 </data>
+ <data name="wda_data_format_enabled" type="int"> 1 </data>
+
+ <data name="single_qmux_ch_enabled" type="int"> 1 </data>
+ <data name="single_qmux_ch_conn_id_str" type="string"> rmnet_mhi0 </data>
+ <data name="single_qmux_ch_name" type="string"> MHICTL0 </data>
+
+ <data name="rmnet_data_enabled" type="int"> 1 </data>
+ <data name="dataformat_agg_dl_pkt" type="int"> 1 </data>
+ <data name="dataformat_agg_dl_size" type="int"> 2048 </data>
+ <data name="dataformat_dl_data_aggregation_protocol" type="int"> 7 </data>
+ <data name="phys_net_dev" type="string"> rmnet_mhi0 </data>
+
+ <data name="rps_mask" type="int"> 1 </data>
+ <data name="netdev_budget" type="int"> 9 </data>
+
+ <data name="low_latency_filters" type="int"> 1 </data>
+
+ <data name="num_modems" type="int"> 2 </data>
+ <list name="modems_enabled">
+ <data type="int"> 1 </data> <!-- MODEM_MSM -->
+ <data type="int"> 0 </data> <!-- MODEM_MDM -->
+ </list>
+
+ <data name="control_ports_len" type="int"> 8 </data>
+ <list name="control_ports">
+ <data type="string"> rmnet_data0 </data>
+ <data type="string"> rmnet_data1 </data>
+ <data type="string"> rmnet_data2 </data>
+ <data type="string"> rmnet_data3 </data>
+ <data type="string"> rmnet_data4 </data>
+ <data type="string"> rmnet_data5 </data>
+ <data type="string"> rmnet_data6 </data>
+ <data type="string"> rmnet_data7 </data>
+ </list>
+
+ <data name="data_ports_len" type="int"> 8 </data>
+ <list name="data_ports">
+ <data type="string"> rmnet_data0 </data>
+ <data type="string"> rmnet_data1 </data>
+ <data type="string"> rmnet_data2 </data>
+ <data type="string"> rmnet_data3 </data>
+ <data type="string"> rmnet_data4 </data>
+ <data type="string"> rmnet_data5 </data>
+ <data type="string"> rmnet_data6 </data>
+ <data type="string"> rmnet_data7 </data>
+ </list>
+
+ <data name="iwlan_enable" type="int"> 1 </data>
+ <data name="rev_control_ports_len" type="int"> 9 </data>
+ <list name="rev_control_ports">
+ <data type="string"> r_rmnet_data0 </data>
+ <data type="string"> r_rmnet_data1 </data>
+ <data type="string"> r_rmnet_data2 </data>
+ <data type="string"> r_rmnet_data3 </data>
+ <data type="string"> r_rmnet_data4 </data>
+ <data type="string"> r_rmnet_data5 </data>
+ <data type="string"> r_rmnet_data6 </data>
+ <data type="string"> r_rmnet_data7 </data>
+ <data type="string"> r_rmnet_data8 </data>
+ </list>
+
+ <data name="rev_data_ports_len" type="int"> 9 </data>
+ <list name="rev_data_ports">
+ <data type="string"> r_rmnet_data0 </data>
+ <data type="string"> r_rmnet_data1 </data>
+ <data type="string"> r_rmnet_data2 </data>
+ <data type="string"> r_rmnet_data3 </data>
+ <data type="string"> r_rmnet_data4 </data>
+ <data type="string"> r_rmnet_data5 </data>
+ <data type="string"> r_rmnet_data6 </data>
+ <data type="string"> r_rmnet_data7 </data>
+ <data type="string"> r_rmnet_data8 </data>
+ </list>
+
+ </listitem>
+
+ <!-- MSM8994 parameters -->
+ <listitem name = "msm8994">
+
+ <data name="qmi_dpm_enabled" type="int"> 1 </data>
+ <data name="wda_data_format_enabled" type="int"> 1 </data>
+
+ <data name="single_qmux_ch_enabled" type="int"> 1 </data>
+ <data name="single_qmux_ch_conn_id_str" type="string"> rmnet0 </data>
+ <data name="single_qmux_ch_name" type="string"> DATA5_CNTL </data>
+
+ <data name="rmnet_data_enabled" type="int"> 1 </data>
+ <data name="dataformat_agg_dl_pkt" type="int"> 1 </data>
+ <data name="dataformat_agg_dl_size" type="int"> 2048 </data>
+ <data name="dataformat_dl_data_aggregation_protocol" type="int"> 7 </data>
+ <data name="phys_net_dev" type="string"> rmnet_ipa0 </data>
+
+ <data name="rps_mask" type="int"> 0 </data>
+ <data name="netdev_budget" type="int"> 0 </data>
+ <data name="low_latency_filters" type="int"> 0 </data>
+
+ <data name="num_modems" type="int"> 2 </data>
+ <list name="modems_enabled">
+ <data type="int"> 1 </data> <!-- MODEM_MSM -->
+ <data type="int"> 0 </data> <!-- MODEM_MDM -->
+ </list>
+
+ <data name="control_ports_len" type="int"> 8 </data>
+ <list name="control_ports">
+ <data type="string"> rmnet_data0 </data>
+ <data type="string"> rmnet_data1 </data>
+ <data type="string"> rmnet_data2 </data>
+ <data type="string"> rmnet_data3 </data>
+ <data type="string"> rmnet_data4 </data>
+ <data type="string"> rmnet_data5 </data>
+ <data type="string"> rmnet_data6 </data>
+ <data type="string"> rmnet_data7 </data>
+ </list>
+
+ <data name="data_ports_len" type="int"> 8 </data>
+ <list name="data_ports">
+ <data type="string"> rmnet_data0 </data>
+ <data type="string"> rmnet_data1 </data>
+ <data type="string"> rmnet_data2 </data>
+ <data type="string"> rmnet_data3 </data>
+ <data type="string"> rmnet_data4 </data>
+ <data type="string"> rmnet_data5 </data>
+ <data type="string"> rmnet_data6 </data>
+ <data type="string"> rmnet_data7 </data>
+ </list>
+
+ <!-- iWLAN ports -->
+ <data name="iwlan_enable" type="int"> 1 </data>
+ <data name="rev_control_ports_len" type="int"> 9 </data>
+ <list name="rev_control_ports">
+ <data type="string"> r_rmnet_data0 </data>
+ <data type="string"> r_rmnet_data1 </data>
+ <data type="string"> r_rmnet_data2 </data>
+ <data type="string"> r_rmnet_data3 </data>
+ <data type="string"> r_rmnet_data4 </data>
+ <data type="string"> r_rmnet_data5 </data>
+ <data type="string"> r_rmnet_data6 </data>
+ <data type="string"> r_rmnet_data7 </data>
+ <data type="string"> r_rmnet_data8 </data>
+ </list>
+
+ <data name="rev_data_ports_len" type="int"> 9 </data>
+ <list name="rev_data_ports">
+ <data type="string"> r_rmnet_data0 </data>
+ <data type="string"> r_rmnet_data1 </data>
+ <data type="string"> r_rmnet_data2 </data>
+ <data type="string"> r_rmnet_data3 </data>
+ <data type="string"> r_rmnet_data4 </data>
+ <data type="string"> r_rmnet_data5 </data>
+ <data type="string"> r_rmnet_data6 </data>
+ <data type="string"> r_rmnet_data7 </data>
+ <data type="string"> r_rmnet_data8 </data>
+ </list>
+
+ </listitem>
+
+ <!-- DPM 2.0 parameters -->
+ <listitem name = "dpm_2_0">
+
+ <data name="qmi_dpm_enabled" type="int"> 0 </data>
+ <data name="wda_data_format_enabled" type="int"> 1 </data>
+
+ <data name="single_qmux_ch_enabled" type="int"> 1 </data>
+ <data name="single_qmux_ch_conn_id_str" type="string"> rmnet0 </data>
+ <data name="single_qmux_ch_name" type="string"> DATA5_CNTL </data>
+
+ <data name="rmnet_data_enabled" type="int"> 1 </data>
+ <data name="dataformat_agg_dl_pkt" type="int"> 1 </data>
+ <data name="dataformat_agg_dl_size" type="int"> 2048 </data>
+ <data name="phys_net_dev" type="string"> rmnet0 </data>
+ <data name="dataformat_dl_data_aggregation_protocol" type="int"> 5 </data>
+ <data name="rps_mask" type="int"> 10 </data>
+ <data name="netdev_budget" type="int"> 0 </data>
+ <data name="low_latency_filters" type="int"> 0 </data>
+ <data name="num_modems" type="int"> 2 </data>
+ <list name="modems_enabled">
+ <data type="int"> 1 </data> <!-- MODEM_MSM -->
+ <data type="int"> 0 </data> <!-- MODEM_MDM -->
+ </list>
+
+ <data name="control_ports_len" type="int"> 8 </data>
+ <list name="control_ports">
+ <data type="string"> rmnet_data0 </data>
+ <data type="string"> rmnet_data1 </data>
+ <data type="string"> rmnet_data2 </data>
+ <data type="string"> rmnet_data3 </data>
+ <data type="string"> rmnet_data4 </data>
+ <data type="string"> rmnet_data5 </data>
+ <data type="string"> rmnet_data6 </data>
+ <data type="string"> rmnet_data7 </data>
+ </list>
+
+ <data name="data_ports_len" type="int"> 8 </data>
+ <list name="data_ports">
+ <data type="string"> rmnet_data0 </data>
+ <data type="string"> rmnet_data1 </data>
+ <data type="string"> rmnet_data2 </data>
+ <data type="string"> rmnet_data3 </data>
+ <data type="string"> rmnet_data4 </data>
+ <data type="string"> rmnet_data5 </data>
+ <data type="string"> rmnet_data6 </data>
+ <data type="string"> rmnet_data7 </data>
+ </list>
+
+ <data name="iwlan_enable" type="int"> 0 </data>
+ <data name="rev_control_ports_len" type="int"> 9 </data>
+ <list name="rev_control_ports">
+ <data type="string"> r_rmnet_data0 </data>
+ <data type="string"> r_rmnet_data1 </data>
+ <data type="string"> r_rmnet_data2 </data>
+ <data type="string"> r_rmnet_data3 </data>
+ <data type="string"> r_rmnet_data4 </data>
+ <data type="string"> r_rmnet_data5 </data>
+ <data type="string"> r_rmnet_data6 </data>
+ <data type="string"> r_rmnet_data7 </data>
+ <data type="string"> r_rmnet_data8 </data>
+ </list>
+
+ <data name="rev_data_ports_len" type="int"> 9 </data>
+ <list name="rev_data_ports">
+ <data type="string"> r_rmnet_data0 </data>
+ <data type="string"> r_rmnet_data1 </data>
+ <data type="string"> r_rmnet_data2 </data>
+ <data type="string"> r_rmnet_data3 </data>
+ <data type="string"> r_rmnet_data4 </data>
+ <data type="string"> r_rmnet_data5 </data>
+ <data type="string"> r_rmnet_data6 </data>
+ <data type="string"> r_rmnet_data7 </data>
+ <data type="string"> r_rmnet_data8 </data>
+ </list>
+
+ </listitem>
+</list>
diff --git a/prebuilt/qmi_config.xml b/prebuilt/qmi_config.xml
new file mode 100755
index 0000000..0218062
--- /dev/null
+++ b/prebuilt/qmi_config.xml
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- QMI configuration -->
+<list name="qmi_config">
+
+ <!-- Fusion4.5 (PCIe) parameters -->
+ <listitem name = "fusion4_5_pcie">
+
+ <data name="single_qmux_ch" type="int"> 1 </data>
+ <data name="control_ports_len" type="int"> 2 </data>
+
+ <list name="conn_str">
+ <data type="string"> QMI_PORT_RMNET_MHI_0 </data>
+ <data type="string"> QMI_PORT_RMNET_MHI_1 </data>
+ </list>
+
+ <list name="conn_id">
+ <data type="string"> QMI_CONN_ID_RMNET_MHI_0 </data>
+ <data type="string"> QMI_CONN_ID_RMNET_MHI_1 </data>
+ </list>
+
+ <list name="dev_name">
+ <data type="string"> /dev/mhi_pipe_14 </data>
+ <data type="string"> /dev/mhi_pipe_16 </data>
+ </list>
+
+ <list name="dev_name_test">
+ <data type="string"> /tmp/data/mhi_pipe_14 </data>
+ <data type="string"> /tmp/data/mhi_pipe_16 </data>
+ </list>
+
+ <list name="ch_name">
+ <data type="string"> MHICTL0 </data>
+ <data type="string"> MHICTL1 </data>
+ </list>
+
+ <list name="transport">
+ <data type="string"> LINUX_QMI_TRANSPORT_MHI </data>
+ <data type="string"> LINUX_QMI_TRANSPORT_MHI </data>
+ </list>
+
+ <list name="enabled">
+ <data type="int"> 1 </data>
+ <data type="int"> 1 </data>
+ </list>
+
+ <list name="open_at_powerup">
+ <data type="int"> 1 </data>
+ <data type="int"> 0 </data>
+ </list>
+
+ </listitem>
+
+ <!-- MSM8994 parameters -->
+ <listitem name = "msm8994">
+
+ <data name="single_qmux_ch" type="int"> 1 </data>
+ <data name="control_ports_len" type="int"> 1 </data>
+
+ <list name="conn_str">
+ <data type="string"> QMI_PORT_RMNET_IPA_0 </data>
+ </list>
+
+ <list name="conn_id">
+ <data type="string"> QMI_CONN_ID_RMNET_0 </data>
+ <data type="string"> QMI_CONN_ID_RMNET_8 </data>
+ </list>
+
+ <list name="dev_name">
+ <data type="string"> /dev/smdcntl0 </data>
+ <data type="string"> /dev/smdcntl8 </data>
+ </list>
+
+ <list name="dev_name_test">
+ <data type="string"> /tmp/data/smdcntl0 </data>
+ <data type="string"> /tmp/data/smdcntl8 </data>
+ </list>
+
+ <list name="ch_name">
+ <data type="string"> DATA5_CNTL </data>
+ <data type="string"> DATA14_CNTL </data>
+ </list>
+
+ <list name="transport">
+ <data type="string"> LINUX_QMI_TRANSPORT_SMD </data>
+ <data type="string"> LINUX_QMI_TRANSPORT_SMD </data>
+ </list>
+
+ <list name="enabled">
+ <data type="int"> 1 </data>
+ <data type="int"> 1 </data>
+ </list>
+
+ <list name="open_at_powerup">
+ <data type="int"> 1 </data>
+ </list>
+
+ </listitem>
+
+</list>
+
diff --git a/recovery.fstab b/recovery.fstab
new file mode 100644
index 0000000..fcfde3b
--- /dev/null
+++ b/recovery.fstab
@@ -0,0 +1,15 @@
+#<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags>
+/dev/block/bootdevice/by-name/boot /boot emmc default recoveryonly
+/dev/block/bootdevice/by-name/recovery /recovery emmc default recoveryonly
+/dev/block/bootdevice/by-name/system /system ext4 ro,barrier=1 wait
+/dev/block/bootdevice/by-name/userdata /data ext4 rw,discard,nosuid,nodev,noatime,nodiratime,inline_xattr,inline_data wait,check
+/dev/block/bootdevice/by-name/cache /cache ext4 rw,noatime,nosuid,nodev,barrier=1,data=ordered wait,check
+/dev/block/mmcblk1p1 /external_sd vfat nosuid,nodev wait,voldmanaged=external_sd:auto,noemulatedsd
+/dev/block/bootdevice/by-name/apnhlos /modem ext4 ro,nosuid,nodev,barrier=0 wait,check
+/dev/block/bootdevice/by-name/modem /mdm ext4 ro,nosuid,nodev,barrier=0 wait,check
+#/dev/block/bootdevice/by-name/persist /persist ext4
+#/dev/block/bootdevice/by-name/hidden /hidden ext4
+#/dev/block/bootdevice/by-name/persdata /persdata ext4
+
+/devices/platform/msm_hsusb /storage/usbdisk vfat nosuid,nodev wait,voldmanaged=usbdisk:auto
+/devices/soc.0/7824900.sdhci/mmc_host /storage/sdcard1 vfat nosuid,nodev wait,voldmanaged=sdcard1:auto
\ No newline at end of file
diff --git a/recovery/fstab.qcom b/recovery/fstab.qcom
new file mode 100644
index 0000000..e6d65ca
--- /dev/null
+++ b/recovery/fstab.qcom
@@ -0,0 +1,19 @@
+# Android fstab file.
+# The filesystem that contains the filesystem checker binary (typically /system) cannot
+# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
+
+#TODO: Add 'check' as fs_mgr_flags with data partition.
+# Currently we dont have e2fsck compiled. So fs check would failed.
+
+#<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags>
+/dev/block/platform/7824900.sdhci/by-name/system /system ext4 ro,errors=panic wait
+/dev/block/platform/7824900.sdhci/by-name/userdata /data ext4 noatime,nosuid,nodev,noauto_da_alloc,journal_async_commit,errors=panic wait,check,encryptable=footer,length=-16384
+/dev/block/platform/7824900.sdhci/by-name/cache /cache ext4 noatime,nosuid,nodev,noauto_da_alloc,journal_async_commit,errors=panic wait,check
+/dev/block/platform/7824900.sdhci/by-name/efs /efs ext4 noatime,nosuid,nodev,noauto_da_alloc,journal_async_commit,errors=panic wait
+/dev/block/platform/7824900.sdhci/by-name/persist /persist ext4 nosuid,nodev,data=ordered,nodelalloc wait
+/dev/block/platform/7824900.sdhci/by-name/modem /modem vfat ro,shortname=lower,uid=1000,gid=1000,dmask=227,fmask=337,context=u:object_r:firmware_file:s0 wait
+/dev/block/platform/7824900.sdhci/by-name/boot /boot emmc defaults defaults
+/dev/block/platform/7824900.sdhci/by-name/recovery /recovery emmc defaults defaults
+
+# VOLD
+/dev/block/platform/7864900.sdhci/mmcblk1p1 auto auto defaults voldmanaged=extSdCard:auto,noemulatedsd
\ No newline at end of file
diff --git a/recovery/init.class_main.sh b/recovery/init.class_main.sh
new file mode 100755
index 0000000..236a512
--- /dev/null
+++ b/recovery/init.class_main.sh
@@ -0,0 +1,86 @@
+#!/system/bin/sh
+# Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of The Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+#
+# start ril-daemon only for targets on which radio is present
+#
+baseband=`getprop ro.baseband`
+sgltecsfb=`getprop persist.radio.sglte_csfb`
+datamode=`getprop persist.data.mode`
+multisimslotcnt=`getprop ro.multisim.simslotcount`
+
+case "$baseband" in
+ "apq")
+ setprop ro.radio.noril yes
+ stop ril-daemon
+esac
+
+case "$baseband" in
+ "msm" | "csfb" | "svlte2a" | "mdm" | "mdm2" | "sglte" | "sglte2" | "dsda2" | "unknown" | "dsda3")
+ start qmuxd
+ case "$baseband" in
+ "svlte2a" | "csfb")
+ start qmiproxy
+ ;;
+ "sglte" | "sglte2" )
+ if [ "x$sgltecsfb" != "xtrue" ]; then
+ start qmiproxy
+ else
+ setprop persist.radio.voice.modem.index 0
+ fi
+ ;;
+ "dsda2")
+ setprop persist.radio.multisim.config dsda
+ esac
+
+ multisim=`getprop persist.radio.multisim.config`
+
+ if [ "$multisim" = "dsds" ] || [ "$multisim" = "dsda" ]; then
+ stop ril-daemon
+ start ril-daemon
+ start ril-daemon1
+ elif [ "$multisim" = "tsts" ]; then
+ stop ril-daemon
+ start ril-daemon
+ start ril-daemon1
+ start ril-daemon2
+ elif [ "$multisimslotcnt" = "2" ]; then
+ stop ril-daemon
+ start ril-daemon
+ start ril-daemon1
+ fi
+ case "$datamode" in
+ "tethered")
+ start qti
+ start port-bridge
+ ;;
+ *)
+ start netmgrd
+ ;;
+ esac
+esac
diff --git a/recovery/init.mdm.sh b/recovery/init.mdm.sh
new file mode 100755
index 0000000..67e4667
--- /dev/null
+++ b/recovery/init.mdm.sh
@@ -0,0 +1,33 @@
+#!/system/bin/sh
+# Copyright (c) 2013, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+baseband=`getprop ro.baseband`
+if [ "$baseband" = "mdm" ] || [ "$baseband" = "mdm2" ]; then
+ start mdm_helper
+fi
+
diff --git a/recovery/init.qcom.class_core.sh b/recovery/init.qcom.class_core.sh
new file mode 100755
index 0000000..501b27d
--- /dev/null
+++ b/recovery/init.qcom.class_core.sh
@@ -0,0 +1,227 @@
+#!/system/bin/sh
+# Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of The Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+# Set platform variables
+target=`getprop ro.board.platform`
+if [ -f /sys/devices/soc0/hw_platform ]; then
+ soc_hwplatform=`cat /sys/devices/soc0/hw_platform` 2> /dev/null
+else
+ soc_hwplatform=`cat /sys/devices/system/soc/soc0/hw_platform` 2> /dev/null
+fi
+if [ -f /sys/devices/soc0/soc_id ]; then
+ soc_hwid=`cat /sys/devices/soc0/soc_id` 2> /dev/null
+else
+ soc_hwid=`cat /sys/devices/system/soc/soc0/id` 2> /dev/null
+fi
+if [ -f /sys/devices/soc0/platform_version ]; then
+ soc_hwver=`cat /sys/devices/soc0/platform_version` 2> /dev/null
+else
+ soc_hwver=`cat /sys/devices/system/soc/soc0/platform_version` 2> /dev/null
+fi
+
+
+# Dynamic Memory Managment (DMM) provides a sys file system to the userspace
+# that can be used to plug in/out memory that has been configured as unstable.
+# This unstable memory can be in Active or In-Active State.
+# Each of which the userspace can request by writing to a sys file.
+#
+# ro.dev.dmm = 1; Indicates that DMM is enabled in the Android User Space. This
+# property is set in the Android system properties file.
+#
+# If ro.dev.dmm.dpd.start_address is set here then the target has a memory
+# configuration that supports DynamicMemoryManagement.
+init_DMM()
+{
+ block=-1
+
+ case "$target" in
+ "msm7630_surf" | "msm7630_1x" | "msm7630_fusion" | "msm8960")
+ ;;
+ *)
+ return
+ ;;
+ esac
+
+ mem="/sys/devices/system/memory"
+ op=`cat $mem/movable_start_bytes`
+ case "$op" in
+ "0")
+ log -p i -t DMM DMM Disabled. movable_start_bytes not set: $op
+ ;;
+
+ "$mem/movable_start_bytes: No such file or directory ")
+ log -p i -t DMM DMM Disabled. movable_start_bytes does not exist: $op
+ ;;
+
+ *)
+ log -p i -t DMM DMM available. movable_start_bytes at $op
+ movable_start_bytes=0x`cat $mem/movable_start_bytes`
+ block_size_bytes=0x`cat $mem/block_size_bytes`
+ block=$((#${movable_start_bytes}/${block_size_bytes}))
+
+ chown -h system.system $mem/memory$block/state
+ chown -h system.system $mem/probe
+ chown -h system.system $mem/active
+ chown -h system.system $mem/remove
+
+ case "$target" in
+ "msm7630_surf" | "msm7630_1x" | "msm7630_fusion")
+ echo $movable_start_bytes > $mem/probe
+ case "$?" in
+ "0")
+ log -p i -t DMM $movable_start_bytes to physical hotplug succeeded.
+ ;;
+ *)
+ log -p e -t DMM $movable_start_bytes to physical hotplug failed.
+ return
+ ;;
+ esac
+
+ echo online > $mem/memory$block/state
+ case "$?" in
+ "0")
+ log -p i -t DMM \'echo online\' to logical hotplug succeeded.
+ ;;
+ *)
+ log -p e -t DMM \'echo online\' to logical hotplug failed.
+ return
+ ;;
+ esac
+ ;;
+ esac
+
+ setprop ro.dev.dmm.dpd.start_address $movable_start_bytes
+ setprop ro.dev.dmm.dpd.block $block
+ ;;
+ esac
+
+ case "$target" in
+ "msm8960")
+ return
+ ;;
+ esac
+
+ # For 7X30 targets:
+ # ro.dev.dmm.dpd.start_address is set when the target has a 2x256Mb memory
+ # configuration. This is also used to indicate that the target is capable of
+ # setting EBI-1 to Deep Power Down or Self Refresh.
+ op=`cat $mem/low_power_memory_start_bytes`
+ case "$op" in
+ "0")
+ log -p i -t DMM Self-Refresh-Only Disabled. low_power_memory_start_bytes not set:$op
+ ;;
+ "$mem/low_power_memory_start_bytes No such file or directory ")
+ log -p i -t DMM Self-Refresh-Only Disabled. low_power_memory_start_bytes does not exist:$op
+ ;;
+ *)
+ log -p i -t DMM Self-Refresh-Only available. low_power_memory_start_bytes at $op
+ ;;
+ esac
+}
+
+#
+# For controlling console and shell on console on 8960 - perist.serial.enable 8960
+# On other target use default ro.debuggable property.
+#
+serial=`getprop persist.serial.enable`
+dserial=`getprop ro.debuggable`
+case "$target" in
+ "msm8960")
+ case "$serial" in
+ "0")
+ echo 0 > /sys/devices/platform/msm_serial_hsl.0/console
+ ;;
+ "1")
+ echo 1 > /sys/devices/platform/msm_serial_hsl.0/console
+ start console
+ ;;
+ *)
+ case "$dserial" in
+ "1")
+ start console
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ "msm8610" | "msm8974" | "msm8226")
+ case "$serial" in
+ "0")
+ echo 0 > /sys/devices/f991f000.serial/console
+ ;;
+ "1")
+ echo 1 > /sys/devices/f991f000.serial/console
+ start console
+ ;;
+ *)
+ case "$dserial" in
+ "1")
+ start console
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ *)
+ case "$dserial" in
+ "1")
+ start console
+ ;;
+ esac
+ ;;
+esac
+
+#
+# Allow persistent faking of bms
+# User needs to set fake bms charge in persist.bms.fake_batt_capacity
+#
+fake_batt_capacity=`getprop persist.bms.fake_batt_capacity`
+case "$fake_batt_capacity" in
+ "") ;; #Do nothing here
+ * )
+ echo "$fake_batt_capacity" > /sys/class/power_supply/battery/capacity
+ ;;
+esac
+
+case "$target" in
+ "msm7630_surf" | "msm7630_1x" | "msm7630_fusion")
+ insmod /system/lib/modules/ss_mfcinit.ko
+ insmod /system/lib/modules/ss_vencoder.ko
+ insmod /system/lib/modules/ss_vdecoder.ko
+ chmod -h 0666 /dev/ss_mfc_reg
+ chmod -h 0666 /dev/ss_vdec
+ chmod -h 0666 /dev/ss_venc
+
+ init_DMM
+ ;;
+
+ "msm8960")
+ init_DMM
+ ;;
+esac
diff --git a/recovery/init.qcom.early_boot.sh b/recovery/init.qcom.early_boot.sh
new file mode 100755
index 0000000..a8bcf09
--- /dev/null
+++ b/recovery/init.qcom.early_boot.sh
@@ -0,0 +1,200 @@
+#!/system/bin/sh
+# Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of The Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+export PATH=/system/bin
+
+# Set platform variables
+if [ -f /sys/devices/soc0/hw_platform ]; then
+ soc_hwplatform=`cat /sys/devices/soc0/hw_platform` 2> /dev/null
+else
+ soc_hwplatform=`cat /sys/devices/system/soc/soc0/hw_platform` 2> /dev/null
+fi
+if [ -f /sys/devices/soc0/soc_id ]; then
+ soc_hwid=`cat /sys/devices/soc0/soc_id` 2> /dev/null
+else
+ soc_hwid=`cat /sys/devices/system/soc/soc0/id` 2> /dev/null
+fi
+if [ -f /sys/devices/soc0/platform_version ]; then
+ soc_hwver=`cat /sys/devices/soc0/platform_version` 2> /dev/null
+else
+ soc_hwver=`cat /sys/devices/system/soc/soc0/platform_version` 2> /dev/null
+fi
+
+log -t BOOT -p i "MSM target '$1', SoC '$soc_hwplatform', HwID '$soc_hwid', SoC ver '$soc_hwver'"
+
+case "$1" in
+ "msm7630_surf" | "msm7630_1x" | "msm7630_fusion")
+ case "$soc_hwplatform" in
+ "FFA" | "SVLTE_FFA")
+ # linking to surf_keypad_qwerty.kcm.bin instead of surf_keypad_numeric.kcm.bin so that
+ # the UI keyboard works fine.
+ ln -s /system/usr/keychars/surf_keypad_qwerty.kcm.bin /system/usr/keychars/surf_keypad.kcm.bin
+ ;;
+ "Fluid")
+ setprop ro.sf.lcd_density 240
+ setprop qcom.bt.dev_power_class 2
+ ;;
+ *)
+ ln -s /system/usr/keychars/surf_keypad_qwerty.kcm.bin /system/usr/keychars/surf_keypad.kcm.bin
+ ;;
+ esac
+ ;;
+
+ "msm8660")
+ case "$soc_hwplatform" in
+ "Fluid")
+ setprop ro.sf.lcd_density 240
+ ;;
+ "Dragon")
+ setprop ro.sound.alsa "WM8903"
+ ;;
+ esac
+ ;;
+
+ "msm8960")
+ # lcd density is write-once. Hence the separate switch case
+ case "$soc_hwplatform" in
+ "Liquid")
+ if [ "$soc_hwver" == "196608" ]; then # version 0x30000 is 3D sku
+ setprop ro.sf.hwrotation 90
+ fi
+
+ setprop ro.sf.lcd_density 160
+ ;;
+ "MTP")
+ setprop ro.sf.lcd_density 240
+ ;;
+ *)
+ case "$soc_hwid" in
+ "109")
+ setprop ro.sf.lcd_density 160
+ ;;
+ *)
+ setprop ro.sf.lcd_density 240
+ ;;
+ esac
+ ;;
+ esac
+
+ #Set up composition type based on the target
+ case "$soc_hwid" in
+ 87)
+ #8960
+ setprop debug.composition.type dyn
+ ;;
+ 153|154|155|156|157|138)
+ #8064 V2 PRIME | 8930AB | 8630AB | 8230AB | 8030AB | 8960AB
+ setprop debug.composition.type c2d
+ ;;
+ *)
+ esac
+ ;;
+
+ "msm8974")
+ case "$soc_hwplatform" in
+ "Liquid")
+ setprop ro.sf.lcd_density 160
+ # Liquid do not have hardware navigation keys, so enable
+ # Android sw navigation bar
+ setprop ro.hw.nav_keys 0
+ ;;
+ "Dragon")
+ setprop ro.sf.lcd_density 240
+ ;;
+ *)
+ setprop ro.sf.lcd_density 320
+ ;;
+ esac
+ ;;
+
+ "msm8226")
+ case "$soc_hwplatform" in
+ *)
+ setprop ro.sf.lcd_density 320
+ ;;
+ esac
+ ;;
+
+ "msm8610" | "apq8084" | "mpq8092")
+ case "$soc_hwplatform" in
+ *)
+ setprop ro.sf.lcd_density 240
+ ;;
+ esac
+ ;;
+ "apq8084")
+ case "$soc_hwplatform" in
+ "Liquid")
+ setprop ro.sf.lcd_density 320
+ # Liquid do not have hardware navigation keys, so enable
+ # Android sw navigation bar
+ setprop ro.hw.nav_keys 0
+ ;;
+ "SBC")
+ setprop ro.sf.lcd_density 200
+ # SBC do not have hardware navigation keys, so enable
+ # Android sw navigation bar
+ setprop qemu.hw.mainkeys 0
+ ;;
+ *)
+ setprop ro.sf.lcd_density 480
+ ;;
+ esac
+ ;;
+esac
+
+# Setup HDMI related nodes & permissions
+# HDMI can be fb1 or fb2
+# Loop through the sysfs nodes and determine
+# the HDMI(dtv panel)
+for fb_cnt in 0 1 2
+do
+file=/sys/class/graphics/fb$fb_cnt
+dev_file=/dev/graphics/fb$fb_cnt
+ if [ -d "$file" ]
+ then
+ value=`cat $file/msm_fb_type`
+ case "$value" in
+ "dtv panel")
+ chown -h system.graphics $file/hpd
+ chown -h system.system $file/hdcp/tp
+ chown -h system.graphics $file/vendor_name
+ chown -h system.graphics $file/product_description
+ chmod -h 0664 $file/hpd
+ chmod -h 0664 $file/hdcp/tp
+ chmod -h 0664 $file/vendor_name
+ chmod -h 0664 $file/product_description
+ chmod -h 0664 $file/video_mode
+ chmod -h 0664 $file/format_3d
+ # create symbolic link
+ ln -s $dev_file /dev/graphics/hdmi
+ # Change owner and group for media server and surface flinger
+ chown -h system.system $file/format_3d;;
+ esac
+ fi
+done
diff --git a/recovery/init.qcom.factory.sh b/recovery/init.qcom.factory.sh
new file mode 100755
index 0000000..6ba4823
--- /dev/null
+++ b/recovery/init.qcom.factory.sh
@@ -0,0 +1,230 @@
+#!/system/bin/sh
+# Copyright (c) 2009-2013, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of The Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+# Actions on fast factory test mode
+ chown -h bluetooth.bluetooth /sys/module/bluetooth_power/parameters/power
+ chown -h bluetooth.bluetooth /sys/class/rfkill/rfkill0/type
+ chown -h bluetooth.bluetooth /sys/class/rfkill/rfkill0/state
+ chown -h bluetooth.bluetooth /proc/bluetooth/sleep/proto
+ chown -h system.system /sys/module/sco/parameters/disable_esco
+ chown -h bluetooth.bluetooth /sys/module/hci_smd/parameters/hcismd_set
+ chmod -h 0660 /sys/module/bluetooth_power/parameters/power
+ chmod -h 0660 /sys/module/hci_smd/parameters/hcismd_set
+ chmod -h 0660 /sys/class/rfkill/rfkill0/state
+ chmod -h 0660 /proc/bluetooth/sleep/proto
+ chown -h bluetooth.bluetooth /dev/ttyHS0
+ chmod -h 0660 /dev/ttyHS0
+ chown -h bluetooth.bluetooth /sys/devices/platform/msm_serial_hs.0/clock
+ chmod -h 0660 /sys/devices/platform/msm_serial_hs.0/clock
+
+ chmod -h 0660 /dev/ttyHS2
+ chown -h bluetooth.bluetooth /dev/ttyHS2
+
+ #Create QMUX deamon socket area
+ mkdir -p /dev/socket/qmux_radio
+ chown -h radio.radio /dev/socket/qmux_radio
+ chmod -h 2770 /dev/socket/qmux_radio
+ mkdir -p /dev/socket/qmux_audio
+ chown -h media.audio /dev/socket/qmux_audio
+ chmod -h 2770 /dev/socket/qmux_audio
+ mkdir -p /dev/socket/qmux_bluetooth
+ chown -h bluetooth.bluetooth /dev/socket/qmux_bluetooth
+ chmod -h 2770 /dev/socket/qmux_bluetooth
+ mkdir -p /dev/socket/qmux_gps
+ chown -h gps.gps /dev/socket/qmux_gps
+ chmod -h 2770 /dev/socket/qmux_gps
+
+ # Allow QMUX daemon to assign port open wait time
+ chown -h radio.radio /sys/devices/virtual/hsicctl/hsicctl0/modem_wait
+
+ setprop wifi.interface wlan0
+
+ setprop ro.telephony.call_ring.multiple false
+
+ #Set SUID bit for usbhub
+ chmod -h 4755 /system/bin/usbhub
+ chmod -h 755 /system/bin/usbhub_init
+
+ #Remove SUID bit for iproute2 ip tool
+ chmod -h 0755 /system/bin/ip
+
+ chmod -h 0444 /sys/devices/platform/msm_hsusb/gadget/usb_state
+
+ # setup permissions for fb1 related nodes
+ chown -h system.graphics /sys/class/graphics/fb1/hpd
+ chown -h system.system /sys/class/graphics/fb1/hdcp/tp
+ chmod -h 0664 /sys/devices/virtual/graphics/fb1/hpd
+ chmod -h 0664 /sys/devices/virtual/graphics/fb1/hdcp/tp
+ chmod -h 0664 /sys/devices/virtual/graphics/fb1/video_mode
+ chmod -h 0664 /sys/devices/virtual/graphics/fb1/format_3d
+
+ # Change owner and group for media server and surface flinger
+ chown -h system.system /sys/devices/virtual/graphics/fb1/format_3d
+
+ #For bridgemgr daemon to inform the USB driver of the correct transport
+ chown -h radio.radio /sys/class/android_usb/f_rmnet_smd_sdio/transport
+
+ #To allow interfaces to get v6 address when tethering is enabled
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet0/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet1/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet2/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet3/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet4/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet5/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet6/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet7/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_sdio0/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_sdio1/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_sdio2/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_sdio3/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_sdio4/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_sdio5/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_sdio6/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_sdio7/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_usb0/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_usb1/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_usb2/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_usb3/accept_ra
+
+ # To prevent out of order acknowledgements from making
+ # connection tracking to treat them as not belonging to
+ # the connection they belong to.
+ # Otherwise, a weird issue happens in which some long
+ # connections on high-throughput links get dropped when
+ # an ack packet comes out of order
+ echo 1 > /proc/sys/net/netfilter/nf_conntrack_tcp_be_liberal
+
+#TODO:
+# basic network init
+# ifup lo
+# hostname localhost
+# domainname localdomain
+
+# set RLIMIT_NICE to allow priorities from 19 to -20
+# setrlimit 13 40 40
+
+# Memory management. Basic kernel parameters, and allow the high
+# level system server to be able to adjust the kernel OOM driver
+# parameters to match how it is managing things.
+ echo 1 > /proc/sys/vm/overcommit_memory
+ echo 4 > /proc/sys/vm/min_free_order_shift
+ chown -h root.system /sys/module/lowmemorykiller/parameters/adj
+ chmod -h 0664 /sys/module/lowmemorykiller/parameters/adj
+ chown -h root.system /sys/module/lowmemorykiller/parameters/minfree
+ chmod -h 0664 /sys/module/lowmemorykiller/parameters/minfree
+
+ # Tweak background writeout
+ echo 200 > /proc/sys/vm/dirty_expire_centisecs
+ echo 5 > /proc/sys/vm/dirty_background_ratio
+
+ # Permissions for System Server and daemons.
+ chown -h radio.system /sys/android_power/state
+ chown -h radio.system /sys/android_power/request_state
+ chown -h radio.system /sys/android_power/acquire_full_wake_lock
+ chown -h radio.system /sys/android_power/acquire_partial_wake_lock
+ chown -h radio.system /sys/android_power/release_wake_lock
+ chown -h system.system /sys/power/autosleep
+ chown -h system.system /sys/power/state
+ chown -h system.system /sys/power/wakeup_count
+ chown -h radio.system /sys/power/wake_lock
+ chown -h radio.system /sys/power/wake_unlock
+ chmod -h 0660 /sys/power/state
+ chmod -h 0660 /sys/power/wake_lock
+ chmod -h 0660 /sys/power/wake_unlock
+
+ chown -h system.system /sys/devices/system/cpu/cpufreq/interactive/timer_rate
+ chmod -h 0660 /sys/devices/system/cpu/cpufreq/interactive/timer_rate
+ chown -h system.system /sys/devices/system/cpu/cpufreq/interactive/min_sample_time
+ chmod -h 0660 /sys/devices/system/cpu/cpufreq/interactive/min_sample_time
+ chown -h system.system /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq
+ chmod -h 0660 /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq
+ chown -h system.system /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load
+ chmod -h 0660 /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load
+ chown -h system.system /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay
+ chmod -h 0660 /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay
+ chown -h system.system /sys/devices/system/cpu/cpufreq/interactive/boost
+ chmod -h 0660 /sys/devices/system/cpu/cpufreq/interactive/boost
+ chown -h system.system /sys/devices/system/cpu/cpufreq/interactive/boostpulse
+ chown -h system.system /sys/devices/system/cpu/cpufreq/interactive/input_boost
+ chmod -h 0660 /sys/devices/system/cpu/cpufreq/interactive/input_boost
+ chown -h system.system /sys/devices/system/cpu/cpufreq/interactive/boostpulse_duration
+ chmod -h 0660 /sys/devices/system/cpu/cpufreq/interactive/boostpulse_duration
+
+ # Assume SMP uses shared cpufreq policy for all CPUs
+ chown -h system.system /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
+ chmod -h 0660 /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
+
+ chown -h system.system /sys/class/timed_output/vibrator/enable
+ chown -h system.system /sys/class/leds/keyboard-backlight/brightness
+ chown -h system.system /sys/class/leds/lcd-backlight/brightness
+ chown -h system.system /sys/class/leds/button-backlight/brightness
+ chown -h system.system /sys/class/leds/jogball-backlight/brightness
+ chown -h system.system /sys/class/leds/red/brightness
+ chown -h system.system /sys/class/leds/green/brightness
+ chown -h system.system /sys/class/leds/blue/brightness
+ chown -h system.system /sys/class/leds/red/device/grpfreq
+ chown -h system.system /sys/class/leds/red/device/grppwm
+ chown -h system.system /sys/class/leds/red/device/blink
+ chown -h system.system /sys/class/leds/red/brightness
+ chown -h system.system /sys/class/leds/green/brightness
+ chown -h system.system /sys/class/leds/blue/brightness
+ chown -h system.system /sys/class/leds/red/device/grpfreq
+ chown -h system.system /sys/class/leds/red/device/grppwm
+ chown -h system.system /sys/class/leds/red/device/blink
+ chown -h system.system /sys/class/timed_output/vibrator/enable
+ chown -h system.system /sys/module/sco/parameters/disable_esco
+ chown -h system.system /sys/kernel/ipv4/tcp_wmem_min
+ chown -h system.system /sys/kernel/ipv4/tcp_wmem_def
+ chown -h system.system /sys/kernel/ipv4/tcp_wmem_max
+ chown -h system.system /sys/kernel/ipv4/tcp_rmem_min
+ chown -h system.system /sys/kernel/ipv4/tcp_rmem_def
+ chown -h system.system /sys/kernel/ipv4/tcp_rmem_max
+ chown -h root radio /proc/cmdline
+
+# Set the property to indicate type of virtual display to 0
+# 0 indicates that virtual display is not a Wifi display and that the
+# session is not exercised through RemoteDisplay in the android framework
+ setprop persist.sys.wfd.virtual 0
+
+# Set this property so surfaceflinger is not started by system_init
+ setprop system_init.startsurfaceflinger 0
+
+# Start the following services needed for fftm
+ start config_bluetooth
+ start media
+ start fastmmi
+ start adbd
+ start qcom-post-boot
+ start rmt_storage
+ start qcom-c_main-sh
+ start irsc_util
+ start qcamerasvr
+ start qcom-usb-sh
+ start qcomsysd
+ start ptt_ffbm
+ start ftm_ffbm
diff --git a/recovery/init.qcom.sh b/recovery/init.qcom.sh
new file mode 100755
index 0000000..a673b5a
--- /dev/null
+++ b/recovery/init.qcom.sh
@@ -0,0 +1,201 @@
+#!/system/bin/sh
+# Copyright (c) 2009-2014, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of The Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+target=`getprop ro.board.platform`
+if [ -f /sys/devices/soc0/soc_id ]; then
+ platformid=`cat /sys/devices/soc0/soc_id`
+else
+ platformid=`cat /sys/devices/system/soc/soc0/id`
+fi
+#
+# Function to start sensors for DSPS enabled platforms
+#
+start_sensors()
+{
+ if [ -c /dev/msm_dsps -o -c /dev/sensors ]; then
+ chmod -h 775 /persist/sensors
+ chmod -h 664 /persist/sensors/sensors_settings
+ chown -h system.root /persist/sensors/sensors_settings
+
+ mkdir -p /data/misc/sensors
+ chmod -h 775 /data/misc/sensors
+
+ start sensors
+ fi
+}
+
+start_battery_monitor()
+{
+ if ls /sys/bus/spmi/devices/qpnp-bms-*/fcc_data ; then
+ chown -h root.system /sys/module/pm8921_bms/parameters/*
+ chown -h root.system /sys/module/qpnp_bms/parameters/*
+ chown -h root.system /sys/bus/spmi/devices/qpnp-bms-*/fcc_data
+ chown -h root.system /sys/bus/spmi/devices/qpnp-bms-*/fcc_temp
+ chown -h root.system /sys/bus/spmi/devices/qpnp-bms-*/fcc_chgcyl
+ chmod -h 0660 /sys/module/qpnp_bms/parameters/*
+ chmod -h 0660 /sys/module/pm8921_bms/parameters/*
+ mkdir -p /data/bms
+ chown -h root.system /data/bms
+ chmod -h 0770 /data/bms
+ start battery_monitor
+ fi
+}
+
+start_charger_monitor()
+{
+ if ls /sys/module/qpnp_charger/parameters/charger_monitor; then
+ chown -h root.system /sys/module/qpnp_charger/parameters/*
+ chown -h root.system /sys/class/power_supply/battery/input_current_max
+ chown -h root.system /sys/class/power_supply/battery/input_current_trim
+ chown -h root.system /sys/class/power_supply/battery/input_current_settled
+ chown -h root.system /sys/class/power_supply/battery/voltage_min
+ chmod -h 0664 /sys/class/power_supply/battery/input_current_max
+ chmod -h 0664 /sys/class/power_supply/battery/input_current_trim
+ chmod -h 0664 /sys/class/power_supply/battery/input_current_settled
+ chmod -h 0664 /sys/class/power_supply/battery/voltage_min
+ chmod -h 0664 /sys/module/qpnp_charger/parameters/charger_monitor
+ start charger_monitor
+ fi
+}
+
+start_vm_bms()
+{
+ if [ -e /dev/vm_bms ]; then
+ chown -h root.system /sys/class/power_supply/bms/current_now
+ chown -h root.system /sys/class/power_supply/bms/voltage_ocv
+ chmod -h 0664 /sys/class/power_supply/bms/current_now
+ chmod -h 0664 /sys/class/power_supply/bms/voltage_ocv
+ start vm_bms
+ fi
+}
+
+start_msm_irqbalance()
+{
+ if [ -f /system/bin/msm_irqbalance ]; then
+ case "$platformid" in
+ "239")
+ start msm_irqbalance;;
+ esac
+ fi
+}
+
+baseband=`getprop ro.baseband`
+#
+# Suppress default route installation during RA for IPV6; user space will take
+# care of this
+# exception default ifc
+for file in /proc/sys/net/ipv6/conf/*
+do
+ echo 0 > $file/accept_ra_defrtr
+done
+echo 1 > /proc/sys/net/ipv6/conf/default/accept_ra_defrtr
+
+case "$baseband" in
+ "svlte2a")
+ start bridgemgrd
+ ;;
+esac
+
+start_sensors
+
+case "$target" in
+ "msm7630_surf" | "msm7630_1x" | "msm7630_fusion")
+ if [ -f /sys/devices/soc0/hw_platform ]; then
+ value=`cat /sys/devices/soc0/hw_platform`
+ else
+ value=`cat /sys/devices/system/soc/soc0/hw_platform`
+ fi
+ case "$value" in
+ "Fluid")
+ start profiler_daemon;;
+ esac
+ ;;
+ "msm8660" )
+ if [ -f /sys/devices/soc0/hw_platform ]; then
+ platformvalue=`cat /sys/devices/soc0/hw_platform`
+ else
+ platformvalue=`cat /sys/devices/system/soc/soc0/hw_platform`
+ fi
+ case "$platformvalue" in
+ "Fluid")
+ start profiler_daemon;;
+ esac
+ ;;
+ "msm8960")
+ case "$baseband" in
+ "msm")
+ start_battery_monitor;;
+ esac
+
+ if [ -f /sys/devices/soc0/hw_platform ]; then
+ platformvalue=`cat /sys/devices/soc0/hw_platform`
+ else
+ platformvalue=`cat /sys/devices/system/soc/soc0/hw_platform`
+ fi
+ case "$platformvalue" in
+ "Fluid")
+ start profiler_daemon;;
+ "Liquid")
+ start profiler_daemon;;
+ esac
+ ;;
+ "msm8974")
+ platformvalue=`cat /sys/devices/soc0/hw_platform`
+ case "$platformvalue" in
+ "Fluid")
+ start profiler_daemon;;
+ "Liquid")
+ start profiler_daemon;;
+ esac
+ case "$baseband" in
+ "msm")
+ start_battery_monitor
+ ;;
+ esac
+ start_charger_monitor
+ ;;
+ "apq8084")
+ platformvalue=`cat /sys/devices/soc0/hw_platform`
+ case "$platformvalue" in
+ "Fluid")
+ start profiler_daemon;;
+ "Liquid")
+ start profiler_daemon;;
+ esac
+ ;;
+ "msm8226")
+ start_charger_monitor
+ ;;
+ "msm8610")
+ start_charger_monitor
+ ;;
+ "msm8916")
+ start_vm_bms
+ start_msm_irqbalance
+ ;;
+esac
diff --git a/recovery/init.qcom.ssr.sh b/recovery/init.qcom.ssr.sh
new file mode 100755
index 0000000..f144162
--- /dev/null
+++ b/recovery/init.qcom.ssr.sh
@@ -0,0 +1,137 @@
+#!/system/bin/sh
+# Copyright (c) 2013, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of The Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+ssr_str="$1"
+IFS=,
+ssr_array=($ssr_str)
+declare -i subsys_mask=0
+
+# check user input subsystem with system device
+ssr_check_subsystem_name()
+{
+ declare -i i=0
+ subsys=`cat /sys/bus/msm_subsys/devices/subsys$i/name`
+ while [ "$subsys" != "" ]
+ do
+ if [ "$subsys" == "$ssr_name" ]; then
+ return 1
+ fi
+ i=$i+1
+ subsys=`cat /sys/bus/msm_subsys/devices/subsys$i/name`
+ done
+ return 0
+}
+
+# set subsystem mask to indicate which subsystem needs to be enabled
+for num in "${!ssr_array[@]}"
+do
+ case "${ssr_array[$num]}" in
+ "1")
+ subsys_mask=0
+ ;;
+ "riva")
+ subsys_mask=$subsys_mask+1
+ ;;
+ "3")
+ subsys_mask=63
+ ;;
+ "adsp")
+ ssr_name=adsp
+ if ( ssr_check_subsystem_name ); then
+ subsys_mask=$subsys_mask+2
+ fi
+ ;;
+ "modem")
+ ssr_name=modem
+ if ( ssr_check_subsystem_name ); then
+ subsys_mask=$subsys_mask+4
+ fi
+ ;;
+ "wcnss")
+ ssr_name=wcnss
+ if ( ssr_check_subsystem_name ); then
+ subsys_mask=$subsys_mask+8
+ fi
+ ;;
+ "venus")
+ ssr_name=venus
+ if ( ssr_check_subsystem_name ); then
+ subsys_mask=$subsys_mask+16
+ fi
+ ;;
+ "external_modem")
+ ssr_name=external_modem
+ if ( ssr_check_subsystem_name ); then
+ subsys_mask=$subsys_mask+32
+ fi
+ ;;
+ esac
+done
+
+# enable selected subsystem restart
+if [ $((subsys_mask & 1)) == 1 ]; then
+ echo 1 > /sys/module/wcnss_ssr_8960/parameters/enable_riva_ssr
+else
+ echo 0 > /sys/module/wcnss_ssr_8960/parameters/enable_riva_ssr
+fi
+
+if [ $((subsys_mask & 2)) == 2 ]; then
+ echo "related" > /sys/bus/msm_subsys/devices/subsys0/restart_level
+else
+ echo "system" > /sys/bus/msm_subsys/devices/subsys0/restart_level
+fi
+
+if [ $((subsys_mask & 4)) == 4 ]; then
+ echo "related" > /sys/bus/msm_subsys/devices/subsys1/restart_level
+else
+ echo "system" > /sys/bus/msm_subsys/devices/subsys1/restart_level
+fi
+
+if [ $((subsys_mask & 8)) == 8 ]; then
+ echo "related" > /sys/bus/msm_subsys/devices/subsys2/restart_level
+else
+ echo "system" > /sys/bus/msm_subsys/devices/subsys2/restart_level
+fi
+
+if [ $((subsys_mask & 16)) == 16 ]; then
+ echo "related" > /sys/bus/msm_subsys/devices/subsys3/restart_level
+else
+ echo "system" > /sys/bus/msm_subsys/devices/subsys3/restart_level
+fi
+
+if [ $((subsys_mask & 32)) == 32 ]; then
+ echo "related" > /sys/bus/msm_subsys/devices/subsys4/restart_level
+else
+ echo "system" > /sys/bus/msm_subsys/devices/subsys4/restart_level
+fi
+
+if [ $((subsys_mask & 63)) == 63 ]; then
+ echo 3 > /sys/module/subsystem_restart/parameters/restart_level
+else
+ echo 1 > /sys/module/subsystem_restart/parameters/restart_level
+fi
diff --git a/recovery/init.qcom.syspart_fixup.sh b/recovery/init.qcom.syspart_fixup.sh
new file mode 100755
index 0000000..661b635
--- /dev/null
+++ b/recovery/init.qcom.syspart_fixup.sh
@@ -0,0 +1,79 @@
+#!/system/bin/sh
+# Copyright (c) 2012, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of The Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+target="$1"
+serial="$2"
+
+# No path is set up at this point so we have to do it here.
+PATH=/sbin:/system/sbin:/system/bin:/system/xbin
+export PATH
+
+mount_needed=false;
+
+if [ ! -f /system/etc/boot_fixup ];then
+# This should be the first command
+# remount system as read-write.
+ mount -o rw,remount,barrier=1 /system
+ mount_needed=true;
+fi
+
+# **** WARNING *****
+# This runs in a single-threaded, critical path portion
+# of the Android bootup sequence. This is to guarantee
+# all necessary system partition fixups are done before
+# the rest of the system starts up. Run any non-
+# timing critical tasks in a separate process to
+# prevent slowdown at boot.
+
+# Run modem link script
+if [ -f /system/etc/init.qcom.modem_links.sh ]; then
+ /system/bin/sh /system/etc/init.qcom.modem_links.sh
+fi
+
+# Run mdm link script
+if [ -f /system/etc/init.qcom.mdm_links.sh ]; then
+ /system/bin/sh /system/etc/init.qcom.mdm_links.sh
+fi
+
+# Run wifi script
+if [ -f /system/etc/init.qcom.wifi.sh ]; then
+ /system/bin/sh /system/etc/init.qcom.wifi.sh "$target" "$serial"
+fi
+
+# Run the sensor script
+if [ -f /system/etc/init.qcom.sensor.sh ]; then
+ /system/bin/sh /system/etc/init.qcom.sensor.sh
+fi
+
+touch /system/etc/boot_fixup
+
+if $mount_needed ;then
+# This should be the last command
+# remount system as read-only.
+ mount -o ro,remount,barrier=1 /system
+fi
diff --git a/recovery/init.qcom.usb.sh b/recovery/init.qcom.usb.sh
new file mode 100755
index 0000000..1f02257
--- /dev/null
+++ b/recovery/init.qcom.usb.sh
@@ -0,0 +1,226 @@
+#!/system/bin/sh
+# Copyright (c) 2012, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of The Linux Foundation nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+#
+chown -h root.system /sys/devices/platform/msm_hsusb/gadget/wakeup
+chmod -h 220 /sys/devices/platform/msm_hsusb/gadget/wakeup
+
+#
+# Allow persistent usb charging disabling
+# User needs to set usb charging disabled in persist.usb.chgdisabled
+#
+target=`getprop ro.board.platform`
+usbchgdisabled=`getprop persist.usb.chgdisabled`
+case "$usbchgdisabled" in
+ "") ;; #Do nothing here
+ * )
+ case $target in
+ "msm8660")
+ echo "$usbchgdisabled" > /sys/module/pmic8058_charger/parameters/disabled
+ echo "$usbchgdisabled" > /sys/module/smb137b/parameters/disabled
+ ;;
+ "msm8960")
+ echo "$usbchgdisabled" > /sys/module/pm8921_charger/parameters/disabled
+ ;;
+ esac
+esac
+
+usbcurrentlimit=`getprop persist.usb.currentlimit`
+case "$usbcurrentlimit" in
+ "") ;; #Do nothing here
+ * )
+ case $target in
+ "msm8960")
+ echo "$usbcurrentlimit" > /sys/module/pm8921_charger/parameters/usb_max_current
+ ;;
+ esac
+esac
+
+#
+# Check ESOC for external MDM
+#
+# Note: currently only a single MDM is supported
+#
+if [ -d /sys/bus/esoc/devices ]; then
+for f in /sys/bus/esoc/devices/*; do
+ if [ -d $f ]; then
+ esoc_name=`cat $f/esoc_name`
+ if [ "$esoc_name" = "MDM9x25" -o "$esoc_name" = "MDM9x35" ]; then
+ esoc_link=`cat $f/esoc_link`
+ break
+ fi
+ fi
+done
+fi
+
+target=`getprop ro.product.device`
+target=${target:0:7}
+
+#
+# Allow USB enumeration with default PID/VID
+#
+baseband=`getprop ro.baseband`
+echo 1 > /sys/class/android_usb/f_mass_storage/lun/nofua
+usb_config=`getprop persist.sys.usb.config`
+case "$usb_config" in
+ "" | "adb") #USB persist config not set, select default configuration
+ case "$esoc_link" in
+ "HSIC")
+ setprop persist.sys.usb.config diag,diag_mdm,serial_hsic,serial_tty,rmnet_hsic,mass_storage,adb
+ setprop persist.rmnet.mux enabled
+ ;;
+ "HSIC+PCIe")
+ setprop persist.sys.usb.config diag,diag_mdm,serial_hsic,rmnet_qti_ether,mass_storage,adb
+ ;;
+ "PCIe")
+ setprop persist.sys.usb.config diag,diag_mdm,serial_tty,rmnet_qti_ether,mass_storage,adb
+ ;;
+ *)
+ case "$baseband" in
+ "mdm")
+ setprop persist.sys.usb.config diag,diag_mdm,serial_hsic,serial_tty,rmnet_hsic,mass_storage,adb
+ ;;
+ "mdm2")
+ setprop persist.sys.usb.config diag,diag_mdm,serial_hsic,serial_tty,rmnet_hsic,mass_storage,adb
+ ;;
+ "sglte")
+ setprop persist.sys.usb.config diag,diag_qsc,serial_smd,serial_tty,serial_hsuart,rmnet_hsuart,mass_storage,adb
+ ;;
+ "dsda" | "sglte2")
+ setprop persist.sys.usb.config diag,diag_mdm,diag_qsc,serial_hsic,serial_hsuart,rmnet_hsic,rmnet_hsuart,mass_storage,adb
+ ;;
+ "dsda2")
+ setprop persist.sys.usb.config diag,diag_mdm,diag_mdm2,serial_hsic,serial_hsusb,rmnet_hsic,rmnet_hsusb,mass_storage,adb
+ ;;
+ *)
+ case "$target" in
+ "msm8916" | "msm8939")
+ #setprop persist.sys.usb.config diag,serial_smd,rmnet_bam,adb
+ setprop persist.sys.usb.config mtp,adb
+ ;;
+ *)
+ setprop persist.sys.usb.config diag,serial_smd,serial_tty,rmnet_bam,mass_storage,adb
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ * ) ;; #USB persist config exists, do nothing
+esac
+
+#
+# Do target specific things
+#
+case "$target" in
+ "msm8974")
+# Select USB BAM - 2.0 or 3.0
+ echo ssusb > /sys/bus/platform/devices/usb_bam/enable
+ ;;
+ "apq8084")
+ if [ "$baseband" == "apq" ]; then
+ echo "msm_hsic_host" > /sys/bus/platform/drivers/xhci_msm_hsic/unbind
+ fi
+ ;;
+ "msm8226")
+ if [ -e /sys/bus/platform/drivers/msm_hsic_host ]; then
+ if [ ! -L /sys/bus/usb/devices/1-1 ]; then
+ echo msm_hsic_host > /sys/bus/platform/drivers/msm_hsic_host/unbind
+ fi
+ fi
+ ;;
+esac
+
+#
+# set module params for embedded rmnet devices
+#
+rmnetmux=`getprop persist.rmnet.mux`
+case "$baseband" in
+ "mdm" | "dsda" | "sglte2")
+ case "$rmnetmux" in
+ "enabled")
+ echo 1 > /sys/module/rmnet_usb/parameters/mux_enabled
+ echo 8 > /sys/module/rmnet_usb/parameters/no_fwd_rmnet_links
+ echo 17 > /sys/module/rmnet_usb/parameters/no_rmnet_insts_per_dev
+ ;;
+ esac
+ echo 1 > /sys/module/rmnet_usb/parameters/rmnet_data_init
+ # Allow QMUX daemon to assign port open wait time
+ chown -h radio.radio /sys/devices/virtual/hsicctl/hsicctl0/modem_wait
+ ;;
+ "dsda2")
+ echo 2 > /sys/module/rmnet_usb/parameters/no_rmnet_devs
+ echo hsicctl,hsusbctl > /sys/module/rmnet_usb/parameters/rmnet_dev_names
+ case "$rmnetmux" in
+ "enabled") #mux is neabled on both mdms
+ echo 3 > /sys/module/rmnet_usb/parameters/mux_enabled
+ echo 8 > /sys/module/rmnet_usb/parameters/no_fwd_rmnet_links
+ echo 17 > write /sys/module/rmnet_usb/parameters/no_rmnet_insts_per_dev
+ ;;
+ "enabled_hsic") #mux is enabled on hsic mdm
+ echo 1 > /sys/module/rmnet_usb/parameters/mux_enabled
+ echo 8 > /sys/module/rmnet_usb/parameters/no_fwd_rmnet_links
+ echo 17 > /sys/module/rmnet_usb/parameters/no_rmnet_insts_per_dev
+ ;;
+ "enabled_hsusb") #mux is enabled on hsusb mdm
+ echo 2 > /sys/module/rmnet_usb/parameters/mux_enabled
+ echo 8 > /sys/module/rmnet_usb/parameters/no_fwd_rmnet_links
+ echo 17 > /sys/module/rmnet_usb/parameters/no_rmnet_insts_per_dev
+ ;;
+ esac
+ echo 1 > /sys/module/rmnet_usb/parameters/rmnet_data_init
+ # Allow QMUX daemon to assign port open wait time
+ chown -h radio.radio /sys/devices/virtual/hsicctl/hsicctl0/modem_wait
+ ;;
+esac
+
+#
+# Add support for exposing lun0 as cdrom in mass-storage
+#
+cdromname="/system/etc/cdrom_install.iso"
+platformver=`cat /sys/devices/soc0/hw_platform`
+case "$target" in
+ "msm8226" | "msm8610" | "msm8916")
+ case $platformver in
+ "QRD")
+ echo "mounting usbcdrom lun"
+ echo $cdromname > /sys/class/android_usb/android0/f_mass_storage/rom/file
+ chmod 0444 /sys/class/android_usb/android0/f_mass_storage/rom/file
+ ;;
+ esac
+ ;;
+esac
+
+#
+# Initialize RNDIS Diag option. If unset, set it to 'none'.
+#
+diag_extra=`getprop persist.sys.usb.config.extra`
+if [ "$diag_extra" == "" ]; then
+ setprop persist.sys.usb.config.extra none
+fi
diff --git a/recovery/init.rc b/recovery/init.rc
new file mode 100755
index 0000000..275d250
--- /dev/null
+++ b/recovery/init.rc
@@ -0,0 +1,157 @@
+import /init.recovery.${ro.hardware}.rc
+
+on early-init
+ # Apply strict SELinux checking of PROT_EXEC on mmap/mprotect calls.
+ write /sys/fs/selinux/checkreqprot 0
+
+ # Set the security context for the init process.
+ # This should occur before anything else (e.g. ueventd) is started.
+ setcon u:r:init:s0
+
+ start ueventd
+ start healthd
+
+service set_permissive /sbin/toolbox setenforce 0
+ oneshot
+ seclabel u:r:recovery:s0
+
+on init
+ export PATH /sbin:/system/bin
+ export LD_LIBRARY_PATH .:/sbin
+ export ANDROID_ROOT /system
+ export ANDROID_DATA /data
+ export EXTERNAL_STORAGE /sdcard
+
+ symlink /system/etc /etc
+
+ mkdir /boot
+ mkdir /recovery
+ mkdir /sdcard
+ mkdir /sdcard1
+ mkdir /external_sd
+ mkdir /.system
+ mkdir /system
+ mkdir /data
+ mkdir /cache
+ mkdir /sideload
+ mkdir /preload
+ mkdir /custom
+ mkdir /efs
+ mkdir /tmp
+ mkdir /carrier
+ mkdir /firmware 0711 system system
+ mount tmpfs tmpfs /tmp
+
+ chown root shell /tmp
+ chmod 0775 /tmp
+
+ write /proc/sys/kernel/panic_on_oops 1
+ write /proc/sys/vm/max_map_count 1000000
+
+on fs
+ mount pstore pstore /sys/fs/pstore
+
+ mkdir /dev/usb-ffs 0770 shell shell
+ mkdir /dev/usb-ffs/adb 0770 shell shell
+ mount functionfs adb /dev/usb-ffs/adb uid=2000,gid=2000
+
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 04e8
+ write /sys/class/android_usb/android0/idProduct 6860
+ write /sys/class/android_usb/android0/f_ffs/aliases adb
+ write /sys/class/android_usb/android0/functions mtp,adb
+ write /sys/class/android_usb/android0/iManufacturer ${ro.product.manufacturer}
+ write /sys/class/android_usb/android0/iProduct ${ro.product.model}
+ write /sys/class/android_usb/android0/iSerial ${ro.serialno}
+
+on boot
+ ifup lo
+ hostname localhost
+ domainname localdomain
+
+ class_start default
+
+# Load properties from /system/ + /factory after fs mount.
+on load_all_props_action
+ load_all_props
+
+on firmware_mounts_complete
+ rm /dev/.booting
+
+# Mount filesystems and start core system services.
+on late-init
+ trigger early-fs
+ trigger fs
+ trigger post-fs
+ trigger post-fs-data
+
+ # Load properties from /system/ + /factory after fs mount. Place
+ # this in another action so that the load will be scheduled after the prior
+ # issued fs triggers have completed.
+ trigger load_all_props_action
+
+ # Remove a file to wake up anything waiting for firmware
+ trigger firmware_mounts_complete
+
+ trigger early-boot
+ trigger boot
+
+on property:sys.powerctl=*
+ powerctl ${sys.powerctl}
+
+on property:sys.storage.ums_enabled=1
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/functions adb,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+
+on property:sys.storage.ums_enabled=0
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/functions ${sys.usb.config}
+ write /sys/class/android_usb/android0/enable ${service.adb.root}
+
+on property:sys.usb.config=none
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/bDeviceClass 0
+
+on property:sys.usb.config=mtp,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/functions mtp,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+
+on property:sys.usb.config=adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/functions adb
+ write /sys/class/android_usb/android0/enable ${service.adb.root}
+ start adbd
+
+service ueventd /sbin/ueventd
+ critical
+ seclabel u:r:ueventd:s0
+
+service healthd /sbin/healthd -n
+ critical
+ seclabel u:r:healthd:s0
+
+service recovery /sbin/recovery
+ seclabel u:r:recovery:s0
+
+service adbd /sbin/adbd --root_seclabel=u:r:su:s0 --device_banner=recovery
+ disabled
+ socket adbd stream 660 system system
+ seclabel u:r:adbd:s0
+
+# Always start adbd on userdebug and eng builds
+on property:ro.debuggable=1
+ #write /sys/class/android_usb/android0/enable 1
+ #start adbd
+ setprop service.adb.root 1
+
+# Restart adbd so it can run as root
+on property:service.adb.root=1
+ write /sys/class/android_usb/android0/enable 0
+ restart adbd
+ write /sys/class/android_usb/android0/enable 1
diff --git a/recovery/publiccert.pem b/recovery/publiccert.pem
new file mode 100644
index 0000000..f5a4a51
--- /dev/null
+++ b/recovery/publiccert.pem
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIELTCCAxWgAwIBAgIJANEwmqM2Fs8EMA0GCSqGSIb3DQEBBQUAMGwxCzAJBgNV
+BAYTAktSMRQwEgYDVQQIEwtTb3V0aCBLb3JlYTEOMAwGA1UEBxMFU3V3b24xJjAk
+BgNVBAoTHVNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuMQ8wDQYDVQQLEwZN
+b2JpbGUwHhcNMTMxMjE2MDg1MDI4WhcNMjMxMjE0MDg1MDI4WjBsMQswCQYDVQQG
+EwJLUjEUMBIGA1UECBMLU291dGggS29yZWExDjAMBgNVBAcTBVN1d29uMSYwJAYD
+VQQKEx1TYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLjEPMA0GA1UECxMGTW9i
+aWxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArjoOavjEbusT83Dv
+LvsSVrq4y9HhUmZYnVX5VaOgsp7qUM5ntD9zSxR5JQ9QWCbCKh5RDy+ewnXmFcAV
+L2MW5zxn6eI58e5e1Uonx9SnaID5JQHOhKImzH5/1qqVjs467nTTVpkXZOzrzLhs
+EOau34Q/AlZ5QO0gh0TDr7YYHbry7Ie+gYePA/9gcB5UzbLQPz2oNGQPlB9e4KSw
+4XNXu8BfguRltQbkJkm8/BD93vKN7MIbsxIYCzIIBjv/J79ho4NQqzpky9PFzCt/
+KL1Ts7DsoQ6r3GeDgebc1ques18UXUZ1wenHy5k4ruCl6ZJ7QaxzHyEta/RT+VOC
+j3IuwwIDAQABo4HRMIHOMB0GA1UdDgQWBBQp+BW4OYblL74MNaxtLPuKS1Ky4DCB
+ngYDVR0jBIGWMIGTgBQp+BW4OYblL74MNaxtLPuKS1Ky4KFwpG4wbDELMAkGA1UE
+BhMCS1IxFDASBgNVBAgTC1NvdXRoIEtvcmVhMQ4wDAYDVQQHEwVTdXdvbjEmMCQG
+A1UEChMdU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4xDzANBgNVBAsTBk1v
+YmlsZYIJANEwmqM2Fs8EMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB
+AEKg+91c2q1OKoP89QAQCKlLXKQNaaGQisMLISeBAkfF8npSPmftDSu9IPMTR9ZG
+2AwCgH1SoI4cBqKJviU1M41IHTC3qJXRAv52Mjfv47AbkVyzLvE5YL/9R9zY+ER/
+4KFvye4EvsybB9l0B8eoF/Pk4olX2KrhqkP8EtcDr47VI+FloeHGFef9DSvUz3Np
+MQMp4jdNBUZ57mXwKRl1pMgz3f+Cgwi9zWmK9/lf+w0OXKBXxB+vhGMpg/7Y/Ohj
+B4OHj7fOFedOEZlSmois41gknKgxyzvd1Xig7QcpIYUgH9FMPZxzhgMElY6zOroC
+SYgfWsLmjJM+Q9nMhCMaJf0=
+-----END CERTIFICATE-----
diff --git a/recovery/twrp.fstab b/recovery/twrp.fstab
new file mode 100644
index 0000000..322eb98
--- /dev/null
+++ b/recovery/twrp.fstab
@@ -0,0 +1,45 @@
+/boot emmc /dev/block/bootdevice/by-name/boot
+/recovery emmc /dev/block/bootdevice/by-name/recovery
+/data ext4 /dev/block/bootdevice/by-name/userdata length=-16384
+/cache ext4 /dev/block/bootdevice/by-name/cache
+/system ext4 /dev/block/bootdevice/by-name/system
+/efs1 emmc /dev/block/bootdevice/by-name/efs flags=backup=1;display=EFS
+/efs2 emmc /dev/block/bootdevice/by-name/modemst1 flags=backup=1;subpartitionof=/efs1
+/efs3 emmc /dev/block/bootdevice/by-name/modemst2 flags=backup=1;subpartitionof=/efs1
+/external_sd vfat /dev/block/mmcblk1p1 /dev/block/mmcblk1 flags=display="Micro SDcard";storage;wipeingui;removable
+/modem emmc /dev/block/bootdevice/by-name/apnhlos display="apnhlos"
+/mdm emmc /dev/block/bootdevice/by-name/modem display="modem"
+#/usb-otg vfat /dev/block/sda1 /dev/block/sda flags=display="USB-OTG";storage;wipeingui;removable
+
+#apnhlos emmc /dev/block/mmcblk0p1
+#modem emmc /dev/block/mmcblk0p2
+#sbl1 emmc /dev/block/mmcblk0p3
+#ddr emmc /dev/block/mmcblk0p4
+#aboot emmc /dev/block/mmcblk0p5
+#rpm emmc /dev/block/mmcblk0p6
+#qsee emmc /dev/block/mmcblk0p7
+#qhee emmc /dev/block/mmcblk0p8
+#fsg emmc /dev/block/mmcblk0p9
+#sec emmc /dev/block/mmcblk0p10
+#pad emmc /dev/block/mmcblk0p11
+
+#/efs ext4 /dev/block/mmcblk0p13
+#param emmc /dev/block/mmcblk0p12
+#modemst1 emmc /dev/block/mmcblk0p14
+#modemst2 emmc /dev/block/mmcblk0p15
+#/boot emmc /dev/block/mmcblk0p16
+#/recovery emmc /dev/block/mmcblk0p17
+#fota emmc /dev/block/mmcblk0p18
+#backup emmc /dev/block/mmcblk0p19
+#fsc emmc /dev/block/mmcblk0p20
+#ssd emmc /dev/block/mmcblk0p21
+#persist ext4 /dev/block/mmcblk0p22
+#persdata ext4 /dev/block/mmcblk0p23
+#/system ext4 /dev/block/mmcblk0p24
+#/cache ext4 /dev/block/mmcblk0p25
+#hidden emmc /dev/block/mmcblk0p26
+#/userdata ext4 /dev/block/mmcblk0p27
+
+#/external_sd auto /dev/block/mmcblk1p1 /dev/block/mmcblk1 flags=display="MicroSD card";storage;wipeingui;removable
+#/sd-ext auto /dev/block/mmcblk1p2 flags=display="Second partition";storage;wipeingui;removable
+#/usb-otg auto /dev/block/sda1 /dev/block/sda flags=display="USB OTG";storage;wipeingui;removable
diff --git a/recovery/ueventd.qcom.rc b/recovery/ueventd.qcom.rc
new file mode 100644
index 0000000..763f115
--- /dev/null
+++ b/recovery/ueventd.qcom.rc
@@ -0,0 +1,204 @@
+# Copyright (c) 2012-2014, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of The Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+# the DIAG device node is not world writable/readable.
+/dev/diag 0660 system qcom_diag
+
+/dev/genlock 0666 system system
+/dev/kgsl 0666 system system
+/dev/kgsl-3d0 0666 system system
+/dev/kgsl-2d0 0666 root root
+/dev/kgsl-2d1 0666 root root
+/dev/ion 0664 system system
+/dev/rtc0 0600 system system
+/dev/smd0 0660 system system
+/dev/smd4 0660 system system
+/dev/smd_cxm_qmi 0640 radio radio
+/dev/smd5 0660 system system
+/dev/smd6 0660 system system
+/dev/smd7 0660 bluetooth bluetooth
+/dev/ccid_bridge 0660 system system
+
+#permissions for CSVT
+/dev/smd11 0660 radio radio
+
+/dev/radio0 0640 system fm_radio
+/dev/rfcomm0 0660 bluetooth bluetooth
+/dev/ttyUSB0 0660 bluetooth bluetooth
+/dev/smdcntl0 0640 radio radio
+/dev/smdcntl1 0640 radio radio
+/dev/smdcntl2 0640 radio radio
+/dev/smdcntl3 0640 radio radio
+/dev/smdcntl4 0640 radio radio
+/dev/smdcntl5 0640 radio radio
+/dev/smdcntl6 0640 radio radio
+/dev/smdcntl7 0640 radio radio
+/dev/smdcnt_rev0 0640 radio radio
+/dev/smdcnt_rev1 0640 radio radio
+/dev/smdcnt_rev2 0640 radio radio
+/dev/smdcnt_rev3 0640 radio radio
+/dev/smdcnt_rev4 0640 radio radio
+/dev/smdcnt_rev5 0640 radio radio
+/dev/smdcnt_rev6 0640 radio radio
+/dev/smdcnt_rev7 0640 radio radio
+/dev/smdcnt_rev8 0640 radio radio
+/dev/smuxctl32 0640 radio radio
+/dev/sdioctl0 0640 radio radio
+/dev/sdioctl1 0640 radio radio
+/dev/sdioctl2 0640 radio radio
+/dev/sdioctl3 0640 radio radio
+/dev/sdioctl4 0640 radio radio
+/dev/sdioctl5 0640 radio radio
+/dev/sdioctl6 0640 radio radio
+/dev/sdioctl7 0640 radio radio
+/dev/sdioctl8 0640 radio radio
+/dev/rmnet_mux_ctrl 0640 radio radio
+/dev/hsicctl0 0640 radio radio
+/dev/hsicctl1 0640 radio radio
+/dev/hsicctl2 0640 radio radio
+/dev/hsicctl3 0640 radio radio
+/dev/hsicctl4 0640 radio radio
+/dev/hsicctl5 0640 radio radio
+/dev/hsicctl6 0640 radio radio
+/dev/hsicctl7 0640 radio radio
+/dev/hsicctl8 0640 radio radio
+/dev/hsicctl9 0640 radio radio
+/dev/hsicctl10 0640 radio radio
+/dev/hsicctl11 0640 radio radio
+/dev/hsicctl12 0640 radio radio
+/dev/hsicctl13 0640 radio radio
+/dev/hsicctl14 0640 radio radio
+/dev/hsicctl15 0640 radio radio
+/dev/hsicctl16 0640 radio radio
+/dev/mhi_pipe_14 0640 radio radio
+/dev/mhi_pipe_16 0640 radio radio
+/dev/mhi_pipe_32 0640 radio radio
+/dev/video* 0660 system camera
+/dev/media* 0660 system camera
+/dev/v4l-subdev* 0660 system camera
+/dev/qseecom 0660 system drmrpc
+/dev/gemini0 0660 system camera
+/dev/jpeg0 0660 system camera
+/dev/jpeg1 0660 system camera
+/dev/jpeg2 0660 system camera
+/dev/adsprpc-smd 0664 system system
+/dev/msm_camera/* 0660 system camera
+/dev/gemini/ 0660 system camera
+/dev/mercury0 0660 system camera
+/dev/msm_vidc_reg 0660 system audio
+/dev/msm_vidc_dec 0660 system audio
+/dev/msm_vidc_dec_sec 0660 system audio
+/dev/msm_vidc_enc 0660 system audio
+/dev/msm_rotator 0660 system system
+/dev/hw_random 0600 root root
+/dev/adsprpc-smd 0664 system system
+
+#permissions for audio
+/dev/audio_slimslave 0660 system audio
+/dev/msm_qcelp 0660 system audio
+/dev/msm_evrc 0660 system audio
+/dev/msm_wma 0660 system audio
+/dev/msm_wmapro 0660 system audio
+/dev/msm_amrnb 0660 system audio
+/dev/msm_amrwb 0660 system audio
+/dev/msm_amrwbplus 0660 system audio
+/dev/msm_aac 0660 system audio
+/dev/msm_multi_aac 0660 system audio
+/dev/msm_aac_in 0660 system audio
+/dev/msm_qcelp_in 0660 system audio
+/dev/msm_evrc_in 0660 system audio
+/dev/msm_amrnb_in 0640 system audio
+/dev/msm_a2dp_in 0660 system audio
+/dev/msm_ac3 0660 system audio
+/dev/msm_acdb 0660 system audio
+/dev/msm_cad 0660 system audio
+/dev/msm_fm 0660 system audio
+/dev/msm_mvs 0660 system audio
+/dev/msm_pcm_lp_dec 0660 system audio
+/dev/msm_preproc_ctl 0660 system audio
+/dev/msm_rtac 0660 system audio
+/dev/msm_voicememo 0660 system audio
+/dev/radio0 0640 system fm_radio
+/dev/smd3 0660 bluetooth net_bt_stack
+/dev/smd2 0660 bluetooth net_bt_stack
+/dev/ttyHSL1 0660 system system
+/dev/ttyHS1 0660 system system
+/dev/mdm 0660 system radio
+/sys/devices/virtual/smdpkt/smdcntl* open_timeout 0664 radio radio
+/dev/sdio_tty_ciq_00 0660 system system
+/dev/tty_sdio_00 0660 system system
+/dev/ttyGS0 0660 system system
+/dev/i2c-5 0660 media media
+/dev/voice_svc 0660 system audio
+
+# DVB devices
+/dev/dvb/adapter0/demux* 0440 media media
+/dev/dvb/adapter0/dvr* 0660 media media
+/dev/dvb/adapter0/video* 0660 media media
+
+# Broadcast devices
+/dev/tsc_mux0 0660 media media
+/dev/tsc_ci0 0660 media media
+
+# sensors
+/sys/devices/i2c-12/12-* pollrate_ms 0664 system system
+/sys/devices/f9925000.i2c/i2c-0/0-* enable 0660 input system
+/sys/devices/f9925000.i2c/i2c-0/0-* poll_delay 0660 input system
+/sys/devices/soc.0/78b6000.i2c/i2c-0/0-* enable 0660 input system
+/sys/devices/soc.0/78b6000.i2c/i2c-0/0-* poll_delay 0660 input system
+/sys/devices/virtual/optical_sensors/proximity ps_adc 0660 input system
+/sys/devices/virtual/optical_sensors/proximity ps_poll_delay 0660 input system
+/sys/devices/virtual/optical_sensors/lightsensor ls_auto 0660 input system
+/sys/devices/virtual/optical_sensors/lightsensor ls_poll_delay 0660 input system
+/sys/devices/virtual/input/input* poll 0660 input system
+/sys/devices/virtual/input/input* pollrate_ms 0660 input system
+
+# vm_bms
+/dev/vm_bms 0660 system system
+/dev/battery_data 0660 system system
+
+# wlan
+/dev/wcnss_wlan 0660 system system
+/dev/wcnss_ctrl 0660 system system
+#nfc permissions
+/dev/nfc-nci 0660 nfc nfc
+/dev/assd 0660 nfc nfc
+
+# UIO devices
+/dev/uio0 0660 system system
+/dev/uio1 0660 system system
+/dev/uio2 0660 system system
+
+# ESOC devices
+/dev/subsys_esoc* 0640 system radio
+
+# Ramdump devices
+/dev/ramdump* 0640 system system
+
+#latin Mobile TV
+/dev/isdbt 0660 system system
+
diff --git a/rootdir/Android.mk b/rootdir/Android.mk
new file mode 100644
index 0000000..c99d51e
--- /dev/null
+++ b/rootdir/Android.mk
@@ -0,0 +1,164 @@
+LOCAL_PATH := $(call my-dir)
+
+######################
+### fstab.qcom
+include $(CLEAR_VARS)
+LOCAL_MODULE := fstab.qcom
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/$(LOCAL_MODULE)
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+######################
+### init.rc
+# Only copy init.rc if the target have its own.
+ifeq ($(TARGET_PROVIDES_INIT_RC),true)
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.rc
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/$(LOCAL_MODULE)
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+endif
+
+######################
+### init.carrier.rc
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.carrier.rc
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/$(LOCAL_MODULE)
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+######################
+### init.class_main.sh
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.class_main.sh
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/$(LOCAL_MODULE)
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+######################
+### init.mdm.sh
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.mdm.sh
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/$(LOCAL_MODULE)
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+######################
+### init.qcom.bms.sh
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.qcom.bms.sh
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/$(LOCAL_MODULE)
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+######################
+### init.qcom.class_core.sh
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.qcom.class_core.sh
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/$(LOCAL_MODULE)
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+######################
+### init.qcom.early_boot.sh
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.qcom.early_boot.sh
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/$(LOCAL_MODULE)
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+######################
+### init.qcom.factory.sh
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.qcom.factory.sh
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/$(LOCAL_MODULE)
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+######################
+### init.qcom.syspart_fixup.sh
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.qcom.syspart_fixup.sh
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/$(LOCAL_MODULE)
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+######################
+### init.qcom.usb.rc
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.qcom.usb.rc
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/$(LOCAL_MODULE)
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+######################
+### init.qcom.usb.sh
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.qcom.usb.sh
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/$(LOCAL_MODULE)
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+######################
+### init.qcom.rc
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.qcom.rc
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/$(LOCAL_MODULE)
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+######################
+### init.qcom.sh
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.qcom.sh
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/$(LOCAL_MODULE)
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+######################
+### init.target.rc
+include $(CLEAR_VARS)
+LOCAL_MODULE := init.target.rc
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/$(LOCAL_MODULE)
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
+
+######################
+### ueventd.qcom.rc
+include $(CLEAR_VARS)
+LOCAL_MODULE := ueventd.qcom.rc
+LOCAL_MODULE_TAGS := optional eng
+LOCAL_MODULE_CLASS := ETC
+LOCAL_SRC_FILES := etc/$(LOCAL_MODULE)
+LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
+include $(BUILD_PREBUILT)
\ No newline at end of file
diff --git a/rootdir/etc/fstab.qcom b/rootdir/etc/fstab.qcom
new file mode 100644
index 0000000..e5e2425
--- /dev/null
+++ b/rootdir/etc/fstab.qcom
@@ -0,0 +1,17 @@
+# Android fstab file.
+# The filesystem that contains the filesystem checker binary (typically /system) cannot
+# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
+
+/dev/block/bootdevice/by-name/system /system ext4 ro,barrier=1,discard wait
+/dev/block/bootdevice/by-name/userdata /data ext4 noatime,nosuid,nodev,barrier=1,noauto_da_alloc wait,check,encryptable=footer
+/dev/block/bootdevice/by-name/cache /cache ext4 noatime,nosuid,nodev,barrier=1,noauto_da_alloc wait,check
+/dev/block/bootdevice/by-name/persist /persist ext4 noatime,nosuid,nodev,barrier=1,noauto_da_alloc wait
+/dev/block/bootdevice/by-name/boot /boot emmc defaults defaults
+/dev/block/bootdevice/by-name/recovery /recovery emmc defaults defaults
+/dev/block/bootdevice/by-name/misc /misc emmc defaults defaults
+/dev/block/bootdevice/by-name/modem /firmware-modem vfat ro,shortname=lower,uid=1000,gid=1000,dmask=227,fmask=337 wait
+/dev/block/bootdevice/by-name/apnhlos /firmware vfat ro,shortname=lower,uid=1000,gid=1000,dmask=227,fmask=337 wait
+
+/devices/soc.0/7864900.sdhci/mmc_host/mmc* /storage/sdcard1 vfat nosuid,node wait,voldmanaged=sdcard1:auto,noemulatedsd
+/devices/platform/msm_hsusb /storage/usbdisk auto nosuid,nodev wait,voldmanaged=usbdisk:auto
+/dev/block/zram0 none swap defaults zramsize=536870912
diff --git a/rootdir/etc/init.carrier.rc b/rootdir/etc/init.carrier.rc
new file mode 100644
index 0000000..3c9f7ff
--- /dev/null
+++ b/rootdir/etc/init.carrier.rc
@@ -0,0 +1,93 @@
+# Copyright (C) 2012 The Android Open Source Project
+#
+# IMPORTANT: Do not create world writable files or directories.
+# This is a common source of Android security bugs.
+#
+
+on early-boot
+ chown bluetooth net_bt_stack /dev/ttyHS0
+ chmod 0660 /dev/ttyHS0
+
+on boot
+# permissions for bluetooth.
+ setprop ro.bt.bdaddr_path "/efs/bluetooth/bt_addr"
+ chown bluetooth net_bt_stack ro.bt.bdaddr_path
+ chown radio net_bt_stack /efs/bluetooth/bt_addr
+ chmod 0644 /efs/bluetooth/bt_addr
+ chmod 0660 /sys/class/rfkill/rfkill0/state
+ chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/state
+ chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/type
+
+on fs
+
+# Support Preload install apks
+ mkdir /preload 0771 system system
+
+# efs
+ mkdir /efs/drm 0700 system system
+ mkdir /efs/imei 0775 radio radio
+ restorecon -R /efs
+
+#For Absolute Persistence Partition
+
+ mkdir /persdata 0755 system system
+ mkdir /persdata/absolute 0750 system system
+
+ wait /dev/block/bootdevice/by-name/persdata
+ check_fs /dev/block/bootdevice/by-name/persdata ext4
+ mount ext4 /dev/block/bootdevice/by-name/persdata /persdata/absolute nosuid nodev barrier=1
+
+ chown system system /persdata
+ chmod 0755 /persdata
+ chown system system /persdata/absolute
+ chmod 0750 /persdata/absolute
+
+# Permissions for svc led
+ chown system system /sys/class/sec/led/led_r
+ chown system system /sys/class/sec/led/led_g
+ chown system system /sys/class/sec/led/led_b
+ chown system system /sys/class/sec/led/led_pattern
+ chown system system /sys/class/sec/led/led_blink
+ chown system system /sys/class/sec/led/led_lowpower
+
+# permissons for uartsel & usbsel sysfs
+ chmod 0660 /sys/class/sec/switch/uart_en
+ chmod 0660 /sys/class/sec/switch/uart_sel
+ chmod 0660 /sys/class/sec/switch/usb_sel
+ chown system system /sys/class/sec/switch/uart_en
+ chown system system /sys/class/sec/switch/uart_sel
+ chown system system /sys/class/sec/switch/usb_sel
+
+# RIL for multi rild
+on property:ro.multisim.simslotcount=2
+service ril-daemon2 /system/bin/rild -l /system/lib/libsec-ril-dsds.so -c 2
+ class main
+ socket rild2 stream 660 root radio
+ socket rild-debug2 stream 660 radio system
+ user root
+ group radio cache inet misc audio log qcom_diag sdcard_r shell sdcard_rw system drmrpc
+
+# fm_radio
+ chmod 0640 /dev/radio0
+ chown system system /dev/radio0
+
+# Kickstart the Wireless subsystem
+write /dev/wcnss_wlan 1
+write /sys/module/wcnss_ssr_8960/parameters/enable_riva_ssr 1
+service ftm_ptt /system/bin/ftm_ptt -d
+ user root
+ group radio system
+ disabled
+
+# umount service
+service umount_service /system/bin/umount /preload
+ disabled
+ oneshot
+
+# Support Preload install apks
+on property:persist.sys.storage_preload=1
+ mount ext4 /dev/block/bootdevice/by-name/hidden /preload nosuid nodev ro barrier=1
+ setprop storage.preload.complete 1
+
+on property:persist.sys.storage_preload=0
+ start umount_service
diff --git a/rootdir/etc/init.class_main.sh b/rootdir/etc/init.class_main.sh
new file mode 100644
index 0000000..b7d975a
--- /dev/null
+++ b/rootdir/etc/init.class_main.sh
@@ -0,0 +1,98 @@
+#!/system/bin/sh
+# Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of The Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+#
+# start ril-daemon only for targets on which radio is present
+#
+baseband=`getprop ro.baseband`
+sgltecsfb=`getprop persist.radio.sglte_csfb`
+datamode=`getprop persist.data.mode`
+
+case "$baseband" in
+ "apq")
+ setprop ro.radio.noril yes
+ stop ril-daemon
+esac
+
+case "$baseband" in
+ "msm" | "csfb" | "svlte2a" | "mdm" | "mdm2" | "sglte" | "sglte2" | "dsda2" | "unknown" | "dsda3")
+ start qmuxd
+ start ipacm-diag
+ start ipacm
+ case "$baseband" in
+ "svlte2a" | "csfb")
+ start qmiproxy
+ ;;
+ "sglte" | "sglte2" )
+ if [ "x$sgltecsfb" != "xtrue" ]; then
+ start qmiproxy
+ else
+ setprop persist.radio.voice.modem.index 0
+ fi
+ ;;
+ "dsda2")
+ setprop persist.radio.multisim.config dsda
+ esac
+
+ multisim=`getprop persist.radio.multisim.config`
+
+ if [ "$multisim" = "dsds" ] || [ "$multisim" = "dsda" ]; then
+ start ril-daemon2
+ elif [ "$multisim" = "tsts" ]; then
+ start ril-daemon2
+ start ril-daemon3
+ fi
+
+ case "$datamode" in
+ "tethered")
+ start qti
+ start port-bridge
+ ;;
+ "concurrent")
+ start qti
+ start netmgrd
+ ;;
+ *)
+ #< RNTFIX:: Temporary block for data issue
+ # start netmgrd
+ #> RNTFIX
+ ;;
+ esac
+esac
+
+#
+# Allow persistent faking of bms
+# User needs to set fake bms charge in persist.bms.fake_batt_capacity
+#
+fake_batt_capacity=`getprop persist.bms.fake_batt_capacity`
+case "$fake_batt_capacity" in
+ "") ;; #Do nothing here
+ * )
+ echo "$fake_batt_capacity" > /sys/class/power_supply/battery/capacity
+ ;;
+esac
diff --git a/rootdir/etc/init.mdm.sh b/rootdir/etc/init.mdm.sh
new file mode 100644
index 0000000..67e4667
--- /dev/null
+++ b/rootdir/etc/init.mdm.sh
@@ -0,0 +1,33 @@
+#!/system/bin/sh
+# Copyright (c) 2013, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+baseband=`getprop ro.baseband`
+if [ "$baseband" = "mdm" ] || [ "$baseband" = "mdm2" ]; then
+ start mdm_helper
+fi
+
diff --git a/rootdir/etc/init.qcom.bms.sh b/rootdir/etc/init.qcom.bms.sh
new file mode 100644
index 0000000..b849375
--- /dev/null
+++ b/rootdir/etc/init.qcom.bms.sh
@@ -0,0 +1,49 @@
+#!/system/bin/sh
+# Copyright (c) 2009-2015, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of The Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+target=`getprop ro.board.platform`
+
+start_vm_bms()
+{
+ if [ -e /dev/vm_bms ]; then
+ chown -h root.system /sys/class/power_supply/bms/current_now
+ chown -h root.system /sys/class/power_supply/bms/voltage_ocv
+ chmod 0664 /sys/class/power_supply/bms/current_now
+ chmod 0664 /sys/class/power_supply/bms/voltage_ocv
+ start vm_bms
+ fi
+}
+
+case "$target" in
+ "msm8916")
+ start_vm_bms
+ ;;
+ "msm8909")
+ start_vm_bms
+ ;;
+esac
diff --git a/rootdir/etc/init.qcom.class_core.sh b/rootdir/etc/init.qcom.class_core.sh
new file mode 100644
index 0000000..bc89e86
--- /dev/null
+++ b/rootdir/etc/init.qcom.class_core.sh
@@ -0,0 +1,215 @@
+#!/system/bin/sh
+# Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of The Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+# Set platform variables
+target=`getprop ro.board.platform`
+if [ -f /sys/devices/soc0/hw_platform ]; then
+ soc_hwplatform=`cat /sys/devices/soc0/hw_platform` 2> /dev/null
+else
+ soc_hwplatform=`cat /sys/devices/system/soc/soc0/hw_platform` 2> /dev/null
+fi
+if [ -f /sys/devices/soc0/soc_id ]; then
+ soc_hwid=`cat /sys/devices/soc0/soc_id` 2> /dev/null
+else
+ soc_hwid=`cat /sys/devices/system/soc/soc0/id` 2> /dev/null
+fi
+if [ -f /sys/devices/soc0/platform_version ]; then
+ soc_hwver=`cat /sys/devices/soc0/platform_version` 2> /dev/null
+else
+ soc_hwver=`cat /sys/devices/system/soc/soc0/platform_version` 2> /dev/null
+fi
+
+
+# Dynamic Memory Managment (DMM) provides a sys file system to the userspace
+# that can be used to plug in/out memory that has been configured as unstable.
+# This unstable memory can be in Active or In-Active State.
+# Each of which the userspace can request by writing to a sys file.
+#
+# ro.dev.dmm = 1; Indicates that DMM is enabled in the Android User Space. This
+# property is set in the Android system properties file.
+#
+# If ro.dev.dmm.dpd.start_address is set here then the target has a memory
+# configuration that supports DynamicMemoryManagement.
+init_DMM()
+{
+ block=-1
+
+ case "$target" in
+ "msm7630_surf" | "msm7630_1x" | "msm7630_fusion" | "msm8960")
+ ;;
+ *)
+ return
+ ;;
+ esac
+
+ mem="/sys/devices/system/memory"
+ op=`cat $mem/movable_start_bytes`
+ case "$op" in
+ "0")
+ log -p i -t DMM DMM Disabled. movable_start_bytes not set: $op
+ ;;
+
+ "$mem/movable_start_bytes: No such file or directory ")
+ log -p i -t DMM DMM Disabled. movable_start_bytes does not exist: $op
+ ;;
+
+ *)
+ log -p i -t DMM DMM available. movable_start_bytes at $op
+ movable_start_bytes=0x`cat $mem/movable_start_bytes`
+ block_size_bytes=0x`cat $mem/block_size_bytes`
+ block=$((#${movable_start_bytes}/${block_size_bytes}))
+
+ chown -h system.system $mem/memory$block/state
+ chown -h system.system $mem/probe
+ chown -h system.system $mem/active
+ chown -h system.system $mem/remove
+
+ case "$target" in
+ "msm7630_surf" | "msm7630_1x" | "msm7630_fusion")
+ echo $movable_start_bytes > $mem/probe
+ case "$?" in
+ "0")
+ log -p i -t DMM $movable_start_bytes to physical hotplug succeeded.
+ ;;
+ *)
+ log -p e -t DMM $movable_start_bytes to physical hotplug failed.
+ return
+ ;;
+ esac
+
+ echo online > $mem/memory$block/state
+ case "$?" in
+ "0")
+ log -p i -t DMM \'echo online\' to logical hotplug succeeded.
+ ;;
+ *)
+ log -p e -t DMM \'echo online\' to logical hotplug failed.
+ return
+ ;;
+ esac
+ ;;
+ esac
+
+ setprop ro.dev.dmm.dpd.start_address $movable_start_bytes
+ setprop ro.dev.dmm.dpd.block $block
+ ;;
+ esac
+
+ case "$target" in
+ "msm8960")
+ return
+ ;;
+ esac
+
+ # For 7X30 targets:
+ # ro.dev.dmm.dpd.start_address is set when the target has a 2x256Mb memory
+ # configuration. This is also used to indicate that the target is capable of
+ # setting EBI-1 to Deep Power Down or Self Refresh.
+ op=`cat $mem/low_power_memory_start_bytes`
+ case "$op" in
+ "0")
+ log -p i -t DMM Self-Refresh-Only Disabled. low_power_memory_start_bytes not set:$op
+ ;;
+ "$mem/low_power_memory_start_bytes No such file or directory ")
+ log -p i -t DMM Self-Refresh-Only Disabled. low_power_memory_start_bytes does not exist:$op
+ ;;
+ *)
+ log -p i -t DMM Self-Refresh-Only available. low_power_memory_start_bytes at $op
+ ;;
+ esac
+}
+
+#
+# For controlling console and shell on console on 8960 - perist.serial.enable 8960
+# On other target use default ro.debuggable property.
+#
+serial=`getprop persist.serial.enable`
+dserial=`getprop ro.debuggable`
+case "$target" in
+ "msm8960")
+ case "$serial" in
+ "0")
+ echo 0 > /sys/devices/platform/msm_serial_hsl.0/console
+ ;;
+ "1")
+ echo 1 > /sys/devices/platform/msm_serial_hsl.0/console
+ start console
+ ;;
+ *)
+ case "$dserial" in
+ "1")
+ start console
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ "msm8610" | "msm8974" | "msm8226")
+ case "$serial" in
+ "0")
+ echo 0 > /sys/devices/f991f000.serial/console
+ ;;
+ "1")
+ echo 1 > /sys/devices/f991f000.serial/console
+ start console
+ ;;
+ *)
+ case "$dserial" in
+ "1")
+ start console
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ *)
+ case "$dserial" in
+ "1")
+ start console
+ ;;
+ esac
+ ;;
+esac
+
+case "$target" in
+ "msm7630_surf" | "msm7630_1x" | "msm7630_fusion")
+ insmod /system/lib/modules/ss_mfcinit.ko
+ insmod /system/lib/modules/ss_vencoder.ko
+ insmod /system/lib/modules/ss_vdecoder.ko
+ chmod -h 0666 /dev/ss_mfc_reg
+ chmod -h 0666 /dev/ss_vdec
+ chmod -h 0666 /dev/ss_venc
+
+ init_DMM
+ ;;
+
+ "msm8960")
+ init_DMM
+ ;;
+esac
diff --git a/rootdir/etc/init.qcom.early_boot.sh b/rootdir/etc/init.qcom.early_boot.sh
new file mode 100644
index 0000000..a8bcf09
--- /dev/null
+++ b/rootdir/etc/init.qcom.early_boot.sh
@@ -0,0 +1,200 @@
+#!/system/bin/sh
+# Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of The Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+export PATH=/system/bin
+
+# Set platform variables
+if [ -f /sys/devices/soc0/hw_platform ]; then
+ soc_hwplatform=`cat /sys/devices/soc0/hw_platform` 2> /dev/null
+else
+ soc_hwplatform=`cat /sys/devices/system/soc/soc0/hw_platform` 2> /dev/null
+fi
+if [ -f /sys/devices/soc0/soc_id ]; then
+ soc_hwid=`cat /sys/devices/soc0/soc_id` 2> /dev/null
+else
+ soc_hwid=`cat /sys/devices/system/soc/soc0/id` 2> /dev/null
+fi
+if [ -f /sys/devices/soc0/platform_version ]; then
+ soc_hwver=`cat /sys/devices/soc0/platform_version` 2> /dev/null
+else
+ soc_hwver=`cat /sys/devices/system/soc/soc0/platform_version` 2> /dev/null
+fi
+
+log -t BOOT -p i "MSM target '$1', SoC '$soc_hwplatform', HwID '$soc_hwid', SoC ver '$soc_hwver'"
+
+case "$1" in
+ "msm7630_surf" | "msm7630_1x" | "msm7630_fusion")
+ case "$soc_hwplatform" in
+ "FFA" | "SVLTE_FFA")
+ # linking to surf_keypad_qwerty.kcm.bin instead of surf_keypad_numeric.kcm.bin so that
+ # the UI keyboard works fine.
+ ln -s /system/usr/keychars/surf_keypad_qwerty.kcm.bin /system/usr/keychars/surf_keypad.kcm.bin
+ ;;
+ "Fluid")
+ setprop ro.sf.lcd_density 240
+ setprop qcom.bt.dev_power_class 2
+ ;;
+ *)
+ ln -s /system/usr/keychars/surf_keypad_qwerty.kcm.bin /system/usr/keychars/surf_keypad.kcm.bin
+ ;;
+ esac
+ ;;
+
+ "msm8660")
+ case "$soc_hwplatform" in
+ "Fluid")
+ setprop ro.sf.lcd_density 240
+ ;;
+ "Dragon")
+ setprop ro.sound.alsa "WM8903"
+ ;;
+ esac
+ ;;
+
+ "msm8960")
+ # lcd density is write-once. Hence the separate switch case
+ case "$soc_hwplatform" in
+ "Liquid")
+ if [ "$soc_hwver" == "196608" ]; then # version 0x30000 is 3D sku
+ setprop ro.sf.hwrotation 90
+ fi
+
+ setprop ro.sf.lcd_density 160
+ ;;
+ "MTP")
+ setprop ro.sf.lcd_density 240
+ ;;
+ *)
+ case "$soc_hwid" in
+ "109")
+ setprop ro.sf.lcd_density 160
+ ;;
+ *)
+ setprop ro.sf.lcd_density 240
+ ;;
+ esac
+ ;;
+ esac
+
+ #Set up composition type based on the target
+ case "$soc_hwid" in
+ 87)
+ #8960
+ setprop debug.composition.type dyn
+ ;;
+ 153|154|155|156|157|138)
+ #8064 V2 PRIME | 8930AB | 8630AB | 8230AB | 8030AB | 8960AB
+ setprop debug.composition.type c2d
+ ;;
+ *)
+ esac
+ ;;
+
+ "msm8974")
+ case "$soc_hwplatform" in
+ "Liquid")
+ setprop ro.sf.lcd_density 160
+ # Liquid do not have hardware navigation keys, so enable
+ # Android sw navigation bar
+ setprop ro.hw.nav_keys 0
+ ;;
+ "Dragon")
+ setprop ro.sf.lcd_density 240
+ ;;
+ *)
+ setprop ro.sf.lcd_density 320
+ ;;
+ esac
+ ;;
+
+ "msm8226")
+ case "$soc_hwplatform" in
+ *)
+ setprop ro.sf.lcd_density 320
+ ;;
+ esac
+ ;;
+
+ "msm8610" | "apq8084" | "mpq8092")
+ case "$soc_hwplatform" in
+ *)
+ setprop ro.sf.lcd_density 240
+ ;;
+ esac
+ ;;
+ "apq8084")
+ case "$soc_hwplatform" in
+ "Liquid")
+ setprop ro.sf.lcd_density 320
+ # Liquid do not have hardware navigation keys, so enable
+ # Android sw navigation bar
+ setprop ro.hw.nav_keys 0
+ ;;
+ "SBC")
+ setprop ro.sf.lcd_density 200
+ # SBC do not have hardware navigation keys, so enable
+ # Android sw navigation bar
+ setprop qemu.hw.mainkeys 0
+ ;;
+ *)
+ setprop ro.sf.lcd_density 480
+ ;;
+ esac
+ ;;
+esac
+
+# Setup HDMI related nodes & permissions
+# HDMI can be fb1 or fb2
+# Loop through the sysfs nodes and determine
+# the HDMI(dtv panel)
+for fb_cnt in 0 1 2
+do
+file=/sys/class/graphics/fb$fb_cnt
+dev_file=/dev/graphics/fb$fb_cnt
+ if [ -d "$file" ]
+ then
+ value=`cat $file/msm_fb_type`
+ case "$value" in
+ "dtv panel")
+ chown -h system.graphics $file/hpd
+ chown -h system.system $file/hdcp/tp
+ chown -h system.graphics $file/vendor_name
+ chown -h system.graphics $file/product_description
+ chmod -h 0664 $file/hpd
+ chmod -h 0664 $file/hdcp/tp
+ chmod -h 0664 $file/vendor_name
+ chmod -h 0664 $file/product_description
+ chmod -h 0664 $file/video_mode
+ chmod -h 0664 $file/format_3d
+ # create symbolic link
+ ln -s $dev_file /dev/graphics/hdmi
+ # Change owner and group for media server and surface flinger
+ chown -h system.system $file/format_3d;;
+ esac
+ fi
+done
diff --git a/rootdir/etc/init.qcom.factory.sh b/rootdir/etc/init.qcom.factory.sh
new file mode 100644
index 0000000..9c40d94
--- /dev/null
+++ b/rootdir/etc/init.qcom.factory.sh
@@ -0,0 +1,255 @@
+#!/system/bin/sh
+# Copyright (c) 2009-2014, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of The Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+# Actions on fast factory test mode
+ chown -h bluetooth.bluetooth /sys/module/bluetooth_power/parameters/power
+ chown -h bluetooth.bluetooth /sys/class/rfkill/rfkill0/type
+ chown -h bluetooth.bluetooth /sys/class/rfkill/rfkill0/state
+ chown -h bluetooth.bluetooth /proc/bluetooth/sleep/proto
+ chown -h system.system /sys/module/sco/parameters/disable_esco
+ chown -h bluetooth.bluetooth /sys/module/hci_smd/parameters/hcismd_set
+ chmod -h 0660 /sys/module/bluetooth_power/parameters/power
+ chmod -h 0660 /sys/module/hci_smd/parameters/hcismd_set
+ chmod -h 0660 /sys/class/rfkill/rfkill0/state
+ chmod -h 0660 /proc/bluetooth/sleep/proto
+ chown -h bluetooth.bluetooth /dev/ttyHS0
+ chmod -h 0660 /dev/ttyHS0
+ chown -h bluetooth.bluetooth /sys/devices/platform/msm_serial_hs.0/clock
+ chmod -h 0660 /sys/devices/platform/msm_serial_hs.0/clock
+
+ chmod -h 0660 /dev/ttyHS2
+ chown -h bluetooth.bluetooth /dev/ttyHS2
+
+ #Create QMUX deamon socket area
+ mkdir -p /dev/socket/qmux_radio
+ chown -h radio.radio /dev/socket/qmux_radio
+ chmod -h 2770 /dev/socket/qmux_radio
+ mkdir -p /dev/socket/qmux_audio
+ chown -h media.audio /dev/socket/qmux_audio
+ chmod -h 2770 /dev/socket/qmux_audio
+ mkdir -p /dev/socket/qmux_bluetooth
+ chown -h bluetooth.bluetooth /dev/socket/qmux_bluetooth
+ chmod -h 2770 /dev/socket/qmux_bluetooth
+ mkdir -p /dev/socket/qmux_gps
+ chown -h gps.gps /dev/socket/qmux_gps
+ chmod -h 2770 /dev/socket/qmux_gps
+
+ # Allow QMUX daemon to assign port open wait time
+ chown -h radio.radio /sys/devices/virtual/hsicctl/hsicctl0/modem_wait
+
+ setprop wifi.interface wlan0
+
+ setprop ro.telephony.call_ring.multiple false
+
+ #Remove SUID bit for iproute2 ip tool
+ chmod -h 0755 /system/bin/ip
+
+ chmod -h 0444 /sys/devices/platform/msm_hsusb/gadget/usb_state
+
+ # setup permissions for fb1 related nodes
+ chown -h system.graphics /sys/class/graphics/fb1/hpd
+ chown -h system.system /sys/class/graphics/fb1/hdcp/tp
+ chmod -h 0664 /sys/devices/virtual/graphics/fb1/hpd
+ chmod -h 0664 /sys/devices/virtual/graphics/fb1/hdcp/tp
+ chmod -h 0664 /sys/devices/virtual/graphics/fb1/video_mode
+ chmod -h 0664 /sys/devices/virtual/graphics/fb1/format_3d
+
+ # Change owner and group for media server and surface flinger
+ chown -h system.system /sys/devices/virtual/graphics/fb1/format_3d
+
+ #For bridgemgr daemon to inform the USB driver of the correct transport
+ chown -h radio.radio /sys/class/android_usb/f_rmnet_smd_sdio/transport
+
+ #To allow interfaces to get v6 address when tethering is enabled
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet0/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet1/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet2/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet3/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet4/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet5/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet6/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet7/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_sdio0/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_sdio1/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_sdio2/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_sdio3/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_sdio4/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_sdio5/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_sdio6/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_sdio7/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_usb0/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_usb1/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_usb2/accept_ra
+ echo 2 > /proc/sys/net/ipv6/conf/rmnet_usb3/accept_ra
+
+ # To prevent out of order acknowledgements from making
+ # connection tracking to treat them as not belonging to
+ # the connection they belong to.
+ # Otherwise, a weird issue happens in which some long
+ # connections on high-throughput links get dropped when
+ # an ack packet comes out of order
+ echo 1 > /proc/sys/net/netfilter/nf_conntrack_tcp_be_liberal
+
+#TODO:
+# basic network init
+# ifup lo
+# hostname localhost
+# domainname localdomain
+
+# set RLIMIT_NICE to allow priorities from 19 to -20
+# setrlimit 13 40 40
+
+# Memory management. Basic kernel parameters, and allow the high
+# level system server to be able to adjust the kernel OOM driver
+# parameters to match how it is managing things.
+ echo 1 > /proc/sys/vm/overcommit_memory
+ echo 4 > /proc/sys/vm/min_free_order_shift
+ chown -h root.system /sys/module/lowmemorykiller/parameters/adj
+ chmod -h 0664 /sys/module/lowmemorykiller/parameters/adj
+ chown -h root.system /sys/module/lowmemorykiller/parameters/minfree
+ chmod -h 0664 /sys/module/lowmemorykiller/parameters/minfree
+
+ # Tweak background writeout
+ echo 200 > /proc/sys/vm/dirty_expire_centisecs
+ echo 5 > /proc/sys/vm/dirty_background_ratio
+
+ # Permissions for System Server and daemons.
+ chown -h radio.system /sys/android_power/state
+ chown -h radio.system /sys/android_power/request_state
+ chown -h radio.system /sys/android_power/acquire_full_wake_lock
+ chown -h radio.system /sys/android_power/acquire_partial_wake_lock
+ chown -h radio.system /sys/android_power/release_wake_lock
+ chown -h system.system /sys/power/autosleep
+ chown -h system.system /sys/power/state
+ chown -h system.system /sys/power/wakeup_count
+ chown -h radio.system /sys/power/wake_lock
+ chown -h radio.system /sys/power/wake_unlock
+ chmod -h 0660 /sys/power/state
+ chmod -h 0660 /sys/power/wake_lock
+ chmod -h 0660 /sys/power/wake_unlock
+
+ chown -h system.system /sys/devices/system/cpu/cpufreq/interactive/timer_rate
+ chmod -h 0660 /sys/devices/system/cpu/cpufreq/interactive/timer_rate
+ chown -h system.system /sys/devices/system/cpu/cpufreq/interactive/min_sample_time
+ chmod -h 0660 /sys/devices/system/cpu/cpufreq/interactive/min_sample_time
+ chown -h system.system /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq
+ chmod -h 0660 /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq
+ chown -h system.system /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load
+ chmod -h 0660 /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load
+ chown -h system.system /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay
+ chmod -h 0660 /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay
+ chown -h system.system /sys/devices/system/cpu/cpufreq/interactive/boost
+ chmod -h 0660 /sys/devices/system/cpu/cpufreq/interactive/boost
+ chown -h system.system /sys/devices/system/cpu/cpufreq/interactive/boostpulse
+ chown -h system.system /sys/devices/system/cpu/cpufreq/interactive/input_boost
+ chmod -h 0660 /sys/devices/system/cpu/cpufreq/interactive/input_boost
+ chown -h system.system /sys/devices/system/cpu/cpufreq/interactive/boostpulse_duration
+ chmod -h 0660 /sys/devices/system/cpu/cpufreq/interactive/boostpulse_duration
+
+ # Assume SMP uses shared cpufreq policy for all CPUs
+ chown -h system.system /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
+ chmod -h 0660 /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
+
+ chown -h system.system /sys/class/timed_output/vibrator/enable
+ chown -h system.system /sys/class/leds/keyboard-backlight/brightness
+ chown -h system.system /sys/class/leds/lcd-backlight/brightness
+ chown -h system.system /sys/class/leds/button-backlight/brightness
+ chown -h system.system /sys/class/leds/jogball-backlight/brightness
+ chown -h system.system /sys/class/leds/red/brightness
+ chown -h system.system /sys/class/leds/green/brightness
+ chown -h system.system /sys/class/leds/blue/brightness
+ chown -h system.system /sys/class/leds/red/device/grpfreq
+ chown -h system.system /sys/class/leds/red/device/grppwm
+ chown -h system.system /sys/class/leds/red/device/blink
+ chown -h system.system /sys/class/leds/red/brightness
+ chown -h system.system /sys/class/leds/green/brightness
+ chown -h system.system /sys/class/leds/blue/brightness
+ chown -h system.system /sys/class/leds/red/device/grpfreq
+ chown -h system.system /sys/class/leds/red/device/grppwm
+ chown -h system.system /sys/class/leds/red/device/blink
+ chown -h system.system /sys/class/timed_output/vibrator/enable
+ chown -h system.system /sys/module/sco/parameters/disable_esco
+ chown -h system.system /sys/kernel/ipv4/tcp_wmem_min
+ chown -h system.system /sys/kernel/ipv4/tcp_wmem_def
+ chown -h system.system /sys/kernel/ipv4/tcp_wmem_max
+ chown -h system.system /sys/kernel/ipv4/tcp_rmem_min
+ chown -h system.system /sys/kernel/ipv4/tcp_rmem_def
+ chown -h system.system /sys/kernel/ipv4/tcp_rmem_max
+ chown -h root radio /proc/cmdline
+
+# Define TCP buffer sizes for various networks
+# ReadMin, ReadInitial, ReadMax, WriteMin, WriteInitial, WriteMax,
+ setprop net.tcp.buffersize.default 4096,87380,110208,4096,16384,110208
+ setprop net.tcp.buffersize.wifi 524288,1048576,2097152,262144,524288,1048576
+ setprop net.tcp.buffersize.lte 524288,1048576,2097152,262144,524288,1048576
+ setprop net.tcp.buffersize.umts 4094,87380,110208,4096,16384,110208
+ setprop net.tcp.buffersize.hspa 4094,87380,1220608,4096,16384,1220608
+ setprop net.tcp.buffersize.hsupa 4094,87380,1220608,4096,16384,1220608
+ setprop net.tcp.buffersize.hsdpa 4094,87380,1220608,4096,16384,1220608
+ setprop net.tcp.buffersize.hspap 4094,87380,1220608,4096,16384,1220608
+ setprop net.tcp.buffersize.edge 4093,26280,35040,4096,16384,35040
+ setprop net.tcp.buffersize.gprs 4092,8760,11680,4096,8760,11680
+ setprop net.tcp.buffersize.evdo 4094,87380,262144,4096,16384,262144
+
+# Assign TCP buffer thresholds to be ceiling value of technology maximums
+# Increased technology maximums should be reflected here.
+ echo 2097152 > /proc/sys/net/core/rmem_max
+ echo 2097152 > /proc/sys/net/core/wmem_max
+
+# Set the property to indicate type of virtual display to 0
+# 0 indicates that virtual display is not a Wifi display and that the
+# session is not exercised through RemoteDisplay in the android framework
+ setprop persist.sys.wfd.virtual 0
+
+# Set this property so surfaceflinger is not started by system_init
+ setprop system_init.startsurfaceflinger 0
+
+# Configurate USB in FFBM mode, two big change for USB.
+# 1) Using diag,adb in FFBM mode, too many interface will cause
+# problem in factory for multi-line test
+# 2) Not config usb serialnum. Using the default value:"0123456789ABCDEF"
+# Keep the USB serialnum no change for devices. this fix the problem
+# of port change for various devices.
+chown -h root.system /sys/devices/platform/msm_hsusb/gadget/wakeup
+chmod -h 220 /sys/devices/platform/msm_hsusb/gadget/wakeup
+setprop persist.sys.usb.config diag,adb
+
+# Start the following services needed for fftm
+ start logd
+ start config_bluetooth
+ start media
+ start fastmmi
+ start wcnss-service
+ start qcom-post-boot
+ start rmt_storage
+ start qcom-c_main-sh
+ start irsc_util
+ start qcamerasvr
+ start qcomsysd
+ start ptt_ffbm
+ start ftm_ffbm
diff --git a/rootdir/etc/init.qcom.rc b/rootdir/etc/init.qcom.rc
new file mode 100644
index 0000000..b6f3673
--- /dev/null
+++ b/rootdir/etc/init.qcom.rc
@@ -0,0 +1,872 @@
+# Copyright (c) 2009-2012, 2014-2015, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of The Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+import init.qcom.usb.rc
+import init.target.rc
+
+on early-init
+ mount debugfs debugfs /sys/kernel/debug
+ write /sys/block/mmcblk0/queue/scheduler noop
+# additionaly for init.trace.rc
+# Allow shell group to enable tgid prints
+ chown root shell /sys/kernel/debug/tracing/options/print-tgid
+ chmod 0664 /sys/kernel/debug/tracing/options/print-tgid
+
+on init
+ # Set permissions for persist partition
+ mkdir /persist 0771 system system
+
+ mkdir /preload 0771 system system
+ # See storage config details at http://source.android.com/tech/storage/
+ mkdir /mnt/shell/emulated 0700 shell shell
+ mkdir /storage/emulated 0555 root root
+ mkdir /mnt/media_rw/sdcard1 0700 media_rw media_rw
+ mkdir /mnt/media_rw/usbotg 0700 media_rw media_rw
+ mkdir /mnt/media_rw/uicc0 0700 media_rw media_rw
+ mkdir /mnt/media_rw/uicc1 0700 media_rw media_rw
+ mkdir /storage/sdcard1 0700 root root
+ mkdir /storage/uicc0 0700 root root
+ mkdir /storage/uicc1 0700 root root
+ mkdir /storage/usbotg 0700 root root
+
+ export EXTERNAL_STORAGE /storage/emulated/legacy
+ export SECONDARY_STORAGE /storage/sdcard1
+ export EMULATED_STORAGE_SOURCE /mnt/shell/emulated
+ export EMULATED_STORAGE_TARGET /storage/emulated
+
+ # Support legacy paths
+ symlink /storage/emulated/legacy /sdcard
+ symlink /storage/emulated/legacy /mnt/sdcard
+ symlink /storage/emulated/legacy /storage/sdcard0
+ symlink /mnt/shell/emulated/0 /storage/emulated/legacy
+
+on early-boot
+ # set RLIMIT_MEMLOCK to 64MB
+ setrlimit 8 67108864 67108864
+ # Allow subsystem (modem etc) debugging
+ write /sys/module/subsystem_restart/parameters/enable_debug ${persist.sys.ssr.enable_debug}
+ write /sys/module/pil_msa/parameters/pbl_mba_boot_timeout_ms ${persist.sys.mba_boot_timeout}
+ write /sys/module/pil_msa/parameters/modem_auth_timeout_ms ${persist.sys.modem_auth_timeout}
+ write /sys/module/peripheral_loader/parameters/proxy_timeout_ms ${persist.sys.pil_proxy_timeout}
+ write /sys/kernel/boot_adsp/boot 1
+
+on boot
+ chown bluetooth bluetooth /sys/module/bluetooth_power/parameters/power
+ chown bluetooth bluetooth /sys/class/rfkill/rfkill0/type
+ chown bluetooth bluetooth /sys/class/rfkill/rfkill0/state
+ chown bluetooth bluetooth /proc/bluetooth/sleep/proto
+ chown bluetooth bluetooth /sys/module/hci_uart/parameters/ath_lpm
+ chown bluetooth bluetooth /sys/module/hci_uart/parameters/ath_btwrite
+ chown system system /sys/module/sco/parameters/disable_esco
+ chown bluetooth bluetooth /sys/module/hci_smd/parameters/hcismd_set
+ chmod 0660 /sys/module/bluetooth_power/parameters/power
+ chmod 0660 /sys/module/hci_smd/parameters/hcismd_set
+ chmod 0660 /sys/class/rfkill/rfkill0/state
+ chmod 0660 /proc/bluetooth/sleep/proto
+ chown bluetooth net_bt_stack /dev/ttyHS0
+ chmod 0660 /sys/module/hci_uart/parameters/ath_lpm
+ chmod 0660 /sys/module/hci_uart/parameters/ath_btwrite
+ chmod 0660 /dev/ttyHS0
+ chown bluetooth bluetooth /sys/devices/platform/msm_serial_hs.0/clock
+ chmod 0660 /sys/devices/platform/msm_serial_hs.0/clock
+
+ chmod 0660 /dev/ttyHS2
+ chown bluetooth bluetooth /dev/ttyHS2
+
+ chown bluetooth bluetooth /sys/class/rfkill/rfkill0/device/extldo
+ chmod 0660 /sys/class/rfkill/rfkill0/device/extldo
+
+ # for BT MAC address
+ mkdir /efs/bluetooth 0775 radio system
+ # if already exist
+ chown radio system /efs/bluetooth
+ chmod 0775 /efs/bluetooth
+
+ #Create QMUX deamon socket area
+ mkdir /dev/socket/qmux_radio 0770 radio radio
+ chmod 2770 /dev/socket/qmux_radio
+ mkdir /dev/socket/qmux_audio 0770 media audio
+ chmod 2770 /dev/socket/qmux_audio
+ mkdir /dev/socket/qmux_bluetooth 0770 bluetooth bluetooth
+ chmod 2770 /dev/socket/qmux_bluetooth
+ mkdir /dev/socket/qmux_gps 0770 gps gps
+ chmod 2770 /dev/socket/qmux_gps
+
+ setprop wifi.interface wlan0
+
+ chown system system /proc/sched_orig_load_balance_enable
+ chmod 0660 /proc/sched_orig_load_balance_enable
+
+# Define TCP buffer sizes for various networks
+# ReadMin, ReadInitial, ReadMax, WriteMin, WriteInitial, WriteMax,
+ setprop net.tcp.buffersize.wifi 524288,2097152,4194304,262144,524288,1048576
+
+
+ setprop ro.telephony.call_ring.multiple false
+
+ #Remove SUID bit for iproute2 ip tool
+ chmod 0755 /system/bin/ip
+
+
+ chmod 0444 /sys/devices/platform/msm_hsusb/gadget/usb_state
+
+ #For bridgemgr daemon to inform the USB driver of the correct transport
+ chown radio radio /sys/class/android_usb/f_rmnet_smd_sdio/transport
+
+# Define TCP buffer sizes for various networks
+# ReadMin, ReadInitial, ReadMax, WriteMin, WriteInitial, WriteMax,
+ setprop net.tcp.buffersize.default 4096,87380,524288,4096,16384,110208
+ setprop net.tcp.buffersize.lte 2097152,4194304,8388608,262144,524288,1048576
+ setprop net.tcp.buffersize.umts 4094,87380,110208,4096,16384,110208
+ setprop net.tcp.buffersize.hspa 4094,87380,1220608,4096,16384,1220608
+ setprop net.tcp.buffersize.hsupa 4094,87380,1220608,4096,16384,1220608
+ setprop net.tcp.buffersize.hsdpa 4094,87380,1220608,4096,16384,1220608
+ setprop net.tcp.buffersize.hspap 4094,87380,1220608,4096,16384,1220608
+ setprop net.tcp.buffersize.edge 4093,26280,35040,4096,16384,35040
+ setprop net.tcp.buffersize.gprs 4092,8760,11680,4096,8760,11680
+ setprop net.tcp.buffersize.evdo 4094,87380,524288,4096,16384,262144
+
+# Assign TCP buffer thresholds to be ceiling value of technology maximums
+# Increased technology maximums should be reflected here.
+ write /proc/sys/net/core/rmem_max 8388608
+ write /proc/sys/net/core/wmem_max 8388608
+
+ #To allow interfaces to get v6 address when tethering is enabled
+ write /proc/sys/net/ipv6/conf/rmnet0/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet1/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet2/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet3/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet4/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet5/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet6/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet7/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_sdio0/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_sdio1/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_sdio2/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_sdio3/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_sdio4/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_sdio5/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_sdio6/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_sdio7/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_usb0/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_usb1/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_usb2/accept_ra 2
+ write /proc/sys/net/ipv6/conf/rmnet_usb3/accept_ra 2
+
+ # To prevent out of order acknowledgements from making
+ # connection tracking to treat them as not belonging to
+ # the connection they belong to.
+ # Otherwise, a weird issue happens in which some long
+ # connections on high-throughput links get dropped when
+ # an ack packet comes out of order
+ write /proc/sys/net/netfilter/nf_conntrack_tcp_be_liberal 1
+
+ # Set the console loglevel to < KERN_INFO
+ # Set the default message loglevel to KERN_INFO
+ # write /proc/sys/kernel/printk "6 6 1 7"
+
+ # Allow access for CCID command/response timeout configuration
+ chown system system /sys/module/ccid_bridge/parameters/bulk_msg_timeout
+
+# msm specific files that need to be created on /data
+on post-fs-data
+ # Create directory for TZ Apps
+ mkdir /data/misc/qsee 0770 system system
+
+ # we will remap this as /mnt/sdcard with the sdcard fuse tool
+ mkdir /data/misc/camera 0770 camera camera
+
+ mkdir /data/media 0770 media_rw media_rw
+ chown media_rw media_rw /data/media
+
+ mkdir /data/misc/ipa 0700 net_admin net_admin
+
+ mkdir /data/misc/bluetooth 0770 bluetooth bluetooth
+
+ # Create the directories used by the Wireless subsystem
+ mkdir /data/misc/wifi 0770 wifi system
+ mkdir /data/misc/wifi/sockets 0770 wifi wifi
+ mkdir /data/misc/wifi/wpa_supplicant 0770 wifi wifi
+ mkdir /data/misc/dhcp 0775 dhcp dhcp
+ chown dhcp dhcp /data/misc/dhcp
+
+ # for WIFI MAC address
+ mkdir /efs/wifi 0775 radio system
+ chown system wifi /efs/wifi/.mac.info
+ chmod 0660 /efs/wifi/.mac.info
+ chmod 0660 /efs/wifi/.mac.cob
+
+ # for WIFI Version
+ write /data/.wifiver.info 0
+ chown system root /data/.wifiver.info
+ chmod 0666 /data/.wifiver.info
+ # Create the directories used by CnE subsystem
+ mkdir /data/connectivity 0771 system system
+ chown system system /data/connectivity
+
+ # Create the directories used by DPM subsystem
+ mkdir /data/dpm 0771 system system
+ chown system system /data/dpm
+
+ mkdir /data/dpm/fdMgr 0771 system system
+ chown system system /data/dpm/fdMgr
+
+ mkdir /data/dpm/nsrm 0771 system system
+ chown system system /data/dpm/nsrm
+
+ # Create directory used by audio subsystem
+ mkdir /data/misc/audio 0770 audio audio
+
+ # Create directory used by the DASH client
+ mkdir /data/misc/dash 0770 media audio
+
+ # Create directory used by display clients
+ mkdir /data/misc/display 0770 system graphics
+
+ # Mounting of persist is moved to 'on emmc-fs' and 'on fs' sections
+ # We chown/chmod /persist again so because mount is run as root + defaults
+ chown system system /persist
+ chmod 0771 /persist
+ chmod 0664 /sys/devices/platform/msm_sdcc.1/polling
+ chmod 0664 /sys/devices/platform/msm_sdcc.2/polling
+ chmod 0664 /sys/devices/platform/msm_sdcc.3/polling
+ chmod 0664 /sys/devices/platform/msm_sdcc.4/polling
+
+ # Chown polling nodes as needed from UI running on system server
+ chown system system /sys/devices/platform/msm_sdcc.1/polling
+ chown system system /sys/devices/platform/msm_sdcc.2/polling
+ chown system system /sys/devices/platform/msm_sdcc.3/polling
+ chown system system /sys/devices/platform/msm_sdcc.4/polling
+
+ #Create the symlink to qcn wpa_supplicant folder for ar6000 wpa_supplicant
+ mkdir /data/system 0775 system system
+ #symlink /data/misc/wifi/wpa_supplicant /data/system/wpa_supplicant
+
+ #Create directories for Location services
+ mkdir /data/misc/location 0770 gps gps
+ mkdir /data/misc/location/mq 0770 gps gps
+ mkdir /data/misc/location/xtwifi 0770 gps gps
+ mkdir /data/misc/location/gpsone_d 0770 system gps
+ mkdir /data/misc/location/quipc 0770 gps system
+ mkdir /data/misc/location/gsiff 0770 gps gps
+
+ #Create directory from IMS services
+ mkdir /data/shared 0755
+ chown system system /data/shared
+
+ #Create directory for FOTA
+ mkdir /data/fota 0771
+ chown system system /data/fota
+
+ #Create directory for hostapd
+ mkdir /data/hostapd 0770 system wifi
+
+ # Create /data/time folder for time-services
+ mkdir /data/time/ 0700 system system
+
+ mkdir /data/audio/ 0770 media audio
+
+ setprop vold.post_fs_data_done 1
+
+ #Create a folder for SRS to be able to create a usercfg file
+ mkdir /data/data/media 0770 media media
+
+ #Create folder for mm-qcamera-daemon
+ mkdir /data/camera 0770 media camera
+
+ #Create PERFD deamon related dirs
+ mkdir /data/misc/perfd 0755 root system
+ chmod 2755 /data/misc/perfd
+ mkdir /data/system/perfd 0770 root system
+ chmod 2770 /data/system/perfd
+
+ # NFC local data and nfcee xml storage
+ mkdir /data/nfc 0770 nfc nfc
+ mkdir /data/nfc/param 0770 nfc nfc
+
+ # DCT(Display Clock Tunning) - Interface 2.0
+ chown radio system /sys/class/dct/dct_node/data
+ chown radio system /sys/class/dct/dct_node/state
+ chown radio system /sys/class/dct/dct_node/log
+ chown radio system /sys/class/dct/dct_node/enabled
+ chown radio system /sys/class/dct/dct_node/interface
+ chown radio system /sys/class/dct/dct_node/libname
+ chown radio system /sys/class/dct/dct_node/tunned
+
+#service qcomsysd /system/bin/qcom-system-daemon
+# class main
+# user root
+# group root qcom_diag
+
+service ssr_setup /system/bin/ssr_setup
+ oneshot
+ disabled
+
+service ss_ramdump /system/bin/subsystem_ramdump
+ class main
+ user system
+ group system
+ disabled
+
+on property:persist.sys.ssr.restart_level=*
+ start ssr_setup
+
+on property:persist.sys.ssr.enable_ramdumps=1
+ write /sys/module/subsystem_restart/parameters/enable_ramdumps 1
+ start ss_ramdump
+
+on property:persist.sys.ssr.enable_ramdumps=0
+ write /sys/module/subsystem_restart/parameters/enable_ramdumps 0
+
+on property:sys.boot_completed=1
+ write /dev/kmsg "Boot completed "
+
+on property:persist.radio.atfwd.start=false
+ stop atfwd
+
+# corefile limit and ETB enabling
+on property:persist.debug.trace=1
+ mkdir /data/core 0777 root root
+ write /proc/sys/kernel/core_pattern "/data/core/%E.%p.%e"
+ write /sys/devices/system/cpu/cpu1/online 1
+ write /sys/devices/system/cpu/cpu2/online 1
+ write /sys/devices/system/cpu/cpu3/online 1
+ write /sys/bus/coresight/devices/coresight-etm0/enable 0
+ write /sys/bus/coresight/devices/coresight-etm1/enable 0
+ write /sys/bus/coresight/devices/coresight-etm2/enable 0
+ write /sys/bus/coresight/devices/coresight-etm3/enable 0
+ write /sys/bus/coresight/devices/coresight-etm0/reset 1
+ write /sys/bus/coresight/devices/coresight-etm1/reset 1
+ write /sys/bus/coresight/devices/coresight-etm2/reset 1
+ write /sys/bus/coresight/devices/coresight-etm3/reset 1
+ write /sys/bus/coresight/devices/coresight-etm0/enable 1
+ write /sys/bus/coresight/devices/coresight-etm1/enable 1
+ write /sys/bus/coresight/devices/coresight-etm2/enable 1
+ write /sys/bus/coresight/devices/coresight-etm3/enable 1
+ write /sys/module/coresight_event/parameters/event_abort_enable 1
+
+on property:init.svc.wpa_supplicant=stopped
+ stop dhcpcd
+
+on property:bluetooth.isEnabled=true
+ start btwlancoex
+ write /sys/class/bluetooth/hci0/idle_timeout 7000
+
+on property:bluetooth.sap.status=running
+ start bt-sap
+
+on property:bluetooth.sap.status=stopped
+ stop bt-sap
+
+on property:bluetooth.dun.status=running
+ start bt-dun
+
+on property:bluetooth.dun.status=stopped
+ stop bt-dun
+
+on property:ro.bluetooth.ftm_enabled=true
+ start ftmd
+
+on property:bluetooth.startbtsnoop=true
+ start btsnoop
+
+on property:bluetooth.startbtsnoop=false
+ stop btsnoop
+
+service qcom-c_core-sh /system/bin/sh /init.qcom.class_core.sh
+ class core
+ user root
+ oneshot
+
+service qcom-c_main-sh /system/bin/sh /init.class_main.sh
+ class main
+ user root
+ oneshot
+
+on property:vold.decrypt=trigger_restart_framework
+ start qcom-c_main-sh
+ start config_bluetooth
+ start wcnss-service
+
+on property:persist.env.fastdorm.enabled=true
+ setprop persist.radio.data_no_toggle 1
+
+service irsc_util /system/bin/irsc_util "/etc/sec_config"
+ class main
+ user root
+ oneshot
+
+service rmt_storage /system/bin/rmt_storage
+ class core
+ user root
+ disabled
+
+service rfs_access /system/bin/rfs_access
+ class core
+ user root
+ group system net_raw
+
+on property:wc_transport.start_hci=true
+ start start_hci_filter
+
+on property:wc_transport.start_hci=false
+ stop start_hci_filter
+
+service config_bluetooth /system/bin/sh /system/etc/init.qcom.bt.sh "onboot"
+ class core
+ user root
+ oneshot
+
+service hciattach /system/bin/sh /system/etc/init.qcom.bt.sh
+ class late_start
+ user bluetooth
+ group bluetooth net_bt_admin net_bt_stack
+ disabled
+ oneshot
+
+on property:bluetooth.hciattach=true
+ start hciattach
+
+on property:bluetooth.hciattach=false
+ setprop bluetooth.status off
+
+service hciattach_ath3k /system/bin/sh /system/etc/init.ath3k.bt.sh
+ class late_start
+ user bluetooth
+ group system bluetooth net_bt_admin misc
+ disabled
+ oneshot
+
+service bt-dun /system/bin/dun-server /dev/smd7 /dev/rfcomm0
+ class late_start
+ user bluetooth
+ group bluetooth net_bt_admin inet
+ disabled
+ oneshot
+
+service bt-sap /system/bin/sapd 15
+ user bluetooth
+ group bluetooth net_bt_admin
+ class late_start
+ disabled
+ oneshot
+
+service ftmd /system/bin/logwrapper /system/bin/ftmdaemon
+ class late_start
+ user root
+ group bluetooth net_bt_admin misc net_bt_stack qcom_diag
+ disabled
+ oneshot
+
+service bridgemgrd /system/bin/bridgemgrd
+ class late_start
+ user radio
+ group radio qcom_diag
+ disabled
+
+service port-bridge /system/bin/port-bridge /dev/mhi_pipe_32 /dev/ttyGS0
+ class main
+ user radio system
+ group radio system inet
+ disabled
+
+service qmiproxy /system/bin/qmiproxy
+ class main
+ user radio
+ group radio qcom_diag
+ disabled
+
+# QMUX must be in multiple groups to support external process connections
+service qmuxd /system/bin/qmuxd
+ class main
+ user root
+ group radio audio bluetooth gps qcom_diag
+ disabled
+
+service netmgrd /system/bin/netmgrd
+ class main
+ disabled
+
+on property:ro.use_data_netmgrd=false
+ # netmgr not supported on specific target
+ stop netmgrd
+
+# Adjust socket buffer to enlarge TCP receive window for high bandwidth
+# but only if ro.data.large_tcp_window_size property is set.
+on property:ro.data.large_tcp_window_size=true
+ write /proc/sys/net/ipv4/tcp_adv_win_scale 2
+
+service btwlancoex /system/bin/sh /system/etc/init.qcom.coex.sh
+ class late_start
+ user bluetooth
+ group bluetooth net_bt_admin inet net_admin net_raw
+ disabled
+ oneshot
+
+service p2p_supplicant /system/bin/wpa_supplicant \
+ -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \
+ -I/system/etc/wifi/wpa_supplicant_overlay.conf -O/data/misc/wifi/sockets -N \
+ -ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf \
+ -I/system/etc/wifi/p2p_supplicant_overlay.conf \
+ -puse_p2p_group_interface=1 -puse_multi_chan_concurrent=1 \
+ -e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0
+ # we will start as root and wpa_supplicant will switch to user wifi
+ # after setting up the capabilities required for WEXT
+ # user wifi
+ # group wifi inet keystore
+ class main
+ socket wpa_wlan0 dgram 660 wifi wifi
+ disabled
+ oneshot
+
+service wpa_supplicant /system/bin/wpa_supplicant -g@android:wpa_wlan0 \
+ -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf -e/data/misc/wifi/entropy.bin
+ # we will start as root and wpa_supplicant will switch to user wifi
+ # after setting up the capabilities required for WEXT
+ # user wifi
+ # group wifi inet keystore
+ class main
+ socket wpa_wlan0 dgram 660 wifi wifi
+ disabled
+ oneshot
+
+service dhcpcd_wlan0 /system/bin/dhcpcd -ABKL
+ class late_start
+ disabled
+ oneshot
+
+service dhcpcd_p2p /system/bin/dhcpcd -ABKLG
+ class late_start
+ disabled
+ oneshot
+
+service iprenew_wlan0 /system/bin/dhcpcd -n
+ class late_start
+ disabled
+ oneshot
+
+service iprenew_p2p /system/bin/dhcpcd -n
+ class late_start
+ disabled
+ oneshot
+
+service ptt_socket_app /system/bin/ptt_socket_app -d
+ class main
+ user root
+ group root
+ disabled
+ oneshot
+
+service ptt_ffbm /system/bin/ptt_socket_app -f -d
+ user root
+ group root
+ disabled
+ oneshot
+
+service ftm_ffbm /system/bin/ftmdaemon
+ user root
+ group root
+ disabled
+ oneshot
+
+service dhcpcd_bt-pan /system/bin/dhcpcd -BKLG
+ class late_start
+ disabled
+ oneshot
+
+service iprenew_bt-pan /system/bin/dhcpcd -n
+ class late_start
+ disabled
+ oneshot
+
+service dhcpcd_bnep0 /system/bin/dhcpcd -BKLG
+ disabled
+ oneshot
+
+service dhcpcd_bnep1 /system/bin/dhcpcd -BKLG
+ disabled
+ oneshot
+
+service dhcpcd_bnep2 /system/bin/dhcpcd -BKLG
+ disabled
+ oneshot
+
+service dhcpcd_bnep3 /system/bin/dhcpcd -BKLG
+ disabled
+ oneshot
+
+service dhcpcd_bnep4 /system/bin/dhcpcd -BKLG
+ disabled
+ oneshot
+
+#for WiFi MFG(TestMode)
+service mfgloader /system/bin/mfgloader
+ class main
+ disabled
+ oneshot
+
+service wlandutservice /system/bin/wlandutservice
+ class main
+ user system
+ group wifi net_raw net_admin system inet
+ disabled
+ oneshot
+
+service macloader /system/bin/macloader
+ class main
+ oneshot
+
+on property:init.svc.macloader=stopped
+ chown system root /data/.cid.info
+ chmod 0664 /data/.cid.info
+ chown system root /data/.rev
+ chmod 0664 /data/.rev
+# end of wifi
+
+
+service loc_launcher /system/bin/loc_launcher
+ #loc_launcher will start as root and set its uid to gps
+ class late_start
+ group gps inet net_raw qcom_diag net_admin wifi
+
+service fm_dl /system/bin/sh /system/etc/init.qcom.fm.sh
+ class late_start
+ user root
+ group system
+ disabled
+ oneshot
+
+on property:crypto.driver.load=1
+ insmod /system/lib/modules/qce.ko
+ insmod /system/lib/modules/qcedev.ko
+
+service qcom-sh /system/bin/sh /init.qcom.sh
+ class late_start
+ user root
+ oneshot
+
+service qcom-post-boot /system/bin/sh /system/etc/init.qcom.post_boot.sh
+ class late_start
+ user root
+ disabled
+ oneshot
+
+service wifi-sdio-on /system/bin/sh /system/etc/init.qcom.sdio.sh
+ class late_start
+ group wifi inet
+ disabled
+ oneshot
+
+service wifi-crda /system/bin/sh /system/etc/init.crda.sh
+ class late_start
+ user root
+ disabled
+ oneshot
+
+service config-zram /system/bin/sh /system/etc/init.qcom.zram.sh
+ class late_start
+ user root
+ disabled
+ oneshot
+
+on property:sys.boot_completed=1
+ start qcom-post-boot
+ start config-zram
+
+service atfwd /system/bin/ATFWD-daemon
+ class late_start
+ user system
+ group system radio
+
+service hostapd /system/bin/hostapd -dd /data/hostapd/hostapd.conf
+ class late_start
+ user root
+ group root
+ oneshot
+ disabled
+
+on property:ro.data.large_tcp_window_size=true
+ # Adjust socket buffer to enlarge TCP receive window for high bandwidth (e.g. DO-RevB)
+ write /proc/sys/net/ipv4/tcp_adv_win_scale 2
+
+#
+# start multiple rilds based on multisim property
+#
+on property:ro.multisim.simslotcount=2
+ stop ril-daemon
+ start ril-daemon
+ start ril-daemon1
+
+on property:persist.radio.multisim.config=dsds
+ stop ril-daemon
+ start ril-daemon
+ start ril-daemon1
+
+on property:persist.radio.multisim.config=dsda
+ stop ril-daemon
+ start ril-daemon
+ start ril-daemon1
+
+#service ril-daemon2 /system/bin/rild -c 2
+# class main
+# socket rild2 stream 660 root radio
+# socket rild-debug2 stream 660 radio system
+# user root
+# disabled
+# group radio cache inet misc audio sdcard_r sdcard_rw diag qcom_diag log
+
+#service ril-daemon3 /system/bin/rild -c 3
+# class main
+# socket rild3 stream 660 root radio
+# socket rild-debug3 stream 660 radio system
+# user root
+# disabled
+# group radio cache inet misc audio sdcard_r sdcard_rw diag qcom_diag log
+
+service usb_uicc_enable /system/bin/sh /system/etc/init.qcom.uicc.sh
+ class late_start
+ user root
+ disabled
+ oneshot
+
+service usb_uicc_daemon /system/bin/usb_uicc_client
+ class main
+ user system
+ group system log net_raw
+ oneshot
+
+on property:sys.usb_uicc.enabled=1
+ start usb_uicc_enable
+
+on property:sys.usb_uicc.enabled=0
+ start usb_uicc_enable
+
+# virtual sdcard daemon running as media_rw (1023)
+service sdcard /system/bin/sdcard -u 1023 -g 1023 -l /data/media /mnt/shell/emulated
+ class late_start
+
+service fuse_sdcard1 /system/bin/sdcard -u 1023 -g 1023 -w 1023 -d /mnt/media_rw/sdcard1 /storage/sdcard1
+ class late_start
+ disabled
+
+service fuse_uicc0 /system/bin/sdcard -u 1023 -g 1023 -w 1023 -d /mnt/media_rw/uicc0 /storage/uicc0
+ class late_start
+
+service fuse_uicc1 /system/bin/sdcard -u 1023 -g 1023 -w 1023 -d /mnt/media_rw/uicc1 /storage/uicc1
+ class late_start
+ disabled
+
+service fuse_usbotg /system/bin/sdcard -u 1023 -g 1023 -w 1023 -d /mnt/media_rw/usbotg /storage/usbotg
+ class late_start
+ disabled
+
+# Binding fuse mount point to /storage/emulated/legacy
+on property:init.svc.sdcard=running
+ wait /mnt/shell/emulated/0
+ mount none /mnt/shell/emulated/0 /storage/emulated/legacy bind
+
+
+service charger /charger
+ class charger
+
+service ssr_diag /system/bin/ssr_diag
+ class late_start
+ user system
+ group system
+ disabled
+
+# Define fastmmi
+service fastmmi /system/bin/mmi
+ user root
+ group root
+ disabled
+
+service fastmmisrv /system/bin/sh /init.qcom.factory.sh
+ user root
+ disabled
+ oneshot
+
+on mmi
+ start fastmmisrv
+
+on ffbm
+ trigger early-fs
+ trigger fs
+ trigger post-fs
+ trigger post-fs-data
+
+ # Load properties from /system/ + /factory after fs mount. Place
+ # this in another action so that the load will be scheduled after the prior
+ # issued fs triggers have completed.
+ trigger load_all_props_action
+
+ trigger early-boot
+ trigger mmi
+
+service qbcharger /charger -m 1
+ disabled
+ oneshot
+
+on property:sys.qbcharger.enable=true
+ start qbcharger
+
+on property:sys.qbcharger.enable=false
+ stop qbcharger
+
+service diag_mdlog_start /system/bin/diag_mdlog
+ class late_start
+ user shell
+ group system qcom_diag sdcard_rw sdcard_r media_rw
+ disabled
+ oneshot
+
+service diag_mdlog_stop /system/bin/diag_mdlog -k
+ class late_start
+ user shell
+ group system qcom_diag sdcard_rw sdcard_r media_rw
+ disabled
+ oneshot
+
+service bms-sh /system/bin/sh /init.qcom.bms.sh
+ class core
+ user root
+ oneshot
+
+service vm_bms /system/bin/vm_bms
+ user root
+ group root
+ disabled
+
+service msm_irqbalance /system/bin/msm_irqbalance -f /system/vendor/etc/msm_irqbalance.conf
+ class core
+ user root
+ group root
+ disabled
+
+# Change IO scheduler to CFQ after boot_complete
+on property:sys.boot_completed=1
+ write /sys/block/mmcblk0/queue/scheduler cfq
diff --git a/rootdir/etc/init.qcom.sh b/rootdir/etc/init.qcom.sh
new file mode 100644
index 0000000..124a692
--- /dev/null
+++ b/rootdir/etc/init.qcom.sh
@@ -0,0 +1,212 @@
+#!/system/bin/sh
+# Copyright (c) 2009-2014, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of The Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+target=`getprop ro.board.platform`
+if [ -f /sys/devices/soc0/soc_id ]; then
+ platformid=`cat /sys/devices/soc0/soc_id`
+else
+ platformid=`cat /sys/devices/system/soc/soc0/id`
+fi
+#
+# Function to start sensors for DSPS enabled platforms
+#
+start_sensors()
+{
+ if [ -c /dev/msm_dsps -o -c /dev/sensors ]; then
+ chmod -h 775 /persist/sensors
+ chmod -h 664 /persist/sensors/sensors_settings
+ chown -h system.root /persist/sensors/sensors_settings
+
+ mkdir -p /data/misc/sensors
+ chmod -h 775 /data/misc/sensors
+
+ start sensors
+ fi
+}
+
+start_battery_monitor()
+{
+ if ls /sys/bus/spmi/devices/qpnp-bms-*/fcc_data ; then
+ chown -h root.system /sys/module/pm8921_bms/parameters/*
+ chown -h root.system /sys/module/qpnp_bms/parameters/*
+ chown -h root.system /sys/bus/spmi/devices/qpnp-bms-*/fcc_data
+ chown -h root.system /sys/bus/spmi/devices/qpnp-bms-*/fcc_temp
+ chown -h root.system /sys/bus/spmi/devices/qpnp-bms-*/fcc_chgcyl
+ chmod 0660 /sys/module/qpnp_bms/parameters/*
+ chmod 0660 /sys/module/pm8921_bms/parameters/*
+ mkdir -p /data/bms
+ chown -h root.system /data/bms
+ chmod 0770 /data/bms
+ start battery_monitor
+ fi
+}
+
+start_charger_monitor()
+{
+ if ls /sys/module/qpnp_charger/parameters/charger_monitor; then
+ chown -h root.system /sys/module/qpnp_charger/parameters/*
+ chown -h root.system /sys/class/power_supply/battery/input_current_max
+ chown -h root.system /sys/class/power_supply/battery/input_current_trim
+ chown -h root.system /sys/class/power_supply/battery/input_current_settled
+ chown -h root.system /sys/class/power_supply/battery/voltage_min
+ chmod 0664 /sys/class/power_supply/battery/input_current_max
+ chmod 0664 /sys/class/power_supply/battery/input_current_trim
+ chmod 0664 /sys/class/power_supply/battery/input_current_settled
+ chmod 0664 /sys/class/power_supply/battery/voltage_min
+ chmod 0664 /sys/module/qpnp_charger/parameters/charger_monitor
+ start charger_monitor
+ fi
+}
+
+start_msm_irqbalance_8939()
+{
+ if [ -f /system/bin/msm_irqbalance ]; then
+ case "$platformid" in
+ "239" | "241" | "263" | "268" | "269" | "270" | "271")
+ start msm_irqbalance;;
+ esac
+ fi
+}
+
+start_msm_irqbalance()
+{
+ if [ -f /system/bin/msm_irqbalance ]; then
+ start msm_irqbalance
+ fi
+}
+
+baseband=`getprop ro.baseband`
+#
+# Suppress default route installation during RA for IPV6; user space will take
+# care of this
+# exception default ifc
+for file in /proc/sys/net/ipv6/conf/*
+do
+ echo 0 > $file/accept_ra_defrtr
+done
+echo 1 > /proc/sys/net/ipv6/conf/default/accept_ra_defrtr
+
+case "$baseband" in
+ "svlte2a")
+ start bridgemgrd
+ ;;
+esac
+
+start_sensors
+
+case "$target" in
+ "msm7630_surf" | "msm7630_1x" | "msm7630_fusion")
+ if [ -f /sys/devices/soc0/hw_platform ]; then
+ value=`cat /sys/devices/soc0/hw_platform`
+ else
+ value=`cat /sys/devices/system/soc/soc0/hw_platform`
+ fi
+ case "$value" in
+ "Fluid")
+ start profiler_daemon;;
+ esac
+ ;;
+ "msm8660" )
+ if [ -f /sys/devices/soc0/hw_platform ]; then
+ platformvalue=`cat /sys/devices/soc0/hw_platform`
+ else
+ platformvalue=`cat /sys/devices/system/soc/soc0/hw_platform`
+ fi
+ case "$platformvalue" in
+ "Fluid")
+ start profiler_daemon;;
+ esac
+ ;;
+ "msm8960")
+ case "$baseband" in
+ "msm")
+ start_battery_monitor;;
+ esac
+
+ if [ -f /sys/devices/soc0/hw_platform ]; then
+ platformvalue=`cat /sys/devices/soc0/hw_platform`
+ else
+ platformvalue=`cat /sys/devices/system/soc/soc0/hw_platform`
+ fi
+ case "$platformvalue" in
+ "Fluid")
+ start profiler_daemon;;
+ "Liquid")
+ start profiler_daemon;;
+ esac
+ ;;
+ "msm8974")
+ platformvalue=`cat /sys/devices/soc0/hw_platform`
+ case "$platformvalue" in
+ "Fluid")
+ start profiler_daemon;;
+ "Liquid")
+ start profiler_daemon;;
+ esac
+ case "$baseband" in
+ "msm")
+ start_battery_monitor
+ ;;
+ esac
+ start_charger_monitor
+ ;;
+ "apq8084")
+ platformvalue=`cat /sys/devices/soc0/hw_platform`
+ case "$platformvalue" in
+ "Fluid")
+ start profiler_daemon;;
+ "Liquid")
+ start profiler_daemon;;
+ esac
+ ;;
+ "msm8226")
+ start_charger_monitor
+ ;;
+ "msm8610")
+ start_charger_monitor
+ ;;
+ "msm8916")
+ start_msm_irqbalance_8939
+ ;;
+ "msm8994")
+ start_msm_irqbalance
+ ;;
+ "msm8909")
+ ;;
+esac
+
+bootmode=`getprop ro.bootmode`
+emmc_boot=`getprop ro.boot.emmc`
+case "$emmc_boot"
+ in "true")
+ if [ "$bootmode" != "charger" ]; then # start rmt_storage and rfs_access
+ start rmt_storage
+ start rfs_access
+ fi
+ ;;
+esac
diff --git a/rootdir/etc/init.qcom.syspart_fixup.sh b/rootdir/etc/init.qcom.syspart_fixup.sh
new file mode 100644
index 0000000..661b635
--- /dev/null
+++ b/rootdir/etc/init.qcom.syspart_fixup.sh
@@ -0,0 +1,79 @@
+#!/system/bin/sh
+# Copyright (c) 2012, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of The Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+target="$1"
+serial="$2"
+
+# No path is set up at this point so we have to do it here.
+PATH=/sbin:/system/sbin:/system/bin:/system/xbin
+export PATH
+
+mount_needed=false;
+
+if [ ! -f /system/etc/boot_fixup ];then
+# This should be the first command
+# remount system as read-write.
+ mount -o rw,remount,barrier=1 /system
+ mount_needed=true;
+fi
+
+# **** WARNING *****
+# This runs in a single-threaded, critical path portion
+# of the Android bootup sequence. This is to guarantee
+# all necessary system partition fixups are done before
+# the rest of the system starts up. Run any non-
+# timing critical tasks in a separate process to
+# prevent slowdown at boot.
+
+# Run modem link script
+if [ -f /system/etc/init.qcom.modem_links.sh ]; then
+ /system/bin/sh /system/etc/init.qcom.modem_links.sh
+fi
+
+# Run mdm link script
+if [ -f /system/etc/init.qcom.mdm_links.sh ]; then
+ /system/bin/sh /system/etc/init.qcom.mdm_links.sh
+fi
+
+# Run wifi script
+if [ -f /system/etc/init.qcom.wifi.sh ]; then
+ /system/bin/sh /system/etc/init.qcom.wifi.sh "$target" "$serial"
+fi
+
+# Run the sensor script
+if [ -f /system/etc/init.qcom.sensor.sh ]; then
+ /system/bin/sh /system/etc/init.qcom.sensor.sh
+fi
+
+touch /system/etc/boot_fixup
+
+if $mount_needed ;then
+# This should be the last command
+# remount system as read-only.
+ mount -o ro,remount,barrier=1 /system
+fi
diff --git a/rootdir/etc/init.qcom.usb.rc b/rootdir/etc/init.qcom.usb.rc
new file mode 100644
index 0000000..e3001ee
--- /dev/null
+++ b/rootdir/etc/init.qcom.usb.rc
@@ -0,0 +1,1372 @@
+# Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of The Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+on init
+ write /sys/class/android_usb/android0/f_rndis/wceis 1
+ write /sys/class/android_usb/android0/iSerial ${ro.serialno}
+ chown system system /sys/class/android_usb/android0/terminal_version
+ chmod 0660 /sys/class/android_usb/android0/terminal_version
+
+on charger
+ setprop sys.usb.config mass_storage
+
+on fs
+ mkdir /dev/usb-ffs 0770 shell shell
+ mkdir /dev/usb-ffs/adb 0770 shell shell
+ mount functionfs adb /dev/usb-ffs/adb uid=2000,gid=2000
+ write /sys/class/android_usb/android0/f_ffs/aliases adb
+
+service qcom-usb-sh /system/bin/sh /init.qcom.usb.sh
+ class main
+ user root
+ oneshot
+
+# Following are the parameters required for usb functionality. They provide configurable options like
+# product_id/vendor id and allows specifying required functions:
+#
+# Required parameters:
+#
+# /sys/class/android_usb/android0/enable: Enables/disables usb composition
+# Value: 0 (disable), 1 (enable)
+#
+# /sys/class/android_usb/android0/idVendor: Stores Vendor ID
+# Value: 05c6 (Vendor id for Qualcomm Inc)
+#
+# /sys/class/android_usb/android0/idProduct: Stores Product id corresponding to usb composition
+# Value: 0x9xxx for composite interface, 0xFxxx for single interface
+#
+# /sys/class/android_usb/android0/f_diag/clients: Stores name of clients representing a diag interface.
+# Value: Passed one per interface. e.g. diag[,diag_mdm, diag_qsc, diag_mdm2]
+#
+# /sys/class/android_usb/android0/functions: Stores name of the function drivers used in usb composition.
+# Value: Passed one per function driver. e.g. diag[,adb]
+#
+#Optional parameters:
+#
+# /sys/class/android_usb/android0/f_serial/transports: Stores type of underlying transports used to
+# communicate to serial interface.
+# Value: Passed one per interface. One value represents control and data transport together.
+# e.g. smd[,sdio,tty,hsic]
+# Only required if serial interface is present.
+#
+# /sys/class/android_usb/android0/f_serial/transport_names: Stores name of the underlying transports
+# used to communicate to serial interface. This is used to distinguish between more than one interface
+# using same transport type.
+# Value: Passed one per interface. One value represents control and data transport together.
+# e.g. serial_hsic[,serial_hsusb]
+# Only required for transport type hsic, optional for other transport types.
+#
+# /sys/class/android_usb/android0/f_rmnet/transports: Stores type of underlying transports used to
+# communicate to rmnet interface.
+# Value: Passed two per interface as control, data transport type pair.
+# e.g. smd,bam[,hsuart,hsuart]
+# Only required if rmnet interface is present.
+#
+# /sys/class/android_usb/android0/f_rmnet/transport_names: Stores name of the underlying transports
+# used to communicate to rmnet interface. This is used to distinguish between more than one interface
+# using same transport type.
+# Value: Passed one per interface. One value represents control and data transport together.
+# e.g. rmnet_hsic[,rmnet_hsusb]
+# Only required for transport type hsic, optional for other transport types.
+
+
+# USB Composite for Samsung USB Driver
+
+on property:sys.usb.config=mtp,conn_gadget
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 04E8
+ write /sys/class/android_usb/android0/idProduct 6860
+ write /sys/class/android_usb/android0/f_acm/acm_transports tty
+ write /sys/class/android_usb/android0/functions mtp,acm,conn_gadget
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mtp,conn_gadget,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 04E8
+ write /sys/class/android_usb/android0/idProduct 6860
+ write /sys/class/android_usb/android0/f_acm/acm_transports tty
+ write /sys/class/android_usb/android0/functions mtp,acm,conn_gadget,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mtp
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 04E8
+ write /sys/class/android_usb/android0/idProduct 6860
+ write /sys/class/android_usb/android0/f_acm/acm_transports tty
+ write /sys/class/android_usb/android0/functions mtp,acm
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+
+on property:sys.usb.config=mtp,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 04E8
+ write /sys/class/android_usb/android0/idProduct 6860
+ write /sys/class/android_usb/android0/f_acm/acm_transports tty
+ write /sys/class/android_usb/android0/functions mtp,acm,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+
+on property:sys.usb.config=ptp
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 04E8
+ write /sys/class/android_usb/android0/idProduct 6865
+ write /sys/class/android_usb/android0/functions ptp
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=ptp,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 04E8
+ write /sys/class/android_usb/android0/idProduct 6866
+ write /sys/class/android_usb/android0/functions ptp,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=rndis
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 04E8
+ write /sys/class/android_usb/android0/idProduct 6863
+ write /sys/class/android_usb/android0/functions rndis
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=rndis,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 04E8
+ write /sys/class/android_usb/android0/idProduct 6864
+ write /sys/class/android_usb/android0/functions rndis,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=ncm
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 04e8
+ write /sys/class/android_usb/android0/idProduct 685d
+ write /sys/class/android_usb/android0/functions ncm
+ write /sys/class/android_usb/android0/bDeviceClass 2
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=ncm,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 04e8
+ write /sys/class/android_usb/android0/idProduct 685d
+ write /sys/class/android_usb/android0/functions ncm,adb
+ write /sys/class/android_usb/android0/bDeviceClass 2
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+# rndis,acm,diag and rmnet,acm,diag are used for IOT Hidden Menu
+on property:sys.usb.config=rndis,acm,diag
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 04E8
+ write /sys/class/android_usb/android0/idProduct 6864
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_acm/acm_transports tty
+ write /sys/class/android_usb/android0/functions rndis,acm,diag
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=rmnet,acm,diag
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 04E8
+ write /sys/class/android_usb/android0/idProduct 685D
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_acm/acm_transports tty
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
+ write /sys/class/android_usb/android0/functions diag,acm,rmnet
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,acm,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 04E8
+ write /sys/class/android_usb/android0/idProduct 685D
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_acm/acm_transports tty
+ write /sys/class/android_usb/android0/functions diag,acm,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+# For CDFS composite
+on property:sys.usb.config=mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 04E8
+ write /sys/class/android_usb/android0/idProduct 685B
+ write /sys/class/android_usb/android0/functions mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mass_storage,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 04E8
+ write /sys/class/android_usb/android0/idProduct 685E
+# write /sys/class/android_usb/android0/f_acm/instances 1
+ write /sys/class/android_usb/android0/f_acm/acm_transports tty
+ write /sys/class/android_usb/android0/functions mass_storage,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mass_storage,mtp
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 04E8
+ write /sys/class/android_usb/android0/idProduct 6860
+ write /sys/class/android_usb/android0/functions mtp,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mass_storage,mtp,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 04E8
+ write /sys/class/android_usb/android0/idProduct 6860
+ write /sys/class/android_usb/android0/functions mtp,mass_storage,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+# As request from the CHINA GOVERNMENT SECURITY POLICY
+on property:sys.usb.config=askon
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/functions ${sys.usb.config}
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=askon,adb
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/functions ${sys.usb.config}
+ setprop sys.usb.state ${sys.usb.config}
+
+# USB compositions
+on property:sys.usb.config=diag,serial_tty,serial_smd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9002
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports tty,smd
+ write /sys/class/android_usb/android0/functions diag,serial
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_tty,serial_smd,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9020
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd,tty
+ write /sys/class/android_usb/android0/functions diag,adb,serial
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 901D
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/functions diag,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 900E
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/functions diag
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_smd,rmnet_bam,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9091
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_smd,rmnet_qti_bam,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9091
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd
+ write /sys/class/android_usb/android0/f_rmnet/transports qti,bam
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_smd,rmnet_bam
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9092
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_smd,rmnet_qti_bam
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9092
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd
+ write /sys/class/android_usb/android0/f_rmnet/transports qti,bam
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_smd,serial_tty,rmnet_bam,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9025
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd,tty
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,acm_smd,acm_tty,rmnet_bam,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903D
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_acm/acm_transports smd,tty
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
+ write /sys/class/android_usb/android0/functions diag,adb,acm,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_smd,serial_tty,rmnet_bam,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9026
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd,tty
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,acm_smd,acm_tty,rmnet_bam,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903E
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_acm/acm_transports smd,tty
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,serial_sdio,serial_smd,rmnet_smd_sdio,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9037
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports sdio,smd
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet_smd_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,acm_sdio,acm_smd,rmnet_smd_sdio,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903B
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_acm/acm_transports sdio,smd
+ write /sys/class/android_usb/android0/functions diag,adb,acm,rmnet_smd_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,serial_sdio,serial_smd,rmnet_smd_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9038
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports sdio,smd
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet_smd_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,acm_sdio,acm_smd,rmnet_smd_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903C
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_acm/acm_transports sdio,smd
+ write /sys/class/android_usb/android0/functions diag,acm,rmnet_smd_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,serial_sdio,serial_tty,rmnet_sdio,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9031
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports sdio,tty
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,acm_sdio,acm_tty,rmnet_sdio,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903B
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_acm/acm_transports sdio,tty
+ write /sys/class/android_usb/android0/functions diag,adb,acm,rmnet_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,serial_sdio,serial_tty,rmnet_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9032
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports sdio,tty
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,acm_sdio,acm_tty,rmnet_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903C
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_acm/acm_transports sdio,tty
+ write /sys/class/android_usb/android0/functions diag,acm,rmnet_sdio,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_tty,serial_tty,rmnet_smd,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9025
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports tty,tty
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ start port-bridge
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,acm_tty,acm_tty,rmnet_smd,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903D
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_acm/acm_transports tty,tty
+ write /sys/class/android_usb/android0/functions diag,adb,acm,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ start port-bridge
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_tty,serial_tty,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9026
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports tty,tty
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start port-bridge
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,acm_tty,acm_tty,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903E
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_acm/acm_transports tty,tty
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_smd,serial_tty,rmnet_smd,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9025
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd,tty
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,acm_smd,acm_tty,rmnet_smd,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903D
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_acm/acm_transports smd,tty
+ write /sys/class/android_usb/android0/functions diag,adb,acm,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ start port-bridge
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_smd,serial_tty,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9026
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd,tty
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,acm_smd,acm_tty,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903E
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_acm/acm_transports smd,tty
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet_smd,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+# RmNet using USB BAM to IPA BAM
+on property:sys.usb.config=diag,serial_smd,serial_tty,rmnet_ipa,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9025
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd,tty
+ write /sys/class/android_usb/android0/f_rmnet/transports qti,bam2bam_ipa
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_smd,serial_tty,rmnet_ipa,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9026
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd,tty
+ write /sys/class/android_usb/android0/f_rmnet/transports qti,bam2bam_ipa
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_smd,rmnet_ipa,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9091
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd
+ write /sys/class/android_usb/android0/f_rmnet/transports qti,bam2bam_ipa
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,serial_smd,rmnet_ipa
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9092
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd
+ write /sys/class/android_usb/android0/f_rmnet/transports qti,bam2bam_ipa
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion 3 composition
+on property:sys.usb.config=diag,serial_hsic,serial_tty,rmnet_hsic,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9025
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports hsic,tty
+ write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic
+ write /sys/class/android_usb/android0/f_rmnet/transport_names rmnet_hsic
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
+ write /sys/module/mdm_bridge/parameters/rx_rmnet_buffer_size 16384
+ write /sys/module/mdm_bridge/parameters/max_rx_urbs 20
+ write /sys/module/g_android/parameters/ghsic_data_rx_req_size 16384
+ write /sys/module/g_android/parameters/ghsic_data_rmnet_rx_q_size 20
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion 3 composition with diag_mdm and adb
+on property:sys.usb.config=diag,diag_mdm,serial_hsic,serial_tty,rmnet_hsic,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9031
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports hsic,tty
+ write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic
+ write /sys/class/android_usb/android0/f_rmnet/transport_names rmnet_hsic
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
+ write /sys/module/mdm_bridge/parameters/rx_rmnet_buffer_size 16384
+ write /sys/module/mdm_bridge/parameters/max_rx_urbs 20
+ write /sys/module/g_android/parameters/ghsic_data_rx_req_size 16384
+ write /sys/module/g_android/parameters/ghsic_data_rmnet_rx_q_size 20
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion 3 composition with diag_mdm
+on property:sys.usb.config=diag,diag_mdm,serial_hsic,serial_tty,rmnet_hsic,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9032
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports hsic,tty
+ write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic
+ write /sys/class/android_usb/android0/f_rmnet/transport_names rmnet_hsic
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,mass_storage
+ write /sys/module/mdm_bridge/parameters/rx_rmnet_buffer_size 16384
+ write /sys/module/mdm_bridge/parameters/max_rx_urbs 20
+ write /sys/module/g_android/parameters/ghsic_data_rx_req_size 16384
+ write /sys/module/g_android/parameters/ghsic_data_rmnet_rx_q_size 20
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion 3 DSDA composition with adb
+on property:sys.usb.config=diag,diag_mdm,diag_qsc,serial_hsic,serial_hsuart,rmnet_hsic,rmnet_hsuart,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9065
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm,diag_qsc
+ write /sys/class/android_usb/android0/f_serial/transports hsic,hsuart
+ write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic,serial_hsuart
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic,hsuart,hsuart
+ write /sys/class/android_usb/android0/f_rmnet/transport_names rmnet_hsic,rmnet_hsuart
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
+ write /sys/module/mdm_bridge/parameters/rx_rmnet_buffer_size 16384
+ write /sys/module/mdm_bridge/parameters/max_rx_urbs 20
+ write /sys/module/g_android/parameters/ghsic_data_rx_req_size 16384
+ write /sys/module/g_android/parameters/ghsic_data_rmnet_rx_q_size 20
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion 3 DSDA composition without adb
+on property:sys.usb.config=diag,diag_mdm,diag_qsc,serial_hsic,serial_hsuart,rmnet_hsic,rmnet_hsuart,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9066
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm,diag_qsc
+ write /sys/class/android_usb/android0/f_serial/transports hsic,hsuart
+ write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic,serial_hsuart
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic,hsuart,hsuart
+ write /sys/class/android_usb/android0/f_rmnet/transport_names rmnet_hsic,rmnet_hsuart
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,mass_storage
+ write /sys/module/mdm_bridge/parameters/rx_rmnet_buffer_size 16384
+ write /sys/module/mdm_bridge/parameters/max_rx_urbs 20
+ write /sys/module/g_android/parameters/ghsic_data_rx_req_size 16384
+ write /sys/module/g_android/parameters/ghsic_data_rmnet_rx_q_size 20
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion 3 DSDA2 composition with adb
+on property:sys.usb.config=diag,diag_mdm,diag_mdm2,serial_hsic,serial_hsusb,rmnet_hsic,rmnet_hsusb,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9065
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm,diag_mdm2
+ write /sys/class/android_usb/android0/f_serial/transports hsic,hsic
+ write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic,serial_hsusb
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic,hsic,hsic
+ write /sys/class/android_usb/android0/f_rmnet/transport_names rmnet_hsic,rmnet_hsusb
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
+ write /sys/module/mdm_bridge/parameters/rx_rmnet_buffer_size 16384
+ write /sys/module/mdm_bridge/parameters/max_rx_urbs 20
+ write /sys/module/g_android/parameters/ghsic_data_rx_req_size 16384
+ write /sys/module/g_android/parameters/ghsic_data_rmnet_rx_q_size 20
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion 3 DSDA2 composition without adb
+on property:sys.usb.config=diag,diag_mdm,diag_mdm2,serial_hsic,serial_hsusb,rmnet_hsic,rmnet_hsusb,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9066
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm,diag_mdm2
+ write /sys/class/android_usb/android0/f_serial/transports hsic,hsic
+ write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic,serial_hsusb
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic,hsic,hsic
+ write /sys/class/android_usb/android0/f_rmnet/transport_names rmnet_hsic,rmnet_hsusb
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,mass_storage
+ write /sys/module/mdm_bridge/parameters/rx_rmnet_buffer_size 16384
+ write /sys/module/mdm_bridge/parameters/max_rx_urbs 20
+ write /sys/module/g_android/parameters/ghsic_data_rx_req_size 16384
+ write /sys/module/g_android/parameters/ghsic_data_rmnet_rx_q_size 20
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion PCIe composition with diag_mdm and adb
+# Serial & RmNet bridged in userspace with tty and qti/ether
+on property:sys.usb.config=diag,diag_mdm,serial_tty,rmnet_qti_ether,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9035
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports tty
+ write /sys/class/android_usb/android0/f_rmnet/transports qti,ether
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion PCIe composition with diag_mdm
+# Serial & RmNet bridged in userspace with tty and qti/ether
+on property:sys.usb.config=diag,diag_mdm,serial_hsic,rmnet_hsic,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9036
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports tty
+ write /sys/class/android_usb/android0/f_rmnet/transports qti,ether
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion HSIC/PCIe Hybrid composition with diag_mdm and adb
+# RmNet is bridged over PCIe using qti,ether ctrl/data transports
+on property:sys.usb.config=diag,diag_mdm,serial_hsic,rmnet_qti_ether,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9035
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports hsic
+ write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic
+ write /sys/class/android_usb/android0/f_rmnet/transports qti,ether
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion HSIC/PCIe Hybrid composition with diag_mdm
+# RmNet is bridged over PCIe using qti,ether ctrl/data transports
+on property:sys.usb.config=diag,diag_mdm,serial_hsic,rmnet_hsic,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9036
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_serial/transports hsic
+ write /sys/class/android_usb/android0/f_serial/transport_names serial_hsic
+ write /sys/class/android_usb/android0/f_rmnet/transports qti,ether
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion 2.2 composition with diag_qsc and adb
+on property:sys.usb.config=diag,diag_qsc,serial_smd,serial_tty,serial_hsuart,rmnet_hsuart,mass_storage,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9053
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_qsc
+ write /sys/class/android_usb/android0/f_serial/transports smd,tty,hsuart
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam,hsuart,hsuart
+ write /sys/class/android_usb/android0/functions diag,adb,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+# Fusion 2.2 composition with diag_qsc
+on property:sys.usb.config=diag,diag_qsc,serial_smd,serial_tty,serial_hsuart,rmnet_hsuart,mass_storage
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9054
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_qsc
+ write /sys/class/android_usb/android0/f_serial/transports smd,tty,hsuart
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam,hsuart,hsuart
+ write /sys/class/android_usb/android0/functions diag,serial,rmnet,mass_storage
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.tethering=true
+ write /sys/class/net/rndis0/queues/rx-0/rps_cpus ${sys.usb.rps_mask}
+
+#on property:sys.usb.config=rndis
+# setprop sys.usb.config rndis,${persist.sys.usb.config.extra}
+
+on property:sys.usb.config=rndis,none
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct F00E
+ write /sys/class/android_usb/android0/functions rndis
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state rndis
+
+#on property:sys.usb.config=rndis,adb
+# stop adbd
+# setprop sys.usb.config rndis,${persist.sys.usb.config.extra},adb
+
+on property:sys.usb.config=rndis,none,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9024
+ write /sys/class/android_usb/android0/functions rndis,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state rndis,adb
+
+on property:sys.usb.config=rndis,diag
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 902C
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/functions rndis,diag
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state rndis
+
+on property:sys.usb.config=rndis,diag,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 902D
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/functions rndis,diag,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state rndis,adb
+
+on property:sys.usb.config=rndis,serial_smd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 90B3
+ write /sys/class/android_usb/android0/f_serial/transports smd
+ write /sys/class/android_usb/android0/functions rndis,serial
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state rndis
+
+on property:sys.usb.config=rndis,serial_smd,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 90B4
+ write /sys/class/android_usb/android0/f_serial/transports smd
+ write /sys/class/android_usb/android0/functions rndis,serial,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state rndis,adb
+
+on property:sys.usb.config=rndis,serial_smd,diag
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 90B5
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd
+ write /sys/class/android_usb/android0/functions rndis,serial,diag
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state rndis
+
+on property:sys.usb.config=rndis,serial_smd,diag,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 90B6
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_serial/transports smd
+ write /sys/class/android_usb/android0/functions rndis,serial,diag,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state rndis,adb
+
+on property:sys.usb.config=rndis,diag,diag_mdm
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9041
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/functions rndis,diag
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state rndis
+
+on property:sys.usb.config=rndis,diag,diag_mdm,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9042
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/functions rndis,diag,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state rndis,adb
+
+on property:sys.usb.config=rndis,diag,diag_mdm,diag_qsc
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9086
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm,diag_qsc
+ write /sys/class/android_usb/android0/functions rndis,diag
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state rndis
+
+on property:sys.usb.config=rndis,diag,diag_mdm,diag_qsc,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9087
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm,diag_qsc
+ write /sys/class/android_usb/android0/functions rndis,diag,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state rndis,adb
+
+#on property:sys.usb.config=ptp
+# write /sys/class/android_usb/android0/enable 0
+# write /sys/class/android_usb/android0/idVendor 05C6
+# write /sys/class/android_usb/android0/idProduct 904D
+# write /sys/class/android_usb/android0/functions ptp
+# write /sys/class/android_usb/android0/enable 1
+# setprop sys.usb.state ${sys.usb.config}
+
+#on property:sys.usb.config=ptp,adb
+# stop adbd
+# write /sys/class/android_usb/android0/enable 0
+# write /sys/class/android_usb/android0/idVendor 05C6
+# write /sys/class/android_usb/android0/idProduct 904E
+# write /sys/class/android_usb/android0/functions ptp,adb
+# write /sys/class/android_usb/android0/enable 1
+# start adbd
+# setprop sys.usb.state ${sys.usb.config}
+
+#on property:sys.usb.config=mtp
+# write /sys/class/android_usb/android0/enable 0
+# write /sys/class/android_usb/android0/idVendor 05C6
+# write /sys/class/android_usb/android0/idProduct F003
+# write /sys/class/android_usb/android0/functions mtp
+# write /sys/class/android_usb/android0/enable 1
+# setprop sys.usb.state ${sys.usb.config}
+
+#on property:sys.usb.config=mtp,adb
+# stop adbd
+# write /sys/class/android_usb/android0/enable 0
+# write /sys/class/android_usb/android0/idVendor 05C6
+# write /sys/class/android_usb/android0/idProduct 9039
+# write /sys/class/android_usb/android0/functions mtp,adb
+# write /sys/class/android_usb/android0/enable 1
+# start adbd
+# setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mtp,diag
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 901B
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/functions mtp,diag
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mtp,diag,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903A
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/functions mtp,diag,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mtp,diag,diag_mdm
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9040
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/functions mtp,diag
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mtp,diag,diag_mdm,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 903F
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/functions mtp,diag,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mtp,diag,diag_mdm,diag_qsc
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9088
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm,diag_qsc
+ write /sys/class/android_usb/android0/functions mtp,diag
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=mtp,diag,diag_mdm,diag_qsc,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9089
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm,diag_qsc
+ write /sys/class/android_usb/android0/functions mtp,diag,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,ccid
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9045
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/functions diag,ccid
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,ccid,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9044
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/functions diag,adb,ccid
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+#on property:sys.usb.config=mass_storage,adb
+# stop adbd
+# write /sys/class/android_usb/android0/enable 0
+# write /sys/class/android_usb/android0/idVendor 05C6
+# write /sys/class/android_usb/android0/idProduct 9015
+# write /sys/class/android_usb/android0/functions adb,mass_storage
+# write /sys/class/android_usb/android0/enable 1
+# start adbd
+# setprop sys.usb.state ${sys.usb.config}
+
+#Mass-storage only composition
+#on property:sys.usb.config=mass_storage
+# write /sys/class/android_usb/android0/enable 0
+# write /sys/class/android_usb/android0/idVendor 05C6
+# write /sys/class/android_usb/android0/idProduct F000
+# write /sys/class/android_usb/android0/functions mass_storage
+# write /sys/class/android_usb/android0/enable 1
+# setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,qdss
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 904A
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,qdss,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9060
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,qdss
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9099
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,qdss,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9098
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss,adb
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,qdss,rmnet_bam
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9083
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss,rmnet
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,qdss,rmnet_qti_bam
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9083
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_rmnet/transports qti,bam
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss,rmnet
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,qdss,rmnet_bam,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9084
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_rmnet/transports smd,bam
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss,adb,rmnet
+ write /sys/module/dwc3/parameters/tx_fifo_resize_enable 1
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,qdss,rmnet_qti_bam,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9084
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_rmnet/transports qti,bam
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss,adb,rmnet
+ write /sys/module/dwc3/parameters/tx_fifo_resize_enable 1
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,qdss,rmnet_ipa
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9083
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_rmnet/transports qti,bam2bam_ipa
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss,rmnet
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,qdss,rmnet_ipa,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9084
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_rmnet/transports qti,bam2bam_ipa
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss,adb,rmnet
+ write /sys/module/dwc3/parameters/tx_fifo_resize_enable 1
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,qdss,rmnet_hsic
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 909B
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss,rmnet
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,qdss,rmnet_hsic,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 909A
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions diag,qdss,adb,rmnet
+ write /sys/module/dwc3/parameters/tx_fifo_resize_enable 1
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,qdss_apq,qdss_mdm,rmnet_hsic
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 90A3
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 0
+ write /sys/class/android_usb/android0/f_qdss/transports bam,hsic
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam,qdss_hsic
+ write /sys/class/android_usb/android0/functions diag,qdss,rmnet
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=diag,diag_mdm,qdss_apq,qdss_mdm,rmnet_hsic,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 90A2
+ write /sys/class/android_usb/android0/f_diag/clients diag,diag_mdm
+ write /sys/class/android_usb/android0/f_rmnet/transports hsic,hsic
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 0
+ write /sys/class/android_usb/android0/f_qdss/transports bam,hsic
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam,qdss_hsic
+ write /sys/class/android_usb/android0/functions diag,qdss,adb,rmnet
+ write /sys/module/dwc3/parameters/tx_fifo_resize_enable 1
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=rndis,diag,qdss
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9081
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions rndis,diag,qdss
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=rndis,diag,qdss,adb
+ stop adbd
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct 9082
+ write /sys/class/android_usb/android0/f_diag/clients diag
+ write /sys/class/android_usb/android0/f_qdss/debug_intf 1
+ write /sys/class/android_usb/android0/f_qdss/transports bam
+ write /sys/class/android_usb/android0/f_qdss/transport_names qdss_bam
+ write /sys/class/android_usb/android0/functions rndis,diag,qdss,adb
+ write /sys/module/dwc3/parameters/tx_fifo_resize_enable 1
+ write /sys/class/android_usb/android0/enable 1
+ start adbd
+ setprop sys.usb.state ${sys.usb.config}
+
+#on property:sys.usb.config=ncm
+# write /sys/class/android_usb/android0/enable 0
+# write /sys/class/android_usb/android0/idVendor 0525
+# write /sys/class/android_usb/android0/idProduct A4A1
+# write /sys/class/android_usb/android0/functions ncm
+# write /sys/class/android_usb/android0/enable 1
+# setprop sys.usb.state ${sys.usb.config}
+
+#on property:sys.usb.config=ncm,adb
+# stop adbd
+# write /sys/class/android_usb/android0/enable 0
+# write /sys/class/android_usb/android0/idVendor 05C6
+# write /sys/class/android_usb/android0/idProduct 908C
+# write /sys/class/android_usb/android0/functions ncm,adb
+# write /sys/class/android_usb/android0/enable 1
+# start adbd
+# setprop sys.usb.state ${sys.usb.config}
+
+on property:sys.usb.config=charging
+ write /sys/class/android_usb/android0/enable 0
+ write /sys/class/android_usb/android0/idVendor 05C6
+ write /sys/class/android_usb/android0/idProduct F006
+ write /sys/class/android_usb/android0/functions charging
+ write /sys/class/android_usb/android0/enable 1
+ setprop sys.usb.state ${sys.usb.config}
diff --git a/rootdir/etc/init.qcom.usb.sh b/rootdir/etc/init.qcom.usb.sh
new file mode 100644
index 0000000..fa041be
--- /dev/null
+++ b/rootdir/etc/init.qcom.usb.sh
@@ -0,0 +1,249 @@
+#!/system/bin/sh
+# Copyright (c) 2012, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of The Linux Foundation nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+#
+chown -h root.system /sys/devices/platform/msm_hsusb/gadget/wakeup
+chmod -h 220 /sys/devices/platform/msm_hsusb/gadget/wakeup
+
+#
+# Allow persistent usb charging disabling
+# User needs to set usb charging disabled in persist.usb.chgdisabled
+#
+target=`getprop ro.board.platform`
+usbchgdisabled=`getprop persist.usb.chgdisabled`
+case "$usbchgdisabled" in
+ "") ;; #Do nothing here
+ * )
+ case $target in
+ "msm8660")
+ echo "$usbchgdisabled" > /sys/module/pmic8058_charger/parameters/disabled
+ echo "$usbchgdisabled" > /sys/module/smb137b/parameters/disabled
+ ;;
+ "msm8960")
+ echo "$usbchgdisabled" > /sys/module/pm8921_charger/parameters/disabled
+ ;;
+ esac
+esac
+
+usbcurrentlimit=`getprop persist.usb.currentlimit`
+case "$usbcurrentlimit" in
+ "") ;; #Do nothing here
+ * )
+ case $target in
+ "msm8960")
+ echo "$usbcurrentlimit" > /sys/module/pm8921_charger/parameters/usb_max_current
+ ;;
+ esac
+esac
+
+#
+# Check ESOC for external MDM
+#
+# Note: currently only a single MDM is supported
+#
+if [ -d /sys/bus/esoc/devices ]; then
+for f in /sys/bus/esoc/devices/*; do
+ if [ -d $f ]; then
+ esoc_name=`cat $f/esoc_name`
+ if [ "$esoc_name" = "MDM9x25" -o "$esoc_name" = "MDM9x35" ]; then
+ esoc_link=`cat $f/esoc_link`
+ break
+ fi
+ fi
+done
+fi
+
+target=`getprop ro.board.platform`
+
+#
+# Allow USB enumeration with default PID/VID
+#
+baseband=`getprop ro.baseband`
+echo 1 > /sys/class/android_usb/f_mass_storage/lun/nofua
+usb_config=`getprop persist.sys.usb.config`
+case "$usb_config" in
+ "" | "adb") #USB persist config not set, select default configuration
+ case "$esoc_link" in
+ "HSIC")
+ setprop persist.sys.usb.config diag,diag_mdm,serial_hsic,serial_tty,rmnet_hsic,mass_storage,adb
+ setprop persist.rmnet.mux enabled
+ ;;
+ "HSIC+PCIe")
+ setprop persist.sys.usb.config diag,diag_mdm,serial_hsic,rmnet_qti_ether,mass_storage,adb
+ ;;
+ "PCIe")
+ setprop persist.sys.usb.config diag,diag_mdm,serial_tty,rmnet_qti_ether,mass_storage,adb
+ ;;
+ *)
+ case "$baseband" in
+ "mdm")
+ setprop persist.sys.usb.config diag,diag_mdm,serial_hsic,serial_tty,rmnet_hsic,mass_storage,adb
+ ;;
+ "mdm2")
+ setprop persist.sys.usb.config diag,diag_mdm,serial_hsic,serial_tty,rmnet_hsic,mass_storage,adb
+ ;;
+ "sglte")
+ setprop persist.sys.usb.config diag,diag_qsc,serial_smd,serial_tty,serial_hsuart,rmnet_hsuart,mass_storage,adb
+ ;;
+ "dsda" | "sglte2")
+ setprop persist.sys.usb.config diag,diag_mdm,diag_qsc,serial_hsic,serial_hsuart,rmnet_hsic,rmnet_hsuart,mass_storage,adb
+ ;;
+ "dsda2")
+ setprop persist.sys.usb.config diag,diag_mdm,diag_mdm2,serial_hsic,serial_hsusb,rmnet_hsic,rmnet_hsusb,mass_storage,adb
+ ;;
+ *)
+ case "$target" in
+ "msm8916")
+ setprop persist.sys.usb.config diag,serial_smd,rmnet_bam,adb
+ ;;
+ "msm8994")
+ setprop persist.sys.usb.config diag,serial_smd,serial_tty,rmnet_ipa,mass_storage,adb
+ ;;
+ "msm8909")
+ setprop persist.sys.usb.config diag,serial_smd,rmnet_qti_bam,adb
+ ;;
+ *)
+ setprop persist.sys.usb.config diag,serial_smd,serial_tty,rmnet_bam,mass_storage,adb
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ * ) ;; #USB persist config exists, do nothing
+esac
+
+#
+# Do target specific things
+#
+case "$target" in
+ "msm8974")
+# Select USB BAM - 2.0 or 3.0
+ echo ssusb > /sys/bus/platform/devices/usb_bam/enable
+ ;;
+ "apq8084")
+ if [ "$baseband" == "apq" ]; then
+ echo "msm_hsic_host" > /sys/bus/platform/drivers/xhci_msm_hsic/unbind
+ fi
+ ;;
+ "msm8226")
+ if [ -e /sys/bus/platform/drivers/msm_hsic_host ]; then
+ if [ ! -L /sys/bus/usb/devices/1-1 ]; then
+ echo msm_hsic_host > /sys/bus/platform/drivers/msm_hsic_host/unbind
+ fi
+ fi
+ ;;
+ "msm8994")
+ echo BAM2BAM_IPA > /sys/class/android_usb/android0/f_rndis_qc/rndis_transports
+ echo 1 > /sys/class/android_usb/android0/f_rndis_qc/max_pkt_per_xfer # Disable RNDIS UL aggregation
+ ;;
+esac
+
+#
+# set module params for embedded rmnet devices
+#
+rmnetmux=`getprop persist.rmnet.mux`
+case "$baseband" in
+ "mdm" | "dsda" | "sglte2")
+ case "$rmnetmux" in
+ "enabled")
+ echo 1 > /sys/module/rmnet_usb/parameters/mux_enabled
+ echo 8 > /sys/module/rmnet_usb/parameters/no_fwd_rmnet_links
+ echo 17 > /sys/module/rmnet_usb/parameters/no_rmnet_insts_per_dev
+ ;;
+ esac
+ echo 1 > /sys/module/rmnet_usb/parameters/rmnet_data_init
+ # Allow QMUX daemon to assign port open wait time
+ chown -h radio.radio /sys/devices/virtual/hsicctl/hsicctl0/modem_wait
+ ;;
+ "dsda2")
+ echo 2 > /sys/module/rmnet_usb/parameters/no_rmnet_devs
+ echo hsicctl,hsusbctl > /sys/module/rmnet_usb/parameters/rmnet_dev_names
+ case "$rmnetmux" in
+ "enabled") #mux is neabled on both mdms
+ echo 3 > /sys/module/rmnet_usb/parameters/mux_enabled
+ echo 8 > /sys/module/rmnet_usb/parameters/no_fwd_rmnet_links
+ echo 17 > write /sys/module/rmnet_usb/parameters/no_rmnet_insts_per_dev
+ ;;
+ "enabled_hsic") #mux is enabled on hsic mdm
+ echo 1 > /sys/module/rmnet_usb/parameters/mux_enabled
+ echo 8 > /sys/module/rmnet_usb/parameters/no_fwd_rmnet_links
+ echo 17 > /sys/module/rmnet_usb/parameters/no_rmnet_insts_per_dev
+ ;;
+ "enabled_hsusb") #mux is enabled on hsusb mdm
+ echo 2 > /sys/module/rmnet_usb/parameters/mux_enabled
+ echo 8 > /sys/module/rmnet_usb/parameters/no_fwd_rmnet_links
+ echo 17 > /sys/module/rmnet_usb/parameters/no_rmnet_insts_per_dev
+ ;;
+ esac
+ echo 1 > /sys/module/rmnet_usb/parameters/rmnet_data_init
+ # Allow QMUX daemon to assign port open wait time
+ chown -h radio.radio /sys/devices/virtual/hsicctl/hsicctl0/modem_wait
+ ;;
+esac
+
+#
+# Add support for exposing lun0 as cdrom in mass-storage
+#
+cdromname="/system/etc/cdrom_install.iso"
+platformver=`cat /sys/devices/soc0/hw_platform`
+case "$target" in
+ "msm8226" | "msm8610" | "msm8916")
+ case $platformver in
+ "QRD")
+ echo "mounting usbcdrom lun"
+ echo $cdromname > /sys/class/android_usb/android0/f_mass_storage/rom/file
+ chmod 0444 /sys/class/android_usb/android0/f_mass_storage/rom/file
+ ;;
+ esac
+ ;;
+esac
+
+#
+# Initialize RNDIS Diag option. If unset, set it to 'none'.
+#
+diag_extra=`getprop persist.sys.usb.config.extra`
+if [ "$diag_extra" == "" ]; then
+ setprop persist.sys.usb.config.extra none
+fi
+
+# soc_ids for 8916/8939 differentiation
+if [ -f /sys/devices/soc0/soc_id ]; then
+ soc_id=`cat /sys/devices/soc0/soc_id`
+else
+ soc_id=`cat /sys/devices/system/soc/soc0/id`
+fi
+
+# enable rps cpus on msm8939 target
+setprop sys.usb.rps_mask 0
+case "$soc_id" in
+ "239" | "241" | "263")
+ setprop sys.usb.rps_mask 10
+ ;;
+esac
diff --git a/rootdir/etc/init.rc b/rootdir/etc/init.rc
new file mode 100644
index 0000000..7baedbd
--- /dev/null
+++ b/rootdir/etc/init.rc
@@ -0,0 +1,1170 @@
+# Copyright (C) 2012 The Android Open Source Project
+#
+# IMPORTANT: Do not create world writable files or directories.
+# This is a common source of Android security bugs.
+#
+
+import /init.environ.rc
+import /init.usb.rc
+import /init.${ro.hardware}.rc
+import /init.${ro.zygote}.rc
+import /init.trace.rc
+import /init.carrier.rc
+# Include CM's extra init file
+import /init.cm.rc
+
+
+on early-init
+ # Set init and its forked children's oom_adj.
+ write /proc/1/oom_score_adj -1000
+
+ # Apply strict SELinux checking of PROT_EXEC on mmap/mprotect calls.
+ write /sys/fs/selinux/checkreqprot 0
+
+ # Set the security context for the init process.
+ # This should occur before anything else (e.g. ueventd) is started.
+ setcon u:r:init:s0
+
+ # Set the security context of /adb_keys if present.
+ restorecon /adb_keys
+
+ start ueventd
+
+ # create mountpoints
+ mkdir /mnt 0775 root system
+
+on init
+ sysclktz 0
+
+ loglevel 3
+
+ # SEC_SELINUX
+ # for audit message
+ chown system system /proc/avc_msg
+ chmod 0660 /proc/avc_msg
+
+ # Backward compatibility
+ symlink /system/etc /etc
+ symlink /sys/kernel/debug /d
+# permission for CHARGING
+ chown system radio /sys/class/power_supply/battery/batt_discharging_check
+ chown system radio /sys/class/power_supply/battery/batt_discharging_check_adc
+ chown system radio /sys/class/power_supply/battery/batt_discharging_ntc
+ chown system radio /sys/class/power_supply/battery/batt_discharging_ntc_adc
+ chown system radio /sys/class/power_supply/battery/batt_self_discharging_control
+
+ # Right now vendor lives on the same filesystem as system,
+ # but someday that may change.
+ symlink /system/vendor /vendor
+
+ # Create cgroup mount point for cpu accounting
+ mkdir /acct
+ mount cgroup none /acct cpuacct
+ mkdir /acct/uid
+
+ # Create cgroup mount point for memory
+ mount tmpfs none /sys/fs/cgroup mode=0750,uid=0,gid=1000
+ mkdir /sys/fs/cgroup/memory 0750 root system
+ mount cgroup none /sys/fs/cgroup/memory memory
+ write /sys/fs/cgroup/memory/memory.move_charge_at_immigrate 1
+ chown root system /sys/fs/cgroup/memory/tasks
+ chmod 0660 /sys/fs/cgroup/memory/tasks
+ mkdir /sys/fs/cgroup/memory/sw 0750 root system
+ write /sys/fs/cgroup/memory/sw/memory.swappiness 100
+ write /sys/fs/cgroup/memory/sw/memory.move_charge_at_immigrate 1
+ chown root system /sys/fs/cgroup/memory/sw/tasks
+ chmod 0660 /sys/fs/cgroup/memory/sw/tasks
+
+ mkdir /system
+ mkdir /data 0771 system system
+ mkdir /cache 0770 system cache
+ mkdir /config 0500 root root
+ mkdir /efs 0771 system radio
+
+ # See storage config details at http://source.android.com/tech/storage/
+ mkdir /mnt/shell 0700 shell shell
+ mkdir /mnt/media_rw 0700 media_rw media_rw
+ mkdir /storage 0751 root sdcard_r
+
+ # Directory for putting things only root should see.
+ mkdir /mnt/secure 0700 root root
+
+ # Directory for staging bindmounts
+ mkdir /mnt/secure/staging 0700 root root
+
+ # Directory-target for where the secure container
+ # imagefile directory will be bind-mounted
+ mkdir /mnt/secure/asec 0700 root root
+
+ # Secure container public mount points.
+ mkdir /mnt/asec 0700 root system
+ mount tmpfs tmpfs /mnt/asec mode=0755,gid=1000
+
+ # Filesystem image public mount points.
+ mkdir /mnt/obb 0700 root system
+ mount tmpfs tmpfs /mnt/obb mode=0755,gid=1000
+
+ # memory control cgroup
+ mkdir /dev/memcg 0700 root system
+ mount cgroup none /dev/memcg memory
+
+ write /proc/sys/kernel/panic_on_oops 1
+ write /proc/sys/kernel/hung_task_timeout_secs 0
+ write /proc/cpu/alignment 4
+ write /proc/sys/kernel/sched_latency_ns 10000000
+ write /proc/sys/kernel/sched_wakeup_granularity_ns 2000000
+ write /proc/sys/kernel/sched_compat_yield 1
+ write /proc/sys/kernel/sched_child_runs_first 0
+ write /proc/sys/kernel/randomize_va_space 2
+ write /proc/sys/kernel/kptr_restrict 2
+ write /proc/sys/vm/mmap_min_addr 32768
+ write /proc/sys/net/ipv4/ping_group_range "0 2147483647"
+ write /proc/sys/net/unix/max_dgram_qlen 300
+ write /proc/sys/kernel/sched_rt_runtime_us 950000
+ write /proc/sys/kernel/sched_rt_period_us 1000000
+
+ # reflect fwmark from incoming packets onto generated replies
+ write /proc/sys/net/ipv4/fwmark_reflect 1
+ write /proc/sys/net/ipv6/fwmark_reflect 1
+
+ # set fwmark on accepted sockets
+ write /proc/sys/net/ipv4/tcp_fwmark_accept 1
+
+ # Create cgroup mount points for process groups
+ mkdir /dev/cpuctl
+ mount cgroup none /dev/cpuctl cpu
+ chown system system /dev/cpuctl
+ chown system system /dev/cpuctl/tasks
+ chmod 0660 /dev/cpuctl/tasks
+ write /dev/cpuctl/cpu.shares 1024
+ write /dev/cpuctl/cpu.rt_runtime_us 950000
+ write /dev/cpuctl/cpu.rt_period_us 1000000
+
+ mkdir /dev/cpuctl/apps
+ chown system system /dev/cpuctl/apps/tasks
+ chmod 0666 /dev/cpuctl/apps/tasks
+ write /dev/cpuctl/apps/cpu.shares 1024
+ write /dev/cpuctl/apps/cpu.rt_runtime_us 800000
+ write /dev/cpuctl/apps/cpu.rt_period_us 1000000
+
+ mkdir /dev/cpuctl/apps/bg_non_interactive
+ chown system system /dev/cpuctl/apps/bg_non_interactive/tasks
+ chmod 0666 /dev/cpuctl/apps/bg_non_interactive/tasks
+ # 5.0 %
+ write /dev/cpuctl/apps/bg_non_interactive/cpu.shares 52
+ write /dev/cpuctl/apps/bg_non_interactive/cpu.rt_runtime_us 700000
+ write /dev/cpuctl/apps/bg_non_interactive/cpu.rt_period_us 1000000
+
+ # qtaguid will limit access to specific data based on group memberships.
+ # net_bw_acct grants impersonation of socket owners.
+ # net_bw_stats grants access to other apps' detailed tagged-socket stats.
+ chown root net_bw_acct /proc/net/xt_qtaguid/ctrl
+ chown root net_bw_stats /proc/net/xt_qtaguid/stats
+
+ # Allow everybody to read the xt_qtaguid resource tracking misc dev.
+ # This is needed by any process that uses socket tagging.
+ chmod 0644 /dev/xt_qtaguid
+
+ # Create location for fs_mgr to store abbreviated output from filesystem
+ # checker programs.
+ mkdir /dev/fscklogs 0770 root system
+
+ # pstore/ramoops previous console log
+ mount pstore pstore /sys/fs/pstore
+ chown system log /sys/fs/pstore/console-ramoops
+ chmod 0440 /sys/fs/pstore/console-ramoops
+
+# Healthd can trigger a full boot from charger mode by signaling this
+# property when the power button is held.
+on property:sys.boot_from_charger_mode=1
+ class_stop charger
+ trigger late-init
+
+# Load properties from /system/ + /factory after fs mount.
+on load_all_props_action
+ load_all_props
+
+# Indicate to fw loaders that the relevant mounts are up.
+on firmware_mounts_complete
+ rm /dev/.booting
+
+# Mount filesystems and start core system services.
+on late-init
+ trigger early-fs
+ trigger fs
+ trigger post-fs
+ trigger post-fs-data
+
+ # Load properties from /system/ + /factory after fs mount. Place
+ # this in another action so that the load will be scheduled after the prior
+ # issued fs triggers have completed.
+ trigger load_all_props_action
+
+ # Remove a file to wake up anything waiting for firmware.
+ trigger firmware_mounts_complete
+
+ trigger early-boot
+ trigger boot
+
+
+on post-fs
+ # once everything is setup, no need to modify /
+ mount rootfs rootfs / ro remount
+ # mount shared so changes propagate into child namespaces
+ mount rootfs rootfs / shared rec
+
+ # We chown/chmod /cache again so because mount is run as root + defaults
+ chown system cache /cache
+ chmod 0770 /cache
+ # We restorecon /cache in case the cache partition has been reset.
+ restorecon_recursive /cache
+
+ # This may have been created by the recovery system with odd permissions
+ chown system cache /cache/recovery
+ chmod 0770 /cache/recovery
+
+ #change permissions on vmallocinfo so we can grab it from bugreports
+ chown root log /proc/vmallocinfo
+ chmod 0440 /proc/vmallocinfo
+
+ chown root log /proc/slabinfo
+ chmod 0440 /proc/slabinfo
+
+ #change permissions on kmsg & sysrq-trigger so bugreports can grab kthread stacks
+ chown root system /proc/kmsg
+ chmod 0440 /proc/kmsg
+ chown root system /proc/sysrq-trigger
+ chmod 0220 /proc/sysrq-trigger
+ chown system log /proc/last_kmsg
+ chmod 0440 /proc/last_kmsg
+
+ # make the selinux kernel policy world-readable
+ chmod 0444 /sys/fs/selinux/policy
+
+ # create the lost+found directories, so as to enforce our permissions
+ mkdir /cache/lost+found 0770 root root
+
+on post-fs-data
+ # sec_efs_file
+ mkdir /efs/sec_efs 0775 radio system
+
+ # We chown/chmod /data again so because mount is run as root + defaults
+ chown system system /data
+ chmod 0771 /data
+ # We restorecon /data in case the userdata partition has been reset.
+ restorecon /data
+ restorecon_recursive /data/media
+
+ # Avoid predictable entropy pool. Carry over entropy from previous boot.
+ copy /data/system/entropy.dat /dev/urandom
+
+ # Create dump dir and collect dumps.
+ # Do this before we mount cache so eventually we can use cache for
+ # storing dumps on platforms which do not have a dedicated dump partition.
+ mkdir /data/dontpanic 0750 root log
+
+ # Collect apanic data, free resources and re-arm trigger
+ copy /proc/apanic_console /data/dontpanic/apanic_console
+ chown root log /data/dontpanic/apanic_console
+ chmod 0640 /data/dontpanic/apanic_console
+
+ copy /proc/apanic_threads /data/dontpanic/apanic_threads
+ chown root log /data/dontpanic/apanic_threads
+ chmod 0640 /data/dontpanic/apanic_threads
+
+ write /proc/apanic_console 1
+
+ # create basic filesystem structure
+ mkdir /data/misc 01771 system misc
+ mkdir /data/misc/adb 02750 system shell
+ # SEC_SELINUX
+ mkdir /data/misc/audit 02775 audit system
+ mkdir /data/misc/bluedroid 0770 bluetooth net_bt_stack
+ mkdir /data/misc/bluetooth 0770 system system
+ mkdir /data/misc/keystore 0700 keystore keystore
+ mkdir /data/misc/keychain 0771 system system
+ mkdir /data/misc/net 0750 root shell
+ mkdir /data/misc/radio 0771 system radio
+ mkdir /data/misc/sms 0770 system radio
+ mkdir /data/misc/zoneinfo 0775 system system
+ mkdir /data/misc/vpn 0770 system vpn
+ mkdir /data/misc/shared_relro 0771 shared_relro shared_relro
+ mkdir /data/misc/systemkeys 0700 system system
+ mkdir /data/misc/wifi 0770 wifi system
+ mkdir /data/misc/wifi/sockets 0770 wifi wifi
+ mkdir /data/misc/wifi/wpa_supplicant 0770 wifi wifi
+ mkdir /data/misc/wifi_share_profile 0771 wifi system
+ mkdir /data/misc/wifi_hostapd 0771 wifi system
+ mkdir /data/misc/ethernet 0770 system system
+ mkdir /data/misc/dhcp 0770 dhcp dhcp
+ mkdir /data/misc/user 0771 root root
+ # give system access to wpa_supplicant.conf for backup and restore
+ chmod 0660 /data/misc/wifi/wpa_supplicant.conf
+ chown system wifi /data/misc/wifi/wpa_supplicant.conf
+ mkdir /data/local 0751 root root
+ mkdir /data/misc/media 0700 media media
+
+ # icd
+ check_icd
+ chown system system /dev/icd
+ chmod 0644 /dev/icd
+ chown system system /dev/icdr
+ chmod 0644 /dev/icdr
+ chown system system /dev/tzic
+
+ mkdir /data/misc/radio/hatp 0755 radio system
+ # vpnclient
+ mkdir /data/misc/vpnclientd 0770 system system
+
+ # h2k permission
+ mkdir /efs/cpk 0771 radio system
+ chmod 0644 /efs/redata.bin
+ chmod 0644 /efs/cpk/redata.bin
+ chown radio radio /efs/h2k.dat
+ chown radio radio /efs/cpk/h2k.dat
+ chmod 0644 /efs/h2k.dat
+ chmod 0644 /efs/cpk/h2k.dat
+ chown system system /efs/drm/h2k
+
+ # For security reasons, /data/local/tmp should always be empty.
+ # Do not place files or directories in /data/local/tmp
+ mkdir /data/local/tmp 0771 shell shell
+ mkdir /data/data 0771 system system
+ mkdir /data/app-private 0771 system system
+ mkdir /data/app-asec 0700 root root
+ mkdir /data/app-lib 0771 system system
+ mkdir /data/app 0771 system system
+ mkdir /data/property 0700 root root
+
+ # SA, System SW, SAMSUNG
+ # create log directory
+ mkdir /data/log 0775 system log
+ chown system log /data/log
+ mkdir /data/anr 0775 system system
+ chown system system /data/anr
+ chmod 0775 /data/log
+ chmod 0775 /data/anr
+ restorecon /data/log
+ restorecon /data/anr
+
+ # create dalvik-cache, so as to enforce our permissions
+ mkdir /data/dalvik-cache 0771 root root
+ mkdir /data/dalvik-cache/profiles 0711 system system
+
+ # create resource-cache and double-check the perms
+ mkdir /data/resource-cache 0771 system system
+ chown system system /data/resource-cache
+ chmod 0771 /data/resource-cache
+
+ # create the lost+found directories, so as to enforce our permissions
+ mkdir /data/lost+found 0770 root root
+
+ # create directory for DRM plug-ins - give drm the read/write access to
+ # the following directory.
+ mkdir /data/drm 0770 drm drm
+
+ # create directory for MediaDrm plug-ins - give drm the read/write access to
+ # the following directory.
+ mkdir /data/mediadrm 0770 mediadrm mediadrm
+
+# DRK permission
+ mkdir /efs/prov 0770 radio system
+ mkdir /efs/prov_data 0770 radio system
+ chown radio system /efs/prov_data/dev_root
+ chmod 0770 /efs/prov_data/dev_root
+ chown radio system /efs/prov_data/dev_root/dev_root.dat
+ chmod 0640 /efs/prov_data/dev_root/dev_root.dat
+ chown radio system /efs/prov/libdevkm.lock
+ chmod 0660 /efs/prov/libdevkm.lock
+ rm /efs/prov/prov.b00
+ rm /efs/prov/prov.b01
+ rm /efs/prov/prov.b02
+ rm /efs/prov/prov.b03
+ rm /efs/prov/prov.mdt
+# CS socket
+ mkdir /dev/socket/cs_socket 0770 system system
+
+# [ SEC_MM_DRM
+ # Added drm folder to copy drm plugins
+ mkdir /system/lib/drm 0775
+ chown root root /system/lib/drm
+ chmod 0775 /system/lib/drm
+
+ restorecon -R /efs
+ restorecon -R /carrier
+ restorecon_recursive /data/misc/keystore
+ restorecon_recursive /data/property
+ restorecon_recursive /data/security
+# ]
+
+ # symlink to bugreport storage location
+ symlink /data/data/com.android.shell/files/bugreports /data/bugreports
+
+ # Separate location for storing security policy files on data
+ mkdir /data/security 0711 system system
+
+ # Reload policy from /data/security if present.
+ setprop selinux.reload_policy 1
+
+ # SA, System SW, SAMSUNG create log directory
+ mkdir /data/log 0775 system log
+ chown system log /data/log
+ mkdir /data/anr 0775 system system
+ chown system system /data/anr
+ chmod 0775 /data/log
+ chmod 0775 /data/anr
+ restorecon /data/log
+ restorecon /data/anr
+
+ # Set SELinux security contexts on upgrade or policy update.
+ restorecon_recursive /data
+ restorecon /data/data
+ restorecon /data/user
+ restorecon /data/user/0
+
+ # If there is no fs-post-data action in the init.<device>.rc file, you
+ # must uncomment this line, otherwise encrypted filesystems
+ # won't work.
+ # Set indication (checked by vold) that we have finished this action
+ #setprop vold.post_fs_data_done 1
+
+on boot
+ # basic network init
+ ifup lo
+ hostname localhost
+ domainname localdomain
+
+ # set RLIMIT_NICE to allow priorities from 19 to -20
+ setrlimit 13 40 40
+
+ # Memory management. Basic kernel parameters, and allow the high
+ # level system server to be able to adjust the kernel OOM driver
+ # parameters to match how it is managing things.
+ write /proc/sys/vm/overcommit_memory 1
+ write /proc/sys/vm/min_free_order_shift 4
+ chown root system /sys/module/lowmemorykiller/parameters/adj
+ chmod 0220 /sys/module/lowmemorykiller/parameters/adj
+ chown root system /sys/module/lowmemorykiller/parameters/minfree
+ chmod 0220 /sys/module/lowmemorykiller/parameters/minfree
+
+ # Tweak background writeout
+ write /proc/sys/vm/dirty_expire_centisecs 200
+ write /proc/sys/vm/dirty_background_ratio 5
+
+# SEC DVFS sysfs node
+ chown radio system /sys/power/cpufreq_max_limit
+ chown radio system /sys/power/cpufreq_min_limit
+ chown radio system /sys/power/cpufreq_table
+ chmod 664 /sys/power/cpufreq_max_limit
+ chmod 664 /sys/power/cpufreq_min_limit
+ chmod 664 /sys/power/cpufreq_table
+
+ chown radio system /sys/devices/system/cpu/kernel_max
+ chmod 664 /sys/devices/system/cpu/kernel_max
+
+ chown radio system /sys/class/kgsl/kgsl-3d0/max_pwrlevel
+ chmod 664 /sys/class/kgsl/kgsl-3d0/max_pwrlevel
+ chown radio system /sys/class/kgsl/kgsl-3d0/min_pwrlevel
+ chmod 664 /sys/class/kgsl/kgsl-3d0/min_pwrlevel
+ chown radio system /sys/class/kgsl/kgsl-3d0/gpu_available_frequencies
+ chmod 664 /sys/class/kgsl/kgsl-3d0/gpu_available_frequencies
+
+# Permissions for SSRM
+ chmod 0664 /sys/devices/platform/sec-thermistor/temperature
+ chmod 0664 /sys/class/power_supply/battery/siop_level
+ chmod 0664 /sys/class/power_supply/battery/test_charge_current
+ chown radio system /sys/devices/platform/sec-thermistor/temperature
+ chown radio system /sys/class/power_supply/battery/siop_level
+ chown radio system /sys/class/power_supply/battery/test_charge_current
+
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/timer_rate
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/timer_rate
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/timer_slack
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/timer_slack
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/min_sample_time
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/min_sample_time
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/target_loads
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/target_loads
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/boost
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/boost
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/boostpulse
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/input_boost
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/input_boost
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/boostpulse_duration
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/boostpulse_duration
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/io_is_busy
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/io_is_busy
+
+ # Assume SMP uses shared cpufreq policy for all CPUs
+ chown system system /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
+ chmod 0660 /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
+
+ chown system system /sys/class/timed_output/vibrator/enable
+ chown system system /sys/class/leds/keyboard-backlight/brightness
+ chown system system /sys/class/leds/lcd-backlight/brightness
+ chown system system /sys/class/leds/button-backlight/brightness
+ chown system system /sys/class/leds/jogball-backlight/brightness
+ chown system system /sys/class/leds/red/brightness
+ chown system system /sys/class/leds/green/brightness
+ chown system system /sys/class/leds/blue/brightness
+ chown system system /sys/class/leds/red/device/grpfreq
+ chown system system /sys/class/leds/red/device/grppwm
+ chown system system /sys/class/leds/red/device/blink
+ chown system system /sys/class/timed_output/vibrator/enable
+ chown system system /sys/module/sco/parameters/disable_esco
+ chown system system /sys/kernel/ipv4/tcp_wmem_min
+ chown system system /sys/kernel/ipv4/tcp_wmem_def
+ chown system system /sys/kernel/ipv4/tcp_wmem_max
+ chown system system /sys/kernel/ipv4/tcp_rmem_min
+ chown system system /sys/kernel/ipv4/tcp_rmem_def
+ chown system system /sys/kernel/ipv4/tcp_rmem_max
+ chown root radio /proc/cmdline
+
+# Auto Brightness
+ chown system system /sys/class/backlight/panel/auto_brightness
+ chmod 0660 /sys/class/backlight/panel/auto_brightness
+
+# LCD mdnie and panel work
+ chown system system /sys/class/mdnie/mdnie/lcdtype
+ chown system system /sys/class/mdnie/mdnie/lcd_power
+ chown system media_rw /sys/class/mdnie/mdnie/scenario
+ chmod 0660 /sys/class/mdnie/mdnie/scenario
+
+ chown system system /sys/class/mdnie/mdnie/tuning
+ chown system media_rw /sys/class/mdnie/mdnie/outdoor
+ chown system system /sys/class/mdnie/mdnie/mdnie_temp
+ chown system media_rw /sys/class/mdnie/mdnie/mode
+ chown system system /sys/class/mdnie/mdnie/negative
+ chown system media_rw /sys/class/mdnie/mdnie/playspeed
+ chown system media_rw /sys/class/mdnie/mdnie/accessibility
+ chown system system /sys/class/mdnie/mdnie/cabc
+ chown system system /sys/class/mdnie/mdnie/bypass
+ chown system media_rw /sys/class/mdnie/mdnie/sensorRGB
+ chmod 0660 /sys/class/mdnie/mdnie/sensorRGB
+
+ chown system system /sys/class/lcd/panel/panel/auto_brightness
+ chown system system /sys/class/lcd/panel/window_type
+ chown radio system /sys/class/lcd/panel/power_reduce
+ chown radio system /sys/class/lcd/panel/siop_enable
+ chown radio system /sys/class/lcd/panel/temperature
+ chown radio system /sys/class/lcd/panel/tuning
+ chown radio system /sys/class/lcd/panel/lux
+
+# Adjust YUV to RGB Conversion(CSC_Conversion)
+ chown system media_rw /sys/class/graphics/fb0/csc_cfg
+ chmod 0660 /sys/class/graphics/fb0/csc_cfg
+
+# permission for Input Device(TSP).
+ chown system radio /sys/class/sec/tsp/cmd
+ chmod 0660 /sys/class/sec/tsp/input/enabled
+ chown system system /sys/class/sec/tsp/input/enabled
+
+# permission for Input Device(TKEY).
+ chmod 0660 /sys/class/sec/sec_touchkey/input/enabled
+ chown system system /sys/class/sec/sec_touchkey/input/enabled
+
+# permission for TKEY LED EN
+ chmod 0660 /sys/class/sec/sec_touchkey/brightness
+ chown system system /sys/class/sec/sec_touchkey/brightness
+
+# Permissions for gpio_keys
+ chown system radio /sys/class/sec/sec_key/wakeup_keys
+ write /sys/class/sec/sec_key/wakeup_keys 116,172
+
+ # Permissions for System Server and daemons.
+ chown radio system /sys/android_power/state
+ chown radio system /sys/android_power/request_state
+ chown radio system /sys/android_power/acquire_full_wake_lock
+ chown radio system /sys/android_power/acquire_partial_wake_lock
+ chown radio system /sys/android_power/release_wake_lock
+ chown system system /sys/power/autosleep
+ chown system system /sys/power/state
+ chown system system /sys/power/wakeup_count
+ chown radio system /sys/power/wake_lock
+ chown radio system /sys/power/wake_unlock
+ chmod 0660 /sys/power/state
+ chmod 0660 /sys/power/wake_lock
+ chmod 0660 /sys/power/wake_unlock
+ chown system system /sys/module/msm_thermal/core_control/enabled
+
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/timer_rate
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/timer_rate
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/timer_slack
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/timer_slack
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/min_sample_time
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/min_sample_time
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/target_loads
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/target_loads
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/boost
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/boost
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/boostpulse
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/input_boost
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/input_boost
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/boostpulse_duration
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/boostpulse_duration
+ chown system system /sys/devices/system/cpu/cpufreq/interactive/io_is_busy
+ chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/io_is_busy
+
+ # Assume SMP uses shared cpufreq policy for all CPUs
+ chown system system /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
+ chmod 0660 /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
+
+ chown system system /sys/class/timed_output/vibrator/enable
+ chown system system /sys/class/leds/keyboard-backlight/brightness
+ chown system system /sys/class/leds/lcd-backlight/brightness
+ chown system system /sys/class/leds/torch-light/brightness
+ chown system system /sys/class/leds/button-backlight/brightness
+ chown system system /sys/class/leds/jogball-backlight/brightness
+ chown system system /sys/class/leds/red/brightness
+ chown system system /sys/class/leds/green/brightness
+ chown system system /sys/class/leds/blue/brightness
+ chown system system /sys/class/leds/red/device/grpfreq
+ chown system system /sys/class/leds/red/device/grppwm
+ chown system system /sys/class/leds/red/device/blink
+ chown system system /sys/class/timed_output/vibrator/enable
+ chown system system /sys/module/sco/parameters/disable_esco
+ chown system system /sys/kernel/ipv4/tcp_wmem_min
+ chown system system /sys/kernel/ipv4/tcp_wmem_def
+ chown system system /sys/kernel/ipv4/tcp_wmem_max
+ chown system system /sys/kernel/ipv4/tcp_rmem_min
+ chown system system /sys/kernel/ipv4/tcp_rmem_def
+ chown system system /sys/kernel/ipv4/tcp_rmem_max
+ chown root radio /proc/cmdline
+# NFC_SLSI
+ chmod 0660 /dev/sec-nfc
+ chown nfc nfc /dev/sec-nfc
+ mkdir /data/nfc 0700 nfc nfc
+ mkdir /data/nfc/param 0700 nfc nfc
+
+# Permissions for Camera
+ chown root system /sys/class/camera/rear/rear_camantibanding
+ chown system system /sys/class/camera/rear/rear_camfw
+ chown system system /sys/class/camera/rear/rear_checkfw_user
+ chown system system /sys/class/camera/rear/rear_checkfw_factory
+ chown system system /sys/class/camera/rear/rear_camfw_full
+ chown system system /sys/class/camera/rear/rear_camfw_load
+ chown system system /sys/class/camera/rear/rear_camtype
+ chown system radio /sys/class/camera/rear/rear_corever
+ chown system radio /sys/class/camera/rear/rear_companionfw_full
+ chown system radio /sys/class/camera/rear/rear_calcheck
+ chown system radio /sys/class/camera/rear/rear_fwcheck
+ chown system system /sys/class/camera/rear/isp_core
+ chown system radio /sys/class/camera/flash/rear_flash
+ chown system radio /sys/class/camera/flash/front_flash
+ chown system system /sys/class/camera/front/front_camfw
+ chown system system /sys/class/camera/front/front_camtype
+ chown system system /sys/class/camera/front/front_camfw_full
+ chown system system /sys/class/camera/front/front_camfw_load
+
+#OTG Test
+ chown system radio /sys/class/host_notify/usb_otg/booster
+ chmod 0660 /sys/class/host_notify/usb_otg/booster
+ chown system radio /sys/class/usb_notify/usb_control/disable
+ chmod 0660 /sys/class/usb_notify/usb_control/disable
+# Accelerometer_sensor
+ chown system radio /sys/class/sensors/accelerometer_sensor/raw_data
+ chown system radio /sys/class/sensors/accelerometer_sensor/calibration
+ chown system radio /sys/class/sensors/accelerometer_sensor/reactive_alert
+ chown system radio /sys/class/sensors/accelerometer_sensor/vendor
+ chown system radio /sys/class/sensors/accelerometer_sensor/name
+ chown system radio /sys/class/sensors/accelerometer_sensor/selftest
+ chown system radio /sys/class/sensors/accelerometer_sensor/lowpassfilter
+# Proximity_sensor
+ chown system radio /sys/class/sensors/proximity_sensor/state
+ chown system radio /sys/class/sensors/proximity_sensor/raw_data
+ chown system radio /sys/class/sensors/proximity_sensor/prox_avg
+ chown system radio /sys/class/sensors/proximity_sensor/prox_cal
+ chown system radio /sys/class/sensors/proximity_sensor/vendor
+ chown system radio /sys/class/sensors/proximity_sensor/name
+ chown system radio /sys/class/sensors/proximity_sensor/thresh_high
+ chown system radio /sys/class/sensors/proximity_sensor/thresh_low
+ chown system radio /sys/class/sensors/proximity_sensor/prox_offset_pass
+ chown system radio /sys/class/sensors/proximity_sensor/prox_trim
+# Light_sensor
+ chown system radio /sys/class/sensors/light_sensor/lux
+ chown system radio /sys/class/sensors/light_sensor/raw_data
+ chown system radio /sys/class/sensors/light_sensor/vendor
+ chown system radio /sys/class/sensors/light_sensor/name
+# Gyro_sensor
+ chown system radio /sys/class/sensors/gyro_sensor/power_on
+ chown system radio /sys/class/sensors/gyro_sensor/power_off
+ chown system radio /sys/class/sensors/gyro_sensor/temperature
+ chown system radio /sys/class/sensors/gyro_sensor/selftest
+ chown system radio /sys/class/sensors/gyro_sensor/vendor
+ chown system radio /sys/class/sensors/gyro_sensor/name
+# Magnetic_sensor
+ chown system radio /sys/class/sensors/magnetic_sensor/selftest
+ chown system radio /sys/class/sensors/magnetic_sensor/raw_data
+ chown system radio /sys/class/sensors/magnetic_sensor/adc
+ chown system radio /sys/class/sensors/magnetic_sensor/vendor
+ chown system radio /sys/class/sensors/magnetic_sensor/name
+ chown system radio /sys/class/sensors/magnetic_sensor/status
+# MetaEvent
+ chown system radio /sys/class/sensors/sensor_dev/flush
+
+# Permissions for Charging
+ mkdir /efs/Battery 0775 radio system
+ chown system radio /sys/class/power_supply/battery/batt_reset_soc
+ chown system radio /sys/class/power_supply/battery/update
+ chown system radio /sys/class/power_supply/battery/factory_mode
+ chown system radio /sys/class/power_supply/battery/batt_slate_mode
+ chown sdcard_rw sdcard_rw /sys/class/power_supply/battery/call
+ chown sdcard_rw sdcard_rw /sys/class/power_supply/battery/video
+ chown sdcard_rw sdcard_rw /sys/class/power_supply/battery/music
+ chown sdcard_rw sdcard_rw /sys/class/power_supply/battery/browser
+ chown sdcard_rw sdcard_rw /sys/class/power_supply/battery/hotspot
+ chown sdcard_rw sdcard_rw /sys/class/power_supply/battery/camera
+ chown system radio /sys/class/power_supply/battery/talk_wcdma
+ chown system radio /sys/class/power_supply/battery/talk_gsm
+ chown system radio /sys/class/power_supply/battery/call
+ chown system radio /sys/class/power_supply/battery/data_call
+ chown system radio /sys/class/power_supply/battery/gps
+ chown system radio /sys/class/power_supply/battery/wifi
+ chown system radio /sys/class/power_supply/battery/lte
+ chown system radio /sys/class/power_supply/battery/wc_enable
+ chown system radio /sys/class/power_supply/battery/lcd
+ chown system radio /sys/class/power_supply/ps/status
+ chmod 0664 /sys/class/power_supply/ps/status
+ chown system radio /sys/class/power_supply/battery/batt_temp_table
+
+ # Define default initial receive window size in segments.
+ setprop net.tcp.default_init_rwnd 60
+
+ write /sys/block/mmcblk0/queue/scheduler noop
+ copy /system/etc/battery_charging_temp.data /sys/class/power_supply/battery/batt_temp_table
+
+ class_start core
+
+# Permission for fast dormancy for RIL
+ chown system radio /sys/devices/virtual/sec/bamdmux/waketime
+
+# Permission for a RPMB checking thru IMEI
+ chown system radio /sys/kernel/debug/tzdbg/log
+
+# MTP permission
+ chmod 0660 /dev/usb_mtp_gadget
+ chown system mtp /dev/usb_mtp_gadget
+ mkdir /dev/socket/mtp 0770 system mtp
+
+on nonencrypted
+ class_start main
+ class_start late_start
+
+on property:vold.decrypt=trigger_default_encryption
+ start defaultcrypto
+
+on property:vold.decrypt=trigger_encryption
+ start surfaceflinger
+ start encrypt
+
+on property:sys.init_log_level=*
+ loglevel ${sys.init_log_level}
+
+on charger
+ mount ext4 /dev/block/bootdevice/by-name/system /system wait ro
+ copy /system/etc/battery_charging_temp.data /sys/class/power_supply/battery/batt_temp_table
+
+ wait /dev/block/bootdevice/by-name/efs
+ check_fs /dev/block/bootdevice/by-name/efs ext4
+ mount ext4 /dev/block/bootdevice/by-name/efs /efs nosuid nodev noatime noauto_da_alloc,discard,journal_async_commit,errors=panic
+ chown system radio /efs
+ chmod 0771 /efs
+ mkdir /efs/Battery 0775 radio system
+
+ class_start charger
+
+
+on property:vold.decrypt=trigger_reset_main
+ class_reset main
+
+on property:vold.decrypt=trigger_load_persist_props
+ load_persist_props
+
+on property:vold.decrypt=trigger_post_fs_data
+ trigger post-fs-data
+
+on property:vold.decrypt=trigger_restart_min_framework
+ class_start main
+
+on property:vold.decrypt=trigger_restart_framework
+ class_start main
+ class_start late_start
+ start keystore
+
+on property:vold.decrypt=trigger_shutdown_framework
+ class_reset late_start
+ class_reset main
+
+on property:sys.powerctl=*
+ powerctl ${sys.powerctl}
+
+# system server cannot write to /proc/sys files,
+# and chown/chmod does not work for /proc/sys/ entries.
+# So proxy writes through init.
+on property:sys.sysctl.extra_free_kbytes=*
+ write /proc/sys/vm/extra_free_kbytes ${sys.sysctl.extra_free_kbytes}
+
+# "tcp_default_init_rwnd" Is too long!
+on property:sys.sysctl.tcp_def_init_rwnd=*
+ write /proc/sys/net/ipv4/tcp_default_init_rwnd ${sys.sysctl.tcp_def_init_rwnd}
+
+
+## Daemon processes to be run by init.
+##
+
+service ueventd /sbin/ueventd
+ class core
+ critical
+ seclabel u:r:ueventd:s0
+
+service logd /system/bin/logd
+ class core
+ socket logd stream 0666 logd logd
+ socket logdr seqpacket 0666 logd logd
+ socket logdw dgram 0222 logd logd
+ seclabel u:r:logd:s0
+
+service healthd /sbin/healthd
+ class core
+ critical
+ seclabel u:r:healthd:s0
+
+service lpm /system/bin/lpm
+ class charger
+ critical
+#start SEC_PRODUCT_FEATURE_COMMON_SUPPORT_SE_FOR_ANDROID
+# Reload SE Android Policy for MDM
+on property:persist.security.mdm.policy=1
+ setprop selinux.reload_policy 1
+#end SEC_PRODUCT_FEATURE_COMMON_SUPPORT_SE_FOR_ANDROID
+
+service console /system/bin/sh
+ class core
+ console
+ disabled
+ user shell
+ group shell log
+ seclabel u:r:shell:s0
+
+## WTL_EDM_START
+## EDM AuditLog
+service edmaudit /system/bin/edmaudit
+ class main
+ user root
+
+## WTL_EDM_END
+service auditd /system/bin/auditd -k
+ seclabel u:r:logd:s0
+ class main
+# SEC_LINUX DRS Service
+service drsd /system/bin/drsd
+ class main
+ socket drsd stream 600 system system
+
+
+service prepare_param /system/bin/prepare_param.sh /dev/block/platform/7824900.sdhci/by-name/param
+ class core
+ user root
+ group root
+ seclabel u:r:prepare_param:s0
+ oneshot
+
+# icd
+service icd /system/bin/icd
+ class main
+ user system
+ group system log
+ onrestart check_icd
+ oneshot
+
+on property:ro.debuggable=1
+ start console
+
+# SEC_SELINUX
+on property:selinux.reload_policy=1
+ chown system system /sys/fs/selinux/enforce
+ chown -R system system /sys/fs/selinux/booleans
+ chown system system /sys/fs/selinux/commit_pending_bools
+
+# SEC_SELINUX to support spota
+on property:selinux.sec.restorecon=1
+ restorecon_recursive /data/security/spota
+
+# SEC_SELINUX
+on property:init.svc.bootanim=stopped
+ start auditd
+
+# adbd is controlled via property triggers in init.<platform>.usb.rc
+service adbd /sbin/adbd --root_seclabel=u:r:su:s0
+ class core
+ socket adbd stream 660 system system
+ disabled
+ seclabel u:r:adbd:s0
+
+# adbd on at boot in emulator
+on property:ro.kernel.qemu=1
+ start adbd
+
+service lmkd /system/bin/lmkd
+ class core
+ critical
+ socket lmkd seqpacket 0660 system system
+
+service scs /system/bin/scs
+ class main
+ user system
+ group system
+ oneshot
+
+service servicemanager /system/bin/servicemanager
+ class core
+ user system
+ group system
+ critical
+ onrestart restart healthd
+ onrestart restart zygote
+ onrestart restart media
+ onrestart restart surfaceflinger
+ onrestart restart drm
+ onrestart restart sensorhubservice
+ onrestart restart keystore
+
+service vold /system/bin/vold
+ class core
+ socket vold stream 0660 root mount
+## Samsung ODE >>>
+ socket dir_enc_report stream 0660 root mount
+## Samsung ODE <<<
+ ioprio be 2
+
+## Frigatebird
+ socket frigate stream 0660 system system
+
+service epmd /system/bin/epmd
+ class main
+ socket epm stream 0660 system system
+ socket ppm stream 0660 system system
+ ioprio be 2
+
+service netd /system/bin/netd
+ class main
+ socket netd stream 0660 root system
+ socket dnsproxyd stream 0660 root inet
+ socket mdns stream 0660 root system
+ socket fwmarkd stream 0660 root inet
+
+service debuggerd /system/bin/debuggerd
+ class main
+
+service ril-daemon /system/bin/rild
+ class main
+ socket rild stream 660 root radio
+ socket rild-debug stream 660 radio system
+ user root
+ group radio cache inet misc audio sdcard_rw qcom_diag log
+
+service surfaceflinger /system/bin/surfaceflinger
+ class core
+ user system
+ group graphics drmrpc
+ onrestart restart zygote
+
+service DR-daemon /system/bin/ddexe
+ class main
+ user root
+ group system radio inet net_raw
+
+service SMD-daemon /system/bin/smdexe
+ class main
+ user root
+ group system radio inet net_raw
+
+service BCS-daemon /system/bin/connfwexe
+ class main
+ user root
+ group system radio inet net_raw
+
+service drm /system/bin/drmserver
+ class main
+ user drm
+# [ SEC_MM_DRM
+# fix
+ group drm system inet drmrpc radio
+# org
+# group drm system inet drmrpc
+# ]
+
+service media /system/bin/mediaserver
+ class main
+ user media
+ group system audio camera inet net_bt net_bt_admin net_raw net_bw_acct drmrpc mediadrm qcom_diag radio media_rw
+ ioprio rt 4
+
+# One shot invocation to deal with encrypted volume.
+service defaultcrypto /system/bin/vdc --wait cryptfs mountdefaultencrypted
+ disabled
+ oneshot
+ # vold will set vold.decrypt to trigger_restart_framework (default
+ # encryption) or trigger_restart_min_framework (other encryption)
+
+# One shot invocation to encrypt unencrypted volumes
+service encrypt /system/bin/vdc --wait cryptfs enablecrypto inplace default
+ disabled
+ oneshot
+ # vold will set vold.decrypt to trigger_restart_framework (default
+ # encryption)
+
+service bootanim /system/bin/bootanimation
+ class core
+ user graphics
+ group graphics audio
+ disabled
+ oneshot
+
+service installd /system/bin/installd
+ class main
+ socket installd stream 600 system system
+
+service flash_recovery /system/bin/install-recovery.sh
+ class main
+ seclabel u:r:install_recovery:s0
+ oneshot
+ disabled
+
+# update recovery if enabled
+on property:persist.sys.recovery_update=true
+ start flash_recovery
+
+service racoon /system/bin/racoon
+ class main
+ socket racoon stream 600 system system
+ # IKE uses UDP port 500. Racoon will setuid to vpn after binding the port.
+ group vpn net_admin inet
+ disabled
+ oneshot
+
+service mtpd /system/bin/mtpd
+ class main
+ socket mtpd stream 600 system system
+ user vpn
+ group vpn net_admin inet net_raw
+ disabled
+ oneshot
+
+service keystore /system/bin/keystore /data/misc/keystore
+ class main
+ user keystore
+ group keystore drmrpc system
+ disabled
+
+service dumpstate /system/bin/dumpstate -s
+ class main
+ socket dumpstate stream 0660 shell log
+ disabled
+ oneshot
+
+service mdnsd /system/bin/mdnsd
+ class main
+ user mdnsr
+ group inet net_raw
+ socket mdnsd stream 0660 mdnsr inet
+ disabled
+ oneshot
+
+service pre-recovery /system/bin/uncrypt
+ class main
+ disabled
+ oneshot
+
+# otp
+service otp /system/bin/otp_server
+ user system
+ group system
+ disabled
+
+on property:persist.security.tlc.otp=1
+ start otp
+ setprop persist.security.tlc.otp 0
+
+# ccm
+ service ccm /system/bin/tlc_server
+ user system
+ group system
+ disabled
+
+on property:persist.security.tlc.ccm=1
+ start ccm
+ setprop persist.security.tlc.ccm 0
+
+# tui
+ service tui /system/bin/tlc_server TUI
+ user system
+ group system
+ disabled
+
+on property:persist.security.tlc.tui=1
+ start tui
+ setprop persist.security.tlc.tui 0
+
+# CS DAEMON
+service cs_service /system/bin/cs
+ class main
+ user system
+ group system
+ disabled
+
+# insthk
+service insthk /system/bin/insthk
+ class main
+ user root
+ disabled
+ oneshot
+
+on property:sys.qseecomd.enable=true
+ start cs_service
+ start keystore
+ start insthk
+
+service mcStarter /system/bin/tbaseLoader tbase
+ class core
+ user root
+ group root
+ disabled
+ oneshot
+
+service run-mobicore /system/bin/mcDriverDaemon
+ class core
+ user system
+ group system
+ disabled
+
+on property:sys.qseecomd.enable=true
+ start mcStarter
+
+on property:sys.mobicore.loaded=true
+ start run-mobicore
+
+on property:sys.boot_completed=1
+ write /sys/block/mmcblk0/queue/scheduler cfq
+
+# icd
+on property:init.svc.media=restarting
+ check_icd
+ start icd
+
+# Activate Background Compaction
+on property:sys.sysctl.compact_memory=1
+ write /proc/sys/vm/compact_memory 1
+ setprop sys.sysctl.compact_memory=0
diff --git a/rootdir/etc/init.target.rc b/rootdir/etc/init.target.rc
new file mode 100644
index 0000000..68bb568
--- /dev/null
+++ b/rootdir/etc/init.target.rc
@@ -0,0 +1,177 @@
+# Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of The Linux Foundation nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+#
+
+on early-init
+ mkdir /firmware 0771 system system
+ mkdir /firmware-modem 0771 system system
+ mkdir /system 0777 root root
+ symlink /data/tombstones /tombstones
+
+# import cne init file
+#on post-fs
+# export LD_PRELOAD /vendor/lib/libNimsWrap.so
+
+on fs
+ mount_all fstab.qcom
+
+ # Keeping following partitions outside fstab file. As user may not have
+ # these partition flashed on the device. Failure to mount any partition in fstab file
+ # results in failure to launch late-start class.
+
+ wait /dev/block/bootdevice/by-name/cache
+ check_fs /dev/block/bootdevice/by-name/cache ext4
+ mount ext4 /dev/block/bootdevice/by-name/cache /cache nosuid nodev noatime noauto_da_alloc,discard,journal_async_commit,errors=panic
+
+ wait /dev/block/bootdevice/by-name/persist
+ check_fs /dev/block/bootdevice/by-name/persist ext4
+ mount ext4 /dev/block/bootdevice/by-name/persist /persist nosuid nodev noatime noauto_da_alloc,discard,journal_async_commit,errors=panic
+
+ wait /dev/block/bootdevice/by-name/efs
+ check_fs /dev/block/bootdevice/by-name/efs ext4
+ mount ext4 /dev/block/bootdevice/by-name/efs /efs nosuid nodev noatime noauto_da_alloc,discard,journal_async_commit,errors=panic
+ chown system radio /efs
+ chmod 0771 /efs
+ rm -rf /efs/dmverity
+ restorecon -R /efs
+
+on post-fs-data
+ mkdir /data/tombstones 0771 system system
+ mkdir /tombstones/modem 0771 system system
+ mkdir /tombstones/lpass 0771 system system
+ mkdir /tombstones/wcnss 0771 system system
+ mkdir /tombstones/dsps 0771 system system
+ mkdir /persist/data/sfs 0700 system system
+ mkdir /persist/data/tz 0700 system system
+
+#start camera server as daemon
+service qcamerasvr /system/bin/mm-qcamera-daemon
+ class main
+ user camera
+ group camera system inet input graphics
+
+#enable zram
+on property:ro.config.zram=true
+ swapon_all fstab.qcom
+ write /proc/sys/vm/swappiness 100
+
+# Allow usb charging to be disabled peristently
+on property:persist.usb.chgdisabled=1
+ write /sys/class/power_supply/battery/charging_enabled 0
+
+on property:persist.usb.chgdisabled=0
+ write /sys/class/power_supply/battery/charging_enabled 1
+
+service qseecomd /system/bin/qseecomd
+ class core
+ user root
+ group root
+
+service perfd /system/bin/perfd
+ class main
+ user root
+ disabled
+
+service thermal-engine /system/bin/thermal-engine
+ class main
+ user root
+ 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
+ group root
+
+service time_daemon /system/bin/time_daemon
+ class late_start
+ user root
+ group root
+
+service audiod /system/bin/audiod
+ class late_start
+ user system
+ group system
+
+on boot
+ start rmt_storage
+ insmod /system/lib/modules/adsprpc.ko
+# access permission for secure touch
+ chmod 0660 /sys/devices/soc.0/78b9000.i2c/i2c-5/5-0020/secure_touch_enable
+ chmod 0440 /sys/devices/soc.0/78b9000.i2c/i2c-5/5-0020/secure_touch
+ chmod 0660 /sys/devices/soc.0/78b9000.i2c/i2c-5/5-0070/secure_touch_enable
+ chmod 0440 /sys/devices/soc.0/78b9000.i2c/i2c-5/5-0070/secure_touch
+ chown system drmrpc /sys/devices/soc.0/78b9000.i2c/i2c-5/5-0020/secure_touch_enable
+ chown system drmrpc /sys/devices/soc.0/78b9000.i2c/i2c-5/5-0020/secure_touch
+ chown system drmrpc /sys/devices/soc.0/78b9000.i2c/i2c-5/5-0070/secure_touch_enable
+ chown system drmrpc /sys/devices/soc.0/78b9000.i2c/i2c-5/5-0070/secure_touch
+
+service wcnss-service /system/bin/wcnss_service
+ class main
+ user system
+ group system wifi radio
+ oneshot
+
+on charger
+ wait /dev/block/bootdevice/by-name/system
+ mount ext4 /dev/block/bootdevice/by-name/system /system ro barrier=1
+ chown root system /sys/class/power_supply/bms/current_now
+ chown root system /sys/class/power_supply/bms/voltage_ocv
+ chmod 0664 /sys/class/power_supply/bms/current_now
+ chmod 0664 /sys/class/power_supply/bms/voltage_ocv
+ start vm_bms
+ load_all_props
+ start qcom-post-boot
+
+service imsqmidaemon /system/bin/imsqmidaemon
+ class main
+ user system
+ socket ims_qmid stream 0660 system radio
+ group radio net_raw log qcom_diag
+
+service imsdatadaemon /system/bin/imsdatadaemon
+ class main
+ user system
+ socket ims_datad stream 0660 system radio
+ group system wifi radio inet net_raw log qcom_diag net_admin
+ disabled
+
+on property:sys.ims.QMI_DAEMON_STATUS=1
+ start imsdatadaemon
+
+service qmi_sfs_server /system/bin/qmi_sfs_server
+ class core
+ user system
+ group system net_raw
+
+service ims_rtp_daemon /system/bin/ims_rtp_daemon
+ class main
+ user system
+ socket ims_rtpd stream 0660 system radio
+ group radio net_raw diag qcom_diag log
+ disabled
+
+on property:sys.ims.DATA_DAEMON_STATUS=1
+ start ims_rtp_daemon
diff --git a/rootdir/etc/ueventd.qcom.rc b/rootdir/etc/ueventd.qcom.rc
new file mode 100644
index 0000000..68a2299
--- /dev/null
+++ b/rootdir/etc/ueventd.qcom.rc
@@ -0,0 +1,232 @@
+# Copyright (c) 2012-2014, The Linux Foundation. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of The Linux Foundation nor
+# the names of its contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+# the DIAG device node is not world writable/readable.
+/dev/diag 0660 system qcom_diag
+
+/dev/genlock 0666 system system
+/dev/kgsl 0666 system system
+/dev/kgsl-3d0 0666 system system
+/dev/kgsl-2d0 0666 root root
+/dev/kgsl-2d1 0666 root root
+/dev/ion 0664 system system
+/dev/rtc0 0600 system system
+/dev/smd0 0660 system system
+/dev/smd4 0660 system system
+/dev/smd_cxm_qmi 0640 radio radio
+/dev/smd5 0660 system system
+/dev/smd6 0660 system system
+/dev/smd7 0660 bluetooth bluetooth
+/dev/ccid_bridge 0660 system system
+/dev/ipa 0660 net_admin net_admin
+/dev/wwan_ioctl 0660 net_admin net_admin
+/dev/ipaNatTable 0660 net_admin net_admin
+
+#permissions for CSVT
+/dev/smd11 0660 radio radio
+
+/dev/radio0 0640 system system
+/dev/rfcomm0 0660 bluetooth bluetooth
+/dev/ttyUSB0 0660 bluetooth bluetooth
+/dev/smdcntl0 0640 radio radio
+/dev/smdcntl1 0640 radio radio
+/dev/smdcntl2 0640 radio radio
+/dev/smdcntl3 0640 radio radio
+/dev/smdcntl4 0640 radio radio
+/dev/smdcntl5 0640 radio radio
+/dev/smdcntl6 0640 radio radio
+/dev/smdcntl7 0640 radio radio
+/dev/smdcntl8 0640 radio radio
+/dev/smdcnt_rev0 0640 radio radio
+/dev/smdcnt_rev1 0640 radio radio
+/dev/smdcnt_rev2 0640 radio radio
+/dev/smdcnt_rev3 0640 radio radio
+/dev/smdcnt_rev4 0640 radio radio
+/dev/smdcnt_rev5 0640 radio radio
+/dev/smdcnt_rev6 0640 radio radio
+/dev/smdcnt_rev7 0640 radio radio
+/dev/smdcnt_rev8 0640 radio radio
+/dev/smuxctl32 0640 radio radio
+/dev/sdioctl0 0640 radio radio
+/dev/sdioctl1 0640 radio radio
+/dev/sdioctl2 0640 radio radio
+/dev/sdioctl3 0640 radio radio
+/dev/sdioctl4 0640 radio radio
+/dev/sdioctl5 0640 radio radio
+/dev/sdioctl6 0640 radio radio
+/dev/sdioctl7 0640 radio radio
+/dev/sdioctl8 0640 radio radio
+/dev/rmnet_mux_ctrl 0640 radio radio
+/dev/hsicctl0 0640 radio radio
+/dev/hsicctl1 0640 radio radio
+/dev/hsicctl2 0640 radio radio
+/dev/hsicctl3 0640 radio radio
+/dev/hsicctl4 0640 radio radio
+/dev/hsicctl5 0640 radio radio
+/dev/hsicctl6 0640 radio radio
+/dev/hsicctl7 0640 radio radio
+/dev/hsicctl8 0640 radio radio
+/dev/hsicctl9 0640 radio radio
+/dev/hsicctl10 0640 radio radio
+/dev/hsicctl11 0640 radio radio
+/dev/hsicctl12 0640 radio radio
+/dev/hsicctl13 0640 radio radio
+/dev/hsicctl14 0640 radio radio
+/dev/hsicctl15 0640 radio radio
+/dev/hsicctl16 0640 radio radio
+/dev/mhi_pipe_14 0640 radio radio
+/dev/mhi_pipe_16 0640 radio radio
+/dev/mhi_pipe_32 0640 radio radio
+/dev/video* 0660 system camera
+/dev/media* 0660 system camera
+/dev/v4l-subdev* 0660 system camera
+/dev/qseecom 0660 system drmrpc
+/dev/pft 0660 system drmrpc
+/dev/gemini0 0660 system camera
+/dev/jpeg0 0660 system camera
+/dev/jpeg1 0660 system camera
+/dev/jpeg2 0660 system camera
+/dev/jpeg3 0660 system camera
+/dev/adsprpc-smd 0664 system system
+/dev/msm_camera/* 0660 system camera
+/dev/gemini/ 0660 system camera
+/dev/mercury0 0660 system camera
+/dev/msm_vidc_reg 0660 system audio
+/dev/msm_vidc_dec 0660 system audio
+/dev/msm_vidc_dec_sec 0660 system audio
+/dev/msm_vidc_enc 0660 system audio
+/dev/msm_rotator 0660 system system
+/dev/hw_random 0600 root root
+/dev/adsprpc-smd 0664 system system
+
+#permissions for audio
+/dev/audio_slimslave 0660 system audio
+/dev/msm_qcelp 0660 system audio
+/dev/msm_evrc 0660 system audio
+/dev/msm_wma 0660 system audio
+/dev/msm_wmapro 0660 system audio
+/dev/msm_amrnb 0660 system audio
+/dev/msm_amrwb 0660 system audio
+/dev/msm_amrwbplus 0660 system audio
+/dev/msm_aac 0660 system audio
+/dev/msm_multi_aac 0660 system audio
+/dev/msm_aac_in 0660 system audio
+/dev/msm_qcelp_in 0660 system audio
+/dev/msm_evrc_in 0660 system audio
+/dev/msm_amrnb_in 0640 system audio
+/dev/msm_a2dp_in 0660 system audio
+/dev/msm_ac3 0660 system audio
+/dev/msm_audio_cal 0660 system audio
+/dev/msm_cad 0660 system audio
+/dev/msm_fm 0660 system audio
+/dev/msm_mvs 0660 system audio
+/dev/msm_pcm_lp_dec 0660 system audio
+/dev/msm_preproc_ctl 0660 system audio
+/dev/msm_rtac 0660 system audio
+/dev/msm_voicememo 0660 system audio
+/dev/radio0 0640 fm_radio fm_radio
+/dev/smd3 0660 bluetooth net_bt_stack
+/dev/smd2 0660 bluetooth net_bt_stack
+/dev/ttyHSL1 0660 system system
+/dev/ttyHS1 0660 system system
+/dev/mdm 0660 system radio
+/sys/devices/virtual/smdpkt/smdcntl* open_timeout 0664 radio radio
+/dev/sdio_tty_ciq_00 0660 system system
+/dev/tty_sdio_00 0660 system system
+/dev/ttyGS0 0660 system system
+/dev/i2c-5 0660 media media
+/dev/voice_svc 0660 system audio
+
+# DVB devices
+/dev/dvb/adapter0/demux* 0440 media media
+/dev/dvb/adapter0/dvr* 0660 media media
+/dev/dvb/adapter0/video* 0660 media media
+
+# Broadcast devices
+/dev/tsc_mux0 0660 media media
+/dev/tsc_ci0 0660 media media
+
+# sensors
+/sys/devices/i2c-12/12-* pollrate_ms 0664 system system
+/sys/devices/f9925000.i2c/i2c-0/0-* enable 0660 input system
+/sys/devices/f9925000.i2c/i2c-0/0-* poll_delay 0660 input system
+/sys/devices/soc.0/78b6000.i2c/i2c-0/0-* enable 0660 input system
+/sys/devices/soc.0/78b6000.i2c/i2c-0/0-* poll_delay 0660 input system
+/sys/devices/soc.0/78b6000.i2c/i2c-0/0-* enable_wakeup 0660 input system
+/sys/devices/soc.0/78b6000.i2c/i2c-0/0-* max_latency 0660 input system
+/sys/devices/soc.0/78b6000.i2c/i2c-0/0-* flush 0660 input system
+/sys/devices/soc.0/78b6000.i2c/i2c-0/0-* calibrate 0660 input system
+/sys/devices/soc.0/78b5000.i2c/i2c-1/1-* enable 0660 input system
+/sys/devices/soc.0/78b5000.i2c/i2c-1/1-* poll_delay 0660 input system
+/sys/devices/soc.0/78b5000.i2c/i2c-1/1-* enable_wakeup 0660 input system
+/sys/devices/soc.0/78b5000.i2c/i2c-1/1-* max_latency 0660 input system
+/sys/devices/soc.0/78b5000.i2c/i2c-1/1-* flush 0660 input system
+/sys/devices/soc.0/78b5000.i2c/i2c-1/1-* calibrate 0660 input system
+/sys/devices/virtual/optical_sensors/proximity ps_adc 0660 input system
+/sys/devices/virtual/optical_sensors/proximity ps_poll_delay 0660 input system
+/sys/devices/virtual/optical_sensors/lightsensor ls_auto 0660 input system
+/sys/devices/virtual/optical_sensors/lightsensor ls_poll_delay 0660 input system
+/sys/devices/virtual/input/input* poll 0660 input system
+/sys/devices/virtual/input/input* pollrate_ms 0660 input system
+
+# vm_bms
+/dev/vm_bms 0660 system system
+/dev/battery_data 0660 system system
+
+# wlan
+/dev/wcnss_wlan 0660 system system
+/dev/wcnss_ctrl 0660 system system
+#nfc permissions
+/dev/nfc-nci 0660 nfc nfc
+/dev/assd 0660 nfc nfc
+
+# UIO devices
+/dev/uio0 0660 system system
+/dev/uio1 0660 system system
+/dev/uio2 0660 system system
+
+# SSR devices
+/dev/subsys_* 0640 system system
+
+# Ultrasound device
+/dev/usf1 0660 system system
+
+# Ramdump devices
+/dev/ramdump* 0640 system system
+
+#cpufreq_governor
+/sys/devices/system/cpu/cpu* cpufreq/interactive/above_hispeed_delay 0660 system system
+/sys/devices/system/cpu/cpu* cpufreq/interactive/go_hispeed_load 0660 system system
+/sys/devices/system/cpu/cpu* cpufreq/interactive/timer_rate 0660 system system
+/sys/devices/system/cpu/cpu* cpufreq/interactive/hispeed_freq 0660 system system
+/sys/devices/system/cpu/cpu* cpufreq/interactive/io_is_busy 0660 system system
+/sys/devices/system/cpu/cpu* cpufreq/interactive/target_loads 0660 system system
+/sys/devices/system/cpu/cpu* cpufreq/interactive/min_sample_time 0660 system system
+/sys/devices/system/cpu/cpu* cpufreq/interactive/sampling_down_factor 0660 system system
+/sys/devices/system/cpu/cpu* cpufreq/interactive/lpm_disable_freq 0660 system system
+/sys/devices/system/cpu/cpu* cpufreq/interactive/use_migration_notif 0660 system system
+/sys/devices/system/cpu/cpu* cpufreq/interactive/use_sched_load 0660 system system
diff --git a/sepolicy/bluetooth_loader.te b/sepolicy/bluetooth_loader.te
new file mode 100644
index 0000000..d867e05
--- /dev/null
+++ b/sepolicy/bluetooth_loader.te
@@ -0,0 +1,43 @@
+# Bluetooth executables and scripts
+type bluetooth_loader, domain;
+type bluetooth_loader_exec, exec_type, file_type;
+
+# Start bdAddrLoader from init
+init_daemon_domain(bluetooth_loader)
+
+# Run init.qcom.bt.sh
+allow bluetooth_loader shell_exec:file { entrypoint read };
+allow bluetooth_loader bluetooth_loader_exec:file { getattr open execute_no_trans };
+
+# init.qcom.bt.sh needs /system/bin/log access
+allow bluetooth_loader devpts:chr_file rw_file_perms;
+
+# Run hci_qcomm_init from init.qcom.bt.sh
+domain_auto_trans(bluetooth_loader, hci_attach_exec, hci_attach)
+allow hci_attach bluetooth_loader:fd use;
+
+# Read mac address from persist partition
+allow bluetooth_loader persist_file:dir search;
+r_dir_file(bluetooth_loader, bluetooth_data_file)
+allow bluetooth_loader self:capability { dac_override dac_read_search chown };
+
+# It may write a random mac here
+allow bluetooth_loader persist_file:dir { add_name write };
+allow bluetooth_loader persist_file:file { create_file_perms };
+
+# Talk to init over the property socket
+unix_socket_connect(bluetooth_loader, property, init)
+# Set persist.service.bdroid.* and bluetooth.* property values
+allow bluetooth_loader bluetooth_prop:property_service set;
+
+# Allow getprop/setprop for init.qcom.bt.sh
+allow bluetooth_loader system_file:file execute_no_trans;
+
+# Access the smd device
+allow bluetooth_loader hci_attach_dev:chr_file rw_file_perms;
+
+# And qmuxd
+allow bluetooth_loader qmuxd_socket:dir { write add_name remove_name search };
+allow bluetooth_loader qmuxd_socket:sock_file { create setattr getattr write unlink };
+allow bluetooth_loader qmuxd:unix_stream_socket { connectto };
+#
diff --git a/sepolicy/file.te b/sepolicy/file.te
new file mode 100644
index 0000000..ab6ffb0
--- /dev/null
+++ b/sepolicy/file.te
@@ -0,0 +1,4 @@
+#Defines the files (configs, dumps, etc) used by display processes
+type display_misc_file, file_type, data_file_type;
+
+type touchpanel_sysfs, fs_type, sysfs_type;
\ No newline at end of file
diff --git a/sepolicy/file_contexts b/sepolicy/file_contexts
new file mode 100644
index 0000000..5222c5d
--- /dev/null
+++ b/sepolicy/file_contexts
@@ -0,0 +1,9 @@
+/persist/.genmac u:object_r:wifi_data_file:s0
+/persist/.bt_nv.bin u:object_r:bluetooth_data_file:s0
+
+/system/bin/btnvtool u:object_r:bluetooth_loader_exec:s0
+/system/etc/init\.qcom\.bt\.sh u:object_r:bluetooth_loader_exec:s0
+
+/dev/smd3 u:object_r:hci_attach_dev:s0
+
+/sys/devices/soc.0/78b9000.i2c/i2c-5/5-0040/gesture u:object_r:touchpanel_sysfs:s0
diff --git a/sepolicy/healthd.te b/sepolicy/healthd.te
new file mode 100644
index 0000000..f00e795
--- /dev/null
+++ b/sepolicy/healthd.te
@@ -0,0 +1 @@
+allow healthd rtc_device:chr_file rw_file_perms;
diff --git a/sepolicy/perfd.te b/sepolicy/perfd.te
new file mode 100644
index 0000000..6541f9c
--- /dev/null
+++ b/sepolicy/perfd.te
@@ -0,0 +1,2 @@
+allow perfd sysfs_devices_system_iosched:file rw_file_perms;
+unix_socket_connect(perfd, thermal, thermal-engine)
diff --git a/sepolicy/property_contexts b/sepolicy/property_contexts
new file mode 100644
index 0000000..bb6cb2e
--- /dev/null
+++ b/sepolicy/property_contexts
@@ -0,0 +1,2 @@
+qualcomm.bluetooth. u:object_r:bluetooth_prop:s0
+qualcomm.bt. u:object_r:bluetooth_prop:s0
diff --git a/sepolicy/qseecomd.te b/sepolicy/qseecomd.te
new file mode 100644
index 0000000..98a40fa
--- /dev/null
+++ b/sepolicy/qseecomd.te
@@ -0,0 +1,2 @@
+type qseecom_device, dev_type;
+allow tee system_prop:property_service set;
diff --git a/sepolicy/surfaceflinger.te b/sepolicy/surfaceflinger.te
new file mode 100644
index 0000000..abd05d1
--- /dev/null
+++ b/sepolicy/surfaceflinger.te
@@ -0,0 +1,2 @@
+# secure display
+allow surfaceflinger persist_file:dir r_dir_perms;
diff --git a/sepolicy/system_server.te b/sepolicy/system_server.te
new file mode 100644
index 0000000..ea39880
--- /dev/null
+++ b/sepolicy/system_server.te
@@ -0,0 +1,2 @@
+allow system_server touchpanel_sysfs:file rw_file_perms;
+allow system_server touchpanel_sysfs:dir { search };
\ No newline at end of file
diff --git a/sepolicy/wcnss_service.te b/sepolicy/wcnss_service.te
new file mode 100644
index 0000000..a4fe3c0
--- /dev/null
+++ b/sepolicy/wcnss_service.te
@@ -0,0 +1 @@
+allow wcnss_service persist_file:dir search;
diff --git a/system.prop b/system.prop
new file mode 100644
index 0000000..f1c5906
--- /dev/null
+++ b/system.prop
@@ -0,0 +1,153 @@
+#
+# system.prop for msm8916
+#
+
+ro.sf.lcd_density=240
+
+# Evolution RIL (8xxx)
+rild.libpath=/system/lib/libsec-ril.so
+
+rild.libargs=-d /dev/smd0
+persist.rild.nitz_plmn=
+persist.rild.nitz_long_ons_0=
+persist.rild.nitz_long_ons_1=
+persist.rild.nitz_long_ons_2=
+persist.rild.nitz_long_ons_3=
+persist.rild.nitz_short_ons_0=
+persist.rild.nitz_short_ons_1=
+persist.rild.nitz_short_ons_2=
+persist.rild.nitz_short_ons_3=
+persist.radio.rat_on=combine
+ril.subscription.types=NV,RUIM
+DEVICE_PROVISIONED=1
+# Start in cdma mode
+#ro.telephony.default_network=5
+
+debug.sf.hw=1
+debug.egl.hw=1
+persist.hwc.mdpcomp.enable=true
+debug.mdpcomp.logs=0
+dalvik.vm.heapsize=36m
+dev.pm.dyn_samplingrate=1
+persist.demo.hdmirotationlock=false
+
+#ro.hdmi.enable=true
+#tunnel.decode=true
+#tunnel.audiovideo.decode=true
+#lpa.decode=false
+#lpa.use-stagefright=true
+#persist.speaker.prot.enable=false
+
+#
+# system props for the cne module
+#
+persist.cne.feature=1
+
+#system props for the MM modules
+media.stagefright.enable-player=true
+media.stagefright.enable-http=true
+media.stagefright.enable-aac=true
+media.stagefright.enable-qcp=true
+media.stagefright.enable-fma2dp=true
+media.stagefright.enable-scan=true
+media.swhevccodectype=0
+mm.enable.smoothstreaming=true
+mmp.enable.3g2=true
+media.aac_51_output_enabled=true
+#codecs: DivX DivXHD AVI AC3 ASF AAC QCP DTS 3G2 MP2TS
+mm.enable.qcom_parser=3183219
+
+# Default to AwesomePlayer
+media.stagefright.use-awesome=true
+
+#system props for time-services
+persist.timed.enable=true
+
+# Keep SIM state on LPM mode
+persist.radio.apm_sim_not_pwdn=1
+
+# Don't wait the card state for RADIO POWER request
+persist.radio.no_wait_for_card=1
+
+# For sys info indication
+persist.radio.add_power_save=1
+
+# Snapshot setting
+persist.radio.snapshot_enabled=1
+persist.radio.snapshot_timer=22
+
+#
+# system prop for opengles version
+#
+# 196608 is decimal for 0x30000 to report version 3
+ro.opengles.version=196608
+
+# System property for cabl
+ro.qualcomm.cabl=2
+
+#
+# System props for telephony
+# System prop to turn on CdmaLTEPhone always
+#telephony.lteOnCdmaDevice=1
+#
+# System props for bluetooh
+# System prop to turn on hfp client
+bluetooth.hfp.client=1
+
+#Simulate sdcard on /data/media
+#
+persist.fuse_sdcard=true
+
+#
+#snapdragon value add features
+#
+ro.qc.sdk.audio.ssr=false
+##fluencetype can be "fluence" or "fluencepro" or "none"
+ro.qc.sdk.audio.fluencetype=none
+persist.audio.fluence.voicecall=true
+persist.audio.fluence.voicerec=false
+persist.audio.fluence.speaker=true
+#Set for msm8916
+tunnel.audio.encode = false
+#Buffer size in kbytes for compress offload playback
+audio.offload.buffer.size.kb=32
+#Minimum duration for offload playback in secs
+audio.offload.min.duration.secs=30
+#Enable offload audio video playback by default
+av.offload.enable=true
+#enable voice path for PCM VoIP by default
+use.voice.path.for.pcm.voip=true
+#
+#System property for FM transmitter
+#
+ro.fm.transmitter=false
+#enable dsp gapless mode by default
+audio.offload.gapless.enabled=true
+
+af.resampler.quality=4
+
+#property to enable user to access Google WFD settings
+persist.debug.wfd.enable=1
+#propery to enable VDS WFD solution
+persist.hwc.enable_vds=1
+
+#property to enable narrow search range for video encoding
+vidc.enc.narrow.searchrange=1
+
+# low RAM property
+ro.config.low_ram=true
+
+# System property for storage_preload
+persist.sys.storage_preload=1
+
+# Data modules (For evolution RIL model)
+ro.use_data_netmgrd=false
+persist.data.netmgrd.qos.enable=false
+
+# DHA tuning
+ro.config.dha_cached_max=4
+ro.config.dha_empty_init=20
+ro.config.dha_empty_max=20
+ro.config.dha_th_rate=1.9
+ro.config.dha_lmk_scale=1.34
+ro.config.ldha_ext_enable=true
diff --git a/vendorsetup.sh b/vendorsetup.sh
new file mode 100644
index 0000000..f1fe1c1
--- /dev/null
+++ b/vendorsetup.sh
@@ -0,0 +1,5 @@
+for i in eng userdebug user; do
+ add_lunch_combo cm_gprimeltecan-${i}
+# add_lunch_combo omni_gprimeltecan-${i}
+# add_lunch_combo full_gprimeltecan-${i}
+done
diff --git a/wifi/WCNSS_cfg.dat b/wifi/WCNSS_cfg.dat
new file mode 100644
index 0000000..0637816
--- /dev/null
+++ b/wifi/WCNSS_cfg.dat
Binary files differ
diff --git a/wifi/WCNSS_qcom_cfg.ini b/wifi/WCNSS_qcom_cfg.ini
new file mode 100644
index 0000000..389b3a6
--- /dev/null
+++ b/wifi/WCNSS_qcom_cfg.ini
@@ -0,0 +1,481 @@
+# This file allows user to override the factory
+
+# defaults for the WLAN Driver
+
+
+# Enable IMPS or not
+gEnableImps=1
+
+# Enable/Disable Idle Scan
+
+gEnableIdleScan=0
+
+# Enable/Disable vsta based on MAX Assoc limit
+gEnableVSTASupport=1
+
+
+# Increase sleep duration (seconds) during IMPS
+# 0 implies no periodic wake up from IMPS. Periodic wakeup is
+# unnecessary if Idle Scan is disabled.
+gImpsModSleepTime=0
+
+
+# Enable BMPS or not
+gEnableBmps=1
+
+# Enable suspend or not
+
+# 1: Enable standby, 2: Enable Deep sleep, 3: Enable Mcast/Bcast Filter
+
+gEnableSuspend=3
+
+# Phy Mode (auto, b, g, n, etc)
+# Valid values are 0-9, with 0 = Auto, 4 = 11n, 9 = 11ac
+gDot11Mode=0
+
+
+# CSR Roaming Enable(1) Disable(0)
+
+gRoamingTime=0
+
+
+# Assigned MAC Addresses - This will be used until NV items are in place
+
+# Each byte of MAC address is represented in Hex format as XX
+
+Intf0MacAddress=000AF58989FF
+Intf1MacAddress=000AF58989FE
+Intf2MacAddress=000AF58989FD
+
+Intf3MacAddress=000AF58989FC
+
+
+# UAPSD service interval for VO,VI, BE, BK traffic
+
+InfraUapsdVoSrvIntv=0
+
+InfraUapsdViSrvIntv=0
+
+InfraUapsdBeSrvIntv=0
+
+InfraUapsdBkSrvIntv=0
+
+# Flag to allow STA send AddTspec even when ACM is Off
+gAddTSWhenACMIsOff=1
+
+# Make 1x1 the default antenna configuration
+
+gNumRxAnt=1
+
+
+# Beacon filtering frequency (unit in beacon intervals)
+
+gNthBeaconFilter=50
+
+
+# Enable WAPI or not
+
+# WAPIIsEnabled=0
+
+
+# Flags to filter Mcast abd Bcast RX packets.
+
+# Value 0: No filtering, 1: Filter all Multicast.
+
+# 2: Filter all Broadcast. 3: Filter all Mcast abd Bcast
+
+McastBcastFilter=2
+
+
+#Flag to enable HostARPOffload feature or not
+
+hostArpOffload=1
+
+
+#Flag to enable HostNSOffload feature or not
+hostNSOffload=0
+
+#SoftAP Related Parameters
+
+# AP MAc addr
+
+gAPMacAddr=000AF589dcab
+
+
+# 802.11n Protection flag
+
+gEnableApProt=1
+
+
+#Enable OBSS protection
+
+gEnableApOBSSProt=0
+
+
+#Enable/Disable UAPSD for SoftAP
+
+gEnableApUapsd=0
+
+
+# Fixed Rate
+
+gFixedRate=0
+
+
+# Maximum Tx power
+
+# gTxPowerCap=30
+
+
+# Fragmentation Threshold
+
+# gFragmentationThreshold=2346
+
+
+# RTS threshold
+
+RTSThreshold=2347
+
+
+# Intra-BSS forward
+
+gDisableIntraBssFwd=0
+
+
+# WMM Enable/Disable
+
+WmmIsEnabled=0
+
+
+# 802.11d support
+
+g11dSupportEnabled=0
+
+# 802.11h support
+g11hSupportEnabled=1
+
+# ESE Support and fast transition
+EseEnabled=1
+ImplicitQosIsEnabled=0
+gNeighborScanTimerPeriod=200
+
+gNeighborLookupThreshold=76
+gNeighborReassocThreshold=81
+
+gNeighborScanChannelMinTime=20
+gNeighborScanChannelMaxTime=30
+gMaxNeighborReqTries=3
+
+# Legacy (non-ESE, non-802.11r) Fast Roaming Support
+# To enable, set FastRoamEnabled=1
+# To disable, set FastRoamEnabled=0
+FastRoamEnabled=1
+
+#Check if the AP to which we are roaming is better than current AP in terms of RSSI.
+#Checking is disabled if set to Zero.Otherwise it will use this value as to how better
+#the RSSI of the new/roamable AP should be for roaming
+RoamRssiDiff=5
+
+#SAP Country code
+
+# Default Country Code is 2 bytes, 3rd byte is optional indoor or out door.
+
+# Example
+
+# US Indoor, USI
+
+# Korea Outdoor, KRO
+
+# Japan without optional byte, JP
+
+# France without optional byte, FR
+
+#gAPCntryCode=USI
+
+
+#Short Guard Interval Enable/disable
+
+gShortGI20Mhz=1
+
+gShortGI40Mhz=1
+
+
+#Auto Shutdown Value in seconds. A value of 0 means Auto shutoff is disabled
+
+gAPAutoShutOff=0
+
+
+# SAP auto channel selection configuration
+
+# 0 = disable auto channel selection
+
+# 1 = enable auto channel selection, channel provided by supplicant will be ignored
+
+gApAutoChannelSelection=0
+
+
+# Listen Energy Detect Mode Configuration
+
+# Valid values 0-128
+
+# 128 means disable Energy Detect feature
+
+# 0-9 are threshold code and 7 is recommended value from system if feature is to be enabled.
+
+# 10-128 are reserved.
+
+# The EDET threshold mapping is as follows in 3dB step:
+
+# 0 = -60 dBm
+
+# 1 = -63 dBm
+
+# 2 = -66 dBm
+
+# ...
+
+# 7 = -81 dBm
+
+# 8 = -84 dBm
+
+# 9 = -87 dBm
+
+# Note: Any of these settings are valid. Setting 0 would yield the highest power saving (in a noisy environment) at the cost of more range. The range impact is approximately #calculated as:
+
+#
+
+# Range Loss (dB) = EDET threshold level (dBm) + 97 dBm.
+
+#
+
+gEnablePhyAgcListenMode=128
+
+
+#Preferred channel to start BT AMP AP mode (0 means, any channel)
+
+BtAmpPreferredChannel=0
+
+
+#Preferred band (both or 2.4 only or 5 only)
+
+BandCapability=0
+
+
+#Beacon Early Termination (1 = enable the BET feature, 0 = disable)
+
+enableBeaconEarlyTermination=1
+
+beaconEarlyTerminationWakeInterval=11
+
+#Bluetooth Alternate Mac Phy (1 = enable the BT AMP feature, 0 = disable)
+
+gEnableBtAmp=0
+
+
+#SOFTAP Channel Range selection
+
+gAPChannelSelectStartChannel=1
+
+gAPChannelSelectEndChannel=11
+
+
+#SOFTAP Channel Range selection Operating band
+
+# 0:2.4GHZ 1: LOW-5GHZ 2:MID-5GHZ 3:HIGH-5GHZ 4: 4.9HZ BAND
+
+gAPChannelSelectOperatingBand=0
+
+
+#Channel Bonding
+gChannelBondingMode5GHz=1
+
+
+#Enable Keep alive with non-zero period value
+
+gStaKeepAlivePeriod=30
+
+
+#Say gGoKeepAlivePeriod(5 seconds) and gGoLinkMonitorPeriod(10 seconds).
+#For every 10 seconds DUT send Qos Null frame(i.e., Keep Alive frame if link is idle for last 10 seconds.)
+#For both active and power save clients.
+
+#Power save clients: DUT set TIM bit from 10th second onwards and till client honors TIM bit.
+#If doesn't honor for 5 seconds then DUT remove client.
+
+#Active clients: DUT send Qos Null frame for 10th seconds onwards if it is not success still we try on
+#11th second if not tries on 12th and so on till 15th second. Hence before disconnection DUT will send 5 NULL frames.
+#Hence in any case DUT will detect client got removed in (10+5) seconds. i.e., (gGoKeepAlivePeriod + gGoLinkMonitorPeriod)..
+
+#gGoLinkMonitorPeriod/ gApLinkMonitorPeriod is period where link is idle and it is period
+#where we send NULL frame.
+
+gApLinkMonitorPeriod=30
+
+gGoLinkMonitorPeriod=10
+
+#gGoKeepAlivePeriod/gApKeepAlivePeriod is time to spend to check whether frame are succeed to send or not.
+#Hence total effective detection time is gGoLinkMonitorPeriod+ gGoKeepAlivePeriod/gApLinkMonitorPeriod+ gApKeepAlivePeriod.
+
+gGoKeepAlivePeriod=3
+
+gApKeepAlivePeriod=10
+
+
+#If set will start with active scan after driver load, otherwise will start with
+
+#passive scan to find out the domain
+
+gEnableBypass11d=1
+
+
+#If set to 0, will not scan DFS channels
+
+gEnableDFSChnlScan=1
+
+
+gVhtChannelWidth=2
+gEnableLogp=1
+
+
+# Enable Automatic Tx Power control
+
+gEnableAutomaticTxPowerControl=0
+
+# 0 for OLPC 1 for CLPC and SCPC
+gEnableCloseLoop=1
+
+#Data Inactivity Timeout when in powersave (in ms)
+gDataInactivityTimeout=200
+
+# VHT Tx/Rx MCS values
+# Valid values are 0,1,2. If commented out, the default value is 0.
+# 0=MCS0-7, 1=MCS0-8, 2=MCS0-9
+gVhtRxMCS=2
+gVhtTxMCS=2
+
+
+#If set to 0, MCC is not allowed.
+gEnableMCCMode=1
+
+# 1=enable STBC; 0=disable STBC
+gEnableRXSTBC=1
+
+# Enable Active mode offload
+gEnableActiveModeOffload=1
+
+#Enable Scan Results Aging based on timer
+#Timer value is in seconds
+#If Set to 0 it will not enable the feature
+gScanAgingTime=0
+
+#Enable Power saving mechanism Based on Android Framework
+#If set to 0 Driver internally control the Power saving mechanism
+#If set to 1 Android Framwrok control the Power saving mechanism
+isAndroidPsEn=0
+
+#disable LDPC in STA mode if the AP is TXBF capable
+gDisableLDPCWithTxbfAP=1
+
+#Enable thermal mitigation
+gThermalMitigationEnable=1
+
+gEnableFastRoamInConcurrency=1
+
+#List of Country codes for which 11ac needs to be disabled
+#Each country code must be delimited by comma(,)
+gListOfNon11acCountryCode=RU,UA,ZA
+
+#Maxium Channel time in msec
+gMaxMediumTime = 5480
+
+# 802.11K support
+gRrmEnable=1
+gRrmOperChanMax=8
+gRrmNonOperChanMax=8
+gRrmRandIntvl=100
+
+#Scan offload
+gEnableDirectedScanOffload=0
+
+#FlexConnect Power Factor
+#Default is set to 0 (disable)
+gFlexConnectPowerFactor=0
+
+#SAP/P2P-GO mode traffic monitor
+gEnableTrafficMonitor=1
+gTrafficIdleTimeout=3000
+
+#Disable/Enable Strict FCC Regulatory
+# 0 to disable, 1 to enable
+gEnableStrictRegulatoryForFCC=1
+
+#Enable/Disable Modulated DTIM feature
+gEnableModulatedDTIM=3
+
+#max LI value for modulated DTIM
+gMaxLIModulatedDTIM=3
+
+#Enable/Disable Link Layer Statistics Feature
+gEnableLLStats=1
+
+#Enable/Disable EXTScan Feature
+gEnableEXTScan=1
+
+# Enable/Disable Mcast addr list filtering
+# isMcAddrListFilter deprecated
+gMCAddrListEnable=1
+
+# TDLS setting
+gEnableTDLSSupport=1
+gEnableTDLSImplicitTrigger=1
+gEnableTDLSBufferSta=0
+gTDLSMaxDiscoveryAttempt=5
+gTDLSIdleTimeout=10000
+
+# Country code priority
+gCountryCodePriority=1
+
+#blocking SCO rate as 0% from 1%
+btcMaxScoBlockPerc=0
+
+# Scan Timing Parameters
+gActiveMaxChannelTime=80
+gActiveMinChannelTime=60
+
+#Enable Scan Results Aging based on number of scans
+gScanResultAgeCount=1
+
+#To enable CTS2S during SCO in WCN cfg ini
+btcCTS2SduringSCO=1
+
+#BTC OPP+SAP/GO configuration
+btcSapActiveWlanLen=35000
+btcSapActiveBtLen=20000
+
+#BTC BT paging configuration
+btcStaticLenPageBt=135000
+btcStaticLenPageWlan=15000
+
+#BT_OPP+STA coex configuration WLAN 35ms/BT_OPP 30ms
+btcActiveWlanLen=35000
+btcActiveBtLen=30000
+
+#change the value of heart threat time
+gHeartbeat24=60
+
+#Disable Preferred Network Offload feature
+gPNOScanSupport=0
+
+# Roam Scan offload
+gRoamScanOffloadEnabled=1
+
+# For p2p device's DTIM policy
+gIgnoreDynamicDtimInP2pMode=1
+
+# Ignore frames with less signal strength than a defined value
+gAthDisable=1
+
+END
+
+# Note: Configuration parser would not read anything past the END marker
+
diff --git a/wifi/WCNSS_qcom_wlan_nv.bin b/wifi/WCNSS_qcom_wlan_nv.bin
new file mode 100644
index 0000000..401b9c6
--- /dev/null
+++ b/wifi/WCNSS_qcom_wlan_nv.bin
Binary files differ
diff --git a/wifi/p2p_supplicant_overlay.conf b/wifi/p2p_supplicant_overlay.conf
new file mode 100644
index 0000000..6f3f25e
--- /dev/null
+++ b/wifi/p2p_supplicant_overlay.conf
@@ -0,0 +1,14 @@
+disable_scan_offload=1
+p2p_listen_reg_class=81
+p2p_listen_channel=1
+p2p_oper_reg_class=124
+p2p_oper_channel=149
+manufacturer=SAMSUNG_ELECTRONICS
+model_name=SAMSUNG_MOBILE
+model_number=2014
+serial_number=19691101
+update_config=1
+ip_addr_go=192.168.49.1
+ip_addr_mask=255.255.255.0
+ip_addr_start=192.168.49.200
+ip_addr_end=192.168.49.254
diff --git a/wifi/wpa_supplicant.conf b/wifi/wpa_supplicant.conf
new file mode 100644
index 0000000..79703b4
--- /dev/null
+++ b/wifi/wpa_supplicant.conf
@@ -0,0 +1,14 @@
+ctrl_interface=wlan0
+eapol_version=1
+ap_scan=1
+fast_reauth=1
+okc=1
+p2p_listen_reg_class=81
+p2p_listen_channel=1
+p2p_oper_reg_class=81
+p2p_oper_channel=1
+device_name=SAMSUNG_MOBILE
+manufacturer=SAMSUNG_ELECTRONICS
+model_name=SAMSUNG_MOBILE
+model_number=2013
+serial_number=19691101
\ No newline at end of file
diff --git a/wifi/wpa_supplicant_overlay.conf b/wifi/wpa_supplicant_overlay.conf
new file mode 100644
index 0000000..68ce0c9
--- /dev/null
+++ b/wifi/wpa_supplicant_overlay.conf
@@ -0,0 +1,4 @@
+p2p_disabled=1
+autoscan=samsung_exponential:8:128
+update_config=1
+pmf=1
\ No newline at end of file