ALSA: x86: Don't return an error from chmap ctl at disconnected
authorTakashi Iwai <tiwai@suse.de>
Wed, 15 Feb 2017 20:45:06 +0000 (21:45 +0100)
committerTakashi Iwai <tiwai@suse.de>
Thu, 16 Feb 2017 08:22:43 +0000 (09:22 +0100)
It's not wise to return an error at info/get callback when
disconnected, which happens at any time.
The chmap ctl is supposed to fill zero for such a case, instead.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/x86/intel_hdmi_audio.c

index 5f2445389716ca93ff40b75c02b12aa505fe59ee..71f01204a590f8b4641ee22d97e8fa60ff660575 100644 (file)
@@ -504,11 +504,6 @@ static void had_build_channel_allocation_map(struct snd_intelhad *intelhaddata)
 static int had_chmap_ctl_info(struct snd_kcontrol *kcontrol,
                                struct snd_ctl_elem_info *uinfo)
 {
-       struct snd_pcm_chmap *info = snd_kcontrol_chip(kcontrol);
-       struct snd_intelhad *intelhaddata = info->private_data;
-
-       if (!intelhaddata->connected)
-               return -ENODEV;
        uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
        uinfo->count = HAD_MAX_CHANNEL;
        uinfo->value.integer.min = 0;
@@ -524,13 +519,12 @@ static int had_chmap_ctl_get(struct snd_kcontrol *kcontrol,
        int i;
        const struct snd_pcm_chmap_elem *chmap;
 
-       if (!intelhaddata->connected)
-               return -ENODEV;
-
+       memset(ucontrol->value.integer.value, 0,
+              sizeof(long) * HAD_MAX_CHANNEL);
        mutex_lock(&intelhaddata->mutex);
        if (!intelhaddata->chmap->chmap) {
                mutex_unlock(&intelhaddata->mutex);
-               return -ENODATA;
+               return 0;
        }
 
        chmap = intelhaddata->chmap->chmap;