struct qla_hw_data *ha = vha->hw;
        uint8_t byte;
 
-       ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x10ca,
-           "Entered %s.\n", __func__);
-
-       if (ha->thermal_support & THERMAL_SUPPORT_I2C) {
-               rval = qla2x00_read_sfp(vha, 0, &byte,
-                   0x98, 0x1, 1, BIT_13|BIT_12|BIT_0);
-               *temp = byte;
-               if (rval == QLA_SUCCESS)
-                       goto done;
-
-               ql_log(ql_log_warn, vha, 0x10c9,
-                   "Thermal not supported through I2C bus, trying alternate "
-                   "method (ISP access).\n");
-               ha->thermal_support &= ~THERMAL_SUPPORT_I2C;
+       if (!IS_FWI2_CAPABLE(ha) || IS_QLA24XX_TYPE(ha) || IS_QLA81XX(ha)) {
+               ql_dbg(ql_dbg_mbx, vha, 0x1150,
+                   "Thermal not supported by this card.\n");
+               return rval;
        }
 
-       if (ha->thermal_support & THERMAL_SUPPORT_ISP) {
-               rval = qla2x00_read_asic_temperature(vha, temp);
-               if (rval == QLA_SUCCESS)
-                       goto done;
-
-               ql_log(ql_log_warn, vha, 0x1019,
-                   "Thermal not supported through ISP.\n");
-               ha->thermal_support &= ~THERMAL_SUPPORT_ISP;
+       if (IS_QLA25XX(ha)) {
+               if (ha->pdev->subsystem_vendor == PCI_VENDOR_ID_QLOGIC &&
+                   ha->pdev->subsystem_device == 0x0175) {
+                       rval = qla2x00_read_sfp(vha, 0, &byte,
+                           0x98, 0x1, 1, BIT_13|BIT_0);
+                       *temp = byte;
+                       return rval;
+               }
+               if (ha->pdev->subsystem_vendor == PCI_VENDOR_ID_HP &&
+                   ha->pdev->subsystem_device == 0x338e) {
+                       rval = qla2x00_read_sfp(vha, 0, &byte,
+                           0x98, 0x1, 1, BIT_15|BIT_14|BIT_0);
+                       *temp = byte;
+                       return rval;
+               }
+               ql_dbg(ql_dbg_mbx, vha, 0x10c9,
+                   "Thermal not supported by this card.\n");
+               return rval;
        }
 
-       ql_log(ql_log_warn, vha, 0x1150,
-           "Thermal not supported by this card "
-           "(ignoring further requests).\n");
-       return  rval;
+       if (IS_QLA82XX(ha)) {
+               *temp = qla82xx_read_temperature(vha);
+               rval = QLA_SUCCESS;
+               return rval;
+       } else if (IS_QLA8044(ha)) {
+               *temp = qla8044_read_temperature(vha);
+               rval = QLA_SUCCESS;
+               return rval;
+       }
 
-done:
-       ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x1018,
-           "Done %s.\n", __func__);
+       rval = qla2x00_read_asic_temperature(vha, temp);
        return rval;
 }