thermal: rockchip: Implement rk_tsadc_limit_amplitude() for rv1126b

Change-Id: I790f9e23827a5fbb66692b9a5903823fd2b4eb31
Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
This commit is contained in:
Finley Xiao
2025-06-24 19:44:40 +08:00
committed by Tao Huang
parent 78d4e14a04
commit 3ae2642301

View File

@@ -272,6 +272,8 @@ struct rockchip_thermal_data {
#define TSADC_DATA_SIGN_BIT BIT(16)
#define TSADC_DATA_NEGATIVE 0xfffe0000
#define TSADC_TEMP_DEBOUNCE 5000
#define TSADC_TEMP_CRITICAL 115000
#define TSADCV2_HIGHT_INT_DEBOUNCE_COUNT 4
#define TSADCV2_HIGHT_TSHUT_DEBOUNCE_COUNT 4
@@ -1401,6 +1403,33 @@ static int rk_tsadcv4_get_temp(const struct chip_tsadc_table *table,
return rk_tsadcv2_code_to_temp(table, val, temp);
}
static int rk_tsadc_limit_amplitude(int new_temp, bool enable)
{
static int last_temp = INT_MAX;
/* Reinit last temp when phy init */
if (!enable) {
last_temp = INT_MAX;
return 0;
}
if (last_temp != INT_MAX) {
if (abs(new_temp - last_temp) > TSADC_TEMP_DEBOUNCE) {
if (new_temp > last_temp)
new_temp = last_temp + TSADC_TEMP_DEBOUNCE;
else
new_temp = last_temp - TSADC_TEMP_DEBOUNCE;
}
} else {
/* Limit the first temperature */
if (new_temp >= TSADC_TEMP_CRITICAL)
new_temp = TSADC_TEMP_CRITICAL - TSADC_TEMP_DEBOUNCE;
}
last_temp = new_temp;
return new_temp;
}
static int rk_tsadcv5_get_temp(const struct chip_tsadc_table *table,
int chn, void __iomem *regs, int *temp)
{
@@ -1416,6 +1445,8 @@ static int rk_tsadcv5_get_temp(const struct chip_tsadc_table *table,
else if (*temp > MAX_TEMP)
*temp = MAX_TEMP;
*temp = rk_tsadc_limit_amplitude(*temp, true);
return 0;
}
@@ -1695,6 +1726,7 @@ static void rv1126b_tsadc_phy_init(struct device *dev, struct regmap *grf,
regmap_write(grf, RV1126B_GRF_TSADC_CON1,
RV1126B_UNLOCK_TRIGGER | RV1126B_UNLOCK_TRIGGER_MASK);
regmap_write(grf, RV1126B_GRF_TSADC_CON1, RV1126B_UNLOCK_TRIGGER_MASK);
rk_tsadc_limit_amplitude(0, false);
}
static const struct rockchip_tsadc_chip px30_tsadc_data = {