Merge tag 'sound-fix-6.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
"A collection of fix patches for the 6.16-rc1 merge window.

Most of changes are about ASoC, especially lots of AVS driver fixes.
Larger LOCs are seen in TAS571x codec drivers, but the changes are
trivial and safe. The rest are all device-specific small fixes"

* tag 'sound-fix-6.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (27 commits)
ASoC: Intel: avs: boards: Fix rt5663 front end name
ASoC: Intel: avs: Simplify verification of parse_int_array() result
ALSA: usb-audio: Add implicit feedback quirk for RODE AI-1
ALSA: hda: Ignore unsol events for cards being shut down
ALSA: hda: Add new pci id for AMD GPU display HD audio controller
ALSA: hda: cs35l41: Constify regmap_irq_chip
ALSA: usb-audio: Add a quirk for Lenovo Thinkpad Thunderbolt 3 dock
ASoC: ti: omap-hdmi: Re-add dai_link->platform to fix card init
ASoC: pcm: Do not open FEs with no BEs connected
ASoC: rt1320: fix speaker noise when volume bar is 100%
ASoC: Intel: avs: Include missing string.h
ASoC: Intel: avs: Verify content returned by parse_int_array()
ASoC: Intel: avs: Verify kcalloc() status when setting constraints
ASoC: Intel: avs: Fix paths in MODULE_FIRMWARE hints
ASoC: Intel: avs: Fix possible null-ptr-deref when initing hw
ASoC: Intel: avs: Fix PPLCxFMT calculation
ASoC: Intel: avs: Fix deadlock when the failing IPC is SET_D0IX
ASoC: codecs: hda: Fix RPM usage count underflow
ASoC: amd: yc: Add support for Lenovo Yoga 7 16ARP8
ASoC: tas571x: fix tas5733 num_controls
...

+192 -70
+2 -1
drivers/firmware/cirrus/test/cs_dsp_mock_wmfw.c
··· 133 133 134 134 if (info_len % 4) { 135 135 /* Create a padded string with length a multiple of 4 */ 136 + size_t copy_len = info_len; 136 137 info_len = round_up(info_len, 4); 137 138 tmp = kunit_kzalloc(builder->test_priv->test, info_len, GFP_KERNEL); 138 139 KUNIT_ASSERT_NOT_ERR_OR_NULL(builder->test_priv->test, tmp); 139 - memcpy(tmp, info, info_len); 140 + memcpy(tmp, info, copy_len); 140 141 info = tmp; 141 142 } 142 143
-1
drivers/firmware/cirrus/test/cs_dsp_test_control_cache.c
··· 776 776 "dummyalg", NULL); 777 777 778 778 /* Create controls identical except for offset */ 779 - def.length_bytes = 8; 780 779 def.offset_dsp_words = 0; 781 780 def.shortname = "CtlA"; 782 781 cs_dsp_mock_wmfw_add_coeff_desc(local->wmfw_builder, &def);
+1 -1
sound/pci/hda/cs35l41_hda.c
··· 1603 1603 CS35L41_REG_IRQ(IRQ1_STATUS1, AMP_SHORT_ERR), 1604 1604 }; 1605 1605 1606 - static struct regmap_irq_chip cs35l41_regmap_irq_chip = { 1606 + static const struct regmap_irq_chip cs35l41_regmap_irq_chip = { 1607 1607 .name = "cs35l41 IRQ1 Controller", 1608 1608 .status_base = CS35L41_IRQ1_STATUS1, 1609 1609 .mask_base = CS35L41_IRQ1_MASK1,
+1 -1
sound/pci/hda/hda_bind.c
··· 44 44 struct hda_codec *codec = container_of(dev, struct hda_codec, core); 45 45 46 46 /* ignore unsol events during shutdown */ 47 - if (codec->bus->shutdown) 47 + if (codec->card->shutdown || codec->bus->shutdown) 48 48 return; 49 49 50 50 /* ignore unsol events during system suspend/resume */
+3
sound/pci/hda/hda_intel.c
··· 2724 2724 { PCI_VDEVICE(ATI, 0xab38), 2725 2725 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | 2726 2726 AZX_DCAPS_PM_RUNTIME }, 2727 + { PCI_VDEVICE(ATI, 0xab40), 2728 + .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | 2729 + AZX_DCAPS_PM_RUNTIME }, 2727 2730 /* GLENFLY */ 2728 2731 { PCI_DEVICE(PCI_VENDOR_ID_GLENFLY, PCI_ANY_ID), 2729 2732 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
+7
sound/soc/amd/yc/acp6x-mach.c
··· 315 315 .driver_data = &acp6x_card, 316 316 .matches = { 317 317 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 318 + DMI_MATCH(DMI_PRODUCT_NAME, "83BS"), 319 + } 320 + }, 321 + { 322 + .driver_data = &acp6x_card, 323 + .matches = { 324 + DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 318 325 DMI_MATCH(DMI_PRODUCT_NAME, "83HN"), 319 326 } 320 327 },
+1
sound/soc/codecs/es8375.c
··· 319 319 coeff = get_coeff(es8375->vddd, dmic_enable, es8375->mclk_freq, params_rate(params)); 320 320 if (coeff < 0) { 321 321 dev_warn(component->dev, "Clock coefficients do not match"); 322 + return coeff; 322 323 } 323 324 regmap_write(es8375->regmap, ES8375_CLK_MGR4, 324 325 coeff_div[coeff].Reg0x04);
+2 -2
sound/soc/codecs/hda.c
··· 152 152 ret = snd_hda_codec_build_controls(codec); 153 153 if (ret < 0) { 154 154 dev_err(&hdev->dev, "unable to create controls %d\n", ret); 155 - goto out; 155 + return ret; 156 156 } 157 157 158 158 /* Bus suspended codecs as it does not manage their pm */ ··· 160 160 /* rpm was forbidden in snd_hda_codec_device_new() */ 161 161 snd_hda_codec_set_power_save(codec, 2000); 162 162 snd_hda_codec_register(codec); 163 - out: 163 + 164 164 /* Complement pm_runtime_get_sync(bus) in probe */ 165 165 pm_runtime_mark_last_busy(bus->dev); 166 166 pm_runtime_put_autosuspend(bus->dev);
+16 -1
sound/soc/codecs/rt1320-sdw.c
··· 204 204 { 0x3fc2bfc0, 0x03 }, 205 205 { 0x0000d486, 0x43 }, 206 206 { SDW_SDCA_CTL(FUNC_NUM_AMP, RT1320_SDCA_ENT_PDE23, RT1320_SDCA_CTL_REQ_POWER_STATE, 0), 0x00 }, 207 - { 0x1000db00, 0x04 }, 207 + { 0x1000db00, 0x07 }, 208 208 { 0x1000db01, 0x00 }, 209 209 { 0x1000db02, 0x11 }, 210 210 { 0x1000db03, 0x00 }, ··· 225 225 { 0x1000db12, 0x00 }, 226 226 { 0x1000db13, 0x00 }, 227 227 { 0x1000db14, 0x45 }, 228 + { 0x1000db15, 0x0d }, 229 + { 0x1000db16, 0x01 }, 230 + { 0x1000db17, 0x00 }, 231 + { 0x1000db18, 0x00 }, 232 + { 0x1000db19, 0xbf }, 233 + { 0x1000db1a, 0x13 }, 234 + { 0x1000db1b, 0x09 }, 235 + { 0x1000db1c, 0x00 }, 236 + { 0x1000db1d, 0x00 }, 237 + { 0x1000db1e, 0x00 }, 238 + { 0x1000db1f, 0x12 }, 239 + { 0x1000db20, 0x09 }, 240 + { 0x1000db21, 0x00 }, 241 + { 0x1000db22, 0x00 }, 242 + { 0x1000db23, 0x00 }, 228 243 { 0x0000d540, 0x01 }, 229 244 { 0x0000c081, 0xfc }, 230 245 { 0x0000f01e, 0x80 },
+65 -2
sound/soc/codecs/tas571x.c
··· 718 718 .volatile_table = &tas571x_volatile_regs, 719 719 }; 720 720 721 + static const struct snd_kcontrol_new tas5733_controls[] = { 722 + /* MVOL LSB is ignored - see comments in tas571x_i2c_probe() */ 723 + SOC_SINGLE_TLV("Master Volume", 724 + TAS571X_MVOL_REG, 1, 0x1ff, 1, 725 + tas5717_volume_tlv), 726 + SOC_DOUBLE_R_TLV("Speaker Volume", 727 + TAS571X_CH1_VOL_REG, TAS571X_CH2_VOL_REG, 728 + 1, 0x1ff, 1, tas5717_volume_tlv), 729 + SOC_DOUBLE("Speaker Switch", 730 + TAS571X_SOFT_MUTE_REG, 731 + TAS571X_SOFT_MUTE_CH1_SHIFT, TAS571X_SOFT_MUTE_CH2_SHIFT, 732 + 1, 1), 733 + 734 + SOC_DOUBLE_R_RANGE("CH1 Mixer Volume", 735 + TAS5717_CH1_LEFT_CH_MIX_REG, 736 + TAS5717_CH1_RIGHT_CH_MIX_REG, 737 + 16, 0, 0x80, 0), 738 + 739 + SOC_DOUBLE_R_RANGE("CH2 Mixer Volume", 740 + TAS5717_CH2_LEFT_CH_MIX_REG, 741 + TAS5717_CH2_RIGHT_CH_MIX_REG, 742 + 16, 0, 0x80, 0), 743 + 744 + /* 745 + * The biquads are named according to the register names. 746 + * Please note that TI's TAS57xx Graphical Development Environment 747 + * tool names them different. 748 + */ 749 + BIQUAD_COEFS("CH1 - Biquad 0", TAS5733_CH1_BQ0_REG), 750 + BIQUAD_COEFS("CH1 - Biquad 1", TAS5733_CH1_BQ1_REG), 751 + BIQUAD_COEFS("CH1 - Biquad 2", TAS5733_CH1_BQ2_REG), 752 + BIQUAD_COEFS("CH1 - Biquad 3", TAS5733_CH1_BQ3_REG), 753 + BIQUAD_COEFS("CH1 - Biquad 4", TAS5733_CH1_BQ4_REG), 754 + BIQUAD_COEFS("CH1 - Biquad 5", TAS5733_CH1_BQ5_REG), 755 + BIQUAD_COEFS("CH1 - Biquad 6", TAS5733_CH1_BQ6_REG), 756 + BIQUAD_COEFS("CH1 - Biquad 7", TAS5733_CH1_BQ7_REG), 757 + BIQUAD_COEFS("CH1 - Biquad 8", TAS5733_CH1_BQ8_REG), 758 + BIQUAD_COEFS("CH1 - Biquad 9", TAS5733_CH1_BQ9_REG), 759 + BIQUAD_COEFS("CH1 - Biquad 10", TAS5733_CH1_BQ10_REG), 760 + 761 + BIQUAD_COEFS("CH2 - Biquad 0", TAS5733_CH2_BQ0_REG), 762 + BIQUAD_COEFS("CH2 - Biquad 1", TAS5733_CH2_BQ1_REG), 763 + BIQUAD_COEFS("CH2 - Biquad 2", TAS5733_CH2_BQ2_REG), 764 + BIQUAD_COEFS("CH2 - Biquad 3", TAS5733_CH2_BQ3_REG), 765 + BIQUAD_COEFS("CH2 - Biquad 4", TAS5733_CH2_BQ4_REG), 766 + BIQUAD_COEFS("CH2 - Biquad 5", TAS5733_CH2_BQ5_REG), 767 + BIQUAD_COEFS("CH2 - Biquad 6", TAS5733_CH2_BQ6_REG), 768 + BIQUAD_COEFS("CH2 - Biquad 7", TAS5733_CH2_BQ7_REG), 769 + BIQUAD_COEFS("CH2 - Biquad 8", TAS5733_CH2_BQ8_REG), 770 + BIQUAD_COEFS("CH2 - Biquad 9", TAS5733_CH2_BQ9_REG), 771 + BIQUAD_COEFS("CH2 - Biquad 10", TAS5733_CH2_BQ10_REG), 772 + 773 + BIQUAD_COEFS("CH1 - Cross Biquad 0", TAS5733_CH1_CBQ0_REG), 774 + BIQUAD_COEFS("CH1 - Cross Biquad 1", TAS5733_CH1_CBQ1_REG), 775 + BIQUAD_COEFS("CH1 - Cross Biquad 2", TAS5733_CH1_CBQ2_REG), 776 + BIQUAD_COEFS("CH1 - Cross Biquad 3", TAS5733_CH1_CBQ3_REG), 777 + 778 + BIQUAD_COEFS("CH2 - Cross Biquad 0", TAS5733_CH2_CBQ0_REG), 779 + BIQUAD_COEFS("CH2 - Cross Biquad 1", TAS5733_CH2_CBQ1_REG), 780 + BIQUAD_COEFS("CH2 - Cross Biquad 2", TAS5733_CH2_CBQ2_REG), 781 + BIQUAD_COEFS("CH2 - Cross Biquad 3", TAS5733_CH2_CBQ3_REG), 782 + }; 783 + 721 784 static const char *const tas5733_supply_names[] = { 722 785 "AVDD", 723 786 "DVDD", ··· 833 770 static const struct tas571x_chip tas5733_chip = { 834 771 .supply_names = tas5733_supply_names, 835 772 .num_supply_names = ARRAY_SIZE(tas5733_supply_names), 836 - .controls = tas5717_controls, 837 - .num_controls = ARRAY_SIZE(tas5717_controls), 773 + .controls = tas5733_controls, 774 + .num_controls = ARRAY_SIZE(tas5733_controls), 838 775 .regmap_config = &tas5733_regmap_config, 839 776 .vol_reg_size = 2, 840 777 };
+34
sound/soc/codecs/tas571x.h
··· 104 104 #define TAS5717_CH2_LEFT_CH_MIX_REG 0x76 105 105 #define TAS5717_CH2_RIGHT_CH_MIX_REG 0x77 106 106 107 + #define TAS5733_CH1_BQ0_REG 0x26 108 + #define TAS5733_CH1_BQ1_REG 0x27 109 + #define TAS5733_CH1_BQ2_REG 0x28 110 + #define TAS5733_CH1_BQ3_REG 0x29 111 + #define TAS5733_CH1_BQ4_REG 0x2a 112 + #define TAS5733_CH1_BQ5_REG 0x2b 113 + #define TAS5733_CH1_BQ6_REG 0x2c 114 + #define TAS5733_CH1_BQ7_REG 0x2d 115 + #define TAS5733_CH1_BQ8_REG 0x2e 116 + #define TAS5733_CH1_BQ9_REG 0x2f 117 + 118 + #define TAS5733_CH2_BQ0_REG 0x30 119 + #define TAS5733_CH2_BQ1_REG 0x31 120 + #define TAS5733_CH2_BQ2_REG 0x32 121 + #define TAS5733_CH2_BQ3_REG 0x33 122 + #define TAS5733_CH2_BQ4_REG 0x34 123 + #define TAS5733_CH2_BQ5_REG 0x35 124 + #define TAS5733_CH2_BQ6_REG 0x36 125 + #define TAS5733_CH2_BQ7_REG 0x37 126 + #define TAS5733_CH2_BQ8_REG 0x38 127 + #define TAS5733_CH2_BQ9_REG 0x39 128 + 129 + #define TAS5733_CH1_BQ10_REG 0x58 130 + #define TAS5733_CH1_CBQ0_REG 0x59 131 + #define TAS5733_CH1_CBQ1_REG 0x5a 132 + #define TAS5733_CH1_CBQ2_REG 0x5b 133 + #define TAS5733_CH1_CBQ3_REG 0x5c 134 + 135 + #define TAS5733_CH2_BQ10_REG 0x5d 136 + #define TAS5733_CH2_CBQ0_REG 0x5e 137 + #define TAS5733_CH2_CBQ1_REG 0x5f 138 + #define TAS5733_CH2_CBQ2_REG 0x60 139 + #define TAS5733_CH2_CBQ3_REG 0x61 140 + 107 141 #endif /* _TAS571X_H */
+7 -18
sound/soc/codecs/wcd9335.c
··· 332 332 333 333 int intr1; 334 334 struct gpio_desc *reset_gpio; 335 - struct regulator_bulk_data supplies[WCD9335_MAX_SUPPLY]; 336 335 337 336 unsigned int rx_port_value[WCD9335_RX_MAX]; 338 337 unsigned int tx_port_value[WCD9335_TX_MAX]; ··· 352 353 int irq; 353 354 irqreturn_t (*handler)(int irq, void *data); 354 355 char *name; 356 + }; 357 + 358 + static const char * const wcd9335_supplies[] = { 359 + "vdd-buck", "vdd-buck-sido", "vdd-tx", "vdd-rx", "vdd-io", 355 360 }; 356 361 357 362 static const struct wcd9335_slim_ch wcd9335_tx_chs[WCD9335_TX_MAX] = { ··· 4992 4989 if (IS_ERR(wcd->native_clk)) 4993 4990 return dev_err_probe(dev, PTR_ERR(wcd->native_clk), "slimbus clock not found\n"); 4994 4991 4995 - wcd->supplies[0].supply = "vdd-buck"; 4996 - wcd->supplies[1].supply = "vdd-buck-sido"; 4997 - wcd->supplies[2].supply = "vdd-tx"; 4998 - wcd->supplies[3].supply = "vdd-rx"; 4999 - wcd->supplies[4].supply = "vdd-io"; 5000 - 5001 - ret = regulator_bulk_get(dev, WCD9335_MAX_SUPPLY, wcd->supplies); 4992 + ret = devm_regulator_bulk_get_enable(dev, ARRAY_SIZE(wcd9335_supplies), 4993 + wcd9335_supplies); 5002 4994 if (ret) 5003 - return dev_err_probe(dev, ret, "Failed to get supplies\n"); 4995 + return dev_err_probe(dev, ret, "Failed to get and enable supplies\n"); 5004 4996 5005 4997 return 0; 5006 4998 } 5007 4999 5008 5000 static int wcd9335_power_on_reset(struct wcd9335_codec *wcd) 5009 5001 { 5010 - struct device *dev = wcd->dev; 5011 - int ret; 5012 - 5013 - ret = regulator_bulk_enable(WCD9335_MAX_SUPPLY, wcd->supplies); 5014 - if (ret) { 5015 - dev_err(dev, "Failed to get supplies: err = %d\n", ret); 5016 - return ret; 5017 - } 5018 - 5019 5002 /* 5020 5003 * For WCD9335, it takes about 600us for the Vout_A and 5021 5004 * Vout_D to be ready after BUCK_SIDO is powered up.
+1 -6
sound/soc/codecs/wcd937x.c
··· 91 91 struct regmap_irq_chip *wcd_regmap_irq_chip; 92 92 struct regmap_irq_chip_data *irq_chip; 93 93 struct regulator_bulk_data supplies[WCD937X_MAX_BULK_SUPPLY]; 94 - struct regulator *buck_supply; 95 94 struct snd_soc_jack *jack; 96 95 unsigned long status_mask; 97 96 s32 micb_ref[WCD937X_MAX_MICBIAS]; ··· 2944 2945 return dev_err_probe(dev, ret, "Failed to get supplies\n"); 2945 2946 2946 2947 ret = regulator_bulk_enable(WCD937X_MAX_BULK_SUPPLY, wcd937x->supplies); 2947 - if (ret) { 2948 - regulator_bulk_free(WCD937X_MAX_BULK_SUPPLY, wcd937x->supplies); 2948 + if (ret) 2949 2949 return dev_err_probe(dev, ret, "Failed to enable supplies\n"); 2950 - } 2951 2950 2952 2951 wcd937x_dt_parse_micbias_info(dev, wcd937x); 2953 2952 ··· 2981 2984 2982 2985 err_disable_regulators: 2983 2986 regulator_bulk_disable(WCD937X_MAX_BULK_SUPPLY, wcd937x->supplies); 2984 - regulator_bulk_free(WCD937X_MAX_BULK_SUPPLY, wcd937x->supplies); 2985 2987 2986 2988 return ret; 2987 2989 } ··· 2997 3001 pm_runtime_dont_use_autosuspend(dev); 2998 3002 2999 3003 regulator_bulk_disable(WCD937X_MAX_BULK_SUPPLY, wcd937x->supplies); 3000 - regulator_bulk_free(WCD937X_MAX_BULK_SUPPLY, wcd937x->supplies); 3001 3004 } 3002 3005 3003 3006 #if defined(CONFIG_OF)
+1 -1
sound/soc/intel/avs/board_selection.c
··· 548 548 u32 *array, num_elems; 549 549 550 550 ret = parse_int_array(i2s_test, strlen(i2s_test), (int **)&array); 551 - if (ret < 0) { 551 + if (ret) { 552 552 dev_err(adev->dev, "failed to parse i2s_test parameter\n"); 553 553 return ret; 554 554 }
+1 -1
sound/soc/intel/avs/boards/rt5663.c
··· 228 228 card->name = "avs_rt5663"; 229 229 } else { 230 230 card->driver_name = "avs_rt5663"; 231 - card->long_name = card->name = "AVS I2S ALC5640"; 231 + card->long_name = card->name = "AVS I2S ALC5663"; 232 232 } 233 233 card->dev = dev; 234 234 card->owner = THIS_MODULE;
+10 -10
sound/soc/intel/avs/core.c
··· 945 945 MODULE_AUTHOR("Amadeusz Slawinski <amadeuszx.slawinski@linux.intel.com>"); 946 946 MODULE_DESCRIPTION("Intel cAVS sound driver"); 947 947 MODULE_LICENSE("GPL"); 948 - MODULE_FIRMWARE("intel/skl/dsp_basefw.bin"); 949 - MODULE_FIRMWARE("intel/apl/dsp_basefw.bin"); 950 - MODULE_FIRMWARE("intel/cnl/dsp_basefw.bin"); 951 - MODULE_FIRMWARE("intel/icl/dsp_basefw.bin"); 952 - MODULE_FIRMWARE("intel/jsl/dsp_basefw.bin"); 953 - MODULE_FIRMWARE("intel/lkf/dsp_basefw.bin"); 954 - MODULE_FIRMWARE("intel/tgl/dsp_basefw.bin"); 955 - MODULE_FIRMWARE("intel/ehl/dsp_basefw.bin"); 956 - MODULE_FIRMWARE("intel/adl/dsp_basefw.bin"); 957 - MODULE_FIRMWARE("intel/adl_n/dsp_basefw.bin"); 948 + MODULE_FIRMWARE("intel/avs/skl/dsp_basefw.bin"); 949 + MODULE_FIRMWARE("intel/avs/apl/dsp_basefw.bin"); 950 + MODULE_FIRMWARE("intel/avs/cnl/dsp_basefw.bin"); 951 + MODULE_FIRMWARE("intel/avs/icl/dsp_basefw.bin"); 952 + MODULE_FIRMWARE("intel/avs/jsl/dsp_basefw.bin"); 953 + MODULE_FIRMWARE("intel/avs/lkf/dsp_basefw.bin"); 954 + MODULE_FIRMWARE("intel/avs/tgl/dsp_basefw.bin"); 955 + MODULE_FIRMWARE("intel/avs/ehl/dsp_basefw.bin"); 956 + MODULE_FIRMWARE("intel/avs/adl/dsp_basefw.bin"); 957 + MODULE_FIRMWARE("intel/avs/adl_n/dsp_basefw.bin"); 958 958 MODULE_FIRMWARE("intel/fcl/dsp_basefw.bin");
+8 -4
sound/soc/intel/avs/debugfs.c
··· 144 144 int ret; 145 145 146 146 ret = parse_int_array_user(from, count, (int **)&array); 147 - if (ret < 0) 147 + if (ret) 148 148 return ret; 149 149 150 150 num_elems = *array; ··· 181 181 int ret; 182 182 183 183 ret = parse_int_array_user(from, count, (int **)&array); 184 - if (ret < 0) 184 + if (ret) 185 185 return ret; 186 186 187 187 num_elems = *array; ··· 369 369 int ret; 370 370 371 371 ret = parse_int_array_user(from, count, (int **)&array); 372 - if (ret < 0) 372 + if (ret) 373 373 return ret; 374 374 375 375 num_elems = *array; 376 - resource_mask = array[1]; 376 + if (!num_elems) { 377 + ret = -EINVAL; 378 + goto free_array; 379 + } 377 380 378 381 /* 379 382 * Disable if just resource mask is provided - no log priority flags. ··· 384 381 * Enable input format: mask, prio1, .., prioN 385 382 * Where 'N' equals number of bits set in the 'mask'. 386 383 */ 384 + resource_mask = array[1]; 387 385 if (num_elems == 1) { 388 386 ret = disable_logs(adev, resource_mask); 389 387 } else {
+3 -1
sound/soc/intel/avs/ipc.c
··· 169 169 170 170 dev_crit(adev->dev, "communication severed, rebooting dsp..\n"); 171 171 172 - cancel_delayed_work_sync(&ipc->d0ix_work); 172 + /* Avoid deadlock as the exception may be the response to SET_D0IX. */ 173 + if (current_work() != &ipc->d0ix_work.work) 174 + cancel_delayed_work_sync(&ipc->d0ix_work); 173 175 ipc->in_d0ix = false; 174 176 /* Re-enabled on recovery completion. */ 175 177 pm_runtime_disable(adev->dev);
+1
sound/soc/intel/avs/loader.c
··· 9 9 #include <linux/firmware.h> 10 10 #include <linux/module.h> 11 11 #include <linux/slab.h> 12 + #include <linux/string.h> 12 13 #include <sound/hdaudio.h> 13 14 #include <sound/hdaudio_ext.h> 14 15 #include "avs.h"
+2
sound/soc/intel/avs/path.c
··· 134 134 rlist = kcalloc(i, sizeof(*rlist), GFP_KERNEL); 135 135 clist = kcalloc(i, sizeof(*clist), GFP_KERNEL); 136 136 slist = kcalloc(i, sizeof(*slist), GFP_KERNEL); 137 + if (!rlist || !clist || !slist) 138 + return -ENOMEM; 137 139 138 140 i = 0; 139 141 list_for_each_entry(path_template, &template->path_list, node) {
+6 -7
sound/soc/intel/avs/pcm.c
··· 83 83 static int hw_rule_param_size(struct snd_pcm_hw_params *params, struct snd_pcm_hw_rule *rule); 84 84 static int avs_hw_constraints_init(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) 85 85 { 86 - struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream); 87 86 struct snd_pcm_runtime *runtime = substream->runtime; 88 87 struct snd_pcm_hw_constraint_list *r, *c, *s; 89 - struct avs_tplg_path_template *template; 90 88 struct avs_dma_data *data; 91 89 int ret; 92 90 ··· 97 99 c = &(data->channels_list); 98 100 s = &(data->sample_bits_list); 99 101 100 - template = avs_dai_find_path_template(dai, !rtd->dai_link->no_pcm, substream->stream); 101 - ret = avs_path_set_constraint(data->adev, template, r, c, s); 102 + ret = avs_path_set_constraint(data->adev, data->template, r, c, s); 102 103 if (ret <= 0) 103 104 return ret; 104 105 ··· 447 450 448 451 static int avs_dai_hda_be_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) 449 452 { 450 - struct snd_pcm_runtime *runtime = substream->runtime; 453 + struct snd_soc_pcm_runtime *be = snd_soc_substream_to_rtd(substream); 451 454 const struct snd_soc_pcm_stream *stream_info; 452 455 struct hdac_ext_stream *link_stream; 456 + const struct snd_pcm_hw_params *p; 453 457 struct avs_dma_data *data; 454 458 unsigned int format_val; 455 459 unsigned int bits; ··· 458 460 459 461 data = snd_soc_dai_get_dma_data(dai, substream); 460 462 link_stream = data->link_stream; 463 + p = &be->dpcm[substream->stream].hw_params; 461 464 462 465 if (link_stream->link_prepared) 463 466 return 0; 464 467 465 468 stream_info = snd_soc_dai_get_pcm_stream(dai, substream->stream); 466 - bits = snd_hdac_stream_format_bits(runtime->format, runtime->subformat, 469 + bits = snd_hdac_stream_format_bits(params_format(p), params_subformat(p), 467 470 stream_info->sig_bits); 468 - format_val = snd_hdac_stream_format(runtime->channels, bits, runtime->rate); 471 + format_val = snd_hdac_stream_format(params_channels(p), bits, params_rate(p)); 469 472 470 473 snd_hdac_ext_stream_decouple(&data->adev->base.core, link_stream, true); 471 474 snd_hdac_ext_stream_reset(link_stream);
+12 -11
sound/soc/soc-pcm.c
··· 2510 2510 2511 2511 dpcm_set_fe_update_state(fe, stream, SND_SOC_DPCM_UPDATE_FE); 2512 2512 2513 - /* there is no point preparing this FE if there are no BEs */ 2514 - if (list_empty(&fe->dpcm[stream].be_clients)) { 2515 - /* dev_err_once() for visibility, dev_dbg() for debugging UCM profiles */ 2516 - dev_err_once(fe->dev, "ASoC: no backend DAIs enabled for %s, possibly missing ALSA mixer-based routing or UCM profile\n", 2517 - fe->dai_link->name); 2518 - dev_dbg(fe->dev, "ASoC: no backend DAIs enabled for %s\n", 2519 - fe->dai_link->name); 2520 - ret = -EINVAL; 2521 - goto out; 2522 - } 2523 - 2524 2513 ret = dpcm_be_dai_prepare(fe, stream); 2525 2514 if (ret < 0) 2526 2515 goto out; ··· 2765 2776 /* calculate valid and active FE <-> BE dpcms */ 2766 2777 dpcm_add_paths(fe, stream, &list); 2767 2778 2779 + /* There is no point starting up this FE if there are no BEs. */ 2780 + if (list_empty(&fe->dpcm[stream].be_clients)) { 2781 + /* dev_err_once() for visibility, dev_dbg() for debugging UCM profiles. */ 2782 + dev_err_once(fe->dev, "ASoC: no backend DAIs enabled for %s, possibly missing ALSA mixer-based routing or UCM profile\n", 2783 + fe->dai_link->name); 2784 + dev_dbg(fe->dev, "ASoC: no backend DAIs enabled for %s\n", fe->dai_link->name); 2785 + 2786 + ret = -EINVAL; 2787 + goto put_path; 2788 + } 2789 + 2768 2790 ret = dpcm_fe_dai_startup(fe_substream); 2769 2791 if (ret < 0) 2770 2792 dpcm_fe_dai_cleanup(fe_substream); 2771 2793 2772 2794 dpcm_clear_pending_state(fe, stream); 2795 + put_path: 2773 2796 dpcm_path_put(&list); 2774 2797 open_end: 2775 2798 snd_soc_dpcm_mutex_unlock(fe);
+5 -2
sound/soc/ti/omap-hdmi.c
··· 361 361 if (!card->dai_link) 362 362 return -ENOMEM; 363 363 364 - compnent = devm_kzalloc(dev, sizeof(*compnent), GFP_KERNEL); 364 + compnent = devm_kzalloc(dev, 2 * sizeof(*compnent), GFP_KERNEL); 365 365 if (!compnent) 366 366 return -ENOMEM; 367 - card->dai_link->cpus = compnent; 367 + card->dai_link->cpus = &compnent[0]; 368 368 card->dai_link->num_cpus = 1; 369 369 card->dai_link->codecs = &snd_soc_dummy_dlc; 370 370 card->dai_link->num_codecs = 1; 371 + card->dai_link->platforms = &compnent[1]; 372 + card->dai_link->num_platforms = 1; 371 373 372 374 card->dai_link->name = card->name; 373 375 card->dai_link->stream_name = card->name; 374 376 card->dai_link->cpus->dai_name = dev_name(ad->dssdev); 377 + card->dai_link->platforms->name = dev_name(ad->dssdev); 375 378 card->num_links = 1; 376 379 card->dev = dev; 377 380
+1
sound/usb/implicit.c
··· 57 57 IMPLICIT_FB_FIXED_DEV(0x31e9, 0x0002, 0x81, 2), /* Solid State Logic SSL2+ */ 58 58 IMPLICIT_FB_FIXED_DEV(0x0499, 0x172f, 0x81, 2), /* Steinberg UR22C */ 59 59 IMPLICIT_FB_FIXED_DEV(0x0d9a, 0x00df, 0x81, 2), /* RTX6001 */ 60 + IMPLICIT_FB_FIXED_DEV(0x19f7, 0x000a, 0x84, 3), /* RODE AI-1 */ 60 61 IMPLICIT_FB_FIXED_DEV(0x22f0, 0x0006, 0x81, 3), /* Allen&Heath Qu-16 */ 61 62 IMPLICIT_FB_FIXED_DEV(0x1686, 0xf029, 0x82, 2), /* Zoom UAC-2 */ 62 63 IMPLICIT_FB_FIXED_DEV(0x2466, 0x8003, 0x86, 2), /* Fractal Audio Axe-Fx II */
+2
sound/usb/quirks.c
··· 2285 2285 QUIRK_FLAG_DISABLE_AUTOSUSPEND), 2286 2286 DEVICE_FLG(0x17aa, 0x104d, /* Lenovo ThinkStation P620 Internal Speaker + Front Headset */ 2287 2287 QUIRK_FLAG_DISABLE_AUTOSUSPEND), 2288 + DEVICE_FLG(0x17ef, 0x3083, /* Lenovo TBT3 dock */ 2289 + QUIRK_FLAG_GET_SAMPLE_RATE), 2288 2290 DEVICE_FLG(0x1852, 0x5062, /* Luxman D-08u */ 2289 2291 QUIRK_FLAG_ITF_USB_DSD_DAC | QUIRK_FLAG_CTL_MSG_DELAY), 2290 2292 DEVICE_FLG(0x1852, 0x5065, /* Luxman DA-06 */