Merge with rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
[powerpc.git] / sound / drivers / serial-u16550.c
index 986df35..1ed58df 100644 (file)
@@ -749,10 +749,7 @@ static int snd_uart16550_free(snd_uart16550_t *uart)
 {
        if (uart->irq >= 0)
                free_irq(uart->irq, (void *)uart);
-       if (uart->res_base) {
-               release_resource(uart->res_base);
-               kfree_nocheck(uart->res_base);
-       }
+       release_and_free_resource(uart->res_base);
        kfree(uart);
        return 0;
 };
@@ -779,7 +776,7 @@ static int __init snd_uart16550_create(snd_card_t * card,
        int err;
 
 
-       if ((uart = kcalloc(1, sizeof(*uart), GFP_KERNEL)) == NULL)
+       if ((uart = kzalloc(sizeof(*uart), GFP_KERNEL)) == NULL)
                return -ENOMEM;
        uart->adaptor = adaptor;
        uart->card = card;
@@ -928,15 +925,11 @@ static int __init snd_serial_probe(int dev)
                                        base[dev],
                                        adaptor[dev],
                                        droponfull[dev],
-                                       &uart)) < 0) {
-               snd_card_free(card);
-               return err;
-       }
+                                       &uart)) < 0)
+               goto _err;
 
-       if ((err = snd_uart16550_rmidi(uart, 0, outs[dev], ins[dev], &uart->rmidi)) < 0) {
-               snd_card_free(card);
-               return err;
-       }
+       if ((err = snd_uart16550_rmidi(uart, 0, outs[dev], ins[dev], &uart->rmidi)) < 0)
+               goto _err;
 
        sprintf(card->longname, "%s at 0x%lx, irq %d speed %d div %d outs %d ins %d adaptor %s droponfull %d",
                card->shortname,
@@ -949,12 +942,18 @@ static int __init snd_serial_probe(int dev)
                adaptor_names[uart->adaptor],
                uart->drop_on_full);
 
-       if ((err = snd_card_register(card)) < 0) {
-               snd_card_free(card);
-               return err;
-       }
+       if ((err = snd_card_set_generic_dev(card)) < 0)
+               goto _err;
+
+       if ((err = snd_card_register(card)) < 0)
+               goto _err;
+
        snd_serial_cards[dev] = card;
        return 0;
+
+ _err:
+       snd_card_free(card);
+       return err;
 }
 
 static int __init alsa_card_serial_init(void)