diff options
author | Jan200101 <sentrycraft123@gmail.com> | 2023-12-27 00:09:35 +0100 |
---|---|---|
committer | Jan200101 <sentrycraft123@gmail.com> | 2023-12-27 00:09:35 +0100 |
commit | ef30b65009f6bb3e7cdd60260f1a0700af4090c6 (patch) | |
tree | 00a639a250ba6437991bc6bbe3cfef18e1591fe9 /SOURCES/asus-linux.patch | |
parent | f7fd1aa1c91ea6cda3a8185f98de06d8b854dd6d (diff) | |
download | kernel-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.patch | 343 |
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 */ |