* [PATCH V2] ASOC:DAPM: update DPCM runtime when mixer/mux changes @ 2013-12-13 12:13 Nenghua Cao 2013-12-13 12:13 ` [PATCH] " Nenghua Cao 2013-12-16 20:13 ` [PATCH V2] " Mark Brown 0 siblings, 2 replies; 8+ messages in thread From: Nenghua Cao @ 2013-12-13 12:13 UTC (permalink / raw) To: Jaroslav Kysela, Takashi Iwai, Liam Girdwood, Mark Brown, Yacine Belkadi, alsa-devel Cc: Henry zhao, Nenghua Cao, cxie4 From: Nenghua Cao <nhcao@marvell.com> V2 -> V1: Removes the flag and update DPCM always when mixer/mux changes, according to Takashi's and Mark's suggestion. >> Usually backward compatibility is concerned when something new breaks >> the existing ones. In your case, always updating DPCM would work, >> too, even without an extra flag; it's just suboptimal. >Right, and if we have separate versions then at some point we'll end up >having to define DPCM versions of everything which is going to get >tedious and error prone. V1 -> V0: refined patch, and add flag into soc_mixer_control and soc_enum instead of the alsa core, according to Takashi's suggestion. > You don't need to extend the ALSA core API for such a purpose. It's > ASoC-specific, so rather extend struct soc_mixer_control instead, if > such a new flag is really needed. Nenghua Cao (1): ASOC:DAPM: update DPCM runtime when mixer/mux changes sound/soc/soc-dapm.c | 28 ++++++++++++++++++++++++---- 1 files changed, 24 insertions(+), 4 deletions(-) ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH] ASOC:DAPM: update DPCM runtime when mixer/mux changes 2013-12-13 12:13 [PATCH V2] ASOC:DAPM: update DPCM runtime when mixer/mux changes Nenghua Cao @ 2013-12-13 12:13 ` Nenghua Cao 2013-12-15 13:56 ` Vinod Koul 2013-12-16 20:14 ` Mark Brown 2013-12-16 20:13 ` [PATCH V2] " Mark Brown 1 sibling, 2 replies; 8+ messages in thread From: Nenghua Cao @ 2013-12-13 12:13 UTC (permalink / raw) To: Jaroslav Kysela, Takashi Iwai, Liam Girdwood, Mark Brown, Yacine Belkadi, alsa-devel Cc: Henry zhao, Nenghua Cao, cxie4 From: Nenghua Cao <nhcao@marvell.com> 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 <nhcao@marvell.com> --- 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); + 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 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] ASOC:DAPM: update DPCM runtime when mixer/mux changes 2013-12-13 12:13 ` [PATCH] " Nenghua Cao @ 2013-12-15 13:56 ` Vinod Koul 2013-12-16 2:43 ` Nenghua Cao 2013-12-16 20:14 ` Mark Brown 1 sibling, 1 reply; 8+ messages in thread From: Vinod Koul @ 2013-12-15 13:56 UTC (permalink / raw) To: Nenghua Cao Cc: alsa-devel, Takashi Iwai, Liam Girdwood, Henry zhao, Mark Brown, Yacine Belkadi, cxie4 On Fri, Dec 13, 2013 at 08:13:49PM +0800, Nenghua Cao wrote: > From: Nenghua Cao <nhcao@marvell.com> > > 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 <nhcao@marvell.com> > --- > 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 -- ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] ASOC:DAPM: update DPCM runtime when mixer/mux changes 2013-12-15 13:56 ` Vinod Koul @ 2013-12-16 2:43 ` Nenghua Cao 0 siblings, 0 replies; 8+ messages in thread From: Nenghua Cao @ 2013-12-16 2:43 UTC (permalink / raw) To: Vinod Koul Cc: alsa-devel@alsa-project.org, Takashi Iwai, Liam Girdwood, Henry Zhao, Mark Brown, Yacine Belkadi, Chao Xie On 12/15/2013 09:56 PM, Vinod Koul wrote: > On Fri, Dec 13, 2013 at 08:13:49PM +0800, Nenghua Cao wrote: >> > From: Nenghua Cao <nhcao@marvell.com> >> > >> > 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 <nhcao@marvell.com> >> > --- >> > 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? > Hi, Vinod In soc_dpcm_runtime_update(), it traverses the FE dai_link's "dynamic" flag. If the asoc driver supports DPCM, it will do update work. Or it will do nothing. After discussing with Mark and Takashi, it seems no more meaning to add this flag. > -- > ~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 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] ASOC:DAPM: update DPCM runtime when mixer/mux changes 2013-12-13 12:13 ` [PATCH] " Nenghua Cao 2013-12-15 13:56 ` Vinod Koul @ 2013-12-16 20:14 ` Mark Brown 1 sibling, 0 replies; 8+ messages in thread From: Mark Brown @ 2013-12-16 20:14 UTC (permalink / raw) To: Nenghua Cao Cc: alsa-devel, Takashi Iwai, Liam Girdwood, Henry zhao, Yacine Belkadi, cxie4 [-- Attachment #1.1: Type: text/plain, Size: 334 bytes --] On Fri, Dec 13, 2013 at 08:13:49PM +0800, Nenghua Cao wrote: > From: Nenghua Cao <nhcao@marvell.com> > > 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. Applied, thanks. [-- Attachment #1.2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] [-- Attachment #2: Type: text/plain, Size: 0 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH V2] ASOC:DAPM: update DPCM runtime when mixer/mux changes 2013-12-13 12:13 [PATCH V2] ASOC:DAPM: update DPCM runtime when mixer/mux changes Nenghua Cao 2013-12-13 12:13 ` [PATCH] " Nenghua Cao @ 2013-12-16 20:13 ` Mark Brown 2013-12-17 2:59 ` Nenghua Cao 1 sibling, 1 reply; 8+ messages in thread From: Mark Brown @ 2013-12-16 20:13 UTC (permalink / raw) To: Nenghua Cao Cc: alsa-devel, Takashi Iwai, Liam Girdwood, Henry zhao, Yacine Belkadi, cxie4 [-- Attachment #1.1: Type: text/plain, Size: 374 bytes --] On Fri, Dec 13, 2013 at 08:13:48PM +0800, Nenghua Cao wrote: > From: Nenghua Cao <nhcao@marvell.com> > > V2 -> V1: > > Removes the flag and update DPCM always when mixer/mux changes, according > to Takashi's and Mark's suggestion. Don't send cover letters for single patches, if there's anything that needs to be said put it after the --- in the patch mail. [-- Attachment #1.2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] [-- Attachment #2: Type: text/plain, Size: 0 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH V2] ASOC:DAPM: update DPCM runtime when mixer/mux changes 2013-12-16 20:13 ` [PATCH V2] " Mark Brown @ 2013-12-17 2:59 ` Nenghua Cao 0 siblings, 0 replies; 8+ messages in thread From: Nenghua Cao @ 2013-12-17 2:59 UTC (permalink / raw) To: Mark Brown Cc: alsa-devel@alsa-project.org, Takashi Iwai, Liam Girdwood, Henry Zhao, Yacine Belkadi, Chao Xie On 12/17/2013 04:13 AM, Mark Brown wrote: > On Fri, Dec 13, 2013 at 08:13:48PM +0800, Nenghua Cao wrote: >> From: Nenghua Cao <nhcao@marvell.com> >> >> V2 -> V1: >> >> Removes the flag and update DPCM always when mixer/mux changes, according >> to Takashi's and Mark's suggestion. > > Don't send cover letters for single patches, if there's anything that > needs to be said put it after the --- in the patch mail. > Got it. Thanks! ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH V2] ASOC:DAPM: update DPCM runtime when mixer/mux changes @ 2013-12-13 12:10 Nenghua Cao 0 siblings, 0 replies; 8+ messages in thread From: Nenghua Cao @ 2013-12-13 12:10 UTC (permalink / raw) To: Jaroslav Kysela, Takashi Iwai, Liam Girdwood, Mark Brown, Yacine Belkadi, alsa-devel Cc: Henry zhao, Nenghua Cao, cxie4 From: Nenghua Cao <nhcao@marvell.com> V2 -> V1: Removes the flag and update DPCM always when mixer/mux changes, according to Takashi's and Mark's suggestion. >> Usually backward compatibility is concerned when something new breaks >> the existing ones. In your case, always updating DPCM would work, >> too, even without an extra flag; it's just suboptimal. >Right, and if we have separate versions then at some point we'll end up >having to define DPCM versions of everything which is going to get >tedious and error prone. V1 -> V0: refined patch, and add flag into soc_mixer_control and soc_enum instead of the alsa core, according to Takashi's suggestion. > You don't need to extend the ALSA core API for such a purpose. It's > ASoC-specific, so rather extend struct soc_mixer_control instead, if > such a new flag is really needed. Nenghua Cao (1): ASOC:DAPM: update DPCM runtime when mixer/mux changes sound/soc/soc-dapm.c | 28 ++++++++++++++++++++++++---- 1 files changed, 24 insertions(+), 4 deletions(-) ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2013-12-17 2:53 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-12-13 12:13 [PATCH V2] ASOC:DAPM: update DPCM runtime when mixer/mux changes Nenghua Cao 2013-12-13 12:13 ` [PATCH] " Nenghua Cao 2013-12-15 13:56 ` Vinod Koul 2013-12-16 2:43 ` Nenghua Cao 2013-12-16 20:14 ` Mark Brown 2013-12-16 20:13 ` [PATCH V2] " Mark Brown 2013-12-17 2:59 ` Nenghua Cao -- strict thread matches above, loose matches on Subject: below -- 2013-12-13 12:10 Nenghua Cao
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).