mirror of
https://github.com/torvalds/linux.git
synced 2025-11-30 23:16:01 +07:00
Merge tag 'sound-6.18-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai:
"A collection of small fixes. It became slightly bigger than usual due
to timing issues (holidays, etc), but all changes are rather
device-specific fixes, so not really worrisome.
- ASoC Cirrus codec fixes for AMD
- Various fixes for ASoC Intel AVS, Qualcomm, SoundWire, FSL,
Mediatek, Renesas
- A few HD-audio quirks, and USB-audio regression fixes for Presonus"
* tag 'sound-6.18-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (24 commits)
ALSA: hda/realtek: Enable mic on Vaio RPL
ASoC: dt-bindings: pm4125-sdw: correct number of soundwire ports
ASoC: renesas: rz-ssi: Use proper dma_buffer_pos after resume
ASoC: soc_sdw_utils: remove cs42l43 component_name
ASoC: fsl_sai: Fix sync error in consumer mode
ASoC: Fix build for sdw_utils
ALSA: hda/realtek: Fix mute led for HP Victus 15-fa1xxx (MB 8C2D)
ASoC: rt721: fix prepare clock stop failed
ALSA: usb-audio: don't log messages meant for 1810c when initializing 1824c
ASoC: mediatek: Fix double pm_runtime_disable in remove functions
ASoC: fsl_micfil: correct the endian format for DSD
ASoC: fsl_sai: fix bit order for DSD format
ASoC: Intel: avs: Use snd_codec format when initializing probe
ASoC: Intel: avs: Disable periods-elapsed work when closing PCM
ASoC: Intel: avs: Unprepare a stream when XRUN occurs
ASoC: sdw_utils: add name_prefix for rt1321 part id
ASoC: qdsp6: q6asm: do not sleep while atomic
ASoC: Intel: soc-acpi-intel-ptl-match: Remove cs42l43 match from sdw link3
ASOC: max98090/91: fix for filter configuration: AHPF removed DMIC2_HPF added
ASoC: amd: acp: Add ACP7.0 match entries for cs35l56 and cs42l43
...
This commit is contained in:
@@ -32,7 +32,7 @@ properties:
|
||||
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
minItems: 2
|
||||
maxItems: 2
|
||||
maxItems: 4
|
||||
items:
|
||||
enum: [1, 2, 3, 4]
|
||||
|
||||
@@ -48,7 +48,7 @@ properties:
|
||||
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
minItems: 2
|
||||
maxItems: 2
|
||||
maxItems: 5
|
||||
items:
|
||||
enum: [1, 2, 3, 4, 5]
|
||||
|
||||
|
||||
@@ -3736,6 +3736,7 @@ enum {
|
||||
ALC285_FIXUP_ASUS_GA605K_I2C_SPEAKER2_TO_DAC1,
|
||||
ALC269_FIXUP_POSITIVO_P15X_HEADSET_MIC,
|
||||
ALC289_FIXUP_ASUS_ZEPHYRUS_DUAL_SPK,
|
||||
ALC256_FIXUP_VAIO_RPL_MIC_NO_PRESENCE,
|
||||
};
|
||||
|
||||
/* A special fixup for Lenovo C940 and Yoga Duet 7;
|
||||
@@ -6172,6 +6173,16 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||
{ 0x1e, 0x90170150 }, /* Internal Speaker */
|
||||
{ }
|
||||
},
|
||||
},
|
||||
[ALC256_FIXUP_VAIO_RPL_MIC_NO_PRESENCE] = {
|
||||
.type = HDA_FIXUP_PINS,
|
||||
.v.pins = (const struct hda_pintbl[]) {
|
||||
{ 0x19, 0x03a1113c }, /* use as headset mic, without its own jack detect */
|
||||
{ 0x1a, 0x22a190a0 }, /* dock mic */
|
||||
{ }
|
||||
},
|
||||
.chained = true,
|
||||
.chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST
|
||||
}
|
||||
};
|
||||
|
||||
@@ -6578,6 +6589,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x103c, 0x8c16, "HP Spectre x360 2-in-1 Laptop 16-aa0xxx", ALC245_FIXUP_HP_SPECTRE_X360_16_AA0XXX),
|
||||
SND_PCI_QUIRK(0x103c, 0x8c17, "HP Spectre 16", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x103c, 0x8c21, "HP Pavilion Plus Laptop 14-ey0XXX", ALC245_FIXUP_HP_X360_MUTE_LEDS),
|
||||
SND_PCI_QUIRK(0x103c, 0x8c2d, "HP Victus 15-fa1xxx (MB 8C2D)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
||||
SND_PCI_QUIRK(0x103c, 0x8c30, "HP Victus 15-fb1xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
||||
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),
|
||||
@@ -6959,6 +6971,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1558, 0x971d, "Clevo N970T[CDF]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1558, 0xa500, "Clevo NL5[03]RU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1558, 0xa554, "VAIO VJFH52", ALC269_FIXUP_VAIO_VJFH52_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1558, 0xa559, "VAIO RPL", ALC256_FIXUP_VAIO_RPL_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1558, 0xa600, "Clevo NL50NU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1558, 0xa650, "Clevo NP[567]0SN[CD]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x1558, 0xa671, "Clevo NP70SN[CDE]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
|
||||
@@ -7080,6 +7093,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x17aa, 0x38a9, "Thinkbook 16P", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
|
||||
SND_PCI_QUIRK(0x17aa, 0x38ab, "Thinkbook 16P", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
|
||||
SND_PCI_QUIRK(0x17aa, 0x38b4, "Legion Slim 7 16IRH8", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
HDA_CODEC_QUIRK(0x17aa, 0x391c, "Lenovo Yoga 7 2-in-1 14AKP10", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
|
||||
SND_PCI_QUIRK(0x17aa, 0x38b5, "Legion Slim 7 16IRH8", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x17aa, 0x38b6, "Legion Slim 7 16APH8", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
SND_PCI_QUIRK(0x17aa, 0x38b7, "Legion Slim 7 16APH8", ALC287_FIXUP_CS35L41_I2C_2),
|
||||
|
||||
@@ -30,6 +30,20 @@ static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
|
||||
.group_id = 1
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_endpoint spk_2_endpoint = {
|
||||
.num = 0,
|
||||
.aggregated = 1,
|
||||
.group_position = 2,
|
||||
.group_id = 1
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_endpoint spk_3_endpoint = {
|
||||
.num = 0,
|
||||
.aggregated = 1,
|
||||
.group_position = 3,
|
||||
.group_id = 1
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_adr_device rt711_rt1316_group_adr[] = {
|
||||
{
|
||||
.adr = 0x000030025D071101ull,
|
||||
@@ -112,6 +126,134 @@ static const struct snd_soc_acpi_adr_device rt1320_1_single_adr[] = {
|
||||
}
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_endpoint cs42l43_endpoints[] = {
|
||||
{ /* Jack Playback Endpoint */
|
||||
.num = 0,
|
||||
.aggregated = 0,
|
||||
.group_position = 0,
|
||||
.group_id = 0,
|
||||
},
|
||||
{ /* DMIC Capture Endpoint */
|
||||
.num = 1,
|
||||
.aggregated = 0,
|
||||
.group_position = 0,
|
||||
.group_id = 0,
|
||||
},
|
||||
{ /* Jack Capture Endpoint */
|
||||
.num = 2,
|
||||
.aggregated = 0,
|
||||
.group_position = 0,
|
||||
.group_id = 0,
|
||||
},
|
||||
{ /* Speaker Playback Endpoint */
|
||||
.num = 3,
|
||||
.aggregated = 0,
|
||||
.group_position = 0,
|
||||
.group_id = 0,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_adr_device cs42l43_0_adr[] = {
|
||||
{
|
||||
.adr = 0x00003001FA424301ull,
|
||||
.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),
|
||||
.endpoints = cs42l43_endpoints,
|
||||
.name_prefix = "cs42l43"
|
||||
}
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_adr_device cs42l43_1_cs35l56x4_1_adr[] = {
|
||||
{
|
||||
.adr = 0x00013001FA424301ull,
|
||||
.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),
|
||||
.endpoints = cs42l43_endpoints,
|
||||
.name_prefix = "cs42l43"
|
||||
},
|
||||
{
|
||||
.adr = 0x00013001FA355601ull,
|
||||
.num_endpoints = 1,
|
||||
.endpoints = &spk_l_endpoint,
|
||||
.name_prefix = "AMP1"
|
||||
},
|
||||
{
|
||||
.adr = 0x00013101FA355601ull,
|
||||
.num_endpoints = 1,
|
||||
.endpoints = &spk_r_endpoint,
|
||||
.name_prefix = "AMP2"
|
||||
},
|
||||
{
|
||||
.adr = 0x00013201FA355601ull,
|
||||
.num_endpoints = 1,
|
||||
.endpoints = &spk_2_endpoint,
|
||||
.name_prefix = "AMP3"
|
||||
},
|
||||
{
|
||||
.adr = 0x00013301FA355601ull,
|
||||
.num_endpoints = 1,
|
||||
.endpoints = &spk_3_endpoint,
|
||||
.name_prefix = "AMP4"
|
||||
},
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_adr_device cs35l56x4_1_adr[] = {
|
||||
{
|
||||
.adr = 0x00013301FA355601ull,
|
||||
.num_endpoints = 1,
|
||||
.endpoints = &spk_l_endpoint,
|
||||
.name_prefix = "AMP1"
|
||||
},
|
||||
{
|
||||
.adr = 0x00013201FA355601ull,
|
||||
.num_endpoints = 1,
|
||||
.endpoints = &spk_r_endpoint,
|
||||
.name_prefix = "AMP2"
|
||||
},
|
||||
{
|
||||
.adr = 0x00013101FA355601ull,
|
||||
.num_endpoints = 1,
|
||||
.endpoints = &spk_2_endpoint,
|
||||
.name_prefix = "AMP3"
|
||||
},
|
||||
{
|
||||
.adr = 0x00013001FA355601ull,
|
||||
.num_endpoints = 1,
|
||||
.endpoints = &spk_3_endpoint,
|
||||
.name_prefix = "AMP4"
|
||||
},
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_link_adr acp70_cs42l43_l1_cs35l56x4_l1[] = {
|
||||
{
|
||||
.mask = BIT(1),
|
||||
.num_adr = ARRAY_SIZE(cs42l43_1_cs35l56x4_1_adr),
|
||||
.adr_d = cs42l43_1_cs35l56x4_1_adr,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_link_adr acp70_cs42l43_l0_cs35l56x4_l1[] = {
|
||||
{
|
||||
.mask = BIT(0),
|
||||
.num_adr = ARRAY_SIZE(cs42l43_0_adr),
|
||||
.adr_d = cs42l43_0_adr,
|
||||
},
|
||||
{
|
||||
.mask = BIT(1),
|
||||
.num_adr = ARRAY_SIZE(cs35l56x4_1_adr),
|
||||
.adr_d = cs35l56x4_1_adr,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_link_adr acp70_cs35l56x4_l1[] = {
|
||||
{
|
||||
.mask = BIT(1),
|
||||
.num_adr = ARRAY_SIZE(cs35l56x4_1_adr),
|
||||
.adr_d = cs35l56x4_1_adr,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_link_adr acp70_rt722_only[] = {
|
||||
{
|
||||
.mask = BIT(0),
|
||||
@@ -151,6 +293,21 @@ struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sdw_machines[] = {
|
||||
.links = acp70_4_in_1_sdca,
|
||||
.drv_name = "amd_sdw",
|
||||
},
|
||||
{
|
||||
.link_mask = BIT(0) | BIT(1),
|
||||
.links = acp70_cs42l43_l0_cs35l56x4_l1,
|
||||
.drv_name = "amd_sdw",
|
||||
},
|
||||
{
|
||||
.link_mask = BIT(1),
|
||||
.links = acp70_cs42l43_l1_cs35l56x4_l1,
|
||||
.drv_name = "amd_sdw",
|
||||
},
|
||||
{
|
||||
.link_mask = BIT(1),
|
||||
.links = acp70_cs35l56x4_l1,
|
||||
.drv_name = "amd_sdw",
|
||||
},
|
||||
{},
|
||||
};
|
||||
EXPORT_SYMBOL(snd_soc_acpi_amd_acp70_sdw_machines);
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
#include <kunit/resource.h>
|
||||
#include <kunit/test.h>
|
||||
#include <kunit/test-bug.h>
|
||||
#include <kunit/static_stub.h>
|
||||
#include <linux/device/faux.h>
|
||||
#include <linux/firmware/cirrus/cs_dsp.h>
|
||||
|
||||
@@ -793,7 +793,7 @@ static int cs530x_set_sysclk(struct snd_soc_component *component, int clk_id,
|
||||
case CS530X_SYSCLK_SRC_PLL:
|
||||
break;
|
||||
default:
|
||||
dev_err(component->dev, "Invalid clock id %d\n", clk_id);
|
||||
dev_err(component->dev, "Invalid sysclk source: %d\n", source);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
@@ -1239,6 +1239,8 @@ static const struct snd_soc_dapm_widget max98091_dapm_widgets[] = {
|
||||
SND_SOC_DAPM_SUPPLY("DMIC4_ENA", M98090_REG_DIGITAL_MIC_ENABLE,
|
||||
M98090_DIGMIC4_SHIFT, 0, max98090_shdn_event,
|
||||
SND_SOC_DAPM_POST_PMU),
|
||||
SND_SOC_DAPM_SUPPLY("DMIC34_HPF", M98090_REG_FILTER_CONFIG,
|
||||
M98090_FLT_DMIC34HPF_SHIFT, 0, NULL, 0),
|
||||
};
|
||||
|
||||
static const struct snd_soc_dapm_route max98090_dapm_routes[] = {
|
||||
@@ -1427,8 +1429,8 @@ static const struct snd_soc_dapm_route max98091_dapm_routes[] = {
|
||||
/* DMIC inputs */
|
||||
{"DMIC3", NULL, "DMIC3_ENA"},
|
||||
{"DMIC4", NULL, "DMIC4_ENA"},
|
||||
{"DMIC3", NULL, "AHPF"},
|
||||
{"DMIC4", NULL, "AHPF"},
|
||||
{"DMIC3", NULL, "DMIC34_HPF"},
|
||||
{"DMIC4", NULL, "DMIC34_HPF"},
|
||||
};
|
||||
|
||||
static int max98090_add_widgets(struct snd_soc_component *component)
|
||||
|
||||
@@ -281,6 +281,10 @@ static void rt721_sdca_jack_preset(struct rt721_sdca_priv *rt721)
|
||||
rt_sdca_index_write(rt721->mbq_regmap, RT721_BOOST_CTRL,
|
||||
RT721_BST_4CH_TOP_GATING_CTRL1, 0x002a);
|
||||
regmap_write(rt721->regmap, 0x2f58, 0x07);
|
||||
|
||||
regmap_write(rt721->regmap, 0x2f51, 0x00);
|
||||
rt_sdca_index_write(rt721->mbq_regmap, RT721_HDA_SDCA_FLOAT,
|
||||
RT721_MISC_CTL, 0x0004);
|
||||
}
|
||||
|
||||
static void rt721_sdca_jack_init(struct rt721_sdca_priv *rt721)
|
||||
|
||||
@@ -137,6 +137,7 @@ struct rt721_sdca_dmic_kctrl_priv {
|
||||
#define RT721_HDA_LEGACY_UAJ_CTL 0x02
|
||||
#define RT721_HDA_LEGACY_CTL1 0x05
|
||||
#define RT721_HDA_LEGACY_RESET_CTL 0x06
|
||||
#define RT721_MISC_CTL 0x07
|
||||
#define RT721_XU_REL_CTRL 0x0c
|
||||
#define RT721_GE_REL_CTRL1 0x0d
|
||||
#define RT721_HDA_LEGACY_GPIO_WAKE_EN_CTL 0x0e
|
||||
|
||||
@@ -131,7 +131,7 @@ static struct fsl_micfil_soc_data fsl_micfil_imx943 = {
|
||||
.fifos = 8,
|
||||
.fifo_depth = 32,
|
||||
.dataline = 0xf,
|
||||
.formats = SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_DSD_U32_BE,
|
||||
.formats = SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_DSD_U32_LE,
|
||||
.use_edma = true,
|
||||
.use_verid = true,
|
||||
.volume_sx = false,
|
||||
@@ -823,7 +823,7 @@ static int fsl_micfil_hw_params(struct snd_pcm_substream *substream,
|
||||
break;
|
||||
}
|
||||
|
||||
if (format == SNDRV_PCM_FORMAT_DSD_U32_BE) {
|
||||
if (format == SNDRV_PCM_FORMAT_DSD_U32_LE) {
|
||||
micfil->dec_bypass = true;
|
||||
/*
|
||||
* According to equation 29 in RM:
|
||||
|
||||
@@ -353,7 +353,6 @@ static int fsl_sai_set_dai_fmt_tr(struct snd_soc_dai *cpu_dai,
|
||||
break;
|
||||
case SND_SOC_DAIFMT_PDM:
|
||||
val_cr2 |= FSL_SAI_CR2_BCP;
|
||||
val_cr4 &= ~FSL_SAI_CR4_MF;
|
||||
sai->is_pdm_mode = true;
|
||||
break;
|
||||
case SND_SOC_DAIFMT_RIGHT_J:
|
||||
@@ -638,7 +637,7 @@ static int fsl_sai_hw_params(struct snd_pcm_substream *substream,
|
||||
val_cr5 |= FSL_SAI_CR5_WNW(slot_width);
|
||||
val_cr5 |= FSL_SAI_CR5_W0W(slot_width);
|
||||
|
||||
if (sai->is_lsb_first || sai->is_pdm_mode)
|
||||
if (sai->is_lsb_first)
|
||||
val_cr5 |= FSL_SAI_CR5_FBT(0);
|
||||
else
|
||||
val_cr5 |= FSL_SAI_CR5_FBT(word_width - 1);
|
||||
@@ -653,12 +652,12 @@ static int fsl_sai_hw_params(struct snd_pcm_substream *substream,
|
||||
val_cr4 |= FSL_SAI_CR4_CHMOD;
|
||||
|
||||
/*
|
||||
* For SAI provider mode, when Tx(Rx) sync with Rx(Tx) clock, Rx(Tx) will
|
||||
* generate bclk and frame clock for Tx(Rx), we should set RCR4(TCR4),
|
||||
* RCR5(TCR5) for playback(capture), or there will be sync error.
|
||||
* When Tx(Rx) sync with Rx(Tx) clock, Rx(Tx) will provide bclk and
|
||||
* frame clock for Tx(Rx). We should set RCR4(TCR4), RCR5(TCR5)
|
||||
* for playback(capture), or there will be sync error.
|
||||
*/
|
||||
|
||||
if (!sai->is_consumer_mode[tx] && fsl_sai_dir_is_synced(sai, adir)) {
|
||||
if (fsl_sai_dir_is_synced(sai, adir)) {
|
||||
regmap_update_bits(sai->regmap, FSL_SAI_xCR4(!tx, ofs),
|
||||
FSL_SAI_CR4_SYWD_MASK | FSL_SAI_CR4_FRSZ_MASK |
|
||||
FSL_SAI_CR4_CHMOD_MASK,
|
||||
|
||||
@@ -651,6 +651,7 @@ static void avs_dai_fe_shutdown(struct snd_pcm_substream *substream, struct snd_
|
||||
|
||||
data = snd_soc_dai_get_dma_data(dai, substream);
|
||||
|
||||
disable_work_sync(&data->period_elapsed_work);
|
||||
snd_hdac_ext_stream_release(data->host_stream, HDAC_EXT_STREAM_TYPE_HOST);
|
||||
avs_dai_shutdown(substream, dai);
|
||||
}
|
||||
@@ -754,6 +755,8 @@ static int avs_dai_fe_prepare(struct snd_pcm_substream *substream, struct snd_so
|
||||
data = snd_soc_dai_get_dma_data(dai, substream);
|
||||
host_stream = data->host_stream;
|
||||
|
||||
if (runtime->state == SNDRV_PCM_STATE_XRUN)
|
||||
hdac_stream(host_stream)->prepared = false;
|
||||
if (hdac_stream(host_stream)->prepared)
|
||||
return 0;
|
||||
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
#include "debug.h"
|
||||
#include "messages.h"
|
||||
|
||||
static int avs_dsp_init_probe(struct avs_dev *adev, union avs_connector_node_id node_id,
|
||||
size_t buffer_size)
|
||||
static int avs_dsp_init_probe(struct avs_dev *adev, struct snd_compr_params *params, int bps,
|
||||
union avs_connector_node_id node_id, size_t buffer_size)
|
||||
{
|
||||
struct avs_probe_cfg cfg = {{0}};
|
||||
struct avs_module_entry mentry;
|
||||
@@ -27,12 +27,16 @@ static int avs_dsp_init_probe(struct avs_dev *adev, union avs_connector_node_id
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* Probe module uses no cycles, audio data format and input and output
|
||||
* frame sizes are unused. It is also not owned by any pipeline.
|
||||
* Probe module uses no cycles, input and output frame sizes are unused.
|
||||
* It is also not owned by any pipeline.
|
||||
*/
|
||||
cfg.base.ibs = 1;
|
||||
/* BSS module descriptor is always segment of index=2. */
|
||||
cfg.base.is_pages = mentry.segments[2].flags.length;
|
||||
cfg.base.audio_fmt.sampling_freq = params->codec.sample_rate;
|
||||
cfg.base.audio_fmt.bit_depth = bps;
|
||||
cfg.base.audio_fmt.num_channels = params->codec.ch_out;
|
||||
cfg.base.audio_fmt.valid_bit_depth = bps;
|
||||
cfg.gtw_cfg.node_id = node_id;
|
||||
cfg.gtw_cfg.dma_buffer_size = buffer_size;
|
||||
|
||||
@@ -128,8 +132,6 @@ static int avs_probe_compr_set_params(struct snd_compr_stream *cstream,
|
||||
struct hdac_ext_stream *host_stream = avs_compr_get_host_stream(cstream);
|
||||
struct snd_compr_runtime *rtd = cstream->runtime;
|
||||
struct avs_dev *adev = to_avs_dev(dai->dev);
|
||||
/* compr params do not store bit depth, default to S32_LE. */
|
||||
snd_pcm_format_t format = SNDRV_PCM_FORMAT_S32_LE;
|
||||
unsigned int format_val;
|
||||
int bps, ret;
|
||||
|
||||
@@ -142,7 +144,7 @@ static int avs_probe_compr_set_params(struct snd_compr_stream *cstream,
|
||||
ret = snd_compr_malloc_pages(cstream, rtd->buffer_size);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
bps = snd_pcm_format_physical_width(format);
|
||||
bps = snd_pcm_format_physical_width(params->codec.format);
|
||||
if (bps < 0)
|
||||
return bps;
|
||||
format_val = snd_hdac_stream_format(params->codec.ch_out, bps, params->codec.sample_rate);
|
||||
@@ -166,7 +168,7 @@ static int avs_probe_compr_set_params(struct snd_compr_stream *cstream,
|
||||
node_id.vindex = hdac_stream(host_stream)->stream_tag - 1;
|
||||
node_id.dma_type = AVS_DMA_HDA_HOST_INPUT;
|
||||
|
||||
ret = avs_dsp_init_probe(adev, node_id, rtd->dma_bytes);
|
||||
ret = avs_dsp_init_probe(adev, params, bps, node_id, rtd->dma_bytes);
|
||||
if (ret < 0) {
|
||||
dev_err(dai->dev, "probe init failed: %d\n", ret);
|
||||
avs_dsp_enable_d0ix(adev);
|
||||
|
||||
@@ -227,33 +227,6 @@ static const struct snd_soc_acpi_endpoint cs42l43_amp_spkagg_endpoints[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_endpoint cs42l43_endpoints[] = {
|
||||
{ /* Jack Playback Endpoint */
|
||||
.num = 0,
|
||||
.aggregated = 0,
|
||||
.group_position = 0,
|
||||
.group_id = 0,
|
||||
},
|
||||
{ /* DMIC Capture Endpoint */
|
||||
.num = 1,
|
||||
.aggregated = 0,
|
||||
.group_position = 0,
|
||||
.group_id = 0,
|
||||
},
|
||||
{ /* Jack Capture Endpoint */
|
||||
.num = 2,
|
||||
.aggregated = 0,
|
||||
.group_position = 0,
|
||||
.group_id = 0,
|
||||
},
|
||||
{ /* Speaker Playback Endpoint */
|
||||
.num = 3,
|
||||
.aggregated = 0,
|
||||
.group_position = 0,
|
||||
.group_id = 0,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_adr_device cs42l43_2_adr[] = {
|
||||
{
|
||||
.adr = 0x00023001fa424301ull,
|
||||
@@ -305,15 +278,6 @@ static const struct snd_soc_acpi_adr_device cs35l56_3_3amp_adr[] = {
|
||||
}
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_adr_device cs42l43_3_adr[] = {
|
||||
{
|
||||
.adr = 0x00033001FA424301ull,
|
||||
.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),
|
||||
.endpoints = cs42l43_endpoints,
|
||||
.name_prefix = "cs42l43"
|
||||
}
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {
|
||||
{
|
||||
.adr = 0x000030025D071101ull,
|
||||
@@ -486,15 +450,6 @@ static const struct snd_soc_acpi_link_adr ptl_cs42l43_l2_cs35l56x6_l13[] = {
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_link_adr ptl_cs42l43_l3[] = {
|
||||
{
|
||||
.mask = BIT(3),
|
||||
.num_adr = ARRAY_SIZE(cs42l43_3_adr),
|
||||
.adr_d = cs42l43_3_adr,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct snd_soc_acpi_link_adr ptl_rt721_l0[] = {
|
||||
{
|
||||
.mask = BIT(0),
|
||||
@@ -712,13 +667,6 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_ptl_sdw_machines[] = {
|
||||
.sof_tplg_filename = "sof-ptl-rt722.tplg",
|
||||
.get_function_tplg_files = sof_sdw_get_tplg_files,
|
||||
},
|
||||
{
|
||||
.link_mask = BIT(3),
|
||||
.links = ptl_cs42l43_l3,
|
||||
.drv_name = "sof_sdw",
|
||||
.sof_tplg_filename = "sof-ptl-cs42l43-l3.tplg",
|
||||
.get_function_tplg_files = sof_sdw_get_tplg_files,
|
||||
},
|
||||
{
|
||||
.link_mask = BIT(3),
|
||||
.links = ptl_sdw_rt712_vb_l3_rt1320_l3,
|
||||
|
||||
@@ -3176,7 +3176,6 @@ err_pm_put:
|
||||
|
||||
static void mt8195_afe_pcm_dev_remove(struct platform_device *pdev)
|
||||
{
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
if (!pm_runtime_status_suspended(&pdev->dev))
|
||||
mt8195_afe_runtime_suspend(&pdev->dev);
|
||||
}
|
||||
|
||||
@@ -2238,7 +2238,6 @@ static void mt8365_afe_pcm_dev_remove(struct platform_device *pdev)
|
||||
|
||||
mt8365_afe_disable_top_cg(afe, MT8365_TOP_CG_AFE);
|
||||
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
if (!pm_runtime_status_suspended(&pdev->dev))
|
||||
mt8365_afe_runtime_suspend(&pdev->dev);
|
||||
}
|
||||
|
||||
@@ -377,9 +377,9 @@ static void q6asm_audio_client_free_buf(struct audio_client *ac,
|
||||
|
||||
spin_lock_irqsave(&ac->lock, flags);
|
||||
port->num_periods = 0;
|
||||
spin_unlock_irqrestore(&ac->lock, flags);
|
||||
kfree(port->buf);
|
||||
port->buf = NULL;
|
||||
spin_unlock_irqrestore(&ac->lock, flags);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -85,6 +85,7 @@ struct rz_ssi_stream {
|
||||
struct snd_pcm_substream *substream;
|
||||
int fifo_sample_size; /* sample capacity of SSI FIFO */
|
||||
int dma_buffer_pos; /* The address for the next DMA descriptor */
|
||||
int completed_dma_buf_pos; /* The address of the last completed DMA descriptor. */
|
||||
int period_counter; /* for keeping track of periods transferred */
|
||||
int sample_width;
|
||||
int buffer_pos; /* current frame position in the buffer */
|
||||
@@ -215,6 +216,7 @@ static void rz_ssi_stream_init(struct rz_ssi_stream *strm,
|
||||
rz_ssi_set_substream(strm, substream);
|
||||
strm->sample_width = samples_to_bytes(runtime, 1);
|
||||
strm->dma_buffer_pos = 0;
|
||||
strm->completed_dma_buf_pos = 0;
|
||||
strm->period_counter = 0;
|
||||
strm->buffer_pos = 0;
|
||||
|
||||
@@ -437,6 +439,10 @@ static void rz_ssi_pointer_update(struct rz_ssi_stream *strm, int frames)
|
||||
snd_pcm_period_elapsed(strm->substream);
|
||||
strm->period_counter = current_period;
|
||||
}
|
||||
|
||||
strm->completed_dma_buf_pos += runtime->period_size;
|
||||
if (strm->completed_dma_buf_pos >= runtime->buffer_size)
|
||||
strm->completed_dma_buf_pos = 0;
|
||||
}
|
||||
|
||||
static int rz_ssi_pio_recv(struct rz_ssi_priv *ssi, struct rz_ssi_stream *strm)
|
||||
@@ -778,10 +784,14 @@ no_dma:
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static int rz_ssi_trigger_resume(struct rz_ssi_priv *ssi)
|
||||
static int rz_ssi_trigger_resume(struct rz_ssi_priv *ssi, struct rz_ssi_stream *strm)
|
||||
{
|
||||
struct snd_pcm_substream *substream = strm->substream;
|
||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
int ret;
|
||||
|
||||
strm->dma_buffer_pos = strm->completed_dma_buf_pos + runtime->period_size;
|
||||
|
||||
if (rz_ssi_is_stream_running(&ssi->playback) ||
|
||||
rz_ssi_is_stream_running(&ssi->capture))
|
||||
return 0;
|
||||
@@ -794,16 +804,6 @@ static int rz_ssi_trigger_resume(struct rz_ssi_priv *ssi)
|
||||
ssi->hw_params_cache.channels);
|
||||
}
|
||||
|
||||
static void rz_ssi_streams_suspend(struct rz_ssi_priv *ssi)
|
||||
{
|
||||
if (rz_ssi_is_stream_running(&ssi->playback) ||
|
||||
rz_ssi_is_stream_running(&ssi->capture))
|
||||
return;
|
||||
|
||||
ssi->playback.dma_buffer_pos = 0;
|
||||
ssi->capture.dma_buffer_pos = 0;
|
||||
}
|
||||
|
||||
static int rz_ssi_dai_trigger(struct snd_pcm_substream *substream, int cmd,
|
||||
struct snd_soc_dai *dai)
|
||||
{
|
||||
@@ -813,7 +813,7 @@ static int rz_ssi_dai_trigger(struct snd_pcm_substream *substream, int cmd,
|
||||
|
||||
switch (cmd) {
|
||||
case SNDRV_PCM_TRIGGER_RESUME:
|
||||
ret = rz_ssi_trigger_resume(ssi);
|
||||
ret = rz_ssi_trigger_resume(ssi, strm);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -852,7 +852,6 @@ static int rz_ssi_dai_trigger(struct snd_pcm_substream *substream, int cmd,
|
||||
|
||||
case SNDRV_PCM_TRIGGER_SUSPEND:
|
||||
rz_ssi_stop(ssi, strm);
|
||||
rz_ssi_streams_suspend(ssi);
|
||||
break;
|
||||
|
||||
case SNDRV_PCM_TRIGGER_STOP:
|
||||
|
||||
@@ -638,7 +638,6 @@ struct asoc_sdw_codec_info codec_info_list[] = {
|
||||
{
|
||||
.direction = {true, false},
|
||||
.dai_name = "cs42l43-dp6",
|
||||
.component_name = "cs42l43",
|
||||
.dai_type = SOC_SDW_DAI_TYPE_AMP,
|
||||
.dailink = {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID},
|
||||
.init = asoc_sdw_cs42l43_spk_init,
|
||||
|
||||
@@ -178,7 +178,7 @@ snd_sc1810c_get_status_field(struct usb_device *dev,
|
||||
|
||||
pkt_out.fields[SC1810C_STATE_F1_IDX] = SC1810C_SET_STATE_F1;
|
||||
pkt_out.fields[SC1810C_STATE_F2_IDX] = SC1810C_SET_STATE_F2;
|
||||
ret = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0),
|
||||
ret = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
|
||||
SC1810C_SET_STATE_REQ,
|
||||
SC1810C_SET_STATE_REQTYPE,
|
||||
(*seqnum), 0, &pkt_out, sizeof(pkt_out));
|
||||
@@ -597,15 +597,6 @@ int snd_sc1810_init_mixer(struct usb_mixer_interface *mixer)
|
||||
if (!list_empty(&chip->mixer_list))
|
||||
return 0;
|
||||
|
||||
dev_info(&dev->dev,
|
||||
"Presonus Studio 1810c, device_setup: %u\n", chip->setup);
|
||||
if (chip->setup == 1)
|
||||
dev_info(&dev->dev, "(8out/18in @ 48kHz)\n");
|
||||
else if (chip->setup == 2)
|
||||
dev_info(&dev->dev, "(6out/8in @ 192kHz)\n");
|
||||
else
|
||||
dev_info(&dev->dev, "(8out/14in @ 96kHz)\n");
|
||||
|
||||
ret = snd_s1810c_init_mixer_maps(chip);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
@@ -634,16 +625,28 @@ int snd_sc1810_init_mixer(struct usb_mixer_interface *mixer)
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
// The 1824c has a Mono Main switch instead of a
|
||||
// A/B select switch.
|
||||
if (mixer->chip->usb_id == USB_ID(0x194f, 0x010d)) {
|
||||
ret = snd_s1810c_switch_init(mixer, &snd_s1824c_mono_sw);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
} else if (mixer->chip->usb_id == USB_ID(0x194f, 0x010c)) {
|
||||
switch (chip->usb_id) {
|
||||
case USB_ID(0x194f, 0x010c): /* Presonus Studio 1810c */
|
||||
dev_info(&dev->dev,
|
||||
"Presonus Studio 1810c, device_setup: %u\n", chip->setup);
|
||||
if (chip->setup == 1)
|
||||
dev_info(&dev->dev, "(8out/18in @ 48kHz)\n");
|
||||
else if (chip->setup == 2)
|
||||
dev_info(&dev->dev, "(6out/8in @ 192kHz)\n");
|
||||
else
|
||||
dev_info(&dev->dev, "(8out/14in @ 96kHz)\n");
|
||||
|
||||
ret = snd_s1810c_switch_init(mixer, &snd_s1810c_ab_sw);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
break;
|
||||
case USB_ID(0x194f, 0x010d): /* Presonus Studio 1824c */
|
||||
ret = snd_s1810c_switch_init(mixer, &snd_s1824c_mono_sw);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user