ASoC: Intel: Add stream direction for pcm-module map
authorJie Yang <yang.jie@intel.com>
Thu, 8 Jan 2015 06:32:20 +0000 (14:32 +0800)
committerMark Brown <broonie@kernel.org>
Thu, 8 Jan 2015 18:32:44 +0000 (18:32 +0000)
A DAI may have 2 streams(playback/capture) and different modules
may be needed for them respectively, so we need add a stream
direction here, the combination(dai_id + stream) can tell us
which module we really need here.

Signed-off-by: Jie Yang <yang.jie@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/sst-haswell-pcm.c

index 13f156b4a6126478ea27e39d602eccad85d099d3..5448f79283b7f3a12da0146a0fb7d1e950c85740 100644 (file)
@@ -78,7 +78,6 @@ static const u32 volume_map[] = {
 #define HSW_PCM_DAI_ID_OFFLOAD0        1
 #define HSW_PCM_DAI_ID_OFFLOAD1        2
 #define HSW_PCM_DAI_ID_LOOPBACK        3
-#define HSW_PCM_DAI_ID_CAPTURE 4
 
 
 static const struct snd_pcm_hardware hsw_pcm_hardware = {
@@ -99,6 +98,7 @@ static const struct snd_pcm_hardware hsw_pcm_hardware = {
 
 struct hsw_pcm_module_map {
        int dai_id;
+       int stream;
        enum sst_hsw_module_id mod_id;
 };
 
@@ -687,11 +687,11 @@ static struct snd_pcm_ops hsw_pcm_ops = {
 
 /* static mappings between PCMs and modules - may be dynamic in future */
 static struct hsw_pcm_module_map mod_map[] = {
-       {HSW_PCM_DAI_ID_SYSTEM, SST_HSW_MODULE_PCM_SYSTEM},
-       {HSW_PCM_DAI_ID_OFFLOAD0, SST_HSW_MODULE_PCM},
-       {HSW_PCM_DAI_ID_OFFLOAD1, SST_HSW_MODULE_PCM},
-       {HSW_PCM_DAI_ID_LOOPBACK, SST_HSW_MODULE_PCM_REFERENCE},
-       {HSW_PCM_DAI_ID_CAPTURE, SST_HSW_MODULE_PCM_CAPTURE},
+       {HSW_PCM_DAI_ID_SYSTEM, 0, SST_HSW_MODULE_PCM_SYSTEM},
+       {HSW_PCM_DAI_ID_OFFLOAD0, 0, SST_HSW_MODULE_PCM},
+       {HSW_PCM_DAI_ID_OFFLOAD1, 0, SST_HSW_MODULE_PCM},
+       {HSW_PCM_DAI_ID_LOOPBACK, 1, SST_HSW_MODULE_PCM_REFERENCE},
+       {HSW_PCM_DAI_ID_SYSTEM, 1, SST_HSW_MODULE_PCM_CAPTURE},
 };
 
 static int hsw_pcm_create_modules(struct hsw_priv_data *pdata)
@@ -1075,7 +1075,7 @@ static void hsw_pcm_complete(struct device *dev)
                return;
        }
 
-       for (i = 0; i < HSW_PCM_DAI_ID_CAPTURE + 1; i++) {
+       for (i = 0; i < ARRAY_SIZE(mod_map); i++) {
                pcm_data = &pdata->pcm[i];
 
                if (!pcm_data->substream)
@@ -1109,7 +1109,7 @@ static int hsw_pcm_prepare(struct device *dev)
        if (pdata->pm_state == HSW_PM_STATE_D3)
                return 0;
        /* suspend all active streams */
-       for (i = 0; i < HSW_PCM_DAI_ID_CAPTURE + 1; i++) {
+       for (i = 0; i < ARRAY_SIZE(mod_map); i++) {
                pcm_data = &pdata->pcm[i];
 
                if (!pcm_data->substream)
@@ -1128,7 +1128,7 @@ static int hsw_pcm_prepare(struct device *dev)
        sst_hsw_dsp_runtime_suspend(hsw);
 
        /* preserve persistent memory */
-       for (i = 0; i < HSW_PCM_DAI_ID_CAPTURE + 1; i++) {
+       for (i = 0; i < ARRAY_SIZE(mod_map); i++) {
                pcm_data = &pdata->pcm[i];
 
                if (!pcm_data->substream)