ALSA: x86: Call snd_card_register() at the end
authorTakashi Iwai <tiwai@suse.de>
Tue, 31 Jan 2017 07:47:05 +0000 (08:47 +0100)
committerTakashi Iwai <tiwai@suse.de>
Fri, 3 Feb 2017 16:31:15 +0000 (17:31 +0100)
The card registration should be done at the last stage of the probe
procedure.  Otherwise user-space may access to the device before the
whole initialization is done.

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

index dfc4452afee115218b54b32073c59a44943581e8..82f42a6c363cf4e29d90e38516f718394e0beecd 100644 (file)
@@ -1586,6 +1586,7 @@ int hdmi_audio_probe(struct platform_device *devptr,
        pr_debug("%s @ %d:DEBUG PLUG/UNPLUG : HAD_DRV_DISCONNECTED\n",
                        __func__, __LINE__);
 
+       intelhaddata->dev = &devptr->dev;
        intelhaddata->card = card;
        intelhaddata->card_id = hdmi_card_id;
        intelhaddata->card_index = card->number;
@@ -1617,10 +1618,6 @@ int hdmi_audio_probe(struct platform_device *devptr,
        if (retval)
                goto err;
 
-       retval = snd_card_register(card);
-       if (retval)
-               goto err;
-
        /* IEC958 controls */
        retval = snd_ctl_add(card, snd_ctl_new1(&had_control_iec958_mask,
                                                intelhaddata));
@@ -1638,7 +1635,10 @@ int hdmi_audio_probe(struct platform_device *devptr,
        if (retval < 0)
                goto err;
 
-       intelhaddata->dev = &devptr->dev;
+       retval = snd_card_register(card);
+       if (retval)
+               goto err;
+
        pm_runtime_set_active(intelhaddata->dev);
        pm_runtime_enable(intelhaddata->dev);