From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vinod Koul Subject: Re: [PATCH] ASOC:DAPM: update DPCM runtime when mixer/mux changes Date: Sun, 15 Dec 2013 19:26:31 +0530 Message-ID: <20131215135630.GS29580@intel.com> References: <1386936829-9627-1-git-send-email-nhcao@marvell.com> <1386936829-9627-2-git-send-email-nhcao@marvell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by alsa0.perex.cz (Postfix) with ESMTP id D19BA261AED for ; Sun, 15 Dec 2013 15:55:18 +0100 (CET) Content-Disposition: inline In-Reply-To: <1386936829-9627-2-git-send-email-nhcao@marvell.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: Nenghua Cao Cc: alsa-devel@alsa-project.org, Takashi Iwai , Liam Girdwood , Henry zhao , Mark Brown , Yacine Belkadi , cxie4@marvell.com List-Id: alsa-devel@alsa-project.org On Fri, Dec 13, 2013 at 08:13:49PM +0800, Nenghua Cao wrote: > From: Nenghua Cao > > DPCM can dynamically alter the FE to BE PCM links at runtime based > on mixer/mux setting updates. Add soc_dpcm_runtime_update() calling in > get/put function for mixer/mux to support this feature. > > Signed-off-by: Nenghua Cao > --- > sound/soc/soc-dapm.c | 28 ++++++++++++++++++++++++---- > 1 files changed, 24 insertions(+), 4 deletions(-) > > diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c > index dcade13..67e63ab 100644 > --- a/sound/soc/soc-dapm.c > +++ b/sound/soc/soc-dapm.c > @@ -2868,6 +2868,7 @@ int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol, > unsigned int val; > int connect, change; > struct snd_soc_dapm_update update; > + int ret = 0; > > if (snd_soc_volsw_is_stereo(mc)) > dev_warn(codec->dapm.dev, > @@ -2901,12 +2902,16 @@ int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol, > card->update = &update; > } > > - soc_dapm_mixer_update_power(card, kcontrol, connect); > + ret = soc_dapm_mixer_update_power(card, kcontrol, connect); > > card->update = NULL; > } > > mutex_unlock(&card->dapm_mutex); > + > + if (ret > 0) > + soc_dpcm_runtime_update(card); This version looks much better! Btw would it make sense to have flag in card for dynmaic support and call soc_dpcm_runtime_update() for only these cards? -- ~Vinod > + > return change; > } > EXPORT_SYMBOL_GPL(snd_soc_dapm_put_volsw); > @@ -2955,6 +2960,7 @@ int snd_soc_dapm_put_enum_double(struct snd_kcontrol *kcontrol, > unsigned int val, mux, change; > unsigned int mask; > struct snd_soc_dapm_update update; > + int ret = 0; > > if (ucontrol->value.enumerated.item[0] > e->max - 1) > return -EINVAL; > @@ -2978,12 +2984,16 @@ int snd_soc_dapm_put_enum_double(struct snd_kcontrol *kcontrol, > update.val = val; > card->update = &update; > > - soc_dapm_mux_update_power(card, kcontrol, mux, e); > + ret = soc_dapm_mux_update_power(card, kcontrol, mux, e); > > card->update = NULL; > } > > mutex_unlock(&card->dapm_mutex); > + > + if (ret > 0) > + soc_dpcm_runtime_update(card); > + > return change; > } > EXPORT_SYMBOL_GPL(snd_soc_dapm_put_enum_double); > @@ -3019,6 +3029,7 @@ int snd_soc_dapm_put_enum_virt(struct snd_kcontrol *kcontrol, > struct soc_enum *e = > (struct soc_enum *)kcontrol->private_value; > int change; > + int ret = 0; > > if (ucontrol->value.enumerated.item[0] >= e->max) > return -EINVAL; > @@ -3028,9 +3039,13 @@ int snd_soc_dapm_put_enum_virt(struct snd_kcontrol *kcontrol, > value = ucontrol->value.enumerated.item[0]; > change = dapm_kcontrol_set_value(kcontrol, value); > if (change) > - soc_dapm_mux_update_power(card, kcontrol, value, e); > + ret = soc_dapm_mux_update_power(card, kcontrol, value, e); > > mutex_unlock(&card->dapm_mutex); > + > + if (ret > 0) > + soc_dpcm_runtime_update(card); > + > return change; > } > EXPORT_SYMBOL_GPL(snd_soc_dapm_put_enum_virt); > @@ -3097,6 +3112,7 @@ int snd_soc_dapm_put_value_enum_double(struct snd_kcontrol *kcontrol, > unsigned int val, mux, change; > unsigned int mask; > struct snd_soc_dapm_update update; > + int ret = 0; > > if (ucontrol->value.enumerated.item[0] > e->max - 1) > return -EINVAL; > @@ -3120,12 +3136,16 @@ int snd_soc_dapm_put_value_enum_double(struct snd_kcontrol *kcontrol, > update.val = val; > card->update = &update; > > - soc_dapm_mux_update_power(card, kcontrol, mux, e); > + ret = soc_dapm_mux_update_power(card, kcontrol, mux, e); > > card->update = NULL; > } > > mutex_unlock(&card->dapm_mutex); > + > + if (ret > 0) > + soc_dpcm_runtime_update(card); > + > return change; > } > EXPORT_SYMBOL_GPL(snd_soc_dapm_put_value_enum_double); > -- > 1.7.0.4 > > _______________________________________________ > Alsa-devel mailing list > Alsa-devel@alsa-project.org > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel --