tlmi_priv.pwd_admin->save_signature);
                if (ret)
                        goto out;
-       } else { /* Non certiifcate based authentication */
+       } else if (tlmi_priv.opcode_support) {
+               /*
+                * If opcode support is present use that interface.
+                * Note - this sets the variable and then the password as separate
+                * WMI calls. Function tlmi_save_bios_settings will error if the
+                * password is incorrect.
+                */
+               set_str = kasprintf(GFP_KERNEL, "%s,%s;", setting->display_name,
+                                   new_setting);
+               if (!set_str) {
+                       ret = -ENOMEM;
+                       goto out;
+               }
+
+               ret = tlmi_simple_call(LENOVO_SET_BIOS_SETTINGS_GUID, set_str);
+               if (ret)
+                       goto out;
+
+               if (tlmi_priv.pwd_admin->valid && tlmi_priv.pwd_admin->password[0]) {
+                       ret = tlmi_opcode_setting("WmiOpcodePasswordAdmin",
+                                                 tlmi_priv.pwd_admin->password);
+                       if (ret)
+                               goto out;
+               }
+
+               ret = tlmi_save_bios_settings("");
+       } else { /* old non-opcode based authentication method (deprecated) */
                if (tlmi_priv.pwd_admin->valid && tlmi_priv.pwd_admin->password[0]) {
                        auth_str = kasprintf(GFP_KERNEL, "%s,%s,%s;",
                                        tlmi_priv.pwd_admin->password,