"8917", "8918", "8949", "894A", "89EB"
 };
 
+/* DMI Board names of Omen laptops that are specifically set to be thermal
+ * profile version 0 by the Omen Command Center app, regardless of what
+ * the get system design information WMI call returns
+ */
+static const char *const omen_thermal_profile_force_v0_boards[] = {
+       "8607", "8746", "8747", "8749", "874A", "8748"
+};
+
 enum hp_wmi_radio {
        HPWMI_WIFI      = 0x0,
        HPWMI_BLUETOOTH = 0x1,
        HPWMI_SET_PERFORMANCE_MODE = 0x1A,
        HPWMI_FAN_SPEED_MAX_GET_QUERY = 0x26,
        HPWMI_FAN_SPEED_MAX_SET_QUERY = 0x27,
+       HPWMI_GET_SYSTEM_DESIGN_DATA = 0x28,
 };
 
 enum hp_wmi_command {
        HPWMI_POWER_FW_OR_HW    = HPWMI_POWER_BIOS | HPWMI_POWER_HARD,
 };
 
-enum hp_thermal_profile_omen {
-       HP_OMEN_THERMAL_PROFILE_DEFAULT     = 0x00,
-       HP_OMEN_THERMAL_PROFILE_PERFORMANCE = 0x01,
-       HP_OMEN_THERMAL_PROFILE_COOL        = 0x02,
+enum hp_thermal_profile_omen_v0 {
+       HP_OMEN_V0_THERMAL_PROFILE_DEFAULT     = 0x00,
+       HP_OMEN_V0_THERMAL_PROFILE_PERFORMANCE = 0x01,
+       HP_OMEN_V0_THERMAL_PROFILE_COOL        = 0x02,
+};
+
+enum hp_thermal_profile_omen_v1 {
+       HP_OMEN_V1_THERMAL_PROFILE_DEFAULT      = 0x30,
+       HP_OMEN_V1_THERMAL_PROFILE_PERFORMANCE  = 0x31,
+       HP_OMEN_V1_THERMAL_PROFILE_COOL         = 0x50,
 };
 
 enum hp_thermal_profile {
        char buffer[2] = {0, mode};
        int ret;
 
-       if (mode < 0 || mode > 2)
-               return -EINVAL;
-
        ret = hp_wmi_perform_query(HPWMI_SET_PERFORMANCE_MODE, HPWMI_GM,
                                   &buffer, sizeof(buffer), 0);
 
                            board_name) >= 0;
 }
 
+static int omen_get_thermal_policy_version(void)
+{
+       unsigned char buffer[8] = { 0 };
+       int ret;
+
+       const char *board_name = dmi_get_system_info(DMI_BOARD_NAME);
+
+       if (board_name) {
+               int matches = match_string(omen_thermal_profile_force_v0_boards,
+                       ARRAY_SIZE(omen_thermal_profile_force_v0_boards),
+                       board_name);
+               if (matches >= 0)
+                       return 0;
+       }
+
+       ret = hp_wmi_perform_query(HPWMI_GET_SYSTEM_DESIGN_DATA, HPWMI_GM,
+                                  &buffer, sizeof(buffer), sizeof(buffer));
+
+       if (ret)
+               return ret < 0 ? ret : -EINVAL;
+
+       return buffer[3];
+}
+
 static int omen_thermal_profile_get(void)
 {
        u8 data;
                return tp;
 
        switch (tp) {
-       case HP_OMEN_THERMAL_PROFILE_PERFORMANCE:
+       case HP_OMEN_V0_THERMAL_PROFILE_PERFORMANCE:
+       case HP_OMEN_V1_THERMAL_PROFILE_PERFORMANCE:
                *profile = PLATFORM_PROFILE_PERFORMANCE;
                break;
-       case HP_OMEN_THERMAL_PROFILE_DEFAULT:
+       case HP_OMEN_V0_THERMAL_PROFILE_DEFAULT:
+       case HP_OMEN_V1_THERMAL_PROFILE_DEFAULT:
                *profile = PLATFORM_PROFILE_BALANCED;
                break;
-       case HP_OMEN_THERMAL_PROFILE_COOL:
+       case HP_OMEN_V0_THERMAL_PROFILE_COOL:
+       case HP_OMEN_V1_THERMAL_PROFILE_COOL:
                *profile = PLATFORM_PROFILE_COOL;
                break;
        default:
 static int platform_profile_omen_set(struct platform_profile_handler *pprof,
                                     enum platform_profile_option profile)
 {
-       int err, tp;
+       int err, tp, tp_version;
+
+       tp_version = omen_get_thermal_policy_version();
+
+       if (tp_version < 0 || tp_version > 1)
+               return -EOPNOTSUPP;
 
        switch (profile) {
        case PLATFORM_PROFILE_PERFORMANCE:
-               tp = HP_OMEN_THERMAL_PROFILE_PERFORMANCE;
+               if (tp_version == 0)
+                       tp = HP_OMEN_V0_THERMAL_PROFILE_PERFORMANCE;
+               else
+                       tp = HP_OMEN_V1_THERMAL_PROFILE_PERFORMANCE;
                break;
        case PLATFORM_PROFILE_BALANCED:
-               tp = HP_OMEN_THERMAL_PROFILE_DEFAULT;
+               if (tp_version == 0)
+                       tp = HP_OMEN_V0_THERMAL_PROFILE_DEFAULT;
+               else
+                       tp = HP_OMEN_V1_THERMAL_PROFILE_DEFAULT;
                break;
        case PLATFORM_PROFILE_COOL:
-               tp = HP_OMEN_THERMAL_PROFILE_COOL;
+               if (tp_version == 0)
+                       tp = HP_OMEN_V0_THERMAL_PROFILE_COOL;
+               else
+                       tp = HP_OMEN_V1_THERMAL_PROFILE_COOL;
                break;
        default:
                return -EOPNOTSUPP;