• Pierre-Louis Bossart's avatar
    ASoC: SOF: Intel: hda-mlink: introduce helpers for 'extended links' PM · fc7dab8e
    Pierre-Louis Bossart authored
    Add helpers to program SPA/CPA bits, using a mutex to access the
    shared LCTL register if required.
    
    All links are managed with the same LCTLx.SPA bits. However there are
    quite a few implementation details to be aware of:
    
    Legacy HDaudio multi-links are powered-up when exiting reset, which
    requires the ref_count to be manually set to one when initializing the
    link.
    
    Alternate links for SoundWire/DMIC/SSP need to be explicitly
    powered-up before accessing the SHIM/IP/Vendor-Specific SHIM space for
    each sublink. DMIC/SSP/SoundWire are all different cases with a
    different device/dai/hlink relationship.
    
    SoundWire will handle power management with the auxiliary device
    resume/suspend routine. The ref_count is not necessary in this case.
    
    The DMIC/SSP will by contrast handle the power management from DAI
    .startup and .shutdown callbacks.
    
    The SSP has a 1:1 mapping between sublink and DAI, but it's
    bidirectional so the ref_count will help avoid turning off the sublink
    when one of the two directions is still in use.
    
    The DMIC has a single link but two DAIs for data generated at
    different sampling frequencies, again the ref_count will make sure the
    two DAIs can be used concurrently.
    
    And last the SoundWire Intel require power-up/down and bank switch to
    be handled with a lock already taken, so the 'eml_lock' is made
    optional with the _unlocked versions of the helpers.
    
    Note that the _check_power_active() implementation is similar to
    previous helpers in sound/hda/ext, with sleep duration and timeout
    aligned with hardware recommendations. If desired, this helper could
    be modified in a second step with .e.g. readl_poll_timeout()
    Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Reviewed-by: default avatarRander Wang <rander.wang@intel.com>
    Reviewed-by: default avatarPéter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Reviewed-by: default avatarRanjani Sridharan <ranjani.sridharan@linux.intel.com>
    Signed-off-by: default avatarPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Reviewed-by: default avatarTakashi Iwai <tiwai@suse.de>
    Link: https://lore.kernel.org/r/20230404104127.5629-9-peter.ujfalusi@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    fc7dab8e
hda-mlink.c 12.4 KB