ASoC: SOF: Intel: remove circular dependency on hda_sdw_process_wakeen()
authorPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Fri, 3 May 2024 13:52:20 +0000 (08:52 -0500)
committerMark Brown <broonie@kernel.org>
Sun, 5 May 2024 14:45:47 +0000 (23:45 +0900)
hda_sdw_process_wakeen() is used in hda-loader.c, but defined in
hda.c. This code split will create a circular dependency when hda.c is
moved to a different module. Rather than an invasive code change, this
patch follows the model used for sdw_check_wakeen_irq() with an
abstraction. For now all abstractions point to the same common
routine, which is arguably not great, but this also provides us with a
future-proof way of addressing platform-specific wake processing.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Link: https://lore.kernel.org/r/20240503135221.229202-7-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/intel/cnl.c
sound/soc/sof/intel/hda-dsp.c
sound/soc/sof/intel/hda.c
sound/soc/sof/intel/hda.h
sound/soc/sof/intel/icl.c
sound/soc/sof/intel/lnl.c
sound/soc/sof/intel/mtl.c
sound/soc/sof/intel/shim.h
sound/soc/sof/intel/tgl.c

index 460bc404ddb697b6d630d6e030367af3318a00bf..1936865b2937a1c4462c5d321dbc29d42f45b3e9 100644 (file)
@@ -473,6 +473,7 @@ const struct sof_intel_dsp_desc cnl_chip_info = {
        .enable_sdw_irq = hda_common_enable_sdw_irq,
        .check_sdw_irq  = hda_common_check_sdw_irq,
        .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
+       .sdw_process_wakeen = hda_sdw_process_wakeen_common,
        .check_ipc_irq  = hda_dsp_check_ipc_irq,
        .cl_init = cl_dsp_init,
        .power_down_dsp = hda_power_down_dsp,
@@ -508,6 +509,7 @@ const struct sof_intel_dsp_desc jsl_chip_info = {
        .enable_sdw_irq = hda_common_enable_sdw_irq,
        .check_sdw_irq  = hda_common_check_sdw_irq,
        .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
+       .sdw_process_wakeen = hda_sdw_process_wakeen_common,
        .check_ipc_irq  = hda_dsp_check_ipc_irq,
        .cl_init = cl_dsp_init,
        .power_down_dsp = hda_power_down_dsp,
index 974ac1cd8c6e663369db54f76e8b5dab9ea8ae13..780f4c33e67841291fe6cc90fa1b93f79747dda7 100644 (file)
@@ -1311,6 +1311,21 @@ int hda_sdw_check_lcount(struct snd_sof_dev *sdev)
 
        return 0;
 }
+
+void hda_sdw_process_wakeen(struct snd_sof_dev *sdev)
+{
+       u32 interface_mask = hda_get_interface_mask(sdev);
+       const struct sof_intel_dsp_desc *chip;
+
+       if (!(interface_mask & BIT(SOF_DAI_INTEL_ALH)))
+               return;
+
+       chip = get_chip_info(sdev->pdata);
+       if (chip && chip->sdw_process_wakeen)
+               chip->sdw_process_wakeen(sdev);
+}
+EXPORT_SYMBOL_NS(hda_sdw_process_wakeen, SND_SOC_SOF_INTEL_HDA_COMMON);
+
 #endif
 
 int hda_dsp_disable_interrupts(struct snd_sof_dev *sdev)
index ea7dcda90f2a9504448c6207f5179e45095df643..87b0375250a255e51badc22c922aac9c81b61b05 100644 (file)
@@ -331,7 +331,7 @@ static bool hda_sdw_check_wakeen_irq(struct snd_sof_dev *sdev)
        return false;
 }
 
-void hda_sdw_process_wakeen(struct snd_sof_dev *sdev)
+void hda_sdw_process_wakeen_common(struct snd_sof_dev *sdev)
 {
        u32 interface_mask = hda_get_interface_mask(sdev);
        struct sof_intel_hda_dev *hdev;
@@ -345,6 +345,7 @@ void hda_sdw_process_wakeen(struct snd_sof_dev *sdev)
 
        sdw_intel_process_wakeen_event(hdev->sdw);
 }
+EXPORT_SYMBOL_NS(hda_sdw_process_wakeen_common, SND_SOC_SOF_INTEL_HDA_COMMON);
 
 #else /* IS_ENABLED(CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE) */
 static inline int hda_sdw_acpi_scan(struct snd_sof_dev *sdev)
index 809a1be0d388ad410b0ec926dcdacdc820769f9d..ef78c9b5c250393eca030f36fcdd07892cbb6548 100644 (file)
@@ -815,6 +815,7 @@ int hda_sdw_startup(struct snd_sof_dev *sdev);
 void hda_common_enable_sdw_irq(struct snd_sof_dev *sdev, bool enable);
 void hda_sdw_int_enable(struct snd_sof_dev *sdev, bool enable);
 bool hda_sdw_check_wakeen_irq_common(struct snd_sof_dev *sdev);
+void hda_sdw_process_wakeen_common(struct snd_sof_dev *sdev);
 void hda_sdw_process_wakeen(struct snd_sof_dev *sdev);
 bool hda_common_check_sdw_irq(struct snd_sof_dev *sdev);
 
@@ -853,6 +854,10 @@ static inline bool hda_sdw_check_wakeen_irq_common(struct snd_sof_dev *sdev)
        return false;
 }
 
+static inline void hda_sdw_process_wakeen_common(struct snd_sof_dev *sdev)
+{
+}
+
 static inline void hda_sdw_process_wakeen(struct snd_sof_dev *sdev)
 {
 }
index 115866225e0539ecfc264c0516bb9659e4489a6f..9b916eb4fc21ea6dcd9a39bb00281ad5f6487ce3 100644 (file)
@@ -187,6 +187,7 @@ const struct sof_intel_dsp_desc icl_chip_info = {
        .enable_sdw_irq = hda_common_enable_sdw_irq,
        .check_sdw_irq  = hda_common_check_sdw_irq,
        .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
+       .sdw_process_wakeen = hda_sdw_process_wakeen_common,
        .check_ipc_irq  = hda_dsp_check_ipc_irq,
        .cl_init = cl_dsp_init,
        .power_down_dsp = hda_power_down_dsp,
index ca0cb91d2b2c3b74becd0c46bb93e9fdba22c257..a7446be36627f879469ebfa4428bdfe5ebb7381d 100644 (file)
@@ -238,6 +238,7 @@ const struct sof_intel_dsp_desc lnl_chip_info = {
        .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,
        .check_ipc_irq = mtl_dsp_check_ipc_irq,
        .cl_init = mtl_dsp_cl_init,
        .power_down_dsp = mtl_power_down_dsp,
index 13f780f33c22324e11ddd05c9594bcd05a5c882b..b9fc123be75df89bd7c8bc5ec11de308aa096cdf 100644 (file)
@@ -779,6 +779,7 @@ const struct sof_intel_dsp_desc mtl_chip_info = {
        .enable_sdw_irq = mtl_enable_sdw_irq,
        .check_sdw_irq = mtl_dsp_check_sdw_irq,
        .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
+       .sdw_process_wakeen = hda_sdw_process_wakeen_common,
        .check_ipc_irq = mtl_dsp_check_ipc_irq,
        .cl_init = mtl_dsp_cl_init,
        .power_down_dsp = mtl_power_down_dsp,
@@ -806,6 +807,7 @@ const struct sof_intel_dsp_desc arl_s_chip_info = {
        .enable_sdw_irq = mtl_enable_sdw_irq,
        .check_sdw_irq = mtl_dsp_check_sdw_irq,
        .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
+       .sdw_process_wakeen = hda_sdw_process_wakeen_common,
        .check_ipc_irq = mtl_dsp_check_ipc_irq,
        .cl_init = mtl_dsp_cl_init,
        .power_down_dsp = mtl_power_down_dsp,
index 18ce3d33fa803937a1a9c422006d062c22e41dcf..448ec54a6aa940d7e08eaceeb0c9ad67c737298b 100644 (file)
@@ -190,6 +190,7 @@ struct sof_intel_dsp_desc {
        void (*enable_sdw_irq)(struct snd_sof_dev *sdev, bool enable);
        bool (*check_sdw_irq)(struct snd_sof_dev *sdev);
        bool (*check_sdw_wakeen_irq)(struct snd_sof_dev *sdev);
+       void (*sdw_process_wakeen)(struct snd_sof_dev *sdev);
        bool (*check_ipc_irq)(struct snd_sof_dev *sdev);
        int (*power_down_dsp)(struct snd_sof_dev *sdev);
        int (*disable_interrupts)(struct snd_sof_dev *sdev);
index 6acc65923834261544f64c5cf75c48c3f0d5a747..062327d4f068ffdbaee93db154da73331d9f511c 100644 (file)
@@ -156,6 +156,7 @@ const struct sof_intel_dsp_desc tgl_chip_info = {
        .enable_sdw_irq = hda_common_enable_sdw_irq,
        .check_sdw_irq  = hda_common_check_sdw_irq,
        .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
+       .sdw_process_wakeen = hda_sdw_process_wakeen_common,
        .check_ipc_irq  = hda_dsp_check_ipc_irq,
        .cl_init = cl_dsp_init,
        .power_down_dsp = hda_power_down_dsp,
@@ -184,6 +185,7 @@ const struct sof_intel_dsp_desc tglh_chip_info = {
        .enable_sdw_irq = hda_common_enable_sdw_irq,
        .check_sdw_irq  = hda_common_check_sdw_irq,
        .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
+       .sdw_process_wakeen = hda_sdw_process_wakeen_common,
        .check_ipc_irq  = hda_dsp_check_ipc_irq,
        .cl_init = cl_dsp_init,
        .power_down_dsp = hda_power_down_dsp,
@@ -212,6 +214,7 @@ const struct sof_intel_dsp_desc ehl_chip_info = {
        .enable_sdw_irq = hda_common_enable_sdw_irq,
        .check_sdw_irq  = hda_common_check_sdw_irq,
        .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
+       .sdw_process_wakeen = hda_sdw_process_wakeen_common,
        .check_ipc_irq  = hda_dsp_check_ipc_irq,
        .cl_init = cl_dsp_init,
        .power_down_dsp = hda_power_down_dsp,
@@ -240,6 +243,7 @@ const struct sof_intel_dsp_desc adls_chip_info = {
        .enable_sdw_irq = hda_common_enable_sdw_irq,
        .check_sdw_irq  = hda_common_check_sdw_irq,
        .check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
+       .sdw_process_wakeen = hda_sdw_process_wakeen_common,
        .check_ipc_irq  = hda_dsp_check_ipc_irq,
        .cl_init = cl_dsp_init,
        .power_down_dsp = hda_power_down_dsp,