|
@@ -1018,9 +1018,10 @@ static int dapm_new_dai_link(struct snd_soc_dapm_widget *w)
|
|
|
struct snd_kcontrol *kcontrol;
|
|
|
struct snd_soc_dapm_context *dapm = w->dapm;
|
|
|
struct snd_card *card = dapm->card->snd_card;
|
|
|
+ struct snd_soc_pcm_runtime *rtd = w->priv;
|
|
|
|
|
|
/* create control for links with > 1 config */
|
|
|
- if (w->num_params <= 1)
|
|
|
+ if (rtd->dai_link->num_params <= 1)
|
|
|
return 0;
|
|
|
|
|
|
/* add kcontrol */
|
|
@@ -3617,13 +3618,15 @@ static int snd_soc_dai_link_event(struct snd_soc_dapm_widget *w,
|
|
|
struct snd_soc_dapm_path *path;
|
|
|
struct snd_soc_dai *source, *sink;
|
|
|
struct snd_soc_pcm_runtime *rtd = w->priv;
|
|
|
- const struct snd_soc_pcm_stream *config = w->params + w->params_select;
|
|
|
+ const struct snd_soc_pcm_stream *config;
|
|
|
struct snd_pcm_substream substream;
|
|
|
struct snd_pcm_hw_params *params = NULL;
|
|
|
struct snd_pcm_runtime *runtime = NULL;
|
|
|
unsigned int fmt;
|
|
|
int ret;
|
|
|
|
|
|
+ config = rtd->dai_link->params + rtd->params_select;
|
|
|
+
|
|
|
if (WARN_ON(!config) ||
|
|
|
WARN_ON(list_empty(&w->edges[SND_SOC_DAPM_DIR_OUT]) ||
|
|
|
list_empty(&w->edges[SND_SOC_DAPM_DIR_IN])))
|
|
@@ -3772,8 +3775,9 @@ static int snd_soc_dapm_dai_link_get(struct snd_kcontrol *kcontrol,
|
|
|
struct snd_ctl_elem_value *ucontrol)
|
|
|
{
|
|
|
struct snd_soc_dapm_widget *w = snd_kcontrol_chip(kcontrol);
|
|
|
+ struct snd_soc_pcm_runtime *rtd = w->priv;
|
|
|
|
|
|
- ucontrol->value.enumerated.item[0] = w->params_select;
|
|
|
+ ucontrol->value.enumerated.item[0] = rtd->params_select;
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -3782,18 +3786,19 @@ static int snd_soc_dapm_dai_link_put(struct snd_kcontrol *kcontrol,
|
|
|
struct snd_ctl_elem_value *ucontrol)
|
|
|
{
|
|
|
struct snd_soc_dapm_widget *w = snd_kcontrol_chip(kcontrol);
|
|
|
+ struct snd_soc_pcm_runtime *rtd = w->priv;
|
|
|
|
|
|
/* Can't change the config when widget is already powered */
|
|
|
if (w->power)
|
|
|
return -EBUSY;
|
|
|
|
|
|
- if (ucontrol->value.enumerated.item[0] == w->params_select)
|
|
|
+ if (ucontrol->value.enumerated.item[0] == rtd->params_select)
|
|
|
return 0;
|
|
|
|
|
|
- if (ucontrol->value.enumerated.item[0] >= w->num_params)
|
|
|
+ if (ucontrol->value.enumerated.item[0] >= rtd->dai_link->num_params)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- w->params_select = ucontrol->value.enumerated.item[0];
|
|
|
+ rtd->params_select = ucontrol->value.enumerated.item[0];
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -3936,8 +3941,6 @@ snd_soc_dapm_new_dai(struct snd_soc_card *card, struct snd_soc_pcm_runtime *rtd,
|
|
|
if (IS_ERR(w))
|
|
|
goto outfree_kcontrol_news;
|
|
|
|
|
|
- w->params = rtd->dai_link->params;
|
|
|
- w->num_params = rtd->dai_link->num_params;
|
|
|
w->priv = rtd;
|
|
|
|
|
|
return w;
|