/* * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ /* -------------------------------------------------------------------------- * "THE BEER-WARE LICENSE" (Revision 42): * , , * wrote this file. As long as you retain this notice you can do whatever you * want with this stuff. If you meet any of us some day, and you think this * stuff is worth it, you can buy us a beer in return. - The sys-clk authors * -------------------------------------------------------------------------- */ #pragma once #include #include #include #include typedef enum { HocClkSocType_Erista = 0, // T210, found in Icosa and Copper HocClkSocType_Mariko, // T214/T210B01, found in Hoag, Iowa, Calcio and Aula // HocClkSocType_Drake, // T239, found in Switch 2. Maybe someday... HocClkSocType_EnumMax } HocClkSocType; typedef enum { HocClkConsoleType_Icosa = 0, // V1 HocClkConsoleType_Copper, // Unreleased Erista HocClkConsoleType_Hoag, // Lite HocClkConsoleType_Iowa, // V2 HocClkConsoleType_Calcio, // Unreleased Mariko HocClkConsoleType_Aula, // OLED HocClkConsoleType_EnumMax, } HocClkConsoleType; typedef enum { HocClkVoltage_SOC = 0, HocClkVoltage_EMCVDD2, HocClkVoltage_CPU, HocClkVoltage_GPU, HocClkVoltage_EMCVDDQ, // Returns VDD2 on Erista HocClkVoltage_Display, HocClkVoltage_Battery, HocClkVoltage_EnumMax, } HocClkVoltage; typedef enum { HocClkProfile_Handheld = 0, HocClkProfile_HandheldCharging, // Not a real profile, just a marker HocClkProfile_HandheldChargingUSB, HocClkProfile_HandheldChargingOfficial, HocClkProfile_Docked, // Not shown on Lites HocClkProfile_EnumMax } HocClkProfile; typedef enum { HocClkModule_CPU = 0, HocClkModule_GPU, HocClkModule_MEM, HocClkModule_Governor, HocClkModule_Display, HocClkModule_EnumMax, } HocClkModule; typedef enum { HocClkThermalSensor_SOC = 0, HocClkThermalSensor_PCB, HocClkThermalSensor_Skin, HocClkThermalSensor_Battery, HocClkThermalSensor_PMIC, // Always return 50.0C, as thats the only reasonable value the PMIC sensor can generate HocClkThermalSensor_CPU, HocClkThermalSensor_GPU, HocClkThermalSensor_MEM, // Returns the PLLX sensor value on Mariko HocClkThermalSensor_PLLX, HocClkThermalSensor_BQ24193, HocClkThermalSensor_EnumMax } HocClkThermalSensor; typedef enum { HocClkPowerSensor_Now = 0, HocClkPowerSensor_Avg, HocClkPowerSensor_EnumMax } HocClkPowerSensor; typedef enum { HocClkPartLoad_EMC = 0, HocClkPartLoad_EMCCpu, HocClkPartLoad_GPU, HocClkPartLoad_CPUMax, HocClkPartLoad_BAT, // Battery raw charge percentage HocClkPartLoad_FAN, HocClkPartLoad_RamBWAll, HocClkPartLoad_RamBWCpu, HocClkPartLoad_RamBWGpu, HocClkPartLoad_RamBWPeak, HocClkPartLoad_EnumMax } HocClkPartLoad; typedef enum { HocClkSpeedo_CPU = 0, HocClkSpeedo_GPU, HocClkSpeedo_SOC, HocClkSpeedo_EnumMax, } HocClkSpeedo; typedef enum { GPUUVLevel_HiOPT = 0, GPUUVLevel_HiOPT15, GPUUVLevel_HighUV, GPUUVLevel_EnumMax, } GPUUndervoltLevel; enum { DVFSMode_Disabled = 0, DVFSMode_Hijack, // DVFSMode_OfficialService, // DVFSMode_Hack, DVFSMode_EnumMax, }; typedef enum { GpuSchedulingMode_DoNotOverride = 0, GpuSchedulingMode_Enabled, GpuSchedulingMode_Disabled, GpuSchedulingMode_EnumMax, } GpuSchedulingMode; typedef enum { GpuSchedulingOverrideMethod_Ini = 0, GpuSchedulingOverrideMethod_NvService, GpuSchedulingOverrideMethod_EnumMax, } GpuSchedulingOverrideMethod; typedef enum { ComponentGovernor_DoNotOverride = 0, ComponentGovernor_Disabled = 1, ComponentGovernor_Enabled = 2, ComponentGovernor_EnumMax, } ComponentGovernorState; typedef enum { RamDisplayMode_VDD2 = 0, RamDisplayMode_VDDQ, RamDisplayMode_EnumMax, } RamDisplayMode; typedef enum { MemoryFrequencyMeasurementMode_PLL = 0, MemoryFrequencyMeasurementMode_Actmon, MemoryFrequencyMeasurementMode_EnumMax, } MemoryFrequencyMeasurementMode; typedef enum { RamDisplayUnit_MHz = 0, RamDisplayUnit_MTs, RamDisplayUnit_MHzMTs, RamDisplayUnit_EnumMax, } RamDisplayUnit; typedef enum AulaColorMode { AulaDisplayColorMode_Saturated = 0x0, AulaDisplayColorMode_Washed = 0x45, AulaDisplayColorMode_Basic = 0x03, // Default AulaDisplayColorMode_PowerReset = 0x20, // Reset to on power on AulaDisplayColorMode_Natural = 0x23, AulaDisplayColorMode_Vivid = 0x65, AulaDisplayColorMode_Night0 = 0x43, AulaDisplayColorMode_Night1 = 0x15, AulaDisplayColorMode_Night2 = 0x35, AulaDisplayColorMode_Night3 = 0x75, } AulaColorMode; // typedef enum { // PANEL_JDI_XXX062M = 0x10, // PANEL_JDI_LAM062M109A = 0x0910, // SI. // PANEL_JDI_LPM062M326A = 0x2610, // LTPS. // PANEL_INL_P062CCA_AZ1 = 0x0F20, // PANEL_AUO_A062TAN01 = 0x0F30, // PANEL_INL_2J055IA_27A = 0x1020, // PANEL_AUO_A055TAN01 = 0x1030, // PANEL_SHP_LQ055T1SW10 = 0x1040, // PANEL_SAM_AMS699VC01 = 0x2050, // PANEL_RR_SUPER5_OLED_V1 = 0x10E0, // PANEL_RR_SUPER5_OLED_HD_V1 = 0x10E1, // PANEL_RR_SUPER7_IPS_V1 = 0x0FE0, // PANEL_RR_SUPER7_IPS_HD_V1 = 0x0FE1 // // Found on 6/2" clones. Unknown markings. Clone of AUO A062TAN01. // // Quality seems JDI like. Has bad low backlight scaling. ID: [83] 94 [0F]. Sometimes reports [30] 94 [0F]. Both IDs have correct CRC16. // PANEL_OEM_CLONE_6_2 = 0x0F83, // // Found on 5.5" clones with AUO A055TAN02 (59.05A30.001) fake markings. // PANEL_OEM_CLONE_5_5 = 0x00B3, // // Found on 5.5" clones with AUO A055TAN02 (59.05A30.001) fake markings. // PANEL_OEM_CLONE = 0x0000 // //0x0F40 [40] 94 [0F], 5.5" clone // } HocClkDisplayPanel; #define HOCCLK_ENUM_VALID(n, v) ((v) < n##_EnumMax) // Packed u32 // Bits 0-7 - CPU // Bits 8-15 - GPU // Bits 16-23 - VRR // Bits 24-32 - unused inline u32 GovernorStatePack(u8 cpu, u8 gpu, u8 vrr) { return (u32)cpu | ((u32)gpu << 8) | ((u32)vrr << 16); } inline u8 GovernorStateCpu(u32 p) { return (u8)(p & 0xFF); } inline u8 GovernorStateGpu(u32 p) { return (u8)((p >> 8) & 0xFF); } inline u8 GovernorStateVrr(u32 p) { return (u8)((p >> 16) & 0xFF); } static inline const char* hocclkFormatModule(HocClkModule module, bool pretty) { switch(module) { case HocClkModule_CPU: return pretty ? "CPU" : "cpu"; case HocClkModule_GPU: return pretty ? "GPU" : "gpu"; case HocClkModule_MEM: return pretty ? "Memory" : "mem"; case HocClkModule_Display: return pretty ? "Display" : "display"; case HocClkModule_Governor: return pretty ? "Governor" : "governor"; default: return "null"; } } static inline const char* hocclkFormatThermalSensor(HocClkThermalSensor thermSensor, bool pretty) { switch(thermSensor) { case HocClkThermalSensor_SOC: return pretty ? "SOC" : "soc"; case HocClkThermalSensor_PCB: return pretty ? "PCB" : "pcb"; case HocClkThermalSensor_Skin: return pretty ? "Skin" : "skin"; case HocClkThermalSensor_Battery: return pretty ? "BAT" : "battery"; case HocClkThermalSensor_PMIC: return pretty ? "PMIC" : "pmic"; case HocClkThermalSensor_CPU: return pretty ? "CPU" : "cpu"; case HocClkThermalSensor_GPU: return pretty ? "GPU" : "gpu"; case HocClkThermalSensor_MEM: return pretty ? "MEM" : "mem"; case HocClkThermalSensor_PLLX: return pretty ? "PLLX" : "pllx"; default: return "unknown"; } } static inline const char* hocclkFormatPowerSensor(HocClkPowerSensor powSensor, bool pretty) { switch(powSensor) { case HocClkPowerSensor_Now: return pretty ? "Now" : "now"; case HocClkPowerSensor_Avg: return pretty ? "Avg" : "avg"; default: return "unknown"; } } static inline const char* hocclkFormatProfile(HocClkProfile profile, bool pretty) { switch(profile) { case HocClkProfile_Docked: return pretty ? "Docked" : "docked"; case HocClkProfile_Handheld: return pretty ? "Handheld" : "handheld"; case HocClkProfile_HandheldCharging: return pretty ? "Charging" : "handheld_charging"; case HocClkProfile_HandheldChargingUSB: return pretty ? "USB Charger" : "handheld_charging_usb"; case HocClkProfile_HandheldChargingOfficial: return pretty ? "PD Charger" : "handheld_charging_official"; default: return "unknown"; } } static inline const char* hocClkFormatVoltage(HocClkVoltage voltage, bool pretty) { switch(voltage) { case HocClkVoltage_CPU: return pretty ? "CPU" : "cpu"; case HocClkVoltage_GPU: return pretty ? "GPU" : "gpu"; case HocClkVoltage_EMCVDD2: return pretty ? "VDD2" : "vdd2"; case HocClkVoltage_EMCVDDQ: return pretty ? "VDDQ" : "vddq"; case HocClkVoltage_SOC: return pretty ? "SOC" : "soc"; case HocClkVoltage_Display: return pretty ? "Display" : "display"; default: return "unknown"; } } // static inline const char* hocClkFormatPanel(HocClkDisplayPanel panel, bool pretty) // { // switch(panel) // { // case PANEL_JDI_XXX062M: // return pretty ? "JDI XXX062M" : "jdi_xxx062m"; // case PANEL_JDI_LAM062M109A: // return pretty ? "JDI LAM062M109A" : "jdi_lam062m109a"; // case PANEL_JDI_LPM062M326A: // return pretty ? "JDI LPM062M326A" : "jdi_lpm062m326a"; // case PANEL_INL_P062CCA_AZ1: // return pretty ? "INL P062CCA-AZ1" : "inl_p062cca_az1"; // case PANEL_AUO_A062TAN01: // return pretty ? "AUO A062TAN01" : "auo_a062tan01"; // case PANEL_INL_2J055IA_27A: // return pretty ? "INL 2J055IA-27A" : "inl_2j055ia_27a"; // case PANEL_AUO_A055TAN01: // return pretty ? "AUO A055TAN01" : "auo_a055tan01"; // case PANEL_SHP_LQ055T1SW10: // return pretty ? "SHP LQ055T1SW10" : "shp_lq055t1sw10"; // case PANEL_SAM_AMS699VC01: // return pretty ? "SAM AMS699VC01" : "sam_ams699vc01"; // case PANEL_RR_SUPER5_OLED_V1: // return pretty ? "SUPER5 OLED" : "rr_super5_oled_v1"; // case PANEL_RR_SUPER5_OLED_HD_V1: // return pretty ? "SUPER5 OLED HD" : "rr_super5_oled_hd_v1"; // case PANEL_RR_SUPER7_IPS_V1: // return pretty ? "SUPER7 IPS" : "rr_super7_ips_v1"; // case PANEL_RR_SUPER7_IPS_HD_V1: // return pretty ? "RR Super7 IPS HD V1" : "rr_super7_ips_hd_v1"; // case PANEL_OEM_CLONE_6_2: // return pretty ? "OEM Clone 6.2" : "oem_clone_6_2"; // case PANEL_OEM_CLONE_5_5: // return pretty ? "OEM Clone 5.5" : "oem_clone_5_5"; // case PANEL_OEM_CLONE: // return pretty ? "OEM Clone" : "oem_clone"; // default: // return "unknown"; // } // }