[alsa-devel] [PATCH] ASoC: Remove special casing for registerless widgets
Lu Guanqun
guanqun.lu at intel.com
Sat Apr 2 10:12:44 CEST 2011
On Sat, Apr 02, 2011 at 04:07:55PM +0800, Lu Guanqun wrote:
> On Sat, Apr 02, 2011 at 03:49:01PM +0800, Mark Brown wrote:
> > Since we recently explicitly set the register for registerless widgets
> > to no register there is no longer any need to special case power updates
> > for them, we can allow them to be handled with the register compression
> > code as other widgets are.
> >
> > As this is the only remaining user of dapm_generic_apply_power() and
> > dapm_update_bits() also remove those functions.
> >
> > Noticed-by: Lu Guanqun <guanqun.lu at intel.com>
> > Signed-off-by: Mark Brown <broonie at opensource.wolfsonmicro.com>
> > ---
> >
> > Compile tested only currently, sending it out now as part of discussion
> > with Lu Guanqun.
>
> I see the point what you were saying.
>
> But I still don't quite understand the write compression, it aims at
> reducing the number of register writes, however in
> dapm_seq_run_coalesced, it calls snd_soc_update_bits.
I mean, for write compression or not, as long as its widget register is
valid, it will be updated. So I don't see why write compression would
reduce the number...
>
> Could you explain a little bit? It's appreciated. I'm vauge in this
> part.
>
> >
> > sound/soc/soc-dapm.c | 100 --------------------------------------------------
> > 1 files changed, 0 insertions(+), 100 deletions(-)
> >
> > diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
> > index b11d011..c9196d6 100644
> > --- a/sound/soc/soc-dapm.c
> > +++ b/sound/soc/soc-dapm.c
> > @@ -322,45 +322,6 @@ static int dapm_connect_mixer(struct snd_soc_dapm_context *dapm,
> > return -ENODEV;
> > }
> >
> > -/* update dapm codec register bits */
> > -static int dapm_update_bits(struct snd_soc_dapm_widget *widget)
> > -{
> > - int change, power;
> > - unsigned int old, new;
> > - struct snd_soc_codec *codec = widget->codec;
> > - struct snd_soc_dapm_context *dapm = widget->dapm;
> > - struct snd_soc_card *card = dapm->card;
> > -
> > - /* check for valid widgets */
> > - if (widget->reg < 0 || widget->id == snd_soc_dapm_input ||
> > - widget->id == snd_soc_dapm_output ||
> > - widget->id == snd_soc_dapm_hp ||
> > - widget->id == snd_soc_dapm_mic ||
> > - widget->id == snd_soc_dapm_line ||
> > - widget->id == snd_soc_dapm_spk)
> > - return 0;
> > -
> > - power = widget->power;
> > - if (widget->invert)
> > - power = (power ? 0:1);
> > -
> > - old = snd_soc_read(codec, widget->reg);
> > - new = (old & ~(0x1 << widget->shift)) | (power << widget->shift);
> > -
> > - change = old != new;
> > - if (change) {
> > - pop_dbg(dapm->dev, card->pop_time,
> > - "pop test %s : %s in %d ms\n",
> > - widget->name, widget->power ? "on" : "off",
> > - card->pop_time);
> > - pop_wait(card->pop_time);
> > - snd_soc_write(codec, widget->reg, new);
> > - }
> > - dev_dbg(dapm->dev, "reg %x old %x new %x change %d\n", widget->reg,
> > - old, new, change);
> > - return change;
> > -}
> > -
> > /* create new dapm mixer control */
> > static int dapm_new_mixer(struct snd_soc_dapm_context *dapm,
> > struct snd_soc_dapm_widget *w)
> > @@ -644,57 +605,6 @@ int dapm_reg_event(struct snd_soc_dapm_widget *w,
> > }
> > EXPORT_SYMBOL_GPL(dapm_reg_event);
> >
> > -/* Standard power change method, used to apply power changes to most
> > - * widgets.
> > - */
> > -static int dapm_generic_apply_power(struct snd_soc_dapm_widget *w)
> > -{
> > - int ret;
> > -
> > - /* call any power change event handlers */
> > - if (w->event)
> > - dev_dbg(w->dapm->dev, "power %s event for %s flags %x\n",
> > - w->power ? "on" : "off",
> > - w->name, w->event_flags);
> > -
> > - /* power up pre event */
> > - if (w->power && w->event &&
> > - (w->event_flags & SND_SOC_DAPM_PRE_PMU)) {
> > - ret = w->event(w, NULL, SND_SOC_DAPM_PRE_PMU);
> > - if (ret < 0)
> > - return ret;
> > - }
> > -
> > - /* power down pre event */
> > - if (!w->power && w->event &&
> > - (w->event_flags & SND_SOC_DAPM_PRE_PMD)) {
> > - ret = w->event(w, NULL, SND_SOC_DAPM_PRE_PMD);
> > - if (ret < 0)
> > - return ret;
> > - }
> > -
> > - dapm_update_bits(w);
> > -
> > - /* power up post event */
> > - if (w->power && w->event &&
> > - (w->event_flags & SND_SOC_DAPM_POST_PMU)) {
> > - ret = w->event(w,
> > - NULL, SND_SOC_DAPM_POST_PMU);
> > - if (ret < 0)
> > - return ret;
> > - }
> > -
> > - /* power down post event */
> > - if (!w->power && w->event &&
> > - (w->event_flags & SND_SOC_DAPM_POST_PMD)) {
> > - ret = w->event(w, NULL, SND_SOC_DAPM_POST_PMD);
> > - if (ret < 0)
> > - return ret;
> > - }
> > -
> > - return 0;
> > -}
> > -
> > /* Generic check to see if a widget should be powered.
> > */
> > static int dapm_generic_check_power(struct snd_soc_dapm_widget *w)
> > @@ -981,16 +891,6 @@ static void dapm_seq_run(struct snd_soc_dapm_context *dapm,
> > NULL, SND_SOC_DAPM_POST_PMD);
> > break;
> >
> > - case snd_soc_dapm_input:
> > - case snd_soc_dapm_output:
> > - case snd_soc_dapm_hp:
> > - case snd_soc_dapm_mic:
> > - case snd_soc_dapm_line:
> > - case snd_soc_dapm_spk:
> > - /* No register support currently */
> > - ret = dapm_generic_apply_power(w);
> > - break;
> > -
> > default:
> > /* Queue it up for application */
> > cur_sort = sort[w->id];
> > --
> > 1.7.4.1
> >
>
> --
> guanqun
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
--
guanqun
More information about the Alsa-devel
mailing list