diff --git a/Android.mk b/Android.mk
index 296b301..739b75c 100644
--- a/Android.mk
+++ b/Android.mk
@@ -59,10 +59,6 @@
 LOCAL_SRC_FILES += power-845.c
 endif
 
-ifeq ($(call is-board-platform-in-list,sdm710), true)
-LOCAL_SRC_FILES += power-710.c
-endif
-
 ifeq ($(call is-board-platform-in-list,msmnile), true)
 LOCAL_SRC_FILES += power-msmnile.c
 endif
diff --git a/power-660.c b/power-660.c
index 23a91b6..e246f3b 100644
--- a/power-660.c
+++ b/power-660.c
@@ -49,8 +49,6 @@
 #include "power-common.h"
 #include "utils.h"
 
-#define MIN_VAL(X, Y) ((X > Y) ? (Y) : (X))
-
 static int video_encode_hint_sent;
 
 /**
@@ -153,52 +151,46 @@
 
 int set_interactive_override(int on) {
     char governor[80];
-    int resource_values[20];
-    int num_resources;
-
-    ALOGI("Got set_interactive hint");
 
     if (get_scaling_governor(governor, sizeof(governor)) == -1) {
         ALOGE("Can't obtain scaling governor.");
-        return HINT_HANDLED;
+        return HINT_NONE;
     }
 
     if (!on) {
-        /* Display off. */
+        /* Display off */
         if (is_interactive_governor(governor)) {
-            /*
-                1. CPUfreq params
-                       - hispeed freq for big - 1113Mhz
-                       - go hispeed load for big - 95
-                       - above_hispeed_delay for big - 40ms
-               2. BusDCVS V2 params
-                       - Sample_ms of 10ms
-           */
             if (is_target_SDM630()) {
-                int res[] = {0x41414000, 0x459, 0x41410000, 0x5F, 0x41400000, 0x4, 0x41820000, 0xA};
-                memcpy(resource_values, res, MIN_VAL(sizeof(resource_values), sizeof(res)));
-                num_resources = ARRAY_SIZE(res);
-            }
-            /*
-                1. CPUfreq params
-                       - hispeed freq for little - 902Mhz
-                       - go hispeed load for little - 95
-                       - above_hispeed_delay for little - 40ms
-                2. BusDCVS V2 params
+                /*
+                    1. CPUfreq params
+                        - hispeed freq for big - 1113Mhz
+                        - go hispeed load for big - 95
+                        - above_hispeed_delay for big - 40ms
+                    2. BusDCVS V2 params
                        - Sample_ms of 10ms
-                3. Sched group upmigrate - 500
-           */
-            else {
-                int res[] = {0x41414100, 0x386,      0x41410100, 0x5F,       0x41400100,
-                             0x4,        0x41820000, 0xA,        0x40C54000, 0x1F4};
-                memcpy(resource_values, res, MIN_VAL(sizeof(resource_values), sizeof(res)));
-                num_resources = ARRAY_SIZE(res);
+                 */
+                int resource_values[] = {0x41414000, 0x459, 0x41410000, 0x5F,
+                                         0x41400000, 0x4,   0x41820000, 0xA};
+                perform_hint_action(DISPLAY_STATE_HINT_ID, resource_values,
+                                    ARRAY_SIZE(resource_values));
+            } else {
+                /*
+                    1. CPUfreq params
+                        - hispeed freq for little - 902Mhz
+                        - go hispeed load for little - 95
+                        - above_hispeed_delay for little - 40ms
+                    2. BusDCVS V2 params
+                        - Sample_ms of 10ms
+                    3. Sched group upmigrate - 500
+                 */
+                int resource_values[] = {0x41414100, 0x386,      0x41410100, 0x5F,       0x41400100,
+                                         0x4,        0x41820000, 0xA,        0x40C54000, 0x1F4};
+                perform_hint_action(DISPLAY_STATE_HINT_ID, resource_values,
+                                    ARRAY_SIZE(resource_values));
             }
-            perform_hint_action(DISPLAY_STATE_HINT_ID, resource_values, num_resources);
         }
-
     } else {
-        /* Display on. */
+        /* Display on */
         if (is_interactive_governor(governor)) {
             undo_hint_action(DISPLAY_STATE_HINT_ID);
         }
diff --git a/power-710.c b/power-710.c
deleted file mode 100644
index d63f4e0..0000000
--- a/power-710.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * *    * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- *       copyright notice, this list of conditions and the following
- *       disclaimer in the documentation and/or other materials provided
- *       with the distribution.
- *     * Neither the name of The Linux Foundation nor the names of its
- *       contributors may be used to endorse or promote products derived
- *       from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <dlfcn.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#define LOG_TAG "QTI PowerHAL"
-#include <hardware/hardware.h>
-#include <hardware/power.h>
-#include <log/log.h>
-
-#include "hint-data.h"
-#include "metadata-defs.h"
-#include "performance.h"
-#include "power-common.h"
-#include "utils.h"
-
-int set_interactive_override(int on) {
-    static int set_i_count = 0;
-
-    set_i_count++;
-    ALOGI("Got set_interactive hint on= %d, count= %d\n", on, set_i_count);
-
-    return HINT_HANDLED; /* Don't excecute this code path, not in use */
-}
diff --git a/power-845.c b/power-845.c
index ac6c4d7..8739d54 100644
--- a/power-845.c
+++ b/power-845.c
@@ -200,12 +200,3 @@
     }
     return ret_val;
 }
-
-int set_interactive_override(int on) {
-    static int set_i_count = 0;
-
-    set_i_count++;
-    ALOGI("Got set_interactive hint on= %d, count= %d\n", on, set_i_count);
-
-    return HINT_HANDLED; /* Don't excecute this code path, not in use */
-}
diff --git a/power-8937.c b/power-8937.c
index 4d1cbde..fc59a22 100644
--- a/power-8937.c
+++ b/power-8937.c
@@ -161,35 +161,27 @@
 
 int set_interactive_override(int on) {
     char governor[80];
-    static int set_i_count = 0;
-
-    ALOGI("Got set_interactive hint");
 
     if (get_scaling_governor(governor, sizeof(governor)) == -1) {
         ALOGE("Can't obtain scaling governor.");
-        return HINT_HANDLED;
+        return HINT_NONE;
     }
 
     if (!on) {
-        /* Display off. */
+        /* Display off */
         if (is_interactive_governor(governor)) {
             int resource_values[] = {INT_OP_CLUSTER0_TIMER_RATE, BIG_LITTLE_TR_MS_50,
                                      INT_OP_CLUSTER1_TIMER_RATE, BIG_LITTLE_TR_MS_50,
                                      INT_OP_NOTIFY_ON_MIGRATE,   0x00};
-
             perform_hint_action(DISPLAY_STATE_HINT_ID, resource_values,
                                 ARRAY_SIZE(resource_values));
-        } /* Perf time rate set for CORE0,CORE4 8952 target*/
-
+        }
     } else {
-        /* Display on. */
+        /* Display on */
         if (is_interactive_governor(governor)) {
             undo_hint_action(DISPLAY_STATE_HINT_ID);
         }
     }
 
-    set_i_count++;
-    ALOGI("Got set_interactive hint on= %d, count= %d\n", on, set_i_count);
-
     return HINT_HANDLED;
 }
diff --git a/power-8953.c b/power-8953.c
index 7ed5b0b..cc1f000 100644
--- a/power-8953.c
+++ b/power-8953.c
@@ -158,17 +158,14 @@
 
 int set_interactive_override(int on) {
     char governor[80];
-    static int set_i_count = 0;
-
-    ALOGI("Got set_interactive hint");
 
     if (get_scaling_governor(governor, sizeof(governor)) == -1) {
         ALOGE("Can't obtain scaling governor.");
-        return HINT_HANDLED;
+        return HINT_NONE;
     }
 
     if (!on) {
-        /* Display off. */
+        /* Display off */
         if (is_interactive_governor(governor)) {
             /* timer rate - 40mS*/
             int resource_values[] = {
@@ -177,17 +174,13 @@
             };
             perform_hint_action(DISPLAY_STATE_HINT_ID, resource_values,
                                 ARRAY_SIZE(resource_values));
-        } /* Perf time rate set for CORE0,CORE4 8952 target*/
-
+        }
     } else {
-        /* Display on. */
+        /* Display on */
         if (is_interactive_governor(governor)) {
             undo_hint_action(DISPLAY_STATE_HINT_ID);
         }
     }
 
-    set_i_count++;
-    ALOGI("Got set_interactive hint on= %d, count= %d\n", on, set_i_count);
-
     return HINT_HANDLED;
 }
diff --git a/power-8996.c b/power-8996.c
index 49f120f..1bbbd6b 100644
--- a/power-8996.c
+++ b/power-8996.c
@@ -121,7 +121,3 @@
     }
     return ret_val;
 }
-
-int set_interactive_override(int UNUSED(on)) {
-    return HINT_HANDLED;
-}
diff --git a/power-8998.c b/power-8998.c
index 39b7059..0b03aef 100644
--- a/power-8998.c
+++ b/power-8998.c
@@ -198,7 +198,3 @@
     }
     return ret_val;
 }
-
-int set_interactive_override(int on) {
-    return HINT_HANDLED; /* Don't excecute this code path, not in use */
-}
diff --git a/power-common.c b/power-common.c
index 0a4fe04..9665068 100644
--- a/power-common.c
+++ b/power-common.c
@@ -120,7 +120,7 @@
 }
 
 int __attribute__((weak)) set_interactive_override(int on) {
-    return HINT_NONE;
+    return HINT_HANDLED;
 }
 
 #ifdef SET_INTERACTIVE_EXT
@@ -152,7 +152,7 @@
 
     if (set_interactive_override(on) == HINT_HANDLED) {
         return;
+    } else {
+        ALOGI("Hint not handled in set_interactive_override");
     }
-
-    ALOGI("Got set_interactive hint");
 }
diff --git a/power-msmnile.c b/power-msmnile.c
index 16144a8..5e91030 100644
--- a/power-msmnile.c
+++ b/power-msmnile.c
@@ -45,15 +45,6 @@
 #include "power-common.h"
 #include "utils.h"
 
-int set_interactive_override(int on) {
-    static int set_i_count = 0;
-
-    set_i_count++;
-    ALOGI("Got set_interactive hint on= %d, count= %d\n", on, set_i_count);
-
-    return HINT_HANDLED;
-}
-
 int power_hint_override(power_hint_t hint, void* data) {
     int ret_val = HINT_NONE;
     switch (hint) {
