|
@@ -401,13 +401,17 @@ static u32 rk_tsadcv2_temp_to_code(struct chip_tsadc_table table,
|
|
|
int temp)
|
|
|
{
|
|
|
int high, low, mid;
|
|
|
+ u32 error = 0;
|
|
|
|
|
|
low = 0;
|
|
|
high = table.length - 1;
|
|
|
mid = (high + low) / 2;
|
|
|
|
|
|
- if (temp < table.id[low].temp || temp > table.id[high].temp)
|
|
|
- return 0;
|
|
|
+ /* Return mask code data when the temp is over table range */
|
|
|
+ if (temp < table.id[low].temp || temp > table.id[high].temp) {
|
|
|
+ error = table.data_mask;
|
|
|
+ goto exit;
|
|
|
+ }
|
|
|
|
|
|
while (low <= high) {
|
|
|
if (temp == table.id[mid].temp)
|
|
@@ -419,7 +423,9 @@ static u32 rk_tsadcv2_temp_to_code(struct chip_tsadc_table table,
|
|
|
mid = (low + high) / 2;
|
|
|
}
|
|
|
|
|
|
- return 0;
|
|
|
+exit:
|
|
|
+ pr_err("Invalid the conversion, error=%d\n", error);
|
|
|
+ return error;
|
|
|
}
|
|
|
|
|
|
static int rk_tsadcv2_code_to_temp(struct chip_tsadc_table table, u32 code,
|
|
@@ -651,7 +657,11 @@ static void rk_tsadcv2_alarm_temp(struct chip_tsadc_table table,
|
|
|
{
|
|
|
u32 alarm_value, int_en;
|
|
|
|
|
|
+ /* Make sure the value is valid */
|
|
|
alarm_value = rk_tsadcv2_temp_to_code(table, temp);
|
|
|
+ if (alarm_value == table.data_mask)
|
|
|
+ return;
|
|
|
+
|
|
|
writel_relaxed(alarm_value & table.data_mask,
|
|
|
regs + TSADCV2_COMP_INT(chn));
|
|
|
|
|
@@ -665,7 +675,11 @@ static void rk_tsadcv2_tshut_temp(struct chip_tsadc_table table,
|
|
|
{
|
|
|
u32 tshut_value, val;
|
|
|
|
|
|
+ /* Make sure the value is valid */
|
|
|
tshut_value = rk_tsadcv2_temp_to_code(table, temp);
|
|
|
+ if (tshut_value == table.data_mask)
|
|
|
+ return;
|
|
|
+
|
|
|
writel_relaxed(tshut_value, regs + TSADCV2_COMP_SHUT(chn));
|
|
|
|
|
|
/* TSHUT will be valid */
|