On Sun, 10 Mar 2024, Luke D. Jones wrote: > Adjust existing MUX support to select whichever MUX support is available > so that ASUS Vivobook MUX can also be used if detected. This description is a bit on the short side. It wouldn't have hurt to first state that Vivobooks come with a GPU MUX WMI that has a different WMI device ID. I can infer that after reading the diff but the description should not require reading the patch. The code change itself looks fine, Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@xxxxxxxxxxxxxxx> -- i. > > Signed-off-by: Luke D. Jones <luke@xxxxxxxxxx> > --- > drivers/platform/x86/asus-wmi.c | 18 +++++++++++++----- > include/linux/platform_data/x86/asus-wmi.h | 1 + > 2 files changed, 14 insertions(+), 5 deletions(-) > > diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c > index 94cc589607b3..2cf695289655 100644 > --- a/drivers/platform/x86/asus-wmi.c > +++ b/drivers/platform/x86/asus-wmi.c > @@ -268,6 +268,7 @@ struct asus_wmi { > bool egpu_connect_available; > bool dgpu_disable_available; > bool gpu_mux_mode_available; > + u32 gpu_mux_dev; > > /* Tunables provided by ASUS for gaming laptops */ > bool ppt_pl2_sppt_available; > @@ -682,7 +683,7 @@ static ssize_t dgpu_disable_store(struct device *dev, > return -EINVAL; > > if (asus->gpu_mux_mode_available) { > - result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_GPU_MUX); > + result = asus_wmi_get_devstate_simple(asus, asus->gpu_mux_dev); > if (result < 0) > /* An error here may signal greater failure of GPU handling */ > return result; > @@ -748,7 +749,7 @@ static ssize_t egpu_enable_store(struct device *dev, > } > > if (asus->gpu_mux_mode_available) { > - result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_GPU_MUX); > + result = asus_wmi_get_devstate_simple(asus, asus->gpu_mux_dev); > if (result < 0) { > /* An error here may signal greater failure of GPU handling */ > pr_warn("Failed to get gpu mux status: %d\n", result); > @@ -801,7 +802,7 @@ static ssize_t gpu_mux_mode_show(struct device *dev, > struct asus_wmi *asus = dev_get_drvdata(dev); > int result; > > - result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_GPU_MUX); > + result = asus_wmi_get_devstate_simple(asus, asus->gpu_mux_dev); > if (result < 0) > return result; > > @@ -847,7 +848,7 @@ static ssize_t gpu_mux_mode_store(struct device *dev, > } > } > > - err = asus_wmi_set_devstate(ASUS_WMI_DEVID_GPU_MUX, optimus, &result); > + err = asus_wmi_set_devstate(asus->gpu_mux_dev, optimus, &result); > if (err) { > dev_err(dev, "Failed to set GPU MUX mode: %d\n", err); > return err; > @@ -4507,7 +4508,6 @@ static int asus_wmi_add(struct platform_device *pdev) > asus->egpu_enable_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_EGPU); > asus->egpu_connect_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_EGPU_CONNECTED); > 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->kbd_rgb_mode_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_MODE); > asus->kbd_rgb_state_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_STATE); > asus->ppt_pl2_sppt_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_PPT_PL2_SPPT); > @@ -4529,6 +4529,14 @@ static int asus_wmi_add(struct platform_device *pdev) > asus->mini_led_dev_id = ASUS_WMI_DEVID_MINI_LED_MODE2; > } > > + if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_GPU_MUX)) { > + asus->gpu_mux_mode_available = true; > + asus->gpu_mux_dev = ASUS_WMI_DEVID_GPU_MUX; > + } else if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_GPU_MUX_VIVO)) { > + asus->gpu_mux_mode_available = true; > + asus->gpu_mux_dev = ASUS_WMI_DEVID_GPU_MUX_VIVO; > + } > + > err = fan_boost_mode_check_present(asus); > if (err) > goto fail_fan_boost_mode; > diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h > index 9cadce10ad9a..b48b024dd844 100644 > --- a/include/linux/platform_data/x86/asus-wmi.h > +++ b/include/linux/platform_data/x86/asus-wmi.h > @@ -128,6 +128,7 @@ > > /* gpu mux switch, 0 = dGPU, 1 = Optimus */ > #define ASUS_WMI_DEVID_GPU_MUX 0x00090016 > +#define ASUS_WMI_DEVID_GPU_MUX_VIVO 0x00090026 > > /* TUF laptop RGB modes/colours */ > #define ASUS_WMI_DEVID_TUF_RGB_MODE 0x00100056 >