mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 06:31:52 +00:00
sound fixes for 6.6-rc6
Here is the collection of pending fixes since a couple of weeks ago, which became slightly bigger than usual due to my vacation. Most of changes are about ASoC device-specific fixes while USB- and HD-audio received quirks as usual. All fixes, including two ASoC core changes, are reasonably small and safe to apply. -----BEGIN PGP SIGNATURE----- iQJCBAABCAAsFiEEIXTw5fNLNI7mMiVaLtJE4w1nLE8FAmUk8dAOHHRpd2FpQHN1 c2UuZGUACgkQLtJE4w1nLE9B7w/8DZfnJmNWeG7h7Y2guTavAiil2K/0j5NFHl8E RW6XM/qBbnRPAlqN4j5OCYXRUC3VbuWWiQmdsDv0MOuyvQ/6v01pxK3IIlQ0gvUo Eo7e1gsnBVgU2le68HEGpU9CctGKUGUuOF2j8bKjjXWzOGurcJaMPUQPhew03z55 ZzvMjfqSMGFvvOpeVJsSNFFodHxlW96KY2kmJhT0YSegleqJN70ltY1041wKBfC7 y6CaJLD5yNlcTu+ZmAIm25jLW6m2NjI4wOgcRLc5P+CTEPqQUObCsZcgOJW/+SWt w8IybBF9Hx92KWiuorpxts7ob+lHAh0kyQrkMn1J1uKNfNr0keZWAF1QKZEt2KZP vckacgu9DYSPGgeDiL7UeNAr9tZLPyvvzPcNDYBwg3BLs3d0WLcSR3xvKdBgc9BL waN2wdsDEyVPCCxtsEldUhLuM6tp32MHhTC3Z+9FtT+qLzpIfG7GpL2VV9/xU8pg 7XzGWtt3c6+Hwdb0IZ6LABsjblcBQclovv9ywFqRD9azuYdTa2rvV0m2b1bHBqcm sxYd7ddv0lDq3kJYrIZHb4JNwWEpJkEu0b+tqPGdRbSY/UWqBwCQSZQuhVFxxofX XcNTTuLsBrPV5q/zRFJPxp1dlv4fqKPjiGOj/Q7xXgFrqgagDuK0IgGKjAsrENfz iQ03Vro= =2SOT -----END PGP SIGNATURE----- Merge tag 'sound-6.6-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound fixes from Takashi Iwai: "A collection of pending fixes since a couple of weeks ago, which became slightly bigger than usual due to my vacation. Most of changes are about ASoC device-specific fixes while USB- and HD-audio received quirks as usual. All fixes, including two ASoC core changes, are reasonably small and safe to apply" * tag 'sound-6.6-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (23 commits) ALSA: usb-audio: Fix microphone sound on Nexigo webcam. ALSA: hda/realtek: Change model for Intel RVP board ALSA: usb-audio: Fix microphone sound on Opencomm2 Headset ALSA: hda: cs35l41: Cleanup and fix double free in firmware request ASoC: dt-bindings: fsl,micfil: Document #sound-dai-cells ASoC: amd: yc: Fix non-functional mic on Lenovo 82YM ASoC: tlv320adc3xxx: BUG: Correct micbias setting ASoC: rt5682: Fix regulator enable/disable sequence ASoC: hdmi-codec: Fix broken channel map reporting ASoC: core: Do not call link_exit() on uninitialized rtd objects ASoC: core: Print component name when printing log ASoC: SOF: amd: fix for firmware reload failure after playback ASoC: fsl-asoc-card: use integer type for fll_id and pll_id ASoC: fsl_sai: Don't disable bitclock for i.MX8MP dt-bindings: ASoC: rockchip: Add compatible for RK3128 spdif ASoC: soc-generic-dmaengine-pcm: Fix function name in comment ALSA: hda/realtek - ALC287 merge RTK codec with CS CS35L41 AMP ASoC: simple-card: fixup asoc_simple_probe() error handling ASoC: simple-card-utils: fixup simple_util_startup() error handling ASoC: Intel: sof_sdw: add support for SKU 0B14 ...
This commit is contained in:
commit
68d187ec14
@ -56,6 +56,9 @@ properties:
|
||||
- const: clkext3
|
||||
minItems: 2
|
||||
|
||||
"#sound-dai-cells":
|
||||
const: 0
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
@ -26,6 +26,7 @@ properties:
|
||||
- const: rockchip,rk3568-spdif
|
||||
- items:
|
||||
- enum:
|
||||
- rockchip,rk3128-spdif
|
||||
- rockchip,rk3188-spdif
|
||||
- rockchip,rk3288-spdif
|
||||
- rockchip,rk3308-spdif
|
||||
|
@ -1126,6 +1126,8 @@ struct snd_soc_pcm_runtime {
|
||||
unsigned int pop_wait:1;
|
||||
unsigned int fe_compr:1; /* for Dynamic PCM */
|
||||
|
||||
bool initialized;
|
||||
|
||||
int num_components;
|
||||
struct snd_soc_component *components[]; /* CPU/Codec/Platform */
|
||||
};
|
||||
|
@ -185,10 +185,14 @@ static int cs35l41_request_firmware_files_spkid(struct cs35l41_hda *cs35l41,
|
||||
cs35l41->speaker_id, "wmfw");
|
||||
if (!ret) {
|
||||
/* try cirrus/part-dspN-fwtype-sub<-spkidN><-ampname>.bin */
|
||||
return cs35l41_request_firmware_file(cs35l41, coeff_firmware, coeff_filename,
|
||||
CS35L41_FIRMWARE_ROOT,
|
||||
cs35l41->acpi_subsystem_id, cs35l41->amp_name,
|
||||
cs35l41->speaker_id, "bin");
|
||||
ret = cs35l41_request_firmware_file(cs35l41, coeff_firmware, coeff_filename,
|
||||
CS35L41_FIRMWARE_ROOT,
|
||||
cs35l41->acpi_subsystem_id, cs35l41->amp_name,
|
||||
cs35l41->speaker_id, "bin");
|
||||
if (ret)
|
||||
goto coeff_err;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* try cirrus/part-dspN-fwtype-sub<-ampname>.wmfw */
|
||||
@ -197,10 +201,14 @@ static int cs35l41_request_firmware_files_spkid(struct cs35l41_hda *cs35l41,
|
||||
cs35l41->amp_name, -1, "wmfw");
|
||||
if (!ret) {
|
||||
/* try cirrus/part-dspN-fwtype-sub<-spkidN><-ampname>.bin */
|
||||
return cs35l41_request_firmware_file(cs35l41, coeff_firmware, coeff_filename,
|
||||
CS35L41_FIRMWARE_ROOT,
|
||||
cs35l41->acpi_subsystem_id, cs35l41->amp_name,
|
||||
cs35l41->speaker_id, "bin");
|
||||
ret = cs35l41_request_firmware_file(cs35l41, coeff_firmware, coeff_filename,
|
||||
CS35L41_FIRMWARE_ROOT,
|
||||
cs35l41->acpi_subsystem_id, cs35l41->amp_name,
|
||||
cs35l41->speaker_id, "bin");
|
||||
if (ret)
|
||||
goto coeff_err;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* try cirrus/part-dspN-fwtype-sub<-spkidN>.wmfw */
|
||||
@ -215,10 +223,14 @@ static int cs35l41_request_firmware_files_spkid(struct cs35l41_hda *cs35l41,
|
||||
cs35l41->amp_name, cs35l41->speaker_id, "bin");
|
||||
if (ret)
|
||||
/* try cirrus/part-dspN-fwtype-sub<-spkidN>.bin */
|
||||
return cs35l41_request_firmware_file(cs35l41, coeff_firmware,
|
||||
coeff_filename, CS35L41_FIRMWARE_ROOT,
|
||||
cs35l41->acpi_subsystem_id, NULL,
|
||||
cs35l41->speaker_id, "bin");
|
||||
ret = cs35l41_request_firmware_file(cs35l41, coeff_firmware,
|
||||
coeff_filename, CS35L41_FIRMWARE_ROOT,
|
||||
cs35l41->acpi_subsystem_id, NULL,
|
||||
cs35l41->speaker_id, "bin");
|
||||
if (ret)
|
||||
goto coeff_err;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* try cirrus/part-dspN-fwtype-sub.wmfw */
|
||||
@ -233,12 +245,50 @@ static int cs35l41_request_firmware_files_spkid(struct cs35l41_hda *cs35l41,
|
||||
cs35l41->speaker_id, "bin");
|
||||
if (ret)
|
||||
/* try cirrus/part-dspN-fwtype-sub<-spkidN>.bin */
|
||||
return cs35l41_request_firmware_file(cs35l41, coeff_firmware,
|
||||
coeff_filename, CS35L41_FIRMWARE_ROOT,
|
||||
cs35l41->acpi_subsystem_id, NULL,
|
||||
cs35l41->speaker_id, "bin");
|
||||
ret = cs35l41_request_firmware_file(cs35l41, coeff_firmware,
|
||||
coeff_filename, CS35L41_FIRMWARE_ROOT,
|
||||
cs35l41->acpi_subsystem_id, NULL,
|
||||
cs35l41->speaker_id, "bin");
|
||||
if (ret)
|
||||
goto coeff_err;
|
||||
}
|
||||
|
||||
return ret;
|
||||
coeff_err:
|
||||
release_firmware(*wmfw_firmware);
|
||||
kfree(*wmfw_filename);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int cs35l41_fallback_firmware_file(struct cs35l41_hda *cs35l41,
|
||||
const struct firmware **wmfw_firmware,
|
||||
char **wmfw_filename,
|
||||
const struct firmware **coeff_firmware,
|
||||
char **coeff_filename)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* Handle fallback */
|
||||
dev_warn(cs35l41->dev, "Falling back to default firmware.\n");
|
||||
|
||||
/* fallback try cirrus/part-dspN-fwtype.wmfw */
|
||||
ret = cs35l41_request_firmware_file(cs35l41, wmfw_firmware, wmfw_filename,
|
||||
CS35L41_FIRMWARE_ROOT, NULL, NULL, -1, "wmfw");
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
/* fallback try cirrus/part-dspN-fwtype.bin */
|
||||
ret = cs35l41_request_firmware_file(cs35l41, coeff_firmware, coeff_filename,
|
||||
CS35L41_FIRMWARE_ROOT, NULL, NULL, -1, "bin");
|
||||
if (ret) {
|
||||
release_firmware(*wmfw_firmware);
|
||||
kfree(*wmfw_filename);
|
||||
goto err;
|
||||
}
|
||||
return 0;
|
||||
|
||||
err:
|
||||
dev_warn(cs35l41->dev, "Unable to find firmware and tuning\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -254,7 +304,6 @@ static int cs35l41_request_firmware_files(struct cs35l41_hda *cs35l41,
|
||||
ret = cs35l41_request_firmware_files_spkid(cs35l41, wmfw_firmware, wmfw_filename,
|
||||
coeff_firmware, coeff_filename);
|
||||
goto out;
|
||||
|
||||
}
|
||||
|
||||
/* try cirrus/part-dspN-fwtype-sub<-ampname>.wmfw */
|
||||
@ -267,6 +316,9 @@ static int cs35l41_request_firmware_files(struct cs35l41_hda *cs35l41,
|
||||
CS35L41_FIRMWARE_ROOT,
|
||||
cs35l41->acpi_subsystem_id, cs35l41->amp_name,
|
||||
-1, "bin");
|
||||
if (ret)
|
||||
goto coeff_err;
|
||||
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -286,32 +338,23 @@ static int cs35l41_request_firmware_files(struct cs35l41_hda *cs35l41,
|
||||
CS35L41_FIRMWARE_ROOT,
|
||||
cs35l41->acpi_subsystem_id, NULL, -1,
|
||||
"bin");
|
||||
if (ret)
|
||||
goto coeff_err;
|
||||
}
|
||||
|
||||
out:
|
||||
if (!ret)
|
||||
return 0;
|
||||
if (ret)
|
||||
/* if all attempts at finding firmware fail, try fallback */
|
||||
goto fallback;
|
||||
|
||||
/* Handle fallback */
|
||||
dev_warn(cs35l41->dev, "Falling back to default firmware.\n");
|
||||
return 0;
|
||||
|
||||
coeff_err:
|
||||
release_firmware(*wmfw_firmware);
|
||||
kfree(*wmfw_filename);
|
||||
|
||||
/* fallback try cirrus/part-dspN-fwtype.wmfw */
|
||||
ret = cs35l41_request_firmware_file(cs35l41, wmfw_firmware, wmfw_filename,
|
||||
CS35L41_FIRMWARE_ROOT, NULL, NULL, -1, "wmfw");
|
||||
if (!ret)
|
||||
/* fallback try cirrus/part-dspN-fwtype.bin */
|
||||
ret = cs35l41_request_firmware_file(cs35l41, coeff_firmware, coeff_filename,
|
||||
CS35L41_FIRMWARE_ROOT, NULL, NULL, -1, "bin");
|
||||
|
||||
if (ret) {
|
||||
release_firmware(*wmfw_firmware);
|
||||
kfree(*wmfw_filename);
|
||||
dev_warn(cs35l41->dev, "Unable to find firmware and tuning\n");
|
||||
}
|
||||
return ret;
|
||||
fallback:
|
||||
return cs35l41_fallback_firmware_file(cs35l41, wmfw_firmware, wmfw_filename,
|
||||
coeff_firmware, coeff_filename);
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_EFI)
|
||||
|
@ -7343,6 +7343,7 @@ enum {
|
||||
ALC245_FIXUP_HP_MUTE_LED_COEFBIT,
|
||||
ALC245_FIXUP_HP_X360_MUTE_LEDS,
|
||||
ALC287_FIXUP_THINKPAD_I2S_SPK,
|
||||
ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD,
|
||||
};
|
||||
|
||||
/* A special fixup for Lenovo C940 and Yoga Duet 7;
|
||||
@ -9441,6 +9442,12 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc287_fixup_bind_dacs,
|
||||
},
|
||||
[ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc287_fixup_bind_dacs,
|
||||
.chained = true,
|
||||
.chain_id = ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
@ -9854,7 +9861,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x10ec, 0x124c, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK),
|
||||
SND_PCI_QUIRK(0x10ec, 0x1252, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK),
|
||||
SND_PCI_QUIRK(0x10ec, 0x1254, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK),
|
||||
SND_PCI_QUIRK(0x10ec, 0x12cc, "Intel Reference board", ALC225_FIXUP_HEADSET_JACK),
|
||||
SND_PCI_QUIRK(0x10ec, 0x12cc, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK),
|
||||
SND_PCI_QUIRK(0x10f7, 0x8338, "Panasonic CF-SZ6", ALC269_FIXUP_HEADSET_MODE),
|
||||
SND_PCI_QUIRK(0x144d, 0xc109, "Samsung Ativ book 9 (NP900X3G)", ALC269_FIXUP_INV_DMIC),
|
||||
SND_PCI_QUIRK(0x144d, 0xc169, "Samsung Notebook 9 Pen (NP930SBE-K01US)", ALC298_FIXUP_SAMSUNG_AMP),
|
||||
@ -9988,14 +9995,14 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x17aa, 0x22be, "Thinkpad X1 Carbon 8th", ALC285_FIXUP_THINKPAD_HEADSET_JACK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x22c1, "Thinkpad P1 Gen 3", ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x22c2, "Thinkpad X1 Extreme Gen 3", ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK),
|
||||
SND_PCI_QUIRK(0x17aa, 0x22f1, "Thinkpad", ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI),
|
||||
SND_PCI_QUIRK(0x17aa, 0x22f2, "Thinkpad", ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI),
|
||||
SND_PCI_QUIRK(0x17aa, 0x22f3, "Thinkpad", ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2316, "Thinkpad P1 Gen 6", ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2317, "Thinkpad P1 Gen 6", ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2318, "Thinkpad Z13 Gen2", ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2319, "Thinkpad Z16 Gen2", ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI),
|
||||
SND_PCI_QUIRK(0x17aa, 0x231a, "Thinkpad Z16 Gen2", ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI),
|
||||
SND_PCI_QUIRK(0x17aa, 0x22f1, "Thinkpad", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
|
||||
SND_PCI_QUIRK(0x17aa, 0x22f2, "Thinkpad", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
|
||||
SND_PCI_QUIRK(0x17aa, 0x22f3, "Thinkpad", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2316, "Thinkpad P1 Gen 6", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2317, "Thinkpad P1 Gen 6", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2318, "Thinkpad Z13 Gen2", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
|
||||
SND_PCI_QUIRK(0x17aa, 0x2319, "Thinkpad Z16 Gen2", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
|
||||
SND_PCI_QUIRK(0x17aa, 0x231a, "Thinkpad Z16 Gen2", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
|
||||
SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
|
||||
SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
|
||||
SND_PCI_QUIRK(0x17aa, 0x310c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
|
||||
@ -10091,7 +10098,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x8086, 0x2074, "Intel NUC 8", ALC233_FIXUP_INTEL_NUC8_DMIC),
|
||||
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", ALC225_FIXUP_HEADSET_JACK),
|
||||
SND_PCI_QUIRK(0x8086, 0x3038, "Intel NUC 13", ALC295_FIXUP_CHROME_BOOK),
|
||||
SND_PCI_QUIRK(0xf111, 0x0001, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
|
||||
|
||||
#if 0
|
||||
|
@ -241,6 +241,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "82V2"),
|
||||
}
|
||||
},
|
||||
{
|
||||
.driver_data = &acp6x_card,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "82YM"),
|
||||
}
|
||||
},
|
||||
{
|
||||
.driver_data = &acp6x_card,
|
||||
.matches = {
|
||||
|
@ -531,7 +531,10 @@ static int hdmi_codec_fill_codec_params(struct snd_soc_dai *dai,
|
||||
hp->sample_rate = sample_rate;
|
||||
hp->channels = channels;
|
||||
|
||||
hcp->chmap_idx = idx;
|
||||
if (pcm_audio)
|
||||
hcp->chmap_idx = ca_id;
|
||||
else
|
||||
hcp->chmap_idx = HDMI_CODEC_CHMAP_IDX_UNKNOWN;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -157,11 +157,6 @@ static int rt5682_i2c_probe(struct i2c_client *i2c)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = devm_add_action_or_reset(&i2c->dev, rt5682_i2c_disable_regulators,
|
||||
rt5682);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = regulator_bulk_enable(ARRAY_SIZE(rt5682->supplies),
|
||||
rt5682->supplies);
|
||||
if (ret) {
|
||||
@ -169,6 +164,11 @@ static int rt5682_i2c_probe(struct i2c_client *i2c)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = devm_add_action_or_reset(&i2c->dev, rt5682_i2c_disable_regulators,
|
||||
rt5682);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = rt5682_get_ldo1(rt5682, &i2c->dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -293,7 +293,7 @@
|
||||
#define ADC3XXX_BYPASS_RPGA 0x80
|
||||
|
||||
/* MICBIAS control bits */
|
||||
#define ADC3XXX_MICBIAS_MASK 0x2
|
||||
#define ADC3XXX_MICBIAS_MASK 0x3
|
||||
#define ADC3XXX_MICBIAS1_SHIFT 5
|
||||
#define ADC3XXX_MICBIAS2_SHIFT 3
|
||||
|
||||
@ -1099,7 +1099,7 @@ static int adc3xxx_parse_dt_micbias(struct adc3xxx *adc3xxx,
|
||||
unsigned int val;
|
||||
|
||||
if (!of_property_read_u32(np, propname, &val)) {
|
||||
if (val >= ADC3XXX_MICBIAS_AVDD) {
|
||||
if (val > ADC3XXX_MICBIAS_AVDD) {
|
||||
dev_err(dev, "Invalid property value for '%s'\n", propname);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -52,8 +52,8 @@ struct codec_priv {
|
||||
unsigned long mclk_freq;
|
||||
unsigned long free_freq;
|
||||
u32 mclk_id;
|
||||
u32 fll_id;
|
||||
u32 pll_id;
|
||||
int fll_id;
|
||||
int pll_id;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -206,7 +206,7 @@ static int fsl_asoc_card_hw_params(struct snd_pcm_substream *substream,
|
||||
}
|
||||
|
||||
/* Specific configuration for PLL */
|
||||
if (codec_priv->pll_id && codec_priv->fll_id) {
|
||||
if (codec_priv->pll_id >= 0 && codec_priv->fll_id >= 0) {
|
||||
if (priv->sample_format == SNDRV_PCM_FORMAT_S24_LE)
|
||||
pll_out = priv->sample_rate * 384;
|
||||
else
|
||||
@ -248,7 +248,7 @@ static int fsl_asoc_card_hw_free(struct snd_pcm_substream *substream)
|
||||
|
||||
priv->streams &= ~BIT(substream->stream);
|
||||
|
||||
if (!priv->streams && codec_priv->pll_id && codec_priv->fll_id) {
|
||||
if (!priv->streams && codec_priv->pll_id >= 0 && codec_priv->fll_id >= 0) {
|
||||
/* Force freq to be free_freq to avoid error message in codec */
|
||||
ret = snd_soc_dai_set_sysclk(asoc_rtd_to_codec(rtd, 0),
|
||||
codec_priv->mclk_id,
|
||||
@ -621,6 +621,10 @@ static int fsl_asoc_card_probe(struct platform_device *pdev)
|
||||
priv->card.dapm_routes = audio_map;
|
||||
priv->card.num_dapm_routes = ARRAY_SIZE(audio_map);
|
||||
priv->card.driver_name = DRIVER_NAME;
|
||||
|
||||
priv->codec_priv.fll_id = -1;
|
||||
priv->codec_priv.pll_id = -1;
|
||||
|
||||
/* Diversify the card configurations */
|
||||
if (of_device_is_compatible(np, "fsl,imx-audio-cs42888")) {
|
||||
codec_dai_name = "cs42888";
|
||||
|
@ -710,10 +710,15 @@ static void fsl_sai_config_disable(struct fsl_sai *sai, int dir)
|
||||
{
|
||||
unsigned int ofs = sai->soc_data->reg_offset;
|
||||
bool tx = dir == TX;
|
||||
u32 xcsr, count = 100;
|
||||
u32 xcsr, count = 100, mask;
|
||||
|
||||
if (sai->soc_data->mclk_with_tere && sai->mclk_direction_output)
|
||||
mask = FSL_SAI_CSR_TERE;
|
||||
else
|
||||
mask = FSL_SAI_CSR_TERE | FSL_SAI_CSR_BCE;
|
||||
|
||||
regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx, ofs),
|
||||
FSL_SAI_CSR_TERE | FSL_SAI_CSR_BCE, 0);
|
||||
mask, 0);
|
||||
|
||||
/* TERE will remain set till the end of current frame */
|
||||
do {
|
||||
|
@ -310,7 +310,8 @@ int asoc_simple_startup(struct snd_pcm_substream *substream)
|
||||
if (fixed_sysclk % props->mclk_fs) {
|
||||
dev_err(rtd->dev, "fixed sysclk %u not divisible by mclk_fs %u\n",
|
||||
fixed_sysclk, props->mclk_fs);
|
||||
return -EINVAL;
|
||||
ret = -EINVAL;
|
||||
goto codec_err;
|
||||
}
|
||||
ret = snd_pcm_hw_constraint_minmax(substream->runtime, SNDRV_PCM_HW_PARAM_RATE,
|
||||
fixed_rate, fixed_rate);
|
||||
|
@ -759,10 +759,12 @@ static int asoc_simple_probe(struct platform_device *pdev)
|
||||
struct snd_soc_dai_link *dai_link = priv->dai_link;
|
||||
struct simple_dai_props *dai_props = priv->dai_props;
|
||||
|
||||
ret = -EINVAL;
|
||||
|
||||
cinfo = dev->platform_data;
|
||||
if (!cinfo) {
|
||||
dev_err(dev, "no info for asoc-simple-card\n");
|
||||
return -EINVAL;
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!cinfo->name ||
|
||||
@ -771,7 +773,7 @@ static int asoc_simple_probe(struct platform_device *pdev)
|
||||
!cinfo->platform ||
|
||||
!cinfo->cpu_dai.name) {
|
||||
dev_err(dev, "insufficient asoc_simple_card_info settings\n");
|
||||
return -EINVAL;
|
||||
goto err;
|
||||
}
|
||||
|
||||
cpus = dai_link->cpus;
|
||||
|
@ -808,6 +808,16 @@ static const struct platform_device_id board_ids[] = {
|
||||
SOF_ES8336_SPEAKERS_EN_GPIO1_QUIRK |
|
||||
SOF_ES8336_JD_INVERTED),
|
||||
},
|
||||
{
|
||||
.name = "mtl_es83x6_c1_h02",
|
||||
.driver_data = (kernel_ulong_t)(SOF_ES8336_SSP_CODEC(1) |
|
||||
SOF_NO_OF_HDMI_CAPTURE_SSP(2) |
|
||||
SOF_HDMI_CAPTURE_1_SSP(0) |
|
||||
SOF_HDMI_CAPTURE_2_SSP(2) |
|
||||
SOF_SSP_HDMI_CAPTURE_PRESENT |
|
||||
SOF_ES8336_SPEAKERS_EN_GPIO1_QUIRK |
|
||||
SOF_ES8336_JD_INVERTED),
|
||||
},
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(platform, board_ids);
|
||||
|
@ -376,6 +376,16 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = {
|
||||
/* No Jack */
|
||||
.driver_data = (void *)SOF_SDW_TGL_HDMI,
|
||||
},
|
||||
{
|
||||
.callback = sof_sdw_quirk_cb,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc"),
|
||||
DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "0B14"),
|
||||
},
|
||||
/* No Jack */
|
||||
.driver_data = (void *)SOF_SDW_TGL_HDMI,
|
||||
},
|
||||
|
||||
{
|
||||
.callback = sof_sdw_quirk_cb,
|
||||
.matches = {
|
||||
|
@ -655,18 +655,18 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_sdw_machines[] = {
|
||||
.drv_name = "sof_sdw",
|
||||
.sof_tplg_filename = "sof-adl-rt1316-l2-mono-rt714-l3.tplg",
|
||||
},
|
||||
{
|
||||
.link_mask = 0x3, /* rt1316 on link1 & rt714 on link0 */
|
||||
.links = adl_sdw_rt1316_link1_rt714_link0,
|
||||
.drv_name = "sof_sdw",
|
||||
.sof_tplg_filename = "sof-adl-rt1316-l1-mono-rt714-l0.tplg",
|
||||
},
|
||||
{
|
||||
.link_mask = 0x7, /* rt714 on link0 & two rt1316s on link1 and link2 */
|
||||
.links = adl_sdw_rt1316_link12_rt714_link0,
|
||||
.drv_name = "sof_sdw",
|
||||
.sof_tplg_filename = "sof-adl-rt1316-l12-rt714-l0.tplg",
|
||||
},
|
||||
{
|
||||
.link_mask = 0x3, /* rt1316 on link1 & rt714 on link0 */
|
||||
.links = adl_sdw_rt1316_link1_rt714_link0,
|
||||
.drv_name = "sof_sdw",
|
||||
.sof_tplg_filename = "sof-adl-rt1316-l1-mono-rt714-l0.tplg",
|
||||
},
|
||||
{
|
||||
.link_mask = 0x5, /* 2 active links required */
|
||||
.links = adl_sdw_rt1316_link2_rt714_link0,
|
||||
|
@ -30,6 +30,16 @@ static const struct snd_soc_acpi_codecs mtl_rt5682_rt5682s_hp = {
|
||||
.codecs = {"10EC5682", "RTL5682"},
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_codecs mtl_essx_83x6 = {
|
||||
.num_codecs = 3,
|
||||
.codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_codecs mtl_lt6911_hdmi = {
|
||||
.num_codecs = 1,
|
||||
.codecs = {"INTC10B0"}
|
||||
};
|
||||
|
||||
struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_machines[] = {
|
||||
{
|
||||
.comp_ids = &mtl_rt5682_rt5682s_hp,
|
||||
@ -52,6 +62,21 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_machines[] = {
|
||||
.quirk_data = &mtl_rt1019p_amp,
|
||||
.sof_tplg_filename = "sof-mtl-rt1019-rt5682.tplg",
|
||||
},
|
||||
{
|
||||
.comp_ids = &mtl_essx_83x6,
|
||||
.drv_name = "mtl_es83x6_c1_h02",
|
||||
.machine_quirk = snd_soc_acpi_codec_list,
|
||||
.quirk_data = &mtl_lt6911_hdmi,
|
||||
.sof_tplg_filename = "sof-mtl-es83x6-ssp1-hdmi-ssp02.tplg",
|
||||
},
|
||||
{
|
||||
.comp_ids = &mtl_essx_83x6,
|
||||
.drv_name = "sof-essx8336",
|
||||
.sof_tplg_filename = "sof-mtl-es8336", /* the tplg suffix is added at run time */
|
||||
.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
|
||||
SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
|
||||
SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
|
||||
},
|
||||
{},
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_machines);
|
||||
|
@ -1347,7 +1347,7 @@ static int soc_init_pcm_runtime(struct snd_soc_card *card,
|
||||
snd_soc_runtime_get_dai_fmt(rtd);
|
||||
ret = snd_soc_runtime_set_dai_fmt(rtd, dai_link->dai_fmt);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto err;
|
||||
|
||||
/* add DPCM sysfs entries */
|
||||
soc_dpcm_debugfs_add(rtd);
|
||||
@ -1372,17 +1372,26 @@ static int soc_init_pcm_runtime(struct snd_soc_card *card,
|
||||
/* create compress_device if possible */
|
||||
ret = snd_soc_dai_compress_new(cpu_dai, rtd, num);
|
||||
if (ret != -ENOTSUPP)
|
||||
return ret;
|
||||
goto err;
|
||||
|
||||
/* create the pcm */
|
||||
ret = soc_new_pcm(rtd, num);
|
||||
if (ret < 0) {
|
||||
dev_err(card->dev, "ASoC: can't create pcm %s :%d\n",
|
||||
dai_link->stream_name, ret);
|
||||
return ret;
|
||||
goto err;
|
||||
}
|
||||
|
||||
return snd_soc_pcm_dai_new(rtd);
|
||||
ret = snd_soc_pcm_dai_new(rtd);
|
||||
if (ret < 0)
|
||||
goto err;
|
||||
|
||||
rtd->initialized = true;
|
||||
|
||||
return 0;
|
||||
err:
|
||||
snd_soc_link_exit(rtd);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void soc_set_name_prefix(struct snd_soc_card *card,
|
||||
@ -1445,8 +1454,8 @@ static int soc_probe_component(struct snd_soc_card *card,
|
||||
if (component->card) {
|
||||
if (component->card != card) {
|
||||
dev_err(component->dev,
|
||||
"Trying to bind component to card \"%s\" but is already bound to card \"%s\"\n",
|
||||
card->name, component->card->name);
|
||||
"Trying to bind component \"%s\" to card \"%s\" but is already bound to card \"%s\"\n",
|
||||
component->name, card->name, component->card->name);
|
||||
return -ENODEV;
|
||||
}
|
||||
return 0;
|
||||
@ -1980,7 +1989,8 @@ static void soc_cleanup_card_resources(struct snd_soc_card *card)
|
||||
|
||||
/* release machine specific resources */
|
||||
for_each_card_rtds(card, rtd)
|
||||
snd_soc_link_exit(rtd);
|
||||
if (rtd->initialized)
|
||||
snd_soc_link_exit(rtd);
|
||||
/* remove and free each DAI */
|
||||
soc_remove_link_dais(card);
|
||||
soc_remove_link_components(card);
|
||||
|
@ -44,8 +44,8 @@ static struct device *dmaengine_dma_dev(struct dmaengine_pcm *pcm,
|
||||
* platforms which make use of the snd_dmaengine_dai_dma_data struct for their
|
||||
* DAI DMA data. Internally the function will first call
|
||||
* snd_hwparams_to_dma_slave_config to fill in the slave config based on the
|
||||
* hw_params, followed by snd_dmaengine_set_config_from_dai_data to fill in the
|
||||
* remaining fields based on the DAI DMA data.
|
||||
* hw_params, followed by snd_dmaengine_pcm_set_config_from_dai_data to fill in
|
||||
* the remaining fields based on the DAI DMA data.
|
||||
*/
|
||||
int snd_dmaengine_pcm_prepare_slave_config(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params, struct dma_slave_config *slave_config)
|
||||
|
@ -35,7 +35,6 @@ static const struct sof_amd_acp_desc rembrandt_chip_info = {
|
||||
.dsp_intr_base = ACP6X_DSP_SW_INTR_BASE,
|
||||
.sram_pte_offset = ACP6X_SRAM_PTE_OFFSET,
|
||||
.hw_semaphore_offset = ACP6X_AXI2DAGB_SEM_0,
|
||||
.acp_clkmux_sel = ACP6X_CLKMUX_SEL,
|
||||
.fusion_dsp_offset = ACP6X_DSP_FUSION_RUNSTALL,
|
||||
.probe_reg_offset = ACP6X_FUTURE_REG_ACLK_0,
|
||||
};
|
||||
|
@ -1204,6 +1204,13 @@ static void volume_control_quirks(struct usb_mixer_elem_info *cval,
|
||||
cval->res = 16;
|
||||
}
|
||||
break;
|
||||
case USB_ID(0x1bcf, 0x2283): /* NexiGo N930AF FHD Webcam */
|
||||
if (!strcmp(kctl->id.name, "Mic Capture Volume")) {
|
||||
usb_audio_info(chip,
|
||||
"set resolution quirk: cval->res = 16\n");
|
||||
cval->res = 16;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1994,7 +1994,11 @@ void snd_usb_audioformat_attributes_quirk(struct snd_usb_audio *chip,
|
||||
/* mic works only when ep packet size is set to wMaxPacketSize */
|
||||
fp->attributes |= UAC_EP_CS_ATTR_FILL_MAX;
|
||||
break;
|
||||
|
||||
case USB_ID(0x3511, 0x2b1e): /* Opencomm2 UC USB Bluetooth dongle */
|
||||
/* mic works only when ep pitch control is not set */
|
||||
if (stream == SNDRV_PCM_STREAM_CAPTURE)
|
||||
fp->attributes &= ~UAC_EP_CS_ATTR_PITCH_CONTROL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2173,6 +2177,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
|
||||
QUIRK_FLAG_FIXED_RATE),
|
||||
DEVICE_FLG(0x0ecb, 0x2069, /* JBL Quantum810 Wireless */
|
||||
QUIRK_FLAG_FIXED_RATE),
|
||||
DEVICE_FLG(0x1bcf, 0x2283, /* NexiGo N930AF FHD Webcam */
|
||||
QUIRK_FLAG_GET_SAMPLE_RATE),
|
||||
|
||||
/* Vendor matches */
|
||||
VENDOR_FLG(0x045e, /* MS Lifecam */
|
||||
|
Loading…
Reference in New Issue
Block a user