diff options
author | Bard Liao <yung-chuan.liao@linux.intel.com> | 2020-08-17 23:29:16 +0800 |
---|---|---|
committer | Vinod Koul <vkoul@kernel.org> | 2020-08-18 12:01:05 +0530 |
commit | a5a0239c27fe1125826c5cad4dec9cd1fd960d4a (patch) | |
tree | e16c0ef92fc49397d78afdc16b3520433abe5d2b /drivers/soundwire/cadence_master.h | |
parent | 99b6a30f9f9995be3698f59df9882490d604f5d1 (diff) | |
download | lwn-a5a0239c27fe1125826c5cad4dec9cd1fd960d4a.tar.gz lwn-a5a0239c27fe1125826c5cad4dec9cd1fd960d4a.zip |
soundwire: intel: reinitialize IP+DSP in .prepare(), but only when resuming
The .prepare() callback is invoked for normal streaming, underflows or
during the system resume transition. In the latter case, the context
for the ALH PDIs is lost, and the DSP is not initialized properly
either, but the bus parameters don't need to be recomputed.
Conversely, when doing a regular .prepare() during an underflow, the
ALH/SHIM registers shall not be changed as the hardware cannot be
reprogrammed after the DMA started (hardware spec requirement).
This patch adds storage of PDI and hw_params in the DAI dma context,
and the difference between the types of .prepare() usages is handled
via a simple boolean, updated when suspending, and tested for in the
.prepare() case.
Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20200817152923.3259-6-yung-chuan.liao@linux.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Diffstat (limited to 'drivers/soundwire/cadence_master.h')
-rw-r--r-- | drivers/soundwire/cadence_master.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/soundwire/cadence_master.h b/drivers/soundwire/cadence_master.h index 7638858397df..fdec62b912d3 100644 --- a/drivers/soundwire/cadence_master.h +++ b/drivers/soundwire/cadence_master.h @@ -84,6 +84,8 @@ struct sdw_cdns_stream_config { * @bus: Bus handle * @stream_type: Stream type * @link_id: Master link id + * @hw_params: hw_params to be applied in .prepare step + * @suspended: status set when suspended, to be used in .prepare */ struct sdw_cdns_dma_data { char *name; @@ -92,6 +94,8 @@ struct sdw_cdns_dma_data { struct sdw_bus *bus; enum sdw_stream_type stream_type; int link_id; + struct snd_pcm_hw_params *hw_params; + bool suspended; }; /** |