mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 22:02:02 +00:00
ASoC: SOF: Intel: start SoundWire links earlier for LNL+ devices
The SoundWire integration is different from previous platforms, with no dependencies on the DSP enablement. We can start the SoundWire links in the probe instead of waiting for the post_fw_run stage. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Link: https://msgid.link/r/20240213101247.28887-11-peter.ujfalusi@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
743eb6c68d
commit
67bde2e8c0
3 changed files with 36 additions and 1 deletions
|
@ -748,6 +748,7 @@ static int hda_suspend(struct snd_sof_dev *sdev, bool runtime_suspend)
|
|||
|
||||
static int hda_resume(struct snd_sof_dev *sdev, bool runtime_resume)
|
||||
{
|
||||
const struct sof_intel_dsp_desc *chip;
|
||||
int ret;
|
||||
|
||||
/* display codec must be powered before link reset */
|
||||
|
@ -780,6 +781,10 @@ static int hda_resume(struct snd_sof_dev *sdev, bool runtime_resume)
|
|||
hda_dsp_ctrl_ppcap_int_enable(sdev, true);
|
||||
}
|
||||
|
||||
chip = get_chip_info(sdev->pdata);
|
||||
if (chip && chip->hw_ip_version >= SOF_INTEL_ACE_2_0)
|
||||
hda_sdw_int_enable(sdev, true);
|
||||
|
||||
cleanup:
|
||||
/* display codec can powered off after controller init */
|
||||
hda_codec_i915_display_power(sdev, false);
|
||||
|
|
|
@ -1231,6 +1231,7 @@ int hda_dsp_probe(struct snd_sof_dev *sdev)
|
|||
{
|
||||
struct pci_dev *pci = to_pci_dev(sdev->dev);
|
||||
struct sof_intel_hda_dev *hdev = sdev->pdata->hw_pdata;
|
||||
const struct sof_intel_dsp_desc *chip;
|
||||
int ret = 0;
|
||||
|
||||
hdev->dmic_dev = platform_device_register_data(sdev->dev, "dmic-codec",
|
||||
|
@ -1344,12 +1345,28 @@ int hda_dsp_probe(struct snd_sof_dev *sdev)
|
|||
INIT_DELAYED_WORK(&hdev->d0i3_work, hda_dsp_d0i3_work);
|
||||
}
|
||||
|
||||
chip = get_chip_info(sdev->pdata);
|
||||
if (chip && chip->hw_ip_version >= SOF_INTEL_ACE_2_0) {
|
||||
ret = hda_sdw_startup(sdev);
|
||||
if (ret < 0) {
|
||||
dev_err(sdev->dev, "could not startup SoundWire links\n");
|
||||
goto disable_pp_cap;
|
||||
}
|
||||
|
||||
hda_sdw_int_enable(sdev, true);
|
||||
}
|
||||
|
||||
init_waitqueue_head(&hdev->waitq);
|
||||
|
||||
hdev->nhlt = intel_nhlt_init(sdev->dev);
|
||||
|
||||
return 0;
|
||||
|
||||
disable_pp_cap:
|
||||
if (!sdev->dspless_mode_selected) {
|
||||
hda_dsp_ctrl_ppcap_int_enable(sdev, false);
|
||||
hda_dsp_ctrl_ppcap_enable(sdev, false);
|
||||
}
|
||||
free_ipc_irq:
|
||||
free_irq(sdev->ipc_irq, sdev);
|
||||
free_irq_vector:
|
||||
|
|
|
@ -77,6 +77,19 @@ static int lnl_hda_dsp_runtime_resume(struct snd_sof_dev *sdev)
|
|||
return hdac_bus_offload_dmic_ssp(sof_to_bus(sdev));
|
||||
}
|
||||
|
||||
static int lnl_dsp_post_fw_run(struct snd_sof_dev *sdev)
|
||||
{
|
||||
if (sdev->first_boot) {
|
||||
struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata;
|
||||
|
||||
/* Check if IMR boot is usable */
|
||||
if (!sof_debug_check_flag(SOF_DBG_IGNORE_D3_PERSISTENT))
|
||||
hda->imrboot_supported = true;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sof_lnl_ops_init(struct snd_sof_dev *sdev)
|
||||
{
|
||||
struct sof_ipc4_fw_data *ipc4_data;
|
||||
|
@ -106,7 +119,7 @@ int sof_lnl_ops_init(struct snd_sof_dev *sdev)
|
|||
|
||||
/* pre/post fw run */
|
||||
sof_lnl_ops.pre_fw_run = mtl_dsp_pre_fw_run;
|
||||
sof_lnl_ops.post_fw_run = mtl_dsp_post_fw_run;
|
||||
sof_lnl_ops.post_fw_run = lnl_dsp_post_fw_run;
|
||||
|
||||
/* parse platform specific extended manifest */
|
||||
sof_lnl_ops.parse_platform_ext_manifest = NULL;
|
||||
|
|
Loading…
Reference in a new issue