ASoC: SOF: Intel: hda: start splitting the probe
authorPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Mon, 9 Oct 2023 11:54:27 +0000 (13:54 +0200)
committerTakashi Iwai <tiwai@suse.de>
Thu, 19 Oct 2023 12:54:33 +0000 (14:54 +0200)
This patch moves the initial parts of the probe to the probe_early()
callback, which provides a much faster decision on whether the SOF
driver shall deal with a specific platform or yield to other Intel
drivers.

This is a limited functionality change, the bigger change is to move
the i915/Xe initialization to the probe_early().

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Acked-by: Mark Brown <broonie@kernel.org>
Reviewed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Acked-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://lore.kernel.org/r/20231009115437.99976-4-maarten.lankhorst@linux.intel.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/soc/sof/intel/hda-common-ops.c
sound/soc/sof/intel/hda.c
sound/soc/sof/intel/hda.h

index 8e1cd0babd32c50e36741dc0e20556e6c0bdee3e..1cc18fb2b75bbfac7cee1f95f9c0716a67f8f93e 100644 (file)
@@ -16,6 +16,7 @@
 
 struct snd_sof_dsp_ops sof_hda_common_ops = {
        /* probe/remove/shutdown */
+       .probe_early    = hda_dsp_probe_early,
        .probe          = hda_dsp_probe,
        .remove         = hda_dsp_remove,
 
index 15e6779efaa3bcc9e0dc16e6a92271930eba7a0f..86a2571488bcce42cd3b27b02bd4ca6c2c244488 100644 (file)
@@ -1118,11 +1118,10 @@ static irqreturn_t hda_dsp_interrupt_thread(int irq, void *context)
        return IRQ_HANDLED;
 }
 
-int hda_dsp_probe(struct snd_sof_dev *sdev)
+int hda_dsp_probe_early(struct snd_sof_dev *sdev)
 {
        struct pci_dev *pci = to_pci_dev(sdev->dev);
        struct sof_intel_hda_dev *hdev;
-       struct hdac_bus *bus;
        const struct sof_intel_dsp_desc *chip;
        int ret = 0;
 
@@ -1162,6 +1161,17 @@ int hda_dsp_probe(struct snd_sof_dev *sdev)
        sdev->pdata->hw_pdata = hdev;
        hdev->desc = chip;
 
+err:
+       return ret;
+}
+
+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;
+       struct hdac_bus *bus;
+       int ret = 0;
+
        hdev->dmic_dev = platform_device_register_data(sdev->dev, "dmic-codec",
                                                       PLATFORM_DEVID_NONE,
                                                       NULL, 0);
@@ -1299,7 +1309,7 @@ hdac_bus_unmap:
        platform_device_unregister(hdev->dmic_dev);
        iounmap(bus->remap_addr);
        hda_codec_i915_exit(sdev);
-err:
+
        return ret;
 }
 
index 5c517ec57d4a2033cc5c8a116bbc86f928080ef7..e13cdc933ca6b7a4000325850a89ab10ff22f169 100644 (file)
@@ -573,6 +573,7 @@ struct sof_intel_hda_stream {
 /*
  * DSP Core services.
  */
+int hda_dsp_probe_early(struct snd_sof_dev *sdev);
 int hda_dsp_probe(struct snd_sof_dev *sdev);
 int hda_dsp_remove(struct snd_sof_dev *sdev);
 int hda_dsp_core_power_up(struct snd_sof_dev *sdev, unsigned int core_mask);