struct snd_kcontrol *snd_kctl_rate; /* read-only current rate */
        int srate; /* selected samplerate */
+       int active; /* playback/capture running */
 
   spinlock_t lock; /* lock for control transfers */
 
                dev_err(uac->card->dev, "%s:%d Error!\n", __func__, __LINE__);
 }
 
+static void set_active(struct uac_rtd_params *prm, bool active)
+{
+       // notifying through the Rate ctrl
+       struct snd_kcontrol *kctl = prm->snd_kctl_rate;
+       unsigned long flags;
+
+       spin_lock_irqsave(&prm->lock, flags);
+       if (prm->active != active) {
+               prm->active = active;
+               snd_ctl_notify(prm->uac->card, SNDRV_CTL_EVENT_MASK_VALUE,
+                               &kctl->id);
+       }
+       spin_unlock_irqrestore(&prm->lock, flags);
+}
+
 int u_audio_set_capture_srate(struct g_audio *audio_dev, int srate)
 {
        struct uac_params *params = &audio_dev->params;
                        dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
        }
 
+       set_active(&uac->c_prm, true);
+
        ep_fback = audio_dev->in_ep_fback;
        if (!ep_fback)
                return 0;
 {
        struct snd_uac_chip *uac = audio_dev->uac;
 
+       set_active(&uac->c_prm, false);
        if (audio_dev->in_ep_fback)
                free_ep_fback(&uac->c_prm, audio_dev->in_ep_fback);
        free_ep(&uac->c_prm, audio_dev->out_ep);
                        dev_err(dev, "%s:%d Error!\n", __func__, __LINE__);
        }
 
+       set_active(&uac->p_prm, true);
+
        return 0;
 }
 EXPORT_SYMBOL_GPL(u_audio_start_playback);
 {
        struct snd_uac_chip *uac = audio_dev->uac;
 
+       set_active(&uac->p_prm, false);
        free_ep(&uac->p_prm, audio_dev->in_ep);
 }
 EXPORT_SYMBOL_GPL(u_audio_stop_playback);
        unsigned long flags;
 
        spin_lock_irqsave(&prm->lock, flags);
-       ucontrol->value.integer.value[0] = prm->srate;
+       if (prm->active)
+               ucontrol->value.integer.value[0] = prm->srate;
+       else
+               /* not active: reporting zero rate */
+               ucontrol->value.integer.value[0] = 0;
        spin_unlock_irqrestore(&prm->lock, flags);
        return 0;
 }