struct equation_coefs coef;
        int low;
        int high;
+       int tj_t;
 };
 
 struct rcar_gen3_thermal_priv {
 /* no idea where these constants come from */
 #define TJ_3 -41
 
-static void rcar_gen3_thermal_calc_coefs(struct equation_coefs *coef,
+static void rcar_gen3_thermal_calc_coefs(struct rcar_gen3_thermal_tsc *tsc,
                                         int *ptat, int *thcode,
                                         int ths_tj_1)
 {
-       int tj_2;
-
        /* TODO: Find documentation and document constant calculation formula */
 
        /*
         * Division is not scaled in BSP and if scaled it might overflow
         * the dividend (4095 * 4095 << 14 > INT_MAX) so keep it unscaled
         */
-       tj_2 = (FIXPT_INT((ptat[1] - ptat[2]) * 157)
-               / (ptat[0] - ptat[2])) + FIXPT_INT(TJ_3);
+       tsc->tj_t = (FIXPT_INT((ptat[1] - ptat[2]) * 157)
+                    / (ptat[0] - ptat[2])) + FIXPT_INT(TJ_3);
 
-       coef->a1 = FIXPT_DIV(FIXPT_INT(thcode[1] - thcode[2]),
-                            tj_2 - FIXPT_INT(TJ_3));
-       coef->b1 = FIXPT_INT(thcode[2]) - coef->a1 * TJ_3;
+       tsc->coef.a1 = FIXPT_DIV(FIXPT_INT(thcode[1] - thcode[2]),
+                                tsc->tj_t - FIXPT_INT(TJ_3));
+       tsc->coef.b1 = FIXPT_INT(thcode[2]) - tsc->coef.a1 * TJ_3;
 
-       coef->a2 = FIXPT_DIV(FIXPT_INT(thcode[1] - thcode[0]),
-                            tj_2 - FIXPT_INT(ths_tj_1));
-       coef->b2 = FIXPT_INT(thcode[0]) - coef->a2 * ths_tj_1;
+       tsc->coef.a2 = FIXPT_DIV(FIXPT_INT(thcode[1] - thcode[0]),
+                                tsc->tj_t - FIXPT_INT(ths_tj_1));
+       tsc->coef.b2 = FIXPT_INT(thcode[0]) - tsc->coef.a2 * ths_tj_1;
 }
 
 static int rcar_gen3_thermal_round(int temp)
 static int rcar_gen3_thermal_mcelsius_to_temp(struct rcar_gen3_thermal_tsc *tsc,
                                              int mcelsius)
 {
-       int celsius, val1, val2;
+       int celsius, val;
 
        celsius = DIV_ROUND_CLOSEST(mcelsius, 1000);
-       val1 = celsius * tsc->coef.a1 + tsc->coef.b1;
-       val2 = celsius * tsc->coef.a2 + tsc->coef.b2;
+       if (celsius <= INT_FIXPT(tsc->tj_t))
+               val = celsius * tsc->coef.a1 + tsc->coef.b1;
+       else
+               val = celsius * tsc->coef.a2 + tsc->coef.b2;
 
-       return INT_FIXPT((val1 + val2) / 2);
+       return INT_FIXPT(val);
 }
 
 static int rcar_gen3_thermal_set_trips(void *devdata, int low, int high)
                priv->tscs[i] = tsc;
 
                priv->thermal_init(tsc);
-               rcar_gen3_thermal_calc_coefs(&tsc->coef, ptat, thcode[i],
+               rcar_gen3_thermal_calc_coefs(tsc, ptat, thcode[i],
                                             *rcar_gen3_ths_tj_1);
 
                zone = devm_thermal_zone_of_sensor_register(dev, i, tsc,