]> err.no Git - linux-2.6/blobdiff - sound/pcmcia/pdaudiocf/pdaudiocf.c
Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-mmc
[linux-2.6] / sound / pcmcia / pdaudiocf / pdaudiocf.c
index adfdce7499d1c40418e05b025de9bf4f6ef32b93..fd3590fcaedbcaeb75ca54efe071b9ad2ddd7272 100644 (file)
@@ -206,7 +206,7 @@ static void snd_pdacf_detach(struct pcmcia_device *link)
                snd_pdacf_powerdown(chip);
        chip->chip_status |= PDAUDIOCF_STAT_IS_STALE; /* to be sure */
        snd_card_disconnect(chip->card);
-       snd_card_free_in_thread(chip->card);
+       snd_card_free_when_closed(chip->card);
 }
 
 /*
@@ -241,12 +241,13 @@ static int pdacf_config(struct pcmcia_device *link)
        CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, parse));
        link->conf.ConfigBase = parse->config.base;
        link->conf.ConfigIndex = 0x5;
-       kfree(parse);
 
        CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io));
        CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
        CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
 
+       kfree(parse);
+
        if (snd_pdacf_assign_resources(pdacf, link->io.BasePort1, link->irq.AssignedIRQ) < 0)
                goto failed;
 
@@ -254,6 +255,7 @@ static int pdacf_config(struct pcmcia_device *link)
        return 0;
 
 cs_failed:
+       kfree(parse);
        cs_error(link, last_fn, last_ret);
 failed:
        pcmcia_disable_device(link);