diff --git a/Source/hoc-clk/common/include/hocclk/board.h b/Source/hoc-clk/common/include/hocclk/board.h index 578aafe0..f039f878 100644 --- a/Source/hoc-clk/common/include/hocclk/board.h +++ b/Source/hoc-clk/common/include/hocclk/board.h @@ -92,6 +92,7 @@ typedef enum HocClkThermalSensor_GPU, HocClkThermalSensor_MEM, // Returns the PLLX sensor value on Mariko HocClkThermalSensor_PLLX, + HocClkThermalSensor_BQ24193, HocClkThermalSensor_EnumMax } HocClkThermalSensor; diff --git a/Source/hoc-clk/common/include/hocclk/clock_manager.h b/Source/hoc-clk/common/include/hocclk/clock_manager.h index 144116c8..93dd67c9 100644 --- a/Source/hoc-clk/common/include/hocclk/clock_manager.h +++ b/Source/hoc-clk/common/include/hocclk/clock_manager.h @@ -60,7 +60,7 @@ typedef struct u16 resolutionHeight; // Reserved for future use - u8 reserved[0x428]; + u8 reserved[0x424]; } HocClkContext; typedef struct diff --git a/Source/hoc-clk/overlay/Makefile b/Source/hoc-clk/overlay/Makefile index 46f984d8..762be636 100644 --- a/Source/hoc-clk/overlay/Makefile +++ b/Source/hoc-clk/overlay/Makefile @@ -39,7 +39,7 @@ include ${TOPDIR}/lib/libultrahand/ultrahand.mk # version control constants #--------------------------------------------------------------------------------- #TARGET_VERSION := $(shell git describe --dirty --always --tags) -APP_VERSION := 2.0.2 +APP_VERSION := 2.1.0 TARGET_VERSION := $(APP_VERSION) #--------------------------------------------------------------------------------- diff --git a/Source/hoc-clk/overlay/src/ui/gui/about_gui.cpp b/Source/hoc-clk/overlay/src/ui/gui/about_gui.cpp index aaf27604..08b4fd31 100644 --- a/Source/hoc-clk/overlay/src/ui/gui/about_gui.cpp +++ b/Source/hoc-clk/overlay/src/ui/gui/about_gui.cpp @@ -36,6 +36,7 @@ tsl::elm::ListItem* ramBWItemAll = NULL; tsl::elm::ListItem* ramBWItemCpu = NULL; tsl::elm::ListItem* ramBWItemGpu = NULL; tsl::elm::ListItem* ramBWItemMax = NULL; +tsl::elm::ListItem* bqtempitem = NULL; ImageElement* CatImage = NULL; HideableCategoryHeader* CatHeader = NULL; @@ -73,6 +74,10 @@ void AboutGui::listUI() this->listElement->addItem(eristaPLLXItem); } + bqtempitem = + new tsl::elm::ListItem("BQ24193 Temp:"); + this->listElement->addItem(bqtempitem); + this->listElement->addItem( new tsl::elm::CategoryHeader("RAM Bandwidth") ); @@ -382,4 +387,23 @@ void AboutGui::refresh() sprintf(strings[9], "%u MB/s", context->partLoad[HocClkPartLoad_RamBWPeak]); ramBWItemMax->setValue(strings[9]); + switch(context->temps[HocClkThermalSensor_BQ24193]) { + case 0: + strcpy(strings[10], "Normal"); + break; + case 1: + strcpy(strings[10], "Warm"); + break; + case 2: + strcpy(strings[10], "Hot"); + break; + case 3: + strcpy(strings[10], "Overheat"); + break; + default: + strcpy(strings[10], "Unknown"); + } + + bqtempitem->setValue(strings[10]); + } diff --git a/Source/hoc-clk/sysmodule/perms.json b/Source/hoc-clk/sysmodule/perms.json index a73a5f3d..57e821af 100644 --- a/Source/hoc-clk/sysmodule/perms.json +++ b/Source/hoc-clk/sysmodule/perms.json @@ -31,6 +31,14 @@ "highest_cpu_id": 3 } }, { + "type": "map", + "value": { + "address": "0x70000000", + "is_ro": false, + "size": "0x00001000", + "is_io": true + } + }, { "type": "map", "value": { "address": "0x60006000", diff --git a/Source/hoc-clk/sysmodule/src/board/board.cpp b/Source/hoc-clk/sysmodule/src/board/board.cpp index 34429b8b..3352b023 100644 --- a/Source/hoc-clk/sysmodule/src/board/board.cpp +++ b/Source/hoc-clk/sysmodule/src/board/board.cpp @@ -44,7 +44,7 @@ #include "../file_utils.hpp" namespace board { - u64 clkVirtAddr, dsiVirtAddr; + u64 clkVirtAddr, dsiVirtAddr, apbVirtAddr; HocClkSocType gSocType; u8 gDramID; @@ -153,6 +153,9 @@ namespace board { rc = QueryMemoryMapping(&dsiVirtAddr, 0x54300000, 0x40000); ASSERT_RESULT_OK(rc, "QueryMemoryMapping (dsi)"); + rc = QueryMemoryMapping(&apbVirtAddr, 0x70000000, 0x1000); + ASSERT_RESULT_OK(rc, "QueryMemoryMapping (apb)"); + display::DisplayRefreshConfig cfg = {.clkVirtAddr = clkVirtAddr, .dsiVirtAddr = dsiVirtAddr, .isLite = (GetConsoleType() == HocClkConsoleType_Hoag), .isRetroSUPER = integrations::GetRETROSuperStatus()}; display::Initialize(&cfg); @@ -175,6 +178,7 @@ namespace board { max17050Exit(); tmp451Exit(); + display::Shutdown(); ExitLoad(); @@ -185,7 +189,6 @@ namespace board { rgltrExit(); batteryInfoExit(); pmdmntExit(); - display::Shutdown(); nvExit(); } diff --git a/Source/hoc-clk/sysmodule/src/board/board_sensor.cpp b/Source/hoc-clk/sysmodule/src/board/board_sensor.cpp index da545037..c9c69554 100644 --- a/Source/hoc-clk/sysmodule/src/board/board_sensor.cpp +++ b/Source/hoc-clk/sysmodule/src/board/board_sensor.cpp @@ -32,7 +32,7 @@ #include #include "board.hpp" #include "../soctherm.hpp" - +#include "bq24193.hpp" namespace board { s32 GetTemperatureMilli(HocClkThermalSensor sensor) { @@ -82,6 +82,11 @@ namespace board { } case HocClkThermalSensor_PLLX: { millis = temps.pllx; + break; + } + case HocClkThermalSensor_BQ24193: { + millis = bq24193::getBQTemp(); + break; } default: { ASSERT_ENUM_VALID(HocClkThermalSensor, sensor); diff --git a/Source/hoc-clk/sysmodule/src/board/bq24193.cpp b/Source/hoc-clk/sysmodule/src/board/bq24193.cpp new file mode 100644 index 00000000..b49ac8a5 --- /dev/null +++ b/Source/hoc-clk/sysmodule/src/board/bq24193.cpp @@ -0,0 +1,14 @@ +#include "bq24193.hpp" + +namespace bq24193 { + static u8 bq24193_get_reg(u8 reg) + { + u8 out; + I2cRead_OutU8(I2cDevice_Bq24193, reg, &out); + return out; + } + u8 getBQTemp() { + u8 regVal = bq24193_get_reg(BQ24193_FaultReg); + return regVal & BQ24193_FAULT_THERM_MASK; + } +} diff --git a/Source/hoc-clk/sysmodule/src/board/bq24193.hpp b/Source/hoc-clk/sysmodule/src/board/bq24193.hpp new file mode 100644 index 00000000..af626a50 --- /dev/null +++ b/Source/hoc-clk/sysmodule/src/board/bq24193.hpp @@ -0,0 +1,109 @@ +#include "board.hpp" +#include + +namespace bq24193 { + #define BQ24193_I2C_ADDR 0x6B + + // REG 0 masks. + #define BQ24193_INCONFIG_INLIMIT_MASK (7<<0) + #define BQ24193_INCONFIG_VINDPM_MASK 0x78 + #define BQ24193_INCONFIG_HIZ_EN_MASK (1<<7) + + // REG 1 masks. + #define BQ24193_PORCONFIG_BOOST_MASK (1<<0) + #define BQ24193_PORCONFIG_SYSMIN_MASK (7<<1) // 3000uV HOS default. + #define BQ24193_PORCONFIG_CHGCONFIG_MASK (3<<4) + #define BQ24193_PORCONFIG_CHGCONFIG_CHARGER_EN (1<<4) + #define BQ24193_PORCONFIG_I2CWATCHDOG_MASK (1<<6) + #define BQ24193_PORCONFIG_RESET_MASK (1<<7) + + // REG 2 masks. + #define BQ24193_CHRGCURR_20PCT_MASK (1<<0) + #define BQ24193_CHRGCURR_ICHG_MASK 0xFC + + // REG 3 masks. + #define BQ24193_PRECHRG_ITERM 0x0F + #define BQ24193_PRECHRG_IPRECHG 0xF0 + + // REG 4 masks. + #define BQ24193_CHRGVOLT_VTHRES (1<<0) + #define BQ24193_CHRGVOLT_BATTLOW (1<<1) + #define BQ24193_CHRGVOLT_VREG 0xFC + + // REG 5 masks. + #define BQ24193_CHRGTERM_ISET_MASK (1<<0) + #define BQ24193_CHRGTERM_CHGTIMER_MASK (3<<1) + #define BQ24193_CHRGTERM_ENTIMER_MASK (1<<3) + #define BQ24193_CHRGTERM_WATCHDOG_MASK (3<<4) + #define BQ24193_CHRGTERM_TERM_ST_MASK (1<<6) + #define BQ24193_CHRGTERM_TERM_EN_MASK (1<<7) + + // REG 6 masks. + #define BQ24193_IRTHERMAL_THERM_MASK (3<<0) + #define BQ24193_IRTHERMAL_VCLAMP_MASK (7<<2) + #define BQ24193_IRTHERMAL_BATTCOMP_MASK (7<<5) + + // REG 7 masks. + #define BQ24193_MISC_INT_MASK (3<<0) + #define BQ24193_MISC_VSET_MASK (1<<4) + #define BQ24193_MISC_BATFET_DI_MASK (1<<5) + #define BQ24193_MISC_TMR2X_EN_MASK (1<<6) + #define BQ24193_MISC_DPDM_EN_MASK (1<<7) + + // REG 8 masks. + #define BQ24193_STATUS_VSYS_MASK (1<<0) + #define BQ24193_STATUS_THERM_MASK (1<<1) + #define BQ24193_STATUS_PG_MASK (1<<2) + #define BQ24193_STATUS_DPM_MASK (1<<3) + #define BQ24193_STATUS_CHRG_MASK (3<<4) + #define BQ24193_STATUS_VBUS_MASK (3<<6) + + // REG 9 masks. + #define BQ24193_FAULT_THERM_MASK (7<<0) + #define BQ24193_FAULT_BATT_OVP_MASK (1<<3) + #define BQ24193_FAULT_CHARGE_MASK (3<<4) + #define BQ24193_FAULT_BOOST_MASK (1<<6) + #define BQ24193_FAULT_WATCHDOG_MASK (1<<7) + + // REG A masks. + #define BQ24193_VENDORPART_DEV_MASK (3<<0) + #define BQ24193_VENDORPART_PN_MASK (7<<3) + + enum BQ24193_reg { + BQ24193_InputSource = 0x00, + BQ24193_PORConfig = 0x01, + BQ24193_ChrgCurr = 0x02, + BQ24193_PreChrgTerm = 0x03, + BQ24193_ChrgVolt = 0x04, + BQ24193_ChrgTermTimer = 0x05, + BQ24193_IRCompThermal = 0x06, + BQ24193_Misc = 0x07, + BQ24193_Status = 0x08, + BQ24193_FaultReg = 0x09, + BQ24193_VendorPart = 0x0A, + }; + + enum BQ24193_reg_prop { + BQ24193_InputVoltageLimit, // REG 0. + BQ24193_InputCurrentLimit, // REG 0. + BQ24193_SystemMinimumVoltage, // REG 1. + BQ24193_FastChargeCurrentLimit, // REG 2. + BQ24193_ChargeVoltageLimit, // REG 4. + BQ24193_RechargeThreshold, // REG 4. + BQ24193_ThermalRegulation, // REG 6. + BQ24193_ChargeStatus, // REG 8. + BQ24193_TempStatus, // REG 9. + BQ24193_DevID, // REG A. + BQ24193_ProductNumber, // REG A. + }; + // 0: Normal, 2: Warm, 3: Cool, 5: Cold, 6: Hot. + enum BQ24193_Temp { + BQ24193_Temp_Normal = 0, + BQ24193_Temp_Warm = 2, + BQ24193_Temp_Cool = 3, + BQ24193_Temp_Cold = 5, + BQ24193_Temp_Hot = 6, + }; + u8 getBQTemp(); +} +