diff options
Diffstat (limited to 'SOURCES/asus-linux.patch')
-rw-r--r-- | SOURCES/asus-linux.patch | 259 |
1 files changed, 68 insertions, 191 deletions
diff --git a/SOURCES/asus-linux.patch b/SOURCES/asus-linux.patch index e196e8f..c1c34ea 100644 --- a/SOURCES/asus-linux.patch +++ b/SOURCES/asus-linux.patch @@ -1,3 +1,61 @@ +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 c9eb70290..2b8f8fd52 100644 +--- a/sound/pci/hda/cs35l41_hda_property.c ++++ b/sound/pci/hda/cs35l41_hda_property.c +@@ -57,6 +57,7 @@ static const struct cs35l41_config cs35l41_config_table[] = { + { "104316D3", SPI, 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 0, 0, 0 }, + { "104316F3", SPI, 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 0, 0, 0 }, + { "104317F3", I2C, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4500, 24 }, ++ { "10431B93", SPI, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 }, + { "10431863", SPI, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 }, + { "104318D3", I2C, 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 0, 0, 0 }, + { "10431C9F", SPI, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 }, +@@ -360,6 +361,7 @@ static const struct cs35l41_prop_model cs35l41_prop_model_table[] = { + { "CSC3551", "104316D3", generic_dsd_config }, + { "CSC3551", "104316F3", generic_dsd_config }, + { "CSC3551", "104317F3", generic_dsd_config }, ++ { "CSC3551", "10431B93", generic_dsd_config }, + { "CSC3551", "10431863", generic_dsd_config }, + { "CSC3551", "104318D3", generic_dsd_config }, + { "CSC3551", "10431C9F", generic_dsd_config }, + +-- +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 @@ -45,26 +103,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) @@ -184,12 +242,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) @@ -226,7 +284,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 @@ -242,188 +300,7 @@ 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 -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 */ |