]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.7-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 Jan 2024 11:25:30 +0000 (12:25 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 Jan 2024 11:25:30 +0000 (12:25 +0100)
added patches:
acpi-resource-add-another-dmi-match-for-the-tongfang-gmxxgxx.patch
alsa-hda-add-driver-properties-for-cs35l41-for-lenovo-legion-slim-7-gen-8-serie.patch
alsa-hda-cs35l41-prevent-firmware-load-if-spi-speed-too-low.patch
alsa-hda-cs35l41-support-additional-dell-models-without-_dsd.patch
alsa-hda-cs35l41-support-more-hp-models-without-_dsd.patch
alsa-hda-realtek-add-quirks-for-dell-models.patch
alsa-hda-realtek-enable-snd_pci_quirk-for-lenovo-legion-slim-7-gen-8-2023-serie.patch
alsa-hda-realtek-fix-mute-and-mic-mute-leds-for-hp-envy-x360-13-ay0xxx.patch
bus-moxtet-add-spi-device-table.patch
bus-moxtet-mark-the-irq-as-shared.patch

queue-6.7/acpi-resource-add-another-dmi-match-for-the-tongfang-gmxxgxx.patch [new file with mode: 0644]
queue-6.7/alsa-hda-add-driver-properties-for-cs35l41-for-lenovo-legion-slim-7-gen-8-serie.patch [new file with mode: 0644]
queue-6.7/alsa-hda-cs35l41-prevent-firmware-load-if-spi-speed-too-low.patch [new file with mode: 0644]
queue-6.7/alsa-hda-cs35l41-support-additional-dell-models-without-_dsd.patch [new file with mode: 0644]
queue-6.7/alsa-hda-cs35l41-support-more-hp-models-without-_dsd.patch [new file with mode: 0644]
queue-6.7/alsa-hda-realtek-add-quirks-for-dell-models.patch [new file with mode: 0644]
queue-6.7/alsa-hda-realtek-enable-snd_pci_quirk-for-lenovo-legion-slim-7-gen-8-2023-serie.patch [new file with mode: 0644]
queue-6.7/alsa-hda-realtek-fix-mute-and-mic-mute-leds-for-hp-envy-x360-13-ay0xxx.patch [new file with mode: 0644]
queue-6.7/bus-moxtet-add-spi-device-table.patch [new file with mode: 0644]
queue-6.7/bus-moxtet-mark-the-irq-as-shared.patch [new file with mode: 0644]
queue-6.7/series

diff --git a/queue-6.7/acpi-resource-add-another-dmi-match-for-the-tongfang-gmxxgxx.patch b/queue-6.7/acpi-resource-add-another-dmi-match-for-the-tongfang-gmxxgxx.patch
new file mode 100644 (file)
index 0000000..14710f4
--- /dev/null
@@ -0,0 +1,41 @@
+From df0cced74159c79e36ce7971f0bf250673296d93 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Sat, 23 Dec 2023 15:57:06 +0100
+Subject: ACPI: resource: Add another DMI match for the TongFang GMxXGxx
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+commit df0cced74159c79e36ce7971f0bf250673296d93 upstream.
+
+The TongFang GMxXGxx, which needs IRQ overriding for the keyboard to work,
+is also sold as the Eluktronics RP-15 which does not use the standard
+TongFang GMxXGxx DMI board_name.
+
+Add an entry for this laptop to the irq1_edge_low_force_override[] DMI
+table to make the internal keyboard functional.
+
+Reported-by: Luis Acuna <ldacuna@gmail.com>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Cc: All applicable <stable@vger.kernel.org>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/acpi/resource.c |    7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/acpi/resource.c
++++ b/drivers/acpi/resource.c
+@@ -511,6 +511,13 @@ static const struct dmi_system_id irq1_e
+               },
+       },
+       {
++              /* TongFang GMxXGxx sold as Eluktronics Inc. RP-15 */
++              .matches = {
++                      DMI_MATCH(DMI_SYS_VENDOR, "Eluktronics Inc."),
++                      DMI_MATCH(DMI_BOARD_NAME, "RP-15"),
++              },
++      },
++      {
+               /* TongFang GM6XGxX/TUXEDO Stellaris 16 Gen5 AMD */
+               .matches = {
+                       DMI_MATCH(DMI_BOARD_NAME, "GM6XGxX"),
diff --git a/queue-6.7/alsa-hda-add-driver-properties-for-cs35l41-for-lenovo-legion-slim-7-gen-8-serie.patch b/queue-6.7/alsa-hda-add-driver-properties-for-cs35l41-for-lenovo-legion-slim-7-gen-8-serie.patch
new file mode 100644 (file)
index 0000000..3135763
--- /dev/null
@@ -0,0 +1,45 @@
+From ba7053b4b4a4ddcf530fa2b897e697004715d086 Mon Sep 17 00:00:00 2001
+From: Dorian Cruveiller <doriancruveiller@gmail.com>
+Date: Sat, 30 Dec 2023 12:43:12 +0100
+Subject: ALSA: hda: Add driver properties for cs35l41 for Lenovo Legion Slim 7 Gen 8 serie
+
+From: Dorian Cruveiller <doriancruveiller@gmail.com>
+
+commit ba7053b4b4a4ddcf530fa2b897e697004715d086 upstream.
+
+Add driver properties on 4 models of this laptop serie since they don't
+have _DSD in the ACPI table
+
+Signed-off-by: Dorian Cruveiller <doriancruveiller@gmail.com>
+Cc: <stable@vger.kernel.org> # v6.7
+Link: https://lore.kernel.org/r/20231230114312.22118-1-doriancruveiller@gmail.com
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ sound/pci/hda/cs35l41_hda_property.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/sound/pci/hda/cs35l41_hda_property.c
++++ b/sound/pci/hda/cs35l41_hda_property.c
+@@ -71,6 +71,10 @@ static const struct cs35l41_config cs35l
+       { "10431F12", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4500, 24 },
+       { "10431F1F", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, -1, 0, 0, 0, 0 },
+       { "10431F62", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 0, 0, 0 },
++      { "17AA38B4", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 0, 0, 0 },
++      { "17AA38B5", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 0, 0, 0 },
++      { "17AA38B6", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 0, 0, 0 },
++      { "17AA38B7", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 0, 0, 0 },
+       {}
+ };
+@@ -379,6 +383,10 @@ static const struct cs35l41_prop_model c
+       { "CSC3551", "10431F12", generic_dsd_config },
+       { "CSC3551", "10431F1F", generic_dsd_config },
+       { "CSC3551", "10431F62", generic_dsd_config },
++      { "CSC3551", "17AA38B4", generic_dsd_config },
++      { "CSC3551", "17AA38B5", generic_dsd_config },
++      { "CSC3551", "17AA38B6", generic_dsd_config },
++      { "CSC3551", "17AA38B7", generic_dsd_config },
+       {}
+ };
diff --git a/queue-6.7/alsa-hda-cs35l41-prevent-firmware-load-if-spi-speed-too-low.patch b/queue-6.7/alsa-hda-cs35l41-prevent-firmware-load-if-spi-speed-too-low.patch
new file mode 100644 (file)
index 0000000..f7baa30
--- /dev/null
@@ -0,0 +1,281 @@
+From d110858a6925827609d11db8513d76750483ec06 Mon Sep 17 00:00:00 2001
+From: Stefan Binding <sbinding@opensource.cirrus.com>
+Date: Thu, 21 Dec 2023 13:25:17 +0000
+Subject: ALSA: hda: cs35l41: Prevent firmware load if SPI speed too low
+
+From: Stefan Binding <sbinding@opensource.cirrus.com>
+
+commit d110858a6925827609d11db8513d76750483ec06 upstream.
+
+Some laptops without _DSD have the SPI speed set very low in the BIOS.
+Since the SPI controller uses this speed as its max speed, the SPI
+transactions are very slow. Firmware download writes to many registers,
+and if the SPI speed is too slow, it can take a long time to download.
+For this reason, disable firmware loading if the maximum SPI speed is
+too low. Without Firmware, audio playback will work, but the volume
+will be low to ensure safe operation of the CS35L41.
+
+Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com>
+Cc: <stable@vger.kernel.org> # v6.7+
+Link: https://lore.kernel.org/r/20231221132518.3213-3-sbinding@opensource.cirrus.com
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ sound/pci/hda/cs35l41_hda.c          |   25 ++++++++++-
+ sound/pci/hda/cs35l41_hda.h          |   12 +++++
+ sound/pci/hda/cs35l41_hda_i2c.c      |    2 
+ sound/pci/hda/cs35l41_hda_property.c |   74 ++++++++++++++++-------------------
+ sound/pci/hda/cs35l41_hda_spi.c      |    2 
+ 5 files changed, 70 insertions(+), 45 deletions(-)
+
+--- a/sound/pci/hda/cs35l41_hda.c
++++ b/sound/pci/hda/cs35l41_hda.c
+@@ -12,6 +12,7 @@
+ #include <sound/hda_codec.h>
+ #include <sound/soc.h>
+ #include <linux/pm_runtime.h>
++#include <linux/spi/spi.h>
+ #include "hda_local.h"
+ #include "hda_auto_parser.h"
+ #include "hda_jack.h"
+@@ -996,6 +997,11 @@ static int cs35l41_smart_amp(struct cs35
+       __be32 halo_sts;
+       int ret;
++      if (cs35l41->bypass_fw) {
++              dev_warn(cs35l41->dev, "Bypassing Firmware.\n");
++              return 0;
++      }
++
+       ret = cs35l41_init_dsp(cs35l41);
+       if (ret) {
+               dev_warn(cs35l41->dev, "Cannot Initialize Firmware. Error: %d\n", ret);
+@@ -1588,6 +1594,7 @@ static int cs35l41_hda_read_acpi(struct
+       u32 values[HDA_MAX_COMPONENTS];
+       struct acpi_device *adev;
+       struct device *physdev;
++      struct spi_device *spi;
+       const char *sub;
+       char *property;
+       size_t nval;
+@@ -1610,7 +1617,7 @@ static int cs35l41_hda_read_acpi(struct
+       ret = cs35l41_add_dsd_properties(cs35l41, physdev, id, hid);
+       if (!ret) {
+               dev_info(cs35l41->dev, "Using extra _DSD properties, bypassing _DSD in ACPI\n");
+-              goto put_physdev;
++              goto out;
+       }
+       property = "cirrus,dev-index";
+@@ -1701,8 +1708,20 @@ static int cs35l41_hda_read_acpi(struct
+               hw_cfg->bst_type = CS35L41_EXT_BOOST;
+       hw_cfg->valid = true;
++out:
+       put_device(physdev);
++      cs35l41->bypass_fw = false;
++      if (cs35l41->control_bus == SPI) {
++              spi = to_spi_device(cs35l41->dev);
++              if (spi->max_speed_hz < CS35L41_MAX_ACCEPTABLE_SPI_SPEED_HZ) {
++                      dev_warn(cs35l41->dev,
++                               "SPI speed is too slow to support firmware download: %d Hz.\n",
++                               spi->max_speed_hz);
++                      cs35l41->bypass_fw = true;
++              }
++      }
++
+       return 0;
+ err:
+@@ -1711,14 +1730,13 @@ err:
+       hw_cfg->gpio1.valid = false;
+       hw_cfg->gpio2.valid = false;
+       acpi_dev_put(cs35l41->dacpi);
+-put_physdev:
+       put_device(physdev);
+       return ret;
+ }
+ int cs35l41_hda_probe(struct device *dev, const char *device_name, int id, int irq,
+-                    struct regmap *regmap)
++                    struct regmap *regmap, enum control_bus control_bus)
+ {
+       unsigned int regid, reg_revid;
+       struct cs35l41_hda *cs35l41;
+@@ -1737,6 +1755,7 @@ int cs35l41_hda_probe(struct device *dev
+       cs35l41->dev = dev;
+       cs35l41->irq = irq;
+       cs35l41->regmap = regmap;
++      cs35l41->control_bus = control_bus;
+       dev_set_drvdata(dev, cs35l41);
+       ret = cs35l41_hda_read_acpi(cs35l41, device_name, id);
+--- a/sound/pci/hda/cs35l41_hda.h
++++ b/sound/pci/hda/cs35l41_hda.h
+@@ -20,6 +20,8 @@
+ #include <linux/firmware/cirrus/cs_dsp.h>
+ #include <linux/firmware/cirrus/wmfw.h>
++#define CS35L41_MAX_ACCEPTABLE_SPI_SPEED_HZ   1000000
++
+ struct cs35l41_amp_cal_data {
+       u32 calTarget[2];
+       u32 calTime[2];
+@@ -46,6 +48,11 @@ enum cs35l41_hda_gpio_function {
+       CS35l41_SYNC,
+ };
++enum control_bus {
++      I2C,
++      SPI
++};
++
+ struct cs35l41_hda {
+       struct device *dev;
+       struct regmap *regmap;
+@@ -74,6 +81,9 @@ struct cs35l41_hda {
+       struct cs_dsp cs_dsp;
+       struct acpi_device *dacpi;
+       bool mute_override;
++      enum control_bus control_bus;
++      bool bypass_fw;
++
+ };
+ enum halo_state {
+@@ -85,7 +95,7 @@ enum halo_state {
+ extern const struct dev_pm_ops cs35l41_hda_pm_ops;
+ int cs35l41_hda_probe(struct device *dev, const char *device_name, int id, int irq,
+-                    struct regmap *regmap);
++                    struct regmap *regmap, enum control_bus control_bus);
+ void cs35l41_hda_remove(struct device *dev);
+ int cs35l41_get_speaker_id(struct device *dev, int amp_index, int num_amps, int fixed_gpio_id);
+--- a/sound/pci/hda/cs35l41_hda_i2c.c
++++ b/sound/pci/hda/cs35l41_hda_i2c.c
+@@ -30,7 +30,7 @@ static int cs35l41_hda_i2c_probe(struct
+               return -ENODEV;
+       return cs35l41_hda_probe(&clt->dev, device_name, clt->addr, clt->irq,
+-                               devm_regmap_init_i2c(clt, &cs35l41_regmap_i2c));
++                               devm_regmap_init_i2c(clt, &cs35l41_regmap_i2c), I2C);
+ }
+ static void cs35l41_hda_i2c_remove(struct i2c_client *clt)
+--- a/sound/pci/hda/cs35l41_hda_property.c
++++ b/sound/pci/hda/cs35l41_hda_property.c
+@@ -16,10 +16,6 @@
+ struct cs35l41_config {
+       const char *ssid;
+-      enum {
+-              SPI,
+-              I2C
+-      } bus;
+       int num_amps;
+       enum {
+               INTERNAL,
+@@ -35,46 +31,46 @@ struct cs35l41_config {
+ };
+ static const struct cs35l41_config cs35l41_config_table[] = {
+-      { "10280B27", SPI, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
+-      { "10280B28", SPI, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
+-      { "10280BEB", SPI, 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, -1, 0, 0, 0, 0 },
+-      { "10280C4D", I2C, 4, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, CS35L41_LEFT, CS35L41_RIGHT }, 0, 1, -1, 1000, 4500, 24 },
++      { "10280B27", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
++      { "10280B28", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
++      { "10280BEB", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, -1, 0, 0, 0, 0 },
++      { "10280C4D", 4, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, CS35L41_LEFT, CS35L41_RIGHT }, 0, 1, -1, 1000, 4500, 24 },
+ /*
+  * Device 103C89C6 does have _DSD, however it is setup to use the wrong boost type.
+  * We can override the _DSD to correct the boost type here.
+  * Since this laptop has valid ACPI, we do not need to handle cs-gpios, since that already exists
+  * in the ACPI. The Reset GPIO is also valid, so we can use the Reset defined in _DSD.
+  */
+-      { "103C89C6", SPI, 2, INTERNAL, { CS35L41_RIGHT, CS35L41_LEFT, 0, 0 }, -1, -1, -1, 1000, 4500, 24 },
+-      { "104312AF", SPI, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
+-      { "10431433", I2C, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4500, 24 },
+-      { "10431463", I2C, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4500, 24 },
+-      { "10431473", SPI, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, -1, 0, 1000, 4500, 24 },
+-      { "10431483", SPI, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, -1, 0, 1000, 4500, 24 },
+-      { "10431493", SPI, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
+-      { "104314D3", SPI, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
+-      { "104314E3", I2C, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4500, 24 },
+-      { "10431503", I2C, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4500, 24 },
+-      { "10431533", I2C, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4500, 24 },
+-      { "10431573", SPI, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
+-      { "10431663", SPI, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, -1, 0, 1000, 4500, 24 },
+-      { "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 },
+-      { "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 },
+-      { "10431CAF", SPI, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
+-      { "10431CCF", SPI, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
+-      { "10431CDF", SPI, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
+-      { "10431CEF", SPI, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
+-      { "10431D1F", I2C, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4500, 24 },
+-      { "10431DA2", SPI, 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 0, 0, 0 },
+-      { "10431E02", SPI, 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 0, 0, 0 },
+-      { "10431EE2", I2C, 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, -1, -1, 0, 0, 0 },
+-      { "10431F12", I2C, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4500, 24 },
+-      { "10431F1F", SPI, 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, -1, 0, 0, 0, 0 },
+-      { "10431F62", SPI, 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 0, 0, 0 },
++      { "103C89C6", 2, INTERNAL, { CS35L41_RIGHT, CS35L41_LEFT, 0, 0 }, -1, -1, -1, 1000, 4500, 24 },
++      { "104312AF", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
++      { "10431433", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4500, 24 },
++      { "10431463", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4500, 24 },
++      { "10431473", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, -1, 0, 1000, 4500, 24 },
++      { "10431483", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, -1, 0, 1000, 4500, 24 },
++      { "10431493", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
++      { "104314D3", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
++      { "104314E3", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4500, 24 },
++      { "10431503", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4500, 24 },
++      { "10431533", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4500, 24 },
++      { "10431573", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
++      { "10431663", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, -1, 0, 1000, 4500, 24 },
++      { "104316D3", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 0, 0, 0 },
++      { "104316F3", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 0, 0, 0 },
++      { "104317F3", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4500, 24 },
++      { "10431863", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
++      { "104318D3", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 0, 0, 0 },
++      { "10431C9F", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
++      { "10431CAF", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
++      { "10431CCF", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
++      { "10431CDF", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
++      { "10431CEF", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
++      { "10431D1F", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4500, 24 },
++      { "10431DA2", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 0, 0, 0 },
++      { "10431E02", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 0, 0, 0 },
++      { "10431EE2", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, -1, -1, 0, 0, 0 },
++      { "10431F12", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4500, 24 },
++      { "10431F1F", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, -1, 0, 0, 0, 0 },
++      { "10431F62", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 0, 0, 0 },
+       {}
+ };
+@@ -212,7 +208,7 @@ static int generic_dsd_config(struct cs3
+                        "_DSD already exists.\n");
+       }
+-      if (cfg->bus == SPI) {
++      if (cs35l41->control_bus == SPI) {
+               cs35l41->index = id;
+               /*
+--- a/sound/pci/hda/cs35l41_hda_spi.c
++++ b/sound/pci/hda/cs35l41_hda_spi.c
+@@ -26,7 +26,7 @@ static int cs35l41_hda_spi_probe(struct
+               return -ENODEV;
+       return cs35l41_hda_probe(&spi->dev, device_name, spi_get_chipselect(spi, 0), spi->irq,
+-                               devm_regmap_init_spi(spi, &cs35l41_regmap_spi));
++                               devm_regmap_init_spi(spi, &cs35l41_regmap_spi), SPI);
+ }
+ static void cs35l41_hda_spi_remove(struct spi_device *spi)
diff --git a/queue-6.7/alsa-hda-cs35l41-support-additional-dell-models-without-_dsd.patch b/queue-6.7/alsa-hda-cs35l41-support-additional-dell-models-without-_dsd.patch
new file mode 100644 (file)
index 0000000..23ea62d
--- /dev/null
@@ -0,0 +1,44 @@
+From ee694e7db47e1af00ffb29f569904a9ed576868f Mon Sep 17 00:00:00 2001
+From: Stefan Binding <sbinding@opensource.cirrus.com>
+Date: Thu, 21 Dec 2023 13:25:16 +0000
+Subject: ALSA: hda: cs35l41: Support additional Dell models without _DSD
+
+From: Stefan Binding <sbinding@opensource.cirrus.com>
+
+commit ee694e7db47e1af00ffb29f569904a9ed576868f upstream.
+
+Add new model entries into configuration table.
+
+Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com>
+Cc: <stable@vger.kernel.org> # v6.7+
+Link: https://lore.kernel.org/r/20231221132518.3213-2-sbinding@opensource.cirrus.com
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ sound/pci/hda/cs35l41_hda_property.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/sound/pci/hda/cs35l41_hda_property.c
++++ b/sound/pci/hda/cs35l41_hda_property.c
+@@ -35,6 +35,10 @@ struct cs35l41_config {
+ };
+ static const struct cs35l41_config cs35l41_config_table[] = {
++      { "10280B27", SPI, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
++      { "10280B28", SPI, 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
++      { "10280BEB", SPI, 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, -1, 0, 0, 0, 0 },
++      { "10280C4D", I2C, 4, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, CS35L41_LEFT, CS35L41_RIGHT }, 0, 1, -1, 1000, 4500, 24 },
+ /*
+  * Device 103C89C6 does have _DSD, however it is setup to use the wrong boost type.
+  * We can override the _DSD to correct the boost type here.
+@@ -345,6 +349,10 @@ struct cs35l41_prop_model {
+ static const struct cs35l41_prop_model cs35l41_prop_model_table[] = {
+       { "CLSA0100", NULL, lenovo_legion_no_acpi },
+       { "CLSA0101", NULL, lenovo_legion_no_acpi },
++      { "CSC3551", "10280B27", generic_dsd_config },
++      { "CSC3551", "10280B28", generic_dsd_config },
++      { "CSC3551", "10280BEB", generic_dsd_config },
++      { "CSC3551", "10280C4D", generic_dsd_config },
+       { "CSC3551", "103C89C6", generic_dsd_config },
+       { "CSC3551", "104312AF", generic_dsd_config },
+       { "CSC3551", "10431433", generic_dsd_config },
diff --git a/queue-6.7/alsa-hda-cs35l41-support-more-hp-models-without-_dsd.patch b/queue-6.7/alsa-hda-cs35l41-support-more-hp-models-without-_dsd.patch
new file mode 100644 (file)
index 0000000..cfc25fc
--- /dev/null
@@ -0,0 +1,85 @@
+From 7d65d70161ef75a3991480c91668ac11acedf211 Mon Sep 17 00:00:00 2001
+From: Lorenz Brun <lorenz@brun.one>
+Date: Tue, 2 Jan 2024 22:48:20 +0100
+Subject: ALSA: hda: cs35l41: Support more HP models without _DSD
+
+From: Lorenz Brun <lorenz@brun.one>
+
+commit 7d65d70161ef75a3991480c91668ac11acedf211 upstream.
+
+This adds overrides for a series of notebooks using a common config
+taken from HP's proprietary Windows driver.
+
+This has been tested on a HP 15-ey0xxxx device (subsystem 103C8A31)
+together with another Realtek quirk and the calibration files from the
+proprietary driver.
+
+Signed-off-by: Lorenz Brun <lorenz@brun.one>
+Cc: <stable@vger.kernel.org> # v6.7
+Link: https://lore.kernel.org/r/20240102214821.3394810-1-lorenz@brun.one
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ sound/pci/hda/cs35l41_hda_property.c |   44 +++++++++++++++++++++++++++++++++++
+ 1 file changed, 44 insertions(+)
+
+--- a/sound/pci/hda/cs35l41_hda_property.c
++++ b/sound/pci/hda/cs35l41_hda_property.c
+@@ -42,6 +42,28 @@ static const struct cs35l41_config cs35l
+  * in the ACPI. The Reset GPIO is also valid, so we can use the Reset defined in _DSD.
+  */
+       { "103C89C6", 2, INTERNAL, { CS35L41_RIGHT, CS35L41_LEFT, 0, 0 }, -1, -1, -1, 1000, 4500, 24 },
++      { "103C8A28", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8A29", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8A2A", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8A2B", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8A2C", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8A2D", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8A2E", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8A30", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8A31", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8BB3", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8BB4", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8BDF", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8BE0", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8BE1", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8BE2", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8BE9", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8BDD", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8BDE", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8BE3", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8BE5", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8BE6", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
++      { "103C8B3A", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4100, 24 },
+       { "104312AF", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 1, 2, 0, 1000, 4500, 24 },
+       { "10431433", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4500, 24 },
+       { "10431463", 2, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 1000, 4500, 24 },
+@@ -354,6 +376,28 @@ static const struct cs35l41_prop_model c
+       { "CSC3551", "10280BEB", generic_dsd_config },
+       { "CSC3551", "10280C4D", generic_dsd_config },
+       { "CSC3551", "103C89C6", generic_dsd_config },
++      { "CSC3551", "103C8A28", generic_dsd_config },
++      { "CSC3551", "103C8A29", generic_dsd_config },
++      { "CSC3551", "103C8A2A", generic_dsd_config },
++      { "CSC3551", "103C8A2B", generic_dsd_config },
++      { "CSC3551", "103C8A2C", generic_dsd_config },
++      { "CSC3551", "103C8A2D", generic_dsd_config },
++      { "CSC3551", "103C8A2E", generic_dsd_config },
++      { "CSC3551", "103C8A30", generic_dsd_config },
++      { "CSC3551", "103C8A31", generic_dsd_config },
++      { "CSC3551", "103C8BB3", generic_dsd_config },
++      { "CSC3551", "103C8BB4", generic_dsd_config },
++      { "CSC3551", "103C8BDF", generic_dsd_config },
++      { "CSC3551", "103C8BE0", generic_dsd_config },
++      { "CSC3551", "103C8BE1", generic_dsd_config },
++      { "CSC3551", "103C8BE2", generic_dsd_config },
++      { "CSC3551", "103C8BE9", generic_dsd_config },
++      { "CSC3551", "103C8BDD", generic_dsd_config },
++      { "CSC3551", "103C8BDE", generic_dsd_config },
++      { "CSC3551", "103C8BE3", generic_dsd_config },
++      { "CSC3551", "103C8BE5", generic_dsd_config },
++      { "CSC3551", "103C8BE6", generic_dsd_config },
++      { "CSC3551", "103C8B3A", generic_dsd_config },
+       { "CSC3551", "104312AF", generic_dsd_config },
+       { "CSC3551", "10431433", generic_dsd_config },
+       { "CSC3551", "10431463", generic_dsd_config },
diff --git a/queue-6.7/alsa-hda-realtek-add-quirks-for-dell-models.patch b/queue-6.7/alsa-hda-realtek-add-quirks-for-dell-models.patch
new file mode 100644 (file)
index 0000000..71305ab
--- /dev/null
@@ -0,0 +1,78 @@
+From 423206604b28174698d77bf5ea81365cdd6c0f77 Mon Sep 17 00:00:00 2001
+From: Stefan Binding <sbinding@opensource.cirrus.com>
+Date: Thu, 21 Dec 2023 13:25:18 +0000
+Subject: ALSA: hda/realtek: Add quirks for Dell models
+
+From: Stefan Binding <sbinding@opensource.cirrus.com>
+
+commit 423206604b28174698d77bf5ea81365cdd6c0f77 upstream.
+
+These models use 2 or 4 CS35L41 amps with HDA using SPI and I2C.
+Models use internal and external boost.
+All models require DSD support to be added inside
+cs35l41_hda_property.c
+
+Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com>
+Cc: <stable@vger.kernel.org> # v6.7+
+Link: https://lore.kernel.org/r/20231221132518.3213-4-sbinding@opensource.cirrus.com
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ sound/pci/hda/patch_realtek.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
+index c3a756528886..19040887ff67 100644
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -6956,6 +6956,11 @@ static void cs35l41_fixup_i2c_two(struct hda_codec *cdc, const struct hda_fixup
+       cs35l41_generic_fixup(cdc, action, "i2c", "CSC3551", 2);
+ }
++static void cs35l41_fixup_i2c_four(struct hda_codec *cdc, const struct hda_fixup *fix, int action)
++{
++      cs35l41_generic_fixup(cdc, action, "i2c", "CSC3551", 4);
++}
++
+ static void cs35l41_fixup_spi_two(struct hda_codec *codec, const struct hda_fixup *fix, int action)
+ {
+       cs35l41_generic_fixup(codec, action, "spi", "CSC3551", 2);
+@@ -7441,6 +7446,7 @@ enum {
+       ALC287_FIXUP_LEGION_16ACHG6,
+       ALC287_FIXUP_CS35L41_I2C_2,
+       ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED,
++      ALC287_FIXUP_CS35L41_I2C_4,
+       ALC245_FIXUP_CS35L41_SPI_2,
+       ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED,
+       ALC245_FIXUP_CS35L41_SPI_4,
+@@ -9427,6 +9433,10 @@ static const struct hda_fixup alc269_fixups[] = {
+               .chained = true,
+               .chain_id = ALC285_FIXUP_HP_MUTE_LED,
+       },
++      [ALC287_FIXUP_CS35L41_I2C_4] = {
++              .type = HDA_FIXUP_FUNC,
++              .v.func = cs35l41_fixup_i2c_four,
++      },
+       [ALC245_FIXUP_CS35L41_SPI_2] = {
+               .type = HDA_FIXUP_FUNC,
+               .v.func = cs35l41_fixup_spi_two,
+@@ -9703,6 +9713,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
+       SND_PCI_QUIRK(0x1028, 0x0a9e, "Dell Latitude 5430", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE),
+       SND_PCI_QUIRK(0x1028, 0x0b19, "Dell XPS 15 9520", ALC289_FIXUP_DUAL_SPK),
+       SND_PCI_QUIRK(0x1028, 0x0b1a, "Dell Precision 5570", ALC289_FIXUP_DUAL_SPK),
++      SND_PCI_QUIRK(0x1028, 0x0b27, "Dell", ALC245_FIXUP_CS35L41_SPI_2),
++      SND_PCI_QUIRK(0x1028, 0x0b28, "Dell", ALC245_FIXUP_CS35L41_SPI_2),
+       SND_PCI_QUIRK(0x1028, 0x0b37, "Dell Inspiron 16 Plus 7620 2-in-1", ALC295_FIXUP_DELL_INSPIRON_TOP_SPEAKERS),
+       SND_PCI_QUIRK(0x1028, 0x0b71, "Dell Inspiron 16 Plus 7620", ALC295_FIXUP_DELL_INSPIRON_TOP_SPEAKERS),
+       SND_PCI_QUIRK(0x1028, 0x0beb, "Dell XPS 15 9530 (2023)", ALC289_FIXUP_DELL_CS35L41_SPI_2),
+@@ -9713,6 +9725,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
+       SND_PCI_QUIRK(0x1028, 0x0c1c, "Dell Precision 3540", ALC236_FIXUP_DELL_DUAL_CODECS),
+       SND_PCI_QUIRK(0x1028, 0x0c1d, "Dell Precision 3440", ALC236_FIXUP_DELL_DUAL_CODECS),
+       SND_PCI_QUIRK(0x1028, 0x0c1e, "Dell Precision 3540", ALC236_FIXUP_DELL_DUAL_CODECS),
++      SND_PCI_QUIRK(0x1028, 0x0c4d, "Dell", ALC287_FIXUP_CS35L41_I2C_4),
+       SND_PCI_QUIRK(0x1028, 0x0cbd, "Dell Oasis 13 CS MTL-U", ALC289_FIXUP_DELL_CS35L41_SPI_2),
+       SND_PCI_QUIRK(0x1028, 0x0cbe, "Dell Oasis 13 2-IN-1 MTL-U", ALC289_FIXUP_DELL_CS35L41_SPI_2),
+       SND_PCI_QUIRK(0x1028, 0x0cbf, "Dell Oasis 13 Low Weight MTU-L", ALC289_FIXUP_DELL_CS35L41_SPI_2),
+-- 
+2.43.0
+
diff --git a/queue-6.7/alsa-hda-realtek-enable-snd_pci_quirk-for-lenovo-legion-slim-7-gen-8-2023-serie.patch b/queue-6.7/alsa-hda-realtek-enable-snd_pci_quirk-for-lenovo-legion-slim-7-gen-8-2023-serie.patch
new file mode 100644 (file)
index 0000000..9501470
--- /dev/null
@@ -0,0 +1,41 @@
+From 99af5b11c57d33c32d761797f6308b40936c22ed Mon Sep 17 00:00:00 2001
+From: Dorian Cruveiller <doriancruveiller@gmail.com>
+Date: Sat, 30 Dec 2023 12:40:01 +0100
+Subject: ALSA: hda/realtek: enable SND_PCI_QUIRK for Lenovo Legion Slim 7 Gen 8 (2023) serie
+
+From: Dorian Cruveiller <doriancruveiller@gmail.com>
+
+commit 99af5b11c57d33c32d761797f6308b40936c22ed upstream.
+
+Link up the realtek audio chip to the cirrus cs35l41 sound amplifier chip
+on 4 models of the Lenovo legion slim 7 gen 8 (2023). These models are
+16IRH8 (2 differents subsystem id) and 16APH8 (2 differents subsystem ids).
+
+Subsystem ids list:
+ - 17AA38B4
+ - 17AA38B5
+ - 17AA38B6
+ - 17AA38B7
+
+Signed-off-by: Dorian Cruveiller <doriancruveiller@gmail.com>
+Cc: <stable@vger.kernel.org> # v6.7
+Link: https://lore.kernel.org/r/20231230114001.19855-1-doriancruveiller@gmail.com
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ sound/pci/hda/patch_realtek.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -10242,6 +10242,10 @@ static const struct snd_pci_quirk alc269
+       SND_PCI_QUIRK(0x17aa, 0x3886, "Y780 VECO DUAL", ALC287_FIXUP_TAS2781_I2C),
+       SND_PCI_QUIRK(0x17aa, 0x38a7, "Y780P AMD YG dual", ALC287_FIXUP_TAS2781_I2C),
+       SND_PCI_QUIRK(0x17aa, 0x38a8, "Y780P AMD VECO dual", ALC287_FIXUP_TAS2781_I2C),
++      SND_PCI_QUIRK(0x17aa, 0x38b4, "Legion Slim 7 16IRH8", ALC287_FIXUP_CS35L41_I2C_2),
++      SND_PCI_QUIRK(0x17aa, 0x38b5, "Legion Slim 7 16IRH8", ALC287_FIXUP_CS35L41_I2C_2),
++      SND_PCI_QUIRK(0x17aa, 0x38b6, "Legion Slim 7 16APH8", ALC287_FIXUP_CS35L41_I2C_2),
++      SND_PCI_QUIRK(0x17aa, 0x38b7, "Legion Slim 7 16APH8", ALC287_FIXUP_CS35L41_I2C_2),
+       SND_PCI_QUIRK(0x17aa, 0x38ba, "Yoga S780-14.5 Air AMD quad YC", ALC287_FIXUP_TAS2781_I2C),
+       SND_PCI_QUIRK(0x17aa, 0x38bb, "Yoga S780-14.5 Air AMD quad AAC", ALC287_FIXUP_TAS2781_I2C),
+       SND_PCI_QUIRK(0x17aa, 0x38be, "Yoga S980-14.5 proX YC Dual", ALC287_FIXUP_TAS2781_I2C),
diff --git a/queue-6.7/alsa-hda-realtek-fix-mute-and-mic-mute-leds-for-hp-envy-x360-13-ay0xxx.patch b/queue-6.7/alsa-hda-realtek-fix-mute-and-mic-mute-leds-for-hp-envy-x360-13-ay0xxx.patch
new file mode 100644 (file)
index 0000000..aafd4ad
--- /dev/null
@@ -0,0 +1,34 @@
+From 6b3d14b7f9b1acaf7303d8499836bf78ee9c470c Mon Sep 17 00:00:00 2001
+From: Tom Jason Schwanke <tom@catboys.cloud>
+Date: Mon, 8 Jan 2024 16:15:21 +0100
+Subject: ALSA: hda/realtek: Fix mute and mic-mute LEDs for HP Envy X360 13-ay0xxx
+
+From: Tom Jason Schwanke <tom@catboys.cloud>
+
+commit 6b3d14b7f9b1acaf7303d8499836bf78ee9c470c upstream.
+
+This enables the mute and mic-mute LEDs on the HP Envy X360 13-ay0xxx
+convertibles.
+The quirk 'ALC245_FIXUP_HP_X360_MUTE_LEDS' already exists and is now
+enabled for this device.
+
+Link: https://bugzilla.kernel.org/show_bug.cgi?id=216197
+Signed-off-by: Tom Jason Schwanke <tom@catboys.cloud>
+Cc: <stable@vger.kernel.org>
+Link: https://lore.kernel.org/r/651b26e9-e86b-45dd-aa90-3e43d6b99823@catboys.cloud
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ sound/pci/hda/patch_realtek.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -9829,6 +9829,7 @@ static const struct snd_pci_quirk alc269
+       SND_PCI_QUIRK(0x103c, 0x8735, "HP ProBook 435 G7", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
+       SND_PCI_QUIRK(0x103c, 0x8736, "HP", ALC285_FIXUP_HP_GPIO_AMP_INIT),
+       SND_PCI_QUIRK(0x103c, 0x8760, "HP", ALC285_FIXUP_HP_MUTE_LED),
++      SND_PCI_QUIRK(0x103c, 0x876e, "HP ENVY x360 Convertible 13-ay0xxx", ALC245_FIXUP_HP_X360_MUTE_LEDS),
+       SND_PCI_QUIRK(0x103c, 0x877a, "HP", ALC285_FIXUP_HP_MUTE_LED),
+       SND_PCI_QUIRK(0x103c, 0x877d, "HP", ALC236_FIXUP_HP_MUTE_LED),
+       SND_PCI_QUIRK(0x103c, 0x8780, "HP ZBook Fury 17 G7 Mobile Workstation",
diff --git a/queue-6.7/bus-moxtet-add-spi-device-table.patch b/queue-6.7/bus-moxtet-add-spi-device-table.patch
new file mode 100644 (file)
index 0000000..1972b2d
--- /dev/null
@@ -0,0 +1,47 @@
+From aaafe88d5500ba18b33be72458439367ef878788 Mon Sep 17 00:00:00 2001
+From: Sjoerd Simons <sjoerd@collabora.com>
+Date: Tue, 28 Nov 2023 22:35:05 +0100
+Subject: bus: moxtet: Add spi device table
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Sjoerd Simons <sjoerd@collabora.com>
+
+commit aaafe88d5500ba18b33be72458439367ef878788 upstream.
+
+The moxtet module fails to auto-load on. Add a SPI id table to
+allow it to do so.
+
+Signed-off-by: Sjoerd Simons <sjoerd@collabora.com>
+Cc:  <stable@vger.kernel.org>
+Reviewed-by: Marek BehĂșn <kabel@kernel.org>
+Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/bus/moxtet.c |    7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/bus/moxtet.c
++++ b/drivers/bus/moxtet.c
+@@ -830,6 +830,12 @@ static void moxtet_remove(struct spi_dev
+       mutex_destroy(&moxtet->lock);
+ }
++static const struct spi_device_id moxtet_spi_ids[] = {
++      { "moxtet" },
++      { },
++};
++MODULE_DEVICE_TABLE(spi, moxtet_spi_ids);
++
+ static const struct of_device_id moxtet_dt_ids[] = {
+       { .compatible = "cznic,moxtet" },
+       {},
+@@ -841,6 +847,7 @@ static struct spi_driver moxtet_spi_driv
+               .name           = "moxtet",
+               .of_match_table = moxtet_dt_ids,
+       },
++      .id_table       = moxtet_spi_ids,
+       .probe          = moxtet_probe,
+       .remove         = moxtet_remove,
+ };
diff --git a/queue-6.7/bus-moxtet-mark-the-irq-as-shared.patch b/queue-6.7/bus-moxtet-mark-the-irq-as-shared.patch
new file mode 100644 (file)
index 0000000..4418ec1
--- /dev/null
@@ -0,0 +1,38 @@
+From e7830f5a83e96d8cb8efc0412902a03008f8fbe3 Mon Sep 17 00:00:00 2001
+From: Sjoerd Simons <sjoerd@collabora.com>
+Date: Tue, 28 Nov 2023 22:35:04 +0100
+Subject: bus: moxtet: Mark the irq as shared
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Sjoerd Simons <sjoerd@collabora.com>
+
+commit e7830f5a83e96d8cb8efc0412902a03008f8fbe3 upstream.
+
+The Turris Mox shares the moxtet IRQ with various devices on the board,
+so mark the IRQ as shared in the driver as well.
+
+Without this loading the module will fail with:
+  genirq: Flags mismatch irq 40. 00002002 (moxtet) vs. 00002080 (mcp7940x)
+
+Signed-off-by: Sjoerd Simons <sjoerd@collabora.com>
+Cc:  <stable@vger.kernel.org> # v6.2+
+Reviewed-by: Marek BehĂșn <kabel@kernel.org>
+Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/bus/moxtet.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/bus/moxtet.c
++++ b/drivers/bus/moxtet.c
+@@ -755,7 +755,7 @@ static int moxtet_irq_setup(struct moxte
+       moxtet->irq.masked = ~0;
+       ret = request_threaded_irq(moxtet->dev_irq, NULL, moxtet_irq_thread_fn,
+-                                 IRQF_ONESHOT, "moxtet", moxtet);
++                                 IRQF_SHARED | IRQF_ONESHOT, "moxtet", moxtet);
+       if (ret < 0)
+               goto err_free;
index 4c6ad7e19231c1c256757f6c80c68902ebcc7133..6a8ab146867ad65f0636d8be6d9b8edb8f66b503 100644 (file)
@@ -1 +1,11 @@
 f2fs-explicitly-null-terminate-the-xattr-list.patch
+alsa-hda-realtek-add-quirks-for-dell-models.patch
+alsa-hda-cs35l41-support-additional-dell-models-without-_dsd.patch
+alsa-hda-cs35l41-prevent-firmware-load-if-spi-speed-too-low.patch
+alsa-hda-add-driver-properties-for-cs35l41-for-lenovo-legion-slim-7-gen-8-serie.patch
+alsa-hda-realtek-enable-snd_pci_quirk-for-lenovo-legion-slim-7-gen-8-2023-serie.patch
+alsa-hda-realtek-fix-mute-and-mic-mute-leds-for-hp-envy-x360-13-ay0xxx.patch
+alsa-hda-cs35l41-support-more-hp-models-without-_dsd.patch
+acpi-resource-add-another-dmi-match-for-the-tongfang-gmxxgxx.patch
+bus-moxtet-mark-the-irq-as-shared.patch
+bus-moxtet-add-spi-device-table.patch