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
|
- const: clkext3
|
||||||
minItems: 2
|
minItems: 2
|
||||||
|
|
||||||
|
"#sound-dai-cells":
|
||||||
|
const: 0
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- compatible
|
- compatible
|
||||||
- reg
|
- reg
|
||||||
|
@ -26,6 +26,7 @@ properties:
|
|||||||
- const: rockchip,rk3568-spdif
|
- const: rockchip,rk3568-spdif
|
||||||
- items:
|
- items:
|
||||||
- enum:
|
- enum:
|
||||||
|
- rockchip,rk3128-spdif
|
||||||
- rockchip,rk3188-spdif
|
- rockchip,rk3188-spdif
|
||||||
- rockchip,rk3288-spdif
|
- rockchip,rk3288-spdif
|
||||||
- rockchip,rk3308-spdif
|
- rockchip,rk3308-spdif
|
||||||
|
@ -1126,6 +1126,8 @@ struct snd_soc_pcm_runtime {
|
|||||||
unsigned int pop_wait:1;
|
unsigned int pop_wait:1;
|
||||||
unsigned int fe_compr:1; /* for Dynamic PCM */
|
unsigned int fe_compr:1; /* for Dynamic PCM */
|
||||||
|
|
||||||
|
bool initialized;
|
||||||
|
|
||||||
int num_components;
|
int num_components;
|
||||||
struct snd_soc_component *components[]; /* CPU/Codec/Platform */
|
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");
|
cs35l41->speaker_id, "wmfw");
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
/* try cirrus/part-dspN-fwtype-sub<-spkidN><-ampname>.bin */
|
/* try cirrus/part-dspN-fwtype-sub<-spkidN><-ampname>.bin */
|
||||||
return cs35l41_request_firmware_file(cs35l41, coeff_firmware, coeff_filename,
|
ret = cs35l41_request_firmware_file(cs35l41, coeff_firmware, coeff_filename,
|
||||||
CS35L41_FIRMWARE_ROOT,
|
CS35L41_FIRMWARE_ROOT,
|
||||||
cs35l41->acpi_subsystem_id, cs35l41->amp_name,
|
cs35l41->acpi_subsystem_id, cs35l41->amp_name,
|
||||||
cs35l41->speaker_id, "bin");
|
cs35l41->speaker_id, "bin");
|
||||||
|
if (ret)
|
||||||
|
goto coeff_err;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* try cirrus/part-dspN-fwtype-sub<-ampname>.wmfw */
|
/* 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");
|
cs35l41->amp_name, -1, "wmfw");
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
/* try cirrus/part-dspN-fwtype-sub<-spkidN><-ampname>.bin */
|
/* try cirrus/part-dspN-fwtype-sub<-spkidN><-ampname>.bin */
|
||||||
return cs35l41_request_firmware_file(cs35l41, coeff_firmware, coeff_filename,
|
ret = cs35l41_request_firmware_file(cs35l41, coeff_firmware, coeff_filename,
|
||||||
CS35L41_FIRMWARE_ROOT,
|
CS35L41_FIRMWARE_ROOT,
|
||||||
cs35l41->acpi_subsystem_id, cs35l41->amp_name,
|
cs35l41->acpi_subsystem_id, cs35l41->amp_name,
|
||||||
cs35l41->speaker_id, "bin");
|
cs35l41->speaker_id, "bin");
|
||||||
|
if (ret)
|
||||||
|
goto coeff_err;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* try cirrus/part-dspN-fwtype-sub<-spkidN>.wmfw */
|
/* 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");
|
cs35l41->amp_name, cs35l41->speaker_id, "bin");
|
||||||
if (ret)
|
if (ret)
|
||||||
/* try cirrus/part-dspN-fwtype-sub<-spkidN>.bin */
|
/* try cirrus/part-dspN-fwtype-sub<-spkidN>.bin */
|
||||||
return cs35l41_request_firmware_file(cs35l41, coeff_firmware,
|
ret = cs35l41_request_firmware_file(cs35l41, coeff_firmware,
|
||||||
coeff_filename, CS35L41_FIRMWARE_ROOT,
|
coeff_filename, CS35L41_FIRMWARE_ROOT,
|
||||||
cs35l41->acpi_subsystem_id, NULL,
|
cs35l41->acpi_subsystem_id, NULL,
|
||||||
cs35l41->speaker_id, "bin");
|
cs35l41->speaker_id, "bin");
|
||||||
|
if (ret)
|
||||||
|
goto coeff_err;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* try cirrus/part-dspN-fwtype-sub.wmfw */
|
/* 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");
|
cs35l41->speaker_id, "bin");
|
||||||
if (ret)
|
if (ret)
|
||||||
/* try cirrus/part-dspN-fwtype-sub<-spkidN>.bin */
|
/* try cirrus/part-dspN-fwtype-sub<-spkidN>.bin */
|
||||||
return cs35l41_request_firmware_file(cs35l41, coeff_firmware,
|
ret = cs35l41_request_firmware_file(cs35l41, coeff_firmware,
|
||||||
coeff_filename, CS35L41_FIRMWARE_ROOT,
|
coeff_filename, CS35L41_FIRMWARE_ROOT,
|
||||||
cs35l41->acpi_subsystem_id, NULL,
|
cs35l41->acpi_subsystem_id, NULL,
|
||||||
cs35l41->speaker_id, "bin");
|
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;
|
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,
|
ret = cs35l41_request_firmware_files_spkid(cs35l41, wmfw_firmware, wmfw_filename,
|
||||||
coeff_firmware, coeff_filename);
|
coeff_firmware, coeff_filename);
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* try cirrus/part-dspN-fwtype-sub<-ampname>.wmfw */
|
/* 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_FIRMWARE_ROOT,
|
||||||
cs35l41->acpi_subsystem_id, cs35l41->amp_name,
|
cs35l41->acpi_subsystem_id, cs35l41->amp_name,
|
||||||
-1, "bin");
|
-1, "bin");
|
||||||
|
if (ret)
|
||||||
|
goto coeff_err;
|
||||||
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -286,32 +338,23 @@ static int cs35l41_request_firmware_files(struct cs35l41_hda *cs35l41,
|
|||||||
CS35L41_FIRMWARE_ROOT,
|
CS35L41_FIRMWARE_ROOT,
|
||||||
cs35l41->acpi_subsystem_id, NULL, -1,
|
cs35l41->acpi_subsystem_id, NULL, -1,
|
||||||
"bin");
|
"bin");
|
||||||
|
if (ret)
|
||||||
|
goto coeff_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (!ret)
|
if (ret)
|
||||||
return 0;
|
/* if all attempts at finding firmware fail, try fallback */
|
||||||
|
goto fallback;
|
||||||
|
|
||||||
/* Handle fallback */
|
return 0;
|
||||||
dev_warn(cs35l41->dev, "Falling back to default firmware.\n");
|
|
||||||
|
|
||||||
|
coeff_err:
|
||||||
release_firmware(*wmfw_firmware);
|
release_firmware(*wmfw_firmware);
|
||||||
kfree(*wmfw_filename);
|
kfree(*wmfw_filename);
|
||||||
|
fallback:
|
||||||
/* fallback try cirrus/part-dspN-fwtype.wmfw */
|
return cs35l41_fallback_firmware_file(cs35l41, wmfw_firmware, wmfw_filename,
|
||||||
ret = cs35l41_request_firmware_file(cs35l41, wmfw_firmware, wmfw_filename,
|
coeff_firmware, coeff_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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_EFI)
|
#if IS_ENABLED(CONFIG_EFI)
|
||||||
|
@ -7343,6 +7343,7 @@ enum {
|
|||||||
ALC245_FIXUP_HP_MUTE_LED_COEFBIT,
|
ALC245_FIXUP_HP_MUTE_LED_COEFBIT,
|
||||||
ALC245_FIXUP_HP_X360_MUTE_LEDS,
|
ALC245_FIXUP_HP_X360_MUTE_LEDS,
|
||||||
ALC287_FIXUP_THINKPAD_I2S_SPK,
|
ALC287_FIXUP_THINKPAD_I2S_SPK,
|
||||||
|
ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* A special fixup for Lenovo C940 and Yoga Duet 7;
|
/* 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,
|
.type = HDA_FIXUP_FUNC,
|
||||||
.v.func = alc287_fixup_bind_dacs,
|
.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[] = {
|
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, 0x124c, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK),
|
||||||
SND_PCI_QUIRK(0x10ec, 0x1252, "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, 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(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, 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),
|
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, 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, 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, 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, 0x22f1, "Thinkpad", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
|
||||||
SND_PCI_QUIRK(0x17aa, 0x22f2, "Thinkpad", ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI),
|
SND_PCI_QUIRK(0x17aa, 0x22f2, "Thinkpad", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
|
||||||
SND_PCI_QUIRK(0x17aa, 0x22f3, "Thinkpad", ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI),
|
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_CS35L41_I2C_2_THINKPAD_ACPI),
|
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_CS35L41_I2C_2_THINKPAD_ACPI),
|
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_CS35L41_I2C_2_THINKPAD_ACPI),
|
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_CS35L41_I2C_2_THINKPAD_ACPI),
|
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_CS35L41_I2C_2_THINKPAD_ACPI),
|
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, 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, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
|
||||||
SND_PCI_QUIRK(0x17aa, 0x310c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
|
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, 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, 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, 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),
|
SND_PCI_QUIRK(0xf111, 0x0001, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -241,6 +241,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = {
|
|||||||
DMI_MATCH(DMI_PRODUCT_NAME, "82V2"),
|
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,
|
.driver_data = &acp6x_card,
|
||||||
.matches = {
|
.matches = {
|
||||||
|
@ -531,7 +531,10 @@ static int hdmi_codec_fill_codec_params(struct snd_soc_dai *dai,
|
|||||||
hp->sample_rate = sample_rate;
|
hp->sample_rate = sample_rate;
|
||||||
hp->channels = channels;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -157,11 +157,6 @@ static int rt5682_i2c_probe(struct i2c_client *i2c)
|
|||||||
return ret;
|
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),
|
ret = regulator_bulk_enable(ARRAY_SIZE(rt5682->supplies),
|
||||||
rt5682->supplies);
|
rt5682->supplies);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
@ -169,6 +164,11 @@ static int rt5682_i2c_probe(struct i2c_client *i2c)
|
|||||||
return ret;
|
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);
|
ret = rt5682_get_ldo1(rt5682, &i2c->dev);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -293,7 +293,7 @@
|
|||||||
#define ADC3XXX_BYPASS_RPGA 0x80
|
#define ADC3XXX_BYPASS_RPGA 0x80
|
||||||
|
|
||||||
/* MICBIAS control bits */
|
/* MICBIAS control bits */
|
||||||
#define ADC3XXX_MICBIAS_MASK 0x2
|
#define ADC3XXX_MICBIAS_MASK 0x3
|
||||||
#define ADC3XXX_MICBIAS1_SHIFT 5
|
#define ADC3XXX_MICBIAS1_SHIFT 5
|
||||||
#define ADC3XXX_MICBIAS2_SHIFT 3
|
#define ADC3XXX_MICBIAS2_SHIFT 3
|
||||||
|
|
||||||
@ -1099,7 +1099,7 @@ static int adc3xxx_parse_dt_micbias(struct adc3xxx *adc3xxx,
|
|||||||
unsigned int val;
|
unsigned int val;
|
||||||
|
|
||||||
if (!of_property_read_u32(np, propname, &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);
|
dev_err(dev, "Invalid property value for '%s'\n", propname);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -52,8 +52,8 @@ struct codec_priv {
|
|||||||
unsigned long mclk_freq;
|
unsigned long mclk_freq;
|
||||||
unsigned long free_freq;
|
unsigned long free_freq;
|
||||||
u32 mclk_id;
|
u32 mclk_id;
|
||||||
u32 fll_id;
|
int fll_id;
|
||||||
u32 pll_id;
|
int pll_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -206,7 +206,7 @@ static int fsl_asoc_card_hw_params(struct snd_pcm_substream *substream,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Specific configuration for PLL */
|
/* 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)
|
if (priv->sample_format == SNDRV_PCM_FORMAT_S24_LE)
|
||||||
pll_out = priv->sample_rate * 384;
|
pll_out = priv->sample_rate * 384;
|
||||||
else
|
else
|
||||||
@ -248,7 +248,7 @@ static int fsl_asoc_card_hw_free(struct snd_pcm_substream *substream)
|
|||||||
|
|
||||||
priv->streams &= ~BIT(substream->stream);
|
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 */
|
/* Force freq to be free_freq to avoid error message in codec */
|
||||||
ret = snd_soc_dai_set_sysclk(asoc_rtd_to_codec(rtd, 0),
|
ret = snd_soc_dai_set_sysclk(asoc_rtd_to_codec(rtd, 0),
|
||||||
codec_priv->mclk_id,
|
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.dapm_routes = audio_map;
|
||||||
priv->card.num_dapm_routes = ARRAY_SIZE(audio_map);
|
priv->card.num_dapm_routes = ARRAY_SIZE(audio_map);
|
||||||
priv->card.driver_name = DRIVER_NAME;
|
priv->card.driver_name = DRIVER_NAME;
|
||||||
|
|
||||||
|
priv->codec_priv.fll_id = -1;
|
||||||
|
priv->codec_priv.pll_id = -1;
|
||||||
|
|
||||||
/* Diversify the card configurations */
|
/* Diversify the card configurations */
|
||||||
if (of_device_is_compatible(np, "fsl,imx-audio-cs42888")) {
|
if (of_device_is_compatible(np, "fsl,imx-audio-cs42888")) {
|
||||||
codec_dai_name = "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;
|
unsigned int ofs = sai->soc_data->reg_offset;
|
||||||
bool tx = dir == TX;
|
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),
|
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 */
|
/* TERE will remain set till the end of current frame */
|
||||||
do {
|
do {
|
||||||
|
@ -310,7 +310,8 @@ int asoc_simple_startup(struct snd_pcm_substream *substream)
|
|||||||
if (fixed_sysclk % props->mclk_fs) {
|
if (fixed_sysclk % props->mclk_fs) {
|
||||||
dev_err(rtd->dev, "fixed sysclk %u not divisible by mclk_fs %u\n",
|
dev_err(rtd->dev, "fixed sysclk %u not divisible by mclk_fs %u\n",
|
||||||
fixed_sysclk, props->mclk_fs);
|
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,
|
ret = snd_pcm_hw_constraint_minmax(substream->runtime, SNDRV_PCM_HW_PARAM_RATE,
|
||||||
fixed_rate, fixed_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 snd_soc_dai_link *dai_link = priv->dai_link;
|
||||||
struct simple_dai_props *dai_props = priv->dai_props;
|
struct simple_dai_props *dai_props = priv->dai_props;
|
||||||
|
|
||||||
|
ret = -EINVAL;
|
||||||
|
|
||||||
cinfo = dev->platform_data;
|
cinfo = dev->platform_data;
|
||||||
if (!cinfo) {
|
if (!cinfo) {
|
||||||
dev_err(dev, "no info for asoc-simple-card\n");
|
dev_err(dev, "no info for asoc-simple-card\n");
|
||||||
return -EINVAL;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cinfo->name ||
|
if (!cinfo->name ||
|
||||||
@ -771,7 +773,7 @@ static int asoc_simple_probe(struct platform_device *pdev)
|
|||||||
!cinfo->platform ||
|
!cinfo->platform ||
|
||||||
!cinfo->cpu_dai.name) {
|
!cinfo->cpu_dai.name) {
|
||||||
dev_err(dev, "insufficient asoc_simple_card_info settings\n");
|
dev_err(dev, "insufficient asoc_simple_card_info settings\n");
|
||||||
return -EINVAL;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
cpus = dai_link->cpus;
|
cpus = dai_link->cpus;
|
||||||
|
@ -808,6 +808,16 @@ static const struct platform_device_id board_ids[] = {
|
|||||||
SOF_ES8336_SPEAKERS_EN_GPIO1_QUIRK |
|
SOF_ES8336_SPEAKERS_EN_GPIO1_QUIRK |
|
||||||
SOF_ES8336_JD_INVERTED),
|
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);
|
MODULE_DEVICE_TABLE(platform, board_ids);
|
||||||
|
@ -376,6 +376,16 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = {
|
|||||||
/* No Jack */
|
/* No Jack */
|
||||||
.driver_data = (void *)SOF_SDW_TGL_HDMI,
|
.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,
|
.callback = sof_sdw_quirk_cb,
|
||||||
.matches = {
|
.matches = {
|
||||||
|
@ -655,18 +655,18 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_sdw_machines[] = {
|
|||||||
.drv_name = "sof_sdw",
|
.drv_name = "sof_sdw",
|
||||||
.sof_tplg_filename = "sof-adl-rt1316-l2-mono-rt714-l3.tplg",
|
.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 */
|
.link_mask = 0x7, /* rt714 on link0 & two rt1316s on link1 and link2 */
|
||||||
.links = adl_sdw_rt1316_link12_rt714_link0,
|
.links = adl_sdw_rt1316_link12_rt714_link0,
|
||||||
.drv_name = "sof_sdw",
|
.drv_name = "sof_sdw",
|
||||||
.sof_tplg_filename = "sof-adl-rt1316-l12-rt714-l0.tplg",
|
.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 */
|
.link_mask = 0x5, /* 2 active links required */
|
||||||
.links = adl_sdw_rt1316_link2_rt714_link0,
|
.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"},
|
.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[] = {
|
struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_machines[] = {
|
||||||
{
|
{
|
||||||
.comp_ids = &mtl_rt5682_rt5682s_hp,
|
.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,
|
.quirk_data = &mtl_rt1019p_amp,
|
||||||
.sof_tplg_filename = "sof-mtl-rt1019-rt5682.tplg",
|
.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);
|
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);
|
snd_soc_runtime_get_dai_fmt(rtd);
|
||||||
ret = snd_soc_runtime_set_dai_fmt(rtd, dai_link->dai_fmt);
|
ret = snd_soc_runtime_set_dai_fmt(rtd, dai_link->dai_fmt);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
goto err;
|
||||||
|
|
||||||
/* add DPCM sysfs entries */
|
/* add DPCM sysfs entries */
|
||||||
soc_dpcm_debugfs_add(rtd);
|
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 */
|
/* create compress_device if possible */
|
||||||
ret = snd_soc_dai_compress_new(cpu_dai, rtd, num);
|
ret = snd_soc_dai_compress_new(cpu_dai, rtd, num);
|
||||||
if (ret != -ENOTSUPP)
|
if (ret != -ENOTSUPP)
|
||||||
return ret;
|
goto err;
|
||||||
|
|
||||||
/* create the pcm */
|
/* create the pcm */
|
||||||
ret = soc_new_pcm(rtd, num);
|
ret = soc_new_pcm(rtd, num);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(card->dev, "ASoC: can't create pcm %s :%d\n",
|
dev_err(card->dev, "ASoC: can't create pcm %s :%d\n",
|
||||||
dai_link->stream_name, ret);
|
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,
|
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) {
|
||||||
if (component->card != card) {
|
if (component->card != card) {
|
||||||
dev_err(component->dev,
|
dev_err(component->dev,
|
||||||
"Trying to bind component to card \"%s\" but is already bound to card \"%s\"\n",
|
"Trying to bind component \"%s\" to card \"%s\" but is already bound to card \"%s\"\n",
|
||||||
card->name, component->card->name);
|
component->name, card->name, component->card->name);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -1980,7 +1989,8 @@ static void soc_cleanup_card_resources(struct snd_soc_card *card)
|
|||||||
|
|
||||||
/* release machine specific resources */
|
/* release machine specific resources */
|
||||||
for_each_card_rtds(card, rtd)
|
for_each_card_rtds(card, rtd)
|
||||||
snd_soc_link_exit(rtd);
|
if (rtd->initialized)
|
||||||
|
snd_soc_link_exit(rtd);
|
||||||
/* remove and free each DAI */
|
/* remove and free each DAI */
|
||||||
soc_remove_link_dais(card);
|
soc_remove_link_dais(card);
|
||||||
soc_remove_link_components(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
|
* platforms which make use of the snd_dmaengine_dai_dma_data struct for their
|
||||||
* DAI DMA data. Internally the function will first call
|
* DAI DMA data. Internally the function will first call
|
||||||
* snd_hwparams_to_dma_slave_config to fill in the slave config based on the
|
* 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
|
* hw_params, followed by snd_dmaengine_pcm_set_config_from_dai_data to fill in
|
||||||
* remaining fields based on the DAI DMA data.
|
* the remaining fields based on the DAI DMA data.
|
||||||
*/
|
*/
|
||||||
int snd_dmaengine_pcm_prepare_slave_config(struct snd_pcm_substream *substream,
|
int snd_dmaengine_pcm_prepare_slave_config(struct snd_pcm_substream *substream,
|
||||||
struct snd_pcm_hw_params *params, struct dma_slave_config *slave_config)
|
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,
|
.dsp_intr_base = ACP6X_DSP_SW_INTR_BASE,
|
||||||
.sram_pte_offset = ACP6X_SRAM_PTE_OFFSET,
|
.sram_pte_offset = ACP6X_SRAM_PTE_OFFSET,
|
||||||
.hw_semaphore_offset = ACP6X_AXI2DAGB_SEM_0,
|
.hw_semaphore_offset = ACP6X_AXI2DAGB_SEM_0,
|
||||||
.acp_clkmux_sel = ACP6X_CLKMUX_SEL,
|
|
||||||
.fusion_dsp_offset = ACP6X_DSP_FUSION_RUNSTALL,
|
.fusion_dsp_offset = ACP6X_DSP_FUSION_RUNSTALL,
|
||||||
.probe_reg_offset = ACP6X_FUTURE_REG_ACLK_0,
|
.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;
|
cval->res = 16;
|
||||||
}
|
}
|
||||||
break;
|
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 */
|
/* mic works only when ep packet size is set to wMaxPacketSize */
|
||||||
fp->attributes |= UAC_EP_CS_ATTR_FILL_MAX;
|
fp->attributes |= UAC_EP_CS_ATTR_FILL_MAX;
|
||||||
break;
|
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),
|
QUIRK_FLAG_FIXED_RATE),
|
||||||
DEVICE_FLG(0x0ecb, 0x2069, /* JBL Quantum810 Wireless */
|
DEVICE_FLG(0x0ecb, 0x2069, /* JBL Quantum810 Wireless */
|
||||||
QUIRK_FLAG_FIXED_RATE),
|
QUIRK_FLAG_FIXED_RATE),
|
||||||
|
DEVICE_FLG(0x1bcf, 0x2283, /* NexiGo N930AF FHD Webcam */
|
||||||
|
QUIRK_FLAG_GET_SAMPLE_RATE),
|
||||||
|
|
||||||
/* Vendor matches */
|
/* Vendor matches */
|
||||||
VENDOR_FLG(0x045e, /* MS Lifecam */
|
VENDOR_FLG(0x045e, /* MS Lifecam */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user