Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ALSA: cmi8328: Allocate resources with device-managed APIs

This patch converts the resource management in ISA cmi8328 driver with
devres as a clean up. Each manual resource management is converted
with the corresponding devres helper.

This should give no user-visible functional changes.

Link: https://lore.kernel.org/r/20210715075941.23332-60-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>

+10 -21
+10 -21
sound/isa/cmi8328.c
··· 294 294 } 295 295 outb(val, port); 296 296 297 - err = snd_card_new(pdev, index[ndev], id[ndev], THIS_MODULE, 298 - sizeof(struct snd_cmi8328), &card); 297 + err = snd_devm_card_new(pdev, index[ndev], id[ndev], THIS_MODULE, 298 + sizeof(struct snd_cmi8328), &card); 299 299 if (err < 0) 300 300 return err; 301 301 cmi = card->private_data; ··· 306 306 err = snd_wss_create(card, port + 4, -1, irq[ndev], dma1[ndev], 307 307 dma2[ndev], WSS_HW_DETECT, 0, &cmi->wss); 308 308 if (err < 0) 309 - goto error; 309 + return err; 310 310 311 311 err = snd_wss_pcm(cmi->wss, 0); 312 312 if (err < 0) 313 - goto error; 313 + return err; 314 314 315 315 err = snd_wss_mixer(cmi->wss); 316 316 if (err < 0) 317 - goto error; 317 + return err; 318 318 err = snd_cmi8328_mixer(cmi->wss); 319 319 if (err < 0) 320 - goto error; 320 + return err; 321 321 322 322 if (snd_wss_timer(cmi->wss, 0) < 0) 323 323 snd_printk(KERN_WARNING "error initializing WSS timer\n"); ··· 371 371 dev_set_drvdata(pdev, card); 372 372 err = snd_card_register(card); 373 373 if (err < 0) 374 - goto error; 374 + return err; 375 375 #ifdef SUPPORT_JOYSTICK 376 376 if (!gameport[ndev]) 377 377 return 0; 378 378 /* gameport is hardwired to 0x200 */ 379 - res = request_region(0x200, 8, "CMI8328 gameport"); 379 + res = devm_request_region(pdev, 0x200, 8, "CMI8328 gameport"); 380 380 if (!res) 381 381 snd_printk(KERN_WARNING "unable to allocate gameport I/O port\n"); 382 382 else { 383 383 struct gameport *gp = cmi->gameport = gameport_allocate_port(); 384 - if (!cmi->gameport) 385 - release_and_free_resource(res); 386 - else { 384 + if (cmi->gameport) { 387 385 gameport_set_name(gp, "CMI8328 Gameport"); 388 386 gameport_set_phys(gp, "%s/gameport0", dev_name(pdev)); 389 387 gameport_set_dev_parent(gp, pdev); 390 388 gp->io = 0x200; 391 - gameport_set_port_data(gp, res); 392 389 /* Enable gameport */ 393 390 snd_cmi8328_cfg_write(port, CFG1, 394 391 CFG1_SB_DISABLE | CFG1_GAMEPORT); ··· 394 397 } 395 398 #endif 396 399 return 0; 397 - error: 398 - snd_card_free(card); 399 - 400 - return err; 401 400 } 402 401 403 402 static void snd_cmi8328_remove(struct device *pdev, unsigned int dev) ··· 402 409 struct snd_cmi8328 *cmi = card->private_data; 403 410 404 411 #ifdef SUPPORT_JOYSTICK 405 - if (cmi->gameport) { 406 - struct resource *res = gameport_get_port_data(cmi->gameport); 412 + if (cmi->gameport) 407 413 gameport_unregister_port(cmi->gameport); 408 - release_and_free_resource(res); 409 - } 410 414 #endif 411 415 /* disable everything */ 412 416 snd_cmi8328_cfg_write(cmi->port, CFG1, CFG1_SB_DISABLE); 413 417 snd_cmi8328_cfg_write(cmi->port, CFG2, 0); 414 418 snd_cmi8328_cfg_write(cmi->port, CFG3, 0); 415 - snd_card_free(card); 416 419 } 417 420 418 421 #ifdef CONFIG_PM