/* Volume/Mute controls and their state */
   int fu_id; /* Feature Unit ID */
-  struct snd_kcontrol *snd_kctl_volume;
-  struct snd_kcontrol *snd_kctl_mute;
+  struct snd_ctl_elem_id snd_kctl_volume_id;
+  struct snd_ctl_elem_id snd_kctl_mute_id;
   s16 volume_min, volume_max, volume_res;
   s16 volume;
   int mute;
 
-       struct snd_kcontrol *snd_kctl_rate; /* read-only current rate */
+       struct snd_ctl_elem_id snd_kctl_rate_id; /* read-only current rate */
        int srate; /* selected samplerate */
        int active; /* playback/capture running */
 
 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);
+                               &prm->snd_kctl_rate_id);
        }
        spin_unlock_irqrestore(&prm->lock, flags);
 }
 
        if (change)
                snd_ctl_notify(uac->card, SNDRV_CTL_EVENT_MASK_VALUE,
-                               &prm->snd_kctl_volume->id);
+                               &prm->snd_kctl_volume_id);
 
        return 0;
 }
 
        if (change)
                snd_ctl_notify(uac->card, SNDRV_CTL_EVENT_MASK_VALUE,
-                              &prm->snd_kctl_mute->id);
+                              &prm->snd_kctl_mute_id);
 
        return 0;
 }
                        err = snd_ctl_add(card, kctl);
                        if (err < 0)
                                goto snd_fail;
-                       prm->snd_kctl_mute = kctl;
+                       prm->snd_kctl_mute_id = kctl->id;
                        prm->mute = 0;
                }
 
                        err = snd_ctl_add(card, kctl);
                        if (err < 0)
                                goto snd_fail;
-                       prm->snd_kctl_volume = kctl;
+                       prm->snd_kctl_volume_id = kctl->id;
                        prm->volume = fu->volume_max;
                        prm->volume_max = fu->volume_max;
                        prm->volume_min = fu->volume_min;
                err = snd_ctl_add(card, kctl);
                if (err < 0)
                        goto snd_fail;
-               prm->snd_kctl_rate = kctl;
+               prm->snd_kctl_rate_id = kctl->id;
        }
 
        strscpy(card->driver, card_name);