Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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
...

+237 -107
+2 -2
Documentation/devicetree/bindings/sound/qcom,pm4125-sdw.yaml
··· 32 32 33 33 $ref: /schemas/types.yaml#/definitions/uint32-array 34 34 minItems: 2 35 - maxItems: 2 35 + maxItems: 4 36 36 items: 37 37 enum: [1, 2, 3, 4] 38 38 ··· 48 48 49 49 $ref: /schemas/types.yaml#/definitions/uint32-array 50 50 minItems: 2 51 - maxItems: 2 51 + maxItems: 5 52 52 items: 53 53 enum: [1, 2, 3, 4, 5] 54 54
+14
sound/hda/codecs/realtek/alc269.c
··· 3736 3736 ALC285_FIXUP_ASUS_GA605K_I2C_SPEAKER2_TO_DAC1, 3737 3737 ALC269_FIXUP_POSITIVO_P15X_HEADSET_MIC, 3738 3738 ALC289_FIXUP_ASUS_ZEPHYRUS_DUAL_SPK, 3739 + ALC256_FIXUP_VAIO_RPL_MIC_NO_PRESENCE, 3739 3740 }; 3740 3741 3741 3742 /* A special fixup for Lenovo C940 and Yoga Duet 7; ··· 6173 6172 { 0x1e, 0x90170150 }, /* Internal Speaker */ 6174 6173 { } 6175 6174 }, 6175 + }, 6176 + [ALC256_FIXUP_VAIO_RPL_MIC_NO_PRESENCE] = { 6177 + .type = HDA_FIXUP_PINS, 6178 + .v.pins = (const struct hda_pintbl[]) { 6179 + { 0x19, 0x03a1113c }, /* use as headset mic, without its own jack detect */ 6180 + { 0x1a, 0x22a190a0 }, /* dock mic */ 6181 + { } 6182 + }, 6183 + .chained = true, 6184 + .chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST 6176 6185 } 6177 6186 }; 6178 6187 ··· 6589 6578 SND_PCI_QUIRK(0x103c, 0x8c16, "HP Spectre x360 2-in-1 Laptop 16-aa0xxx", ALC245_FIXUP_HP_SPECTRE_X360_16_AA0XXX), 6590 6579 SND_PCI_QUIRK(0x103c, 0x8c17, "HP Spectre 16", ALC287_FIXUP_CS35L41_I2C_2), 6591 6580 SND_PCI_QUIRK(0x103c, 0x8c21, "HP Pavilion Plus Laptop 14-ey0XXX", ALC245_FIXUP_HP_X360_MUTE_LEDS), 6581 + SND_PCI_QUIRK(0x103c, 0x8c2d, "HP Victus 15-fa1xxx (MB 8C2D)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT), 6592 6582 SND_PCI_QUIRK(0x103c, 0x8c30, "HP Victus 15-fb1xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT), 6593 6583 SND_PCI_QUIRK(0x103c, 0x8c46, "HP EliteBook 830 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 6594 6584 SND_PCI_QUIRK(0x103c, 0x8c47, "HP EliteBook 840 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), ··· 6971 6959 SND_PCI_QUIRK(0x1558, 0x971d, "Clevo N970T[CDF]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 6972 6960 SND_PCI_QUIRK(0x1558, 0xa500, "Clevo NL5[03]RU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 6973 6961 SND_PCI_QUIRK(0x1558, 0xa554, "VAIO VJFH52", ALC269_FIXUP_VAIO_VJFH52_MIC_NO_PRESENCE), 6962 + SND_PCI_QUIRK(0x1558, 0xa559, "VAIO RPL", ALC256_FIXUP_VAIO_RPL_MIC_NO_PRESENCE), 6974 6963 SND_PCI_QUIRK(0x1558, 0xa600, "Clevo NL50NU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 6975 6964 SND_PCI_QUIRK(0x1558, 0xa650, "Clevo NP[567]0SN[CD]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 6976 6965 SND_PCI_QUIRK(0x1558, 0xa671, "Clevo NP70SN[CDE]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE), ··· 7093 7080 SND_PCI_QUIRK(0x17aa, 0x38a9, "Thinkbook 16P", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD), 7094 7081 SND_PCI_QUIRK(0x17aa, 0x38ab, "Thinkbook 16P", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD), 7095 7082 SND_PCI_QUIRK(0x17aa, 0x38b4, "Legion Slim 7 16IRH8", ALC287_FIXUP_CS35L41_I2C_2), 7083 + HDA_CODEC_QUIRK(0x17aa, 0x391c, "Lenovo Yoga 7 2-in-1 14AKP10", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN), 7096 7084 SND_PCI_QUIRK(0x17aa, 0x38b5, "Legion Slim 7 16IRH8", ALC287_FIXUP_CS35L41_I2C_2), 7097 7085 SND_PCI_QUIRK(0x17aa, 0x38b6, "Legion Slim 7 16APH8", ALC287_FIXUP_CS35L41_I2C_2), 7098 7086 SND_PCI_QUIRK(0x17aa, 0x38b7, "Legion Slim 7 16APH8", ALC287_FIXUP_CS35L41_I2C_2),
+157
sound/soc/amd/acp/amd-acp70-acpi-match.c
··· 30 30 .group_id = 1 31 31 }; 32 32 33 + static const struct snd_soc_acpi_endpoint spk_2_endpoint = { 34 + .num = 0, 35 + .aggregated = 1, 36 + .group_position = 2, 37 + .group_id = 1 38 + }; 39 + 40 + static const struct snd_soc_acpi_endpoint spk_3_endpoint = { 41 + .num = 0, 42 + .aggregated = 1, 43 + .group_position = 3, 44 + .group_id = 1 45 + }; 46 + 33 47 static const struct snd_soc_acpi_adr_device rt711_rt1316_group_adr[] = { 34 48 { 35 49 .adr = 0x000030025D071101ull, ··· 126 112 } 127 113 }; 128 114 115 + static const struct snd_soc_acpi_endpoint cs42l43_endpoints[] = { 116 + { /* Jack Playback Endpoint */ 117 + .num = 0, 118 + .aggregated = 0, 119 + .group_position = 0, 120 + .group_id = 0, 121 + }, 122 + { /* DMIC Capture Endpoint */ 123 + .num = 1, 124 + .aggregated = 0, 125 + .group_position = 0, 126 + .group_id = 0, 127 + }, 128 + { /* Jack Capture Endpoint */ 129 + .num = 2, 130 + .aggregated = 0, 131 + .group_position = 0, 132 + .group_id = 0, 133 + }, 134 + { /* Speaker Playback Endpoint */ 135 + .num = 3, 136 + .aggregated = 0, 137 + .group_position = 0, 138 + .group_id = 0, 139 + }, 140 + }; 141 + 142 + static const struct snd_soc_acpi_adr_device cs42l43_0_adr[] = { 143 + { 144 + .adr = 0x00003001FA424301ull, 145 + .num_endpoints = ARRAY_SIZE(cs42l43_endpoints), 146 + .endpoints = cs42l43_endpoints, 147 + .name_prefix = "cs42l43" 148 + } 149 + }; 150 + 151 + static const struct snd_soc_acpi_adr_device cs42l43_1_cs35l56x4_1_adr[] = { 152 + { 153 + .adr = 0x00013001FA424301ull, 154 + .num_endpoints = ARRAY_SIZE(cs42l43_endpoints), 155 + .endpoints = cs42l43_endpoints, 156 + .name_prefix = "cs42l43" 157 + }, 158 + { 159 + .adr = 0x00013001FA355601ull, 160 + .num_endpoints = 1, 161 + .endpoints = &spk_l_endpoint, 162 + .name_prefix = "AMP1" 163 + }, 164 + { 165 + .adr = 0x00013101FA355601ull, 166 + .num_endpoints = 1, 167 + .endpoints = &spk_r_endpoint, 168 + .name_prefix = "AMP2" 169 + }, 170 + { 171 + .adr = 0x00013201FA355601ull, 172 + .num_endpoints = 1, 173 + .endpoints = &spk_2_endpoint, 174 + .name_prefix = "AMP3" 175 + }, 176 + { 177 + .adr = 0x00013301FA355601ull, 178 + .num_endpoints = 1, 179 + .endpoints = &spk_3_endpoint, 180 + .name_prefix = "AMP4" 181 + }, 182 + }; 183 + 184 + static const struct snd_soc_acpi_adr_device cs35l56x4_1_adr[] = { 185 + { 186 + .adr = 0x00013301FA355601ull, 187 + .num_endpoints = 1, 188 + .endpoints = &spk_l_endpoint, 189 + .name_prefix = "AMP1" 190 + }, 191 + { 192 + .adr = 0x00013201FA355601ull, 193 + .num_endpoints = 1, 194 + .endpoints = &spk_r_endpoint, 195 + .name_prefix = "AMP2" 196 + }, 197 + { 198 + .adr = 0x00013101FA355601ull, 199 + .num_endpoints = 1, 200 + .endpoints = &spk_2_endpoint, 201 + .name_prefix = "AMP3" 202 + }, 203 + { 204 + .adr = 0x00013001FA355601ull, 205 + .num_endpoints = 1, 206 + .endpoints = &spk_3_endpoint, 207 + .name_prefix = "AMP4" 208 + }, 209 + }; 210 + 211 + static const struct snd_soc_acpi_link_adr acp70_cs42l43_l1_cs35l56x4_l1[] = { 212 + { 213 + .mask = BIT(1), 214 + .num_adr = ARRAY_SIZE(cs42l43_1_cs35l56x4_1_adr), 215 + .adr_d = cs42l43_1_cs35l56x4_1_adr, 216 + }, 217 + {} 218 + }; 219 + 220 + static const struct snd_soc_acpi_link_adr acp70_cs42l43_l0_cs35l56x4_l1[] = { 221 + { 222 + .mask = BIT(0), 223 + .num_adr = ARRAY_SIZE(cs42l43_0_adr), 224 + .adr_d = cs42l43_0_adr, 225 + }, 226 + { 227 + .mask = BIT(1), 228 + .num_adr = ARRAY_SIZE(cs35l56x4_1_adr), 229 + .adr_d = cs35l56x4_1_adr, 230 + }, 231 + {} 232 + }; 233 + 234 + static const struct snd_soc_acpi_link_adr acp70_cs35l56x4_l1[] = { 235 + { 236 + .mask = BIT(1), 237 + .num_adr = ARRAY_SIZE(cs35l56x4_1_adr), 238 + .adr_d = cs35l56x4_1_adr, 239 + }, 240 + {} 241 + }; 242 + 129 243 static const struct snd_soc_acpi_link_adr acp70_rt722_only[] = { 130 244 { 131 245 .mask = BIT(0), ··· 291 149 { 292 150 .link_mask = BIT(0) | BIT(1), 293 151 .links = acp70_4_in_1_sdca, 152 + .drv_name = "amd_sdw", 153 + }, 154 + { 155 + .link_mask = BIT(0) | BIT(1), 156 + .links = acp70_cs42l43_l0_cs35l56x4_l1, 157 + .drv_name = "amd_sdw", 158 + }, 159 + { 160 + .link_mask = BIT(1), 161 + .links = acp70_cs42l43_l1_cs35l56x4_l1, 162 + .drv_name = "amd_sdw", 163 + }, 164 + { 165 + .link_mask = BIT(1), 166 + .links = acp70_cs35l56x4_l1, 294 167 .drv_name = "amd_sdw", 295 168 }, 296 169 {},
+1
sound/soc/codecs/cs-amp-lib-test.c
··· 7 7 8 8 #include <kunit/resource.h> 9 9 #include <kunit/test.h> 10 + #include <kunit/test-bug.h> 10 11 #include <kunit/static_stub.h> 11 12 #include <linux/device/faux.h> 12 13 #include <linux/firmware/cirrus/cs_dsp.h>
+1 -1
sound/soc/codecs/cs530x.c
··· 793 793 case CS530X_SYSCLK_SRC_PLL: 794 794 break; 795 795 default: 796 - dev_err(component->dev, "Invalid clock id %d\n", clk_id); 796 + dev_err(component->dev, "Invalid sysclk source: %d\n", source); 797 797 return -EINVAL; 798 798 } 799 799
+4 -2
sound/soc/codecs/max98090.c
··· 1239 1239 SND_SOC_DAPM_SUPPLY("DMIC4_ENA", M98090_REG_DIGITAL_MIC_ENABLE, 1240 1240 M98090_DIGMIC4_SHIFT, 0, max98090_shdn_event, 1241 1241 SND_SOC_DAPM_POST_PMU), 1242 + SND_SOC_DAPM_SUPPLY("DMIC34_HPF", M98090_REG_FILTER_CONFIG, 1243 + M98090_FLT_DMIC34HPF_SHIFT, 0, NULL, 0), 1242 1244 }; 1243 1245 1244 1246 static const struct snd_soc_dapm_route max98090_dapm_routes[] = { ··· 1429 1427 /* DMIC inputs */ 1430 1428 {"DMIC3", NULL, "DMIC3_ENA"}, 1431 1429 {"DMIC4", NULL, "DMIC4_ENA"}, 1432 - {"DMIC3", NULL, "AHPF"}, 1433 - {"DMIC4", NULL, "AHPF"}, 1430 + {"DMIC3", NULL, "DMIC34_HPF"}, 1431 + {"DMIC4", NULL, "DMIC34_HPF"}, 1434 1432 }; 1435 1433 1436 1434 static int max98090_add_widgets(struct snd_soc_component *component)
+4
sound/soc/codecs/rt721-sdca.c
··· 281 281 rt_sdca_index_write(rt721->mbq_regmap, RT721_BOOST_CTRL, 282 282 RT721_BST_4CH_TOP_GATING_CTRL1, 0x002a); 283 283 regmap_write(rt721->regmap, 0x2f58, 0x07); 284 + 285 + regmap_write(rt721->regmap, 0x2f51, 0x00); 286 + rt_sdca_index_write(rt721->mbq_regmap, RT721_HDA_SDCA_FLOAT, 287 + RT721_MISC_CTL, 0x0004); 284 288 } 285 289 286 290 static void rt721_sdca_jack_init(struct rt721_sdca_priv *rt721)
+1
sound/soc/codecs/rt721-sdca.h
··· 137 137 #define RT721_HDA_LEGACY_UAJ_CTL 0x02 138 138 #define RT721_HDA_LEGACY_CTL1 0x05 139 139 #define RT721_HDA_LEGACY_RESET_CTL 0x06 140 + #define RT721_MISC_CTL 0x07 140 141 #define RT721_XU_REL_CTRL 0x0c 141 142 #define RT721_GE_REL_CTRL1 0x0d 142 143 #define RT721_HDA_LEGACY_GPIO_WAKE_EN_CTL 0x0e
+2 -2
sound/soc/fsl/fsl_micfil.c
··· 131 131 .fifos = 8, 132 132 .fifo_depth = 32, 133 133 .dataline = 0xf, 134 - .formats = SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_DSD_U32_BE, 134 + .formats = SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_DSD_U32_LE, 135 135 .use_edma = true, 136 136 .use_verid = true, 137 137 .volume_sx = false, ··· 823 823 break; 824 824 } 825 825 826 - if (format == SNDRV_PCM_FORMAT_DSD_U32_BE) { 826 + if (format == SNDRV_PCM_FORMAT_DSD_U32_LE) { 827 827 micfil->dec_bypass = true; 828 828 /* 829 829 * According to equation 29 in RM:
+5 -6
sound/soc/fsl/fsl_sai.c
··· 353 353 break; 354 354 case SND_SOC_DAIFMT_PDM: 355 355 val_cr2 |= FSL_SAI_CR2_BCP; 356 - val_cr4 &= ~FSL_SAI_CR4_MF; 357 356 sai->is_pdm_mode = true; 358 357 break; 359 358 case SND_SOC_DAIFMT_RIGHT_J: ··· 637 638 val_cr5 |= FSL_SAI_CR5_WNW(slot_width); 638 639 val_cr5 |= FSL_SAI_CR5_W0W(slot_width); 639 640 640 - if (sai->is_lsb_first || sai->is_pdm_mode) 641 + if (sai->is_lsb_first) 641 642 val_cr5 |= FSL_SAI_CR5_FBT(0); 642 643 else 643 644 val_cr5 |= FSL_SAI_CR5_FBT(word_width - 1); ··· 652 653 val_cr4 |= FSL_SAI_CR4_CHMOD; 653 654 654 655 /* 655 - * For SAI provider mode, when Tx(Rx) sync with Rx(Tx) clock, Rx(Tx) will 656 - * generate bclk and frame clock for Tx(Rx), we should set RCR4(TCR4), 657 - * RCR5(TCR5) for playback(capture), or there will be sync error. 656 + * When Tx(Rx) sync with Rx(Tx) clock, Rx(Tx) will provide bclk and 657 + * frame clock for Tx(Rx). We should set RCR4(TCR4), RCR5(TCR5) 658 + * for playback(capture), or there will be sync error. 658 659 */ 659 660 660 - if (!sai->is_consumer_mode[tx] && fsl_sai_dir_is_synced(sai, adir)) { 661 + if (fsl_sai_dir_is_synced(sai, adir)) { 661 662 regmap_update_bits(sai->regmap, FSL_SAI_xCR4(!tx, ofs), 662 663 FSL_SAI_CR4_SYWD_MASK | FSL_SAI_CR4_FRSZ_MASK | 663 664 FSL_SAI_CR4_CHMOD_MASK,
+3
sound/soc/intel/avs/pcm.c
··· 651 651 652 652 data = snd_soc_dai_get_dma_data(dai, substream); 653 653 654 + disable_work_sync(&data->period_elapsed_work); 654 655 snd_hdac_ext_stream_release(data->host_stream, HDAC_EXT_STREAM_TYPE_HOST); 655 656 avs_dai_shutdown(substream, dai); 656 657 } ··· 755 754 data = snd_soc_dai_get_dma_data(dai, substream); 756 755 host_stream = data->host_stream; 757 756 757 + if (runtime->state == SNDRV_PCM_STATE_XRUN) 758 + hdac_stream(host_stream)->prepared = false; 758 759 if (hdac_stream(host_stream)->prepared) 759 760 return 0; 760 761
+10 -8
sound/soc/intel/avs/probes.c
··· 14 14 #include "debug.h" 15 15 #include "messages.h" 16 16 17 - static int avs_dsp_init_probe(struct avs_dev *adev, union avs_connector_node_id node_id, 18 - size_t buffer_size) 17 + static int avs_dsp_init_probe(struct avs_dev *adev, struct snd_compr_params *params, int bps, 18 + union avs_connector_node_id node_id, size_t buffer_size) 19 19 { 20 20 struct avs_probe_cfg cfg = {{0}}; 21 21 struct avs_module_entry mentry; ··· 27 27 return ret; 28 28 29 29 /* 30 - * Probe module uses no cycles, audio data format and input and output 31 - * frame sizes are unused. It is also not owned by any pipeline. 30 + * Probe module uses no cycles, input and output frame sizes are unused. 31 + * It is also not owned by any pipeline. 32 32 */ 33 33 cfg.base.ibs = 1; 34 34 /* BSS module descriptor is always segment of index=2. */ 35 35 cfg.base.is_pages = mentry.segments[2].flags.length; 36 + cfg.base.audio_fmt.sampling_freq = params->codec.sample_rate; 37 + cfg.base.audio_fmt.bit_depth = bps; 38 + cfg.base.audio_fmt.num_channels = params->codec.ch_out; 39 + cfg.base.audio_fmt.valid_bit_depth = bps; 36 40 cfg.gtw_cfg.node_id = node_id; 37 41 cfg.gtw_cfg.dma_buffer_size = buffer_size; 38 42 ··· 132 128 struct hdac_ext_stream *host_stream = avs_compr_get_host_stream(cstream); 133 129 struct snd_compr_runtime *rtd = cstream->runtime; 134 130 struct avs_dev *adev = to_avs_dev(dai->dev); 135 - /* compr params do not store bit depth, default to S32_LE. */ 136 - snd_pcm_format_t format = SNDRV_PCM_FORMAT_S32_LE; 137 131 unsigned int format_val; 138 132 int bps, ret; 139 133 ··· 144 142 ret = snd_compr_malloc_pages(cstream, rtd->buffer_size); 145 143 if (ret < 0) 146 144 return ret; 147 - bps = snd_pcm_format_physical_width(format); 145 + bps = snd_pcm_format_physical_width(params->codec.format); 148 146 if (bps < 0) 149 147 return bps; 150 148 format_val = snd_hdac_stream_format(params->codec.ch_out, bps, params->codec.sample_rate); ··· 168 166 node_id.vindex = hdac_stream(host_stream)->stream_tag - 1; 169 167 node_id.dma_type = AVS_DMA_HDA_HOST_INPUT; 170 168 171 - ret = avs_dsp_init_probe(adev, node_id, rtd->dma_bytes); 169 + ret = avs_dsp_init_probe(adev, params, bps, node_id, rtd->dma_bytes); 172 170 if (ret < 0) { 173 171 dev_err(dai->dev, "probe init failed: %d\n", ret); 174 172 avs_dsp_enable_d0ix(adev);
-52
sound/soc/intel/common/soc-acpi-intel-ptl-match.c
··· 227 227 }, 228 228 }; 229 229 230 - static const struct snd_soc_acpi_endpoint cs42l43_endpoints[] = { 231 - { /* Jack Playback Endpoint */ 232 - .num = 0, 233 - .aggregated = 0, 234 - .group_position = 0, 235 - .group_id = 0, 236 - }, 237 - { /* DMIC Capture Endpoint */ 238 - .num = 1, 239 - .aggregated = 0, 240 - .group_position = 0, 241 - .group_id = 0, 242 - }, 243 - { /* Jack Capture Endpoint */ 244 - .num = 2, 245 - .aggregated = 0, 246 - .group_position = 0, 247 - .group_id = 0, 248 - }, 249 - { /* Speaker Playback Endpoint */ 250 - .num = 3, 251 - .aggregated = 0, 252 - .group_position = 0, 253 - .group_id = 0, 254 - }, 255 - }; 256 - 257 230 static const struct snd_soc_acpi_adr_device cs42l43_2_adr[] = { 258 231 { 259 232 .adr = 0x00023001fa424301ull, ··· 275 302 .num_endpoints = 1, 276 303 .endpoints = &spk_6_endpoint, 277 304 .name_prefix = "AMP6" 278 - } 279 - }; 280 - 281 - static const struct snd_soc_acpi_adr_device cs42l43_3_adr[] = { 282 - { 283 - .adr = 0x00033001FA424301ull, 284 - .num_endpoints = ARRAY_SIZE(cs42l43_endpoints), 285 - .endpoints = cs42l43_endpoints, 286 - .name_prefix = "cs42l43" 287 305 } 288 306 }; 289 307 ··· 446 482 .mask = BIT(3), 447 483 .num_adr = ARRAY_SIZE(cs35l56_3_3amp_adr), 448 484 .adr_d = cs35l56_3_3amp_adr, 449 - }, 450 - {} 451 - }; 452 - 453 - static const struct snd_soc_acpi_link_adr ptl_cs42l43_l3[] = { 454 - { 455 - .mask = BIT(3), 456 - .num_adr = ARRAY_SIZE(cs42l43_3_adr), 457 - .adr_d = cs42l43_3_adr, 458 485 }, 459 486 {} 460 487 }; ··· 665 710 .links = ptl_rt722_l1, 666 711 .drv_name = "sof_sdw", 667 712 .sof_tplg_filename = "sof-ptl-rt722.tplg", 668 - .get_function_tplg_files = sof_sdw_get_tplg_files, 669 - }, 670 - { 671 - .link_mask = BIT(3), 672 - .links = ptl_cs42l43_l3, 673 - .drv_name = "sof_sdw", 674 - .sof_tplg_filename = "sof-ptl-cs42l43-l3.tplg", 675 713 .get_function_tplg_files = sof_sdw_get_tplg_files, 676 714 }, 677 715 {
-1
sound/soc/mediatek/mt8195/mt8195-afe-pcm.c
··· 3176 3176 3177 3177 static void mt8195_afe_pcm_dev_remove(struct platform_device *pdev) 3178 3178 { 3179 - pm_runtime_disable(&pdev->dev); 3180 3179 if (!pm_runtime_status_suspended(&pdev->dev)) 3181 3180 mt8195_afe_runtime_suspend(&pdev->dev); 3182 3181 }
-1
sound/soc/mediatek/mt8365/mt8365-afe-pcm.c
··· 2238 2238 2239 2239 mt8365_afe_disable_top_cg(afe, MT8365_TOP_CG_AFE); 2240 2240 2241 - pm_runtime_disable(&pdev->dev); 2242 2241 if (!pm_runtime_status_suspended(&pdev->dev)) 2243 2242 mt8365_afe_runtime_suspend(&pdev->dev); 2244 2243 }
+1 -1
sound/soc/qcom/qdsp6/q6asm.c
··· 377 377 378 378 spin_lock_irqsave(&ac->lock, flags); 379 379 port->num_periods = 0; 380 + spin_unlock_irqrestore(&ac->lock, flags); 380 381 kfree(port->buf); 381 382 port->buf = NULL; 382 - spin_unlock_irqrestore(&ac->lock, flags); 383 383 } 384 384 385 385 /**
+12 -13
sound/soc/renesas/rz-ssi.c
··· 85 85 struct snd_pcm_substream *substream; 86 86 int fifo_sample_size; /* sample capacity of SSI FIFO */ 87 87 int dma_buffer_pos; /* The address for the next DMA descriptor */ 88 + int completed_dma_buf_pos; /* The address of the last completed DMA descriptor. */ 88 89 int period_counter; /* for keeping track of periods transferred */ 89 90 int sample_width; 90 91 int buffer_pos; /* current frame position in the buffer */ ··· 216 215 rz_ssi_set_substream(strm, substream); 217 216 strm->sample_width = samples_to_bytes(runtime, 1); 218 217 strm->dma_buffer_pos = 0; 218 + strm->completed_dma_buf_pos = 0; 219 219 strm->period_counter = 0; 220 220 strm->buffer_pos = 0; 221 221 ··· 439 437 snd_pcm_period_elapsed(strm->substream); 440 438 strm->period_counter = current_period; 441 439 } 440 + 441 + strm->completed_dma_buf_pos += runtime->period_size; 442 + if (strm->completed_dma_buf_pos >= runtime->buffer_size) 443 + strm->completed_dma_buf_pos = 0; 442 444 } 443 445 444 446 static int rz_ssi_pio_recv(struct rz_ssi_priv *ssi, struct rz_ssi_stream *strm) ··· 784 778 return -ENODEV; 785 779 } 786 780 787 - static int rz_ssi_trigger_resume(struct rz_ssi_priv *ssi) 781 + static int rz_ssi_trigger_resume(struct rz_ssi_priv *ssi, struct rz_ssi_stream *strm) 788 782 { 783 + struct snd_pcm_substream *substream = strm->substream; 784 + struct snd_pcm_runtime *runtime = substream->runtime; 789 785 int ret; 786 + 787 + strm->dma_buffer_pos = strm->completed_dma_buf_pos + runtime->period_size; 790 788 791 789 if (rz_ssi_is_stream_running(&ssi->playback) || 792 790 rz_ssi_is_stream_running(&ssi->capture)) ··· 804 794 ssi->hw_params_cache.channels); 805 795 } 806 796 807 - static void rz_ssi_streams_suspend(struct rz_ssi_priv *ssi) 808 - { 809 - if (rz_ssi_is_stream_running(&ssi->playback) || 810 - rz_ssi_is_stream_running(&ssi->capture)) 811 - return; 812 - 813 - ssi->playback.dma_buffer_pos = 0; 814 - ssi->capture.dma_buffer_pos = 0; 815 - } 816 - 817 797 static int rz_ssi_dai_trigger(struct snd_pcm_substream *substream, int cmd, 818 798 struct snd_soc_dai *dai) 819 799 { ··· 813 813 814 814 switch (cmd) { 815 815 case SNDRV_PCM_TRIGGER_RESUME: 816 - ret = rz_ssi_trigger_resume(ssi); 816 + ret = rz_ssi_trigger_resume(ssi, strm); 817 817 if (ret) 818 818 return ret; 819 819 ··· 852 852 853 853 case SNDRV_PCM_TRIGGER_SUSPEND: 854 854 rz_ssi_stop(ssi, strm); 855 - rz_ssi_streams_suspend(ssi); 856 855 break; 857 856 858 857 case SNDRV_PCM_TRIGGER_STOP:
-1
sound/soc/sdw_utils/soc_sdw_utils.c
··· 638 638 { 639 639 .direction = {true, false}, 640 640 .dai_name = "cs42l43-dp6", 641 - .component_name = "cs42l43", 642 641 .dai_type = SOC_SDW_DAI_TYPE_AMP, 643 642 .dailink = {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID}, 644 643 .init = asoc_sdw_cs42l43_spk_init,
+20 -17
sound/usb/mixer_s1810c.c
··· 178 178 179 179 pkt_out.fields[SC1810C_STATE_F1_IDX] = SC1810C_SET_STATE_F1; 180 180 pkt_out.fields[SC1810C_STATE_F2_IDX] = SC1810C_SET_STATE_F2; 181 - ret = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), 181 + ret = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 182 182 SC1810C_SET_STATE_REQ, 183 183 SC1810C_SET_STATE_REQTYPE, 184 184 (*seqnum), 0, &pkt_out, sizeof(pkt_out)); ··· 597 597 if (!list_empty(&chip->mixer_list)) 598 598 return 0; 599 599 600 - dev_info(&dev->dev, 601 - "Presonus Studio 1810c, device_setup: %u\n", chip->setup); 602 - if (chip->setup == 1) 603 - dev_info(&dev->dev, "(8out/18in @ 48kHz)\n"); 604 - else if (chip->setup == 2) 605 - dev_info(&dev->dev, "(6out/8in @ 192kHz)\n"); 606 - else 607 - dev_info(&dev->dev, "(8out/14in @ 96kHz)\n"); 608 - 609 600 ret = snd_s1810c_init_mixer_maps(chip); 610 601 if (ret < 0) 611 602 return ret; ··· 625 634 if (ret < 0) 626 635 return ret; 627 636 628 - // The 1824c has a Mono Main switch instead of a 629 - // A/B select switch. 630 - if (mixer->chip->usb_id == USB_ID(0x194f, 0x010d)) { 631 - ret = snd_s1810c_switch_init(mixer, &snd_s1824c_mono_sw); 632 - if (ret < 0) 633 - return ret; 634 - } else if (mixer->chip->usb_id == USB_ID(0x194f, 0x010c)) { 637 + switch (chip->usb_id) { 638 + case USB_ID(0x194f, 0x010c): /* Presonus Studio 1810c */ 639 + dev_info(&dev->dev, 640 + "Presonus Studio 1810c, device_setup: %u\n", chip->setup); 641 + if (chip->setup == 1) 642 + dev_info(&dev->dev, "(8out/18in @ 48kHz)\n"); 643 + else if (chip->setup == 2) 644 + dev_info(&dev->dev, "(6out/8in @ 192kHz)\n"); 645 + else 646 + dev_info(&dev->dev, "(8out/14in @ 96kHz)\n"); 647 + 635 648 ret = snd_s1810c_switch_init(mixer, &snd_s1810c_ab_sw); 636 649 if (ret < 0) 637 650 return ret; 651 + 652 + break; 653 + case USB_ID(0x194f, 0x010d): /* Presonus Studio 1824c */ 654 + ret = snd_s1810c_switch_init(mixer, &snd_s1824c_mono_sw); 655 + if (ret < 0) 656 + return ret; 657 + 658 + break; 638 659 } 639 660 640 661 return ret;