sound fixes for 6.5-rc7
Slightly bigger than I wished, but here we go, a collection of fixes for 6.5. The only change in the core side is the ease for repeated ASoC error messages, and the rest are all pretty device-specific small fixes (including regression fixes) for ASoC Intel and HD-audio / USB-audio quirks. -----BEGIN PGP SIGNATURE----- iQJCBAABCAAsFiEEIXTw5fNLNI7mMiVaLtJE4w1nLE8FAmTeNSQOHHRpd2FpQHN1 c2UuZGUACgkQLtJE4w1nLE84fg//fxij0/hGOgQIIisCxaDoWDL5i/n4x0U6mjbu Z0IVHIYy2A55ZWi5xVG1g0DFIe2zlU5hhpB4YKyod9PEXSS9jYKg3BNbDY5kAexn 9+jBOUr2c2rKY9SpN9kpX9Lu89mIuQC+xtmlxwkm8+q6YVoYUHkFy0J6KfJ8x2JQ tmViD0cH5T390M+jmXMbYgSkzMCylZ2SPXh7dDbPk+oD61Zco7oWIbdKGkTL2qZC 60/igB7N9sVL9ni6yFMHWL/IZ+qQhin+HPbNWT2d6nP45bWquTedxlxNpbYRbLng pnz7aJ7g+l2honVZGObGNfjMNOZeG1uQi4l5gTBtLKdk5oxHmTItWcyZ92Rps1wT 1KIYApi/X9j1aVKqjD51KzPDaQIC66WQU5LA5N2TKHujWKrEl5crLcR6gc/Uqbvt hMnvYZctkicsEuUuOhsBmBn9/ye5+DDwg5EEr7p5gkvvJi+StxA1N7zGwWPLnNX6 Nhnvo9c8GlEa7QHHlO7LzTWQbpkgCOiSKFvWoNoQAgrOwzkMARfFxjFjVuvQsgXx y5DUXsw9+k8v/ITWalulPK9VtzaY7OQK6tMlonxMuWcPGmO7a+0S7MHiQcuI+45f wXMVaC5V48s95CiFn516UsoktY1foztr4UMDSOHBkS9Ap4g5BoxUiyL95lxOena0 5kYgmRE= =DE5T -----END PGP SIGNATURE----- Merge tag 'sound-6.5-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound fixes from Takashi Iwai: "Slightly bigger than I wished, but here we go, a collection of fixes for 6.5. The only change in the core side is the ease for repeated ASoC error messages, and the rest are all pretty device-specific small fixes (including regression fixes) for ASoC Intel and HD-audio / USB-audio quirks" * tag 'sound-6.5-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: hda/realtek - Remodified 3k pull low procedure ASoC: rt1308-sdw: fix random louder sound ALSA: hda/cs8409: Support new Dell Dolphin Variants ALSA: hda/realtek: Switch Dell Oasis models to use SPI ALSA: hda/realtek: Add quirks for HP G11 Laptops ASoC: meson: axg-tdm-formatter: fix channel slot allocation ASoC: SOF: ipc4-topology: Update the basecfg for copier earlier ASoC: SOF: intel: hda: Clean up link DMA for IPC3 during stop ASoC: Intel: sof-sdw-cs42142: fix for codec button mapping ASoC: Intel: sof-sdw: update jack detection quirk for LunarLake RVP ASoC: SOF: Fix incorrect use of sizeof in sof_ipc3_do_rx_work() ASoC: lower "no backend DAIs enabled for ... Port" log severity ASoC: rt5665: add missed regulator_bulk_disable ASoC: max98363: don't return on success reading revision ID ALSA: usb-audio: Add support for Mythware XA001AU capture and playback interfaces. ASoC: fsl: micfil: Use dual license micfil code
This commit is contained in:
commit
ce03e1807c
|
@ -550,6 +550,10 @@ const struct snd_pci_quirk cs8409_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x1028, 0x0C50, "Dolphin", CS8409_DOLPHIN),
|
||||
SND_PCI_QUIRK(0x1028, 0x0C51, "Dolphin", CS8409_DOLPHIN),
|
||||
SND_PCI_QUIRK(0x1028, 0x0C52, "Dolphin", CS8409_DOLPHIN),
|
||||
SND_PCI_QUIRK(0x1028, 0x0C73, "Dolphin", CS8409_DOLPHIN),
|
||||
SND_PCI_QUIRK(0x1028, 0x0C75, "Dolphin", CS8409_DOLPHIN),
|
||||
SND_PCI_QUIRK(0x1028, 0x0C7D, "Dolphin", CS8409_DOLPHIN),
|
||||
SND_PCI_QUIRK(0x1028, 0x0C7F, "Dolphin", CS8409_DOLPHIN),
|
||||
{} /* terminator */
|
||||
};
|
||||
|
||||
|
|
|
@ -9422,11 +9422,10 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x1028, 0x0cbd, "Dell Oasis 13 CS MTL-U", ALC245_FIXUP_CS35L41_SPI_2),
|
||||
SND_PCI_QUIRK(0x1028, 0x0cbe, "Dell Oasis 13 2-IN-1 MTL-U", ALC245_FIXUP_CS35L41_SPI_2),
|
||||
SND_PCI_QUIRK(0x1028, 0x0cbf, "Dell Oasis 13 Low Weight MTU-L", ALC245_FIXUP_CS35L41_SPI_2),
|
||||
SND_PCI_QUIRK(0x1028, 0x0cc1, "Dell Oasis 14 MTL-H/U", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x1028, 0x0cc2, "Dell Oasis 14 2-in-1 MTL-H/U", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x1028, 0x0cc3, "Dell Oasis 14 Low Weight MTL-U", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x1028, 0x0cc4, "Dell Oasis 16 MTL-H/U", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x1028, 0x0cc5, "Dell Oasis MLK 14 RPL-P", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x1028, 0x0cc1, "Dell Oasis 14 MTL-H/U", ALC245_FIXUP_CS35L41_SPI_2),
|
||||
SND_PCI_QUIRK(0x1028, 0x0cc2, "Dell Oasis 14 2-in-1 MTL-H/U", ALC245_FIXUP_CS35L41_SPI_2),
|
||||
SND_PCI_QUIRK(0x1028, 0x0cc3, "Dell Oasis 14 Low Weight MTL-U", ALC245_FIXUP_CS35L41_SPI_2),
|
||||
SND_PCI_QUIRK(0x1028, 0x0cc4, "Dell Oasis 16 MTL-H/U", ALC245_FIXUP_CS35L41_SPI_2),
|
||||
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),
|
||||
|
@ -9617,7 +9616,13 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|||
SND_PCI_QUIRK(0x103c, 0x8b96, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
|
||||
SND_PCI_QUIRK(0x103c, 0x8b97, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
|
||||
SND_PCI_QUIRK(0x103c, 0x8bf0, "HP", ALC236_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8c26, "HP HP EliteBook 800G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8c46, "HP EliteBook 830 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8c47, "HP EliteBook 840 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8c48, "HP EliteBook 860 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8c49, "HP Elite x360 830 2-in-1 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8c70, "HP EliteBook 835 G11", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8c71, "HP EliteBook 845 G11", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8c72, "HP EliteBook 865 G11", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC),
|
||||
SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300),
|
||||
SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
||||
|
@ -10638,6 +10643,7 @@ static int patch_alc269(struct hda_codec *codec)
|
|||
spec = codec->spec;
|
||||
spec->gen.shared_mic_vref_pin = 0x18;
|
||||
codec->power_save_node = 0;
|
||||
spec->en_3kpull_low = true;
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
codec->patch_ops.suspend = alc269_suspend;
|
||||
|
@ -10720,14 +10726,16 @@ static int patch_alc269(struct hda_codec *codec)
|
|||
spec->shutup = alc256_shutup;
|
||||
spec->init_hook = alc256_init;
|
||||
spec->gen.mixer_nid = 0; /* ALC256 does not have any loopback mixer path */
|
||||
if (codec->bus->pci->vendor == PCI_VENDOR_ID_AMD)
|
||||
spec->en_3kpull_low = true;
|
||||
if (codec->core.vendor_id == 0x10ec0236 &&
|
||||
codec->bus->pci->vendor != PCI_VENDOR_ID_AMD)
|
||||
spec->en_3kpull_low = false;
|
||||
break;
|
||||
case 0x10ec0257:
|
||||
spec->codec_variant = ALC269_TYPE_ALC257;
|
||||
spec->shutup = alc256_shutup;
|
||||
spec->init_hook = alc256_init;
|
||||
spec->gen.mixer_nid = 0;
|
||||
spec->en_3kpull_low = false;
|
||||
break;
|
||||
case 0x10ec0215:
|
||||
case 0x10ec0245:
|
||||
|
|
|
@ -185,10 +185,10 @@ static int max98363_io_init(struct sdw_slave *slave)
|
|||
pm_runtime_get_noresume(dev);
|
||||
|
||||
ret = regmap_read(max98363->regmap, MAX98363_R21FF_REV_ID, ®);
|
||||
if (!ret) {
|
||||
if (!ret)
|
||||
dev_info(dev, "Revision ID: %X\n", reg);
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
goto out;
|
||||
|
||||
if (max98363->first_hw_init) {
|
||||
regcache_cache_bypass(max98363->regmap, false);
|
||||
|
@ -198,10 +198,11 @@ static int max98363_io_init(struct sdw_slave *slave)
|
|||
max98363->first_hw_init = true;
|
||||
max98363->hw_init = true;
|
||||
|
||||
out:
|
||||
pm_runtime_mark_last_busy(dev);
|
||||
pm_runtime_put_autosuspend(dev);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define MAX98363_RATES SNDRV_PCM_RATE_8000_192000
|
||||
|
|
|
@ -52,6 +52,7 @@ static bool rt1308_volatile_register(struct device *dev, unsigned int reg)
|
|||
case 0x300a:
|
||||
case 0xc000:
|
||||
case 0xc710:
|
||||
case 0xcf01:
|
||||
case 0xc860 ... 0xc863:
|
||||
case 0xc870 ... 0xc873:
|
||||
return true;
|
||||
|
@ -213,7 +214,7 @@ static int rt1308_io_init(struct device *dev, struct sdw_slave *slave)
|
|||
{
|
||||
struct rt1308_sdw_priv *rt1308 = dev_get_drvdata(dev);
|
||||
int ret = 0;
|
||||
unsigned int tmp;
|
||||
unsigned int tmp, hibernation_flag;
|
||||
|
||||
if (rt1308->hw_init)
|
||||
return 0;
|
||||
|
@ -242,6 +243,10 @@ static int rt1308_io_init(struct device *dev, struct sdw_slave *slave)
|
|||
|
||||
pm_runtime_get_noresume(&slave->dev);
|
||||
|
||||
regmap_read(rt1308->regmap, 0xcf01, &hibernation_flag);
|
||||
if ((hibernation_flag != 0x00) && rt1308->first_hw_init)
|
||||
goto _preset_ready_;
|
||||
|
||||
/* sw reset */
|
||||
regmap_write(rt1308->regmap, RT1308_SDW_RESET, 0);
|
||||
|
||||
|
@ -282,6 +287,12 @@ static int rt1308_io_init(struct device *dev, struct sdw_slave *slave)
|
|||
regmap_write(rt1308->regmap, 0xc100, 0xd7);
|
||||
regmap_write(rt1308->regmap, 0xc101, 0xd7);
|
||||
|
||||
/* apply BQ params */
|
||||
rt1308_apply_bq_params(rt1308);
|
||||
|
||||
regmap_write(rt1308->regmap, 0xcf01, 0x01);
|
||||
|
||||
_preset_ready_:
|
||||
if (rt1308->first_hw_init) {
|
||||
regcache_cache_bypass(rt1308->regmap, false);
|
||||
regcache_mark_dirty(rt1308->regmap);
|
||||
|
|
|
@ -4472,6 +4472,8 @@ static void rt5665_remove(struct snd_soc_component *component)
|
|||
struct rt5665_priv *rt5665 = snd_soc_component_get_drvdata(component);
|
||||
|
||||
regmap_write(rt5665->regmap, RT5665_RESET, 0);
|
||||
|
||||
regulator_bulk_disable(ARRAY_SIZE(rt5665->supplies), rt5665->supplies);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
|
||||
// Copyright 2018 NXP
|
||||
|
||||
#include <linux/bitfield.h>
|
||||
|
@ -1254,4 +1254,4 @@ module_platform_driver(fsl_micfil_driver);
|
|||
|
||||
MODULE_AUTHOR("Cosmin-Gabriel Samoila <cosmin.samoila@nxp.com>");
|
||||
MODULE_DESCRIPTION("NXP PDM Microphone Interface (MICFIL) driver");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
MODULE_LICENSE("Dual BSD/GPL");
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
|
||||
/*
|
||||
* PDM Microphone Interface for the NXP i.MX SoC
|
||||
* Copyright 2018 NXP
|
||||
|
|
|
@ -476,7 +476,7 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = {
|
|||
DMI_MATCH(DMI_SYS_VENDOR, "Intel Corporation"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Lunar Lake Client Platform"),
|
||||
},
|
||||
.driver_data = (void *)(RT711_JD2_100K),
|
||||
.driver_data = (void *)(RT711_JD2),
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
|
|
@ -99,9 +99,9 @@ static int cs42l42_rtd_init(struct snd_soc_pcm_runtime *rtd)
|
|||
jack = &ctx->sdw_headset;
|
||||
|
||||
snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_PLAYPAUSE);
|
||||
snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOICECOMMAND);
|
||||
snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEUP);
|
||||
snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOLUMEDOWN);
|
||||
snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOLUMEUP);
|
||||
snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEDOWN);
|
||||
snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOICECOMMAND);
|
||||
|
||||
ret = snd_soc_component_set_jack(component, jack, NULL);
|
||||
|
||||
|
|
|
@ -30,27 +30,32 @@ int axg_tdm_formatter_set_channel_masks(struct regmap *map,
|
|||
struct axg_tdm_stream *ts,
|
||||
unsigned int offset)
|
||||
{
|
||||
unsigned int val, ch = ts->channels;
|
||||
unsigned long mask;
|
||||
int i, j;
|
||||
unsigned int ch = ts->channels;
|
||||
u32 val[AXG_TDM_NUM_LANES];
|
||||
int i, j, k;
|
||||
|
||||
/*
|
||||
* We need to mimick the slot distribution used by the HW to keep the
|
||||
* channel placement consistent regardless of the number of channel
|
||||
* in the stream. This is why the odd algorithm below is used.
|
||||
*/
|
||||
memset(val, 0, sizeof(*val) * AXG_TDM_NUM_LANES);
|
||||
|
||||
/*
|
||||
* Distribute the channels of the stream over the available slots
|
||||
* of each TDM lane
|
||||
* of each TDM lane. We need to go over the 32 slots ...
|
||||
*/
|
||||
for (i = 0; i < AXG_TDM_NUM_LANES; i++) {
|
||||
val = 0;
|
||||
mask = ts->mask[i];
|
||||
|
||||
for (j = find_first_bit(&mask, 32);
|
||||
(j < 32) && ch;
|
||||
j = find_next_bit(&mask, 32, j + 1)) {
|
||||
val |= 1 << j;
|
||||
ch -= 1;
|
||||
for (i = 0; (i < 32) && ch; i += 2) {
|
||||
/* ... of all the lanes ... */
|
||||
for (j = 0; j < AXG_TDM_NUM_LANES; j++) {
|
||||
/* ... then distribute the channels in pairs */
|
||||
for (k = 0; k < 2; k++) {
|
||||
if ((BIT(i + k) & ts->mask[j]) && ch) {
|
||||
val[j] |= BIT(i + k);
|
||||
ch -= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
regmap_write(map, offset, val);
|
||||
offset += regmap_get_reg_stride(map);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -63,6 +68,11 @@ int axg_tdm_formatter_set_channel_masks(struct regmap *map,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
for (i = 0; i < AXG_TDM_NUM_LANES; i++) {
|
||||
regmap_write(map, offset, val[i]);
|
||||
offset += regmap_get_reg_stride(map);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(axg_tdm_formatter_set_channel_masks);
|
||||
|
|
|
@ -38,6 +38,7 @@ static inline int _soc_pcm_ret(struct snd_soc_pcm_runtime *rtd,
|
|||
switch (ret) {
|
||||
case -EPROBE_DEFER:
|
||||
case -ENOTSUPP:
|
||||
case -EINVAL:
|
||||
break;
|
||||
default:
|
||||
dev_err(rtd->dev,
|
||||
|
@ -2466,8 +2467,11 @@ static int dpcm_fe_dai_prepare(struct snd_pcm_substream *substream)
|
|||
|
||||
/* there is no point preparing this FE if there are no BEs */
|
||||
if (list_empty(&fe->dpcm[stream].be_clients)) {
|
||||
dev_err(fe->dev, "ASoC: no backend DAIs enabled for %s\n",
|
||||
fe->dai_link->name);
|
||||
/* dev_err_once() for visibility, dev_dbg() for debugging UCM profiles */
|
||||
dev_err_once(fe->dev, "ASoC: no backend DAIs enabled for %s, possibly missing ALSA mixer-based routing or UCM profile\n",
|
||||
fe->dai_link->name);
|
||||
dev_dbg(fe->dev, "ASoC: no backend DAIs enabled for %s\n",
|
||||
fe->dai_link->name);
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
|
|
@ -372,6 +372,7 @@ static const struct hda_dai_widget_dma_ops hda_ipc4_chain_dma_ops = {
|
|||
static int hda_ipc3_post_trigger(struct snd_sof_dev *sdev, struct snd_soc_dai *cpu_dai,
|
||||
struct snd_pcm_substream *substream, int cmd)
|
||||
{
|
||||
struct hdac_ext_stream *hext_stream = hda_get_hext_stream(sdev, cpu_dai, substream);
|
||||
struct snd_soc_dapm_widget *w = snd_soc_dai_get_widget(cpu_dai, substream->stream);
|
||||
|
||||
switch (cmd) {
|
||||
|
@ -379,9 +380,17 @@ static int hda_ipc3_post_trigger(struct snd_sof_dev *sdev, struct snd_soc_dai *c
|
|||
case SNDRV_PCM_TRIGGER_STOP:
|
||||
{
|
||||
struct snd_sof_dai_config_data data = { 0 };
|
||||
int ret;
|
||||
|
||||
data.dai_data = DMA_CHAN_INVALID;
|
||||
return hda_dai_config(w, SOF_DAI_CONFIG_FLAGS_HW_FREE, &data);
|
||||
ret = hda_dai_config(w, SOF_DAI_CONFIG_FLAGS_HW_FREE, &data);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (cmd == SNDRV_PCM_TRIGGER_STOP)
|
||||
return hda_link_dma_cleanup(substream, hext_stream, cpu_dai);
|
||||
|
||||
break;
|
||||
}
|
||||
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
|
||||
return hda_dai_config(w, SOF_DAI_CONFIG_FLAGS_PAUSE, NULL);
|
||||
|
|
|
@ -107,9 +107,8 @@ hda_dai_get_ops(struct snd_pcm_substream *substream, struct snd_soc_dai *cpu_dai
|
|||
return sdai->platform_private;
|
||||
}
|
||||
|
||||
static int hda_link_dma_cleanup(struct snd_pcm_substream *substream,
|
||||
struct hdac_ext_stream *hext_stream,
|
||||
struct snd_soc_dai *cpu_dai)
|
||||
int hda_link_dma_cleanup(struct snd_pcm_substream *substream, struct hdac_ext_stream *hext_stream,
|
||||
struct snd_soc_dai *cpu_dai)
|
||||
{
|
||||
const struct hda_dai_widget_dma_ops *ops = hda_dai_get_ops(substream, cpu_dai);
|
||||
struct sof_intel_hda_stream *hda_stream;
|
||||
|
|
|
@ -963,5 +963,7 @@ const struct hda_dai_widget_dma_ops *
|
|||
hda_select_dai_widget_ops(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget);
|
||||
int hda_dai_config(struct snd_soc_dapm_widget *w, unsigned int flags,
|
||||
struct snd_sof_dai_config_data *data);
|
||||
int hda_link_dma_cleanup(struct snd_pcm_substream *substream, struct hdac_ext_stream *hext_stream,
|
||||
struct snd_soc_dai *cpu_dai);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1001,7 +1001,7 @@ void sof_ipc3_do_rx_work(struct snd_sof_dev *sdev, struct sof_ipc_cmd_hdr *hdr,
|
|||
|
||||
ipc3_log_header(sdev->dev, "ipc rx", hdr->cmd);
|
||||
|
||||
if (hdr->size < sizeof(hdr) || hdr->size > SOF_IPC_MSG_MAX_SIZE) {
|
||||
if (hdr->size < sizeof(*hdr) || hdr->size > SOF_IPC_MSG_MAX_SIZE) {
|
||||
dev_err(sdev->dev, "The received message size is invalid: %u\n",
|
||||
hdr->size);
|
||||
return;
|
||||
|
|
|
@ -1731,6 +1731,9 @@ sof_ipc4_prepare_copier_module(struct snd_sof_widget *swidget,
|
|||
|
||||
*ipc_config_size = ipc_size;
|
||||
|
||||
/* update pipeline memory usage */
|
||||
sof_ipc4_update_resource_usage(sdev, swidget, &copier_data->base_config);
|
||||
|
||||
/* copy IPC data */
|
||||
memcpy(*ipc_config_data, (void *)copier_data, sizeof(*copier_data));
|
||||
if (gtw_cfg_config_length)
|
||||
|
@ -1743,9 +1746,6 @@ sof_ipc4_prepare_copier_module(struct snd_sof_widget *swidget,
|
|||
gtw_cfg_config_length,
|
||||
&ipc4_copier->dma_config_tlv, dma_config_tlv_size);
|
||||
|
||||
/* update pipeline memory usage */
|
||||
sof_ipc4_update_resource_usage(sdev, swidget, &copier_data->base_config);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -4507,6 +4507,35 @@ YAMAHA_DEVICE(0x7010, "UB99"),
|
|||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
/* Advanced modes of the Mythware XA001AU.
|
||||
* For the standard mode, Mythware XA001AU has ID ffad:a001
|
||||
*/
|
||||
USB_DEVICE_VENDOR_SPEC(0xffad, 0xa001),
|
||||
.driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
|
||||
.vendor_name = "Mythware",
|
||||
.product_name = "XA001AU",
|
||||
.ifnum = QUIRK_ANY_INTERFACE,
|
||||
.type = QUIRK_COMPOSITE,
|
||||
.data = (const struct snd_usb_audio_quirk[]) {
|
||||
{
|
||||
.ifnum = 0,
|
||||
.type = QUIRK_IGNORE_INTERFACE,
|
||||
},
|
||||
{
|
||||
.ifnum = 1,
|
||||
.type = QUIRK_AUDIO_STANDARD_INTERFACE,
|
||||
},
|
||||
{
|
||||
.ifnum = 2,
|
||||
.type = QUIRK_AUDIO_STANDARD_INTERFACE,
|
||||
},
|
||||
{
|
||||
.ifnum = -1
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
#undef USB_DEVICE_VENDOR_SPEC
|
||||
#undef USB_AUDIO_DEVICE
|
||||
|
|
Loading…
Reference in New Issue