ALSA: dice: simplify unit probe processing
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Wed, 30 Mar 2016 23:47:03 +0000 (08:47 +0900)
committerTakashi Iwai <tiwai@suse.de>
Thu, 31 Mar 2016 13:36:17 +0000 (15:36 +0200)
In former commit, ALSA dice driver doesn't generate kernel warnings
when unplugging units before initializing stream data.

This commit moves the initialization to delayed registration of sound
card, to simplify unit probe processing.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/dice/dice.c

index 8b64aef31a864523d428e6fa26b8c6a5f45db154..53ca441ea9b9c20005c2367e58e4a34c7e5c02f9 100644 (file)
@@ -201,6 +201,10 @@ static void do_registration(struct work_struct *work)
 
        dice_card_strings(dice);
 
+       err = snd_dice_stream_init_duplex(dice);
+       if (err < 0)
+               goto error;
+
        snd_dice_create_proc(dice);
 
        err = snd_dice_create_pcm(dice);
@@ -229,6 +233,7 @@ static void do_registration(struct work_struct *work)
 
        return;
 error:
+       snd_dice_stream_destroy_duplex(dice);
        snd_dice_transaction_destroy(dice);
        snd_card_free(dice->card);
        dev_info(&dice->unit->device,
@@ -273,12 +278,6 @@ static int dice_probe(struct fw_unit *unit, const struct ieee1394_device_id *id)
        init_completion(&dice->clock_accepted);
        init_waitqueue_head(&dice->hwdep_wait);
 
-       err = snd_dice_stream_init_duplex(dice);
-       if (err < 0) {
-               dice_free(dice);
-               return err;
-       }
-
        /* Allocate and register this sound card later. */
        INIT_DEFERRABLE_WORK(&dice->dwork, do_registration);
        schedule_registration(dice);