110 lines
4.1 KiB
Diff
110 lines
4.1 KiB
Diff
|
From 34713cb8d4e13bf9e3b1403cdea9551e0532ec5c 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 2/2] 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 | 53 ++++++++++++++++++++++++++++
|
||
|
1 file changed, 53 insertions(+)
|
||
|
|
||
|
diff --git a/sound/pci/hda/cs35l41_hda_property.c b/sound/pci/hda/cs35l41_hda_property.c
|
||
|
index 673f23257a09..b06e8ca5f4b4 100644
|
||
|
--- a/sound/pci/hda/cs35l41_hda_property.c
|
||
|
+++ b/sound/pci/hda/cs35l41_hda_property.c
|
||
|
@@ -43,6 +43,47 @@ static int lenovo_legion_no_acpi(struct cs35l41_hda *cs35l41, struct device *phy
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
+/*
|
||
|
+ * The CSC3551 is used in almost the entire ASUS 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_spkr_id2(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, "10431463") == 0)
|
||
|
+ reset_gpio = 0;
|
||
|
+ else if (strcmp(cs35l41->acpi_subsystem_id, "10431473") == 0
|
||
|
+ || strcmp(cs35l41->acpi_subsystem_id, "10431483") == 0
|
||
|
+ || strcmp(cs35l41->acpi_subsystem_id, "10431493") == 0) {
|
||
|
+ reset_gpio = 1;
|
||
|
+ }
|
||
|
+ cs35l41->reset_gpio = gpiod_get_index(physdev, NULL, reset_gpio, GPIOD_OUT_HIGH);
|
||
|
+
|
||
|
+ hw_cfg->valid = true;
|
||
|
+
|
||
|
+ return 0;
|
||
|
+}
|
||
|
+
|
||
|
struct cs35l41_prop_model {
|
||
|
const char *hid;
|
||
|
const char *ssid;
|
||
|
@@ -53,6 +94,18 @@ struct cs35l41_prop_model {
|
||
|
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_spkr_id2 }, // ASUS GS650P - i2c
|
||
|
+ { "CSC3551", "10431463", asus_rog_2023_spkr_id2 }, // ASUS GA402X/N - i2c, reset gpio 0
|
||
|
+ { "CSC3551", "10431473", asus_rog_2023_spkr_id2 }, // ASUS GU604V - spi, reset gpio 1
|
||
|
+ { "CSC3551", "10431483", asus_rog_2023_spkr_id2 }, // ASUS GU603V - spi, reset 1, spkr 1
|
||
|
+ { "CSC3551", "10431493", asus_rog_2023_spkr_id2 }, // ASUS GV601V - spi, reset gpio 1
|
||
|
+ { "CSC3551", "10431573", asus_rog_2023_spkr_id2 }, // ASUS GZ301V - spi, reset gpio 0
|
||
|
+ { "CSC3551", "104317F3", asus_rog_2023_spkr_id2 }, // ASUS ROG ALLY - i2c
|
||
|
+ { "CSC3551", "10431B93", asus_rog_2023_spkr_id2 }, // ASUS G614J - spi, reset gpio 0
|
||
|
+ { "CSC3551", "10431CAF", asus_rog_2023_spkr_id2 }, // ASUS G634J - spi, reset gpio 0
|
||
|
+ { "CSC3551", "10431C9F", asus_rog_2023_spkr_id2 }, // ASUS G614JI -spi, reset gpio 0
|
||
|
+ { "CSC3551", "10431D1F", asus_rog_2023_spkr_id2 }, // ASUS G713P - i2c
|
||
|
+ { "CSC3551", "10431F1F", asus_rog_2023_spkr_id2 }, // ASUS H7604JV - spi, reset gpio 0
|
||
|
{}
|
||
|
};
|
||
|
|
||
|
--
|
||
|
2.41.0
|
||
|
|