diff options
author | Rene Herman <rene.herman@gmail.com> | 2007-11-30 11:59:25 -0500 |
---|---|---|
committer | Jaroslav Kysela <perex@perex.cz> | 2008-01-31 11:29:30 -0500 |
commit | 109c53f840e551d6e99ecfd8b0131a968332c89f (patch) | |
tree | 212af8d6ebb3303a21dd44b032fd5949fdc37607 /sound/isa/cs423x | |
parent | df1deb67532ea26f1a033a5f48bf34b30bec8e1d (diff) |
[ALSA] sound/isa: kill pnp_resource_change
This removes the pnp_resource_change use from the ALSA ISAPnP drivers. In
2.4 these were useful in providing an easy path to setting the resources,
but in 2.6 they retain function as a layering violation only.
This makes for a nice cleanup (-550 lines) of ALSA but moreover, ALSA is the
only remaining user of pnp_init_resource_table(), pnp_resource_change() and
pnp_manual_config_dev() (and, in fact, of 'struct pnp_resource_table') in
the tree outide of drivers/pnp itself meaning it makes for more cleanup
potential inside the PnP layer.
Thomas Renninger acked their removal from that side, you did from the ALSA
side (CC list just copied from that thread).
Against current alsa-kernel HG. Many more potential cleanups in there, but
this _only_ removes the pnp_resource_change code. Compile tested against
current alsa-kernel HG and compile- and use-tested against 2.6.23.x (few
offsets).
Cc: Thomas Renninger <trenn@suse.de>
Signed-off-by: Rene Herman <rene.herman@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Diffstat (limited to 'sound/isa/cs423x')
-rw-r--r-- | sound/isa/cs423x/cs4236.c | 91 |
1 files changed, 16 insertions, 75 deletions
diff --git a/sound/isa/cs423x/cs4236.c b/sound/isa/cs423x/cs4236.c index 5784b43f4123..0a3fece40f8b 100644 --- a/sound/isa/cs423x/cs4236.c +++ b/sound/isa/cs423x/cs4236.c | |||
@@ -270,29 +270,9 @@ static struct pnp_card_device_id snd_cs423x_pnpids[] = { | |||
270 | MODULE_DEVICE_TABLE(pnp_card, snd_cs423x_pnpids); | 270 | MODULE_DEVICE_TABLE(pnp_card, snd_cs423x_pnpids); |
271 | 271 | ||
272 | /* WSS initialization */ | 272 | /* WSS initialization */ |
273 | static int __devinit snd_cs423x_pnp_init_wss(int dev, struct pnp_dev *pdev, | 273 | static int __devinit snd_cs423x_pnp_init_wss(int dev, struct pnp_dev *pdev) |
274 | struct pnp_resource_table *cfg) | ||
275 | { | 274 | { |
276 | int err; | 275 | if (pnp_activate_dev(pdev) < 0) { |
277 | |||
278 | pnp_init_resource_table(cfg); | ||
279 | if (port[dev] != SNDRV_AUTO_PORT) | ||
280 | pnp_resource_change(&cfg->port_resource[0], port[dev], 4); | ||
281 | if (fm_port[dev] != SNDRV_AUTO_PORT && fm_port[dev] > 0) | ||
282 | pnp_resource_change(&cfg->port_resource[1], fm_port[dev], 4); | ||
283 | if (sb_port[dev] != SNDRV_AUTO_PORT) | ||
284 | pnp_resource_change(&cfg->port_resource[2], sb_port[dev], 16); | ||
285 | if (irq[dev] != SNDRV_AUTO_IRQ) | ||
286 | pnp_resource_change(&cfg->irq_resource[0], irq[dev], 1); | ||
287 | if (dma1[dev] != SNDRV_AUTO_DMA) | ||
288 | pnp_resource_change(&cfg->dma_resource[0], dma1[dev], 1); | ||
289 | if (dma2[dev] != SNDRV_AUTO_DMA) | ||
290 | pnp_resource_change(&cfg->dma_resource[1], dma2[dev] < 0 ? 4 : dma2[dev], 1); | ||
291 | err = pnp_manual_config_dev(pdev, cfg, 0); | ||
292 | if (err < 0) | ||
293 | snd_printk(KERN_ERR IDENT " WSS PnP manual resources are invalid, using auto config\n"); | ||
294 | err = pnp_activate_dev(pdev); | ||
295 | if (err < 0) { | ||
296 | printk(KERN_ERR IDENT " WSS PnP configure failed for WSS (out of resources?)\n"); | 276 | printk(KERN_ERR IDENT " WSS PnP configure failed for WSS (out of resources?)\n"); |
297 | return -EBUSY; | 277 | return -EBUSY; |
298 | } | 278 | } |
@@ -311,19 +291,9 @@ static int __devinit snd_cs423x_pnp_init_wss(int dev, struct pnp_dev *pdev, | |||
311 | } | 291 | } |
312 | 292 | ||
313 | /* CTRL initialization */ | 293 | /* CTRL initialization */ |
314 | static int __devinit snd_cs423x_pnp_init_ctrl(int dev, struct pnp_dev *pdev, | 294 | static int __devinit snd_cs423x_pnp_init_ctrl(int dev, struct pnp_dev *pdev) |
315 | struct pnp_resource_table *cfg) | ||
316 | { | 295 | { |
317 | int err; | 296 | if (pnp_activate_dev(pdev) < 0) { |
318 | |||
319 | pnp_init_resource_table(cfg); | ||
320 | if (cport[dev] != SNDRV_AUTO_PORT) | ||
321 | pnp_resource_change(&cfg->port_resource[0], cport[dev], 8); | ||
322 | err = pnp_manual_config_dev(pdev, cfg, 0); | ||
323 | if (err < 0) | ||
324 | snd_printk(KERN_ERR IDENT " CTRL PnP manual resources are invalid, using auto config\n"); | ||
325 | err = pnp_activate_dev(pdev); | ||
326 | if (err < 0) { | ||
327 | printk(KERN_ERR IDENT " CTRL PnP configure failed for WSS (out of resources?)\n"); | 297 | printk(KERN_ERR IDENT " CTRL PnP configure failed for WSS (out of resources?)\n"); |
328 | return -EBUSY; | 298 | return -EBUSY; |
329 | } | 299 | } |
@@ -333,21 +303,9 @@ static int __devinit snd_cs423x_pnp_init_ctrl(int dev, struct pnp_dev *pdev, | |||
333 | } | 303 | } |
334 | 304 | ||
335 | /* MPU initialization */ | 305 | /* MPU initialization */ |
336 | static int __devinit snd_cs423x_pnp_init_mpu(int dev, struct pnp_dev *pdev, | 306 | static int __devinit snd_cs423x_pnp_init_mpu(int dev, struct pnp_dev *pdev) |
337 | struct pnp_resource_table *cfg) | ||
338 | { | 307 | { |
339 | int err; | 308 | if (pnp_activate_dev(pdev) < 0) { |
340 | |||
341 | pnp_init_resource_table(cfg); | ||
342 | if (mpu_port[dev] != SNDRV_AUTO_PORT) | ||
343 | pnp_resource_change(&cfg->port_resource[0], mpu_port[dev], 2); | ||
344 | if (mpu_irq[dev] != SNDRV_AUTO_IRQ && mpu_irq[dev] >= 0) | ||
345 | pnp_resource_change(&cfg->irq_resource[0], mpu_irq[dev], 1); | ||
346 | err = pnp_manual_config_dev(pdev, cfg, 0); | ||
347 | if (err < 0) | ||
348 | snd_printk(KERN_ERR IDENT " MPU401 PnP manual resources are invalid, using auto config\n"); | ||
349 | err = pnp_activate_dev(pdev); | ||
350 | if (err < 0) { | ||
351 | printk(KERN_ERR IDENT " MPU401 PnP configure failed for WSS (out of resources?)\n"); | 309 | printk(KERN_ERR IDENT " MPU401 PnP configure failed for WSS (out of resources?)\n"); |
352 | mpu_port[dev] = SNDRV_AUTO_PORT; | 310 | mpu_port[dev] = SNDRV_AUTO_PORT; |
353 | mpu_irq[dev] = SNDRV_AUTO_IRQ; | 311 | mpu_irq[dev] = SNDRV_AUTO_IRQ; |
@@ -368,15 +326,8 @@ static int __devinit snd_cs423x_pnp_init_mpu(int dev, struct pnp_dev *pdev, | |||
368 | static int __devinit snd_card_cs4232_pnp(int dev, struct snd_card_cs4236 *acard, | 326 | static int __devinit snd_card_cs4232_pnp(int dev, struct snd_card_cs4236 *acard, |
369 | struct pnp_dev *pdev) | 327 | struct pnp_dev *pdev) |
370 | { | 328 | { |
371 | struct pnp_resource_table *cfg = kmalloc(sizeof(*cfg), GFP_KERNEL); | 329 | if (snd_cs423x_pnp_init_wss(dev, acard->wss) < 0) |
372 | |||
373 | if (!cfg) | ||
374 | return -ENOMEM; | ||
375 | if (snd_cs423x_pnp_init_wss(dev, acard->wss, cfg) < 0) { | ||
376 | kfree(cfg); | ||
377 | return -EBUSY; | 330 | return -EBUSY; |
378 | } | ||
379 | kfree(cfg); | ||
380 | cport[dev] = -1; | 331 | cport[dev] = -1; |
381 | return 0; | 332 | return 0; |
382 | } | 333 | } |
@@ -386,43 +337,33 @@ static int __devinit snd_card_cs423x_pnpc(int dev, struct snd_card_cs4236 *acard | |||
386 | struct pnp_card_link *card, | 337 | struct pnp_card_link *card, |
387 | const struct pnp_card_device_id *id) | 338 | const struct pnp_card_device_id *id) |
388 | { | 339 | { |
389 | struct pnp_resource_table *cfg = kmalloc(sizeof(*cfg), GFP_KERNEL); | ||
390 | |||
391 | if (!cfg) | ||
392 | return -ENOMEM; | ||
393 | |||
394 | acard->wss = pnp_request_card_device(card, id->devs[0].id, NULL); | 340 | acard->wss = pnp_request_card_device(card, id->devs[0].id, NULL); |
395 | if (acard->wss == NULL) | 341 | if (acard->wss == NULL) |
396 | goto error; | 342 | return -EBUSY; |
397 | acard->ctrl = pnp_request_card_device(card, id->devs[1].id, NULL); | 343 | acard->ctrl = pnp_request_card_device(card, id->devs[1].id, NULL); |
398 | if (acard->ctrl == NULL) | 344 | if (acard->ctrl == NULL) |
399 | goto error; | 345 | return -EBUSY; |
400 | if (id->devs[2].id[0]) { | 346 | if (id->devs[2].id[0]) { |
401 | acard->mpu = pnp_request_card_device(card, id->devs[2].id, NULL); | 347 | acard->mpu = pnp_request_card_device(card, id->devs[2].id, NULL); |
402 | if (acard->mpu == NULL) | 348 | if (acard->mpu == NULL) |
403 | goto error; | 349 | return -EBUSY; |
404 | } | 350 | } |
405 | 351 | ||
406 | /* WSS initialization */ | 352 | /* WSS initialization */ |
407 | if (snd_cs423x_pnp_init_wss(dev, acard->wss, cfg) < 0) | 353 | if (snd_cs423x_pnp_init_wss(dev, acard->wss) < 0) |
408 | goto error; | 354 | return -EBUSY; |
409 | 355 | ||
410 | /* CTRL initialization */ | 356 | /* CTRL initialization */ |
411 | if (acard->ctrl && cport[dev] > 0) { | 357 | if (acard->ctrl && cport[dev] > 0) { |
412 | if (snd_cs423x_pnp_init_ctrl(dev, acard->ctrl, cfg) < 0) | 358 | if (snd_cs423x_pnp_init_ctrl(dev, acard->ctrl) < 0) |
413 | goto error; | 359 | return -EBUSY; |
414 | } | 360 | } |
415 | /* MPU initialization */ | 361 | /* MPU initialization */ |
416 | if (acard->mpu && mpu_port[dev] > 0) { | 362 | if (acard->mpu && mpu_port[dev] > 0) { |
417 | if (snd_cs423x_pnp_init_mpu(dev, acard->mpu, cfg) < 0) | 363 | if (snd_cs423x_pnp_init_mpu(dev, acard->mpu) < 0) |
418 | goto error; | 364 | return -EBUSY; |
419 | } | 365 | } |
420 | kfree(cfg); | ||
421 | return 0; | 366 | return 0; |
422 | |||
423 | error: | ||
424 | kfree(cfg); | ||
425 | return -EBUSY; | ||
426 | } | 367 | } |
427 | #endif /* CONFIG_PNP */ | 368 | #endif /* CONFIG_PNP */ |
428 | 369 | ||