mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 10:49:33 +00:00
ASoC: SOF: misc updates for 6.7
Merge series from Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>: New PCI ID, one fix for a delayed IRQ thread causing issues, one update for debug and one follow-up cleanup for the .remove callback.
This commit is contained in:
commit
85045a9e44
15 changed files with 52 additions and 30 deletions
|
@ -575,7 +575,7 @@ int amd_sof_acp_probe(struct snd_sof_dev *sdev)
|
|||
}
|
||||
EXPORT_SYMBOL_NS(amd_sof_acp_probe, SND_SOC_SOF_AMD_COMMON);
|
||||
|
||||
int amd_sof_acp_remove(struct snd_sof_dev *sdev)
|
||||
void amd_sof_acp_remove(struct snd_sof_dev *sdev)
|
||||
{
|
||||
struct acp_dev_data *adata = sdev->pdata->hw_pdata;
|
||||
|
||||
|
@ -588,7 +588,7 @@ int amd_sof_acp_remove(struct snd_sof_dev *sdev)
|
|||
if (adata->dmic_dev)
|
||||
platform_device_unregister(adata->dmic_dev);
|
||||
|
||||
return acp_reset(sdev);
|
||||
acp_reset(sdev);
|
||||
}
|
||||
EXPORT_SYMBOL_NS(amd_sof_acp_remove, SND_SOC_SOF_AMD_COMMON);
|
||||
|
||||
|
|
|
@ -220,7 +220,7 @@ int configure_and_run_sha_dma(struct acp_dev_data *adata, void *image_addr,
|
|||
|
||||
/* ACP device probe/remove */
|
||||
int amd_sof_acp_probe(struct snd_sof_dev *sdev);
|
||||
int amd_sof_acp_remove(struct snd_sof_dev *sdev);
|
||||
void amd_sof_acp_remove(struct snd_sof_dev *sdev);
|
||||
|
||||
/* DSP Loader callbacks */
|
||||
int acp_sof_dsp_run(struct snd_sof_dev *sdev);
|
||||
|
|
|
@ -338,7 +338,7 @@ static int imx8_probe(struct snd_sof_dev *sdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int imx8_remove(struct snd_sof_dev *sdev)
|
||||
static void imx8_remove(struct snd_sof_dev *sdev)
|
||||
{
|
||||
struct imx8_priv *priv = sdev->pdata->hw_pdata;
|
||||
int i;
|
||||
|
@ -350,8 +350,6 @@ static int imx8_remove(struct snd_sof_dev *sdev)
|
|||
device_link_del(priv->link[i]);
|
||||
dev_pm_domain_detach(priv->pd_dev[i], false);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* on i.MX8 there is 1 to 1 match between type and BAR idx */
|
||||
|
|
|
@ -269,14 +269,12 @@ static int imx8m_probe(struct snd_sof_dev *sdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int imx8m_remove(struct snd_sof_dev *sdev)
|
||||
static void imx8m_remove(struct snd_sof_dev *sdev)
|
||||
{
|
||||
struct imx8m_priv *priv = sdev->pdata->hw_pdata;
|
||||
|
||||
imx8_disable_clocks(sdev, priv->clks);
|
||||
platform_device_unregister(priv->ipc_dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* on i.MX8 there is 1 to 1 match between type and BAR idx */
|
||||
|
|
|
@ -278,14 +278,12 @@ static int imx8ulp_probe(struct snd_sof_dev *sdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int imx8ulp_remove(struct snd_sof_dev *sdev)
|
||||
static void imx8ulp_remove(struct snd_sof_dev *sdev)
|
||||
{
|
||||
struct imx8ulp_priv *priv = sdev->pdata->hw_pdata;
|
||||
|
||||
imx8_disable_clocks(sdev, priv->clks);
|
||||
platform_device_unregister(priv->ipc_dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* on i.MX8 there is 1 to 1 match between type and BAR idx */
|
||||
|
|
|
@ -100,11 +100,9 @@ static int byt_resume(struct snd_sof_dev *sdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int byt_remove(struct snd_sof_dev *sdev)
|
||||
static void byt_remove(struct snd_sof_dev *sdev)
|
||||
{
|
||||
byt_reset_dsp_disable_int(sdev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int byt_acpi_probe(struct snd_sof_dev *sdev)
|
||||
|
|
|
@ -699,6 +699,9 @@ static int hda_suspend(struct snd_sof_dev *sdev, bool runtime_suspend)
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* make sure that no irq handler is pending before shutdown */
|
||||
synchronize_irq(sdev->ipc_irq);
|
||||
|
||||
hda_codec_jack_wake_enable(sdev, runtime_suspend);
|
||||
|
||||
/* power down all hda links */
|
||||
|
|
|
@ -1317,7 +1317,7 @@ int hda_dsp_probe(struct snd_sof_dev *sdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
int hda_dsp_remove(struct snd_sof_dev *sdev)
|
||||
void hda_dsp_remove(struct snd_sof_dev *sdev)
|
||||
{
|
||||
struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata;
|
||||
const struct sof_intel_dsp_desc *chip = hda->desc;
|
||||
|
@ -1377,8 +1377,6 @@ int hda_dsp_remove(struct snd_sof_dev *sdev)
|
|||
sof_hda_bus_exit(sdev);
|
||||
|
||||
hda_codec_i915_exit(sdev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hda_power_down_dsp(struct snd_sof_dev *sdev)
|
||||
|
|
|
@ -577,7 +577,7 @@ struct sof_intel_hda_stream {
|
|||
* DSP Core services.
|
||||
*/
|
||||
int hda_dsp_probe(struct snd_sof_dev *sdev);
|
||||
int hda_dsp_remove(struct snd_sof_dev *sdev);
|
||||
void hda_dsp_remove(struct snd_sof_dev *sdev);
|
||||
int hda_dsp_core_power_up(struct snd_sof_dev *sdev, unsigned int core_mask);
|
||||
int hda_dsp_core_run(struct snd_sof_dev *sdev, unsigned int core_mask);
|
||||
int hda_dsp_enable_core(struct snd_sof_dev *sdev, unsigned int core_mask);
|
||||
|
|
|
@ -50,9 +50,40 @@ static const struct sof_dev_desc mtl_desc = {
|
|||
.ops_free = hda_ops_free,
|
||||
};
|
||||
|
||||
static const struct sof_dev_desc arl_desc = {
|
||||
.use_acpi_target_states = true,
|
||||
.machines = snd_soc_acpi_intel_arl_machines,
|
||||
.alt_machines = snd_soc_acpi_intel_arl_sdw_machines,
|
||||
.resindex_lpe_base = 0,
|
||||
.resindex_pcicfg_base = -1,
|
||||
.resindex_imr_base = -1,
|
||||
.irqindex_host_ipc = -1,
|
||||
.chip_info = &mtl_chip_info,
|
||||
.ipc_supported_mask = BIT(SOF_IPC_TYPE_4),
|
||||
.ipc_default = SOF_IPC_TYPE_4,
|
||||
.dspless_mode_supported = true, /* Only supported for HDaudio */
|
||||
.default_fw_path = {
|
||||
[SOF_IPC_TYPE_4] = "intel/sof-ipc4/arl",
|
||||
},
|
||||
.default_lib_path = {
|
||||
[SOF_IPC_TYPE_4] = "intel/sof-ipc4-lib/arl",
|
||||
},
|
||||
.default_tplg_path = {
|
||||
[SOF_IPC_TYPE_4] = "intel/sof-ace-tplg",
|
||||
},
|
||||
.default_fw_filename = {
|
||||
[SOF_IPC_TYPE_4] = "sof-arl.ri",
|
||||
},
|
||||
.nocodec_tplg_filename = "sof-arl-nocodec.tplg",
|
||||
.ops = &sof_mtl_ops,
|
||||
.ops_init = sof_mtl_ops_init,
|
||||
.ops_free = hda_ops_free,
|
||||
};
|
||||
|
||||
/* PCI IDs */
|
||||
static const struct pci_device_id sof_pci_ids[] = {
|
||||
{ PCI_DEVICE_DATA(INTEL, HDA_MTL, &mtl_desc) },
|
||||
{ PCI_DEVICE_DATA(INTEL, HDA_ARL_S, &arl_desc) },
|
||||
{ 0, }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, sof_pci_ids);
|
||||
|
|
|
@ -666,6 +666,10 @@ static void sof_ipc4_rx_msg(struct snd_sof_dev *sdev)
|
|||
sof_ipc4_log_header(sdev->dev, "ipc rx done ", ipc4_msg, true);
|
||||
|
||||
if (data_size) {
|
||||
if (sof_debug_check_flag(SOF_DBG_DUMP_IPC_MESSAGE_PAYLOAD))
|
||||
sof_ipc4_dump_payload(sdev, ipc4_msg->data_ptr,
|
||||
ipc4_msg->data_size);
|
||||
|
||||
kfree(ipc4_msg->data_ptr);
|
||||
ipc4_msg->data_ptr = NULL;
|
||||
ipc4_msg->data_size = 0;
|
||||
|
|
|
@ -391,7 +391,7 @@ static int mt8186_dsp_probe(struct snd_sof_dev *sdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int mt8186_dsp_remove(struct snd_sof_dev *sdev)
|
||||
static void mt8186_dsp_remove(struct snd_sof_dev *sdev)
|
||||
{
|
||||
struct adsp_priv *priv = sdev->pdata->hw_pdata;
|
||||
|
||||
|
@ -399,8 +399,6 @@ static int mt8186_dsp_remove(struct snd_sof_dev *sdev)
|
|||
mt8186_sof_hifixdsp_shutdown(sdev);
|
||||
adsp_sram_power_off(sdev);
|
||||
mt8186_adsp_clock_off(sdev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mt8186_dsp_shutdown(struct snd_sof_dev *sdev)
|
||||
|
|
|
@ -388,7 +388,7 @@ static int mt8195_dsp_shutdown(struct snd_sof_dev *sdev)
|
|||
return snd_sof_suspend(sdev->dev);
|
||||
}
|
||||
|
||||
static int mt8195_dsp_remove(struct snd_sof_dev *sdev)
|
||||
static void mt8195_dsp_remove(struct snd_sof_dev *sdev)
|
||||
{
|
||||
struct platform_device *pdev = container_of(sdev->dev, struct platform_device, dev);
|
||||
struct adsp_priv *priv = sdev->pdata->hw_pdata;
|
||||
|
@ -396,8 +396,6 @@ static int mt8195_dsp_remove(struct snd_sof_dev *sdev)
|
|||
platform_device_unregister(priv->ipc_dev);
|
||||
adsp_sram_power_on(&pdev->dev, false);
|
||||
adsp_clock_off(sdev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mt8195_dsp_suspend(struct snd_sof_dev *sdev, u32 target_state)
|
||||
|
|
|
@ -43,12 +43,10 @@ static inline int snd_sof_probe(struct snd_sof_dev *sdev)
|
|||
return sof_ops(sdev)->probe(sdev);
|
||||
}
|
||||
|
||||
static inline int snd_sof_remove(struct snd_sof_dev *sdev)
|
||||
static inline void snd_sof_remove(struct snd_sof_dev *sdev)
|
||||
{
|
||||
if (sof_ops(sdev)->remove)
|
||||
return sof_ops(sdev)->remove(sdev);
|
||||
|
||||
return 0;
|
||||
sof_ops(sdev)->remove(sdev);
|
||||
}
|
||||
|
||||
static inline int snd_sof_shutdown(struct snd_sof_dev *sdev)
|
||||
|
|
|
@ -166,7 +166,7 @@ struct snd_sof_dsp_ops {
|
|||
|
||||
/* probe/remove/shutdown */
|
||||
int (*probe)(struct snd_sof_dev *sof_dev); /* mandatory */
|
||||
int (*remove)(struct snd_sof_dev *sof_dev); /* optional */
|
||||
void (*remove)(struct snd_sof_dev *sof_dev); /* optional */
|
||||
int (*shutdown)(struct snd_sof_dev *sof_dev); /* optional */
|
||||
|
||||
/* DSP core boot / reset */
|
||||
|
|
Loading…
Reference in a new issue