]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
ASoC/SoundWire: Intel: lnl: enable interrupts after first power-up/before last power...
authorPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Mon, 7 Oct 2024 12:12:41 +0000 (20:12 +0800)
committerMark Brown <broonie@kernel.org>
Fri, 11 Oct 2024 11:06:57 +0000 (12:06 +0100)
The HDaudio mlink support makes it more logical to couple interrupt
enabling/disabling with power-up/down sequences.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Liam Girdwood <liam.r.girdwood@intel.com>
Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Acked-by: Vinod Koul <vkoul@kernel.org>
Link: https://patch.msgid.link/20241007121241.30914-3-yung-chuan.liao@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/soundwire/intel_ace2x.c
sound/soc/sof/intel/hda-dsp.c
sound/soc/sof/intel/hda.c
sound/soc/sof/intel/lnl.c

index fff312c6968dd37c06369b2bd0d49eba0b05f804..3084f0ac7159e303f3c68e1605054a23091eb26b 100644 (file)
@@ -175,6 +175,9 @@ static int intel_link_power_up(struct sdw_intel *sdw)
                                __func__, ret);
                        goto out;
                }
+
+               hdac_bus_eml_enable_interrupt_unlocked(sdw->link_res->hbus, true,
+                                                      AZX_REG_ML_LEPTR_ID_SDW, true);
        }
 
        *shim_mask |= BIT(link_id);
@@ -201,6 +204,10 @@ static int intel_link_power_down(struct sdw_intel *sdw)
 
        *shim_mask &= ~BIT(link_id);
 
+       if (!*shim_mask)
+               hdac_bus_eml_enable_interrupt_unlocked(sdw->link_res->hbus, true,
+                                                      AZX_REG_ML_LEPTR_ID_SDW, false);
+
        ret = hdac_bus_eml_sdw_power_down_unlocked(sdw->link_res->hbus, link_id);
        if (ret < 0) {
                dev_err(sdw->cdns.dev, "%s: hdac_bus_eml_sdw_power_down failed: %d\n",
index 4c88522d404847af936e2a8d5f35949d36e2881f..6028a80418bbcc66e17e3e0f3af89ae1db28523e 100644 (file)
@@ -858,7 +858,6 @@ skip_dsp:
 
 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 */
@@ -891,10 +890,6 @@ 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);
index 70fc08c8fc99e2cf74f8906dcc95cf03628b721a..e4cb4ffc7270486a6a1fb8e3ccd3cef3f9f1a8d2 100644 (file)
@@ -866,8 +866,6 @@ skip_dsp_setup:
                        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);
index 3d5a1f8b17e5cad2d9d6ebe5abc337bb91ea5c6d..e3c4b4a0d705f2dc50c5e1f88c2a6d6f0f922a3f 100644 (file)
@@ -192,16 +192,8 @@ static bool lnl_dsp_check_sdw_irq(struct snd_sof_dev *sdev)
        return hdac_bus_eml_check_interrupt(bus, true,  AZX_REG_ML_LEPTR_ID_SDW);
 }
 
-static void lnl_enable_sdw_irq(struct snd_sof_dev *sdev, bool enable)
-{
-       struct hdac_bus *bus = sof_to_bus(sdev);
-
-       hdac_bus_eml_enable_interrupt(bus, true,  AZX_REG_ML_LEPTR_ID_SDW, enable);
-}
-
 static int lnl_dsp_disable_interrupts(struct snd_sof_dev *sdev)
 {
-       lnl_enable_sdw_irq(sdev, false);
        mtl_disable_ipc_interrupts(sdev);
        return mtl_enable_interrupts(sdev, false);
 }
@@ -237,7 +229,6 @@ const struct sof_intel_dsp_desc lnl_chip_info = {
        .ssp_count = MTL_SSP_COUNT,
        .d0i3_offset = MTL_HDA_VS_D0I3C,
        .read_sdw_lcount =  hda_sdw_check_lcount_ext,
-       .enable_sdw_irq = lnl_enable_sdw_irq,
        .check_sdw_irq = lnl_dsp_check_sdw_irq,
        .check_sdw_wakeen_irq = lnl_sdw_check_wakeen_irq,
        .sdw_process_wakeen = hda_sdw_process_wakeen_common,
@@ -262,7 +253,6 @@ const struct sof_intel_dsp_desc ptl_chip_info = {
        .ssp_count = MTL_SSP_COUNT,
        .d0i3_offset = MTL_HDA_VS_D0I3C,
        .read_sdw_lcount =  hda_sdw_check_lcount_ext,
-       .enable_sdw_irq = lnl_enable_sdw_irq,
        .check_sdw_irq = lnl_dsp_check_sdw_irq,
        .check_sdw_wakeen_irq = lnl_sdw_check_wakeen_irq,
        .check_ipc_irq = mtl_dsp_check_ipc_irq,