diff --git a/tma525c/pt_loader.c b/tma525c/pt_loader.c
index 83e7a59..09d84bd 100644
--- a/tma525c/pt_loader.c
+++ b/tma525c/pt_loader.c
@@ -81,6 +81,8 @@
 #define PT_ROW_DATA_OFFSET				5
 
 #define PT_CALIBRATION_REV 1035728
+#define PT_STARTING_SUPPORT_DOWNGRADE_FW_VER 0x010A
+#define PT_STARTING_SUPPORT_DOWNGRADE_FW_REV 1035728
 
 #define PT_POST_TT_CFG_CRC_MASK				0x2
 static inline struct pt_loader_data *pt_get_loader_data(
@@ -361,6 +363,53 @@
 
 
 #if (PT_FW_UPGRADE || PT_TTCONFIG_UPGRADE)
+static bool pt_check_if_calibration(u32 fw_revctrl_img, u32 fw_revctrl_new)
+{
+	// Need to do calibration if the old and new version
+	// is crossing the version needed calibration.
+	if (fw_revctrl_img < PT_CALIBRATION_REV && fw_revctrl_new >= PT_CALIBRATION_REV)
+		return true;
+	else if (fw_revctrl_img >= PT_CALIBRATION_REV && fw_revctrl_new < PT_CALIBRATION_REV)
+		return true;
+	return false;
+}
+
+static bool pt_check_if_downgrade(struct device *dev, u32 fw_ver_img, u32 fw_ver_new,
+				  u32 fw_revctrl_img, u32 fw_revctrl_new)
+{
+	/* Should downgrade FW only when
+	 * new fw is older and new fw ver/rev supports downgrade mechanism.
+	 */
+	if (fw_ver_new < fw_ver_img && fw_ver_new >= PT_STARTING_SUPPORT_DOWNGRADE_FW_VER) {
+		pt_debug(dev, DL_INFO, "%s: FW ver is older, will downgrade\n", __func__);
+		return true;
+	}
+
+	if (fw_revctrl_new < fw_revctrl_img &&
+	    fw_revctrl_new >= PT_STARTING_SUPPORT_DOWNGRADE_FW_REV) {
+		pt_debug(dev, DL_INFO, "%s: FW rev is older, will downgrade\n", __func__);
+		return true;
+	}
+
+	return false;
+}
+
+static bool pt_check_if_upgrade(struct device *dev, u32 fw_ver_img, u32 fw_ver_new,
+				u32 fw_revctrl_img, u32 fw_revctrl_new)
+{
+	/* Upgrade FW when fw img is newer
+	 */
+	if (fw_ver_new > fw_ver_img) {
+		pt_debug(dev, DL_INFO, "%s: FW ver is newer, will upgrade\n", __func__);
+		return true;
+	}
+
+	if (fw_revctrl_new > fw_revctrl_img) {
+		pt_debug(dev, DL_INFO, "%s: FW rev is newer, will upgrade\n", __func__);
+		return true;
+	}
+	return false;
+}
 /*******************************************************************************
  * FUNCTION: pt_check_firmware_version
  *
@@ -386,51 +435,31 @@
 	fw_ver_img = ld->si->ttdata.fw_ver_major << 8;
 	fw_ver_img += ld->si->ttdata.fw_ver_minor;
 
-	pt_debug(dev, DL_WARN,
-		"%s: Current FW ver:0x%04X New FW ver:0x%04X\n", __func__,
-			fw_ver_img, fw_ver_new);
+	pt_debug(dev, DL_INFO, "%s: Current FW ver:0x%04X New FW ver:0x%04X\n", __func__,
+		 fw_ver_img, fw_ver_new);
 
 	fw_revctrl_img = ld->si->ttdata.revctrl;
 
-	pt_debug(dev, DL_WARN, "%s: Current FW rev:%d New FW rev:%d\n", __func__, fw_revctrl_img,
+	pt_debug(dev, DL_INFO, "%s: Current FW rev:%d New FW rev:%d\n", __func__, fw_revctrl_img,
 		 fw_revctrl_new);
 
 	// Check if calibaration needed
-	if (fw_revctrl_img < PT_CALIBRATION_REV && fw_revctrl_new >= PT_CALIBRATION_REV) {
+	if (pt_check_if_calibration(fw_revctrl_img, fw_revctrl_new)) {
 		ld->loader_pdata->flags = PT_LOADER_FLAG_CALIBRATE_AFTER_FW_UPGRADE;
-		pt_debug(dev, DL_WARN, "%s: Will do auto calibration after FW updated.\n",
+		pt_debug(dev, DL_INFO, "%s: Will do auto calibration after FW updated.\n",
 			 __func__);
 	} else {
 		ld->loader_pdata->flags = PT_LOADER_FLAG_NONE;
 		if (fw_revctrl_new > fw_revctrl_img) {
-			pt_debug(dev, DL_WARN,
+			pt_debug(dev, DL_INFO,
 				 "%s: Will not do auto calibration after FW updated.\n", __func__);
 		}
 	}
 
-	if (fw_ver_new > fw_ver_img) {
-		pt_debug(dev, DL_WARN,
-			"%s: Image is newer, will upgrade\n", __func__);
+	if (pt_check_if_downgrade(dev, fw_ver_img, fw_ver_new, fw_revctrl_img, fw_revctrl_new))
 		return 1;
-	}
-
-	if (fw_ver_new < fw_ver_img) {
-		pt_debug(dev, DL_WARN,
-			"%s: Image is older, will NOT upgrade\n", __func__);
-		return -1;
-	}
-
-	if (fw_revctrl_new > fw_revctrl_img) {
-		pt_debug(dev, DL_WARN,
-			"%s: Image is newer, will upgrade\n", __func__);
+	else if (pt_check_if_upgrade(dev, fw_ver_img, fw_ver_new, fw_revctrl_img, fw_revctrl_new))
 		return 1;
-	}
-
-	if (fw_revctrl_new < fw_revctrl_img) {
-		pt_debug(dev, DL_WARN,
-			"%s: Image is older, will NOT upgrade\n", __func__);
-		return -1;
-	}
 
 	return 0;
 }
