diff options
author | Jan200101 <sentrycraft123@gmail.com> | 2022-10-28 20:49:20 +0200 |
---|---|---|
committer | Jan200101 <sentrycraft123@gmail.com> | 2022-10-28 20:49:20 +0200 |
commit | bf07d6c0678e13fe5b92a3f8c22f890e6cca6efd (patch) | |
tree | f73814ba362292eb0525c6902db7f0322b69fc91 /SOURCES/asus-linux.patch | |
parent | 5fb3b14a350cd19f94d224b07a0c1fc9dcffdc0f (diff) | |
download | kernel-fsync-bf07d6c0678e13fe5b92a3f8c22f890e6cca6efd.tar.gz kernel-fsync-bf07d6c0678e13fe5b92a3f8c22f890e6cca6efd.zip |
kernel 6.0.5
Diffstat (limited to 'SOURCES/asus-linux.patch')
-rw-r--r-- | SOURCES/asus-linux.patch | 337 |
1 files changed, 51 insertions, 286 deletions
diff --git a/SOURCES/asus-linux.patch b/SOURCES/asus-linux.patch index cc36d1b..947accc 100644 --- a/SOURCES/asus-linux.patch +++ b/SOURCES/asus-linux.patch @@ -1925,28 +1925,28 @@ index 3d861477cb20..7dd580fdc61c 100644 -- 2.37.2 -From e6529e0ad6942bb0eadc5f5ad0590124153e0a8c Mon Sep 17 00:00:00 2001 +From 802dfc514194e5459397f513b202031228b3315a Mon Sep 17 00:00:00 2001 From: "Luke D. Jones" <luke@ljones.dev> -Date: Wed, 3 Aug 2022 11:02:05 +1200 -Subject: [PATCH 1/1] HID: amd_sfh: Add keyguard for ASUS ROG X13 tablet +Date: Fri, 26 Aug 2022 12:25:12 +1200 +Subject: [PATCH 19/19] HID: amd_sfh: Add keyguard for ASUS ROG X13 tablet Add support for ROG X13 Flow 2-in-1 to disable the keyboard when the lid is flipped. Signed-off-by: Luke D. Jones <luke@ljones.dev> --- - drivers/hid/amd-sfh-hid/amd_sfh_pcie.c | 7 ++++- + drivers/hid/amd-sfh-hid/amd_sfh_pcie.c | 4 +++ drivers/hid/amd-sfh-hid/amd_sfh_pcie.h | 1 + .../hid_descriptor/amd_sfh_hid_desc.c | 27 +++++++++++++++++++ - .../hid_descriptor/amd_sfh_hid_desc.h | 9 +++++++ + .../hid_descriptor/amd_sfh_hid_desc.h | 8 ++++++ .../hid_descriptor/amd_sfh_hid_report_desc.h | 19 +++++++++++++ - 5 files changed, 62 insertions(+), 1 deletion(-) + 5 files changed, 59 insertions(+) diff --git a/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c b/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c -index dadc491bbf6b..243541d426d8 100644 +index 4b90c86ee5f8..0f4db2ce076e 100644 --- a/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c +++ b/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c -@@ -26,6 +26,7 @@ +@@ -27,6 +27,7 @@ #define ACEL_EN BIT(0) #define GYRO_EN BIT(1) #define MAGNO_EN BIT(2) @@ -1954,7 +1954,7 @@ index dadc491bbf6b..243541d426d8 100644 #define HPD_EN BIT(16) #define ALS_EN BIT(19) -@@ -232,6 +233,9 @@ int amd_mp2_get_sensor_num(struct amd_mp2_dev *privdata, u8 *sensor_id) +@@ -233,6 +234,9 @@ int amd_mp2_get_sensor_num(struct amd_mp2_dev *privdata, u8 *sensor_id) if (HPD_EN & activestatus) sensor_id[num_of_sensors++] = HPD_IDX; @@ -1964,33 +1964,23 @@ index dadc491bbf6b..243541d426d8 100644 return num_of_sensors; } -@@ -373,7 +377,8 @@ static int __maybe_unused amd_mp2_pci_suspend(struct device *dev) - - for (i = 0; i < cl_data->num_hid_devices; i++) { - if (cl_data->sensor_idx[i] != HPD_IDX && -- cl_data->sensor_sts[i] == SENSOR_ENABLED) { -+ cl_data->sensor_idx[i] != KBGUARD_IDX && -+ cl_data->sensor_sts[i] == SENSOR_ENABLED) { - mp2->mp2_ops->stop(mp2, cl_data->sensor_idx[i]); - status = amd_sfh_wait_for_response - (mp2, cl_data->sensor_idx[i], SENSOR_DISABLED); diff --git a/drivers/hid/amd-sfh-hid/amd_sfh_pcie.h b/drivers/hid/amd-sfh-hid/amd_sfh_pcie.h -index 8c760526132a..4a86bc6038a2 100644 +index dfb7cabd82ef..5fa15eed43f3 100644 --- a/drivers/hid/amd-sfh-hid/amd_sfh_pcie.h +++ b/drivers/hid/amd-sfh-hid/amd_sfh_pcie.h -@@ -36,6 +36,7 @@ - #define SENSOR_DISABLED 5 +@@ -23,6 +23,7 @@ + #define V2_STATUS 0x2 #define HPD_IDX 16 +#define KBGUARD_IDX 15 - #define AMD_SFH_IDLE_LOOP 200 - + #define SENSOR_DISCOVERY_STATUS_MASK GENMASK(5, 3) + #define SENSOR_DISCOVERY_STATUS_SHIFT 3 diff --git a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c -index 76095bd53c65..f41d28ea7b93 100644 +index f9a8c02d5a7b..06487eb75dc8 100644 --- a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c +++ b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c -@@ -57,6 +57,11 @@ int get_report_descriptor(int sensor_idx, u8 *rep_desc) +@@ -57,6 +57,11 @@ static int get_report_descriptor(int sensor_idx, u8 *rep_desc) memcpy(rep_desc, hpd_report_descriptor, sizeof(hpd_report_descriptor)); break; @@ -2002,7 +1992,7 @@ index 76095bd53c65..f41d28ea7b93 100644 default: break; } -@@ -116,6 +121,16 @@ u32 get_descr_sz(int sensor_idx, int descriptor_name) +@@ -116,6 +121,16 @@ static u32 get_descr_sz(int sensor_idx, int descriptor_name) return sizeof(struct hpd_feature_report); } break; @@ -2019,7 +2009,7 @@ index 76095bd53c65..f41d28ea7b93 100644 default: break; -@@ -139,6 +154,7 @@ u8 get_feature_report(int sensor_idx, int report_id, u8 *feature_report) +@@ -139,6 +154,7 @@ static u8 get_feature_report(int sensor_idx, int report_id, u8 *feature_report) struct gyro_feature_report gyro_feature; struct magno_feature_report magno_feature; struct hpd_feature_report hpd_feature; @@ -2027,7 +2017,7 @@ index 76095bd53c65..f41d28ea7b93 100644 struct als_feature_report als_feature; u8 report_size = 0; -@@ -186,6 +202,11 @@ u8 get_feature_report(int sensor_idx, int report_id, u8 *feature_report) +@@ -186,6 +202,11 @@ static u8 get_feature_report(int sensor_idx, int report_id, u8 *feature_report) memcpy(feature_report, &hpd_feature, sizeof(hpd_feature)); report_size = sizeof(hpd_feature); break; @@ -2039,7 +2029,7 @@ index 76095bd53c65..f41d28ea7b93 100644 default: break; -@@ -210,6 +231,7 @@ u8 get_input_report(u8 current_index, int sensor_idx, int report_id, struct amd_ +@@ -211,6 +232,7 @@ static u8 get_input_report(u8 current_index, int sensor_idx, int report_id, struct accel3_input_report acc_input; struct gyro_input_report gyro_input; struct hpd_input_report hpd_input; @@ -2047,7 +2037,7 @@ index 76095bd53c65..f41d28ea7b93 100644 struct als_input_report als_input; struct hpd_status hpdstatus; u8 report_size = 0; -@@ -262,6 +284,11 @@ u8 get_input_report(u8 current_index, int sensor_idx, int report_id, struct amd_ +@@ -263,6 +285,11 @@ static u8 get_input_report(u8 current_index, int sensor_idx, int report_id, report_size = sizeof(hpd_input); memcpy(input_report, &hpd_input, sizeof(hpd_input)); break; @@ -2060,31 +2050,22 @@ index 76095bd53c65..f41d28ea7b93 100644 break; } diff --git a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.h b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.h -index 70b1b7abe2c6..98571a8597b3 100644 +index ebd55675eb62..2f2ba9a0cfbc 100644 --- a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.h +++ b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.h -@@ -105,12 +105,21 @@ struct hpd_feature_report { - struct common_feature_property common_property; +@@ -111,4 +111,12 @@ struct hpd_input_report { + u8 human_presence; } __packed; +struct kbguard_feature_report { + struct common_feature_property common_property; +} __packed; + - struct hpd_input_report { - struct common_input_property common_property; - /* values specific to human presence sensor */ - u8 human_presence; - } __packed; - +struct kbguard_input_report { + struct common_input_property common_property; +} __packed; + -+ - int get_report_descriptor(int sensor_idx, u8 rep_desc[]); - u32 get_descr_sz(int sensor_idx, int descriptor_name); - u8 get_feature_report(int sensor_idx, int report_id, u8 *feature_report); + #endif diff --git a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_report_desc.h b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_report_desc.h index 697f2791ea9c..7a62fcec2c73 100644 --- a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_report_desc.h @@ -2116,7 +2097,7 @@ index 697f2791ea9c..7a62fcec2c73 100644 static const u8 hpd_report_descriptor[] = { 0x05, 0x20, /* Usage page */ -- -2.37.1 +2.37.2 From 3f73788b14ada783657e5e6303c4e5de5e096be5 Mon Sep 17 00:00:00 2001 From: "Luke D. Jones" <luke@ljones.dev> @@ -2179,17 +2160,27 @@ index f608a4467d99..ea45e10302f7 100644 -- 2.37.2 +From fe443cc4ff4e12652af1cdae63cff354a2467b67 Mon Sep 17 00:00:00 2001 +From: "Luke D. Jones" <luke@ljones.dev> +Date: Fri, 26 Aug 2022 12:34:02 +1200 +Subject: [PATCH 21/21] asus-wmi: Support the GPU fan on TUF laptops + +Add support for TUF laptops which have the ability to control +the GPU fan. This will show as a second fan in hwmon, and has +the ability to run as boost (fullspeed), or auto. + +Signed-off-by: Luke D. Jones <luke@ljones.dev> --- drivers/platform/x86/asus-wmi.c | 71 ++++++++++++++++++++++ include/linux/platform_data/x86/asus-wmi.h | 1 + 2 files changed, 72 insertions(+) diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c -index ac06fec0565c..2a74e468591a 100644 +index ea45e10302f7..d05684194f2d 100644 --- a/drivers/platform/x86/asus-wmi.c +++ b/drivers/platform/x86/asus-wmi.c -@@ -221,7 +221,9 @@ struct asus_wmi { - struct asus_rfkill uwb; +@@ -226,7 +226,9 @@ struct asus_wmi { + u32 tablet_switch_dev_id; enum fan_type fan_type; + enum fan_type gpu_fan_type; @@ -2198,12 +2189,12 @@ index ac06fec0565c..2a74e468591a 100644 int agfn_pwm; bool fan_boost_mode_available; -@@ -1757,6 +1759,18 @@ static int asus_fan_set_auto(struct asus_wmi *asus) +@@ -1861,6 +1863,18 @@ static int asus_fan_set_auto(struct asus_wmi *asus) return -ENXIO; } + /* -+ * Modern models like G713 also have GPU fan control. This is not AGFN. ++ * Modern models like the G713 also have GPU fan control (this is not AGFN) + */ + if (asus->gpu_fan_type == FAN_TYPE_SPEC83) { + status = asus_wmi_set_devstate(ASUS_WMI_DEVID_GPU_FAN_CTRL, @@ -2217,7 +2208,7 @@ index ac06fec0565c..2a74e468591a 100644 return 0; } -@@ -1959,9 +1973,57 @@ static ssize_t asus_hwmon_temp1(struct device *dev, +@@ -2063,9 +2077,57 @@ static ssize_t asus_hwmon_temp1(struct device *dev, deci_kelvin_to_millicelsius(value & 0xFFFF)); } @@ -2228,7 +2219,7 @@ index ac06fec0565c..2a74e468591a 100644 +{ + struct asus_wmi *asus = dev_get_drvdata(dev); + -+ return sprintf(buf, "%d\n", asus->gpu_fan_pwm_mode); ++ return sysfs_emit(buf, "%d\n", asus->gpu_fan_pwm_mode); +} + +static ssize_t pwm2_enable_store(struct device *dev, @@ -2275,7 +2266,7 @@ index ac06fec0565c..2a74e468591a 100644 static DEVICE_ATTR_RO(fan1_input); static DEVICE_ATTR_RO(fan1_label); -@@ -1971,6 +2033,7 @@ static DEVICE_ATTR(temp1_input, S_IRUGO, asus_hwmon_temp1, NULL); +@@ -2075,6 +2137,7 @@ static DEVICE_ATTR(temp1_input, S_IRUGO, asus_hwmon_temp1, NULL); static struct attribute *hwmon_attributes[] = { &dev_attr_pwm1.attr, &dev_attr_pwm1_enable.attr, @@ -2283,7 +2274,7 @@ index ac06fec0565c..2a74e468591a 100644 &dev_attr_fan1_input.attr, &dev_attr_fan1_label.attr, -@@ -1993,6 +2056,9 @@ static umode_t asus_hwmon_sysfs_is_visible(struct kobject *kobj, +@@ -2097,6 +2160,9 @@ static umode_t asus_hwmon_sysfs_is_visible(struct kobject *kobj, || attr == &dev_attr_pwm1_enable.attr) { if (asus->fan_type == FAN_TYPE_NONE) return 0; @@ -2293,7 +2284,7 @@ index ac06fec0565c..2a74e468591a 100644 } else if (attr == &dev_attr_temp1_input.attr) { int err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_THERMAL_CTRL, -@@ -2035,6 +2101,7 @@ static int asus_wmi_hwmon_init(struct asus_wmi *asus) +@@ -2139,6 +2205,7 @@ static int asus_wmi_hwmon_init(struct asus_wmi *asus) static int asus_wmi_fan_init(struct asus_wmi *asus) { @@ -2301,7 +2292,7 @@ index ac06fec0565c..2a74e468591a 100644 asus->fan_type = FAN_TYPE_NONE; asus->agfn_pwm = -1; -@@ -2043,6 +2110,10 @@ static int asus_wmi_fan_init(struct asus_wmi *asus) +@@ -2147,6 +2214,10 @@ static int asus_wmi_fan_init(struct asus_wmi *asus) else if (asus_wmi_has_agfn_fan(asus)) asus->fan_type = FAN_TYPE_AGFN; @@ -2313,10 +2304,10 @@ index ac06fec0565c..2a74e468591a 100644 return -ENODEV; diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h -index a571b47ff362..bcffb77371be 100644 +index 7dd580fdc61c..28234dc9fa6a 100644 --- a/include/linux/platform_data/x86/asus-wmi.h +++ b/include/linux/platform_data/x86/asus-wmi.h -@@ -77,6 +77,7 @@ +@@ -79,6 +79,7 @@ #define ASUS_WMI_DEVID_THERMAL_CTRL 0x00110011 #define ASUS_WMI_DEVID_FAN_CTRL 0x00110012 /* deprecated */ #define ASUS_WMI_DEVID_CPU_FAN_CTRL 0x00110013 @@ -2325,9 +2316,9 @@ index a571b47ff362..bcffb77371be 100644 #define ASUS_WMI_DEVID_GPU_FAN_CURVE 0x00110025 -- -2.37.1 +2.37.2 - From ded47e7197a4ce9d6c34c0c96c6551ecaca0b6bd Mon Sep 17 00:00:00 2001 +From ded47e7197a4ce9d6c34c0c96c6551ecaca0b6bd Mon Sep 17 00:00:00 2001 From: "Luke D. Jones" <luke@ljones.dev> Date: Fri, 16 Sep 2022 11:17:16 +1200 Subject: [PATCH] asus-wmi: Expand support of GPU fan to read RPM and label @@ -2423,229 +2414,3 @@ index ae46af731de9..7fe6ce25da0a 100644 -- 2.37.3 -From c104c26a25de7faf6c1fce3d05806d1766721798 Mon Sep 17 00:00:00 2001 -From: "Luke D. Jones" <luke@ljones.dev> -Date: Mon, 10 Oct 2022 20:00:26 +1300 -Subject: [PATCH] ALSA: hda/realtek: Add quirk for ASUS GV601R laptop - -The ASUS ROG X16 (GV601R) series laptop has the same node-to-DAC pairs -as early models and the G14, this includes bass speakers which are by -default mapped incorrectly to the 0x06 node. - -Add a quirk to use the same DAC pairs as the G14. - -Signed-off-by: Luke D. Jones <luke@ljones.dev> ---- - sound/pci/hda/patch_realtek.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c -index bce82b834cec..1ffea762ba57 100644 ---- a/sound/pci/hda/patch_realtek.c -+++ b/sound/pci/hda/patch_realtek.c -@@ -9422,6 +9422,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { - SND_PCI_QUIRK(0x1043, 0x1e8e, "ASUS Zephyrus G15", ALC289_FIXUP_ASUS_GA401), - SND_PCI_QUIRK(0x1043, 0x1c52, "ASUS Zephyrus G15 2022", ALC289_FIXUP_ASUS_GA401), - SND_PCI_QUIRK(0x1043, 0x1f11, "ASUS Zephyrus G14", ALC289_FIXUP_ASUS_GA401), -+ SND_PCI_QUIRK(0x1043, 0x1f92, "ASUS ROG Flow X16", ALC289_FIXUP_ASUS_GA401), - SND_PCI_QUIRK(0x1043, 0x3030, "ASUS ZN270IE", ALC256_FIXUP_ASUS_AIO_GPIO2), - SND_PCI_QUIRK(0x1043, 0x831a, "ASUS P901", ALC269_FIXUP_STEREO_DMIC), - SND_PCI_QUIRK(0x1043, 0x834a, "ASUS S101", ALC269_FIXUP_STEREO_DMIC), --- -2.37.3 - -From 4e55d420b8f311a5d93367e8598c7d1590eff4cf Mon Sep 17 00:00:00 2001 -From: "Luke D. Jones" <luke@ljones.dev> -Date: Mon, 10 Oct 2022 19:51:57 +1300 -Subject: [PATCH] Fixes bc2c23549ccd ("ALSA: hda/realtek: Add pincfg for ASUS - G533Z HP jack") - -The initial fix for ASUS G533Z was based on faulty information. This -fixes the pincfg to values that have been verified with no existing -module options or other hacks enabled. - -Enables headphone jack, and 5.1 surround. - -Signed-off-by: Luke D. Jones <luke@ljones.dev> ---- - sound/pci/hda/patch_realtek.c | 10 ++++++---- - 1 file changed, 6 insertions(+), 4 deletions(-) - -diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c -index bce82b834cec..24406f81da27 100644 ---- a/sound/pci/hda/patch_realtek.c -+++ b/sound/pci/hda/patch_realtek.c -@@ -8449,11 +8449,13 @@ static const struct hda_fixup alc269_fixups[] = { - [ALC285_FIXUP_ASUS_G533Z_PINS] = { - .type = HDA_FIXUP_PINS, - .v.pins = (const struct hda_pintbl[]) { -- { 0x14, 0x90170120 }, -- { } -+ { 0x14, 0x90170152 }, /* Speaker Surround Playback Switch */ -+ { 0x19, 0x03a19020 }, /* Mic Boost Volume */ -+ { 0x1a, 0x03a11c30 }, /* Mic Boost Volume */ -+ { 0x1e, 0x90170151 }, /* Rear jack, IN OUT EAPD Detect */ -+ { 0x21, 0x03211420 }, -+ { } - }, -- .chained = true, -- .chain_id = ALC294_FIXUP_ASUS_G513_PINS, - }, - [ALC294_FIXUP_ASUS_COEF_1B] = { - .type = HDA_FIXUP_VERBS, --- -2.37.3 - -From ef5a27e01610251d6b91e3bdcf297246414b40ce Mon Sep 17 00:00:00 2001 -From: "Luke D. Jones" <luke@ljones.dev> -Date: Mon, 10 Oct 2022 19:27:51 +1300 -Subject: [PATCH] platform/x86: asus-wmi: Add support for ROG X16 tablet mode - -Add quirk for ASUS ROG X16 Flow 2-in-1 to enable tablet mode with -lid flip (all screen rotations). - -Signed-off-by: Luke D. Jones <luke@ljones.dev> ---- - drivers/platform/x86/asus-nb-wmi.c | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/drivers/platform/x86/asus-nb-wmi.c b/drivers/platform/x86/asus-nb-wmi.c -index 613c45c9fbe3..c685a705b73d 100644 ---- a/drivers/platform/x86/asus-nb-wmi.c -+++ b/drivers/platform/x86/asus-nb-wmi.c -@@ -464,6 +464,15 @@ static const struct dmi_system_id asus_quirks[] = { - }, - .driver_data = &quirk_asus_tablet_mode, - }, -+ { -+ .callback = dmi_matched, -+ .ident = "ASUS ROG FLOW X16", -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), -+ DMI_MATCH(DMI_PRODUCT_NAME, "GV601R"), -+ }, -+ .driver_data = &quirk_asus_tablet_mode, -+ }, - {}, - }; - --- -2.37.3 - -From 9eccb147466f00a13c593ac078d8639e1eafe3a2 Mon Sep 17 00:00:00 2001 -From: "Luke D. Jones" <luke@ljones.dev> -Date: Fri, 14 Oct 2022 10:43:09 +1300 -Subject: [PATCH] platform/x86: asus-wmi: Add safety checks to dgpu/egpu/mux - methods - -The WMI methods for dgpu_disable, egpu_enable, and gpu_mux_mode have -no internal safety checks. This means it is possible for a user to -set the gpu mux to discreet mode and then disable the dgpu, resulting -in the user having no screen and very little chance of recovery. - -This commit adds checks to dgpu_disable and egpu_enable to ensure that -the dgpu can not be disabled if the MUX is in discreet mode, and a -check to gpu_mux_mode to prevent switching to discreet mode if -dgpu_disable is set. - -Signed-off-by: Luke D. Jones <luke@ljones.dev> ---- - drivers/platform/x86/asus-wmi.c | 38 +++++++++++++++++++++++++++++++++ - 1 file changed, 38 insertions(+) - -diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c -index 6e8e093f96b3..1afc4d40fa1a 100644 ---- a/drivers/platform/x86/asus-wmi.c -+++ b/drivers/platform/x86/asus-wmi.c -@@ -615,6 +615,18 @@ static ssize_t dgpu_disable_store(struct device *dev, - if (disable > 1) - return -EINVAL; - -+ /* -+ * The GPU MUX must be checked first, if it is in discreet mode the -+ * dgpu_disable cannot be set to on or users can end up with no screen. -+ */ -+ result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_GPU_MUX); -+ if (result < 0) -+ return result; -+ if (!result && disable) { -+ pr_warn("ASUS MUX is in discreet mode, can not set dgpu_disable on\n"); -+ return -EINVAL; -+ } -+ - err = asus_wmi_set_devstate(ASUS_WMI_DEVID_DGPU, disable, &result); - if (err) { - pr_warn("Failed to set dgpu disable: %d\n", err); -@@ -663,6 +675,19 @@ static ssize_t egpu_enable_store(struct device *dev, - if (enable > 1) - return -EINVAL; - -+ /* -+ * The GPU MUX must be checked first, if it is in discreet mode the -+ * egpu_enable cannot be set to on or users can end up with no screen. -+ * Note: egpu_enable method in WMI also sets dgpu_disable to on. -+ */ -+ result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_GPU_MUX); -+ if (result < 0) -+ return result; -+ if (!result && enable) { -+ pr_warn("ASUS MUX is in discreet mode, can not set egpu_enable on\n"); -+ return -EINVAL; -+ } -+ - err = asus_wmi_set_devstate(ASUS_WMI_DEVID_EGPU, enable, &result); - if (err) { - pr_warn("Failed to set egpu disable: %d\n", err); -@@ -709,6 +734,19 @@ static ssize_t gpu_mux_mode_store(struct device *dev, - if (optimus > 1) - return -EINVAL; - -+ /* -+ * The dgpu_disable must be checked first, if it is enabled the -+ * gpu MUX can not be set to 0 or users can end up with no screen. -+ * Note: egpu_enable also switches dgpu_disable to 1 if enabled. -+ */ -+ result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_DGPU); -+ if (result < 0) -+ return result; -+ if (result && !optimus) { -+ pr_warn("ASUS dgpu_disable is set, can not switch MUX to discreet mode\n"); -+ 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); --- -2.37.3 - -From f1c38428ff75d0f3956615bea69a43b8b6812414 Mon Sep 17 00:00:00 2001 -From: "Luke D. Jones" <luke@ljones.dev> -Date: Fri, 14 Oct 2022 13:03:36 +1300 -Subject: [PATCH] platform/x86: asus-wmi: Check for reboot required in - dgpu_disable methods - -Signed-off-by: Luke D. Jones <luke@ljones.dev> ---- - drivers/platform/x86/asus-wmi.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c -index 1afc4d40fa1a..5d5c473541bd 100644 ---- a/drivers/platform/x86/asus-wmi.c -+++ b/drivers/platform/x86/asus-wmi.c -@@ -633,6 +633,11 @@ static ssize_t dgpu_disable_store(struct device *dev, - return err; - } - -+ if (result == 2) { -+ pr_warn("Failed to set dgpu disable, reboot is required\n"); -+ return -2; -+ } -+ - if (result > 1) { - pr_warn("Failed to set dgpu disable (result): 0x%x\n", result); - return -EIO; --- -2.37.3 - |