diff options
Diffstat (limited to 'sound/pci')
40 files changed, 290 insertions, 73 deletions
diff --git a/sound/pci/ad1889.c b/sound/pci/ad1889.c index bba4dae8dcc7..50e30704bf6f 100644 --- a/sound/pci/ad1889.c +++ b/sound/pci/ad1889.c @@ -844,8 +844,8 @@ snd_ad1889_create(struct snd_card *card, struct pci_dev *pci)  }  static int -snd_ad1889_probe(struct pci_dev *pci, -		 const struct pci_device_id *pci_id) +__snd_ad1889_probe(struct pci_dev *pci, +		   const struct pci_device_id *pci_id)  {  	int err;  	static int devno; @@ -904,6 +904,12 @@ snd_ad1889_probe(struct pci_dev *pci,  	return 0;  } +static int snd_ad1889_probe(struct pci_dev *pci, +			    const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_ad1889_probe(pci, pci_id)); +} +  static const struct pci_device_id snd_ad1889_ids[] = {  	{ PCI_DEVICE(PCI_VENDOR_ID_ANALOG_DEVICES, PCI_DEVICE_ID_AD1889JS) },  	{ 0, }, diff --git a/sound/pci/ali5451/ali5451.c b/sound/pci/ali5451/ali5451.c index 92eb59db106d..2378a39abaeb 100644 --- a/sound/pci/ali5451/ali5451.c +++ b/sound/pci/ali5451/ali5451.c @@ -2124,8 +2124,8 @@ static int snd_ali_create(struct snd_card *card,  	return 0;  } -static int snd_ali_probe(struct pci_dev *pci, -			 const struct pci_device_id *pci_id) +static int __snd_ali_probe(struct pci_dev *pci, +			   const struct pci_device_id *pci_id)  {  	struct snd_card *card;  	struct snd_ali *codec; @@ -2170,6 +2170,12 @@ static int snd_ali_probe(struct pci_dev *pci,  	return 0;  } +static int snd_ali_probe(struct pci_dev *pci, +			 const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_ali_probe(pci, pci_id)); +} +  static struct pci_driver ali5451_driver = {  	.name = KBUILD_MODNAME,  	.id_table = snd_ali_ids, diff --git a/sound/pci/als300.c b/sound/pci/als300.c index b86565dcdbe4..c70aff060120 100644 --- a/sound/pci/als300.c +++ b/sound/pci/als300.c @@ -708,7 +708,7 @@ static int snd_als300_probe(struct pci_dev *pci,  	err = snd_als300_create(card, pci, chip_type);  	if (err < 0) -		return err; +		goto error;  	strcpy(card->driver, "ALS300");  	if (chip->chip_type == DEVICE_ALS300_PLUS) @@ -723,11 +723,15 @@ static int snd_als300_probe(struct pci_dev *pci,  	err = snd_card_register(card);  	if (err < 0) -		return err; +		goto error;  	pci_set_drvdata(pci, card);  	dev++;  	return 0; + + error: +	snd_card_free(card); +	return err;  }  static struct pci_driver als300_driver = { diff --git a/sound/pci/als4000.c b/sound/pci/als4000.c index 535eccd124be..f33aeb692a11 100644 --- a/sound/pci/als4000.c +++ b/sound/pci/als4000.c @@ -806,8 +806,8 @@ static void snd_card_als4000_free( struct snd_card *card )  	snd_als4000_free_gameport(acard);  } -static int snd_card_als4000_probe(struct pci_dev *pci, -				  const struct pci_device_id *pci_id) +static int __snd_card_als4000_probe(struct pci_dev *pci, +				    const struct pci_device_id *pci_id)  {  	static int dev;  	struct snd_card *card; @@ -930,6 +930,12 @@ static int snd_card_als4000_probe(struct pci_dev *pci,  	return 0;  } +static int snd_card_als4000_probe(struct pci_dev *pci, +				  const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_card_als4000_probe(pci, pci_id)); +} +  #ifdef CONFIG_PM_SLEEP  static int snd_als4000_suspend(struct device *dev)  { diff --git a/sound/pci/atiixp.c b/sound/pci/atiixp.c index b8e035d5930d..43d01f1847ed 100644 --- a/sound/pci/atiixp.c +++ b/sound/pci/atiixp.c @@ -1572,8 +1572,8 @@ static int snd_atiixp_init(struct snd_card *card, struct pci_dev *pci)  } -static int snd_atiixp_probe(struct pci_dev *pci, -			    const struct pci_device_id *pci_id) +static int __snd_atiixp_probe(struct pci_dev *pci, +			      const struct pci_device_id *pci_id)  {  	struct snd_card *card;  	struct atiixp *chip; @@ -1623,6 +1623,12 @@ static int snd_atiixp_probe(struct pci_dev *pci,  	return 0;  } +static int snd_atiixp_probe(struct pci_dev *pci, +			    const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_atiixp_probe(pci, pci_id)); +} +  static struct pci_driver atiixp_driver = {  	.name = KBUILD_MODNAME,  	.id_table = snd_atiixp_ids, diff --git a/sound/pci/atiixp_modem.c b/sound/pci/atiixp_modem.c index 178dce8ef1e9..8864c4c3c7e1 100644 --- a/sound/pci/atiixp_modem.c +++ b/sound/pci/atiixp_modem.c @@ -1201,8 +1201,8 @@ static int snd_atiixp_init(struct snd_card *card, struct pci_dev *pci)  } -static int snd_atiixp_probe(struct pci_dev *pci, -			    const struct pci_device_id *pci_id) +static int __snd_atiixp_probe(struct pci_dev *pci, +			      const struct pci_device_id *pci_id)  {  	struct snd_card *card;  	struct atiixp_modem *chip; @@ -1247,6 +1247,12 @@ static int snd_atiixp_probe(struct pci_dev *pci,  	return 0;  } +static int snd_atiixp_probe(struct pci_dev *pci, +			    const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_atiixp_probe(pci, pci_id)); +} +  static struct pci_driver atiixp_modem_driver = {  	.name = KBUILD_MODNAME,  	.id_table = snd_atiixp_ids, diff --git a/sound/pci/au88x0/au88x0.c b/sound/pci/au88x0/au88x0.c index 342ef2a6655e..eb234153691b 100644 --- a/sound/pci/au88x0/au88x0.c +++ b/sound/pci/au88x0/au88x0.c @@ -193,7 +193,7 @@ snd_vortex_create(struct snd_card *card, struct pci_dev *pci)  // constructor -- see "Constructor" sub-section  static int -snd_vortex_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) +__snd_vortex_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)  {  	static int dev;  	struct snd_card *card; @@ -310,6 +310,12 @@ snd_vortex_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)  	return 0;  } +static int +snd_vortex_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_vortex_probe(pci, pci_id)); +} +  // pci_driver definition  static struct pci_driver vortex_driver = {  	.name = KBUILD_MODNAME, diff --git a/sound/pci/aw2/aw2-alsa.c b/sound/pci/aw2/aw2-alsa.c index d56f126d6fdd..29a4bcdec237 100644 --- a/sound/pci/aw2/aw2-alsa.c +++ b/sound/pci/aw2/aw2-alsa.c @@ -275,7 +275,7 @@ static int snd_aw2_probe(struct pci_dev *pci,  	/* (3) Create main component */  	err = snd_aw2_create(card, pci);  	if (err < 0) -		return err; +		goto error;  	/* initialize mutex */  	mutex_init(&chip->mtx); @@ -294,13 +294,17 @@ static int snd_aw2_probe(struct pci_dev *pci,  	/* (6) Register card instance */  	err = snd_card_register(card);  	if (err < 0) -		return err; +		goto error;  	/* (7) Set PCI driver data */  	pci_set_drvdata(pci, card);  	dev++;  	return 0; + + error: +	snd_card_free(card); +	return err;  }  /* open callback */ diff --git a/sound/pci/azt3328.c b/sound/pci/azt3328.c index 089050470ff2..7f329dfc5404 100644 --- a/sound/pci/azt3328.c +++ b/sound/pci/azt3328.c @@ -2427,7 +2427,7 @@ snd_azf3328_create(struct snd_card *card,  }  static int -snd_azf3328_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) +__snd_azf3328_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)  {  	static int dev;  	struct snd_card *card; @@ -2520,6 +2520,12 @@ snd_azf3328_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)  	return 0;  } +static int +snd_azf3328_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_azf3328_probe(pci, pci_id)); +} +  #ifdef CONFIG_PM_SLEEP  static inline void  snd_azf3328_suspend_regs(const struct snd_azf3328 *chip, diff --git a/sound/pci/bt87x.c b/sound/pci/bt87x.c index d23f93163841..621985bfee5d 100644 --- a/sound/pci/bt87x.c +++ b/sound/pci/bt87x.c @@ -805,8 +805,8 @@ static int snd_bt87x_detect_card(struct pci_dev *pci)  	return SND_BT87X_BOARD_UNKNOWN;  } -static int snd_bt87x_probe(struct pci_dev *pci, -			   const struct pci_device_id *pci_id) +static int __snd_bt87x_probe(struct pci_dev *pci, +			     const struct pci_device_id *pci_id)  {  	static int dev;  	struct snd_card *card; @@ -889,6 +889,12 @@ static int snd_bt87x_probe(struct pci_dev *pci,  	return 0;  } +static int snd_bt87x_probe(struct pci_dev *pci, +			   const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_bt87x_probe(pci, pci_id)); +} +  /* default entries for all Bt87x cards - it's not exported */  /* driver_data is set to 0 to call detection */  static const struct pci_device_id snd_bt87x_default_ids[] = { diff --git a/sound/pci/ca0106/ca0106_main.c b/sound/pci/ca0106/ca0106_main.c index 8577f9fa5ea6..cf1bac7a435f 100644 --- a/sound/pci/ca0106/ca0106_main.c +++ b/sound/pci/ca0106/ca0106_main.c @@ -1725,8 +1725,8 @@ static int snd_ca0106_midi(struct snd_ca0106 *chip, unsigned int channel)  } -static int snd_ca0106_probe(struct pci_dev *pci, -					const struct pci_device_id *pci_id) +static int __snd_ca0106_probe(struct pci_dev *pci, +			      const struct pci_device_id *pci_id)  {  	static int dev;  	struct snd_card *card; @@ -1786,6 +1786,12 @@ static int snd_ca0106_probe(struct pci_dev *pci,  	return 0;  } +static int snd_ca0106_probe(struct pci_dev *pci, +			    const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_ca0106_probe(pci, pci_id)); +} +  #ifdef CONFIG_PM_SLEEP  static int snd_ca0106_suspend(struct device *dev)  { diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c index dab801d9d3b4..727db6d43391 100644 --- a/sound/pci/cmipci.c +++ b/sound/pci/cmipci.c @@ -3247,15 +3247,19 @@ static int snd_cmipci_probe(struct pci_dev *pci,  	err = snd_cmipci_create(card, pci, dev);  	if (err < 0) -		return err; +		goto error;  	err = snd_card_register(card);  	if (err < 0) -		return err; +		goto error;  	pci_set_drvdata(pci, card);  	dev++;  	return 0; + + error: +	snd_card_free(card); +	return err;  }  #ifdef CONFIG_PM_SLEEP diff --git a/sound/pci/cs4281.c b/sound/pci/cs4281.c index e7367402b84a..0c9cadf7b3b8 100644 --- a/sound/pci/cs4281.c +++ b/sound/pci/cs4281.c @@ -1827,8 +1827,8 @@ static void snd_cs4281_opl3_command(struct snd_opl3 *opl3, unsigned short cmd,  	spin_unlock_irqrestore(&opl3->reg_lock, flags);  } -static int snd_cs4281_probe(struct pci_dev *pci, -			    const struct pci_device_id *pci_id) +static int __snd_cs4281_probe(struct pci_dev *pci, +			      const struct pci_device_id *pci_id)  {  	static int dev;  	struct snd_card *card; @@ -1888,6 +1888,12 @@ static int snd_cs4281_probe(struct pci_dev *pci,  	return 0;  } +static int snd_cs4281_probe(struct pci_dev *pci, +			    const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_cs4281_probe(pci, pci_id)); +} +  /*   * Power Management   */ diff --git a/sound/pci/cs5535audio/cs5535audio.c b/sound/pci/cs5535audio/cs5535audio.c index 499fa0148f9a..440b8f9b40c9 100644 --- a/sound/pci/cs5535audio/cs5535audio.c +++ b/sound/pci/cs5535audio/cs5535audio.c @@ -281,8 +281,8 @@ static int snd_cs5535audio_create(struct snd_card *card,  	return 0;  } -static int snd_cs5535audio_probe(struct pci_dev *pci, -				 const struct pci_device_id *pci_id) +static int __snd_cs5535audio_probe(struct pci_dev *pci, +				   const struct pci_device_id *pci_id)  {  	static int dev;  	struct snd_card *card; @@ -331,6 +331,12 @@ static int snd_cs5535audio_probe(struct pci_dev *pci,  	return 0;  } +static int snd_cs5535audio_probe(struct pci_dev *pci, +				 const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_cs5535audio_probe(pci, pci_id)); +} +  static struct pci_driver cs5535audio_driver = {  	.name = KBUILD_MODNAME,  	.id_table = snd_cs5535audio_ids, diff --git a/sound/pci/echoaudio/echoaudio.c b/sound/pci/echoaudio/echoaudio.c index 25b012ef5c3e..c70c3ac4e99a 100644 --- a/sound/pci/echoaudio/echoaudio.c +++ b/sound/pci/echoaudio/echoaudio.c @@ -1970,8 +1970,8 @@ static int snd_echo_create(struct snd_card *card,  }  /* constructor */ -static int snd_echo_probe(struct pci_dev *pci, -			  const struct pci_device_id *pci_id) +static int __snd_echo_probe(struct pci_dev *pci, +			    const struct pci_device_id *pci_id)  {  	static int dev;  	struct snd_card *card; @@ -2139,6 +2139,11 @@ static int snd_echo_probe(struct pci_dev *pci,  	return 0;  } +static int snd_echo_probe(struct pci_dev *pci, +			  const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_echo_probe(pci, pci_id)); +}  #if defined(CONFIG_PM_SLEEP) diff --git a/sound/pci/emu10k1/emu10k1x.c b/sound/pci/emu10k1/emu10k1x.c index c49c44dc1082..89043392f3ec 100644 --- a/sound/pci/emu10k1/emu10k1x.c +++ b/sound/pci/emu10k1/emu10k1x.c @@ -1491,8 +1491,8 @@ static int snd_emu10k1x_midi(struct emu10k1x *emu)  	return 0;  } -static int snd_emu10k1x_probe(struct pci_dev *pci, -			      const struct pci_device_id *pci_id) +static int __snd_emu10k1x_probe(struct pci_dev *pci, +				const struct pci_device_id *pci_id)  {  	static int dev;  	struct snd_card *card; @@ -1554,6 +1554,12 @@ static int snd_emu10k1x_probe(struct pci_dev *pci,  	return 0;  } +static int snd_emu10k1x_probe(struct pci_dev *pci, +			      const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_emu10k1x_probe(pci, pci_id)); +} +  // PCI IDs  static const struct pci_device_id snd_emu10k1x_ids[] = {  	{ PCI_VDEVICE(CREATIVE, 0x0006), 0 },	/* Dell OEM version (EMU10K1) */ diff --git a/sound/pci/ens1370.c b/sound/pci/ens1370.c index 2651f0c64c06..94efe347a97a 100644 --- a/sound/pci/ens1370.c +++ b/sound/pci/ens1370.c @@ -2304,8 +2304,8 @@ static irqreturn_t snd_audiopci_interrupt(int irq, void *dev_id)  	return IRQ_HANDLED;  } -static int snd_audiopci_probe(struct pci_dev *pci, -			      const struct pci_device_id *pci_id) +static int __snd_audiopci_probe(struct pci_dev *pci, +				const struct pci_device_id *pci_id)  {  	static int dev;  	struct snd_card *card; @@ -2369,6 +2369,12 @@ static int snd_audiopci_probe(struct pci_dev *pci,  	return 0;  } +static int snd_audiopci_probe(struct pci_dev *pci, +			      const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_audiopci_probe(pci, pci_id)); +} +  static struct pci_driver ens137x_driver = {  	.name = KBUILD_MODNAME,  	.id_table = snd_audiopci_ids, diff --git a/sound/pci/es1938.c b/sound/pci/es1938.c index 00b976f42a3d..e34ec6f89e7e 100644 --- a/sound/pci/es1938.c +++ b/sound/pci/es1938.c @@ -1716,8 +1716,8 @@ static int snd_es1938_mixer(struct es1938 *chip)  } -static int snd_es1938_probe(struct pci_dev *pci, -			    const struct pci_device_id *pci_id) +static int __snd_es1938_probe(struct pci_dev *pci, +			      const struct pci_device_id *pci_id)  {  	static int dev;  	struct snd_card *card; @@ -1796,6 +1796,12 @@ static int snd_es1938_probe(struct pci_dev *pci,  	return 0;  } +static int snd_es1938_probe(struct pci_dev *pci, +			    const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_es1938_probe(pci, pci_id)); +} +  static struct pci_driver es1938_driver = {  	.name = KBUILD_MODNAME,  	.id_table = snd_es1938_ids, diff --git a/sound/pci/es1968.c b/sound/pci/es1968.c index 6a8a02a9ecf4..4a7e20bb11bc 100644 --- a/sound/pci/es1968.c +++ b/sound/pci/es1968.c @@ -2741,8 +2741,8 @@ static int snd_es1968_create(struct snd_card *card,  /*   */ -static int snd_es1968_probe(struct pci_dev *pci, -			    const struct pci_device_id *pci_id) +static int __snd_es1968_probe(struct pci_dev *pci, +			      const struct pci_device_id *pci_id)  {  	static int dev;  	struct snd_card *card; @@ -2848,6 +2848,12 @@ static int snd_es1968_probe(struct pci_dev *pci,  	return 0;  } +static int snd_es1968_probe(struct pci_dev *pci, +			    const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_es1968_probe(pci, pci_id)); +} +  static struct pci_driver es1968_driver = {  	.name = KBUILD_MODNAME,  	.id_table = snd_es1968_ids, diff --git a/sound/pci/fm801.c b/sound/pci/fm801.c index 9c22ff19e56d..62b3cb126c6d 100644 --- a/sound/pci/fm801.c +++ b/sound/pci/fm801.c @@ -1268,8 +1268,8 @@ static int snd_fm801_create(struct snd_card *card,  	return 0;  } -static int snd_card_fm801_probe(struct pci_dev *pci, -				const struct pci_device_id *pci_id) +static int __snd_card_fm801_probe(struct pci_dev *pci, +				  const struct pci_device_id *pci_id)  {  	static int dev;  	struct snd_card *card; @@ -1333,6 +1333,12 @@ static int snd_card_fm801_probe(struct pci_dev *pci,  	return 0;  } +static int snd_card_fm801_probe(struct pci_dev *pci, +				const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_card_fm801_probe(pci, pci_id)); +} +  #ifdef CONFIG_PM_SLEEP  static const unsigned char saved_regs[] = {  	FM801_PCM_VOL, FM801_I2S_VOL, FM801_FM_VOL, FM801_REC_SRC, diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 4e12af24b4d3..62fbf3772b41 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -2619,6 +2619,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {  	SND_PCI_QUIRK(0x1558, 0x65e1, "Clevo PB51[ED][DF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),  	SND_PCI_QUIRK(0x1558, 0x65e5, "Clevo PC50D[PRS](?:-D|-G)?", ALC1220_FIXUP_CLEVO_PB51ED_PINS),  	SND_PCI_QUIRK(0x1558, 0x65f1, "Clevo PC50HS", ALC1220_FIXUP_CLEVO_PB51ED_PINS), +	SND_PCI_QUIRK(0x1558, 0x65f5, "Clevo PD50PN[NRT]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),  	SND_PCI_QUIRK(0x1558, 0x67d1, "Clevo PB71[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),  	SND_PCI_QUIRK(0x1558, 0x67e1, "Clevo PB71[DE][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),  	SND_PCI_QUIRK(0x1558, 0x67e5, "Clevo PC70D[PRS](?:-D|-G)?", ALC1220_FIXUP_CLEVO_PB51ED_PINS), @@ -9264,6 +9265,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {  	SND_PCI_QUIRK(0x17aa, 0x505d, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),  	SND_PCI_QUIRK(0x17aa, 0x505f, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),  	SND_PCI_QUIRK(0x17aa, 0x5062, "Thinkpad", ALC298_FIXUP_TPT470_DOCK), +	SND_PCI_QUIRK(0x17aa, 0x508b, "Thinkpad X12 Gen 1", ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS),  	SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),  	SND_PCI_QUIRK(0x17aa, 0x511e, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),  	SND_PCI_QUIRK(0x17aa, 0x511f, "Thinkpad", ALC298_FIXUP_TPT470_DOCK), diff --git a/sound/pci/ice1712/ice1724.c b/sound/pci/ice1712/ice1724.c index f6275868877a..6fab2ad85bbe 100644 --- a/sound/pci/ice1712/ice1724.c +++ b/sound/pci/ice1712/ice1724.c @@ -2519,8 +2519,8 @@ static int snd_vt1724_create(struct snd_card *card,   *   */ -static int snd_vt1724_probe(struct pci_dev *pci, -			    const struct pci_device_id *pci_id) +static int __snd_vt1724_probe(struct pci_dev *pci, +			      const struct pci_device_id *pci_id)  {  	static int dev;  	struct snd_card *card; @@ -2662,6 +2662,12 @@ static int snd_vt1724_probe(struct pci_dev *pci,  	return 0;  } +static int snd_vt1724_probe(struct pci_dev *pci, +			    const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_vt1724_probe(pci, pci_id)); +} +  #ifdef CONFIG_PM_SLEEP  static int snd_vt1724_suspend(struct device *dev)  { diff --git a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c index a51032b3ac4d..ae285c0a629c 100644 --- a/sound/pci/intel8x0.c +++ b/sound/pci/intel8x0.c @@ -3109,8 +3109,8 @@ static int check_default_spdif_aclink(struct pci_dev *pci)  	return 0;  } -static int snd_intel8x0_probe(struct pci_dev *pci, -			      const struct pci_device_id *pci_id) +static int __snd_intel8x0_probe(struct pci_dev *pci, +				const struct pci_device_id *pci_id)  {  	struct snd_card *card;  	struct intel8x0 *chip; @@ -3189,6 +3189,12 @@ static int snd_intel8x0_probe(struct pci_dev *pci,  	return 0;  } +static int snd_intel8x0_probe(struct pci_dev *pci, +			      const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_intel8x0_probe(pci, pci_id)); +} +  static struct pci_driver intel8x0_driver = {  	.name = KBUILD_MODNAME,  	.id_table = snd_intel8x0_ids, diff --git a/sound/pci/intel8x0m.c b/sound/pci/intel8x0m.c index 7de3cb2f17b5..2845cc006d0c 100644 --- a/sound/pci/intel8x0m.c +++ b/sound/pci/intel8x0m.c @@ -1178,8 +1178,8 @@ static struct shortname_table {  	{ 0 },  }; -static int snd_intel8x0m_probe(struct pci_dev *pci, -			       const struct pci_device_id *pci_id) +static int __snd_intel8x0m_probe(struct pci_dev *pci, +				 const struct pci_device_id *pci_id)  {  	struct snd_card *card;  	struct intel8x0m *chip; @@ -1225,6 +1225,12 @@ static int snd_intel8x0m_probe(struct pci_dev *pci,  	return 0;  } +static int snd_intel8x0m_probe(struct pci_dev *pci, +			       const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_intel8x0m_probe(pci, pci_id)); +} +  static struct pci_driver intel8x0m_driver = {  	.name = KBUILD_MODNAME,  	.id_table = snd_intel8x0m_ids, diff --git a/sound/pci/korg1212/korg1212.c b/sound/pci/korg1212/korg1212.c index 5c9e240ff6a9..33b4f95d65b3 100644 --- a/sound/pci/korg1212/korg1212.c +++ b/sound/pci/korg1212/korg1212.c @@ -2355,7 +2355,7 @@ snd_korg1212_probe(struct pci_dev *pci,  	err = snd_korg1212_create(card, pci);  	if (err < 0) -		return err; +		goto error;  	strcpy(card->driver, "korg1212");  	strcpy(card->shortname, "korg1212"); @@ -2366,10 +2366,14 @@ snd_korg1212_probe(struct pci_dev *pci,  	err = snd_card_register(card);  	if (err < 0) -		return err; +		goto error;  	pci_set_drvdata(pci, card);  	dev++;  	return 0; + + error: +	snd_card_free(card); +	return err;  }  static struct pci_driver korg1212_driver = { diff --git a/sound/pci/lola/lola.c b/sound/pci/lola/lola.c index 5269a1d396a5..1aa30e90b86a 100644 --- a/sound/pci/lola/lola.c +++ b/sound/pci/lola/lola.c @@ -637,8 +637,8 @@ static int lola_create(struct snd_card *card, struct pci_dev *pci, int dev)  	return 0;  } -static int lola_probe(struct pci_dev *pci, -		      const struct pci_device_id *pci_id) +static int __lola_probe(struct pci_dev *pci, +			const struct pci_device_id *pci_id)  {  	static int dev;  	struct snd_card *card; @@ -687,6 +687,12 @@ static int lola_probe(struct pci_dev *pci,  	return 0;  } +static int lola_probe(struct pci_dev *pci, +		      const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __lola_probe(pci, pci_id)); +} +  /* PCI IDs */  static const struct pci_device_id lola_ids[] = {  	{ PCI_VDEVICE(DIGIGRAM, 0x0001) }, diff --git a/sound/pci/lx6464es/lx6464es.c b/sound/pci/lx6464es/lx6464es.c index 168a1084f730..bd9b6148dd6f 100644 --- a/sound/pci/lx6464es/lx6464es.c +++ b/sound/pci/lx6464es/lx6464es.c @@ -1019,7 +1019,7 @@ static int snd_lx6464es_probe(struct pci_dev *pci,  	err = snd_lx6464es_create(card, pci);  	if (err < 0) {  		dev_err(card->dev, "error during snd_lx6464es_create\n"); -		return err; +		goto error;  	}  	strcpy(card->driver, "LX6464ES"); @@ -1036,12 +1036,16 @@ static int snd_lx6464es_probe(struct pci_dev *pci,  	err = snd_card_register(card);  	if (err < 0) -		return err; +		goto error;  	dev_dbg(chip->card->dev, "initialization successful\n");  	pci_set_drvdata(pci, card);  	dev++;  	return 0; + + error: +	snd_card_free(card); +	return err;  }  static struct pci_driver lx6464es_driver = { diff --git a/sound/pci/maestro3.c b/sound/pci/maestro3.c index 056838ead21d..261850775c80 100644 --- a/sound/pci/maestro3.c +++ b/sound/pci/maestro3.c @@ -2637,7 +2637,7 @@ snd_m3_create(struct snd_card *card, struct pci_dev *pci,  /*   */  static int -snd_m3_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) +__snd_m3_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)  {  	static int dev;  	struct snd_card *card; @@ -2702,6 +2702,12 @@ snd_m3_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)  	return 0;  } +static int +snd_m3_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_m3_probe(pci, pci_id)); +} +  static struct pci_driver m3_driver = {  	.name = KBUILD_MODNAME,  	.id_table = snd_m3_ids, diff --git a/sound/pci/nm256/nm256.c b/sound/pci/nm256/nm256.c index c9c178504959..f99a1e96e923 100644 --- a/sound/pci/nm256/nm256.c +++ b/sound/pci/nm256/nm256.c @@ -1573,7 +1573,6 @@ snd_nm256_create(struct snd_card *card, struct pci_dev *pci)  	chip->coeffs_current = 0;  	snd_nm256_init_chip(chip); -	card->private_free = snd_nm256_free;  	// pci_set_master(pci); /* needed? */  	return 0; @@ -1680,6 +1679,7 @@ static int snd_nm256_probe(struct pci_dev *pci,  	err = snd_card_register(card);  	if (err < 0)  		return err; +	card->private_free = snd_nm256_free;  	pci_set_drvdata(pci, card);  	return 0; diff --git a/sound/pci/oxygen/oxygen_lib.c b/sound/pci/oxygen/oxygen_lib.c index 4fb3f2484fdb..92ffe9dc20c5 100644 --- a/sound/pci/oxygen/oxygen_lib.c +++ b/sound/pci/oxygen/oxygen_lib.c @@ -576,7 +576,7 @@ static void oxygen_card_free(struct snd_card *card)  	mutex_destroy(&chip->mutex);  } -int oxygen_pci_probe(struct pci_dev *pci, int index, char *id, +static int __oxygen_pci_probe(struct pci_dev *pci, int index, char *id,  		     struct module *owner,  		     const struct pci_device_id *ids,  		     int (*get_model)(struct oxygen *chip, @@ -701,6 +701,16 @@ int oxygen_pci_probe(struct pci_dev *pci, int index, char *id,  	pci_set_drvdata(pci, card);  	return 0;  } + +int oxygen_pci_probe(struct pci_dev *pci, int index, char *id, +		     struct module *owner, +		     const struct pci_device_id *ids, +		     int (*get_model)(struct oxygen *chip, +				      const struct pci_device_id *id)) +{ +	return snd_card_free_on_error(&pci->dev, +				      __oxygen_pci_probe(pci, index, id, owner, ids, get_model)); +}  EXPORT_SYMBOL(oxygen_pci_probe);  #ifdef CONFIG_PM_SLEEP diff --git a/sound/pci/riptide/riptide.c b/sound/pci/riptide/riptide.c index 5a987c683c41..b37c877c2c16 100644 --- a/sound/pci/riptide/riptide.c +++ b/sound/pci/riptide/riptide.c @@ -2023,7 +2023,7 @@ static void snd_riptide_joystick_remove(struct pci_dev *pci)  #endif  static int -snd_card_riptide_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) +__snd_card_riptide_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)  {  	static int dev;  	struct snd_card *card; @@ -2124,6 +2124,12 @@ snd_card_riptide_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)  	return 0;  } +static int +snd_card_riptide_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_card_riptide_probe(pci, pci_id)); +} +  static struct pci_driver driver = {  	.name = KBUILD_MODNAME,  	.id_table = snd_riptide_ids, diff --git a/sound/pci/rme32.c b/sound/pci/rme32.c index 5b6bd9f0b2f7..9c0ac025e143 100644 --- a/sound/pci/rme32.c +++ b/sound/pci/rme32.c @@ -1875,7 +1875,7 @@ static void snd_rme32_card_free(struct snd_card *card)  }  static int -snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) +__snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)  {  	static int dev;  	struct rme32 *rme32; @@ -1927,6 +1927,12 @@ snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)  	return 0;  } +static int +snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_rme32_probe(pci, pci_id)); +} +  static struct pci_driver rme32_driver = {  	.name =		KBUILD_MODNAME,  	.id_table =	snd_rme32_ids, diff --git a/sound/pci/rme96.c b/sound/pci/rme96.c index 8fc811504920..bccb7e0d3d11 100644 --- a/sound/pci/rme96.c +++ b/sound/pci/rme96.c @@ -2430,8 +2430,8 @@ static void snd_rme96_card_free(struct snd_card *card)  }  static int -snd_rme96_probe(struct pci_dev *pci, -		const struct pci_device_id *pci_id) +__snd_rme96_probe(struct pci_dev *pci, +		  const struct pci_device_id *pci_id)  {  	static int dev;  	struct rme96 *rme96; @@ -2498,6 +2498,12 @@ snd_rme96_probe(struct pci_dev *pci,  	return 0;  } +static int snd_rme96_probe(struct pci_dev *pci, +			   const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_rme96_probe(pci, pci_id)); +} +  static struct pci_driver rme96_driver = {  	.name = KBUILD_MODNAME,  	.id_table = snd_rme96_ids, diff --git a/sound/pci/rme9652/hdsp.c b/sound/pci/rme9652/hdsp.c index 96c12dfb24cf..3db641318d3a 100644 --- a/sound/pci/rme9652/hdsp.c +++ b/sound/pci/rme9652/hdsp.c @@ -5444,17 +5444,21 @@ static int snd_hdsp_probe(struct pci_dev *pci,  	hdsp->pci = pci;  	err = snd_hdsp_create(card, hdsp);  	if (err) -		return err; +		goto error;  	strcpy(card->shortname, "Hammerfall DSP");  	sprintf(card->longname, "%s at 0x%lx, irq %d", hdsp->card_name,  		hdsp->port, hdsp->irq);  	err = snd_card_register(card);  	if (err) -		return err; +		goto error;  	pci_set_drvdata(pci, card);  	dev++;  	return 0; + + error: +	snd_card_free(card); +	return err;  }  static struct pci_driver hdsp_driver = { diff --git a/sound/pci/rme9652/hdspm.c b/sound/pci/rme9652/hdspm.c index ff06ee82607c..fa1812e7a49d 100644 --- a/sound/pci/rme9652/hdspm.c +++ b/sound/pci/rme9652/hdspm.c @@ -6895,7 +6895,7 @@ static int snd_hdspm_probe(struct pci_dev *pci,  	err = snd_hdspm_create(card, hdspm);  	if (err < 0) -		return err; +		goto error;  	if (hdspm->io_type != MADIface) {  		snprintf(card->shortname, sizeof(card->shortname), "%s_%x", @@ -6914,12 +6914,16 @@ static int snd_hdspm_probe(struct pci_dev *pci,  	err = snd_card_register(card);  	if (err < 0) -		return err; +		goto error;  	pci_set_drvdata(pci, card);  	dev++;  	return 0; + + error: +	snd_card_free(card); +	return err;  }  static struct pci_driver hdspm_driver = { diff --git a/sound/pci/rme9652/rme9652.c b/sound/pci/rme9652/rme9652.c index 7755e19aa776..1d614fe89a6a 100644 --- a/sound/pci/rme9652/rme9652.c +++ b/sound/pci/rme9652/rme9652.c @@ -2572,7 +2572,7 @@ static int snd_rme9652_probe(struct pci_dev *pci,  	rme9652->pci = pci;  	err = snd_rme9652_create(card, rme9652, precise_ptr[dev]);  	if (err) -		return err; +		goto error;  	strcpy(card->shortname, rme9652->card_name); @@ -2580,10 +2580,14 @@ static int snd_rme9652_probe(struct pci_dev *pci,  		card->shortname, rme9652->port, rme9652->irq);  	err = snd_card_register(card);  	if (err) -		return err; +		goto error;  	pci_set_drvdata(pci, card);  	dev++;  	return 0; + + error: +	snd_card_free(card); +	return err;  }  static struct pci_driver rme9652_driver = { diff --git a/sound/pci/sis7019.c b/sound/pci/sis7019.c index 0b722b0e0604..fabe393607f8 100644 --- a/sound/pci/sis7019.c +++ b/sound/pci/sis7019.c @@ -1331,8 +1331,8 @@ static int sis_chip_create(struct snd_card *card,  	return 0;  } -static int snd_sis7019_probe(struct pci_dev *pci, -			     const struct pci_device_id *pci_id) +static int __snd_sis7019_probe(struct pci_dev *pci, +			       const struct pci_device_id *pci_id)  {  	struct snd_card *card;  	struct sis7019 *sis; @@ -1352,8 +1352,8 @@ static int snd_sis7019_probe(struct pci_dev *pci,  	if (!codecs)  		codecs = SIS_PRIMARY_CODEC_PRESENT; -	rc = snd_card_new(&pci->dev, index, id, THIS_MODULE, -			  sizeof(*sis), &card); +	rc = snd_devm_card_new(&pci->dev, index, id, THIS_MODULE, +			       sizeof(*sis), &card);  	if (rc < 0)  		return rc; @@ -1386,6 +1386,12 @@ static int snd_sis7019_probe(struct pci_dev *pci,  	return 0;  } +static int snd_sis7019_probe(struct pci_dev *pci, +			     const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_sis7019_probe(pci, pci_id)); +} +  static struct pci_driver sis7019_driver = {  	.name = KBUILD_MODNAME,  	.id_table = snd_sis7019_ids, diff --git a/sound/pci/sonicvibes.c b/sound/pci/sonicvibes.c index c8c49881008f..f91cbf6eeca0 100644 --- a/sound/pci/sonicvibes.c +++ b/sound/pci/sonicvibes.c @@ -1387,8 +1387,8 @@ static int snd_sonicvibes_midi(struct sonicvibes *sonic,  	return 0;  } -static int snd_sonic_probe(struct pci_dev *pci, -			   const struct pci_device_id *pci_id) +static int __snd_sonic_probe(struct pci_dev *pci, +			     const struct pci_device_id *pci_id)  {  	static int dev;  	struct snd_card *card; @@ -1459,6 +1459,12 @@ static int snd_sonic_probe(struct pci_dev *pci,  	return 0;  } +static int snd_sonic_probe(struct pci_dev *pci, +			   const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_sonic_probe(pci, pci_id)); +} +  static struct pci_driver sonicvibes_driver = {  	.name = KBUILD_MODNAME,  	.id_table = snd_sonic_ids, diff --git a/sound/pci/via82xx.c b/sound/pci/via82xx.c index 65514f7e42d7..361b83fd721e 100644 --- a/sound/pci/via82xx.c +++ b/sound/pci/via82xx.c @@ -2458,8 +2458,8 @@ static int check_dxs_list(struct pci_dev *pci, int revision)  	return VIA_DXS_48K;  }; -static int snd_via82xx_probe(struct pci_dev *pci, -			     const struct pci_device_id *pci_id) +static int __snd_via82xx_probe(struct pci_dev *pci, +			       const struct pci_device_id *pci_id)  {  	struct snd_card *card;  	struct via82xx *chip; @@ -2569,6 +2569,12 @@ static int snd_via82xx_probe(struct pci_dev *pci,  	return 0;  } +static int snd_via82xx_probe(struct pci_dev *pci, +			     const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_via82xx_probe(pci, pci_id)); +} +  static struct pci_driver via82xx_driver = {  	.name = KBUILD_MODNAME,  	.id_table = snd_via82xx_ids, diff --git a/sound/pci/via82xx_modem.c b/sound/pci/via82xx_modem.c index 234f7fbed236..ca7f024bf8ec 100644 --- a/sound/pci/via82xx_modem.c +++ b/sound/pci/via82xx_modem.c @@ -1103,8 +1103,8 @@ static int snd_via82xx_create(struct snd_card *card,  } -static int snd_via82xx_probe(struct pci_dev *pci, -			     const struct pci_device_id *pci_id) +static int __snd_via82xx_probe(struct pci_dev *pci, +			       const struct pci_device_id *pci_id)  {  	struct snd_card *card;  	struct via82xx_modem *chip; @@ -1157,6 +1157,12 @@ static int snd_via82xx_probe(struct pci_dev *pci,  	return 0;  } +static int snd_via82xx_probe(struct pci_dev *pci, +			     const struct pci_device_id *pci_id) +{ +	return snd_card_free_on_error(&pci->dev, __snd_via82xx_probe(pci, pci_id)); +} +  static struct pci_driver via82xx_modem_driver = {  	.name = KBUILD_MODNAME,  	.id_table = snd_via82xx_modem_ids,  | 
