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

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

+225 -80
+3
Documentation/devicetree/bindings/sound/fsl,micfil.yaml
··· 56 56 - const: clkext3 57 57 minItems: 2 58 58 59 + "#sound-dai-cells": 60 + const: 0 61 + 59 62 required: 60 63 - compatible 61 64 - reg
+1
Documentation/devicetree/bindings/sound/rockchip-spdif.yaml
··· 26 26 - const: rockchip,rk3568-spdif 27 27 - items: 28 28 - enum: 29 + - rockchip,rk3128-spdif 29 30 - rockchip,rk3188-spdif 30 31 - rockchip,rk3288-spdif 31 32 - rockchip,rk3308-spdif
+2
include/sound/soc.h
··· 1126 1126 unsigned int pop_wait:1; 1127 1127 unsigned int fe_compr:1; /* for Dynamic PCM */ 1128 1128 1129 + bool initialized; 1130 + 1129 1131 int num_components; 1130 1132 struct snd_soc_component *components[]; /* CPU/Codec/Platform */ 1131 1133 };
+79 -36
sound/pci/hda/cs35l41_hda.c
··· 185 185 cs35l41->speaker_id, "wmfw"); 186 186 if (!ret) { 187 187 /* try cirrus/part-dspN-fwtype-sub<-spkidN><-ampname>.bin */ 188 - return cs35l41_request_firmware_file(cs35l41, coeff_firmware, coeff_filename, 189 - CS35L41_FIRMWARE_ROOT, 190 - cs35l41->acpi_subsystem_id, cs35l41->amp_name, 191 - cs35l41->speaker_id, "bin"); 188 + ret = cs35l41_request_firmware_file(cs35l41, coeff_firmware, coeff_filename, 189 + CS35L41_FIRMWARE_ROOT, 190 + cs35l41->acpi_subsystem_id, cs35l41->amp_name, 191 + cs35l41->speaker_id, "bin"); 192 + if (ret) 193 + goto coeff_err; 194 + 195 + return 0; 192 196 } 193 197 194 198 /* try cirrus/part-dspN-fwtype-sub<-ampname>.wmfw */ ··· 201 197 cs35l41->amp_name, -1, "wmfw"); 202 198 if (!ret) { 203 199 /* try cirrus/part-dspN-fwtype-sub<-spkidN><-ampname>.bin */ 204 - return cs35l41_request_firmware_file(cs35l41, coeff_firmware, coeff_filename, 205 - CS35L41_FIRMWARE_ROOT, 206 - cs35l41->acpi_subsystem_id, cs35l41->amp_name, 207 - cs35l41->speaker_id, "bin"); 200 + ret = cs35l41_request_firmware_file(cs35l41, coeff_firmware, coeff_filename, 201 + CS35L41_FIRMWARE_ROOT, 202 + cs35l41->acpi_subsystem_id, cs35l41->amp_name, 203 + cs35l41->speaker_id, "bin"); 204 + if (ret) 205 + goto coeff_err; 206 + 207 + return 0; 208 208 } 209 209 210 210 /* try cirrus/part-dspN-fwtype-sub<-spkidN>.wmfw */ ··· 223 215 cs35l41->amp_name, cs35l41->speaker_id, "bin"); 224 216 if (ret) 225 217 /* try cirrus/part-dspN-fwtype-sub<-spkidN>.bin */ 226 - return cs35l41_request_firmware_file(cs35l41, coeff_firmware, 227 - coeff_filename, CS35L41_FIRMWARE_ROOT, 228 - cs35l41->acpi_subsystem_id, NULL, 229 - cs35l41->speaker_id, "bin"); 218 + ret = cs35l41_request_firmware_file(cs35l41, coeff_firmware, 219 + coeff_filename, CS35L41_FIRMWARE_ROOT, 220 + cs35l41->acpi_subsystem_id, NULL, 221 + cs35l41->speaker_id, "bin"); 222 + if (ret) 223 + goto coeff_err; 224 + 225 + return 0; 230 226 } 231 227 232 228 /* try cirrus/part-dspN-fwtype-sub.wmfw */ ··· 245 233 cs35l41->speaker_id, "bin"); 246 234 if (ret) 247 235 /* try cirrus/part-dspN-fwtype-sub<-spkidN>.bin */ 248 - return cs35l41_request_firmware_file(cs35l41, coeff_firmware, 249 - coeff_filename, CS35L41_FIRMWARE_ROOT, 250 - cs35l41->acpi_subsystem_id, NULL, 251 - cs35l41->speaker_id, "bin"); 236 + ret = cs35l41_request_firmware_file(cs35l41, coeff_firmware, 237 + coeff_filename, CS35L41_FIRMWARE_ROOT, 238 + cs35l41->acpi_subsystem_id, NULL, 239 + cs35l41->speaker_id, "bin"); 240 + if (ret) 241 + goto coeff_err; 252 242 } 253 243 244 + return ret; 245 + coeff_err: 246 + release_firmware(*wmfw_firmware); 247 + kfree(*wmfw_filename); 248 + return ret; 249 + } 250 + 251 + static int cs35l41_fallback_firmware_file(struct cs35l41_hda *cs35l41, 252 + const struct firmware **wmfw_firmware, 253 + char **wmfw_filename, 254 + const struct firmware **coeff_firmware, 255 + char **coeff_filename) 256 + { 257 + int ret; 258 + 259 + /* Handle fallback */ 260 + dev_warn(cs35l41->dev, "Falling back to default firmware.\n"); 261 + 262 + /* fallback try cirrus/part-dspN-fwtype.wmfw */ 263 + ret = cs35l41_request_firmware_file(cs35l41, wmfw_firmware, wmfw_filename, 264 + CS35L41_FIRMWARE_ROOT, NULL, NULL, -1, "wmfw"); 265 + if (ret) 266 + goto err; 267 + 268 + /* fallback try cirrus/part-dspN-fwtype.bin */ 269 + ret = cs35l41_request_firmware_file(cs35l41, coeff_firmware, coeff_filename, 270 + CS35L41_FIRMWARE_ROOT, NULL, NULL, -1, "bin"); 271 + if (ret) { 272 + release_firmware(*wmfw_firmware); 273 + kfree(*wmfw_filename); 274 + goto err; 275 + } 276 + return 0; 277 + 278 + err: 279 + dev_warn(cs35l41->dev, "Unable to find firmware and tuning\n"); 254 280 return ret; 255 281 } 256 282 ··· 304 254 ret = cs35l41_request_firmware_files_spkid(cs35l41, wmfw_firmware, wmfw_filename, 305 255 coeff_firmware, coeff_filename); 306 256 goto out; 307 - 308 257 } 309 258 310 259 /* try cirrus/part-dspN-fwtype-sub<-ampname>.wmfw */ ··· 316 267 CS35L41_FIRMWARE_ROOT, 317 268 cs35l41->acpi_subsystem_id, cs35l41->amp_name, 318 269 -1, "bin"); 270 + if (ret) 271 + goto coeff_err; 272 + 319 273 goto out; 320 274 } 321 275 ··· 338 286 CS35L41_FIRMWARE_ROOT, 339 287 cs35l41->acpi_subsystem_id, NULL, -1, 340 288 "bin"); 289 + if (ret) 290 + goto coeff_err; 341 291 } 342 292 343 293 out: 344 - if (!ret) 345 - return 0; 294 + if (ret) 295 + /* if all attempts at finding firmware fail, try fallback */ 296 + goto fallback; 346 297 347 - /* Handle fallback */ 348 - dev_warn(cs35l41->dev, "Falling back to default firmware.\n"); 298 + return 0; 349 299 300 + coeff_err: 350 301 release_firmware(*wmfw_firmware); 351 302 kfree(*wmfw_filename); 352 - 353 - /* fallback try cirrus/part-dspN-fwtype.wmfw */ 354 - ret = cs35l41_request_firmware_file(cs35l41, wmfw_firmware, wmfw_filename, 355 - CS35L41_FIRMWARE_ROOT, NULL, NULL, -1, "wmfw"); 356 - if (!ret) 357 - /* fallback try cirrus/part-dspN-fwtype.bin */ 358 - ret = cs35l41_request_firmware_file(cs35l41, coeff_firmware, coeff_filename, 359 - CS35L41_FIRMWARE_ROOT, NULL, NULL, -1, "bin"); 360 - 361 - if (ret) { 362 - release_firmware(*wmfw_firmware); 363 - kfree(*wmfw_filename); 364 - dev_warn(cs35l41->dev, "Unable to find firmware and tuning\n"); 365 - } 366 - return ret; 303 + fallback: 304 + return cs35l41_fallback_firmware_file(cs35l41, wmfw_firmware, wmfw_filename, 305 + coeff_firmware, coeff_filename); 367 306 } 368 307 369 308 #if IS_ENABLED(CONFIG_EFI)
+17 -10
sound/pci/hda/patch_realtek.c
··· 7343 7343 ALC245_FIXUP_HP_MUTE_LED_COEFBIT, 7344 7344 ALC245_FIXUP_HP_X360_MUTE_LEDS, 7345 7345 ALC287_FIXUP_THINKPAD_I2S_SPK, 7346 + ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD, 7346 7347 }; 7347 7348 7348 7349 /* A special fixup for Lenovo C940 and Yoga Duet 7; ··· 9442 9441 .type = HDA_FIXUP_FUNC, 9443 9442 .v.func = alc287_fixup_bind_dacs, 9444 9443 }, 9444 + [ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD] = { 9445 + .type = HDA_FIXUP_FUNC, 9446 + .v.func = alc287_fixup_bind_dacs, 9447 + .chained = true, 9448 + .chain_id = ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI, 9449 + }, 9445 9450 }; 9446 9451 9447 9452 static const struct snd_pci_quirk alc269_fixup_tbl[] = { ··· 9861 9854 SND_PCI_QUIRK(0x10ec, 0x124c, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK), 9862 9855 SND_PCI_QUIRK(0x10ec, 0x1252, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK), 9863 9856 SND_PCI_QUIRK(0x10ec, 0x1254, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK), 9864 - SND_PCI_QUIRK(0x10ec, 0x12cc, "Intel Reference board", ALC225_FIXUP_HEADSET_JACK), 9857 + SND_PCI_QUIRK(0x10ec, 0x12cc, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK), 9865 9858 SND_PCI_QUIRK(0x10f7, 0x8338, "Panasonic CF-SZ6", ALC269_FIXUP_HEADSET_MODE), 9866 9859 SND_PCI_QUIRK(0x144d, 0xc109, "Samsung Ativ book 9 (NP900X3G)", ALC269_FIXUP_INV_DMIC), 9867 9860 SND_PCI_QUIRK(0x144d, 0xc169, "Samsung Notebook 9 Pen (NP930SBE-K01US)", ALC298_FIXUP_SAMSUNG_AMP), ··· 9995 9988 SND_PCI_QUIRK(0x17aa, 0x22be, "Thinkpad X1 Carbon 8th", ALC285_FIXUP_THINKPAD_HEADSET_JACK), 9996 9989 SND_PCI_QUIRK(0x17aa, 0x22c1, "Thinkpad P1 Gen 3", ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK), 9997 9990 SND_PCI_QUIRK(0x17aa, 0x22c2, "Thinkpad X1 Extreme Gen 3", ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK), 9998 - SND_PCI_QUIRK(0x17aa, 0x22f1, "Thinkpad", ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI), 9999 - SND_PCI_QUIRK(0x17aa, 0x22f2, "Thinkpad", ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI), 10000 - SND_PCI_QUIRK(0x17aa, 0x22f3, "Thinkpad", ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI), 10001 - SND_PCI_QUIRK(0x17aa, 0x2316, "Thinkpad P1 Gen 6", ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI), 10002 - SND_PCI_QUIRK(0x17aa, 0x2317, "Thinkpad P1 Gen 6", ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI), 10003 - SND_PCI_QUIRK(0x17aa, 0x2318, "Thinkpad Z13 Gen2", ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI), 10004 - SND_PCI_QUIRK(0x17aa, 0x2319, "Thinkpad Z16 Gen2", ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI), 10005 - SND_PCI_QUIRK(0x17aa, 0x231a, "Thinkpad Z16 Gen2", ALC287_FIXUP_CS35L41_I2C_2_THINKPAD_ACPI), 9991 + SND_PCI_QUIRK(0x17aa, 0x22f1, "Thinkpad", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD), 9992 + SND_PCI_QUIRK(0x17aa, 0x22f2, "Thinkpad", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD), 9993 + SND_PCI_QUIRK(0x17aa, 0x22f3, "Thinkpad", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD), 9994 + SND_PCI_QUIRK(0x17aa, 0x2316, "Thinkpad P1 Gen 6", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD), 9995 + SND_PCI_QUIRK(0x17aa, 0x2317, "Thinkpad P1 Gen 6", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD), 9996 + SND_PCI_QUIRK(0x17aa, 0x2318, "Thinkpad Z13 Gen2", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD), 9997 + SND_PCI_QUIRK(0x17aa, 0x2319, "Thinkpad Z16 Gen2", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD), 9998 + SND_PCI_QUIRK(0x17aa, 0x231a, "Thinkpad Z16 Gen2", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD), 10006 9999 SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY), 10007 10000 SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY), 10008 10001 SND_PCI_QUIRK(0x17aa, 0x310c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION), ··· 10098 10091 SND_PCI_QUIRK(0x8086, 0x2074, "Intel NUC 8", ALC233_FIXUP_INTEL_NUC8_DMIC), 10099 10092 SND_PCI_QUIRK(0x8086, 0x2080, "Intel NUC 8 Rugged", ALC256_FIXUP_INTEL_NUC8_RUGGED), 10100 10093 SND_PCI_QUIRK(0x8086, 0x2081, "Intel NUC 10", ALC256_FIXUP_INTEL_NUC10), 10101 - SND_PCI_QUIRK(0x8086, 0x3038, "Intel NUC 13", ALC225_FIXUP_HEADSET_JACK), 10094 + SND_PCI_QUIRK(0x8086, 0x3038, "Intel NUC 13", ALC295_FIXUP_CHROME_BOOK), 10102 10095 SND_PCI_QUIRK(0xf111, 0x0001, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE), 10103 10096 10104 10097 #if 0
+7
sound/soc/amd/yc/acp6x-mach.c
··· 244 244 { 245 245 .driver_data = &acp6x_card, 246 246 .matches = { 247 + DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 248 + DMI_MATCH(DMI_PRODUCT_NAME, "82YM"), 249 + } 250 + }, 251 + { 252 + .driver_data = &acp6x_card, 253 + .matches = { 247 254 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."), 248 255 DMI_MATCH(DMI_PRODUCT_NAME, "UM5302TA"), 249 256 }
+4 -1
sound/soc/codecs/hdmi-codec.c
··· 531 531 hp->sample_rate = sample_rate; 532 532 hp->channels = channels; 533 533 534 - hcp->chmap_idx = idx; 534 + if (pcm_audio) 535 + hcp->chmap_idx = ca_id; 536 + else 537 + hcp->chmap_idx = HDMI_CODEC_CHMAP_IDX_UNKNOWN; 535 538 536 539 return 0; 537 540 }
+5 -5
sound/soc/codecs/rt5682-i2c.c
··· 157 157 return ret; 158 158 } 159 159 160 - ret = devm_add_action_or_reset(&i2c->dev, rt5682_i2c_disable_regulators, 161 - rt5682); 162 - if (ret) 163 - return ret; 164 - 165 160 ret = regulator_bulk_enable(ARRAY_SIZE(rt5682->supplies), 166 161 rt5682->supplies); 167 162 if (ret) { 168 163 dev_err(&i2c->dev, "Failed to enable supplies: %d\n", ret); 169 164 return ret; 170 165 } 166 + 167 + ret = devm_add_action_or_reset(&i2c->dev, rt5682_i2c_disable_regulators, 168 + rt5682); 169 + if (ret) 170 + return ret; 171 171 172 172 ret = rt5682_get_ldo1(rt5682, &i2c->dev); 173 173 if (ret)
+2 -2
sound/soc/codecs/tlv320adc3xxx.c
··· 293 293 #define ADC3XXX_BYPASS_RPGA 0x80 294 294 295 295 /* MICBIAS control bits */ 296 - #define ADC3XXX_MICBIAS_MASK 0x2 296 + #define ADC3XXX_MICBIAS_MASK 0x3 297 297 #define ADC3XXX_MICBIAS1_SHIFT 5 298 298 #define ADC3XXX_MICBIAS2_SHIFT 3 299 299 ··· 1099 1099 unsigned int val; 1100 1100 1101 1101 if (!of_property_read_u32(np, propname, &val)) { 1102 - if (val >= ADC3XXX_MICBIAS_AVDD) { 1102 + if (val > ADC3XXX_MICBIAS_AVDD) { 1103 1103 dev_err(dev, "Invalid property value for '%s'\n", propname); 1104 1104 return -EINVAL; 1105 1105 }
+8 -4
sound/soc/fsl/fsl-asoc-card.c
··· 52 52 unsigned long mclk_freq; 53 53 unsigned long free_freq; 54 54 u32 mclk_id; 55 - u32 fll_id; 56 - u32 pll_id; 55 + int fll_id; 56 + int pll_id; 57 57 }; 58 58 59 59 /** ··· 206 206 } 207 207 208 208 /* Specific configuration for PLL */ 209 - if (codec_priv->pll_id && codec_priv->fll_id) { 209 + if (codec_priv->pll_id >= 0 && codec_priv->fll_id >= 0) { 210 210 if (priv->sample_format == SNDRV_PCM_FORMAT_S24_LE) 211 211 pll_out = priv->sample_rate * 384; 212 212 else ··· 248 248 249 249 priv->streams &= ~BIT(substream->stream); 250 250 251 - if (!priv->streams && codec_priv->pll_id && codec_priv->fll_id) { 251 + if (!priv->streams && codec_priv->pll_id >= 0 && codec_priv->fll_id >= 0) { 252 252 /* Force freq to be free_freq to avoid error message in codec */ 253 253 ret = snd_soc_dai_set_sysclk(asoc_rtd_to_codec(rtd, 0), 254 254 codec_priv->mclk_id, ··· 621 621 priv->card.dapm_routes = audio_map; 622 622 priv->card.num_dapm_routes = ARRAY_SIZE(audio_map); 623 623 priv->card.driver_name = DRIVER_NAME; 624 + 625 + priv->codec_priv.fll_id = -1; 626 + priv->codec_priv.pll_id = -1; 627 + 624 628 /* Diversify the card configurations */ 625 629 if (of_device_is_compatible(np, "fsl,imx-audio-cs42888")) { 626 630 codec_dai_name = "cs42888";
+7 -2
sound/soc/fsl/fsl_sai.c
··· 710 710 { 711 711 unsigned int ofs = sai->soc_data->reg_offset; 712 712 bool tx = dir == TX; 713 - u32 xcsr, count = 100; 713 + u32 xcsr, count = 100, mask; 714 + 715 + if (sai->soc_data->mclk_with_tere && sai->mclk_direction_output) 716 + mask = FSL_SAI_CSR_TERE; 717 + else 718 + mask = FSL_SAI_CSR_TERE | FSL_SAI_CSR_BCE; 714 719 715 720 regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx, ofs), 716 - FSL_SAI_CSR_TERE | FSL_SAI_CSR_BCE, 0); 721 + mask, 0); 717 722 718 723 /* TERE will remain set till the end of current frame */ 719 724 do {
+2 -1
sound/soc/generic/simple-card-utils.c
··· 310 310 if (fixed_sysclk % props->mclk_fs) { 311 311 dev_err(rtd->dev, "fixed sysclk %u not divisible by mclk_fs %u\n", 312 312 fixed_sysclk, props->mclk_fs); 313 - return -EINVAL; 313 + ret = -EINVAL; 314 + goto codec_err; 314 315 } 315 316 ret = snd_pcm_hw_constraint_minmax(substream->runtime, SNDRV_PCM_HW_PARAM_RATE, 316 317 fixed_rate, fixed_rate);
+4 -2
sound/soc/generic/simple-card.c
··· 759 759 struct snd_soc_dai_link *dai_link = priv->dai_link; 760 760 struct simple_dai_props *dai_props = priv->dai_props; 761 761 762 + ret = -EINVAL; 763 + 762 764 cinfo = dev->platform_data; 763 765 if (!cinfo) { 764 766 dev_err(dev, "no info for asoc-simple-card\n"); 765 - return -EINVAL; 767 + goto err; 766 768 } 767 769 768 770 if (!cinfo->name || ··· 773 771 !cinfo->platform || 774 772 !cinfo->cpu_dai.name) { 775 773 dev_err(dev, "insufficient asoc_simple_card_info settings\n"); 776 - return -EINVAL; 774 + goto err; 777 775 } 778 776 779 777 cpus = dai_link->cpus;
+10
sound/soc/intel/boards/sof_es8336.c
··· 808 808 SOF_ES8336_SPEAKERS_EN_GPIO1_QUIRK | 809 809 SOF_ES8336_JD_INVERTED), 810 810 }, 811 + { 812 + .name = "mtl_es83x6_c1_h02", 813 + .driver_data = (kernel_ulong_t)(SOF_ES8336_SSP_CODEC(1) | 814 + SOF_NO_OF_HDMI_CAPTURE_SSP(2) | 815 + SOF_HDMI_CAPTURE_1_SSP(0) | 816 + SOF_HDMI_CAPTURE_2_SSP(2) | 817 + SOF_SSP_HDMI_CAPTURE_PRESENT | 818 + SOF_ES8336_SPEAKERS_EN_GPIO1_QUIRK | 819 + SOF_ES8336_JD_INVERTED), 820 + }, 811 821 { } 812 822 }; 813 823 MODULE_DEVICE_TABLE(platform, board_ids);
+10
sound/soc/intel/boards/sof_sdw.c
··· 380 380 .callback = sof_sdw_quirk_cb, 381 381 .matches = { 382 382 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc"), 383 + DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "0B14"), 384 + }, 385 + /* No Jack */ 386 + .driver_data = (void *)SOF_SDW_TGL_HDMI, 387 + }, 388 + 389 + { 390 + .callback = sof_sdw_quirk_cb, 391 + .matches = { 392 + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc"), 383 393 DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "0B29"), 384 394 }, 385 395 .driver_data = (void *)(SOF_SDW_TGL_HDMI |
+6 -6
sound/soc/intel/common/soc-acpi-intel-adl-match.c
··· 656 656 .sof_tplg_filename = "sof-adl-rt1316-l2-mono-rt714-l3.tplg", 657 657 }, 658 658 { 659 - .link_mask = 0x3, /* rt1316 on link1 & rt714 on link0 */ 660 - .links = adl_sdw_rt1316_link1_rt714_link0, 661 - .drv_name = "sof_sdw", 662 - .sof_tplg_filename = "sof-adl-rt1316-l1-mono-rt714-l0.tplg", 663 - }, 664 - { 665 659 .link_mask = 0x7, /* rt714 on link0 & two rt1316s on link1 and link2 */ 666 660 .links = adl_sdw_rt1316_link12_rt714_link0, 667 661 .drv_name = "sof_sdw", 668 662 .sof_tplg_filename = "sof-adl-rt1316-l12-rt714-l0.tplg", 663 + }, 664 + { 665 + .link_mask = 0x3, /* rt1316 on link1 & rt714 on link0 */ 666 + .links = adl_sdw_rt1316_link1_rt714_link0, 667 + .drv_name = "sof_sdw", 668 + .sof_tplg_filename = "sof-adl-rt1316-l1-mono-rt714-l0.tplg", 669 669 }, 670 670 { 671 671 .link_mask = 0x5, /* 2 active links required */
+25
sound/soc/intel/common/soc-acpi-intel-mtl-match.c
··· 30 30 .codecs = {"10EC5682", "RTL5682"}, 31 31 }; 32 32 33 + static const struct snd_soc_acpi_codecs mtl_essx_83x6 = { 34 + .num_codecs = 3, 35 + .codecs = { "ESSX8316", "ESSX8326", "ESSX8336"}, 36 + }; 37 + 38 + static const struct snd_soc_acpi_codecs mtl_lt6911_hdmi = { 39 + .num_codecs = 1, 40 + .codecs = {"INTC10B0"} 41 + }; 42 + 33 43 struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_machines[] = { 34 44 { 35 45 .comp_ids = &mtl_rt5682_rt5682s_hp, ··· 61 51 .machine_quirk = snd_soc_acpi_codec_list, 62 52 .quirk_data = &mtl_rt1019p_amp, 63 53 .sof_tplg_filename = "sof-mtl-rt1019-rt5682.tplg", 54 + }, 55 + { 56 + .comp_ids = &mtl_essx_83x6, 57 + .drv_name = "mtl_es83x6_c1_h02", 58 + .machine_quirk = snd_soc_acpi_codec_list, 59 + .quirk_data = &mtl_lt6911_hdmi, 60 + .sof_tplg_filename = "sof-mtl-es83x6-ssp1-hdmi-ssp02.tplg", 61 + }, 62 + { 63 + .comp_ids = &mtl_essx_83x6, 64 + .drv_name = "sof-essx8336", 65 + .sof_tplg_filename = "sof-mtl-es8336", /* the tplg suffix is added at run time */ 66 + .tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER | 67 + SND_SOC_ACPI_TPLG_INTEL_SSP_MSB | 68 + SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER, 64 69 }, 65 70 {}, 66 71 };
+17 -7
sound/soc/soc-core.c
··· 1347 1347 snd_soc_runtime_get_dai_fmt(rtd); 1348 1348 ret = snd_soc_runtime_set_dai_fmt(rtd, dai_link->dai_fmt); 1349 1349 if (ret) 1350 - return ret; 1350 + goto err; 1351 1351 1352 1352 /* add DPCM sysfs entries */ 1353 1353 soc_dpcm_debugfs_add(rtd); ··· 1372 1372 /* create compress_device if possible */ 1373 1373 ret = snd_soc_dai_compress_new(cpu_dai, rtd, num); 1374 1374 if (ret != -ENOTSUPP) 1375 - return ret; 1375 + goto err; 1376 1376 1377 1377 /* create the pcm */ 1378 1378 ret = soc_new_pcm(rtd, num); 1379 1379 if (ret < 0) { 1380 1380 dev_err(card->dev, "ASoC: can't create pcm %s :%d\n", 1381 1381 dai_link->stream_name, ret); 1382 - return ret; 1382 + goto err; 1383 1383 } 1384 1384 1385 - return snd_soc_pcm_dai_new(rtd); 1385 + ret = snd_soc_pcm_dai_new(rtd); 1386 + if (ret < 0) 1387 + goto err; 1388 + 1389 + rtd->initialized = true; 1390 + 1391 + return 0; 1392 + err: 1393 + snd_soc_link_exit(rtd); 1394 + return ret; 1386 1395 } 1387 1396 1388 1397 static void soc_set_name_prefix(struct snd_soc_card *card, ··· 1454 1445 if (component->card) { 1455 1446 if (component->card != card) { 1456 1447 dev_err(component->dev, 1457 - "Trying to bind component to card \"%s\" but is already bound to card \"%s\"\n", 1458 - card->name, component->card->name); 1448 + "Trying to bind component \"%s\" to card \"%s\" but is already bound to card \"%s\"\n", 1449 + component->name, card->name, component->card->name); 1459 1450 return -ENODEV; 1460 1451 } 1461 1452 return 0; ··· 1989 1980 1990 1981 /* release machine specific resources */ 1991 1982 for_each_card_rtds(card, rtd) 1992 - snd_soc_link_exit(rtd); 1983 + if (rtd->initialized) 1984 + snd_soc_link_exit(rtd); 1993 1985 /* remove and free each DAI */ 1994 1986 soc_remove_link_dais(card); 1995 1987 soc_remove_link_components(card);
+2 -2
sound/soc/soc-generic-dmaengine-pcm.c
··· 44 44 * platforms which make use of the snd_dmaengine_dai_dma_data struct for their 45 45 * DAI DMA data. Internally the function will first call 46 46 * snd_hwparams_to_dma_slave_config to fill in the slave config based on the 47 - * hw_params, followed by snd_dmaengine_set_config_from_dai_data to fill in the 48 - * remaining fields based on the DAI DMA data. 47 + * hw_params, followed by snd_dmaengine_pcm_set_config_from_dai_data to fill in 48 + * the remaining fields based on the DAI DMA data. 49 49 */ 50 50 int snd_dmaengine_pcm_prepare_slave_config(struct snd_pcm_substream *substream, 51 51 struct snd_pcm_hw_params *params, struct dma_slave_config *slave_config)
-1
sound/soc/sof/amd/pci-rmb.c
··· 35 35 .dsp_intr_base = ACP6X_DSP_SW_INTR_BASE, 36 36 .sram_pte_offset = ACP6X_SRAM_PTE_OFFSET, 37 37 .hw_semaphore_offset = ACP6X_AXI2DAGB_SEM_0, 38 - .acp_clkmux_sel = ACP6X_CLKMUX_SEL, 39 38 .fusion_dsp_offset = ACP6X_DSP_FUSION_RUNSTALL, 40 39 .probe_reg_offset = ACP6X_FUTURE_REG_ACLK_0, 41 40 };
+7
sound/usb/mixer.c
··· 1204 1204 cval->res = 16; 1205 1205 } 1206 1206 break; 1207 + case USB_ID(0x1bcf, 0x2283): /* NexiGo N930AF FHD Webcam */ 1208 + if (!strcmp(kctl->id.name, "Mic Capture Volume")) { 1209 + usb_audio_info(chip, 1210 + "set resolution quirk: cval->res = 16\n"); 1211 + cval->res = 16; 1212 + } 1213 + break; 1207 1214 } 1208 1215 } 1209 1216
+7 -1
sound/usb/quirks.c
··· 1994 1994 /* mic works only when ep packet size is set to wMaxPacketSize */ 1995 1995 fp->attributes |= UAC_EP_CS_ATTR_FILL_MAX; 1996 1996 break; 1997 - 1997 + case USB_ID(0x3511, 0x2b1e): /* Opencomm2 UC USB Bluetooth dongle */ 1998 + /* mic works only when ep pitch control is not set */ 1999 + if (stream == SNDRV_PCM_STREAM_CAPTURE) 2000 + fp->attributes &= ~UAC_EP_CS_ATTR_PITCH_CONTROL; 2001 + break; 1998 2002 } 1999 2003 } 2000 2004 ··· 2177 2173 QUIRK_FLAG_FIXED_RATE), 2178 2174 DEVICE_FLG(0x0ecb, 0x2069, /* JBL Quantum810 Wireless */ 2179 2175 QUIRK_FLAG_FIXED_RATE), 2176 + DEVICE_FLG(0x1bcf, 0x2283, /* NexiGo N930AF FHD Webcam */ 2177 + QUIRK_FLAG_GET_SAMPLE_RATE), 2180 2178 2181 2179 /* Vendor matches */ 2182 2180 VENDOR_FLG(0x045e, /* MS Lifecam */