aboutsummaryrefslogtreecommitdiff
path: root/SOURCES/asus-linux.patch
diff options
context:
space:
mode:
authorJan200101 <sentrycraft123@gmail.com>2023-12-27 00:09:35 +0100
committerJan200101 <sentrycraft123@gmail.com>2023-12-27 00:09:35 +0100
commitef30b65009f6bb3e7cdd60260f1a0700af4090c6 (patch)
tree00a639a250ba6437991bc6bbe3cfef18e1591fe9 /SOURCES/asus-linux.patch
parentf7fd1aa1c91ea6cda3a8185f98de06d8b854dd6d (diff)
downloadkernel-fsync-ef30b65009f6bb3e7cdd60260f1a0700af4090c6.tar.gz
kernel-fsync-ef30b65009f6bb3e7cdd60260f1a0700af4090c6.zip
kernel 6.6.8
Diffstat (limited to 'SOURCES/asus-linux.patch')
-rw-r--r--SOURCES/asus-linux.patch343
1 files changed, 191 insertions, 152 deletions
diff --git a/SOURCES/asus-linux.patch b/SOURCES/asus-linux.patch
index d57ace0..e196e8f 100644
--- a/SOURCES/asus-linux.patch
+++ b/SOURCES/asus-linux.patch
@@ -1,115 +1,3 @@
-From 76556b655f7b50afe5c58006f44221900e5711a9 Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Wed, 23 Aug 2023 11:05:59 +1200
-Subject: [PATCH v2] ALSA: hda: cs35l41: Support ASUS 2023 laptops with missing
- DSD
-
-Support adding the missing DSD properties required for ASUS ROG 2023
-laptops and other ASUS laptops to properly utilise the cs35l41.
-
-The currently added laptops are:
-- ASUS GS650P, i2c
-- ASUS GA402X, i2c
-- ASUS GU604V, spi
-- ASUS GU603V, spi
-- ASUS GV601V, spi
-- ASUS GZ301V, spi
-- ASUS ROG ALLY, i2c
-- ASUS G614J, spi
-- ASUS G634J, spi
-- ASUS G614JI, spi
-- ASUS G713P, i2c
-- ASUS H7604JV, spi
-
-The SPI connected amps may be required to use an external DSD patch
-to fix or add the "cs-gpios" property.
-
-Co-developed-by: Jonathan LoBue <jlobue10@gmail.com>
-Signed-off-by: Jonathan LoBue <jlobue10@gmail.com>
-Co-developed-by: Luke D. Jones <luke@ljones.dev>
-Signed-off-by: Luke D. Jones <luke@ljones.dev>
----
- sound/pci/hda/cs35l41_hda_property.c | 57 ++++++++++++++++++++++++++++
- 1 file changed, 57 insertions(+)
-
-diff --git a/sound/pci/hda/cs35l41_hda_property.c b/sound/pci/hda/cs35l41_hda_property.c
-index c83328971728..de0802859849 100644
---- a/sound/pci/hda/cs35l41_hda_property.c
-+++ b/sound/pci/hda/cs35l41_hda_property.c
-@@ -76,6 +76,49 @@ static int hp_vision_acpi_fix(struct cs35l41_hda *cs35l41, struct device *physde
- hw_cfg->bst_ind = 1000;
- hw_cfg->bst_ipk = 4500;
- hw_cfg->bst_cap = 24;
-+
-+ hw_cfg->valid = true;
-+
-+ return 0;
-+}
-+
-+/*
-+ * The CSC3551 is used in almost the entire ROG laptop range in 2023, this is likely to
-+ * also include many non ROG labelled laptops. It is also used with either I2C connection or
-+ * SPI connection. The SPI connected versions may be missing a chip select GPIO and require
-+ * an DSD table patch.
-+ */
-+static int asus_rog_2023_no_acpi(struct cs35l41_hda *cs35l41, struct device *physdev, int id,
-+ const char *hid)
-+{
-+ struct cs35l41_hw_cfg *hw_cfg = &cs35l41->hw_cfg;
-+ int reset_gpio = 0;
-+ int spkr_gpio = 2;
-+
-+ /* check SPI or I2C address to assign the index */
-+ cs35l41->index = (id == 0 || id == 0x40) ? 0 : 1;
-+ cs35l41->channel_index = 0;
-+ hw_cfg->spk_pos = cs35l41->index;
-+ hw_cfg->bst_type = CS35L41_EXT_BOOST;
-+ hw_cfg->gpio1.func = CS35l41_VSPK_SWITCH;
-+ hw_cfg->gpio1.valid = true;
-+ hw_cfg->gpio2.func = CS35L41_INTERRUPT;
-+ hw_cfg->gpio2.valid = true;
-+
-+ if (strcmp(cs35l41->acpi_subsystem_id, "10431483") == 0)
-+ spkr_gpio = 1;
-+ cs35l41->speaker_id = cs35l41_get_speaker_id(physdev, 0, 0, spkr_gpio);
-+
-+ if (strcmp(cs35l41->acpi_subsystem_id, "10431473") == 0
-+ || strcmp(cs35l41->acpi_subsystem_id, "10431483") == 0
-+ || strcmp(cs35l41->acpi_subsystem_id, "10431493") == 0
-+ || strcmp(cs35l41->acpi_subsystem_id, "10431CAF") == 0
-+ || strcmp(cs35l41->acpi_subsystem_id, "10431CCF") == 0
-+ || strcmp(cs35l41->acpi_subsystem_id, "10431E02") == 0) {
-+ reset_gpio = 1;
-+ }
-+ cs35l41->reset_gpio = gpiod_get_index(physdev, NULL, reset_gpio, GPIOD_OUT_HIGH);
-+
- hw_cfg->valid = true;
-
- return 0;
-@@ -92,6 +135,20 @@ static const struct cs35l41_prop_model cs35l41_prop_model_table[] = {
- { "CLSA0100", NULL, lenovo_legion_no_acpi },
- { "CLSA0101", NULL, lenovo_legion_no_acpi },
- { "CSC3551", "103C89C6", hp_vision_acpi_fix },
-+ { "CSC3551", "10431433", asus_rog_2023_no_acpi }, // GS650P i2c
-+ { "CSC3551", "10431463", asus_rog_2023_no_acpi }, // GA402X/N i2c, rst=0
-+ { "CSC3551", "10431473", asus_rog_2023_no_acpi }, // GU604V spi, rst=1
-+ { "CSC3551", "10431483", asus_rog_2023_no_acpi }, // GU603V spi, rst=1, spkr=1
-+ { "CSC3551", "10431493", asus_rog_2023_no_acpi }, // GV601V spi, rst=1
-+ { "CSC3551", "10431573", asus_rog_2023_no_acpi }, // GZ301V spi, rst=0
-+ { "CSC3551", "104317F3", asus_rog_2023_no_acpi }, // ROG ALLY i2c, rst=0
-+ { "CSC3551", "10431B93", asus_rog_2023_no_acpi }, // G614J spi, rst=0
-+ { "CSC3551", "10431C9F", asus_rog_2023_no_acpi }, // G614JI spi, rst=0
-+ { "CSC3551", "10431CAF", asus_rog_2023_no_acpi }, // G634J spi, rst=1
-+ { "CSC3551", "10431CCF", asus_rog_2023_no_acpi }, // G814J spi, rst=1
-+ { "CSC3551", "10431D1F", asus_rog_2023_no_acpi }, // G713P i2c, rst=0
-+ { "CSC3551", "10431E02", asus_rog_2023_no_acpi }, // UX3042Z spi, rst=1
-+ { "CSC3551", "10431F1F", asus_rog_2023_no_acpi }, // H7604JV spi, rst=0
- {}
- };
-
---
-2.41.0
-
From b35a4c957b3f0e5b4c7c73dec4fe3a5b9dbc4873 Mon Sep 17 00:00:00 2001
From: "Luke D. Jones" <luke@ljones.dev>
Date: Sun, 30 Apr 2023 10:56:34 +1200
@@ -157,26 +45,26 @@ index f54178d6f780..0b13be703856 100644
@@ -127,6 +128,10 @@ module_param(fnlock_default, bool, 0444);
#define NVIDIA_TEMP_MIN 75
#define NVIDIA_TEMP_MAX 87
-
+
+#define ASUS_SCREENPAD_BRIGHT_MIN 20
+#define ASUS_SCREENPAD_BRIGHT_MAX 255
+#define ASUS_SCREENPAD_BRIGHT_DEFAULT 60
+
static const char * const ashs_ids[] = { "ATK4001", "ATK4002", NULL };
-
+
static int throttle_thermal_policy_write(struct asus_wmi *);
@@ -212,6 +217,7 @@ struct asus_wmi {
-
+
struct input_dev *inputdev;
struct backlight_device *backlight_device;
+ struct backlight_device *screenpad_backlight_device;
struct platform_device *platform_device;
-
+
struct led_classdev wlan_led;
@@ -3776,6 +3782,124 @@ static int is_display_toggle(int code)
return 0;
}
-
+
+/* Screenpad backlight *******************************************************/
+
+static int read_screenpad_backlight_power(struct asus_wmi *asus)
@@ -296,12 +184,12 @@ index f54178d6f780..0b13be703856 100644
+}
+
/* Fn-lock ********************************************************************/
-
+
static bool asus_wmi_has_fnlock_key(struct asus_wmi *asus)
@@ -4431,6 +4555,12 @@ static int asus_wmi_add(struct platform_device *pdev)
} else if (asus->driver->quirks->wmi_backlight_set_devstate)
err = asus_wmi_set_devstate(ASUS_WMI_DEVID_BACKLIGHT, 2, NULL);
-
+
+ if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_SCREENPAD_LIGHT)) {
+ err = asus_screenpad_init(asus);
+ if (err && err != -ENODEV)
@@ -338,7 +226,7 @@ index a478ebfd34df..5fbdd0eafa02 100644
int panel_power;
+ int screenpad_brightness;
int wlan_ctrl_by_user;
-
+
const char *name;
diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
index 16e99a1c37fc..63e630276499 100644
@@ -354,37 +242,188 @@ index 16e99a1c37fc..63e630276499 100644
+#define ASUS_WMI_DEVID_SCREENPAD_LIGHT 0x00050032
#define ASUS_WMI_DEVID_FAN_BOOST_MODE 0x00110018
#define ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY 0x00120075
-
---
+
+--
2.41.0
-From 7760e10674dbb9127450629308c6ee1c35d5fc19 Mon Sep 17 00:00:00 2001
-From: "Luke D. Jones" <luke@ljones.dev>
-Date: Thu, 9 Nov 2023 09:41:13 +1300
-Subject: [PATCH] ALSA: hda/realtek: Add quirk for ASUS ROG G814Jx
-
-Adds the required quirk to enable the Cirrus amp and correct pins
-on the ASUS ROG G814J series which uses an SPI connected Cirrus amp.
-
-While this works if the related _DSD properties are made available, these
-aren't included in the ACPI of these laptops (yet).
-
-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 58006c8bcfb9..a690baa202c5 100644
---- a/sound/pci/hda/patch_realtek.c
-+++ b/sound/pci/hda/patch_realtek.c
-@@ -9924,6 +9924,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
- SND_PCI_QUIRK(0x1043, 0x1c9f, "ASUS G614JI", ALC285_FIXUP_ASUS_HEADSET_MIC),
- SND_PCI_QUIRK(0x1043, 0x1caf, "ASUS G634JYR/JZR", ALC285_FIXUP_ASUS_SPI_REAR_SPEAKERS),
- SND_PCI_QUIRK(0x1043, 0x1ccd, "ASUS X555UB", ALC256_FIXUP_ASUS_MIC),
-+ SND_PCI_QUIRK(0x1043, 0x1ccf, "ASUS G814JI", ALC285_FIXUP_ASUS_SPI_REAR_SPEAKERS),
- SND_PCI_QUIRK(0x1043, 0x1d1f, "ASUS ROG Strix G17 2023 (G713PV)", ALC287_FIXUP_CS35L41_I2C_2),
- SND_PCI_QUIRK(0x1043, 0x1d42, "ASUS Zephyrus G14 2022", ALC289_FIXUP_ASUS_GA401),
- SND_PCI_QUIRK(0x1043, 0x1d4e, "ASUS TM420", ALC256_FIXUP_ASUS_HPE),
---
-2.41.0
+diff --git a/drivers/hid/amd-sfh-hid/amd_sfh_client.c b/drivers/hid/amd-sfh-hid/amd_sfh_client.c
+index bdb578e0899f..f98a02eee783 100644
+--- a/drivers/hid/amd-sfh-hid/amd_sfh_client.c
++++ b/drivers/hid/amd-sfh-hid/amd_sfh_client.c
+@@ -146,6 +146,8 @@ static const char *get_sensor_name(int idx)
+ return "gyroscope";
+ case mag_idx:
+ return "magnetometer";
++ case tms_idx:
++ return "tablet-mode-switch";
+ case als_idx:
+ case ACS_IDX: /* ambient color sensor */
+ return "ALS";
+diff --git a/drivers/hid/amd-sfh-hid/amd_sfh_hid.h b/drivers/hid/amd-sfh-hid/amd_sfh_hid.h
+index 97296f587bc7..cea7ec6f6288 100644
+--- a/drivers/hid/amd-sfh-hid/amd_sfh_hid.h
++++ b/drivers/hid/amd-sfh-hid/amd_sfh_hid.h
+@@ -11,7 +11,7 @@
+ #ifndef AMDSFH_HID_H
+ #define AMDSFH_HID_H
+
+-#define MAX_HID_DEVICES 6
++#define MAX_HID_DEVICES 7
+ #define AMD_SFH_HID_VENDOR 0x1022
+ #define AMD_SFH_HID_PRODUCT 0x0001
+
+diff --git a/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c b/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c
+index 2530fa98b568..af5b37a62b10 100644
+--- a/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c
++++ b/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c
+@@ -27,6 +27,7 @@
+ #define ACEL_EN BIT(0)
+ #define GYRO_EN BIT(1)
+ #define MAGNO_EN BIT(2)
++#define TMS_EN BIT(15)
+ #define HPD_EN BIT(16)
+ #define ALS_EN BIT(19)
+ #define ACS_EN BIT(22)
+@@ -228,6 +229,9 @@ int amd_mp2_get_sensor_num(struct amd_mp2_dev *privdata, u8 *sensor_id)
+ if (MAGNO_EN & activestatus)
+ sensor_id[num_of_sensors++] = mag_idx;
+
++ if (TMS_EN & activestatus)
++ sensor_id[num_of_sensors++] = tms_idx;
++
+ if (ALS_EN & activestatus)
+ sensor_id[num_of_sensors++] = als_idx;
+
+diff --git a/drivers/hid/amd-sfh-hid/amd_sfh_pcie.h b/drivers/hid/amd-sfh-hid/amd_sfh_pcie.h
+index 70add75fc506..60130ad846a4 100644
+--- a/drivers/hid/amd-sfh-hid/amd_sfh_pcie.h
++++ b/drivers/hid/amd-sfh-hid/amd_sfh_pcie.h
+@@ -79,6 +79,7 @@ enum sensor_idx {
+ accel_idx = 0,
+ gyro_idx = 1,
+ mag_idx = 2,
++ tms_idx = 15,
+ als_idx = 19
+ };
+
+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 8716a05950c8..b6725e8daf0c 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
+@@ -47,6 +47,11 @@ static int get_report_descriptor(int sensor_idx, u8 *rep_desc)
+ memcpy(rep_desc, comp3_report_descriptor,
+ sizeof(comp3_report_descriptor));
+ break;
++ case tms_idx: /* tablet mode switch */
++ memset(rep_desc, 0, sizeof(tms_report_descriptor));
++ memcpy(rep_desc, tms_report_descriptor,
++ sizeof(tms_report_descriptor));
++ break;
+ case als_idx: /* ambient light sensor */
+ case ACS_IDX: /* ambient color sensor */
+ memset(rep_desc, 0, sizeof(als_report_descriptor));
+@@ -97,6 +102,16 @@ static u32 get_descr_sz(int sensor_idx, int descriptor_name)
+ return sizeof(struct magno_feature_report);
+ }
+ break;
++ case tms_idx:
++ switch (descriptor_name) {
++ case descr_size:
++ return sizeof(tms_report_descriptor);
++ case input_size:
++ return sizeof(struct tms_input_report);
++ case feature_size:
++ return sizeof(struct tms_feature_report);
++ }
++ break;
+ case als_idx:
+ case ACS_IDX: /* ambient color sensor */
+ switch (descriptor_name) {
+@@ -140,6 +155,7 @@ static u8 get_feature_report(int sensor_idx, int report_id, u8 *feature_report)
+ struct accel3_feature_report acc_feature;
+ struct gyro_feature_report gyro_feature;
+ struct magno_feature_report magno_feature;
++ struct tms_feature_report tms_feature;
+ struct hpd_feature_report hpd_feature;
+ struct als_feature_report als_feature;
+ u8 report_size = 0;
+@@ -175,6 +191,11 @@ static u8 get_feature_report(int sensor_idx, int report_id, u8 *feature_report)
+ memcpy(feature_report, &magno_feature, sizeof(magno_feature));
+ report_size = sizeof(magno_feature);
+ break;
++ case tms_idx: /* tablet mode switch */
++ get_common_features(&tms_feature.common_property, report_id);
++ memcpy(feature_report, &tms_feature, sizeof(tms_feature));
++ report_size = sizeof(tms_feature);
++ break;
+ case als_idx: /* ambient light sensor */
+ case ACS_IDX: /* ambient color sensor */
+ get_common_features(&als_feature.common_property, report_id);
+@@ -214,6 +235,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;
++ struct tms_input_report tms_input;
+ struct als_input_report als_input;
+ struct hpd_status hpdstatus;
+ u8 report_size = 0;
+@@ -247,6 +269,11 @@ static u8 get_input_report(u8 current_index, int sensor_idx, int report_id,
+ memcpy(input_report, &magno_input, sizeof(magno_input));
+ report_size = sizeof(magno_input);
+ break;
++ case tms_idx: /* tablet mode switch */
++ get_common_inputs(&tms_input.common_property, report_id);
++ report_size = sizeof(tms_input);
++ memcpy(input_report, &tms_input, sizeof(tms_input));
++ break;
+ case als_idx: /* Als */
+ case ACS_IDX: /* ambient color sensor */
+ get_common_inputs(&als_input.common_property, report_id);
+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 ebd55675eb62..b22068a47429 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
+@@ -111,4 +111,11 @@ struct hpd_input_report {
+ u8 human_presence;
+ } __packed;
+
++struct tms_feature_report {
++ struct common_feature_property common_property;
++} __packed;
++
++struct tms_input_report {
++ struct common_input_property common_property;
++} __packed;
+ #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..96cbc1e5b9a7 100644
+--- 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
+@@ -644,6 +644,27 @@ static const u8 als_report_descriptor[] = {
+ 0xC0 /* HID end collection */
+ };
+
++
++/* TABLET MODE SWITCH */
++__maybe_unused // Used by sfh1.0, but not yet implemented in sfh1.1
++static const u8 tms_report_descriptor[] = {
++0x06, 0x43, 0xFF, // Usage Page (Vendor Defined 0xFF43)
++0x0A, 0x02, 0x02, // Usage (0x0202)
++0xA1, 0x01, // Collection (Application)
++0x85, 0x11, // Report ID (17)
++0x15, 0x00, // Logical Minimum (0)
++0x25, 0x01, // Logical Maximum (1)
++0x35, 0x00, // Physical Minimum (0)
++0x45, 0x01, // Physical Maximum (1)
++0x65, 0x00, // Unit (None)
++0x55, 0x00, // Unit Exponent (0)
++0x75, 0x01, // Report Size (1)
++0x95, 0x98, // Report Count (-104)
++0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
++0x91, 0x03, // Output (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
++0xC1, 0x00, // End Collection
++};
++
+ /* BIOMETRIC PRESENCE*/
+ static const u8 hpd_report_descriptor[] = {
+ 0x05, 0x20, /* Usage page */