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

ASoC: Merge up fixes

For the benefit of CI.

+183 -68
+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
+17 -17
drivers/firmware/cirrus/cs_dsp.c
··· 1863 1863 return PTR_ERR(adsp2_alg); 1864 1864 1865 1865 for (i = 0; i < n_algs; i++) { 1866 - cs_dsp_info(dsp, 1867 - "%d: ID %x v%d.%d.%d XM@%x YM@%x ZM@%x\n", 1868 - i, be32_to_cpu(adsp2_alg[i].alg.id), 1869 - (be32_to_cpu(adsp2_alg[i].alg.ver) & 0xff0000) >> 16, 1870 - (be32_to_cpu(adsp2_alg[i].alg.ver) & 0xff00) >> 8, 1871 - be32_to_cpu(adsp2_alg[i].alg.ver) & 0xff, 1872 - be32_to_cpu(adsp2_alg[i].xm), 1873 - be32_to_cpu(adsp2_alg[i].ym), 1874 - be32_to_cpu(adsp2_alg[i].zm)); 1866 + cs_dsp_dbg(dsp, 1867 + "%d: ID %x v%d.%d.%d XM@%x YM@%x ZM@%x\n", 1868 + i, be32_to_cpu(adsp2_alg[i].alg.id), 1869 + (be32_to_cpu(adsp2_alg[i].alg.ver) & 0xff0000) >> 16, 1870 + (be32_to_cpu(adsp2_alg[i].alg.ver) & 0xff00) >> 8, 1871 + be32_to_cpu(adsp2_alg[i].alg.ver) & 0xff, 1872 + be32_to_cpu(adsp2_alg[i].xm), 1873 + be32_to_cpu(adsp2_alg[i].ym), 1874 + be32_to_cpu(adsp2_alg[i].zm)); 1875 1875 1876 1876 alg_region = cs_dsp_create_region(dsp, WMFW_ADSP2_XM, 1877 1877 adsp2_alg[i].alg.id, ··· 1996 1996 return PTR_ERR(halo_alg); 1997 1997 1998 1998 for (i = 0; i < n_algs; i++) { 1999 - cs_dsp_info(dsp, 2000 - "%d: ID %x v%d.%d.%d XM@%x YM@%x\n", 2001 - i, be32_to_cpu(halo_alg[i].alg.id), 2002 - (be32_to_cpu(halo_alg[i].alg.ver) & 0xff0000) >> 16, 2003 - (be32_to_cpu(halo_alg[i].alg.ver) & 0xff00) >> 8, 2004 - be32_to_cpu(halo_alg[i].alg.ver) & 0xff, 2005 - be32_to_cpu(halo_alg[i].xm_base), 2006 - be32_to_cpu(halo_alg[i].ym_base)); 1999 + cs_dsp_dbg(dsp, 2000 + "%d: ID %x v%d.%d.%d XM@%x YM@%x\n", 2001 + i, be32_to_cpu(halo_alg[i].alg.id), 2002 + (be32_to_cpu(halo_alg[i].alg.ver) & 0xff0000) >> 16, 2003 + (be32_to_cpu(halo_alg[i].alg.ver) & 0xff00) >> 8, 2004 + be32_to_cpu(halo_alg[i].alg.ver) & 0xff, 2005 + be32_to_cpu(halo_alg[i].xm_base), 2006 + be32_to_cpu(halo_alg[i].ym_base)); 2007 2007 2008 2008 ret = cs_dsp_halo_create_regions(dsp, halo_alg[i].alg.id, 2009 2009 halo_alg[i].alg.ver,
+2
sound/soc/codecs/aw88395/aw88395_lib.c
··· 452 452 if ((aw_bin->all_bin_parse_num != 1) || 453 453 (aw_bin->header_info[0].bin_data_type != DATA_TYPE_REGISTER)) { 454 454 dev_err(aw_dev->dev, "bin num or type error"); 455 + ret = -EINVAL; 455 456 goto parse_bin_failed; 456 457 } 457 458 458 459 if (aw_bin->header_info[0].valid_data_len % 4) { 459 460 dev_err(aw_dev->dev, "bin data len get error!"); 461 + ret = -EINVAL; 460 462 goto parse_bin_failed; 461 463 } 462 464
-1
sound/soc/codecs/cs35l56-i2c.c
··· 27 27 return -ENOMEM; 28 28 29 29 cs35l56->base.dev = dev; 30 - cs35l56->base.can_hibernate = true; 31 30 32 31 i2c_set_clientdata(client, cs35l56); 33 32 cs35l56->base.regmap = devm_regmap_init_i2c(client, regmap_config);
+20
sound/soc/codecs/cs42l42-sdw.c
··· 344 344 switch (status) { 345 345 case SDW_SLAVE_ATTACHED: 346 346 dev_dbg(cs42l42->dev, "ATTACHED\n"); 347 + 348 + /* 349 + * The SoundWire core can report stale ATTACH notifications 350 + * if we hard-reset CS42L42 in probe() but it had already been 351 + * enumerated. Reject the ATTACH if we haven't yet seen an 352 + * UNATTACH report for the device being in reset. 353 + */ 354 + if (cs42l42->sdw_waiting_first_unattach) 355 + break; 356 + 347 357 /* 348 358 * Initialise codec, this only needs to be done once. 349 359 * When resuming from suspend, resume callback will handle re-init of codec, ··· 364 354 break; 365 355 case SDW_SLAVE_UNATTACHED: 366 356 dev_dbg(cs42l42->dev, "UNATTACHED\n"); 357 + 358 + if (cs42l42->sdw_waiting_first_unattach) { 359 + /* 360 + * SoundWire core has seen that CS42L42 is not on 361 + * the bus so release RESET and wait for ATTACH. 362 + */ 363 + cs42l42->sdw_waiting_first_unattach = false; 364 + gpiod_set_value_cansleep(cs42l42->reset_gpio, 1); 365 + } 366 + 367 367 break; 368 368 default: 369 369 break;
+20 -1
sound/soc/codecs/cs42l42.c
··· 2320 2320 2321 2321 if (cs42l42->reset_gpio) { 2322 2322 dev_dbg(cs42l42->dev, "Found reset GPIO\n"); 2323 - gpiod_set_value_cansleep(cs42l42->reset_gpio, 1); 2323 + 2324 + /* 2325 + * ACPI can override the default GPIO state we requested 2326 + * so ensure that we start with RESET low. 2327 + */ 2328 + gpiod_set_value_cansleep(cs42l42->reset_gpio, 0); 2329 + 2330 + /* Ensure minimum reset pulse width */ 2331 + usleep_range(10, 500); 2332 + 2333 + /* 2334 + * On SoundWire keep the chip in reset until we get an UNATTACH 2335 + * notification from the SoundWire core. This acts as a 2336 + * synchronization point to reject stale ATTACH notifications 2337 + * if the chip was already enumerated before we reset it. 2338 + */ 2339 + if (cs42l42->sdw_peripheral) 2340 + cs42l42->sdw_waiting_first_unattach = true; 2341 + else 2342 + gpiod_set_value_cansleep(cs42l42->reset_gpio, 1); 2324 2343 } 2325 2344 usleep_range(CS42L42_BOOT_TIME_US, CS42L42_BOOT_TIME_US * 2); 2326 2345
+1
sound/soc/codecs/cs42l42.h
··· 53 53 u8 stream_use; 54 54 bool hp_adc_up_pending; 55 55 bool suspended; 56 + bool sdw_waiting_first_unattach; 56 57 bool init_done; 57 58 }; 58 59
+8 -6
sound/soc/codecs/cs42l43.c
··· 2077 2077 2078 2078 static int cs42l43_request_irq(struct cs42l43_codec *priv, 2079 2079 struct irq_domain *dom, const char * const name, 2080 - unsigned int irq, irq_handler_t handler) 2080 + unsigned int irq, irq_handler_t handler, 2081 + unsigned long flags) 2081 2082 { 2082 2083 int ret; 2083 2084 ··· 2088 2087 2089 2088 dev_dbg(priv->dev, "Request IRQ %d for %s\n", ret, name); 2090 2089 2091 - ret = devm_request_threaded_irq(priv->dev, ret, NULL, handler, IRQF_ONESHOT, 2092 - name, priv); 2090 + ret = devm_request_threaded_irq(priv->dev, ret, NULL, handler, 2091 + IRQF_ONESHOT | flags, name, priv); 2093 2092 if (ret) 2094 2093 return dev_err_probe(priv->dev, ret, "Failed to request IRQ %s\n", name); 2095 2094 ··· 2125 2124 return 0; 2126 2125 } 2127 2126 2128 - ret = cs42l43_request_irq(priv, dom, close_name, close_irq, handler); 2127 + ret = cs42l43_request_irq(priv, dom, close_name, close_irq, handler, IRQF_SHARED); 2129 2128 if (ret) 2130 2129 return ret; 2131 2130 2132 - return cs42l43_request_irq(priv, dom, open_name, open_irq, handler); 2131 + return cs42l43_request_irq(priv, dom, open_name, open_irq, handler, IRQF_SHARED); 2133 2132 } 2134 2133 2135 2134 static int cs42l43_codec_probe(struct platform_device *pdev) ··· 2179 2178 2180 2179 for (i = 0; i < ARRAY_SIZE(cs42l43_irqs); i++) { 2181 2180 ret = cs42l43_request_irq(priv, dom, cs42l43_irqs[i].name, 2182 - cs42l43_irqs[i].irq, cs42l43_irqs[i].handler); 2181 + cs42l43_irqs[i].irq, 2182 + cs42l43_irqs[i].handler, 0); 2183 2183 if (ret) 2184 2184 goto err_pm; 2185 2185 }
+12 -17
sound/soc/codecs/rt5640.c
··· 2403 2403 struct rt5640_priv *rt5640 = data; 2404 2404 int delay = 0; 2405 2405 2406 - if (rt5640->jd_src == RT5640_JD_SRC_HDA_HEADER) { 2407 - cancel_delayed_work_sync(&rt5640->jack_work); 2406 + if (rt5640->jd_src == RT5640_JD_SRC_HDA_HEADER) 2408 2407 delay = 100; 2409 - } 2410 2408 2411 2409 if (rt5640->jack) 2412 - queue_delayed_work(system_long_wq, &rt5640->jack_work, delay); 2410 + mod_delayed_work(system_long_wq, &rt5640->jack_work, delay); 2413 2411 2414 2412 return IRQ_HANDLED; 2415 2413 } ··· 2563 2565 if (jack_data && jack_data->use_platform_clock) 2564 2566 rt5640->use_platform_clock = jack_data->use_platform_clock; 2565 2567 2566 - ret = devm_request_threaded_irq(component->dev, rt5640->irq, 2567 - NULL, rt5640_irq, 2568 - IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT, 2569 - "rt5640", rt5640); 2568 + ret = request_irq(rt5640->irq, rt5640_irq, 2569 + IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT, 2570 + "rt5640", rt5640); 2570 2571 if (ret) { 2571 2572 dev_warn(component->dev, "Failed to request IRQ %d: %d\n", rt5640->irq, ret); 2572 2573 rt5640_disable_jack_detect(component); ··· 2618 2621 2619 2622 rt5640->jack = jack; 2620 2623 2621 - ret = devm_request_threaded_irq(component->dev, rt5640->irq, 2622 - NULL, rt5640_irq, IRQF_TRIGGER_RISING | IRQF_ONESHOT, 2623 - "rt5640", rt5640); 2624 + ret = request_irq(rt5640->irq, rt5640_irq, 2625 + IRQF_TRIGGER_RISING | IRQF_ONESHOT, "rt5640", rt5640); 2624 2626 if (ret) { 2625 2627 dev_warn(component->dev, "Failed to request IRQ %d: %d\n", rt5640->irq, ret); 2626 - rt5640->irq = -ENXIO; 2628 + rt5640->jack = NULL; 2627 2629 return; 2628 2630 } 2631 + rt5640->irq_requested = true; 2629 2632 2630 2633 /* sync initial jack state */ 2631 2634 queue_delayed_work(system_long_wq, &rt5640->jack_work, 0); ··· 2798 2801 { 2799 2802 struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component); 2800 2803 2801 - if (rt5640->irq) { 2804 + if (rt5640->jack) { 2802 2805 /* disable jack interrupts during system suspend */ 2803 2806 disable_irq(rt5640->irq); 2807 + rt5640_cancel_work(rt5640); 2804 2808 } 2805 2809 2806 - rt5640_cancel_work(rt5640); 2807 2810 snd_soc_component_force_bias_level(component, SND_SOC_BIAS_OFF); 2808 2811 rt5640_reset(component); 2809 2812 regcache_cache_only(rt5640->regmap, true); ··· 2825 2828 2826 2829 regcache_cache_only(rt5640->regmap, false); 2827 2830 regcache_sync(rt5640->regmap); 2828 - 2829 - if (rt5640->irq) 2830 - enable_irq(rt5640->irq); 2831 2831 2832 2832 if (rt5640->jack) { 2833 2833 if (rt5640->jd_src == RT5640_JD_SRC_HDA_HEADER) { ··· 2853 2859 } 2854 2860 } 2855 2861 2862 + enable_irq(rt5640->irq); 2856 2863 queue_delayed_work(system_long_wq, &rt5640->jack_work, 0); 2857 2864 } 2858 2865
+11 -2
sound/soc/codecs/wm_adsp.c
··· 687 687 struct wm_coeff_ctl *ctl; 688 688 int ret; 689 689 690 + mutex_lock(&dsp->cs_dsp.pwr_lock); 690 691 ret = cs_dsp_coeff_write_ctrl(cs_ctl, 0, buf, len); 692 + mutex_unlock(&dsp->cs_dsp.pwr_lock); 693 + 691 694 if (ret < 0) 692 695 return ret; 693 696 ··· 706 703 int wm_adsp_read_ctl(struct wm_adsp *dsp, const char *name, int type, 707 704 unsigned int alg, void *buf, size_t len) 708 705 { 709 - return cs_dsp_coeff_read_ctrl(cs_dsp_get_ctl(&dsp->cs_dsp, name, type, alg), 710 - 0, buf, len); 706 + int ret; 707 + 708 + mutex_lock(&dsp->cs_dsp.pwr_lock); 709 + ret = cs_dsp_coeff_read_ctrl(cs_dsp_get_ctl(&dsp->cs_dsp, name, type, alg), 710 + 0, buf, len); 711 + mutex_unlock(&dsp->cs_dsp.pwr_lock); 712 + 713 + return ret; 711 714 } 712 715 EXPORT_SYMBOL_GPL(wm_adsp_read_ctl); 713 716
+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(snd_soc_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 {
+1 -1
sound/soc/fsl/imx-audmix.c
··· 315 315 if (IS_ERR(priv->cpu_mclk)) { 316 316 ret = PTR_ERR(priv->cpu_mclk); 317 317 dev_err(&cpu_pdev->dev, "failed to get DAI mclk1: %d\n", ret); 318 - return -EINVAL; 318 + return ret; 319 319 } 320 320 321 321 priv->audmix_pdev = audmix_pdev;
+8
sound/soc/fsl/imx-rpmsg.c
··· 89 89 SND_SOC_DAIFMT_NB_NF | 90 90 SND_SOC_DAIFMT_CBC_CFC; 91 91 92 + /* 93 + * i.MX rpmsg sound cards work on codec slave mode. MCLK will be 94 + * disabled by CPU DAI driver in hw_free(). Some codec requires MCLK 95 + * present at power up/down sequence. So need to set ignore_pmdown_time 96 + * to power down codec immediately before MCLK is turned off. 97 + */ 98 + data->dai.ignore_pmdown_time = 1; 99 + 92 100 /* Optional codec node */ 93 101 ret = of_parse_phandle_with_fixed_args(np, "audio-codec", 0, 0, &args); 94 102 if (ret) {
+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
··· 758 758 struct snd_soc_dai_link *dai_link = priv->dai_link; 759 759 struct simple_dai_props *dai_props = priv->dai_props; 760 760 761 + ret = -EINVAL; 762 + 761 763 cinfo = dev->platform_data; 762 764 if (!cinfo) { 763 765 dev_err(dev, "no info for asoc-simple-card\n"); 764 - return -EINVAL; 766 + goto err; 765 767 } 766 768 767 769 if (!cinfo->name || ··· 772 770 !cinfo->platform || 773 771 !cinfo->cpu_dai.name) { 774 772 dev_err(dev, "insufficient simple_util_info settings\n"); 775 - return -EINVAL; 773 + goto err; 776 774 } 777 775 778 776 cpus = dai_link->cpus;
+3
sound/soc/intel/avs/boards/hdaudio.c
··· 55 55 return -ENOMEM; 56 56 57 57 dl[i].codecs->name = devm_kstrdup(dev, cname, GFP_KERNEL); 58 + if (!dl[i].codecs->name) 59 + return -ENOMEM; 60 + 58 61 dl[i].codecs->dai_name = pcm->name; 59 62 dl[i].num_codecs = 1; 60 63 dl[i].num_cpus = 1;
+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
··· 373 373 .callback = sof_sdw_quirk_cb, 374 374 .matches = { 375 375 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc"), 376 + DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "0B14"), 377 + }, 378 + /* No Jack */ 379 + .driver_data = (void *)SOF_SDW_TGL_HDMI, 380 + }, 381 + 382 + { 383 + .callback = sof_sdw_quirk_cb, 384 + .matches = { 385 + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc"), 376 386 DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "0B29"), 377 387 }, 378 388 .driver_data = (void *)(SOF_SDW_TGL_HDMI |
+6 -6
sound/soc/intel/common/soc-acpi-intel-adl-match.c
··· 675 675 .sof_tplg_filename = "sof-adl-rt1316-l2-mono-rt714-l3.tplg", 676 676 }, 677 677 { 678 - .link_mask = 0x3, /* rt1316 on link1 & rt714 on link0 */ 679 - .links = adl_sdw_rt1316_link1_rt714_link0, 680 - .drv_name = "sof_sdw", 681 - .sof_tplg_filename = "sof-adl-rt1316-l1-mono-rt714-l0.tplg", 682 - }, 683 - { 684 678 .link_mask = 0x7, /* rt714 on link0 & two rt1316s on link1 and link2 */ 685 679 .links = adl_sdw_rt1316_link12_rt714_link0, 686 680 .drv_name = "sof_sdw", 687 681 .sof_tplg_filename = "sof-adl-rt1316-l12-rt714-l0.tplg", 682 + }, 683 + { 684 + .link_mask = 0x3, /* rt1316 on link1 & rt714 on link0 */ 685 + .links = adl_sdw_rt1316_link1_rt714_link0, 686 + .drv_name = "sof_sdw", 687 + .sof_tplg_filename = "sof-adl-rt1316-l1-mono-rt714-l0.tplg", 688 688 }, 689 689 { 690 690 .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 };
+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 -2
sound/soc/sof/core.c
··· 486 486 snd_sof_ipc_free(sdev); 487 487 snd_sof_free_debug(sdev); 488 488 snd_sof_remove(sdev); 489 + sof_ops_free(sdev); 489 490 } 490 - 491 - sof_ops_free(sdev); 492 491 493 492 /* release firmware */ 494 493 snd_sof_fw_unload(sdev);
+1 -1
sound/soc/sof/intel/mtl.c
··· 463 463 /* step 3: wait for IPC DONE bit from ROM */ 464 464 ret = snd_sof_dsp_read_poll_timeout(sdev, HDA_DSP_BAR, chip->ipc_ack, status, 465 465 ((status & chip->ipc_ack_mask) == chip->ipc_ack_mask), 466 - HDA_DSP_REG_POLL_INTERVAL_US, MTL_DSP_PURGE_TIMEOUT_US); 466 + HDA_DSP_REG_POLL_INTERVAL_US, HDA_DSP_INIT_TIMEOUT_US); 467 467 if (ret < 0) { 468 468 if (hda->boot_iteration == HDA_FW_BOOT_ATTEMPTS) 469 469 dev_err(sdev->dev, "timeout waiting for purge IPC done\n");
-1
sound/soc/sof/intel/mtl.h
··· 62 62 #define MTL_DSP_IRQSTS_IPC BIT(0) 63 63 #define MTL_DSP_IRQSTS_SDW BIT(6) 64 64 65 - #define MTL_DSP_PURGE_TIMEOUT_US 20000000 /* 20s */ 66 65 #define MTL_DSP_REG_POLL_INTERVAL_US 10 /* 10 us */ 67 66 68 67 /* Memory windows */
+1 -1
sound/soc/sof/ipc4-topology.c
··· 231 231 232 232 ret = sof_update_ipc_object(scomp, available_fmt, 233 233 SOF_AUDIO_FMT_NUM_TOKENS, swidget->tuples, 234 - swidget->num_tuples, sizeof(available_fmt), 1); 234 + swidget->num_tuples, sizeof(*available_fmt), 1); 235 235 if (ret) { 236 236 dev_err(scomp->dev, "Failed to parse audio format token count\n"); 237 237 return ret;
+2 -1
sound/soc/sof/sof-audio.c
··· 212 212 sof_widget_free_unlocked(sdev, swidget); 213 213 use_count_decremented = true; 214 214 core_put: 215 - snd_sof_dsp_core_put(sdev, swidget->core); 215 + if (!use_count_decremented) 216 + snd_sof_dsp_core_put(sdev, swidget->core); 216 217 pipe_widget_free: 217 218 if (swidget->id != snd_soc_dapm_scheduler) 218 219 sof_widget_free_unlocked(sdev, swidget->spipe->pipe_widget);