diff --git a/thermal/1.0/IThermal.hal b/thermal/1.0/IThermal.hal
index 076b697..e5f70cb 100644
--- a/thermal/1.0/IThermal.hal
+++ b/thermal/1.0/IThermal.hal
@@ -75,19 +75,4 @@
     getCoolingDevices()
         generates (ThermalStatus status, vec<CoolingDevice> devices);
 
-    /* Retrieves an undefined temperature value.
-     *
-     * @return status Status of the operation. If status code is FAILURE,
-     *         the status.debugMessage must be populated with the human-readable
-     *         error message.
-     * @return undefinedTemperature returns an undefined temperature value if
-     *         status code is SUCCESS. Undefined temperature value is an
-     *         unreachable constant device temperature value for HAL.
-     *
-     */
-    @callflow(next={"*"})
-    @entry
-    @exit
-    getUndefinedTemperature()
-        generates (ThermalStatus status, float undefinedTemperature);
 };
diff --git a/thermal/1.0/default/Thermal.cpp b/thermal/1.0/default/Thermal.cpp
index 5bc313d..8a8ad0a 100644
--- a/thermal/1.0/default/Thermal.cpp
+++ b/thermal/1.0/default/Thermal.cpp
@@ -169,13 +169,6 @@
   return Void();
 }
 
-Return<void> Thermal::getUndefinedTemperature(getUndefinedTemperature_cb _hidl_cb) {
-  ThermalStatus status;
-  status.code = ThermalStatusCode::SUCCESS;
-  _hidl_cb(status, UNKNOWN_TEMPERATURE);
-  return Void();
-}
-
 IThermal* HIDL_FETCH_IThermal(const char* /* name */) {
   thermal_module_t* module;
   status_t err = hw_get_module(THERMAL_HARDWARE_MODULE_ID,
diff --git a/thermal/1.0/default/Thermal.h b/thermal/1.0/default/Thermal.h
index eec0ff5..2e06289 100644
--- a/thermal/1.0/default/Thermal.h
+++ b/thermal/1.0/default/Thermal.h
@@ -45,7 +45,6 @@
     Return<void> getTemperatures(getTemperatures_cb _hidl_cb)  override;
     Return<void> getCpuUsages(getCpuUsages_cb _hidl_cb)  override;
     Return<void> getCoolingDevices(getCoolingDevices_cb _hidl_cb)  override;
-    Return<void> getUndefinedTemperature(getUndefinedTemperature_cb _hidl_cb) override;
     private:
         thermal_module_t* mModule;
 };
diff --git a/thermal/1.0/types.hal b/thermal/1.0/types.hal
index 30cfdd9..8864f43 100644
--- a/thermal/1.0/types.hal
+++ b/thermal/1.0/types.hal
@@ -46,27 +46,27 @@
 
     /**
      * Current temperature in Celsius. If not available set by HAL to
-     * undefined temperature value.
+     * UNKNOWN_TEMPERATURE.
      * Current temperature can be in any units if type=UNKNOWN.
      */
     float currentValue;
 
     /**
      * Throttling temperature constant for this temperature.
-     * If not available, set by HAL to undefined temperature value.
+     * If not available, set by HAL to UNKNOWN_TEMPERATURE.
      */
     float throttlingThreshold;
 
     /**
      * Shutdown temperature constant for this temperature.
-     * If not available, set by HAL to undefined temperature value.
+     * If not available, set by HAL to UNKNOWN_TEMPERATURE.
      */
     float shutdownThreshold;
 
     /**
      * Threshold temperature above which the VR mode clockrate minimums cannot
      * be maintained for this device.
-     * If not available, set by HAL to undefined temperature value.
+     * If not available, set by HAL to UNKNOWN_TEMPERATURE.
      */
     float vrThrottlingThreshold;
 
@@ -135,3 +135,7 @@
      */
     string debugMessage;
 };
+
+/**
+ * TODO(pbond): add float constant UNDEFINED_TEMPERATURE.
+ */
diff --git a/thermal/1.0/vts/Thermal.vts b/thermal/1.0/vts/Thermal.vts
index d8cc670..e76d943 100644
--- a/thermal/1.0/vts/Thermal.vts
+++ b/thermal/1.0/vts/Thermal.vts
@@ -79,25 +79,4 @@
         }
     }
 
-    api: {
-        name: "getUndefinedTemperature"
-        return_type_hidl: {
-            type: TYPE_STRUCT
-            predefined_type: "::android::hardware::thermal::V1_0::ThermalStatus"
-        }
-        return_type_hidl: {
-            type: TYPE_SCALAR
-            scalar_type: "float_t"
-        }
-        callflow: {
-            next: "*"
-        }
-        callflow: {
-            entry: true
-        }
-        callflow: {
-            exit: true
-        }
-    }
-
 }
diff --git a/thermal/1.0/vts/functional/thermal_hidl_hal_test.cpp b/thermal/1.0/vts/functional/thermal_hidl_hal_test.cpp
index 6eb6269..8a5ea2c 100644
--- a/thermal/1.0/vts/functional/thermal_hidl_hal_test.cpp
+++ b/thermal/1.0/vts/functional/thermal_hidl_hal_test.cpp
@@ -43,6 +43,8 @@
 #define THERMAL_SERVICE_NAME "thermal"
 #define MONITORING_OPERATION_NUMBER 10
 
+#define UNDEFINED_TEMPERATURE (-FLT_MAX)
+
 #define MAX_DEVICE_TEMPERATURE 200
 #define MAX_FAN_SPEED 20000
 
@@ -54,17 +56,6 @@
     ASSERT_NE(thermal_, nullptr);
     baseSize_ = 0;
     names_.clear();
-
-    {
-      float undefined_temperature;
-      thermal_->getUndefinedTemperature(
-          [&undefined_temperature](ThermalStatus status, float temperature) {
-            EXPECT_EQ(ThermalStatusCode::SUCCESS, status.code);
-            EXPECT_LT(MAX_DEVICE_TEMPERATURE, std::abs(undefined_temperature));
-            undefined_temperature = temperature;
-          });
-      undefined_temperature_ = undefined_temperature;
-    }
   }
 
   virtual void TearDown() override {}
@@ -136,20 +127,21 @@
     // .currentValue of known type is in Celsius and must be reasonable.
     EXPECT_TRUE(temperature.type == TemperatureType::UNKNOWN ||
                 std::abs(temperature.currentValue) < MAX_DEVICE_TEMPERATURE ||
-                temperature.currentValue == undefined_temperature_);
+                temperature.currentValue == UNDEFINED_TEMPERATURE);
 
     // .name must not be empty.
     EXPECT_LT(0u, temperature.name.size());
 
     // .currentValue must not exceed .shutdwonThreshold if defined.
     EXPECT_TRUE(temperature.currentValue < temperature.shutdownThreshold ||
-                temperature.currentValue == undefined_temperature_ ||
-                temperature.shutdownThreshold == undefined_temperature_);
+                temperature.currentValue == UNDEFINED_TEMPERATURE ||
+                temperature.shutdownThreshold == UNDEFINED_TEMPERATURE);
 
     // .throttlingThreshold must not exceed .shutdownThreshold if defined.
-    EXPECT_TRUE(temperature.throttlingThreshold < temperature.shutdownThreshold ||
-                temperature.throttlingThreshold == undefined_temperature_ ||
-                temperature.shutdownThreshold == undefined_temperature_);
+    EXPECT_TRUE(temperature.throttlingThreshold <
+                    temperature.shutdownThreshold ||
+                temperature.throttlingThreshold == UNDEFINED_TEMPERATURE ||
+                temperature.shutdownThreshold == UNDEFINED_TEMPERATURE);
   }
 
   // Check validity of CPU usage returned by Thermal HAL.
@@ -172,7 +164,6 @@
 
   size_t baseSize_;
   std::vector<hidl_string> names_;
-  float undefined_temperature_;
 };
 
 // Sanity test for Thermal::getTemperatures().
