mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 12:10:38 -04:00
Merge tag 'sound-7.2-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai:
"A collection of small fixes. All are device-specific fixes (including
regression fixes) or quirks accumulated since the last update. Some
highlights:
USB-audio:
- Fix per-channel volume imbalance regression for sticky mixers
- Validate input packet length in caiaq driver
- Quirks for iBasso DC-Elite, Musical Fidelity M6s DAC, and Redragon
H510-PRO Wireless headset
HD-audio:
- Fix a long-standing bug of cached processing coefficient verbs
- Make cs35l56 driver failing with missing firmware
- Fix cirrus codec Kconfig dependency, update MAINTAINERS
- Remove unneeded mic bias threshold override on Conexant
- Realtek codec quirks for ASUS ROG Ally X (headphone & mic), Dell
QCM1255, Legion Pro 7, HP/Victus laptops, Framework, and TongFang
laptops
ASoC:
- Add Eliza audio support on Qualcomm sc8280xp/sm8250 SoCs
- Fix SDCA linker error with ACP on AMD
- A few fixes for AMD ACP PCI driver
- Add TAS2783 support on AMD ACP 7.0 platforms
- Reset RT712-SDCA codec to fix silent headphone issue
- Soft reset S/PDIF datapath on Meson AIU FIFO
- Jack report fix for cs42l43
- TAS2562 shutdown GPIO clearing fix
- Sidecar amps quirk for Lenovo laptop in SOF SDW driver
Misc:
- Drop redundant mod_devicetable.h includes from FireWire drivers
- Fix memory leak and format mismatch in mixer kselftest"
* tag 'sound-7.2-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (36 commits)
ALSA: usb-audio: Add delay quirk for iBasso DC-Elite
ALSA: hda: conexant: Remove mic bias threshold override
ALSA: hda/realtek: Fix speakers on Legion Pro 7 16ARX8H with codec SSID 17aa:38a7
ALSA: hda/realtek: Fix speakers on MECHREVO WUJIE Series
ALSA: hda: cs35l56: Fail if wmfw file is missing
ALSA: usb-audio: Skip DSD quirk for Musical Fidelity M6s DAC
ALSA: hda: MAINTAINERS: Fix missing cirrus* file reference
ALSA: hda/cirrus_scodec: Make Kconfig visible if KUNIT
ALSA: hda/realtek: Add quirk for TongFang X6xx45xU
ALSA: hda/realtek - Fixed Headphone noise issue for Dell QCM1255
ASoC: tas2562: fix deprecated 'shut-down' GPIO always cleared after lookup
ASoC: cs42l43: Correct report for forced microphone jack
ASoC: qcom: sc8280xp: Add support for Eliza
ASoC: dt-bindings: qcom,sm8250: Add Eliza sound card
ASoC: dt-bindings: qcom: Add Eliza LPASS macro codecs
ALSA: hda/realtek: Add mic mute LED quirk for HP Laptop 15-fd0xxx
ALSA: hda/realtek - Add quirk for HP Victus 15-fa0xxx (MB 8A50)
ALSA: usb-audio: Add quirk for Redragon H510-PRO Wireless headset
ASoC: amd: ps: replace bitwise OR with logical OR in IRQ return check
ASoC: amd: ps: fix wrong ACP version string in pci_request_regions()
...
This commit is contained in:
@@ -21,6 +21,7 @@ properties:
|
||||
- qcom,sc8280xp-lpass-rx-macro
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,eliza-lpass-rx-macro
|
||||
- qcom,kaanapali-lpass-rx-macro
|
||||
- qcom,sm8650-lpass-rx-macro
|
||||
- qcom,sm8750-lpass-rx-macro
|
||||
|
||||
@@ -21,6 +21,7 @@ properties:
|
||||
- qcom,sc8280xp-lpass-tx-macro
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,eliza-lpass-tx-macro
|
||||
- qcom,kaanapali-lpass-tx-macro
|
||||
- qcom,sm8650-lpass-tx-macro
|
||||
- qcom,sm8750-lpass-tx-macro
|
||||
|
||||
@@ -21,6 +21,7 @@ properties:
|
||||
- qcom,sc8280xp-lpass-va-macro
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,eliza-lpass-va-macro
|
||||
- qcom,glymur-lpass-va-macro
|
||||
- qcom,kaanapali-lpass-va-macro
|
||||
- qcom,sm8650-lpass-va-macro
|
||||
|
||||
@@ -20,6 +20,7 @@ properties:
|
||||
- qcom,sc8280xp-lpass-wsa-macro
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,eliza-lpass-wsa-macro
|
||||
- qcom,glymur-lpass-wsa-macro
|
||||
- qcom,kaanapali-lpass-wsa-macro
|
||||
- qcom,sm8650-lpass-wsa-macro
|
||||
|
||||
@@ -23,6 +23,7 @@ properties:
|
||||
- const: qcom,sdm845-sndcard
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,eliza-sndcard
|
||||
- qcom,kaanapali-sndcard
|
||||
- qcom,sm8550-sndcard
|
||||
- qcom,sm8650-sndcard
|
||||
|
||||
@@ -6209,6 +6209,7 @@ F: include/dt-bindings/sound/cs*
|
||||
F: include/linux/mfd/cs42l43*
|
||||
F: include/sound/cs*
|
||||
F: sound/hda/codecs/cirrus*
|
||||
F: sound/hda/codecs/side-codecs/cirrus*
|
||||
F: sound/hda/codecs/side-codecs/cs*
|
||||
F: sound/hda/codecs/side-codecs/hda_component*
|
||||
F: sound/soc/codecs/cs*
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
#include <linux/firewire.h>
|
||||
#include <linux/firewire-constants.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/sched/signal.h>
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
#include <linux/firewire-constants.h>
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include <linux/device.h>
|
||||
#include <linux/firewire.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/sched/signal.h>
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include <linux/firewire.h>
|
||||
#include <linux/firewire-constants.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/compat.h>
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
#include <linux/firewire.h>
|
||||
#include <linux/firewire-constants.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/sched/signal.h>
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include <linux/firewire.h>
|
||||
#include <linux/firewire-constants.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/compat.h>
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
#include <linux/firewire.h>
|
||||
#include <linux/firewire-constants.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/compat.h>
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include <linux/firewire.h>
|
||||
#include <linux/firewire-constants.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/compat.h>
|
||||
|
||||
@@ -162,9 +162,6 @@ static void cx_fixup_headset_recog(struct hda_codec *codec)
|
||||
{
|
||||
unsigned int mic_present;
|
||||
|
||||
/* fix some headset type recognize fail issue, such as EDIFIER headset */
|
||||
/* set micbias output current comparator threshold from 66% to 55%. */
|
||||
snd_hda_codec_write(codec, 0x1c, 0, 0x320, 0x010);
|
||||
/* set OFF voltage for DFET from -1.2V to -0.8V, set headset micbias register
|
||||
* value adjustment trim from 2.2K ohms to 2.0K ohms.
|
||||
*/
|
||||
|
||||
@@ -3942,6 +3942,7 @@ enum {
|
||||
ALC275_FIXUP_DELL_XPS,
|
||||
ALC293_FIXUP_LENOVO_SPK_NOISE,
|
||||
ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY,
|
||||
ALC233_FIXUP_WUJIE_SPEAKERS,
|
||||
ALC233_FIXUP_LENOVO_L2MH_LOW_ENLED,
|
||||
ALC255_FIXUP_DELL_SPK_NOISE,
|
||||
ALC225_FIXUP_DISABLE_MIC_VREF,
|
||||
@@ -4117,6 +4118,9 @@ enum {
|
||||
ALC236_FIXUP_DELL_DUAL_CODECS,
|
||||
ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI,
|
||||
ALC287_FIXUP_TAS2781_I2C,
|
||||
ALC287_FIXUP_ASUS_ALLY_X,
|
||||
ALC287_FIXUP_ASUS_ALLY_X_SPEAKER,
|
||||
ALC287_FIXUP_ASUS_ALLY_X_I2C,
|
||||
ALC295_FIXUP_DELL_TAS2781_I2C,
|
||||
ALC245_FIXUP_TAS2781_SPI_2,
|
||||
ALC287_FIXUP_TXNW2781_I2C,
|
||||
@@ -4169,6 +4173,7 @@ enum {
|
||||
ALC256_FIXUP_HONOR_MRB_XXX_M1020_AUDIO,
|
||||
ALC245_FIXUP_HP_ENVY_X360_15_FH0XXX,
|
||||
ALC287_FIXUP_ACER_MICMUTE_LED,
|
||||
ALC236_FIXUP_DELL_HP_POP_NOISE,
|
||||
};
|
||||
|
||||
/* A special fixup for Lenovo C940 and Yoga Duet 7;
|
||||
@@ -4206,6 +4211,13 @@ static void alc287_fixup_lenovo_yoga_book_9i(struct hda_codec *codec,
|
||||
}
|
||||
|
||||
static const struct hda_fixup alc269_fixups[] = {
|
||||
[ALC233_FIXUP_WUJIE_SPEAKERS] = {
|
||||
.type = HDA_FIXUP_PINS,
|
||||
.v.pins = (const struct hda_pintbl[]) {
|
||||
{ 0x1b, 0x90170150 }, /* internal speaker */
|
||||
{ }
|
||||
},
|
||||
},
|
||||
[ALC269_FIXUP_GPIO2] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc_fixup_gpio2,
|
||||
@@ -6476,6 +6488,27 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||
.chained = true,
|
||||
.chain_id = ALC285_FIXUP_THINKPAD_HEADSET_JACK,
|
||||
},
|
||||
[ALC287_FIXUP_ASUS_ALLY_X] = {
|
||||
.type = HDA_FIXUP_PINS,
|
||||
.v.pins = (const struct hda_pintbl[]) {
|
||||
{ 0x19, 0x03a11050 }, /* headset mic */
|
||||
{ }
|
||||
},
|
||||
.chained = true,
|
||||
.chain_id = ALC287_FIXUP_ASUS_ALLY_X_SPEAKER,
|
||||
},
|
||||
[ALC287_FIXUP_ASUS_ALLY_X_SPEAKER] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc285_fixup_speaker2_to_dac1,
|
||||
.chained = true,
|
||||
.chain_id = ALC287_FIXUP_ASUS_ALLY_X_I2C,
|
||||
},
|
||||
[ALC287_FIXUP_ASUS_ALLY_X_I2C] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = tas2781_fixup_tias_i2c,
|
||||
.chained = true,
|
||||
.chain_id = ALC225_FIXUP_HEADSET_JACK,
|
||||
},
|
||||
[ALC245_FIXUP_TAS2781_SPI_2] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = tas2781_fixup_spi,
|
||||
@@ -6755,6 +6788,10 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||
.chained = true,
|
||||
.chain_id = ALC2XX_FIXUP_HEADSET_MIC,
|
||||
},
|
||||
[ALC236_FIXUP_DELL_HP_POP_NOISE] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc285_fixup_invalidate_dacs,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct hda_quirk alc269_fixup_tbl[] = {
|
||||
@@ -6906,6 +6943,8 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1028, 0x0cc3, "Dell Oasis 14 Low Weight MTL-U", ALC289_FIXUP_DELL_CS35L41_SPI_2),
|
||||
SND_PCI_QUIRK(0x1028, 0x0cc4, "Dell Oasis 16 MTL-H/U", ALC289_FIXUP_DELL_CS35L41_SPI_2),
|
||||
SND_PCI_QUIRK(0x1028, 0x0cc5, "Dell Oasis 14", ALC289_FIXUP_RTK_AMP_DUAL_SPK),
|
||||
SND_PCI_QUIRK(0x1028, 0x0e6b, "Dell Pro QCM1255", ALC236_FIXUP_DELL_HP_POP_NOISE),
|
||||
SND_PCI_QUIRK(0x1028, 0x0e6d, "Dell Pro Micro QCM1255", ALC236_FIXUP_DELL_HP_POP_NOISE),
|
||||
SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
|
||||
@@ -6992,6 +7031,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x103c, 0x856a, "HP Pavilion 15-cs1xxx", ALC295_FIXUP_HP_PAVILION_MUTE_LED_1B),
|
||||
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, 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),
|
||||
SND_PCI_QUIRK(0x103c, 0x860f, "HP ZBook 15 G6", ALC285_FIXUP_HP_GPIO_AMP_INIT),
|
||||
@@ -7121,6 +7161,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
||||
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),
|
||||
SND_PCI_QUIRK(0x103c, 0x8a4f, "HP Victus 15-fa0xxx (MB 8A4F)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
||||
SND_PCI_QUIRK(0x103c, 0x8a50, "HP Victus 15-fa0xxx (MB 8A50)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
||||
SND_PCI_QUIRK(0x103c, 0x8a6e, "HP EDNA 360", ALC287_FIXUP_CS35L41_I2C_4),
|
||||
SND_PCI_QUIRK(0x103c, 0x8a74, "HP ProBook 440 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8a75, "HP ProBook 450 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
|
||||
@@ -7268,7 +7309,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x103c, 0x8da8, "HP 16 Piston OmniBook X", ALC245_FIXUP_HP_ENVY_X360_15_FH0XXX),
|
||||
SND_PCI_QUIRK(0x103c, 0x8dc9, "HP Laptop 15-fc0xxx", ALC236_FIXUP_HP_DMIC),
|
||||
SND_PCI_QUIRK(0x103c, 0x8dd4, "HP EliteStudio 8 AIO", ALC274_FIXUP_HP_AIO_BIND_DACS),
|
||||
SND_PCI_QUIRK(0x103c, 0x8dd7, "HP Laptop 15-fd0xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8dd7, "HP Laptop 15-fd0xxx", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO),
|
||||
SND_PCI_QUIRK(0x103c, 0x8de8, "HP Gemtree", ALC245_FIXUP_TAS2781_SPI_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8de9, "HP Gemtree", ALC245_FIXUP_TAS2781_SPI_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8dec, "HP EliteBook 640 G12", ALC236_FIXUP_HP_GPIO_LED),
|
||||
@@ -7460,7 +7501,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1043, 0x1e83, "ASUS GA605W", ALC285_FIXUP_ASUS_GU605_SPI_SPEAKER2_TO_DAC1),
|
||||
SND_PCI_QUIRK(0x1043, 0x1e8e, "ASUS Zephyrus G15", ALC289_FIXUP_ASUS_GA401),
|
||||
SND_PCI_QUIRK(0x1043, 0x1e93, "ASUS ExpertBook B9403CVAR", ALC294_FIXUP_ASUS_HPE),
|
||||
SND_PCI_QUIRK(0x1043, 0x1eb3, "ASUS Ally RCLA72", ALC287_FIXUP_TAS2781_I2C),
|
||||
SND_PCI_QUIRK(0x1043, 0x1eb3, "ASUS Ally RC72LA", ALC287_FIXUP_ASUS_ALLY_X),
|
||||
SND_PCI_QUIRK(0x1043, 0x1ed3, "ASUS HN7306W", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
HDA_CODEC_QUIRK(0x1043, 0x1ee2, "ASUS UM6702RA/RC", ALC285_FIXUP_ASUS_I2C_SPEAKER2_TO_DAC1),
|
||||
SND_PCI_QUIRK(0x1043, 0x1ee2, "ASUS UM6702RA/RC", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
@@ -7766,6 +7807,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
||||
HDA_CODEC_QUIRK(0x17aa, 0x386e, "Legion Y9000X 2022 IAH7", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x17aa, 0x386e, "Yoga Pro 7 14ARP8", ALC285_FIXUP_SPEAKER2_TO_DAC1),
|
||||
HDA_CODEC_QUIRK(0x17aa, 0x38a8, "Legion Pro 7 16ARX8H", ALC287_FIXUP_TAS2781_I2C), /* this must match before PCI SSID 17aa:386f below */
|
||||
HDA_CODEC_QUIRK(0x17aa, 0x38a7, "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, 0x3874, "Legion 7i 16IAX7", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
@@ -7885,6 +7927,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1d05, 0x300f, "TongFang X6AR5xxY", ALC2XX_FIXUP_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x1d05, 0x3019, "TongFang X6FR5xxY", ALC2XX_FIXUP_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x1d05, 0x3031, "TongFang X6AR55xU", ALC2XX_FIXUP_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x1d05, 0x3034, "TongFang X6xx45xU", ALC2XX_FIXUP_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x1d17, 0x3288, "Haier Boyue G42", ALC269VC_FIXUP_ACER_VCOPPERBOX_PINS),
|
||||
SND_PCI_QUIRK(0x1d72, 0x1602, "RedmiBook", ALC255_FIXUP_XIAOMI_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x1d72, 0x1701, "XiaomiNotebook Pro", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||
@@ -7915,6 +7958,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x8086, 0x2080, "Intel NUC 8 Rugged", ALC256_FIXUP_INTEL_NUC8_RUGGED),
|
||||
SND_PCI_QUIRK(0x8086, 0x2081, "Intel NUC 10", ALC256_FIXUP_INTEL_NUC10),
|
||||
SND_PCI_QUIRK(0x8086, 0x3038, "Intel NUC 13", ALC295_FIXUP_CHROME_BOOK),
|
||||
SND_PCI_QUIRK(0xc011, 0x1d05, "MECHREVO WUJIE Series", ALC233_FIXUP_WUJIE_SPEAKERS),
|
||||
SND_PCI_QUIRK(0xf111, 0x0001, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0xf111, 0x0006, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0xf111, 0x0009, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
|
||||
@@ -7922,6 +7966,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0xf111, 0x000c, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0xf111, 0x000f, "Framework Laptop 13 Pro PTL", ALC295_FIXUP_FRAMEWORK_LAPTOP_LIMIT_INT_MIC_BOOST),
|
||||
SND_PCI_QUIRK(0xf111, 0x010f, "Framework Laptop 13 PTL", ALC295_FIXUP_FRAMEWORK_LAPTOP_LIMIT_INT_MIC_BOOST),
|
||||
SND_PCI_QUIRK(0xf111, 0x0010, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_LIMIT_INT_MIC_BOOST),
|
||||
|
||||
#if 0
|
||||
/* Below is a quirk table taken from the old code.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
config SND_HDA_CIRRUS_SCODEC
|
||||
tristate
|
||||
tristate "Cirrus side-codec library" if KUNIT
|
||||
|
||||
config SND_HDA_CIRRUS_SCODEC_KUNIT_TEST
|
||||
tristate "KUnit test for Cirrus side-codec library" if !KUNIT_ALL_TESTS
|
||||
|
||||
@@ -512,20 +512,6 @@ static void cs35l56_hda_request_firmware_files(struct cs35l56_hda *cs35l56,
|
||||
NULL, "bin");
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for system-specific bin files without wmfw before
|
||||
* falling back to generic firmware
|
||||
*/
|
||||
if (amp_name)
|
||||
cs35l56_hda_request_firmware_file(cs35l56, coeff_firmware, coeff_filename,
|
||||
base_name, system_name, amp_name, "bin");
|
||||
if (!*coeff_firmware)
|
||||
cs35l56_hda_request_firmware_file(cs35l56, coeff_firmware, coeff_filename,
|
||||
base_name, system_name, NULL, "bin");
|
||||
|
||||
if (*coeff_firmware)
|
||||
return;
|
||||
}
|
||||
|
||||
ret = cs35l56_hda_request_firmware_file(cs35l56, wmfw_firmware, wmfw_filename,
|
||||
@@ -616,13 +602,15 @@ static void cs35l56_hda_fw_load(struct cs35l56_hda *cs35l56)
|
||||
&wmfw_firmware, &wmfw_filename,
|
||||
&coeff_firmware, &coeff_filename);
|
||||
|
||||
/*
|
||||
* If the BIOS didn't patch the firmware a bin file is mandatory to
|
||||
* enable the ASP·
|
||||
*/
|
||||
if (!coeff_firmware && firmware_missing) {
|
||||
dev_err(cs35l56->base.dev, ".bin file required but not found\n");
|
||||
goto err_fw_release;
|
||||
/* If the BIOS didn't patch the firmware a wmfw and bin file are mandatory */
|
||||
if (firmware_missing) {
|
||||
if (!wmfw_firmware) {
|
||||
dev_err(cs35l56->base.dev, ".%s file required but not found\n", "wmfw");
|
||||
goto err_fw_release;
|
||||
} else if (!coeff_firmware) {
|
||||
dev_err(cs35l56->base.dev, ".%s file required but not found\n", "bin");
|
||||
goto err_fw_release;
|
||||
}
|
||||
}
|
||||
|
||||
mutex_lock(&cs35l56->base.irq_lock);
|
||||
|
||||
@@ -214,7 +214,7 @@ static int hda_reg_read_coef(struct hdac_device *codec, unsigned int reg,
|
||||
err = snd_hdac_exec_verb(codec, verb, 0, NULL);
|
||||
if (err < 0)
|
||||
return err;
|
||||
verb = (reg & ~0xfffff) | (AC_VERB_GET_COEF_INDEX << 8);
|
||||
verb = (reg & ~0xfffff) | (AC_VERB_GET_PROC_COEF << 8);
|
||||
return snd_hdac_exec_verb(codec, verb, 0, val);
|
||||
}
|
||||
|
||||
@@ -232,7 +232,7 @@ static int hda_reg_write_coef(struct hdac_device *codec, unsigned int reg,
|
||||
err = snd_hdac_exec_verb(codec, verb, 0, NULL);
|
||||
if (err < 0)
|
||||
return err;
|
||||
verb = (reg & ~0xfffff) | (AC_VERB_GET_COEF_INDEX << 8) |
|
||||
verb = (reg & ~0xfffff) | (AC_VERB_SET_PROC_COEF << 8) |
|
||||
(val & 0xffff);
|
||||
return snd_hdac_exec_verb(codec, verb, 0, NULL);
|
||||
}
|
||||
|
||||
@@ -15,13 +15,17 @@ config SND_SOC_AMD_ACP_COMMON
|
||||
|
||||
config SND_SOC_ACPI_AMD_MATCH
|
||||
tristate
|
||||
select SND_SOC_ACPI_AMD_SDCA_QUIRKS if SND_SOC_SDCA
|
||||
select SND_SOC_ACPI if ACPI
|
||||
|
||||
config SND_SOC_ACPI_AMD_SDCA_QUIRKS
|
||||
tristate
|
||||
depends on ACPI
|
||||
bool "AMD ACPI SDCA quirks"
|
||||
depends on SND_SOC_ACPI_AMD_MATCH
|
||||
depends on SND_SOC_SDCA
|
||||
depends on SND_SOC_ACPI_AMD_MATCH = m || SND_SOC_SDCA = y
|
||||
default y
|
||||
help
|
||||
Enable SDCA quirk support for AMD ACPI match tables.
|
||||
This is compiled into the snd-soc-acpi-amd-match module.
|
||||
|
||||
if SND_SOC_AMD_ACP_COMMON
|
||||
|
||||
|
||||
@@ -24,10 +24,10 @@ snd-acp-mach-y := acp-mach-common.o
|
||||
snd-acp-legacy-mach-y := acp-legacy-mach.o acp3x-es83xx/acp3x-es83xx.o
|
||||
snd-acp-sof-mach-y := acp-sof-mach.o
|
||||
snd-soc-acpi-amd-match-y := amd-acp63-acpi-match.o amd-acp70-acpi-match.o
|
||||
snd-soc-acpi-amd-match-$(CONFIG_SND_SOC_ACPI_AMD_SDCA_QUIRKS) += soc-acpi-amd-sdca-quirks.o
|
||||
snd-acp-sdw-mach-y := acp-sdw-mach-common.o
|
||||
snd-acp-sdw-sof-mach-y += acp-sdw-sof-mach.o
|
||||
snd-acp-sdw-legacy-mach-y += acp-sdw-legacy-mach.o
|
||||
snd-soc-acpi-amd-sdca-quirks-y += soc-acpi-amd-sdca-quirks.o
|
||||
|
||||
obj-$(CONFIG_SND_SOC_AMD_ACP_PCM) += snd-acp-pcm.o
|
||||
obj-$(CONFIG_SND_SOC_AMD_ACP_I2S) += snd-acp-i2s.o
|
||||
@@ -41,7 +41,6 @@ obj-$(CONFIG_SND_AMD_ASOC_REMBRANDT) += snd-acp-rembrandt.o
|
||||
obj-$(CONFIG_SND_AMD_ASOC_ACP63) += snd-acp63.o
|
||||
obj-$(CONFIG_SND_AMD_ASOC_ACP70) += snd-acp70.o
|
||||
|
||||
obj-$(CONFIG_SND_SOC_ACPI_AMD_SDCA_QUIRKS) += snd-soc-acpi-amd-sdca-quirks.o
|
||||
obj-$(CONFIG_SND_AMD_SOUNDWIRE_ACPI) += snd-amd-sdw-acpi.o
|
||||
obj-$(CONFIG_SND_SOC_AMD_MACH_COMMON) += snd-acp-mach.o
|
||||
obj-$(CONFIG_SND_SOC_AMD_LEGACY_MACH) += snd-acp-legacy-mach.o
|
||||
|
||||
@@ -553,6 +553,46 @@ static const struct snd_soc_acpi_link_adr acp70_rt722_l0_rt1320_l1[] = {
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_adr_device tas2783_2_adr[] = {
|
||||
{
|
||||
/* left */
|
||||
.adr = 0x00003c0102000001ull,
|
||||
.num_endpoints = 1,
|
||||
.endpoints = &spk_l_endpoint,
|
||||
.name_prefix = "tas2783-1",
|
||||
},
|
||||
{
|
||||
/* right */
|
||||
.adr = 0x00003d0102000001ull,
|
||||
.num_endpoints = 1,
|
||||
.endpoints = &spk_l_endpoint,
|
||||
.name_prefix = "tas2783-2",
|
||||
},
|
||||
{
|
||||
/* left */
|
||||
.adr = 0x0000390102000001ull,
|
||||
.num_endpoints = 1,
|
||||
.endpoints = &spk_r_endpoint,
|
||||
.name_prefix = "tas2783-3",
|
||||
},
|
||||
{
|
||||
/* right */
|
||||
.adr = 0x00003a0102000001ull,
|
||||
.num_endpoints = 1,
|
||||
.endpoints = &spk_r_endpoint,
|
||||
.name_prefix = "tas2783-4",
|
||||
},
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_link_adr acp70_tas2783_2[] = {
|
||||
{
|
||||
.mask = BIT(0),
|
||||
.num_adr = ARRAY_SIZE(tas2783_2_adr),
|
||||
.adr_d = tas2783_2_adr,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_adr_device rt1320_0_single_adr[] = {
|
||||
{
|
||||
.adr = 0x000030025D132001ull,
|
||||
@@ -659,6 +699,11 @@ static const struct snd_soc_acpi_link_adr acp70_rt721_only[] = {
|
||||
};
|
||||
|
||||
struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sdw_machines[] = {
|
||||
{
|
||||
.link_mask = BIT(0),
|
||||
.links = acp70_tas2783_2,
|
||||
.drv_name = "amd_sdw",
|
||||
},
|
||||
{
|
||||
.link_mask = BIT(0) | BIT(1),
|
||||
.links = acp70_rt1320_l0_rt722_l1,
|
||||
@@ -775,5 +820,5 @@ MODULE_DESCRIPTION("AMD ACP7.0 & ACP7.1 tables and support for ACPI enumeration"
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Vijendar.Mukunda@amd.com");
|
||||
#if IS_ENABLED(CONFIG_SND_SOC_ACPI_AMD_SDCA_QUIRKS)
|
||||
MODULE_IMPORT_NS("SND_SOC_ACPI_AMD_SDCA_QUIRKS");
|
||||
MODULE_IMPORT_NS("SND_SOC_SDCA");
|
||||
#endif
|
||||
|
||||
@@ -35,8 +35,4 @@ bool snd_soc_acpi_amd_sdca_is_device_rt712_vb(void *arg)
|
||||
|
||||
return false;
|
||||
}
|
||||
EXPORT_SYMBOL_NS(snd_soc_acpi_amd_sdca_is_device_rt712_vb, "SND_SOC_ACPI_AMD_SDCA_QUIRKS");
|
||||
|
||||
MODULE_DESCRIPTION("ASoC ACPI AMD SDCA quirks");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_IMPORT_NS("SND_SOC_SDCA");
|
||||
|
||||
@@ -248,7 +248,7 @@ static irqreturn_t acp63_irq_handler(int irq, void *dev_id)
|
||||
if (sdw_dma_irq_flag)
|
||||
return IRQ_WAKE_THREAD;
|
||||
|
||||
if (irq_flag | wake_irq_flag)
|
||||
if (irq_flag || wake_irq_flag)
|
||||
return IRQ_HANDLED;
|
||||
else
|
||||
return IRQ_NONE;
|
||||
@@ -602,7 +602,7 @@ static int snd_acp63_probe(struct pci_dev *pci,
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
ret = pci_request_regions(pci, "AMD ACP6.2 audio");
|
||||
ret = pci_request_regions(pci, "AMD ACP6.3 audio");
|
||||
if (ret < 0) {
|
||||
dev_err(&pci->dev, "pci_request_regions failed\n");
|
||||
goto disable_pci;
|
||||
@@ -693,8 +693,37 @@ static int snd_acp_runtime_resume(struct device *dev)
|
||||
return acp_hw_runtime_resume(dev);
|
||||
}
|
||||
|
||||
static void acp_disable_msi_on_resume(struct pci_dev *pdev)
|
||||
{
|
||||
u16 control;
|
||||
|
||||
if (!pdev->msi_cap)
|
||||
return;
|
||||
|
||||
pci_read_config_word(pdev, pdev->msi_cap + PCI_MSI_FLAGS, &control);
|
||||
if (control & PCI_MSI_FLAGS_ENABLE) {
|
||||
dev_warn(&pdev->dev,
|
||||
"ACP: MSI unexpectedly enabled after resume (flags=0x%04x), disabling\n",
|
||||
control);
|
||||
control &= ~PCI_MSI_FLAGS_ENABLE;
|
||||
pci_write_config_word(pdev, pdev->msi_cap + PCI_MSI_FLAGS, control);
|
||||
}
|
||||
}
|
||||
|
||||
static int snd_acp_resume(struct device *dev)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(dev);
|
||||
|
||||
/*
|
||||
* BIOS/firmware may re-enable MSI in PCI config space during
|
||||
* system resume even though this driver only uses legacy INTx
|
||||
* interrupts. If MSI is left enabled with stale address/data
|
||||
* registers, the device will write interrupts to a bogus address
|
||||
* causing IOMMU IO_PAGE_FAULT and interrupt delivery failure.
|
||||
* Explicitly clear the MSI Enable bit before reinitializing
|
||||
* the ACP hardware.
|
||||
*/
|
||||
acp_disable_msi_on_resume(pdev);
|
||||
return acp_hw_resume(dev);
|
||||
}
|
||||
|
||||
|
||||
@@ -310,6 +310,7 @@ irqreturn_t cs42l43_bias_detect_clamp(int irq, void *data)
|
||||
#define CS42L43_JACK_ABSENT 0x0
|
||||
|
||||
#define CS42L43_JACK_OPTICAL (SND_JACK_MECHANICAL | SND_JACK_AVOUT)
|
||||
#define CS42L43_JACK_MICROPHONE (SND_JACK_MECHANICAL | SND_JACK_MICROPHONE)
|
||||
#define CS42L43_JACK_HEADPHONE (SND_JACK_MECHANICAL | SND_JACK_HEADPHONE)
|
||||
#define CS42L43_JACK_HEADSET (SND_JACK_MECHANICAL | SND_JACK_HEADSET)
|
||||
#define CS42L43_JACK_LINEOUT (SND_JACK_MECHANICAL | SND_JACK_LINEOUT)
|
||||
@@ -871,7 +872,7 @@ static const struct cs42l43_jack_override_mode {
|
||||
.hsdet_mode = CS42L43_JACK_3_POLE_SWITCHES,
|
||||
.mic_ctrl = (0x3 << CS42L43_JACK_STEREO_CONFIG_SHIFT) |
|
||||
CS42L43_HS1_BIAS_EN_MASK | CS42L43_HS2_BIAS_EN_MASK,
|
||||
.report = CS42L43_JACK_LINEIN,
|
||||
.report = CS42L43_JACK_MICROPHONE,
|
||||
},
|
||||
[CS42L43_JACK_RAW_OPTICAL] = {
|
||||
.hsdet_mode = CS42L43_JACK_3_POLE_SWITCHES,
|
||||
|
||||
@@ -1843,6 +1843,15 @@ static void rt712_sdca_vb_io_init(struct rt712_sdca_priv *rt712)
|
||||
}
|
||||
}
|
||||
|
||||
static void rt712_sdca_reset(struct rt712_sdca_priv *rt712)
|
||||
{
|
||||
rt712_sdca_index_update_bits(rt712, RT712_VENDOR_REG,
|
||||
RT712_PARA_VERB_CTL, RT712_HIDDEN_REG_SW_RESET,
|
||||
RT712_HIDDEN_REG_SW_RESET);
|
||||
rt712_sdca_index_update_bits(rt712, RT712_VENDOR_HDA_CTL,
|
||||
RT712_HDA_LEGACY_RESET_CTL, 0x1, 0x1);
|
||||
}
|
||||
|
||||
int rt712_sdca_io_init(struct device *dev, struct sdw_slave *slave)
|
||||
{
|
||||
struct rt712_sdca_priv *rt712 = dev_get_drvdata(dev);
|
||||
@@ -1870,6 +1879,8 @@ int rt712_sdca_io_init(struct device *dev, struct sdw_slave *slave)
|
||||
|
||||
pm_runtime_get_noresume(&slave->dev);
|
||||
|
||||
rt712_sdca_reset(rt712);
|
||||
|
||||
rt712_sdca_index_read(rt712, RT712_VENDOR_REG, RT712_JD_PRODUCT_NUM, &val);
|
||||
rt712->hw_id = (val & 0xf000) >> 12;
|
||||
rt712->version_id = (val & 0x0f00) >> 8;
|
||||
|
||||
@@ -675,11 +675,12 @@ static int tas2562_parse_dt(struct tas2562_data *tas2562)
|
||||
if (tas2562->sdz_gpio == NULL) {
|
||||
tas2562->sdz_gpio = devm_gpiod_get_optional(dev, "shut-down",
|
||||
GPIOD_OUT_HIGH);
|
||||
if (IS_ERR(tas2562->sdz_gpio))
|
||||
if (IS_ERR(tas2562->sdz_gpio)) {
|
||||
if (PTR_ERR(tas2562->sdz_gpio) == -EPROBE_DEFER)
|
||||
return -EPROBE_DEFER;
|
||||
|
||||
tas2562->sdz_gpio = NULL;
|
||||
tas2562->sdz_gpio = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (tas2562->model_id == TAS2110)
|
||||
|
||||
@@ -855,6 +855,7 @@ static const struct snd_pci_quirk sof_sdw_ssid_quirk_table[] = {
|
||||
SND_PCI_QUIRK(0x17aa, 0x2348, "Lenovo P16", SOC_SDW_CODEC_MIC),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2349, "Lenovo P1", SOC_SDW_CODEC_MIC),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3821, "Lenovo 0x3821", SOC_SDW_SIDECAR_AMPS),
|
||||
SND_PCI_QUIRK(0x17aa, 0x383c, "Lenovo 0x383c", SOC_SDW_SIDECAR_AMPS),
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#define AIU_MEM_IEC958_CONTROL_MODE_16BIT BIT(7)
|
||||
#define AIU_MEM_IEC958_CONTROL_MODE_LINEAR BIT(8)
|
||||
#define AIU_MEM_IEC958_BUF_CNTL_INIT BIT(0)
|
||||
#define AIU_RST_SOFT_958_FAST BIT(2)
|
||||
|
||||
#define AIU_FIFO_SPDIF_BLOCK 8
|
||||
|
||||
@@ -68,11 +69,15 @@ static int fifo_spdif_trigger(struct snd_pcm_substream *substream, int cmd,
|
||||
case SNDRV_PCM_TRIGGER_START:
|
||||
case SNDRV_PCM_TRIGGER_RESUME:
|
||||
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
|
||||
snd_soc_component_write(component, AIU_RST_SOFT,
|
||||
AIU_RST_SOFT_958_FAST);
|
||||
fifo_spdif_dcu_enable(component, true);
|
||||
break;
|
||||
case SNDRV_PCM_TRIGGER_SUSPEND:
|
||||
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
|
||||
case SNDRV_PCM_TRIGGER_STOP:
|
||||
snd_soc_component_write(component, AIU_RST_SOFT,
|
||||
AIU_RST_SOFT_958_FAST);
|
||||
fifo_spdif_dcu_enable(component, false);
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -164,6 +164,7 @@ static int sc8280xp_platform_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
static const struct of_device_id snd_sc8280xp_dt_match[] = {
|
||||
{.compatible = "qcom,eliza-sndcard", "eliza"},
|
||||
{.compatible = "qcom,kaanapali-sndcard", "kaanapali"},
|
||||
{.compatible = "qcom,qcm6490-idp-sndcard", "qcm6490"},
|
||||
{.compatible = "qcom,qcs615-sndcard", "qcs615"},
|
||||
|
||||
@@ -134,14 +134,22 @@ static void usb_ep1_command_reply_dispatch (struct urb* urb)
|
||||
struct device *dev = &urb->dev->dev;
|
||||
struct snd_usb_caiaqdev *cdev = urb->context;
|
||||
unsigned char *buf = urb->transfer_buffer;
|
||||
unsigned int payload_len;
|
||||
unsigned int copy_len;
|
||||
|
||||
if (urb->status || !cdev) {
|
||||
dev_warn(dev, "received EP1 urb->status = %i\n", urb->status);
|
||||
return;
|
||||
}
|
||||
if (urb->actual_length < 1)
|
||||
return;
|
||||
|
||||
payload_len = urb->actual_length - 1;
|
||||
|
||||
switch(buf[0]) {
|
||||
case EP1_CMD_GET_DEVICE_INFO:
|
||||
if (payload_len < sizeof(struct caiaq_device_spec))
|
||||
break;
|
||||
memcpy(&cdev->spec, buf+1, sizeof(struct caiaq_device_spec));
|
||||
cdev->spec.fw_version = le16_to_cpu(cdev->spec.fw_version);
|
||||
dev_dbg(dev, "device spec (firmware %d): audio: %d in, %d out, "
|
||||
@@ -157,18 +165,21 @@ static void usb_ep1_command_reply_dispatch (struct urb* urb)
|
||||
wake_up(&cdev->ep1_wait_queue);
|
||||
break;
|
||||
case EP1_CMD_AUDIO_PARAMS:
|
||||
if (payload_len < 1)
|
||||
break;
|
||||
cdev->audio_parm_answer = buf[1];
|
||||
wake_up(&cdev->ep1_wait_queue);
|
||||
break;
|
||||
case EP1_CMD_MIDI_READ:
|
||||
if (urb->actual_length < 3 || urb->actual_length - 3 < buf[2])
|
||||
break;
|
||||
snd_usb_caiaq_midi_handle_input(cdev, buf[1], buf + 3, buf[2]);
|
||||
break;
|
||||
case EP1_CMD_READ_IO:
|
||||
if (cdev->chip.usb_id ==
|
||||
USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_AUDIO8DJ)) {
|
||||
if (urb->actual_length > sizeof(cdev->control_state))
|
||||
urb->actual_length = sizeof(cdev->control_state);
|
||||
memcpy(cdev->control_state, buf + 1, urb->actual_length);
|
||||
copy_len = min_t(unsigned int, payload_len, sizeof(cdev->control_state));
|
||||
memcpy(cdev->control_state, buf + 1, copy_len);
|
||||
wake_up(&cdev->ep1_wait_queue);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -203,6 +203,8 @@ static void snd_caiaq_input_read_analog(struct snd_usb_caiaqdev *cdev,
|
||||
|
||||
switch (cdev->chip.usb_id) {
|
||||
case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_RIGKONTROL2):
|
||||
if (len < 6)
|
||||
return;
|
||||
snd_caiaq_input_report_abs(cdev, ABS_X, buf, 2);
|
||||
snd_caiaq_input_report_abs(cdev, ABS_Y, buf, 0);
|
||||
snd_caiaq_input_report_abs(cdev, ABS_Z, buf, 1);
|
||||
@@ -210,11 +212,15 @@ static void snd_caiaq_input_read_analog(struct snd_usb_caiaqdev *cdev,
|
||||
case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_RIGKONTROL3):
|
||||
case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER):
|
||||
case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_KORECONTROLLER2):
|
||||
if (len < 6)
|
||||
return;
|
||||
snd_caiaq_input_report_abs(cdev, ABS_X, buf, 0);
|
||||
snd_caiaq_input_report_abs(cdev, ABS_Y, buf, 1);
|
||||
snd_caiaq_input_report_abs(cdev, ABS_Z, buf, 2);
|
||||
break;
|
||||
case USB_ID(USB_VID_NATIVEINSTRUMENTS, USB_PID_TRAKTORKONTROLX1):
|
||||
if (len < 16)
|
||||
return;
|
||||
snd_caiaq_input_report_abs(cdev, ABS_HAT0X, buf, 4);
|
||||
snd_caiaq_input_report_abs(cdev, ABS_HAT0Y, buf, 2);
|
||||
snd_caiaq_input_report_abs(cdev, ABS_HAT1X, buf, 6);
|
||||
|
||||
@@ -1473,8 +1473,8 @@ static int get_min_max_with_quirks(struct usb_mixer_elem_info *cval,
|
||||
if (!cval->cmask) {
|
||||
snd_usb_set_cur_mix_value(cval, 0, 0, cval->max);
|
||||
} else {
|
||||
idx = 0;
|
||||
for (i = 0; i < MAX_CHANNELS; i++) {
|
||||
idx = 0;
|
||||
if (cval->cmask & BIT(i)) {
|
||||
snd_usb_set_cur_mix_value(cval, i + 1, idx, cval->max);
|
||||
idx++;
|
||||
|
||||
@@ -2210,6 +2210,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
|
||||
QUIRK_FLAG_FORCE_IFACE_RESET | QUIRK_FLAG_IFACE_DELAY),
|
||||
DEVICE_FLG(0x03f0, 0x654a, /* HP 320 FHD Webcam */
|
||||
QUIRK_FLAG_GET_SAMPLE_RATE | QUIRK_FLAG_MIC_RES_16),
|
||||
DEVICE_FLG(0x040b, 0x0897, /* Weltrend Semiconductor, sold as Redragon H510-PRO Wireless headset */
|
||||
QUIRK_FLAG_MIXER_GET_CUR_BROKEN),
|
||||
DEVICE_FLG(0x041e, 0x3000, /* Creative SB Extigy */
|
||||
QUIRK_FLAG_IGNORE_CTL_ERROR),
|
||||
DEVICE_FLG(0x041e, 0x4080, /* Creative Live Cam VF0610 */
|
||||
@@ -2461,6 +2463,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
|
||||
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 */
|
||||
QUIRK_FLAG_GET_SAMPLE_RATE),
|
||||
DEVICE_FLG(0x2a70, 0x1881, /* OnePlus Technology (Shenzhen) Co., Ltd. BE02T */
|
||||
@@ -2483,6 +2487,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
|
||||
QUIRK_FLAG_MIXER_GET_CUR_BROKEN),
|
||||
DEVICE_FLG(0x2fc6, 0xf06b, /* MOONDROP Moonriver2 Ti */
|
||||
QUIRK_FLAG_CTL_MSG_DELAY),
|
||||
DEVICE_FLG(0x2fc6, 0xf0b5, /* iBasso DC-Elite */
|
||||
QUIRK_FLAG_CTL_MSG_DELAY_1M),
|
||||
DEVICE_FLG(0x2fc6, 0xf0b7, /* iBasso DC07 Pro */
|
||||
QUIRK_FLAG_CTL_MSG_DELAY_1M),
|
||||
DEVICE_FLG(0x30be, 0x0101, /* Schiit Hel */
|
||||
|
||||
@@ -84,6 +84,7 @@ static void find_controls(void)
|
||||
if (err < 0) {
|
||||
ksft_print_msg("Failed to get hctl for card %d: %s\n",
|
||||
card, snd_strerror(err));
|
||||
free(card_data);
|
||||
goto next_card;
|
||||
}
|
||||
|
||||
@@ -339,9 +340,9 @@ static bool ctl_value_index_valid(struct ctl_data *ctl,
|
||||
}
|
||||
|
||||
if (int64_val > snd_ctl_elem_info_get_max64(ctl->info)) {
|
||||
ksft_print_msg("%s.%d value %lld more than maximum %ld\n",
|
||||
ksft_print_msg("%s.%d value %lld more than maximum %lld\n",
|
||||
ctl->name, index, int64_val,
|
||||
snd_ctl_elem_info_get_max(ctl->info));
|
||||
snd_ctl_elem_info_get_max64(ctl->info));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user