Merge branch 'asoc-5.5' into asoc-linus
authorMark Brown <broonie@kernel.org>
Thu, 23 Jan 2020 12:36:42 +0000 (12:36 +0000)
committerMark Brown <broonie@kernel.org>
Thu, 23 Jan 2020 12:36:42 +0000 (12:36 +0000)
13 files changed:
sound/soc/codecs/cs47l15.c
sound/soc/codecs/cs47l35.c
sound/soc/codecs/cs47l85.c
sound/soc/codecs/cs47l90.c
sound/soc/codecs/cs47l92.c
sound/soc/codecs/madera.c
sound/soc/codecs/madera.h
sound/soc/codecs/wm_adsp.c
sound/soc/intel/boards/skl_hda_dsp_common.c
sound/soc/soc-generic-dmaengine-pcm.c
sound/soc/soc-pcm.c
sound/soc/soc-topology.c
sound/soc/sof/intel/hda.h

index ece1276..6533c4f 100644 (file)
@@ -529,6 +529,7 @@ SND_SOC_DAPM_OUTPUT("DRC2 Signal Activity"),
 SND_SOC_DAPM_OUTPUT("DSP Trigger Out"),
 
 SND_SOC_DAPM_DEMUX("HPOUT1 Demux", SND_SOC_NOPM, 0, 0, &cs47l15_outdemux),
+SND_SOC_DAPM_MUX("HPOUT1 Mono Mux", SND_SOC_NOPM, 0, 0, &cs47l15_outdemux),
 
 SND_SOC_DAPM_PGA("PWM1 Driver", MADERA_PWM_DRIVE_1, MADERA_PWM1_ENA_SHIFT,
                 0, NULL, 0),
@@ -1084,6 +1085,9 @@ static const struct snd_soc_dapm_route cs47l15_dapm_routes[] = {
        { "AEC2 Loopback", "HPOUT1R", "OUT1R" },
        { "HPOUT1 Demux", NULL, "OUT1L" },
        { "HPOUT1 Demux", NULL, "OUT1R" },
+
+       { "OUT1R", NULL, "HPOUT1 Mono Mux" },
+
        { "HPOUTL", "HPOUT", "HPOUT1 Demux" },
        { "HPOUTR", "HPOUT", "HPOUT1 Demux" },
        { "EPOUTP", "EPOUT", "HPOUT1 Demux" },
@@ -1261,6 +1265,11 @@ static irqreturn_t cs47l15_adsp2_irq(int irq, void *data)
        return IRQ_HANDLED;
 }
 
+static const struct snd_soc_dapm_route cs47l15_mono_routes[] = {
+       { "HPOUT1 Mono Mux", "HPOUT", "OUT1L" },
+       { "HPOUT1 Mono Mux", "EPOUT", "OUT1L" },
+};
+
 static int cs47l15_component_probe(struct snd_soc_component *component)
 {
        struct cs47l15 *cs47l15 = snd_soc_component_get_drvdata(component);
@@ -1277,7 +1286,9 @@ static int cs47l15_component_probe(struct snd_soc_component *component)
        if (ret)
                return ret;
 
-       ret = madera_init_outputs(component, CS47L15_MONO_OUTPUTS);
+       ret = madera_init_outputs(component, cs47l15_mono_routes,
+                                 ARRAY_SIZE(cs47l15_mono_routes),
+                                 CS47L15_MONO_OUTPUTS);
        if (ret)
                return ret;
 
index d396a85..bd172e1 100644 (file)
@@ -631,6 +631,7 @@ SND_SOC_DAPM_OUTPUT("DRC2 Signal Activity"),
 SND_SOC_DAPM_OUTPUT("DSP Trigger Out"),
 
 SND_SOC_DAPM_DEMUX("HPOUT1 Demux", SND_SOC_NOPM, 0, 0, &cs47l35_outdemux),
+SND_SOC_DAPM_MUX("HPOUT1 Mono Mux", SND_SOC_NOPM, 0, 0, &cs47l35_outdemux),
 
 SND_SOC_DAPM_PGA("PWM1 Driver", MADERA_PWM_DRIVE_1, MADERA_PWM1_ENA_SHIFT,
                 0, NULL, 0),
@@ -1309,6 +1310,8 @@ static const struct snd_soc_dapm_route cs47l35_dapm_routes[] = {
        { "SPKOUTN", NULL, "OUT4L" },
        { "SPKOUTP", NULL, "OUT4L" },
 
+       { "OUT1R", NULL, "HPOUT1 Mono Mux" },
+
        { "HPOUTL", "HPOUT", "HPOUT1 Demux" },
        { "HPOUTR", "HPOUT", "HPOUT1 Demux" },
        { "EPOUTP", "EPOUT", "HPOUT1 Demux" },
@@ -1552,6 +1555,11 @@ static irqreturn_t cs47l35_adsp2_irq(int irq, void *data)
        return IRQ_HANDLED;
 }
 
+static const struct snd_soc_dapm_route cs47l35_mono_routes[] = {
+       { "HPOUT1 Mono Mux", "HPOUT", "OUT1L" },
+       { "HPOUT1 Mono Mux", "EPOUT", "OUT1L" },
+};
+
 static int cs47l35_component_probe(struct snd_soc_component *component)
 {
        struct cs47l35 *cs47l35 = snd_soc_component_get_drvdata(component);
@@ -1568,7 +1576,9 @@ static int cs47l35_component_probe(struct snd_soc_component *component)
        if (ret)
                return ret;
 
-       ret = madera_init_outputs(component, CS47L35_MONO_OUTPUTS);
+       ret = madera_init_outputs(component, cs47l35_mono_routes,
+                                 ARRAY_SIZE(cs47l35_mono_routes),
+                                 CS47L35_MONO_OUTPUTS);
        if (ret)
                return ret;
 
index 32fe7ff..33ecff4 100644 (file)
@@ -2005,12 +2005,18 @@ static const struct snd_soc_dapm_route cs47l85_dapm_routes[] = {
        { "IN3R", NULL, "IN3R Mode" },
 
        { "IN4L", NULL, "DMICCLK4" },
+       { "IN4L", NULL, "DMICDAT4" },
+       { "IN4R", NULL, "DMICCLK4" },
        { "IN4R", NULL, "DMICDAT4" },
 
        { "IN5L", NULL, "DMICCLK5" },
+       { "IN5L", NULL, "DMICDAT5" },
+       { "IN5R", NULL, "DMICCLK5" },
        { "IN5R", NULL, "DMICDAT5" },
 
        { "IN6L", NULL, "DMICCLK6" },
+       { "IN6L", NULL, "DMICDAT6" },
+       { "IN6R", NULL, "DMICCLK6" },
        { "IN6R", NULL, "DMICDAT6" },
 
        MADERA_MIXER_ROUTES("OUT1L", "HPOUT1L"),
@@ -2507,7 +2513,8 @@ static int cs47l85_component_probe(struct snd_soc_component *component)
        if (ret)
                return ret;
 
-       ret = madera_init_outputs(component, CS47L85_MONO_OUTPUTS);
+       ret = madera_init_outputs(component, NULL, CS47L85_MONO_OUTPUTS,
+                                 CS47L85_MONO_OUTPUTS);
        if (ret)
                return ret;
 
index 67cac60..16504d2 100644 (file)
@@ -1935,12 +1935,18 @@ static const struct snd_soc_dapm_route cs47l90_dapm_routes[] = {
        { "IN2R", NULL, "IN2R Mode" },
 
        { "IN3L", NULL, "DMICCLK3" },
+       { "IN3L", NULL, "DMICDAT3" },
+       { "IN3R", NULL, "DMICCLK3" },
        { "IN3R", NULL, "DMICDAT3" },
 
        { "IN4L", NULL, "DMICCLK4" },
+       { "IN4L", NULL, "DMICDAT4" },
+       { "IN4R", NULL, "DMICCLK4" },
        { "IN4R", NULL, "DMICDAT4" },
 
        { "IN5L", NULL, "DMICCLK5" },
+       { "IN5L", NULL, "DMICDAT5" },
+       { "IN5R", NULL, "DMICCLK5" },
        { "IN5R", NULL, "DMICDAT5" },
 
        MADERA_MIXER_ROUTES("OUT1L", "HPOUT1L"),
@@ -2418,7 +2424,8 @@ static int cs47l90_component_probe(struct snd_soc_component *component)
        if (ret)
                return ret;
 
-       ret = madera_init_outputs(component, CS47L90_MONO_OUTPUTS);
+       ret = madera_init_outputs(component, NULL, CS47L90_MONO_OUTPUTS,
+                                 CS47L90_MONO_OUTPUTS);
        if (ret)
                return ret;
 
index d50f75f..3c108b9 100644 (file)
@@ -730,6 +730,7 @@ SND_SOC_DAPM_MUX("IN2L Mode", SND_SOC_NOPM, 0, 0, &madera_inmode[1]),
 SND_SOC_DAPM_MUX("IN2R Mode", SND_SOC_NOPM, 0, 0, &madera_inmode[1]),
 
 SND_SOC_DAPM_DEMUX("OUT3 Demux", SND_SOC_NOPM, 0, 0, &cs47l92_outdemux),
+SND_SOC_DAPM_MUX("OUT3 Mono Mux", SND_SOC_NOPM, 0, 0, &cs47l92_outdemux),
 
 SND_SOC_DAPM_OUTPUT("DRC1 Signal Activity"),
 SND_SOC_DAPM_OUTPUT("DRC2 Signal Activity"),
@@ -1584,6 +1585,8 @@ static const struct snd_soc_dapm_route cs47l92_dapm_routes[] = {
        { "OUT3 Demux", NULL, "OUT3L" },
        { "OUT3 Demux", NULL, "OUT3R" },
 
+       { "OUT3R", NULL, "OUT3 Mono Mux" },
+
        { "HPOUT3L", "HPOUT3", "OUT3 Demux" },
        { "HPOUT3R", "HPOUT3", "OUT3 Demux" },
        { "HPOUT4L", "HPOUT4", "OUT3 Demux" },
@@ -1817,6 +1820,13 @@ static irqreturn_t cs47l92_adsp2_irq(int irq, void *data)
        return IRQ_HANDLED;
 }
 
+static const struct snd_soc_dapm_route cs47l92_mono_routes[] = {
+       { "OUT1R", NULL, "OUT1L" },
+       { "OUT2R", NULL, "OUT2L" },
+       { "OUT3 Mono Mux", "HPOUT3", "OUT3L" },
+       { "OUT3 Mono Mux", "HPOUT4", "OUT3L" },
+};
+
 static int cs47l92_component_probe(struct snd_soc_component *component)
 {
        struct cs47l92 *cs47l92 = snd_soc_component_get_drvdata(component);
@@ -1833,7 +1843,9 @@ static int cs47l92_component_probe(struct snd_soc_component *component)
        if (ret)
                return ret;
 
-       ret = madera_init_outputs(component, CS47L92_MONO_OUTPUTS);
+       ret = madera_init_outputs(component, cs47l92_mono_routes,
+                                 ARRAY_SIZE(cs47l92_mono_routes),
+                                 CS47L92_MONO_OUTPUTS);
        if (ret)
                return ret;
 
index 5263981..b537e60 100644 (file)
@@ -1162,7 +1162,9 @@ static const struct snd_soc_dapm_route madera_mono_routes[] = {
        { "OUT6R", NULL, "OUT6L" },
 };
 
-int madera_init_outputs(struct snd_soc_component *component, int n_mono_routes)
+int madera_init_outputs(struct snd_soc_component *component,
+                       const struct snd_soc_dapm_route *routes,
+                       int n_mono_routes, int n_real)
 {
        struct snd_soc_dapm_context *dapm =
                snd_soc_component_get_dapm(component);
@@ -1179,16 +1181,21 @@ int madera_init_outputs(struct snd_soc_component *component, int n_mono_routes)
                n_mono_routes = MADERA_MAX_OUTPUT;
        }
 
+       if (!routes)
+               routes = madera_mono_routes;
+
        for (i = 0; i < n_mono_routes; i++) {
                /* Default is 0 so noop with defaults */
                if (pdata->out_mono[i]) {
                        val = MADERA_OUT1_MONO;
-                       snd_soc_dapm_add_routes(dapm,
-                                               &madera_mono_routes[i], 1);
+                       snd_soc_dapm_add_routes(dapm, &routes[i], 1);
                } else {
                        val = 0;
                }
 
+               if (i >= n_real)
+                       continue;
+
                regmap_update_bits(madera->regmap,
                                   MADERA_OUTPUT_PATH_CONFIG_1L + (i * 8),
                                   MADERA_OUT1_MONO, val);
index 6d8938a..bff0846 100644 (file)
@@ -421,7 +421,9 @@ int madera_core_free(struct madera_priv *priv);
 int madera_init_overheat(struct madera_priv *priv);
 int madera_free_overheat(struct madera_priv *priv);
 int madera_init_inputs(struct snd_soc_component *component);
-int madera_init_outputs(struct snd_soc_component *component, int n_mono_routes);
+int madera_init_outputs(struct snd_soc_component *component,
+                       const struct snd_soc_dapm_route *routes,
+                       int n_mono_routes, int n_real);
 int madera_init_bus_error_irq(struct madera_priv *priv, int dsp_num,
                              irq_handler_t handler);
 void madera_free_bus_error_irq(struct madera_priv *priv, int dsp_num);
index 2a9b610..d3d32b5 100644 (file)
@@ -1030,8 +1030,8 @@ static int wm_coeff_write_acked_control(struct wm_coeff_ctl *ctl,
        return -ETIMEDOUT;
 }
 
-static int wm_coeff_write_control(struct wm_coeff_ctl *ctl,
-                                 const void *buf, size_t len)
+static int wm_coeff_write_ctrl_raw(struct wm_coeff_ctl *ctl,
+                                  const void *buf, size_t len)
 {
        struct wm_adsp *dsp = ctl->dsp;
        void *scratch;
@@ -1061,6 +1061,23 @@ static int wm_coeff_write_control(struct wm_coeff_ctl *ctl,
        return 0;
 }
 
+static int wm_coeff_write_ctrl(struct wm_coeff_ctl *ctl,
+                              const void *buf, size_t len)
+{
+       int ret = 0;
+
+       if (ctl->flags & WMFW_CTL_FLAG_VOLATILE)
+               ret = -EPERM;
+       else if (buf != ctl->cache)
+               memcpy(ctl->cache, buf, len);
+
+       ctl->set = 1;
+       if (ctl->enabled && ctl->dsp->running)
+               ret = wm_coeff_write_ctrl_raw(ctl, buf, len);
+
+       return ret;
+}
+
 static int wm_coeff_put(struct snd_kcontrol *kctl,
                        struct snd_ctl_elem_value *ucontrol)
 {
@@ -1071,16 +1088,7 @@ static int wm_coeff_put(struct snd_kcontrol *kctl,
        int ret = 0;
 
        mutex_lock(&ctl->dsp->pwr_lock);
-
-       if (ctl->flags & WMFW_CTL_FLAG_VOLATILE)
-               ret = -EPERM;
-       else
-               memcpy(ctl->cache, p, ctl->len);
-
-       ctl->set = 1;
-       if (ctl->enabled && ctl->dsp->running)
-               ret = wm_coeff_write_control(ctl, p, ctl->len);
-
+       ret = wm_coeff_write_ctrl(ctl, p, ctl->len);
        mutex_unlock(&ctl->dsp->pwr_lock);
 
        return ret;
@@ -1096,15 +1104,10 @@ static int wm_coeff_tlv_put(struct snd_kcontrol *kctl,
 
        mutex_lock(&ctl->dsp->pwr_lock);
 
-       if (copy_from_user(ctl->cache, bytes, size)) {
+       if (copy_from_user(ctl->cache, bytes, size))
                ret = -EFAULT;
-       } else {
-               ctl->set = 1;
-               if (ctl->enabled && ctl->dsp->running)
-                       ret = wm_coeff_write_control(ctl, ctl->cache, size);
-               else if (ctl->flags & WMFW_CTL_FLAG_VOLATILE)
-                       ret = -EPERM;
-       }
+       else
+               ret = wm_coeff_write_ctrl(ctl, ctl->cache, size);
 
        mutex_unlock(&ctl->dsp->pwr_lock);
 
@@ -1135,8 +1138,8 @@ static int wm_coeff_put_acked(struct snd_kcontrol *kctl,
        return ret;
 }
 
-static int wm_coeff_read_control(struct wm_coeff_ctl *ctl,
-                                void *buf, size_t len)
+static int wm_coeff_read_ctrl_raw(struct wm_coeff_ctl *ctl,
+                                 void *buf, size_t len)
 {
        struct wm_adsp *dsp = ctl->dsp;
        void *scratch;
@@ -1166,29 +1169,37 @@ static int wm_coeff_read_control(struct wm_coeff_ctl *ctl,
        return 0;
 }
 
-static int wm_coeff_get(struct snd_kcontrol *kctl,
-                       struct snd_ctl_elem_value *ucontrol)
+static int wm_coeff_read_ctrl(struct wm_coeff_ctl *ctl, void *buf, size_t len)
 {
-       struct soc_bytes_ext *bytes_ext =
-               (struct soc_bytes_ext *)kctl->private_value;
-       struct wm_coeff_ctl *ctl = bytes_ext_to_ctl(bytes_ext);
-       char *p = ucontrol->value.bytes.data;
        int ret = 0;
 
-       mutex_lock(&ctl->dsp->pwr_lock);
-
        if (ctl->flags & WMFW_CTL_FLAG_VOLATILE) {
                if (ctl->enabled && ctl->dsp->running)
-                       ret = wm_coeff_read_control(ctl, p, ctl->len);
+                       return wm_coeff_read_ctrl_raw(ctl, buf, len);
                else
-                       ret = -EPERM;
+                       return -EPERM;
        } else {
                if (!ctl->flags && ctl->enabled && ctl->dsp->running)
-                       ret = wm_coeff_read_control(ctl, ctl->cache, ctl->len);
+                       ret = wm_coeff_read_ctrl_raw(ctl, ctl->cache, ctl->len);
 
-               memcpy(p, ctl->cache, ctl->len);
+               if (buf != ctl->cache)
+                       memcpy(buf, ctl->cache, len);
        }
 
+       return ret;
+}
+
+static int wm_coeff_get(struct snd_kcontrol *kctl,
+                       struct snd_ctl_elem_value *ucontrol)
+{
+       struct soc_bytes_ext *bytes_ext =
+               (struct soc_bytes_ext *)kctl->private_value;
+       struct wm_coeff_ctl *ctl = bytes_ext_to_ctl(bytes_ext);
+       char *p = ucontrol->value.bytes.data;
+       int ret;
+
+       mutex_lock(&ctl->dsp->pwr_lock);
+       ret = wm_coeff_read_ctrl(ctl, p, ctl->len);
        mutex_unlock(&ctl->dsp->pwr_lock);
 
        return ret;
@@ -1204,15 +1215,7 @@ static int wm_coeff_tlv_get(struct snd_kcontrol *kctl,
 
        mutex_lock(&ctl->dsp->pwr_lock);
 
-       if (ctl->flags & WMFW_CTL_FLAG_VOLATILE) {
-               if (ctl->enabled && ctl->dsp->running)
-                       ret = wm_coeff_read_control(ctl, ctl->cache, size);
-               else
-                       ret = -EPERM;
-       } else {
-               if (!ctl->flags && ctl->enabled && ctl->dsp->running)
-                       ret = wm_coeff_read_control(ctl, ctl->cache, size);
-       }
+       ret = wm_coeff_read_ctrl_raw(ctl, ctl->cache, size);
 
        if (!ret && copy_to_user(bytes, ctl->cache, size))
                ret = -EFAULT;
@@ -1340,7 +1343,7 @@ static int wm_coeff_init_control_caches(struct wm_adsp *dsp)
                 * created so we don't need to do anything.
                 */
                if (!ctl->flags || (ctl->flags & WMFW_CTL_FLAG_READABLE)) {
-                       ret = wm_coeff_read_control(ctl, ctl->cache, ctl->len);
+                       ret = wm_coeff_read_ctrl_raw(ctl, ctl->cache, ctl->len);
                        if (ret < 0)
                                return ret;
                }
@@ -1358,7 +1361,8 @@ static int wm_coeff_sync_controls(struct wm_adsp *dsp)
                if (!ctl->enabled)
                        continue;
                if (ctl->set && !(ctl->flags & WMFW_CTL_FLAG_VOLATILE)) {
-                       ret = wm_coeff_write_control(ctl, ctl->cache, ctl->len);
+                       ret = wm_coeff_write_ctrl_raw(ctl, ctl->cache,
+                                                     ctl->len);
                        if (ret < 0)
                                return ret;
                }
@@ -2048,7 +2052,7 @@ int wm_adsp_write_ctl(struct wm_adsp *dsp, const char *name, int type,
        if (len > ctl->len)
                return -EINVAL;
 
-       ret = wm_coeff_write_control(ctl, buf, len);
+       ret = wm_coeff_write_ctrl(ctl, buf, len);
 
        kcontrol = snd_soc_card_get_kcontrol(dsp->component->card, ctl->name);
        snd_ctl_notify(dsp->component->card->snd_card,
@@ -2070,7 +2074,7 @@ int wm_adsp_read_ctl(struct wm_adsp *dsp, const char *name, int type,
        if (len > ctl->len)
                return -EINVAL;
 
-       return wm_coeff_read_control(ctl, buf, len);
+       return wm_coeff_read_ctrl(ctl, buf, len);
 }
 EXPORT_SYMBOL_GPL(wm_adsp_read_ctl);
 
index eb419e1..78ff5f2 100644 (file)
@@ -41,16 +41,19 @@ int skl_hda_hdmi_add_pcm(struct snd_soc_card *card, int device)
        return 0;
 }
 
-SND_SOC_DAILINK_DEFS(idisp1,
-       DAILINK_COMP_ARRAY(COMP_CPU("iDisp1 Pin")),
+SND_SOC_DAILINK_DEF(idisp1_cpu,
+       DAILINK_COMP_ARRAY(COMP_CPU("iDisp1 Pin")));
+SND_SOC_DAILINK_DEF(idisp1_codec,
        DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi1")));
 
-SND_SOC_DAILINK_DEFS(idisp2,
-       DAILINK_COMP_ARRAY(COMP_CPU("iDisp2 Pin")),
+SND_SOC_DAILINK_DEF(idisp2_cpu,
+       DAILINK_COMP_ARRAY(COMP_CPU("iDisp2 Pin")));
+SND_SOC_DAILINK_DEF(idisp2_codec,
        DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi2")));
 
-SND_SOC_DAILINK_DEFS(idisp3,
-       DAILINK_COMP_ARRAY(COMP_CPU("iDisp3 Pin")),
+SND_SOC_DAILINK_DEF(idisp3_cpu,
+       DAILINK_COMP_ARRAY(COMP_CPU("iDisp3 Pin")));
+SND_SOC_DAILINK_DEF(idisp3_codec,
        DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi3")));
 
 SND_SOC_DAILINK_DEF(analog_cpu,
@@ -83,21 +86,21 @@ struct snd_soc_dai_link skl_hda_be_dai_links[HDA_DSP_MAX_BE_DAI_LINKS] = {
                .id = 1,
                .dpcm_playback = 1,
                .no_pcm = 1,
-               SND_SOC_DAILINK_REG(idisp1),
+               SND_SOC_DAILINK_REG(idisp1_cpu, idisp1_codec, platform),
        },
        {
                .name = "iDisp2",
                .id = 2,
                .dpcm_playback = 1,
                .no_pcm = 1,
-               SND_SOC_DAILINK_REG(idisp2),
+               SND_SOC_DAILINK_REG(idisp2_cpu, idisp2_codec, platform),
        },
        {
                .name = "iDisp3",
                .id = 3,
                .dpcm_playback = 1,
                .no_pcm = 1,
-               SND_SOC_DAILINK_REG(idisp3),
+               SND_SOC_DAILINK_REG(idisp3_cpu, idisp3_codec, platform),
        },
        {
                .name = "Analog Playback and Capture",
index a428ff3..2b5f3b1 100644 (file)
@@ -117,7 +117,6 @@ dmaengine_pcm_set_runtime_hwparams(struct snd_soc_component *component,
        struct dma_chan *chan = pcm->chan[substream->stream];
        struct snd_dmaengine_dai_dma_data *dma_data;
        struct snd_pcm_hardware hw;
-       int ret;
 
        if (pcm->config && pcm->config->pcm_hardware)
                return snd_soc_set_runtime_hwparams(substream,
@@ -138,12 +137,15 @@ dmaengine_pcm_set_runtime_hwparams(struct snd_soc_component *component,
        if (pcm->flags & SND_DMAENGINE_PCM_FLAG_NO_RESIDUE)
                hw.info |= SNDRV_PCM_INFO_BATCH;
 
-       ret = snd_dmaengine_pcm_refine_runtime_hwparams(substream,
-                                                       dma_data,
-                                                       &hw,
-                                                       chan);
-       if (ret)
-               return ret;
+       /**
+        * FIXME: Remove the return value check to align with the code
+        * before adding snd_dmaengine_pcm_refine_runtime_hwparams
+        * function.
+        */
+       snd_dmaengine_pcm_refine_runtime_hwparams(substream,
+                                                 dma_data,
+                                                 &hw,
+                                                 chan);
 
        return snd_soc_set_runtime_hwparams(substream, &hw);
 }
index 01e7bc0..29c98f2 100644 (file)
@@ -2916,10 +2916,10 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)
 
                for_each_rtd_codec_dai(rtd, i, codec_dai) {
                        if (snd_soc_dai_stream_valid(codec_dai, SNDRV_PCM_STREAM_PLAYBACK) &&
-                           snd_soc_dai_stream_valid(cpu_dai,   SNDRV_PCM_STREAM_PLAYBACK))
+                           snd_soc_dai_stream_valid(cpu_dai,   SNDRV_PCM_STREAM_CAPTURE))
                                playback = 1;
                        if (snd_soc_dai_stream_valid(codec_dai, SNDRV_PCM_STREAM_CAPTURE) &&
-                           snd_soc_dai_stream_valid(cpu_dai,   SNDRV_PCM_STREAM_CAPTURE))
+                           snd_soc_dai_stream_valid(cpu_dai,   SNDRV_PCM_STREAM_PLAYBACK))
                                capture = 1;
                }
 
index 92e4f4d..4e1fe62 100644 (file)
@@ -1906,6 +1906,10 @@ static int soc_tplg_fe_link_create(struct soc_tplg *tplg,
        link->num_codecs = 1;
        link->num_platforms = 1;
 
+       link->dobj.index = tplg->index;
+       link->dobj.ops = tplg->ops;
+       link->dobj.type = SND_SOC_DOBJ_DAI_LINK;
+
        if (strlen(pcm->pcm_name)) {
                link->name = kstrdup(pcm->pcm_name, GFP_KERNEL);
                link->stream_name = kstrdup(pcm->pcm_name, GFP_KERNEL);
@@ -1942,9 +1946,6 @@ static int soc_tplg_fe_link_create(struct soc_tplg *tplg,
                goto err;
        }
 
-       link->dobj.index = tplg->index;
-       link->dobj.ops = tplg->ops;
-       link->dobj.type = SND_SOC_DOBJ_DAI_LINK;
        list_add(&link->dobj.list, &tplg->comp->dobj_list);
 
        return 0;
index 18d7e72..8981c00 100644 (file)
 
 /* Number of DAIs */
 #if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
-#define SOF_SKL_NUM_DAIS               14
+#define SOF_SKL_NUM_DAIS               15
 #else
 #define SOF_SKL_NUM_DAIS               8
 #endif