On Thu, Nov 05, 2015 at 07:55:51PM +0800, Oder Chiou wrote: > +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?