mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-13 14:14:37 +00:00
ASoC: Merge up fixes
For the benefit of CI
This commit is contained in:
commit
8111310849
11 changed files with 35 additions and 19 deletions
|
@ -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, ®);
|
ret = regmap_read(max98363->regmap, MAX98363_R21FF_REV_ID, ®);
|
||||||
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)
|
||||||
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)
|
||||||
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
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// 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);
|
||||||
|
|
||||||
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");
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* 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[] = {
|
||||||
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)
|
||||||
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 = {
|
||||||
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
|
||||||
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,9 +109,8 @@ 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);
|
||||||
struct sof_intel_hda_stream *hda_stream;
|
struct sof_intel_hda_stream *hda_stream;
|
||||||
|
|
|
@ -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,
|
||||||
|
|
||||||
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,
|
||||||
|
|
||||||
*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,
|
||||||
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
|
||||||
|
|
Loading…
Reference in a new issue