mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
sound fixes for 7.3-rc6
A fair amount of small fixes, which became much larger as a pile of
pending homeworks during my vacation in the last weeks.
The majority of changes are device-specific quirks and ASoC updates,
along with a few ALSA core fixes and USB-audio hardening as well as a
few regression fixes.
ALSA Core:
- Serialize ALSA sequencer compat port-info ioctls
HD-audio:
- Fix ALC235 codec headset handling
- Fix regression on Tegra194 controller support
- Quirks / fixes for Lenovo, ASUS, Acer, Dell, Higole, HP, and IPASON
laptops
USB-audio:
- Hardening for line6 and ua101 drivers to deal with malformed packets
- Fix input device leak on probe error in caiaq driver
- Apply quirks generically for Audient and Behringer devices
- Quirks for ASUS SupremeFX Hi-Fi, HiBy FC4 (native DSD), and MSI MAG
B850M MORTAR WIFI
ASoC:
- Runtime PM fixes for SDCA class function driver
- Fix uninitialized stream configs in RT1017 and MAX98363 SDW codecs
- AMD ACP SoundWire support for ASUS and Lenovo models
- Quirks for Intel machines (Lenovo Yoga Slim 7, Chuwi Hi8)
- Qualcomm LPASS fixes for playback constraints and WSA macro volume
- Codec / platform fixes for rt274/rt286, cs42l43, wm8903, Tegra ASRC
Misc:
- Regression fix for silent playback on Creative Titanium HD
- Error handling fix at probe via auto-cleanup in ice1712
-----BEGIN PGP SIGNATURE-----
iQJCBAABCAAsFiEEIXTw5fNLNI7mMiVaLtJE4w1nLE8FAmq/qz0OHHRpd2FpQHN1
c2UuZGUACgkQLtJE4w1nLE88Qw/+MkSuwXjKwYysSqMUZvtMbwZr3MCAqBXtiw3K
xLAQU8CPkEFUFbTfBAhMWcngEbnzwWUQoZjBn8zsibFW3Hv8Pca7kgN3IrT7dDsU
HBUKVL6OC5EYq3he3LZ7I9p0XEgawJ/t+SbD1gy7VQrdfpeebv9bkTkeAlAL8nUL
/TulprOBgJ3C+8WZmzn28SFAS+mTTmFGU8x/VlRiJIW9PrWnUIUR/LfsQR1z+ZWf
cSJSSZk6Vw3TqYjRM7t8rDD1kfBZZdEWU5xzXww0t6sk8IY0ZneuRemB4Iq2fzTO
0kj2RzV8gao2PA/lPzNKbRR7WHdD5UsgZcl/jCYw+I+ZTfeOT1aGRBDqrJnyysiU
WOK5M94HyNzh/xtss+am7N86eHU3F7yGOyw4cInEM2iZygI1i4z4AXNvHTthgikx
CsefCtHCSCMyivKI4krhLlzKg/m6D/FCNSRWr+F2ot2nTJUZ0ZikWZTqF+2OsPRA
aPC6JnzB+Ko5PPd3ESnuWC+eSOJOzzhQoselIdadZkWGJ3chqMj6XLB6Og0KBInA
HGgISixQK+BN8viFUhaTx0WVzijCnBMV1+ajNSnb+Rhl+TE47EHbn60VhnYb/arA
AQjcJR2h73FrZYsylSo9bCZD2LfeypCh5xiJ4Kh/veVNWdc+Jb4GBmo4vIaAYMfZ
aurWW2c=
=jPeb
-----END PGP SIGNATURE-----
Merge tag 'sound-7.3-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai:
"A fair amount of small fixes, which became much larger as a pile of
pending homework during my vacation in the last weeks.
The majority of changes are device-specific quirks and ASoC updates,
along with a few ALSA core fixes and USB-audio hardening as well as a
few regression fixes.
ALSA Core:
- Serialize ALSA sequencer compat port-info ioctls
HD-audio:
- Fix ALC235 codec headset handling
- Fix regression on Tegra194 controller support
- Quirks / fixes for Lenovo, ASUS, Acer, Dell, Higole, HP, and IPASON
laptops
USB-audio:
- Hardening for line6 and ua101 drivers to deal with malformed
packets
- Fix input device leak on probe error in caiaq driver
- Apply quirks generically for Audient and Behringer devices
- Quirks for ASUS SupremeFX Hi-Fi, HiBy FC4 (native DSD), and MSI MAG
B850M MORTAR WIFI
ASoC:
- Runtime PM fixes for SDCA class function driver
- Fix uninitialized stream configs in RT1017 and MAX98363 SDW codecs
- AMD ACP SoundWire support for ASUS and Lenovo models
- Quirks for Intel machines (Lenovo Yoga Slim 7, Chuwi Hi8)
- Qualcomm LPASS fixes for playback constraints and WSA macro volume
- Codec / platform fixes for rt274/rt286, cs42l43, wm8903, Tegra ASRC
Misc:
- Regression fix for silent playback on Creative Titanium HD
- Error handling fix at probe via auto-cleanup in ice1712"
* tag 'sound-7.3-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (53 commits)
spi: cs42l43: Workaround for wrong speaker ID on Dell XPS 13 DX13260
ALSA: ice1712: Fix the error handling via auto-cleanup at probe
ALSA: core: Define auto-cleanup for snd_card_free()
ALSA: hda/realtek: Add ALC235 support for headset mode
ALSA: hda/realtek: Add micmute LED quirk for Acer Swift SFG16-72
ALSA: hda/realtek: Fix mute and micmute LEDs on HP ENVY x360 15-ey0xxx
ALSA: hda/realtek: Add mute LED quirk for HP Pavilion 14-dv1001TU
ALSA: ctxfi: Fix silent playback on Titanium HD (SB1270)
ALSA: usb-audio: Apply IGNORE_CTL_ERROR quirk to all Audient devices
ALSA: usb-audio: Apply boot quirk for Behringer models generically
ASoC: codecs: lpass-wsa-macro: rewrite the interpolator volume after enabling clocks
ALSA: hda/realtek: Fix speakers on ASUS PM3406CHA
ALSA: hda/realtek: Add quirk for HP Pavilion AiO 24 speaker
ALSA: hda/realtek: Add mute LED quirk for HP Laptop 15-fd2xxx
ASoC: amd: acp-config: Add ACP70 DMI quirk for ASUS UM5406GA
ALSA: hda/realtek: Add mute LED quirks for HP Pavilion 15-eh3174nw and HP Laptop 15-dw1xxx
ASoC: Intel: Add quirk to block match table for Lenovo Yoga Slim 7
ALSA: hda/realtek: Add mute LED quirk for HP Victus 15-fb2xxx
ALSA: hda/realtek: Add quirk for Acer Nitro AN515-45
ALSA: hda/realtek: Add quirk for Lenovo ThinkBook G8+
...
This commit is contained in:
commit
5d144c294a
|
|
@ -11,6 +11,7 @@
|
|||
#include <linux/bitfield.h>
|
||||
#include <linux/cleanup.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
|
|
@ -215,12 +216,108 @@ static size_t cs42l43_spi_max_length(struct spi_device *spi)
|
|||
return CS42L43_SPI_MAX_LENGTH;
|
||||
}
|
||||
|
||||
/*
|
||||
* Workaround needed for two speaker ID pins in one ACPI GpioIo() but
|
||||
* the Linux-specific _DSD property only contains one pin.
|
||||
* Create a temporary acpi_gpio_mapping pointing at both pins.
|
||||
*/
|
||||
static const struct acpi_gpio_params cs42l43_2bit_speaker_id_from_one_gpioio_params[] = {
|
||||
[0] = {
|
||||
.crs_entry_index = 0,
|
||||
.line_index = 0,
|
||||
},
|
||||
[1] = {
|
||||
.crs_entry_index = 0,
|
||||
.line_index = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct acpi_gpio_mapping cs42l43_2bit_speaker_id_from_one_gpioio_mapping[] = {
|
||||
{
|
||||
.name = "spk-id-quirk-gpios",
|
||||
.data = cs42l43_2bit_speaker_id_from_one_gpioio_params,
|
||||
.size = ARRAY_SIZE(cs42l43_2bit_speaker_id_from_one_gpioio_params),
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static int cs42l43_get_2bit_speaker_id_from_one_gpioio(struct cs42l43_spi *priv, int *result)
|
||||
{
|
||||
struct fwnode_reference_args args;
|
||||
struct acpi_device *adev;
|
||||
struct gpio_desc *desc;
|
||||
u32 spkid = 0;
|
||||
int i, ret;
|
||||
|
||||
/* Use the _DSD property to get the node containing the GpioIo() */
|
||||
ret = fwnode_property_get_reference_args(dev_fwnode(priv->dev), "spk-id-gpios",
|
||||
NULL, 3, 0, &args);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
struct fwnode_handle *fwnode __free(fwnode_handle) = args.fwnode;
|
||||
|
||||
/* An acpi_gpio_mapping must be added to the node that contains the GpioIo() */
|
||||
adev = to_acpi_device_node(fwnode);
|
||||
if (!adev)
|
||||
return -EINVAL;
|
||||
|
||||
ret = acpi_dev_add_driver_gpios(adev, cs42l43_2bit_speaker_id_from_one_gpioio_mapping);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* gpiod_get_array() can't read from a mapping in a child node */
|
||||
for (i = 0; i < ARRAY_SIZE(cs42l43_2bit_speaker_id_from_one_gpioio_params); i++) {
|
||||
desc = fwnode_gpiod_get_index(fwnode, "spk-id-quirk", i, GPIOD_IN,
|
||||
dev_name(priv->dev));
|
||||
if (IS_ERR(desc)) {
|
||||
ret = PTR_ERR(desc);
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = gpiod_get_value_cansleep(desc);
|
||||
gpiod_put(desc);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
spkid |= (u32)ret << i;
|
||||
}
|
||||
|
||||
dev_dbg(priv->dev, "spk-id-gpios = %u\n", spkid);
|
||||
*result = spkid;
|
||||
ret = 0;
|
||||
out:
|
||||
acpi_dev_remove_driver_gpios(adev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const struct dmi_system_id cs42l43_spk_id_quirks[] = {
|
||||
{
|
||||
.ident = "Dell XPS 13 DX13260",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc"),
|
||||
DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "0E53"),
|
||||
},
|
||||
.driver_data = cs42l43_get_2bit_speaker_id_from_one_gpioio,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static int cs42l43_get_speaker_id_gpios(struct cs42l43_spi *priv, int *result)
|
||||
{
|
||||
const struct dmi_system_id *dmi_id;
|
||||
struct gpio_descs *descs;
|
||||
u32 spkid;
|
||||
int i, ret;
|
||||
|
||||
dmi_id = dmi_first_match(cs42l43_spk_id_quirks);
|
||||
if (dmi_id) {
|
||||
int (*get_speaker_id)(struct cs42l43_spi *priv, int *result) = dmi_id->driver_data;
|
||||
|
||||
return get_speaker_id(priv, result);
|
||||
}
|
||||
|
||||
descs = gpiod_get_array_optional(priv->dev, "spk-id", GPIOD_IN);
|
||||
if (!descs)
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -340,6 +340,15 @@ static inline void snd_card_unref(struct snd_card *card)
|
|||
|
||||
DEFINE_FREE(snd_card_unref, struct snd_card *, if (_T) snd_card_unref(_T))
|
||||
|
||||
/*
|
||||
* For automatic error handling at probe time, assign the card like:
|
||||
* struct snd_card *card __free(snd_card_free) = NULL;
|
||||
* then create and process as usual.
|
||||
* But, don't forget to clear to NULL at successful return for avoiding
|
||||
* the unexpected cleanup!
|
||||
*/
|
||||
DEFINE_FREE(snd_card_free, struct snd_card *, if (_T) snd_card_free(_T))
|
||||
|
||||
#define snd_card_set_dev(card, devptr) ((card)->dev = (devptr))
|
||||
|
||||
/* device.c */
|
||||
|
|
|
|||
|
|
@ -44,7 +44,9 @@ static int snd_seq_call_port_info_ioctl(struct snd_seq_client *client, unsigned
|
|||
return -EFAULT;
|
||||
data->kernel = NULL;
|
||||
|
||||
err = snd_seq_kernel_client_ctl(client->number, cmd, data);
|
||||
scoped_guard(mutex, &client->ioctl_mutex) {
|
||||
err = snd_seq_kernel_client_ctl(client->number, cmd, data);
|
||||
}
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
|
|
|
|||
|
|
@ -4025,6 +4025,7 @@ enum {
|
|||
ALC269_FIXUP_SONY_VAIO,
|
||||
ALC275_FIXUP_SONY_VAIO_GPIO2,
|
||||
ALC269_FIXUP_DELL_M101Z,
|
||||
ALC256_FIXUP_ASUS_PM3406CHA,
|
||||
ALC269_FIXUP_SKU_IGNORE,
|
||||
ALC269_FIXUP_ASUS_G73JW,
|
||||
ALC269_FIXUP_ASUS_N7601ZM_PINS,
|
||||
|
|
@ -4124,6 +4125,7 @@ enum {
|
|||
ALC285_FIXUP_HP_SPECTRE_X360_EB1,
|
||||
ALC285_FIXUP_HP_SPECTRE_X360_DF1,
|
||||
ALC285_FIXUP_HP_ENVY_X360,
|
||||
ALC285_FIXUP_HP_ENVY_13AQ,
|
||||
ALC288_FIXUP_DELL_HEADSET_MODE,
|
||||
ALC288_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
ALC288_FIXUP_DELL_XPS_13,
|
||||
|
|
@ -4199,6 +4201,7 @@ enum {
|
|||
ALC225_FIXUP_DELL_WYSE_AIO_MIC_NO_PRESENCE,
|
||||
ALC225_FIXUP_WYSE_AUTO_MUTE,
|
||||
ALC225_FIXUP_WYSE_DISABLE_MIC_VREF,
|
||||
ALC225_FIXUP_HP_AIO_SPK,
|
||||
ALC286_FIXUP_ACER_AIO_HEADSET_MIC,
|
||||
ALC256_FIXUP_ASUS_HEADSET_MIC,
|
||||
ALC256_FIXUP_ASUS_MIC_NO_PRESENCE,
|
||||
|
|
@ -4384,6 +4387,7 @@ enum {
|
|||
ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN_HEADSET,
|
||||
ALC285_LENOVO_DAC_RENAME,
|
||||
ALC287_FIXUP_YOGA9_SPEAKER2_TO_DAC1,
|
||||
ALC256_FIXUP_IPASON_SMARTBOOK_S1,
|
||||
};
|
||||
|
||||
/* A special fixup for Lenovo C940 and Yoga Duet 7;
|
||||
|
|
@ -4481,6 +4485,14 @@ static const struct hda_fixup alc269_fixups[] = {
|
|||
{}
|
||||
}
|
||||
},
|
||||
[ALC256_FIXUP_ASUS_PM3406CHA] = {
|
||||
.type = HDA_FIXUP_VERBS,
|
||||
.v.verbs = (const struct hda_verb[]) {
|
||||
{ 0x20, AC_VERB_SET_COEF_INDEX, 0x10 },
|
||||
{ 0x20, AC_VERB_SET_PROC_COEF, 0x7f20 },
|
||||
{}
|
||||
}
|
||||
},
|
||||
[ALC269_FIXUP_SKU_IGNORE] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc_fixup_sku_ignore,
|
||||
|
|
@ -5719,6 +5731,14 @@ static const struct hda_fixup alc269_fixups[] = {
|
|||
.chained = true,
|
||||
.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
|
||||
},
|
||||
[ALC225_FIXUP_HP_AIO_SPK] = {
|
||||
.type = HDA_FIXUP_VERBS,
|
||||
.v.verbs = (const struct hda_verb[]) {
|
||||
{ 0x20, AC_VERB_SET_COEF_INDEX, 0x10 },
|
||||
{ 0x20, AC_VERB_SET_PROC_COEF, 0x0220 },
|
||||
{ }
|
||||
},
|
||||
},
|
||||
[ALC286_FIXUP_ACER_AIO_HEADSET_MIC] = {
|
||||
.type = HDA_FIXUP_VERBS,
|
||||
.v.verbs = (const struct hda_verb[]) {
|
||||
|
|
@ -6400,6 +6420,15 @@ static const struct hda_fixup alc269_fixups[] = {
|
|||
.chained = true,
|
||||
.chain_id = ALC285_FIXUP_HP_GPIO_AMP_INIT,
|
||||
},
|
||||
[ALC285_FIXUP_HP_ENVY_13AQ] = {
|
||||
.type = HDA_FIXUP_PINS,
|
||||
.v.pins = (const struct hda_pintbl[]) {
|
||||
{ 0x14, 0x90170150 }, /* front speakers */
|
||||
{ }
|
||||
},
|
||||
.chained = true,
|
||||
.chain_id = ALC285_FIXUP_HP_GPIO_AMP_INIT,
|
||||
},
|
||||
[ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc285_fixup_ideapad_s740_coef,
|
||||
|
|
@ -7087,6 +7116,8 @@ static const struct hda_fixup alc269_fixups[] = {
|
|||
[ALC236_FIXUP_DELL_HP_POP_NOISE] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc285_fixup_invalidate_dacs,
|
||||
.chained = true,
|
||||
.chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
|
||||
},
|
||||
[ALC274_FIXUP_HP_89E9_GPIO] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
|
|
@ -7136,6 +7167,13 @@ static const struct hda_fixup alc269_fixups[] = {
|
|||
.chained = true,
|
||||
.chain_id = ALC287_FIXUP_TXNW2781_I2C,
|
||||
},
|
||||
[ALC256_FIXUP_IPASON_SMARTBOOK_S1] = {
|
||||
.type = HDA_FIXUP_PINS,
|
||||
.v.pins = (const struct hda_pintbl[]) {
|
||||
{ 0x1b, 0x90170110 }, /* the real internal speaker */
|
||||
{ }
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
static const struct hda_quirk alc269_fixup_tbl[] = {
|
||||
|
|
@ -7183,6 +7221,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x1025, 0x142b, "Acer Swift SF314-42", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1025, 0x1430, "Acer TravelMate B311R-31", ALC256_FIXUP_ACER_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1025, 0x1466, "Acer Aspire A515-56", ALC255_FIXUP_ACER_HEADPHONE_AND_MIC),
|
||||
SND_PCI_QUIRK(0x1025, 0x151e, "Acer Nitro AN515-45", ALC2XX_FIXUP_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x1025, 0x1534, "Acer Predator PH315-54", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1025, 0x1539, "Acer Nitro 5 AN515-57", ALC2XX_FIXUP_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x1025, 0x159c, "Acer Nitro 5 AN515-58", ALC287_FIXUP_ACER_MICMUTE_LED),
|
||||
|
|
@ -7196,8 +7235,10 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x1025, 0x1679, "Acer Nitro 16 AN16-41", ALC2XX_FIXUP_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x1025, 0x169a, "Acer Swift SFG16", ALC256_FIXUP_ACER_SFG16_MICMUTE_LED),
|
||||
SND_PCI_QUIRK(0x1025, 0x171e, "Acer Nitro ANV15-51", ALC245_FIXUP_ACER_MICMUTE_LED),
|
||||
SND_PCI_QUIRK(0x1025, 0x172c, "Acer Nitro ANV16-41", ALC2XX_FIXUP_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x1025, 0x1731, "Acer Predator PHN16-72", ALC2XX_FIXUP_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x1025, 0x173a, "Acer Swift SFG14-73", ALC245_FIXUP_ACER_MICMUTE_LED),
|
||||
SND_PCI_QUIRK(0x1025, 0x173b, "Acer Swift SFG16-72", ALC245_FIXUP_ACER_MICMUTE_LED),
|
||||
SND_PCI_QUIRK(0x1025, 0x1758, "Acer Nitro ANV15-41", ALC245_FIXUP_ACER_MICMUTE_LED),
|
||||
SND_PCI_QUIRK(0x1025, 0x1826, "Acer Helios ZPC", ALC287_FIXUP_PREDATOR_SPK_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x1025, 0x182c, "Acer Helios ZPD", ALC287_FIXUP_PREDATOR_SPK_CS35L41_I2C_2),
|
||||
|
|
@ -7303,6 +7344,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
|
||||
SND_PCI_QUIRK(0x103c, 0x18e6, "HP", ALC269_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x2164, "HP Pavilion 15 Notebook PC", ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x218b, "HP", ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x21f9, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
|
||||
SND_PCI_QUIRK(0x103c, 0x2210, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
|
||||
|
|
@ -7385,9 +7427,11 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x103c, 0x854a, "HP EliteBook 830 G6", ALC285_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x854d, "HP EliteBook 840 G6", ALC285_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x856a, "HP Pavilion 15-cs1xxx", ALC295_FIXUP_HP_PAVILION_MUTE_LED_1B),
|
||||
HDA_CODEC_QUIRK(0x103c, 0x85ba, "HP Pavilion AiO 24", ALC225_FIXUP_HP_AIO_SPK),
|
||||
SND_PCI_QUIRK(0x103c, 0x85c6, "HP Pavilion x360 Convertible 14-dy1xxx", ALC295_FIXUP_HP_MUTE_LED_COEFBIT11),
|
||||
SND_PCI_QUIRK(0x103c, 0x85de, "HP Envy x360 13-ar0xxx", ALC285_FIXUP_HP_ENVY_X360),
|
||||
SND_PCI_QUIRK(0x103c, 0x85f0, "HP Laptop 15-dw0xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
|
||||
SND_PCI_QUIRK(0x103c, 0x85f1, "HP Laptop 15-dw1xxx", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO),
|
||||
SND_PCI_QUIRK(0x103c, 0x85f3, "HP 250 G8 Notebook PC", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8603, "HP Omen 17-cb0xxx", ALC285_FIXUP_HP_MUTE_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x860c, "HP ZBook 17 G6", ALC285_FIXUP_HP_GPIO_AMP_INIT),
|
||||
|
|
@ -7395,6 +7439,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x103c, 0x861f, "HP Elite Dragonfly G1", ALC285_FIXUP_HP_GPIO_AMP_INIT),
|
||||
SND_PCI_QUIRK(0x103c, 0x864f, "HP Laptop 15-dy0xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
|
||||
SND_PCI_QUIRK(0x103c, 0x869d, "HP", ALC236_FIXUP_HP_MUTE_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x86ad, "HP ENVY 13-aq1xxx", ALC285_FIXUP_HP_ENVY_13AQ),
|
||||
SND_PCI_QUIRK(0x103c, 0x86c1, "HP Laptop 15-da3001TU", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
|
||||
SND_PCI_QUIRK(0x103c, 0x86c7, "HP Envy AiO 32", ALC274_FIXUP_HP_ENVY_GPIO),
|
||||
SND_PCI_QUIRK(0x103c, 0x86c8, "HP Laptop 14s-dr1xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
|
||||
|
|
@ -7423,6 +7468,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x103c, 0x8786, "HP OMEN 15", ALC285_FIXUP_HP_MUTE_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8787, "HP OMEN 15", ALC285_FIXUP_HP_MUTE_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8788, "HP OMEN 15", ALC285_FIXUP_HP_MUTE_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x87b2, "HP Pavilion Gaming Laptop 15-ec1xxx", ALC285_FIXUP_HP_MUTE_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x87b7, "HP Laptop 14-fq0xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
|
||||
SND_PCI_QUIRK(0x103c, 0x87c8, "HP", ALC287_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x87cb, "HP Pavilion 15-eg0xxx", ALC287_FIXUP_HP_GPIO_LED),
|
||||
|
|
@ -7483,6 +7529,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x103c, 0x8975, "HP EliteBook x360 840 Aero G9", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x897d, "HP mt440 Mobile Thin Client U74", ALC236_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8981, "HP Elite Dragonfly G3", ALC245_FIXUP_CS35L41_SPI_4),
|
||||
SND_PCI_QUIRK(0x103c, 0x8987, "HP Pavilion 14-dv1001TU", ALC287_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x898a, "HP Pavilion 15-eg100", ALC287_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x898e, "HP EliteBook 835 G9", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x898f, "HP EliteBook 835 G9", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
|
|
@ -7520,7 +7567,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x103c, 0x8a2d, "HP Envy 16", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8a2e, "HP Envy 16", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8a30, "HP Envy 17", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8a31, "HP Envy 15", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8a31, "HP ENVY x360 2-in-1 Laptop 15-ey0xxx", ALC287_FIXUP_CS35L41_I2C_2_HP_MUTE_LEDS),
|
||||
SND_PCI_QUIRK(0x103c, 0x8a34, "HP Pavilion x360 2-in-1 Laptop 14-ek0xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
||||
SND_PCI_QUIRK(0x103c, 0x8a36, "HP Pavilion Plus 14-eh0xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
||||
SND_PCI_QUIRK(0x103c, 0x8a3d, "HP Victus 15-fb0xxx (MB 8A3D)", ALC245_FIXUP_HP_MUTE_LED_V2_COEFBIT),
|
||||
|
|
@ -7581,6 +7628,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x103c, 0x8bb4, "HP Slim OMEN", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8bb6, "HP Laptop 15-fd0039nt", ALC236_FIXUP_HP_15_FD0XXX),
|
||||
SND_PCI_QUIRK(0x103c, 0x8bbe, "HP Victus 16-r0xxx (MB 8BBE)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
||||
SND_PCI_QUIRK(0x103c, 0x8bc7, "HP Pavilion 15-eh3174nw", ALC287_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8bc8, "HP Victus 15-fa1xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
||||
SND_PCI_QUIRK(0x103c, 0x8bcd, "HP Omen 16-xd0xxx", ALC245_FIXUP_HP_MUTE_LED_V1_COEFBIT),
|
||||
SND_PCI_QUIRK(0x103c, 0x8bd4, "HP Victus 16-s0xxx (MB 8BD4)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
||||
|
|
@ -7603,6 +7651,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x103c, 0x8c17, "HP Spectre x360 2-in-1 Laptop 16-aa0xxx", ALC245_FIXUP_HP_SPECTRE_X360_16_AA0XXX),
|
||||
SND_PCI_QUIRK(0x103c, 0x8c21, "HP Pavilion Plus Laptop 14-ey0XXX", ALC245_FIXUP_HP_X360_MUTE_LEDS),
|
||||
SND_PCI_QUIRK(0x103c, 0x8c2d, "HP Victus 15-fa1xxx (MB 8C2D)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
||||
SND_PCI_QUIRK(0x103c, 0x8c2f, "HP Victus 15-fb2xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
||||
SND_PCI_QUIRK(0x103c, 0x8c30, "HP Victus 15-fb1xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
||||
SND_PCI_QUIRK(0x103c, 0x8c3f, "HP Victus 15-fa1xxx (MB 8C3F)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
||||
SND_PCI_QUIRK(0x103c, 0x8c46, "HP EliteBook 830 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
|
||||
|
|
@ -7712,6 +7761,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x103c, 0x8e37, "HP 16 Piston OmniBook X", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8e3a, "HP Agusta", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8e3b, "HP Agusta", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8e43, "HP Laptop 15-fd2xxx", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO),
|
||||
SND_PCI_QUIRK(0x103c, 0x8e60, "HP OmniBook 7 Laptop 16-bh0xxx", ALC245_FIXUP_CS35L41_I2C_2_MUTE_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8e61, "HP Trekker ", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8e62, "HP Trekker ", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
|
|
@ -7814,6 +7864,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x1043, 0x1652, "ASUS ROG Zephyrus Do 15 SE", ALC289_FIXUP_ASUS_ZEPHYRUS_DUAL_SPK),
|
||||
SND_PCI_QUIRK(0x1043, 0x1662, "ASUS GV301QH", ALC294_FIXUP_ASUS_DUAL_SPK),
|
||||
SND_PCI_QUIRK(0x1043, 0x1663, "ASUS GU603ZI/ZJ/ZQ/ZU/ZV", ALC285_FIXUP_ASUS_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x1043, 0x1664, "ASUS ExpertBook PM3406CHA", ALC256_FIXUP_ASUS_PM3406CHA),
|
||||
SND_PCI_QUIRK(0x1043, 0x1683, "ASUS UM3402YAR", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x1043, 0x16a3, "ASUS UX3402VA", ALC245_FIXUP_CS35L41_SPI_2),
|
||||
SND_PCI_QUIRK(0x1043, 0x16b2, "ASUS GU603", ALC289_FIXUP_ASUS_GA401),
|
||||
|
|
@ -7916,7 +7967,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x1043, 0x3ef0, "ASUS Strix G635LR_LW_LX", ALC287_FIXUP_TXNW2781_I2C),
|
||||
SND_PCI_QUIRK(0x1043, 0x3f00, "ASUS Strix G815LH_LM_LP", ALC287_FIXUP_TXNW2781_I2C),
|
||||
SND_PCI_QUIRK(0x1043, 0x3f10, "ASUS Strix G835LR_LW_LX", ALC287_FIXUP_TXNW2781_I2C),
|
||||
SND_PCI_QUIRK(0x1043, 0x3f20, "ASUS Strix G615LR_LW", ALC287_FIXUP_TXNW2781_I2C),
|
||||
SND_PCI_QUIRK(0x1043, 0x3f20, "ASUS Strix G615LR_LW", ALC287_FIXUP_TXNW2781_I2C_ASUS),
|
||||
SND_PCI_QUIRK(0x1043, 0x3f30, "ASUS Strix G815LR_LW", ALC287_FIXUP_TXNW2781_I2C),
|
||||
SND_PCI_QUIRK(0x1043, 0x3fd0, "ASUS B3605CVA", ALC245_FIXUP_CS35L41_SPI_2),
|
||||
SND_PCI_QUIRK(0x1043, 0x3ff0, "ASUS B5405CVA", ALC245_FIXUP_CS35L41_SPI_2),
|
||||
|
|
@ -7939,6 +7990,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x10cf, 0x1757, "Lifebook E752", ALC269_FIXUP_LIFEBOOK_HP_PIN),
|
||||
SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC),
|
||||
SND_PCI_QUIRK(0x10ec, 0x10f2, "Intel Reference board", ALC700_FIXUP_INTEL_REFERENCE),
|
||||
SND_PCI_QUIRK(0x10ec, 0x111e, "Higole F9B", ALC290_FIXUP_MONO_SPEAKERS),
|
||||
SND_PCI_QUIRK(0x10ec, 0x118c, "Medion EE4254 MD62100", ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x10ec, 0x119e, "Positivo SU C1400", ALC269_FIXUP_ASPIRE_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x10ec, 0x11bc, "VAIO VJFE-IL", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
||||
|
|
@ -8164,7 +8216,6 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x17aa, 0x3834, "Lenovo IdeaPad Slim 9i 14ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
|
||||
SND_PCI_QUIRK(0x17aa, 0x383d, "Legion Y9000X 2019", ALC285_FIXUP_LEGION_Y9000X_SPEAKERS),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3843, "Lenovo Yoga 9i / Yoga Book 9i", ALC287_FIXUP_LENOVO_YOGA_BOOK_9I),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3846, "Lenovo Yoga Pro 9 16IAH10", ALC287_FIXUP_YOGA9_SPEAKER2_TO_DAC1),
|
||||
/* Yoga Pro 7 14IMH9 shares PCI SSID 17aa:3847 with Legion 7 16ACHG6;
|
||||
* use codec SSID to distinguish them
|
||||
*/
|
||||
|
|
@ -8189,6 +8240,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
HDA_CODEC_QUIRK(0x17aa, 0x38a8, "Legion Pro 7 16ARX8H", ALC287_FIXUP_TAS2781_I2C), /* this must match before PCI SSID 17aa:386f below */
|
||||
SND_PCI_QUIRK(0x17aa, 0x386f, "Legion Pro 7i 16IAX7", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3870, "Lenovo Yoga 7 14ARB7", ALC287_FIXUP_YOGA7_14ARB7_I2C),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3871, "Lenovo ThinkBook 16p Gen 3 ARH", ALC287_FIXUP_YOGA7_14ARB7_I2C),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3874, "Legion 7i 16IAX7", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3877, "Lenovo Legion 7 Slim 16ARHA7", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3878, "Lenovo Legion 7 Slim 16ARHA7", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
|
|
@ -8239,6 +8291,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x17aa, 0x38d5, "Yoga S990-16 Pro IMH YC Quad", ALC287_FIXUP_TAS2781_I2C),
|
||||
SND_PCI_QUIRK(0x17aa, 0x38d6, "Yoga S990-16 Pro IMH VECO Quad", ALC287_FIXUP_TAS2781_I2C),
|
||||
SND_PCI_QUIRK(0x17aa, 0x38d7, "Lenovo Yoga 9 14IMH9", ALC287_FIXUP_YOGA9_14IMH9_BASS_SPK_PIN),
|
||||
SND_PCI_QUIRK(0x17aa, 0x38dc, "Lenovo ThinkBook G8", ALC285_FIXUP_SPEAKER2_TO_DAC1),
|
||||
SND_PCI_QUIRK(0x17aa, 0x38df, "Yoga Y990 Intel YC Dual", ALC287_FIXUP_TAS2781_I2C),
|
||||
SND_PCI_QUIRK(0x17aa, 0x38e0, "Yoga Y990 Intel VECO Dual", ALC287_FIXUP_TAS2781_I2C),
|
||||
SND_PCI_QUIRK(0x17aa, 0x38f8, "Yoga Book 9i", ALC287_FIXUP_TAS2781_I2C),
|
||||
|
|
@ -8258,7 +8311,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x17aa, 0x3912, "Lenovo Xiaoxin 14 GT", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3913, "Lenovo 145", ALC236_FIXUP_LENOVO_INV_DMIC),
|
||||
SND_PCI_QUIRK(0x17aa, 0x391f, "Yoga S990-16 pro Quad YC Quad", ALC287_FIXUP_TXNW2781_I2C),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3920, "Yoga S990-16 pro Quad VECO Quad", ALC287_FIXUP_TXNW2781_I2C),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3920, "Yoga S990-16 pro Quad VECO Quad", ALC287_FIXUP_YOGA9_SPEAKER2_TO_DAC1),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3929, "Thinkbook 13x Gen 5", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
|
||||
SND_PCI_QUIRK(0x17aa, 0x392b, "Thinkbook 13x Gen 5", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
|
||||
HDA_CODEC_QUIRK(0x17aa, 0x3936, "Legion R9000P ADR10H", ALC287_FIXUP_LENOVO_LEGION_AW88399),
|
||||
|
|
@ -8354,6 +8407,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x2014, 0x800a, "Positivo ARN50", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
||||
SND_PCI_QUIRK(0x2039, 0x0001, "Inspur S14-G1", ALC295_FIXUP_CHROME_BOOK),
|
||||
SND_PCI_QUIRK(0x2145, 0x0001, "Star Labs StarFighter", ALC233_FIXUP_STARLABS_STARFIGHTER),
|
||||
SND_PCI_QUIRK(0x2782, 0x0206, "IPASON SmartBook S1", ALC256_FIXUP_IPASON_SMARTBOOK_S1),
|
||||
SND_PCI_QUIRK(0x2782, 0x0214, "VAIO VJFE-CL", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
||||
SND_PCI_QUIRK(0x2782, 0x0228, "Infinix ZERO BOOK 13", ALC269VB_FIXUP_INFINIX_ZERO_BOOK_13),
|
||||
SND_PCI_QUIRK(0x2782, 0x0232, "CHUWI CoreBook XPro", ALC269VB_FIXUP_CHUWI_COREBOOK_XPRO),
|
||||
|
|
|
|||
|
|
@ -1292,6 +1292,7 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
|
|||
}
|
||||
|
||||
switch (codec->core.vendor_id) {
|
||||
case 0x10ec0235:
|
||||
case 0x10ec0255:
|
||||
alc_process_coef_fw(codec, coef0255);
|
||||
break;
|
||||
|
|
@ -1407,6 +1408,7 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
|
|||
};
|
||||
|
||||
switch (codec->core.vendor_id) {
|
||||
case 0x10ec0235:
|
||||
case 0x10ec0255:
|
||||
alc_write_coef_idx(codec, 0x45, 0xc489);
|
||||
snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
|
||||
|
|
@ -1562,6 +1564,7 @@ static void alc_headset_mode_default(struct hda_codec *codec)
|
|||
alc_process_coef_fw(codec, coef0225);
|
||||
alc_hp_enable_unmute(codec, 75);
|
||||
break;
|
||||
case 0x10ec0235:
|
||||
case 0x10ec0255:
|
||||
alc_process_coef_fw(codec, coef0255);
|
||||
break;
|
||||
|
|
@ -1663,6 +1666,7 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
|
|||
};
|
||||
|
||||
switch (codec->core.vendor_id) {
|
||||
case 0x10ec0235:
|
||||
case 0x10ec0255:
|
||||
alc_process_coef_fw(codec, coef0255);
|
||||
break;
|
||||
|
|
@ -1780,6 +1784,7 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
|
|||
};
|
||||
|
||||
switch (codec->core.vendor_id) {
|
||||
case 0x10ec0235:
|
||||
case 0x10ec0255:
|
||||
alc_process_coef_fw(codec, coef0255);
|
||||
break;
|
||||
|
|
@ -1881,6 +1886,7 @@ static void alc_determine_headset_type(struct hda_codec *codec)
|
|||
}
|
||||
|
||||
switch (codec->core.vendor_id) {
|
||||
case 0x10ec0235:
|
||||
case 0x10ec0255:
|
||||
alc_process_coef_fw(codec, coef0255);
|
||||
msleep(300);
|
||||
|
|
|
|||
|
|
@ -374,7 +374,8 @@ static int hda_tegra_first_init(struct azx *chip, struct platform_device *pdev)
|
|||
* in powers of 2, next available ratio is 16 which can be
|
||||
* used as a limiting factor here.
|
||||
*/
|
||||
if (of_device_is_compatible(np, "nvidia,tegra30-hda"))
|
||||
if (of_device_is_compatible(np, "nvidia,tegra30-hda") ||
|
||||
of_device_is_compatible(np, "nvidia,tegra194-hda"))
|
||||
chip->bus.core.sdo_limit = 16;
|
||||
|
||||
/* codec detection */
|
||||
|
|
|
|||
|
|
@ -1895,6 +1895,7 @@ static int hw_adc_init(struct hw *hw, const struct adc_conf *info)
|
|||
|
||||
if (hw->model == CTSB1270) {
|
||||
/* Set up the PCM4220 ADC on Titanium HD */
|
||||
data = hw_read_20kx(hw, GPIO_DATA);
|
||||
data &= ~0x0C;
|
||||
if (1 == info->msr)
|
||||
data |= 0x00; /* Single Speed Mode 32-50kHz */
|
||||
|
|
@ -1903,6 +1904,7 @@ static int hw_adc_init(struct hw *hw, const struct adc_conf *info)
|
|||
else
|
||||
data |= 0x04; /* Quad Speed Mode 108kHz-216kHz */
|
||||
hw_write_20kx(hw, GPIO_DATA, data);
|
||||
usleep_range(10000, 11000);
|
||||
}
|
||||
|
||||
hw_adc_start(hw);
|
||||
|
|
|
|||
|
|
@ -2523,7 +2523,7 @@ static int snd_ice1712_probe(struct pci_dev *pci,
|
|||
const struct pci_device_id *pci_id)
|
||||
{
|
||||
static int dev;
|
||||
struct snd_card *card __free(snd_card_unref) = NULL;
|
||||
struct snd_card *card __free(snd_card_free) = NULL;
|
||||
struct snd_ice1712 *ice;
|
||||
int pcm_dev = 0, err;
|
||||
const struct snd_ice1712_card_info * const *tbl, *c;
|
||||
|
|
|
|||
|
|
@ -51,6 +51,13 @@ static const struct dmi_system_id acp70_acpi_flag_override_table[] = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "83V9"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Lenovo Yoga Pro 7 14ASP9 (Strix Point, ACP 7.0) */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "83HN"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC"),
|
||||
|
|
@ -63,6 +70,13 @@ static const struct dmi_system_id acp70_acpi_flag_override_table[] = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "Vivobook 18 M1807GA"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* ASUS Zenbook S14 UM5406GA (Strix Point, ACP 7.0) */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Zenbook S14 UM5406GA"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* HP OmniBook X Flip 14-kc0xxx (Strix Point, ACP 7.2) */
|
||||
.matches = {
|
||||
|
|
|
|||
|
|
@ -181,6 +181,7 @@ config SND_SOC_AMD_LEGACY_SDW_MACH
|
|||
select SND_SOC_RT715_SDW
|
||||
select SND_SOC_RT715_SDCA_SDW
|
||||
select SND_SOC_RT722_SDCA_SDW
|
||||
select SND_SOC_TAS2783_SDW
|
||||
help
|
||||
This option enables Legacy(No DSP) sound card support for SoundWire
|
||||
enabled AMD platforms along with ACP PDM controller.
|
||||
|
|
|
|||
|
|
@ -748,7 +748,27 @@ static const struct snd_soc_acpi_link_adr acp70_rt721_only[] = {
|
|||
{}
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_link_adr acp70_tas2783a_l0_rt712_vb_l1[] = {
|
||||
{
|
||||
.mask = BIT(0),
|
||||
.num_adr = ARRAY_SIZE(tas2783_2_adr),
|
||||
.adr_d = tas2783_2_adr,
|
||||
},
|
||||
{
|
||||
.mask = BIT(1),
|
||||
.num_adr = ARRAY_SIZE(rt712_vb_1_group1_adr),
|
||||
.adr_d = rt712_vb_1_group1_adr,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sdw_machines[] = {
|
||||
{
|
||||
.link_mask = BIT(0) | BIT(1),
|
||||
.links = acp70_tas2783a_l0_rt712_vb_l1,
|
||||
.machine_check = snd_soc_acpi_amd_sdca_is_device_rt712_vb,
|
||||
.drv_name = "amd_sdw",
|
||||
},
|
||||
{
|
||||
.link_mask = BIT(0),
|
||||
.links = acp70_tas2783_2,
|
||||
|
|
|
|||
|
|
@ -248,6 +248,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "21J6"),
|
||||
}
|
||||
},
|
||||
{
|
||||
.driver_data = &acp6x_card,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "21JN"),
|
||||
}
|
||||
},
|
||||
{
|
||||
.driver_data = &acp6x_card,
|
||||
.matches = {
|
||||
|
|
@ -381,6 +388,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "83Q3"),
|
||||
}
|
||||
},
|
||||
{
|
||||
.driver_data = &acp6x_card,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "83UU"),
|
||||
}
|
||||
},
|
||||
{
|
||||
.driver_data = &acp6x_card,
|
||||
.matches = {
|
||||
|
|
|
|||
|
|
@ -1989,9 +1989,7 @@ config SND_SOC_RT715_SDCA_SDW
|
|||
config SND_SOC_RT766_SDCA_SDW
|
||||
tristate "Realtek RT766 SDCA Codec - SDW"
|
||||
depends on SOUNDWIRE
|
||||
depends on SND_SOC_SDCA
|
||||
select SND_SOC_SDCA_HID
|
||||
select SND_SOC_SDCA_IRQ
|
||||
depends on SND_SOC_SDCA_CLASS
|
||||
select REGMAP_SOUNDWIRE
|
||||
select REGMAP_SOUNDWIRE_MBQ
|
||||
|
||||
|
|
|
|||
|
|
@ -1841,6 +1841,7 @@ static int wsa_macro_enable_interpolator(struct snd_soc_dapm_widget *w,
|
|||
int event)
|
||||
{
|
||||
struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
|
||||
unsigned int gain;
|
||||
u16 gain_reg;
|
||||
u16 reg;
|
||||
struct wsa_macro *wsa = snd_soc_component_get_drvdata(component);
|
||||
|
|
@ -1882,6 +1883,8 @@ static int wsa_macro_enable_interpolator(struct snd_soc_dapm_widget *w,
|
|||
CDC_WSA_RX_PGA_HALF_DB_MASK,
|
||||
CDC_WSA_RX_PGA_HALF_DB_ENABLE);
|
||||
}
|
||||
gain = snd_soc_component_read(component, gain_reg);
|
||||
snd_soc_component_write(component, gain_reg, gain);
|
||||
wsa_macro_config_ear_spkr_gain(component, wsa,
|
||||
event, gain_reg);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -200,7 +200,7 @@ static int max98363_sdw_dai_hw_params(struct snd_pcm_substream *substream,
|
|||
struct max98363_priv *max98363 =
|
||||
snd_soc_component_get_drvdata(component);
|
||||
|
||||
struct sdw_stream_config stream_config;
|
||||
struct sdw_stream_config stream_config = {0};
|
||||
struct sdw_port_config port_config;
|
||||
enum sdw_data_direction direction;
|
||||
struct sdw_stream_runtime *stream;
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
#include <sound/pcm_params.h>
|
||||
#include <sound/soc.h>
|
||||
#include <sound/soc-dapm.h>
|
||||
#include <sound/sdw.h>
|
||||
#include <sound/initval.h>
|
||||
#include <sound/tlv.h>
|
||||
|
||||
|
|
@ -573,11 +574,10 @@ static int rt1017_sdca_pcm_hw_params(struct snd_pcm_substream *substream,
|
|||
{
|
||||
struct snd_soc_component *component = dai->component;
|
||||
struct rt1017_sdca_priv *rt1017 = snd_soc_component_get_drvdata(component);
|
||||
struct sdw_stream_config stream_config;
|
||||
struct sdw_stream_config stream_config = {0};
|
||||
struct sdw_port_config port_config;
|
||||
enum sdw_data_direction direction;
|
||||
struct sdw_stream_runtime *sdw_stream;
|
||||
int retval, port, num_channels, ch_mask;
|
||||
int retval, port;
|
||||
unsigned int sampling_rate;
|
||||
|
||||
dev_dbg(dai->dev, "%s %s", __func__, dai->name);
|
||||
|
|
@ -591,28 +591,17 @@ static int rt1017_sdca_pcm_hw_params(struct snd_pcm_substream *substream,
|
|||
|
||||
/* SoundWire specific configuration */
|
||||
/* port 1 for playback */
|
||||
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
|
||||
direction = SDW_DATA_DIR_RX;
|
||||
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
|
||||
port = 1;
|
||||
} else {
|
||||
direction = SDW_DATA_DIR_TX;
|
||||
else
|
||||
port = 2;
|
||||
}
|
||||
|
||||
num_channels = params_channels(params);
|
||||
ch_mask = (1 << num_channels) - 1;
|
||||
|
||||
stream_config.frame_rate = params_rate(params);
|
||||
stream_config.ch_count = num_channels;
|
||||
stream_config.bps = snd_pcm_format_width(params_format(params));
|
||||
stream_config.direction = direction;
|
||||
|
||||
port_config.ch_mask = ch_mask;
|
||||
snd_sdw_params_to_config(substream, params, &stream_config, &port_config);
|
||||
port_config.num = port;
|
||||
|
||||
dev_dbg(dai->dev, "frame_rate %d, ch_count %d, bps %d, direction %d, ch_mask %d, port: %d\n",
|
||||
params_rate(params), num_channels, snd_pcm_format_width(params_format(params)),
|
||||
direction, ch_mask, port);
|
||||
stream_config.frame_rate, stream_config.ch_count, stream_config.bps,
|
||||
stream_config.direction, port_config.ch_mask, port);
|
||||
|
||||
retval = sdw_stream_add_slave(rt1017->sdw_slave, &stream_config,
|
||||
&port_config, 1, sdw_stream);
|
||||
|
|
|
|||
|
|
@ -619,9 +619,11 @@ static int rt274_hw_params(struct snd_pcm_substream *substream,
|
|||
unsigned int val = 0;
|
||||
int d_len_code = 0, c_len_code = 0;
|
||||
|
||||
/* bit 14 Sample Rate Base, 0: 48kHz 1: 44.1kHz */
|
||||
switch (params_rate(params)) {
|
||||
/* bit 14 0:48K 1:44.1K */
|
||||
case 44100:
|
||||
val |= BIT(14);
|
||||
break;
|
||||
case 48000:
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -953,7 +953,7 @@ static int rt286_probe(struct snd_soc_component *component)
|
|||
|
||||
if (rt286->i2c->irq)
|
||||
schedule_delayed_work(&rt286->jack_detect_work,
|
||||
msecs_to_jiffies(50));
|
||||
msecs_to_jiffies(1250));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -676,7 +676,7 @@ SOC_ENUM("DRC Decay Rate", drc_decay),
|
|||
SOC_ENUM("DRC FF Delay", drc_ff_delay),
|
||||
SOC_SINGLE("DRC Anticlip Switch", WM8903_DRC_0, 1, 1, 0),
|
||||
SOC_SINGLE("DRC QR Switch", WM8903_DRC_0, 2, 1, 0),
|
||||
SOC_SINGLE_TLV("DRC QR Threshold Volume", WM8903_DRC_0, 6, 3, 0, drc_tlv_max),
|
||||
SOC_SINGLE_TLV("DRC QR Threshold Volume", WM8903_DRC_1, 6, 3, 0, drc_tlv_max),
|
||||
SOC_ENUM("DRC QR Decay Rate", drc_qr_decay),
|
||||
SOC_SINGLE("DRC Smoothing Switch", WM8903_DRC_0, 3, 1, 0),
|
||||
SOC_SINGLE("DRC Smoothing Hysteresis Switch", WM8903_DRC_0, 0, 1, 0),
|
||||
|
|
|
|||
|
|
@ -410,6 +410,23 @@ static const struct dmi_system_id byt_rt5651_quirk_table[] = {
|
|||
BYT_RT5651_HP_LR_SWAPPED |
|
||||
BYT_RT5651_MONO_SPEAKER),
|
||||
},
|
||||
{
|
||||
/* Chuwi Hi8 (CWI513) with a BIOS using generic DMI strings */
|
||||
.callback = byt_rt5651_quirk_cb,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "Cherry Trail CR"),
|
||||
/* Above matches are too generic, add bios-date match */
|
||||
DMI_MATCH(DMI_BIOS_DATE, "05/21/2016"),
|
||||
},
|
||||
.driver_data = (void *)(BYT_RT5651_MCLK_EN |
|
||||
BYT_RT5651_JD1_1 |
|
||||
BYT_RT5651_OVCD_TH_2000UA |
|
||||
BYT_RT5651_OVCD_SF_1P0 |
|
||||
BYT_RT5651_IN2_MAP |
|
||||
BYT_RT5651_HP_LR_SWAPPED |
|
||||
BYT_RT5651_MONO_SPEAKER),
|
||||
},
|
||||
{
|
||||
/* Chuwi Vi8 Plus (CWI519) */
|
||||
.callback = byt_rt5651_quirk_cb,
|
||||
|
|
|
|||
|
|
@ -745,6 +745,7 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_lnl_sdw_machines[] = {
|
|||
.links = lnl_cs42l43_l0,
|
||||
.drv_name = "sof_sdw",
|
||||
.sof_tplg_filename = "sof-lnl-cs42l43-l0.tplg",
|
||||
.machine_check = snd_soc_acpi_intel_force_function_topology,
|
||||
.get_function_tplg_files = sof_sdw_get_tplg_files,
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -53,6 +53,22 @@ bool snd_soc_acpi_intel_no_function_topology(void *arg)
|
|||
}
|
||||
EXPORT_SYMBOL_NS(snd_soc_acpi_intel_no_function_topology, "SND_SOC_ACPI_INTEL_SDCA_QUIRKS");
|
||||
|
||||
static const struct dmi_system_id force_function_topology_quirk_table[] = {
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "83R0"),
|
||||
},
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
bool snd_soc_acpi_intel_force_function_topology(void *arg)
|
||||
{
|
||||
return !dmi_check_system(force_function_topology_quirk_table);
|
||||
}
|
||||
EXPORT_SYMBOL_NS(snd_soc_acpi_intel_force_function_topology, "SND_SOC_ACPI_INTEL_SDCA_QUIRKS");
|
||||
|
||||
bool snd_soc_acpi_intel_rt712_vb_no_function_topology(void *arg)
|
||||
{
|
||||
return snd_soc_acpi_intel_sdca_is_device_rt712_vb(arg) &&
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
bool snd_soc_acpi_intel_sdca_is_device_rt712_vb(void *arg);
|
||||
bool snd_soc_acpi_intel_no_function_topology(void *arg);
|
||||
bool snd_soc_acpi_intel_force_function_topology(void *arg);
|
||||
bool snd_soc_acpi_intel_rt712_vb_no_function_topology(void *arg);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1234,8 +1234,8 @@ int asoc_qcom_lpass_cpu_platform_probe(struct platform_device *pdev)
|
|||
}
|
||||
if (drvdata->mi2s_playback_sd_mode[dai_id] ==
|
||||
LPAIF_I2SCTL_MODE_QUAD01) {
|
||||
variant->dai_driver[dai_id].playback.channels_min = 4;
|
||||
variant->dai_driver[dai_id].playback.channels_max = 4;
|
||||
variant->dai_driver[i].playback.channels_min = 4;
|
||||
variant->dai_driver[i].playback.channels_max = 4;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -388,20 +388,27 @@ static int class_function_probe(struct auxiliary_device *auxdev,
|
|||
|
||||
ret = devm_pm_runtime_enable(dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto err_pm;
|
||||
|
||||
ret = class_function_boot(drv);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto err_pm;
|
||||
|
||||
ret = devm_snd_soc_register_component(dev, cmp_drv, dais, num_dais);
|
||||
if (ret)
|
||||
return dev_err_probe(dev, ret, "failed to register component\n");
|
||||
if (ret) {
|
||||
dev_err_probe(dev, ret, "failed to register component\n");
|
||||
goto err_pm;
|
||||
}
|
||||
|
||||
pm_runtime_mark_last_busy(dev);
|
||||
pm_runtime_put_autosuspend(dev);
|
||||
|
||||
return 0;
|
||||
|
||||
err_pm:
|
||||
pm_runtime_put_sync(dev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void class_function_remove(struct auxiliary_device *auxdev)
|
||||
|
|
@ -490,8 +497,6 @@ static int class_function_suspend(struct device *dev)
|
|||
struct class_function_drv *drv = auxiliary_get_drvdata(auxdev);
|
||||
int ret;
|
||||
|
||||
drv->suspended = true;
|
||||
|
||||
/* Ensure runtime resume runs on resume */
|
||||
ret = pm_runtime_resume_and_get(dev);
|
||||
if (ret) {
|
||||
|
|
@ -499,6 +504,8 @@ static int class_function_suspend(struct device *dev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
drv->suspended = true;
|
||||
|
||||
sdca_irq_disable(drv->function, drv->core->irq_info);
|
||||
|
||||
ret = pm_runtime_force_suspend(dev);
|
||||
|
|
|
|||
|
|
@ -828,7 +828,7 @@ static const struct snd_kcontrol_new tegra186_asrc_controls[] = {
|
|||
tegra186_asrc_put_input_threshold),
|
||||
|
||||
SOC_SINGLE_EXT("Stream6 Input Threshold",
|
||||
ASRC_STREAM_REG(TEGRA186_ASRC_RX_THRESHOLD, 4), 0, 3, 0,
|
||||
ASRC_STREAM_REG(TEGRA186_ASRC_RX_THRESHOLD, 5), 0, 3, 0,
|
||||
tegra186_asrc_get_input_threshold,
|
||||
tegra186_asrc_put_input_threshold),
|
||||
|
||||
|
|
|
|||
|
|
@ -562,6 +562,9 @@ static int snd_probe(struct usb_interface *intf,
|
|||
ret = init_card(caiaqdev(card));
|
||||
if (ret < 0) {
|
||||
dev_err(&usb_dev->dev, "unable to init card! (ret=%d)\n", ret);
|
||||
#ifdef CONFIG_SND_USB_CAIAQ_INPUT
|
||||
snd_usb_caiaq_input_disconnect(caiaqdev(card));
|
||||
#endif
|
||||
snd_card_free(card);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -182,6 +182,13 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm)
|
|||
|
||||
fsize *= bytes_per_frame;
|
||||
|
||||
if (fsize > line6pcm->max_packet_size_out) {
|
||||
dev_err(line6pcm->line6->ifcdev,
|
||||
"playback packet too large: %d > %d\n",
|
||||
fsize, line6pcm->max_packet_size_out);
|
||||
return -EMSGSIZE;
|
||||
}
|
||||
|
||||
fout->offset = urb_size;
|
||||
fout->length = fsize;
|
||||
urb_size += fsize;
|
||||
|
|
|
|||
|
|
@ -1007,6 +1007,15 @@ static int detect_usb_format(struct ua101 *ua)
|
|||
}
|
||||
ua->playback.usb_pipe = usb_sndisocpipe(ua->dev, usb_endpoint_num(epd));
|
||||
ua->playback.max_packet_bytes = usb_endpoint_maxp(epd);
|
||||
|
||||
if (ua->capture.max_packet_bytes / ua->capture.frame_bytes *
|
||||
ua->playback.frame_bytes > ua->playback.max_packet_bytes) {
|
||||
dev_err(&ua->dev->dev,
|
||||
"playback packet size %u too small for %u capture frames\n",
|
||||
ua->playback.max_packet_bytes,
|
||||
ua->capture.max_packet_bytes / ua->capture.frame_bytes);
|
||||
return -ENXIO;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -749,6 +749,10 @@ static const struct usbmix_ctl_map usbmix_ctl_maps[] = {
|
|||
.id = USB_ID(0x0db0, 0xa073),
|
||||
.map = msi_mpg_x570s_carbon_max_wifi_alc4080_map,
|
||||
},
|
||||
{ /* MSI MAG B850M MORTAR WIFI */
|
||||
.id = USB_ID(0x0db0, 0xcc78),
|
||||
.map = msi_mpg_x570s_carbon_max_wifi_alc4080_map,
|
||||
},
|
||||
{ /* MSI TRX40 */
|
||||
.id = USB_ID(0x0db0, 0x543d),
|
||||
.map = trx40_mobo_map,
|
||||
|
|
|
|||
|
|
@ -1702,10 +1702,12 @@ int snd_usb_apply_boot_quirk_once(struct usb_device *dev,
|
|||
switch (id) {
|
||||
case USB_ID(0x07fd, 0x0008): /* MOTU M Series, 1st hardware version */
|
||||
return snd_usb_motu_m_series_boot_quirk(dev);
|
||||
case USB_ID(0x1397, 0x1234): /* Behringer CM1A */
|
||||
return snd_usb_cm1a_boot_quirk(dev);
|
||||
}
|
||||
|
||||
/* Behringer devices may need explicit device descriptor read at boot */
|
||||
if (USB_ID_VENDOR(id) == 0x1397)
|
||||
return snd_usb_cm1a_boot_quirk(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -2366,6 +2368,10 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
|
|||
QUIRK_FLAG_CTL_MSG_DELAY_1M),
|
||||
DEVICE_FLG(0x0a73, 0x003a, /* Mackie DLZ Creator XS */
|
||||
QUIRK_FLAG_ALWAYS_SET_RATE),
|
||||
DEVICE_FLG(0x0b05, 0x1826, /* ASUS SupremeFX Hi-Fi */
|
||||
QUIRK_FLAG_DISABLE_AUTOSUSPEND),
|
||||
DEVICE_FLG(0x0b05, 0x1827, /* ASUS SupremeFX Hi-Fi */
|
||||
QUIRK_FLAG_DISABLE_AUTOSUSPEND),
|
||||
DEVICE_FLG(0x0b05, 0x18a6, /* ASUSTek Computer, Inc. */
|
||||
QUIRK_FLAG_MIXER_CAPTURE_MIN_MUTE),
|
||||
DEVICE_FLG(0x0b0e, 0x0349, /* Jabra 550a */
|
||||
|
|
@ -2510,8 +2516,6 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
|
|||
QUIRK_FLAG_FORCE_IFACE_RESET | QUIRK_FLAG_IFACE_DELAY),
|
||||
DEVICE_FLG(0x262a, 0x9302, /* ddHiFi TC44C */
|
||||
QUIRK_FLAG_DSD_RAW),
|
||||
DEVICE_FLG(0x2708, 0x0002, /* Audient iD14 */
|
||||
QUIRK_FLAG_IGNORE_CTL_ERROR),
|
||||
DEVICE_FLG(0x2772, 0x0502, /* Musical Fidelity M6s DAC */
|
||||
0), /* for avoiding QUIRK_FLAG_DSD_RAW with vendor match */
|
||||
DEVICE_FLG(0x2912, 0x30c8, /* Audioengine D1 */
|
||||
|
|
@ -2542,6 +2546,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
|
|||
QUIRK_FLAG_IGNORE_CTL_ERROR),
|
||||
DEVICE_FLG(0x3255, 0x0000, /* Luxman D-10X */
|
||||
QUIRK_FLAG_ITF_USB_DSD_DAC | QUIRK_FLAG_CTL_MSG_DELAY),
|
||||
DEVICE_FLG(0x32bb, 0x0004, /* HiBy FC4 */
|
||||
QUIRK_FLAG_DSD_RAW),
|
||||
DEVICE_FLG(0x3302, 0x17c2, /* TTGK Technology USB-C Audio */
|
||||
QUIRK_FLAG_FORCE_IFACE_RESET | QUIRK_FLAG_IFACE_DELAY),
|
||||
DEVICE_FLG(0x339b, 0x3a07, /* Synaptics HONOR USB-C HEADSET */
|
||||
|
|
@ -2608,6 +2614,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
|
|||
QUIRK_FLAG_DSD_RAW),
|
||||
VENDOR_FLG(0x2622, /* IAG Limited devices */
|
||||
QUIRK_FLAG_DSD_RAW),
|
||||
VENDOR_FLG(0x2708, /* Audient devices */
|
||||
QUIRK_FLAG_IGNORE_CTL_ERROR),
|
||||
VENDOR_FLG(0x2772, /* Musical Fidelity devices */
|
||||
QUIRK_FLAG_DSD_RAW),
|
||||
VENDOR_FLG(0x278b, /* Rotel? */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user