This patch converts the resource management in ISA es1688 driver with devres as a clean up. Each manual resource management is converted with the corresponding devres helper. The remove callback became superfluous and dropped.
This should give no user-visible functional changes.
Signed-off-by: Takashi Iwai tiwai@suse.de --- include/sound/es1688.h | 1 - sound/isa/es1688/es1688.c | 33 +++++++++------------------------ sound/isa/es1688/es1688_lib.c | 29 +++++++++-------------------- 3 files changed, 18 insertions(+), 45 deletions(-)
diff --git a/include/sound/es1688.h b/include/sound/es1688.h index 099569c31fbb..da577bbf9cc7 100644 --- a/include/sound/es1688.h +++ b/include/sound/es1688.h @@ -18,7 +18,6 @@
struct snd_es1688 { unsigned long port; /* port of ESS chip */ - struct resource *res_port; unsigned long mpu_port; /* MPU-401 port of ESS chip */ int irq; /* IRQ number of ESS chip */ int mpu_irq; /* MPU IRQ */ diff --git a/sound/isa/es1688/es1688.c b/sound/isa/es1688/es1688.c index 750d4995634f..f935b56eeec7 100644 --- a/sound/isa/es1688/es1688.c +++ b/sound/isa/es1688/es1688.c @@ -166,36 +166,27 @@ static int snd_es1688_isa_probe(struct device *dev, unsigned int n) struct snd_card *card; int error;
- error = snd_card_new(dev, index[n], id[n], THIS_MODULE, - sizeof(struct snd_es1688), &card); + error = snd_devm_card_new(dev, index[n], id[n], THIS_MODULE, + sizeof(struct snd_es1688), &card); if (error < 0) return error;
error = snd_es1688_legacy_create(card, dev, n); if (error < 0) - goto out; + return error;
error = snd_es1688_probe(card, n); if (error < 0) - goto out; + return error;
dev_set_drvdata(dev, card);
return 0; -out: - snd_card_free(card); - return error; -} - -static void snd_es1688_isa_remove(struct device *dev, unsigned int n) -{ - snd_card_free(dev_get_drvdata(dev)); }
static struct isa_driver snd_es1688_driver = { .match = snd_es1688_match, .probe = snd_es1688_isa_probe, - .remove = snd_es1688_isa_remove, #if 0 /* FIXME */ .suspend = snd_es1688_suspend, .resume = snd_es1688_resume, @@ -249,22 +240,18 @@ static int snd_es968_pnp_detect(struct pnp_card_link *pcard, if (dev == SNDRV_CARDS) return -ENODEV;
- error = snd_card_new(&pcard->card->dev, - index[dev], id[dev], THIS_MODULE, - sizeof(struct snd_es1688), &card); + error = snd_devm_card_new(&pcard->card->dev, + index[dev], id[dev], THIS_MODULE, + sizeof(struct snd_es1688), &card); if (error < 0) return error;
error = snd_card_es968_pnp(card, dev, pcard, pid); - if (error < 0) { - snd_card_free(card); + if (error < 0) return error; - } error = snd_es1688_probe(card, dev); - if (error < 0) { - snd_card_free(card); + if (error < 0) return error; - } pnp_set_card_drvdata(pcard, card); snd_es968_pnp_is_probed = 1; return 0; @@ -272,8 +259,6 @@ static int snd_es968_pnp_detect(struct pnp_card_link *pcard,
static void snd_es968_pnp_remove(struct pnp_card_link *pcard) { - snd_card_free(pnp_get_card_drvdata(pcard)); - pnp_set_card_drvdata(pcard, NULL); snd_es968_pnp_is_probed = 0; }
diff --git a/sound/isa/es1688/es1688_lib.c b/sound/isa/es1688/es1688_lib.c index 8554cb2263c1..9cd66b236cef 100644 --- a/sound/isa/es1688/es1688_lib.c +++ b/sound/isa/es1688/es1688_lib.c @@ -580,13 +580,6 @@ static int snd_es1688_free(struct snd_es1688 *chip) { if (chip->hardware != ES1688_HW_UNDEF) snd_es1688_init(chip, 0); - release_and_free_resource(chip->res_port); - if (chip->irq >= 0) - free_irq(chip->irq, (void *) chip); - if (chip->dma8 >= 0) { - disable_dma(chip->dma8); - free_dma(chip->dma8); - } return 0; }
@@ -624,26 +617,25 @@ int snd_es1688_create(struct snd_card *card, chip->dma8 = -1; chip->hardware = ES1688_HW_UNDEF; - chip->res_port = request_region(port + 4, 12, "ES1688"); - if (chip->res_port == NULL) { + if (!devm_request_region(card->dev, port + 4, 12, "ES1688")) { snd_printk(KERN_ERR "es1688: can't grab port 0x%lx\n", port + 4); - err = -EBUSY; - goto exit; + return -EBUSY; }
- err = request_irq(irq, snd_es1688_interrupt, 0, "ES1688", (void *) chip); + err = devm_request_irq(card->dev, irq, snd_es1688_interrupt, 0, + "ES1688", (void *) chip); if (err < 0) { snd_printk(KERN_ERR "es1688: can't grab IRQ %d\n", irq); - goto exit; + return err; }
chip->irq = irq; card->sync_irq = chip->irq; - err = request_dma(dma8, "ES1688"); + err = snd_devm_request_dma(card->dev, dma8, "ES1688");
if (err < 0) { snd_printk(KERN_ERR "es1688: can't grab DMA8 %d\n", dma8); - goto exit; + return err; } chip->dma8 = dma8;
@@ -659,17 +651,14 @@ int snd_es1688_create(struct snd_card *card,
err = snd_es1688_probe(chip); if (err < 0) - goto exit; + return err;
err = snd_es1688_init(chip, 1); if (err < 0) - goto exit; + return err;
/* Register device */ err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); -exit: - if (err) - snd_es1688_free(chip); return err; }