struct user_element *ue = kctl->private_data;
        unsigned int *container;
        struct snd_ctl_elem_id id;
+       unsigned int mask = 0;
        int i;
        int change;
 
                return 0;
        }
 
+       if (ue->tlv_data == NULL) {
+               /* Now TLV data is available. */
+               for (i = 0; i < kctl->count; ++i)
+                       kctl->vd[i].access |= SNDRV_CTL_ELEM_ACCESS_TLV_READ;
+               mask = SNDRV_CTL_EVENT_MASK_INFO;
+       }
+
        kfree(ue->tlv_data);
        ue->tlv_data = container;
        ue->tlv_data_size = size;
 
+       mask |= SNDRV_CTL_EVENT_MASK_TLV;
        for (i = 0; i < kctl->count; ++i) {
                snd_ctl_build_ioff(&id, kctl, i);
-               snd_ctl_notify(ue->card, SNDRV_CTL_EVENT_MASK_TLV, &id);
+               snd_ctl_notify(ue->card, mask, &id);
        }
 
        return change;
                access = SNDRV_CTL_ELEM_ACCESS_READWRITE;
        access &= (SNDRV_CTL_ELEM_ACCESS_READWRITE |
                   SNDRV_CTL_ELEM_ACCESS_INACTIVE |
-                  SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE);
-       if (access & SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE)
+                  SNDRV_CTL_ELEM_ACCESS_TLV_WRITE);
+
+       /* In initial state, nothing is available as TLV container. */
+       if (access & SNDRV_CTL_ELEM_ACCESS_TLV_WRITE)
                access |= SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK;
        access |= SNDRV_CTL_ELEM_ACCESS_USER;
 
                kctl->get = snd_ctl_elem_user_get;
        if (access & SNDRV_CTL_ELEM_ACCESS_WRITE)
                kctl->put = snd_ctl_elem_user_put;
-       if (access & SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE)
+       if (access & SNDRV_CTL_ELEM_ACCESS_TLV_WRITE)
                kctl->tlv.c = snd_ctl_elem_user_tlv;
 
        /* This function manage to free the instance on failure. */