ASoC: Intel: Skylake: Fix dma buffer size calculation
authorRamesh Babu <ramesh.babu@intel.com>
Mon, 19 Jun 2017 06:29:20 +0000 (11:59 +0530)
committerMark Brown <broonie@kernel.org>
Mon, 19 Jun 2017 15:33:13 +0000 (16:33 +0100)
DMA buffer size for gateway copier will be calculated based on:

For host DMA copier:
Input buffer size (ibs) for output direction (playback)
Output buffer size (obs) for input direction (capture)

For link DMA copier:
IBS for input direction (capture)
OBS for output direction (playback)

Update the driver to use the above.

Signed-off-by: Ramesh Babu <ramesh.babu@intel.com>
Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com>
Acked-By: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/skylake/skl-messages.c

index 5a46502..eca8582 100644 (file)
@@ -507,6 +507,8 @@ static void skl_setup_cpr_gateway_cfg(struct skl_sst *ctx,
                        struct skl_module_cfg *mconfig,
                        struct skl_cpr_cfg *cpr_mconfig)
 {
+       u32 dma_io_buf;
+
        cpr_mconfig->gtw_cfg.node_id = skl_get_node_id(ctx, mconfig);
 
        if (cpr_mconfig->gtw_cfg.node_id == SKL_NON_GATEWAY_CPR_NODE_ID) {
@@ -514,10 +516,29 @@ static void skl_setup_cpr_gateway_cfg(struct skl_sst *ctx,
                return;
        }
 
-       if (SKL_CONN_SOURCE == mconfig->hw_conn_type)
-               cpr_mconfig->gtw_cfg.dma_buffer_size = 2 * mconfig->obs;
-       else
-               cpr_mconfig->gtw_cfg.dma_buffer_size = 2 * mconfig->ibs;
+       switch (mconfig->hw_conn_type) {
+       case SKL_CONN_SOURCE:
+               if (mconfig->dev_type == SKL_DEVICE_HDAHOST)
+                       dma_io_buf =  mconfig->ibs;
+               else
+                       dma_io_buf =  mconfig->obs;
+               break;
+
+       case SKL_CONN_SINK:
+               if (mconfig->dev_type == SKL_DEVICE_HDAHOST)
+                       dma_io_buf =  mconfig->obs;
+               else
+                       dma_io_buf =  mconfig->ibs;
+               break;
+
+       default:
+               dev_warn(ctx->dev, "wrong connection type: %d\n",
+                               mconfig->hw_conn_type);
+               return;
+       }
+
+       cpr_mconfig->gtw_cfg.dma_buffer_size =
+                               mconfig->dma_buffer_size * dma_io_buf;
 
        cpr_mconfig->cpr_feature_mask = 0;
        cpr_mconfig->gtw_cfg.config_length  = 0;