[alsa-devel] [PATCH] ASoC: rt5645: Power up the RC clock to make sure the speaker volume adjust properly

Oder Chiou oder_chiou at realtek.com
Fri Nov 6 03:52:36 CET 2015


> -----Original Message-----
> > +static int rt5645_spk_put_volsw(struct snd_kcontrol *kcontrol,
> > +		struct snd_ctl_elem_value *ucontrol)
> > +{
> > +	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
> > +	struct rt5645_priv *rt5645 = snd_soc_component_get_drvdata(component);
> > +	int ret;
> > +
> > +	cancel_delayed_work_sync(&rt5645->rcclock_work);
> > +
> > +	regmap_update_bits(rt5645->regmap, RT5645_MICBIAS,
> > +		RT5645_PWR_CLK25M_MASK, RT5645_PWR_CLK25M_PU);
> > +
> > +	ret = snd_soc_put_volsw(kcontrol, ucontrol);
> > +
> > +	queue_delayed_work(system_power_efficient_wq, &rt5645->rcclock_work,
> > +		msecs_to_jiffies(200));
> 
> A more idiomatic way of doing this is to just have the
> queue_delayed_work() - there's no need to cancel a work item before
> requeuing it, the workqueue code will do the right thing.  Can you
> please submit a followup patch cleaning that up?
> 
Thank you for the kind advice. The "cancel_delayed_work_sync" is essential
in case of the operation of kcontrol continuously. We want to make sure the
RC clock can be powered up at least 200ms after the speaker volume is
adjusted, so we add the "cancel_delayed_work_sync" on the top of the
function and requeue it, thanks.


More information about the Alsa-devel mailing list