bool egpu_enable_available;
        bool dgpu_disable_available;
+       bool gpu_mux_mode_available;
 
        bool throttle_thermal_policy_available;
        u8 throttle_thermal_policy_mode;
 }
 static DEVICE_ATTR_RW(egpu_enable);
 
+/* gpu mux switch *************************************************************/
+static ssize_t gpu_mux_mode_show(struct device *dev,
+                                struct device_attribute *attr, char *buf)
+{
+       struct asus_wmi *asus = dev_get_drvdata(dev);
+       int result;
+
+       result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_GPU_MUX);
+       if (result < 0)
+               return result;
+
+       return sysfs_emit(buf, "%d\n", result);
+}
+
+static ssize_t gpu_mux_mode_store(struct device *dev,
+                                 struct device_attribute *attr,
+                                 const char *buf, size_t count)
+{
+       struct asus_wmi *asus = dev_get_drvdata(dev);
+       int result, err;
+       u32 optimus;
+
+       err = kstrtou32(buf, 10, &optimus);
+       if (err)
+               return err;
+
+       if (optimus > 1)
+               return -EINVAL;
+
+       err = asus_wmi_set_devstate(ASUS_WMI_DEVID_GPU_MUX, optimus, &result);
+       if (err) {
+               dev_err(dev, "Failed to set GPU MUX mode: %d\n", err);
+               return err;
+       }
+       /* !1 is considered a fail by ASUS */
+       if (result != 1) {
+               dev_warn(dev, "Failed to set GPU MUX mode (result): 0x%x\n", result);
+               return -EIO;
+       }
+
+       sysfs_notify(&asus->platform_device->dev.kobj, NULL, "gpu_mux_mode");
+
+       return count;
+}
+static DEVICE_ATTR_RW(gpu_mux_mode);
+
 /* Battery ********************************************************************/
 
 /* The battery maximum charging percentage */
        &dev_attr_touchpad.attr,
        &dev_attr_egpu_enable.attr,
        &dev_attr_dgpu_disable.attr,
+       &dev_attr_gpu_mux_mode.attr,
        &dev_attr_lid_resume.attr,
        &dev_attr_als_enable.attr,
        &dev_attr_fan_boost_mode.attr,
                ok = asus->egpu_enable_available;
        else if (attr == &dev_attr_dgpu_disable.attr)
                ok = asus->dgpu_disable_available;
+       else if (attr == &dev_attr_gpu_mux_mode.attr)
+               ok = asus->gpu_mux_mode_available;
        else if (attr == &dev_attr_fan_boost_mode.attr)
                ok = asus->fan_boost_mode_available;
        else if (attr == &dev_attr_throttle_thermal_policy.attr)
 
        asus->egpu_enable_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_EGPU);
        asus->dgpu_disable_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_DGPU);
+       asus->gpu_mux_mode_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_GPU_MUX);
        asus->panel_overdrive_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_PANEL_OD);
 
        err = fan_boost_mode_check_present(asus);