lkml.org 
[lkml]   [2023]   [Aug]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH v3 8/9] ASoC: SOF: Intel: Move binding to display driver outside of deferred probe
    From


    On 8/7/23 04:00, Maarten Lankhorst wrote:
    > Now that we can use -EPROBE_DEFER, it's no longer required to spin off
    > the snd_hdac_i915_init into a workqueue.
    >
    > Use the -EPROBE_DEFER mechanism instead, which must be returned in the
    > probe function.

    I don't think this patch is aligned with the previous discussions. What
    we agreed on is that snd_hdac_i915_init() would be called from and not
    from the workqueue.

    But this patch also moves all codec initialization out of the workqueue.

    I think we need two callbacks for device-specific initilization, one
    that is called from the probe function and one from the workqueue,
    otherwise we'll have a structure that differs from the snd-hda-intel -
    which would be rather silly in terms of support/debug.

    I realize there's quite a bit of surgery involved, and most likely the
    SOF folks should provide this patch for you to build on.

    > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
    > ---
    > sound/soc/sof/core.c | 19 +++++++------------
    > sound/soc/sof/intel/hda-codec.c | 2 +-
    > 2 files changed, 8 insertions(+), 13 deletions(-)
    >
    > diff --git a/sound/soc/sof/core.c b/sound/soc/sof/core.c
    > index 30db685cc5f4..cd4d06d1800b 100644
    > --- a/sound/soc/sof/core.c
    > +++ b/sound/soc/sof/core.c
    > @@ -188,13 +188,6 @@ static int sof_probe_continue(struct snd_sof_dev *sdev)
    > struct snd_sof_pdata *plat_data = sdev->pdata;
    > int ret;
    >
    > - /* probe the DSP hardware */
    > - ret = snd_sof_probe(sdev);
    > - if (ret < 0) {
    > - dev_err(sdev->dev, "error: failed to probe DSP %d\n", ret);
    > - goto probe_err;
    > - }
    > -
    > sof_set_fw_state(sdev, SOF_FW_BOOT_PREPARE);
    >
    > /* check machine info */
    > @@ -325,10 +318,6 @@ static int sof_probe_continue(struct snd_sof_dev *sdev)
    > dbg_err:
    > snd_sof_free_debug(sdev);
    > dsp_err:
    > - snd_sof_remove(sdev);
    > -probe_err:
    > - sof_ops_free(sdev);
    > -
    > /* all resources freed, update state to match */
    > sof_set_fw_state(sdev, SOF_FW_BOOT_NOT_STARTED);
    > sdev->first_boot = true;
    > @@ -436,6 +425,12 @@ int snd_sof_device_probe(struct device *dev, struct snd_sof_pdata *plat_data)
    >
    > sof_set_fw_state(sdev, SOF_FW_BOOT_NOT_STARTED);
    >
    > + ret = snd_sof_probe(sdev);
    > + if (ret) {
    > + dev_err_probe(sdev->dev, ret, "failed to probe DSP\n");
    > + return ret;
    > + }
    > +
    > if (IS_ENABLED(CONFIG_SND_SOC_SOF_PROBE_WORK_QUEUE)) {
    > INIT_WORK(&sdev->probe_work, sof_probe_work);
    > schedule_work(&sdev->probe_work);
    > @@ -485,9 +480,9 @@ int snd_sof_device_remove(struct device *dev)
    >
    > snd_sof_ipc_free(sdev);
    > snd_sof_free_debug(sdev);
    > - snd_sof_remove(sdev);
    > }
    >
    > + snd_sof_remove(sdev);
    > sof_ops_free(sdev);
    >
    > /* release firmware */
    > diff --git a/sound/soc/sof/intel/hda-codec.c b/sound/soc/sof/intel/hda-codec.c
    > index f1fd5b44aaac..344b61576c0e 100644
    > --- a/sound/soc/sof/intel/hda-codec.c
    > +++ b/sound/soc/sof/intel/hda-codec.c
    > @@ -415,7 +415,7 @@ int hda_codec_i915_init(struct snd_sof_dev *sdev)
    > return 0;
    >
    > /* i915 exposes a HDA codec for HDMI audio */
    > - ret = snd_hdac_i915_init(bus, true);
    > + ret = snd_hdac_i915_init(bus, false);
    > if (ret < 0)
    > return ret;
    >

    \
     
     \ /
      Last update: 2023-08-07 16:57    [W:4.305 / U:1.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site