diff --git a/audio/felix/config/mixer_paths_factory.xml b/audio/felix/config/mixer_paths_factory.xml
index 3438bcf..410cbc2 100644
--- a/audio/felix/config/mixer_paths_factory.xml
+++ b/audio/felix/config/mixer_paths_factory.xml
@@ -138,7 +138,7 @@
-
+
@@ -146,7 +146,7 @@
-
+
diff --git a/device-felix.mk b/device-felix.mk
index 710039b..651bf90 100644
--- a/device-felix.mk
+++ b/device-felix.mk
@@ -241,3 +241,7 @@ PRODUCT_PACKAGES += \
PRODUCT_SOONG_NAMESPACES += device/google/felix
DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE += device/google/felix/device_framework_matrix_product_felix.xml
+
+# Device features
+PRODUCT_COPY_FILES += \
+ frameworks/native/data/etc/handheld_core_hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/handheld_core_hardware.xml
diff --git a/init.insmod.felix.cfg b/init.insmod.felix.cfg
index 4cc5ce3..76401ec 100644
--- a/init.insmod.felix.cfg
+++ b/init.insmod.felix.cfg
@@ -8,8 +8,8 @@
# Modules here will be loaded *after* all common modules
modprobe|bcmdhd4389.ko
modprobe|snd-soc-cs35l41-i2c.ko
+modprobe|fst2.ko
modprobe|ftm5.ko
-modprobe|sec_touch.ko
modprobe|cl_dsp.ko
modprobe|input-cs40l26-i2c.ko
modprobe|snd-soc-cs40l26.ko
diff --git a/thermal_info_config_felix.json b/thermal_info_config_felix.json
index 2fab466..a84b37f 100644
--- a/thermal_info_config_felix.json
+++ b/thermal_info_config_felix.json
@@ -21,6 +21,7 @@
{
"Name":"skin_therm",
"Type":"UNKNOWN",
+ "HotThreshold":["NAN", 32, "NAN", "NAN", "NAN", "NAN", "NAN"],
"TempPath":"/dev/thermal/tz-by-name/skin_therm/tz_temp",
"Multiplier":0.001
},
@@ -57,6 +58,195 @@
"TempPath":"/dev/thermal/tz-by-name/gnss_tcxo_therm/tz_temp",
"Multiplier":0.001
},
+ {
+ "Name":"VIRTUAL-SKIN-OUTER-INNER",
+ "Type":"UNKNOWN",
+ "Hidden":true,
+ "VirtualSensor":true,
+ "Formula":"WEIGHTED_AVG",
+ "Combination":["outer_disp_therm", "inner_disp_therm"],
+ "Coefficient":[2.5, -1.0],
+ "Multiplier":0.001
+ },
+ {
+ "Name":"IS_UNFOLD",
+ "Type":"UNKNOWN",
+ "Hidden":true,
+ "VirtualSensor":true,
+ "Formula":"COUNT_THRESHOLD",
+ "Combination":["VIRTUAL-SKIN-OUTER-INNER"],
+ "Coefficient":[-40000.0],
+ "Multiplier":1
+ },
+ {
+ "Name":"IS_FOLD",
+ "Type":"UNKNOWN",
+ "Hidden":true,
+ "VirtualSensor":true,
+ "Formula":"COUNT_THRESHOLD",
+ "Combination":["VIRTUAL-SKIN-OUTER-INNER"],
+ "Coefficient":[40000.0],
+ "Multiplier":1
+ },
+ {
+ "Name":"VIRTUAL-SKIN-UNFOLD-SUB1-0",
+ "Type":"UNKNOWN",
+ "Hidden":true,
+ "VirtualSensor":true,
+ "Formula":"WEIGHTED_AVG",
+ "Combination":["neutral_therm", "skin_therm", "usb_pwr_therm"],
+ "Coefficient":[0.15, 0.6, 0.2],
+ "Offset":2000,
+ "Multiplier":0.001
+ },
+ {
+ "Name":"VIRTUAL-SKIN-UNFOLD-SUB1",
+ "Type":"UNKNOWN",
+ "Hidden":true,
+ "VirtualSensor":true,
+ "Formula":"MAXIMUM",
+ "Combination":["VIRTUAL-SKIN-UNFOLD-SUB1-0", "neutral_therm", "skin_therm"],
+ "Coefficient":[1.0, 0.84, 0.955],
+ "Multiplier":0.001
+ },
+ {
+ "Name":"VIRTUAL-SKIN-UNFOLD",
+ "Type":"UNKNOWN",
+ "Hidden":true,
+ "VirtualSensor":true,
+ "Formula":"WEIGHTED_AVG",
+ "Combination":["VIRTUAL-SKIN-UNFOLD-SUB1", "IS_FOLD"],
+ "Coefficient":[1.0, -1000000],
+ "Multiplier":0.001
+ },
+ {
+ "Name":"VIRTUAL-SKIN-FOLD-SUB1-0",
+ "Type":"UNKNOWN",
+ "Hidden":true,
+ "VirtualSensor":true,
+ "Formula":"WEIGHTED_AVG",
+ "Combination":["neutral_therm", "quiet_therm", "skin_therm"],
+ "Coefficient":[0.3, 0.05, 0.6],
+ "Offset":2500,
+ "Multiplier":0.001
+ },
+ {
+ "Name":"VIRTUAL-SKIN-FOLD-SUB1-1",
+ "Type":"UNKNOWN",
+ "Hidden":true,
+ "VirtualSensor":true,
+ "Formula":"WEIGHTED_AVG",
+ "Combination":["skin_therm", "usb_pwr_therm"],
+ "Coefficient":[0.55, 0.45],
+ "Offset":-2300,
+ "Multiplier":0.001
+ },
+ {
+ "Name":"VIRTUAL-SKIN-FOLD-SUB1",
+ "Type":"UNKNOWN",
+ "Hidden":true,
+ "VirtualSensor":true,
+ "Formula":"MAXIMUM",
+ "Combination":["VIRTUAL-SKIN-FOLD-SUB1-0", "VIRTUAL-SKIN-FOLD-SUB1-1", "neutral_therm"],
+ "Coefficient":[1.0, 1.0, 0.83],
+ "Multiplier":0.001
+ },
+ {
+ "Name":"VIRTUAL-SKIN-FOLD",
+ "Type":"UNKNOWN",
+ "Hidden":true,
+ "VirtualSensor":true,
+ "Formula":"WEIGHTED_AVG",
+ "Combination":["VIRTUAL-SKIN-UNFOLD-SUB1", "IS_UNFOLD"],
+ "Coefficient":[1.0, -1000000],
+ "Multiplier":0.001
+ },
+ {
+ "Name":"VIRTUAL-SKIN",
+ "Type":"SKIN",
+ "VirtualSensor":true,
+ "TriggerSensor":"skin_therm",
+ "Formula":"MAXIMUM",
+ "Combination":["VIRTUAL-SKIN-UNFOLD", "VIRTUAL-SKIN-FOLD"],
+ "Coefficient":[1.0, 1.0],
+ "HotThreshold":["NAN", 39.0, 43.0, 45.0, 46.5, 52.0, 140.0],
+ "HotHysteresis":[0.0, 1.9, 1.9, 1.9, 1.4, 1.9, 1.9],
+ "Multiplier":0.001,
+ "PollingDelay":60000,
+ "PassiveDelay":7000,
+ "BindedCdevInfo": [
+ {
+ "CdevRequest": "tpu_cooling",
+ "LimitInfo": [0, 2, 3, 4, 5, 5, 5]
+ }
+ ]
+ },
+ {
+ "Name":"VIRTUAL-SKIN-CPU-GPU",
+ "Type":"UNKNOWN",
+ "Hidden":true,
+ "VirtualSensor":true,
+ "TriggerSensor":"skin_therm",
+ "Formula":"MAXIMUM",
+ "Combination":["VIRTUAL-SKIN-UNFOLD", "VIRTUAL-SKIN-FOLD"],
+ "Coefficient":[1.0, 1.0],
+ "HotThreshold":["NAN", 39.0, 43.0, 45.0, 46.5, 52.0, 140.0],
+ "HotHysteresis":[0.0, 1.9, 1.9, 1.9, 1.4, 1.9, 1.9],
+ "Multiplier":0.001,
+ "PollingDelay":300000,
+ "PassiveDelay":7000,
+ "PIDInfo": {
+ "K_Po":["NAN", "NAN", 1800, 500, "NAN", "NAN", "NAN"],
+ "K_Pu":["NAN", "NAN", 1800, 500, "NAN", "NAN", "NAN"],
+ "K_I":["NAN", "NAN", 20, 5, "NAN", "NAN", "NAN"],
+ "K_D":["NAN", "NAN", 0, 0, "NAN", "NAN", "NAN"],
+ "I_Max":["NAN", "NAN", 1500, 100, "NAN", "NAN", "NAN"],
+ "S_Power":["NAN", "NAN", 2500, 1300, "NAN", "NAN", "NAN"],
+ "MinAllocPower":["NAN", "NAN", 2000, 800, "NAN", "NAN", "NAN"],
+ "MaxAllocPower":["NAN", "NAN", 10000, 4000, "NAN", "NAN", "NAN"],
+ "I_Cutoff":["NAN", "NAN", 2, 2, "NAN", "NAN", "NAN"],
+ "I_Default": 1000,
+ "TranCycle": 5
+ },
+ "BindedCdevInfo": [
+ {
+ "CdevRequest": "thermal-cpufreq-0",
+ "CdevWeightForPID": [1, 1, 1, 1, 1, 1, 1],
+ "MaxReleaseStep": 1,
+ "MaxThrottleStep": 1,
+ "BindedPowerRail": "S4M_VDD_CPUCL0",
+ "CdevCeiling": [0, 8, 8, 8, 8, 10, 10],
+ "LimitInfo": [0, 0, 0, 0, 8, 10, 10]
+ },
+ {
+ "CdevRequest": "thermal-cpufreq-1",
+ "CdevWeightForPID": [1, 1, 1, 1, 1, 1, 1],
+ "MaxReleaseStep": 1,
+ "MaxThrottleStep": 1,
+ "BindedPowerRail": "S3M_VDD_CPUCL1",
+ "CdevCeiling": [0, 12, 12, 12, 12, 14, 14],
+ "LimitInfo": [0, 0, 0, 0, 12, 14, 14]
+ },
+ {
+ "CdevRequest": "thermal-cpufreq-2",
+ "CdevWeightForPID": [1, 1, 1, 1, 1, 1, 1],
+ "MaxReleaseStep": 1,
+ "MaxThrottleStep": 1,
+ "BindedPowerRail": "S2M_VDD_CPUCL2",
+ "CdevCeiling": [0, 15, 15, 15, 15, 17, 17],
+ "LimitInfo": [0, 0, 0, 0, 15, 17, 17]
+ },
+ {
+ "CdevRequest": "thermal-gpufreq-0",
+ "CdevWeightForPID": [1, 1, 1, 1, 1, 1, 1],
+ "MaxReleaseStep": 1,
+ "MaxThrottleStep": 1,
+ "BindedPowerRail": "S2S_VDD_G3D",
+ "CdevCeiling": [0, 8, 8, 8, 8, 11, 11],
+ "LimitInfo": [0, 0, 0, 0, 8, 11, 11]
+ }
+ ]
+ },
{
"Name":"USB2-MINUS-USB",
"Type":"UNKNOWN",
@@ -492,5 +682,49 @@
"Type":"NPU",
"WritePath":"/dev/thermal/cdev-by-name/tpu_cooling/user_vote"
}
+ ],
+ "PowerRails":[
+ {
+ "Name":"PPVAR_VSYS_PWR_DISP"
+ },
+ {
+ "Name":"VSYS_PWR_MODEM"
+ },
+ {
+ "Name":"S2M_VDD_CPUCL2",
+ "PowerSampleDelay":7000,
+ "PowerSampleCount":1
+
+ },
+ {
+ "Name":"S3M_VDD_CPUCL1",
+ "PowerSampleDelay":7000,
+ "PowerSampleCount":1
+ },
+ {
+ "Name":"S4M_VDD_CPUCL0",
+ "PowerSampleDelay":7000,
+ "PowerSampleCount":1
+ },
+ {
+ "Name":"S5M_VDD_INT"
+ },
+ {
+ "Name":"S1M_VDD_MIF"
+ },
+ {
+ "Name":"S2S_VDD_G3D",
+ "PowerSampleDelay":7000,
+ "PowerSampleCount":1
+ },
+ {
+ "Name":"PARTIAL_SYSTEM_POWER",
+ "VirtualRails":true,
+ "Formula":"WEIGHTED_AVG",
+ "Combination":["VSYS_PWR_MODEM", "S2M_VDD_CPUCL2", "S3M_VDD_CPUCL1", "S4M_VDD_CPUCL0", "S5M_VDD_INT", "S1M_VDD_MIF", "S2S_VDD_G3D", "VSYS_PWR_WLAN_BT"],
+ "Coefficient":[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],
+ "PowerSampleDelay":7000,
+ "PowerSampleCount":5
+ }
]
}