Commit 81113108 authored by Mark Brown's avatar Mark Brown

ASoC: Merge up fixes

For the benefit of CI
parents 59146c3c e6475ce2
...@@ -174,10 +174,10 @@ static int max98363_io_init(struct sdw_slave *slave) ...@@ -174,10 +174,10 @@ static int max98363_io_init(struct sdw_slave *slave)
pm_runtime_get_noresume(dev); pm_runtime_get_noresume(dev);
ret = regmap_read(max98363->regmap, MAX98363_R21FF_REV_ID, &reg); ret = regmap_read(max98363->regmap, MAX98363_R21FF_REV_ID, &reg);
if (!ret) { if (!ret)
dev_info(dev, "Revision ID: %X\n", reg); dev_info(dev, "Revision ID: %X\n", reg);
return ret; else
} goto out;
if (max98363->first_hw_init) { if (max98363->first_hw_init) {
regcache_cache_bypass(max98363->regmap, false); regcache_cache_bypass(max98363->regmap, false);
...@@ -187,10 +187,11 @@ static int max98363_io_init(struct sdw_slave *slave) ...@@ -187,10 +187,11 @@ static int max98363_io_init(struct sdw_slave *slave)
max98363->first_hw_init = true; max98363->first_hw_init = true;
max98363->hw_init = true; max98363->hw_init = true;
out:
pm_runtime_mark_last_busy(dev); pm_runtime_mark_last_busy(dev);
pm_runtime_put_autosuspend(dev); pm_runtime_put_autosuspend(dev);
return 0; return ret;
} }
#define MAX98363_RATES SNDRV_PCM_RATE_8000_192000 #define MAX98363_RATES SNDRV_PCM_RATE_8000_192000
......
...@@ -4472,6 +4472,8 @@ static void rt5665_remove(struct snd_soc_component *component) ...@@ -4472,6 +4472,8 @@ static void rt5665_remove(struct snd_soc_component *component)
struct rt5665_priv *rt5665 = snd_soc_component_get_drvdata(component); struct rt5665_priv *rt5665 = snd_soc_component_get_drvdata(component);
regmap_write(rt5665->regmap, RT5665_RESET, 0); regmap_write(rt5665->regmap, RT5665_RESET, 0);
regulator_bulk_disable(ARRAY_SIZE(rt5665->supplies), rt5665->supplies);
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM
......
// SPDX-License-Identifier: GPL-2.0 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
// Copyright 2018 NXP // Copyright 2018 NXP
#include <linux/bitfield.h> #include <linux/bitfield.h>
...@@ -1318,4 +1318,4 @@ module_platform_driver(fsl_micfil_driver); ...@@ -1318,4 +1318,4 @@ module_platform_driver(fsl_micfil_driver);
MODULE_AUTHOR("Cosmin-Gabriel Samoila <cosmin.samoila@nxp.com>"); MODULE_AUTHOR("Cosmin-Gabriel Samoila <cosmin.samoila@nxp.com>");
MODULE_DESCRIPTION("NXP PDM Microphone Interface (MICFIL) driver"); MODULE_DESCRIPTION("NXP PDM Microphone Interface (MICFIL) driver");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("Dual BSD/GPL");
/* SPDX-License-Identifier: GPL-2.0 */ /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
/* /*
* PDM Microphone Interface for the NXP i.MX SoC * PDM Microphone Interface for the NXP i.MX SoC
* Copyright 2018 NXP * Copyright 2018 NXP
......
...@@ -488,7 +488,7 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = { ...@@ -488,7 +488,7 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = {
DMI_MATCH(DMI_SYS_VENDOR, "Intel Corporation"), DMI_MATCH(DMI_SYS_VENDOR, "Intel Corporation"),
DMI_MATCH(DMI_PRODUCT_NAME, "Lunar Lake Client Platform"), DMI_MATCH(DMI_PRODUCT_NAME, "Lunar Lake Client Platform"),
}, },
.driver_data = (void *)(RT711_JD2_100K), .driver_data = (void *)(RT711_JD2),
}, },
{} {}
}; };
......
...@@ -99,9 +99,9 @@ static int cs42l42_rtd_init(struct snd_soc_pcm_runtime *rtd) ...@@ -99,9 +99,9 @@ static int cs42l42_rtd_init(struct snd_soc_pcm_runtime *rtd)
jack = &ctx->sdw_headset; jack = &ctx->sdw_headset;
snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_PLAYPAUSE); snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_PLAYPAUSE);
snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOICECOMMAND); snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOLUMEUP);
snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEUP); snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEDOWN);
snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOLUMEDOWN); snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOICECOMMAND);
ret = snd_soc_component_set_jack(component, jack, NULL); ret = snd_soc_component_set_jack(component, jack, NULL);
......
...@@ -524,6 +524,7 @@ static const struct hda_dai_widget_dma_ops hda_ipc4_chain_dma_ops = { ...@@ -524,6 +524,7 @@ static const struct hda_dai_widget_dma_ops hda_ipc4_chain_dma_ops = {
static int hda_ipc3_post_trigger(struct snd_sof_dev *sdev, struct snd_soc_dai *cpu_dai, static int hda_ipc3_post_trigger(struct snd_sof_dev *sdev, struct snd_soc_dai *cpu_dai,
struct snd_pcm_substream *substream, int cmd) struct snd_pcm_substream *substream, int cmd)
{ {
struct hdac_ext_stream *hext_stream = hda_get_hext_stream(sdev, cpu_dai, substream);
struct snd_soc_dapm_widget *w = snd_soc_dai_get_widget(cpu_dai, substream->stream); struct snd_soc_dapm_widget *w = snd_soc_dai_get_widget(cpu_dai, substream->stream);
switch (cmd) { switch (cmd) {
...@@ -531,9 +532,17 @@ static int hda_ipc3_post_trigger(struct snd_sof_dev *sdev, struct snd_soc_dai *c ...@@ -531,9 +532,17 @@ static int hda_ipc3_post_trigger(struct snd_sof_dev *sdev, struct snd_soc_dai *c
case SNDRV_PCM_TRIGGER_STOP: case SNDRV_PCM_TRIGGER_STOP:
{ {
struct snd_sof_dai_config_data data = { 0 }; struct snd_sof_dai_config_data data = { 0 };
int ret;
data.dai_data = DMA_CHAN_INVALID; data.dai_data = DMA_CHAN_INVALID;
return hda_dai_config(w, SOF_DAI_CONFIG_FLAGS_HW_FREE, &data); ret = hda_dai_config(w, SOF_DAI_CONFIG_FLAGS_HW_FREE, &data);
if (ret < 0)
return ret;
if (cmd == SNDRV_PCM_TRIGGER_STOP)
return hda_link_dma_cleanup(substream, hext_stream, cpu_dai);
break;
} }
case SNDRV_PCM_TRIGGER_PAUSE_PUSH: case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
return hda_dai_config(w, SOF_DAI_CONFIG_FLAGS_PAUSE, NULL); return hda_dai_config(w, SOF_DAI_CONFIG_FLAGS_PAUSE, NULL);
......
...@@ -109,8 +109,7 @@ hda_dai_get_ops(struct snd_pcm_substream *substream, struct snd_soc_dai *cpu_dai ...@@ -109,8 +109,7 @@ hda_dai_get_ops(struct snd_pcm_substream *substream, struct snd_soc_dai *cpu_dai
return sdai->platform_private; return sdai->platform_private;
} }
static int hda_link_dma_cleanup(struct snd_pcm_substream *substream, int hda_link_dma_cleanup(struct snd_pcm_substream *substream, struct hdac_ext_stream *hext_stream,
struct hdac_ext_stream *hext_stream,
struct snd_soc_dai *cpu_dai) struct snd_soc_dai *cpu_dai)
{ {
const struct hda_dai_widget_dma_ops *ops = hda_dai_get_ops(substream, cpu_dai); const struct hda_dai_widget_dma_ops *ops = hda_dai_get_ops(substream, cpu_dai);
......
...@@ -984,5 +984,7 @@ const struct hda_dai_widget_dma_ops * ...@@ -984,5 +984,7 @@ const struct hda_dai_widget_dma_ops *
hda_select_dai_widget_ops(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget); hda_select_dai_widget_ops(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget);
int hda_dai_config(struct snd_soc_dapm_widget *w, unsigned int flags, int hda_dai_config(struct snd_soc_dapm_widget *w, unsigned int flags,
struct snd_sof_dai_config_data *data); struct snd_sof_dai_config_data *data);
int hda_link_dma_cleanup(struct snd_pcm_substream *substream, struct hdac_ext_stream *hext_stream,
struct snd_soc_dai *cpu_dai);
#endif #endif
...@@ -1001,7 +1001,7 @@ void sof_ipc3_do_rx_work(struct snd_sof_dev *sdev, struct sof_ipc_cmd_hdr *hdr, ...@@ -1001,7 +1001,7 @@ void sof_ipc3_do_rx_work(struct snd_sof_dev *sdev, struct sof_ipc_cmd_hdr *hdr,
ipc3_log_header(sdev->dev, "ipc rx", hdr->cmd); ipc3_log_header(sdev->dev, "ipc rx", hdr->cmd);
if (hdr->size < sizeof(hdr) || hdr->size > SOF_IPC_MSG_MAX_SIZE) { if (hdr->size < sizeof(*hdr) || hdr->size > SOF_IPC_MSG_MAX_SIZE) {
dev_err(sdev->dev, "The received message size is invalid: %u\n", dev_err(sdev->dev, "The received message size is invalid: %u\n",
hdr->size); hdr->size);
return; return;
......
...@@ -1731,6 +1731,12 @@ sof_ipc4_prepare_copier_module(struct snd_sof_widget *swidget, ...@@ -1731,6 +1731,12 @@ sof_ipc4_prepare_copier_module(struct snd_sof_widget *swidget,
*ipc_config_size = ipc_size; *ipc_config_size = ipc_size;
/* update pipeline memory usage */
sof_ipc4_update_resource_usage(sdev, swidget, &copier_data->base_config);
/* update pipeline memory usage */
sof_ipc4_update_resource_usage(sdev, swidget, &copier_data->base_config);
/* copy IPC data */ /* copy IPC data */
memcpy(*ipc_config_data, (void *)copier_data, sizeof(*copier_data)); memcpy(*ipc_config_data, (void *)copier_data, sizeof(*copier_data));
if (gtw_cfg_config_length) if (gtw_cfg_config_length)
...@@ -1743,9 +1749,6 @@ sof_ipc4_prepare_copier_module(struct snd_sof_widget *swidget, ...@@ -1743,9 +1749,6 @@ sof_ipc4_prepare_copier_module(struct snd_sof_widget *swidget,
gtw_cfg_config_length, gtw_cfg_config_length,
&ipc4_copier->dma_config_tlv, dma_config_tlv_size); &ipc4_copier->dma_config_tlv, dma_config_tlv_size);
/* update pipeline memory usage */
sof_ipc4_update_resource_usage(sdev, swidget, &copier_data->base_config);
/* /*
* Restore gateway config length now that IPC payload is prepared. This avoids * Restore gateway config length now that IPC payload is prepared. This avoids
* counting the DMA CONFIG TLV multiple times * counting the DMA CONFIG TLV multiple times
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment