hocclk: add BQ24193 temp driver

This commit is contained in:
souldbminersmwc
2026-04-22 16:40:51 -04:00
parent 94b63003ab
commit e6942f95e7
9 changed files with 169 additions and 5 deletions

View File

@@ -92,6 +92,7 @@ typedef enum
HocClkThermalSensor_GPU,
HocClkThermalSensor_MEM, // Returns the PLLX sensor value on Mariko
HocClkThermalSensor_PLLX,
HocClkThermalSensor_BQ24193,
HocClkThermalSensor_EnumMax
} HocClkThermalSensor;

View File

@@ -60,7 +60,7 @@ typedef struct
u16 resolutionHeight;
// Reserved for future use
u8 reserved[0x428];
u8 reserved[0x424];
} HocClkContext;
typedef struct

View File

@@ -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)
#---------------------------------------------------------------------------------

View File

@@ -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]);
}

View File

@@ -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",

View File

@@ -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();
}

View File

@@ -32,7 +32,7 @@
#include <pwm.h>
#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);

View File

@@ -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;
}
}

View File

@@ -0,0 +1,109 @@
#include "board.hpp"
#include <i2c.h>
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();
}