#define AVS_TMON_TP_TEST_ENABLE                0x20
 
 /* Default coefficients */
-#define AVS_TMON_TEMP_SLOPE            -487
+#define AVS_TMON_TEMP_SLOPE            487
 #define AVS_TMON_TEMP_OFFSET           410040
 
 /* HW related temperature constants */
        struct thermal_zone_device *thermal;
 };
 
-static void avs_tmon_get_coeffs(struct thermal_zone_device *tz, int *slope,
-                               int *offset)
-{
-       *slope = thermal_zone_get_slope(tz);
-       *offset = thermal_zone_get_offset(tz);
-}
-
 /* Convert a HW code to a temperature reading (millidegree celsius) */
 static inline int avs_tmon_code_to_temp(struct thermal_zone_device *tz,
                                        u32 code)
 {
-       const int val = code & AVS_TMON_TEMP_MASK;
-       int slope, offset;
-
-       avs_tmon_get_coeffs(tz, &slope, &offset);
-
-       return slope * val + offset;
+       return (AVS_TMON_TEMP_OFFSET -
+               (int)((code & AVS_TMON_TEMP_MAX) * AVS_TMON_TEMP_SLOPE));
 }
 
 /*
 static inline u32 avs_tmon_temp_to_code(struct thermal_zone_device *tz,
                                        int temp, bool low)
 {
-       int slope, offset;
-
        if (temp < AVS_TMON_TEMP_MIN)
-               return AVS_TMON_TEMP_MAX; /* Maximum code value */
-
-       avs_tmon_get_coeffs(tz, &slope, &offset);
+               return AVS_TMON_TEMP_MAX;       /* Maximum code value */
 
-       if (temp >= offset)
+       if (temp >= AVS_TMON_TEMP_OFFSET)
                return 0;       /* Minimum code value */
 
        if (low)
-               return (u32)(DIV_ROUND_UP(offset - temp, abs(slope)));
+               return (u32)(DIV_ROUND_UP(AVS_TMON_TEMP_OFFSET - temp,
+                                         AVS_TMON_TEMP_SLOPE));
        else
-               return (u32)((offset - temp) / abs(slope));
+               return (u32)((AVS_TMON_TEMP_OFFSET - temp) /
+                             AVS_TMON_TEMP_SLOPE);
 }
 
 static int brcmstb_get_temp(void *data, int *temp)