diff --git a/include/hardware/gps.h b/include/hardware/gps.h
index a54948c..4fc06bc 100644
--- a/include/hardware/gps.h
+++ b/include/hardware/gps.h
@@ -1469,7 +1469,7 @@
     /**
      * Leap second data.
      * The sign of the value is defined by the following equation:
-     *      utc_time_ns = time_ns + (full_bias_ns + bias_ns) - leap_second *
+     *      utc_time_ns = time_ns - (full_bias_ns + bias_ns) - leap_second *
      *      1,000,000,000
      *
      * If the data is available 'flags' must contain GNSS_CLOCK_HAS_LEAP_SECOND.
@@ -1483,8 +1483,9 @@
      * For local hardware clock, this value is expected to be monotonically
      * increasing while the hardware clock remains power on. (For the case of a
      * HW clock that is not continuously on, see the
-     * hw_clock_discontinuity_count field). The real GPS time can be derived by
-     * adding the 'full_bias_ns + bias_ns' (when it is available) to this value.
+     * hw_clock_discontinuity_count field). The receiver's estimate of GPS time
+     * can be derived by substracting the sum of full_bias_ns and bias_ns (when
+     * available) from this value.
      *
      * This GPS time is expected to be the best estimate of current GPS time
      * that GNSS receiver can achieve.
@@ -1513,20 +1514,22 @@
      * and the true GPS time since 0000Z, January 6, 1980, in nanoseconds.
      *
      * The sign of the value is defined by the following equation:
-     *      local estimate of GPS time = time_ns + (full_bias_ns + bias_ns)
+     *      local estimate of GPS time = time_ns - (full_bias_ns + bias_ns)
      *
      * This value is mandatory if the receiver has estimated GPS time. If the
      * computed time is for a non-GPS constellation, the time offset of that
-     * constellation to GPS has to be applied to fill this value. The value
-     * contains the 'bias uncertainty' in it, and the caller is responsible of
-     * using the uncertainty. If the data is available 'flags' must contain
-     * GNSS_CLOCK_HAS_FULL_BIAS.
+     * constellation to GPS has to be applied to fill this value. The error
+     * estimate for the sum of this and the bias_ns is the bias_uncertainty_ns,
+     * and the caller is responsible for using this uncertainty (it can be very
+     * large before the GPS time has been solved for.) If the data is available
+     * 'flags' must contain GNSS_CLOCK_HAS_FULL_BIAS.
      */
     int64_t full_bias_ns;
 
     /**
      * Sub-nanosecond bias.
-     * The value contains the 'bias uncertainty' in it.
+     * The error estimate for the sum of this and the full_bias_ns is the
+     * bias_uncertainty_ns
      *
      * If the data is available 'flags' must contain GNSS_CLOCK_HAS_BIAS. If GPS
      * has computed a position fix. This value is mandatory if the receiver has
@@ -1549,7 +1552,8 @@
      * The clock's drift in nanoseconds (per second).
      *
      * A positive value means that the frequency is higher than the nominal
-     * frequency.
+     * frequency, and that the (full_bias_ns + bias_ns) is growing more positive
+     * over time.
      *
      * The value contains the 'drift uncertainty' in it.
      * If the data is available 'flags' must contain GNSS_CLOCK_HAS_DRIFT.
diff --git a/include/hardware/hwcomposer2.h b/include/hardware/hwcomposer2.h
index 9650ae1..095557a 100644
--- a/include/hardware/hwcomposer2.h
+++ b/include/hardware/hwcomposer2.h
@@ -206,6 +206,7 @@
     HWC2_FUNCTION_GET_DISPLAY_REQUESTS,
     HWC2_FUNCTION_GET_DISPLAY_TYPE,
     HWC2_FUNCTION_GET_DOZE_SUPPORT,
+    HWC2_FUNCTION_GET_HDR_CAPABILITIES,
     HWC2_FUNCTION_GET_MAX_VIRTUAL_DISPLAY_COUNT,
     HWC2_FUNCTION_GET_RELEASE_FENCES,
     HWC2_FUNCTION_PRESENT_DISPLAY,
@@ -234,7 +235,7 @@
     HWC2_FUNCTION_VALIDATE_DISPLAY,
 } hwc2_function_descriptor_t;
 
-/* Layer requests returned from getDisplayRequests. */
+/* Layer requests returned from getDisplayRequests */
 typedef enum {
     /* The client should clear its target with transparent pixels where this
      * layer would be. The client may ignore this request if the layer must be
@@ -412,6 +413,7 @@
         case HWC2_FUNCTION_GET_DISPLAY_REQUESTS: return "GetDisplayRequests";
         case HWC2_FUNCTION_GET_DISPLAY_TYPE: return "GetDisplayType";
         case HWC2_FUNCTION_GET_DOZE_SUPPORT: return "GetDozeSupport";
+        case HWC2_FUNCTION_GET_HDR_CAPABILITIES: return "GetHdrCapabilities";
         case HWC2_FUNCTION_GET_MAX_VIRTUAL_DISPLAY_COUNT:
             return "GetMaxVirtualDisplayCount";
         case HWC2_FUNCTION_GET_RELEASE_FENCES: return "GetReleaseFences";
@@ -603,6 +605,7 @@
     GetDisplayRequests = HWC2_FUNCTION_GET_DISPLAY_REQUESTS,
     GetDisplayType = HWC2_FUNCTION_GET_DISPLAY_TYPE,
     GetDozeSupport = HWC2_FUNCTION_GET_DOZE_SUPPORT,
+    GetHdrCapabilities = HWC2_FUNCTION_GET_HDR_CAPABILITIES,
     GetMaxVirtualDisplayCount = HWC2_FUNCTION_GET_MAX_VIRTUAL_DISPLAY_COUNT,
     GetReleaseFences = HWC2_FUNCTION_GET_RELEASE_FENCES,
     PresentDisplay = HWC2_FUNCTION_PRESENT_DISPLAY,
@@ -1244,6 +1247,42 @@
 typedef int32_t /*hwc2_error_t*/ (*HWC2_PFN_GET_DOZE_SUPPORT)(
         hwc2_device_t* device, hwc2_display_t display, int32_t* outSupport);
 
+/* getHdrCapabilities(..., outNumTypes, outTypes, outMaxLuminance,
+ *     outMaxAverageLuminance, outMinLuminance)
+ * Descriptor: HWC2_FUNCTION_GET_HDR_CAPABILITIES
+ * Must be provided by all HWC2 devices
+ *
+ * Returns the high dynamic range (HDR) capabilities of the given display, which
+ * are invariant with regard to the active configuration.
+ *
+ * Displays which are not HDR-capable must return no types in outTypes and set
+ * outNumTypes to 0.
+ *
+ * If outTypes is NULL, the required number of HDR types must be returned in
+ * outNumTypes.
+ *
+ * Parameters:
+ *   outNumTypes - if outTypes was NULL, the number of types which would have
+ *       been returned; if it was not NULL, the number of types stored in
+ *       outTypes, which must not exceed the value stored in outNumTypes prior
+ *       to the call; pointer will be non-NULL
+ *   outTypes - an array of HDR types, may have 0 elements if the display is not
+ *       HDR-capable
+ *   outMaxLuminance - the desired content maximum luminance for this display in
+ *       cd/m^2; pointer will be non-NULL
+ *   outMaxAverageLuminance - the desired content maximum frame-average
+ *       luminance for this display in cd/m^2; pointer will be non-NULL
+ *   outMinLuminance - the desired content minimum luminance for this display in
+ *       cd/m^2; pointer will be non-NULL
+ *
+ * Returns HWC2_ERROR_NONE or one of the following errors:
+ *   HWC2_ERROR_BAD_DISPLAY - an invalid display handle was passed in
+ */
+typedef int32_t /*hwc2_error_t*/ (*HWC2_PFN_GET_HDR_CAPABILITIES)(
+        hwc2_device_t* device, hwc2_display_t display, uint32_t* outNumTypes,
+        int32_t* /*android_hdr_t*/ outTypes, float* outMaxLuminance,
+        float* outMaxAverageLuminance, float* outMinLuminance);
+
 /* getReleaseFences(..., outNumElements, outLayers, outFences)
  * Descriptor: HWC2_FUNCTION_GET_RELEASE_FENCES
  * Must be provided by all HWC2 devices
diff --git a/modules/soundtrigger/sound_trigger_hw.c b/modules/soundtrigger/sound_trigger_hw.c
index 0492fd5..20d97f2 100644
--- a/modules/soundtrigger/sound_trigger_hw.c
+++ b/modules/soundtrigger/sound_trigger_hw.c
@@ -45,6 +45,7 @@
 #define COMMAND_RECOGNITION_ABORT "abort"  // Argument: model index.
 #define COMMAND_RECOGNITION_FAILURE "fail"  // Argument: model index.
 #define COMMAND_UPDATE "update"  // Argument: model index.
+#define COMMAND_CLEAR "clear" // Removes all models from the list.
 #define COMMAND_CLOSE "close" // Close just closes the network port, keeps thread running.
 #define COMMAND_END "end" // Closes connection and stops the thread.
 
@@ -99,6 +100,8 @@
     recognition_callback_t recognition_callback;
     void *recognition_cookie;
 
+    bool model_started;
+
     // Next recognition_context in the linked list
     struct recognition_context *next;
 };
@@ -239,6 +242,7 @@
 }
 
 bool parse_socket_data(int conn_socket, struct stub_sound_trigger_device* stdev);
+static void unload_all_sound_models(struct stub_sound_trigger_device *stdev);
 
 static char *sound_trigger_keyphrase_event_alloc(sound_model_handle_t handle,
                                                  struct sound_trigger_recognition_config *config,
@@ -472,6 +476,7 @@
     ALOGI("%s", __func__);
     struct recognition_context *last_model_context = stdev->root_model_context;
     unsigned int model_index = 0;
+    write_string(conn_socket, "-----------------------\n");
     if (!last_model_context) {
         ALOGI("ZERO Models exist.");
         write_string(conn_socket, "Zero models exist.\n");
@@ -495,8 +500,15 @@
             write_vastr(conn_socket, "Unknown sound model type: %d\n", model_type);
             ALOGI("Unknown sound model type: %d", model_type);
         }
-        write_string(conn_socket, "----\n\n");
-        ALOGI("----");
+        if (last_model_context->model_started) {
+            write_string(conn_socket, "Model started.\n");
+            ALOGI("Model started.\n");
+        } else {
+            write_string(conn_socket, "Model stopped.\n");
+            ALOGI("Model stopped.\n");
+        }
+        write_string(conn_socket, "-----------------------\n\n");
+        ALOGI("----\n\n");
         last_model_context = last_model_context->next;
         model_index++;
     }
@@ -524,6 +536,7 @@
 
     // Note: Since we acquire a lock inside this loop, do not use break or other
     // exit methods without releasing this lock.
+    write_string(conn_socket, "\n>>> ");
     while(!input_done) {
         if (fgets(buffer, PARSE_BUF_LEN, input_fp) != NULL) {
             pthread_mutex_lock(&stdev->lock);
@@ -540,6 +553,8 @@
                 send_event(conn_socket, stdev, EVENT_RECOGNITION, RECOGNITION_STATUS_FAILURE);
             } else if (strcmp(command, COMMAND_UPDATE) == 0) {
                 send_event(conn_socket, stdev, EVENT_SOUND_MODEL, SOUND_MODEL_STATUS_UPDATED);
+            } else if (strncmp(command, COMMAND_CLEAR, 5) == 0) {
+                unload_all_sound_models(stdev);
             } else if (strncmp(command, COMMAND_CLOSE, 5) == 0) {
                 ALOGI("Closing this connection.");
                 write_string(conn_socket, "Closing this connection.");
@@ -550,13 +565,14 @@
                 continue_listening = false;
                 input_done = true;
             } else {
-                write_vastr(conn_socket, "Bad command %s.\n", command);
+                write_vastr(conn_socket, "\nBad command %s.\n\n", command);
             }
             pthread_mutex_unlock(&stdev->lock);
         } else {
             ALOGI("parse_socket_data done (got null)");
             input_done = true;  // break.
         }
+        write_string(conn_socket, "\n>>> ");
     }
     return continue_listening;
 }
@@ -651,18 +667,35 @@
     model_context->recognition_callback = NULL;
     model_context->recognition_cookie = NULL;
     model_context->next = NULL;
+    model_context->model_started = false;
     ALOGI("Sound model loaded: Handle %d ", *handle);
 
     pthread_mutex_unlock(&stdev->lock);
     return status;
 }
 
+static void unload_all_sound_models(struct stub_sound_trigger_device *stdev) {
+    ALOGI("%s", __func__);
+    struct recognition_context *model_context = stdev->root_model_context;
+    stdev->root_model_context = NULL;
+    pthread_mutex_lock(&stdev->lock);
+    while (model_context) {
+        ALOGI("Deleting model with handle: %d", model_context->model_handle);
+        struct recognition_context *temp = model_context;
+        model_context = model_context->next;
+        free(temp->config);
+        free(temp);
+    }
+    pthread_mutex_unlock(&stdev->lock);
+}
+
 static int stdev_unload_sound_model(const struct sound_trigger_hw_device *dev,
                                     sound_model_handle_t handle) {
     // If recognizing, stop_recognition must be called for a sound model before unload_sound_model
     ALOGI("%s", __func__);
     struct stub_sound_trigger_device *stdev = (struct stub_sound_trigger_device *)dev;
     int status = 0;
+    ALOGI("unload_sound_model:%d", handle);
     pthread_mutex_lock(&stdev->lock);
 
     struct recognition_context *model_context = NULL;
@@ -683,7 +716,7 @@
         pthread_mutex_unlock(&stdev->lock);
         return -ENOSYS;
     }
-    if(previous_model_context) {
+    if (previous_model_context) {
         previous_model_context->next = model_context->next;
     } else {
         stdev->root_model_context = model_context->next;
@@ -725,6 +758,7 @@
     }
     model_context->recognition_callback = callback;
     model_context->recognition_cookie = cookie;
+    model_context->model_started = true;
 
     pthread_mutex_unlock(&stdev->lock);
     ALOGI("%s done for handle %d", __func__, handle);
@@ -748,6 +782,7 @@
     model_context->config = NULL;
     model_context->recognition_callback = NULL;
     model_context->recognition_cookie = NULL;
+    model_context->model_started = false;
 
     pthread_mutex_unlock(&stdev->lock);
     ALOGI("%s done for handle %d", __func__, handle);
@@ -766,6 +801,7 @@
         model_context->config = NULL;
         model_context->recognition_callback = NULL;
         model_context->recognition_cookie = NULL;
+        model_context->model_started = false;
         ALOGI("%s stopped handle %d", __func__, model_context->model_handle);
 
         model_context = model_context->next;
