diff options
Diffstat (limited to 'sound/isa/cmi8330.c')
-rw-r--r-- | sound/isa/cmi8330.c | 42 |
1 files changed, 5 insertions, 37 deletions
diff --git a/sound/isa/cmi8330.c b/sound/isa/cmi8330.c index f471f8ad6885..c166e13d17ec 100644 --- a/sound/isa/cmi8330.c +++ b/sound/isa/cmi8330.c | |||
@@ -286,39 +286,21 @@ static int __devinit snd_cmi8330_pnp(int dev, struct snd_cmi8330 *acard, | |||
286 | const struct pnp_card_device_id *id) | 286 | const struct pnp_card_device_id *id) |
287 | { | 287 | { |
288 | struct pnp_dev *pdev; | 288 | struct pnp_dev *pdev; |
289 | struct pnp_resource_table * cfg = kmalloc(sizeof(struct pnp_resource_table), GFP_KERNEL); | ||
290 | int err; | 289 | int err; |
291 | 290 | ||
292 | if (!cfg) | ||
293 | return -ENOMEM; | ||
294 | acard->cap = pnp_request_card_device(card, id->devs[0].id, NULL); | 291 | acard->cap = pnp_request_card_device(card, id->devs[0].id, NULL); |
295 | if (acard->cap == NULL) { | 292 | if (acard->cap == NULL) |
296 | kfree(cfg); | ||
297 | return -EBUSY; | 293 | return -EBUSY; |
298 | } | 294 | |
299 | acard->play = pnp_request_card_device(card, id->devs[1].id, NULL); | 295 | acard->play = pnp_request_card_device(card, id->devs[1].id, NULL); |
300 | if (acard->play == NULL) { | 296 | if (acard->play == NULL) |
301 | kfree(cfg); | ||
302 | return -EBUSY; | 297 | return -EBUSY; |
303 | } | ||
304 | 298 | ||
305 | pdev = acard->cap; | 299 | pdev = acard->cap; |
306 | pnp_init_resource_table(cfg); | 300 | |
307 | /* allocate AD1848 resources */ | ||
308 | if (wssport[dev] != SNDRV_AUTO_PORT) | ||
309 | pnp_resource_change(&cfg->port_resource[0], wssport[dev], 8); | ||
310 | if (wssdma[dev] != SNDRV_AUTO_DMA) | ||
311 | pnp_resource_change(&cfg->dma_resource[0], wssdma[dev], 1); | ||
312 | if (wssirq[dev] != SNDRV_AUTO_IRQ) | ||
313 | pnp_resource_change(&cfg->irq_resource[0], wssirq[dev], 1); | ||
314 | |||
315 | err = pnp_manual_config_dev(pdev, cfg, 0); | ||
316 | if (err < 0) | ||
317 | snd_printk(KERN_ERR "CMI8330/C3D (AD1848) PnP manual resources are invalid, using auto config\n"); | ||
318 | err = pnp_activate_dev(pdev); | 301 | err = pnp_activate_dev(pdev); |
319 | if (err < 0) { | 302 | if (err < 0) { |
320 | snd_printk(KERN_ERR "CMI8330/C3D (AD1848) PnP configure failure\n"); | 303 | snd_printk(KERN_ERR "CMI8330/C3D (AD1848) PnP configure failure\n"); |
321 | kfree(cfg); | ||
322 | return -EBUSY; | 304 | return -EBUSY; |
323 | } | 305 | } |
324 | wssport[dev] = pnp_port_start(pdev, 0); | 306 | wssport[dev] = pnp_port_start(pdev, 0); |
@@ -327,23 +309,10 @@ static int __devinit snd_cmi8330_pnp(int dev, struct snd_cmi8330 *acard, | |||
327 | 309 | ||
328 | /* allocate SB16 resources */ | 310 | /* allocate SB16 resources */ |
329 | pdev = acard->play; | 311 | pdev = acard->play; |
330 | pnp_init_resource_table(cfg); | 312 | |
331 | if (sbport[dev] != SNDRV_AUTO_PORT) | ||
332 | pnp_resource_change(&cfg->port_resource[0], sbport[dev], 16); | ||
333 | if (sbdma8[dev] != SNDRV_AUTO_DMA) | ||
334 | pnp_resource_change(&cfg->dma_resource[0], sbdma8[dev], 1); | ||
335 | if (sbdma16[dev] != SNDRV_AUTO_DMA) | ||
336 | pnp_resource_change(&cfg->dma_resource[1], sbdma16[dev], 1); | ||
337 | if (sbirq[dev] != SNDRV_AUTO_IRQ) | ||
338 | pnp_resource_change(&cfg->irq_resource[0], sbirq[dev], 1); | ||
339 | |||
340 | err = pnp_manual_config_dev(pdev, cfg, 0); | ||
341 | if (err < 0) | ||
342 | snd_printk(KERN_ERR "CMI8330/C3D (SB16) PnP manual resources are invalid, using auto config\n"); | ||
343 | err = pnp_activate_dev(pdev); | 313 | err = pnp_activate_dev(pdev); |
344 | if (err < 0) { | 314 | if (err < 0) { |
345 | snd_printk(KERN_ERR "CMI8330/C3D (SB16) PnP configure failure\n"); | 315 | snd_printk(KERN_ERR "CMI8330/C3D (SB16) PnP configure failure\n"); |
346 | kfree(cfg); | ||
347 | return -EBUSY; | 316 | return -EBUSY; |
348 | } | 317 | } |
349 | sbport[dev] = pnp_port_start(pdev, 0); | 318 | sbport[dev] = pnp_port_start(pdev, 0); |
@@ -351,7 +320,6 @@ static int __devinit snd_cmi8330_pnp(int dev, struct snd_cmi8330 *acard, | |||
351 | sbdma16[dev] = pnp_dma(pdev, 1); | 320 | sbdma16[dev] = pnp_dma(pdev, 1); |
352 | sbirq[dev] = pnp_irq(pdev, 0); | 321 | sbirq[dev] = pnp_irq(pdev, 0); |
353 | 322 | ||
354 | kfree(cfg); | ||
355 | return 0; | 323 | return 0; |
356 | } | 324 | } |
357 | #endif | 325 | #endif |