Skip to content

Commit 43bcd97

Browse files
tiwaiJaroslav Kysela
authored andcommitted
[ALSA] Add snd_card_set_generic_dev() call to ISA drivers
ISA,CMI8330 driver,ES18xx driver,OPL3SA2 driver,Sound Galaxy driver Sound Scape driver,AD1848 driver,CS4231 driver,CS4236+ driver ES1688 driver,GUS Classic driver,GUS Extreme driver,GUS MAX driver AMD InterWave driver,Opti9xx drivers,SB16/AWE driver,SB8 driver Wavefront drivers - Added snd_card_set_generic_dev() call. - Added SND_GENERIC_DRIVER to Kconfig. - Clean up the error path in probe if necessary. Signed-off-by: Takashi Iwai <tiwai@suse.de>
1 parent 16dab54 commit 43bcd97

File tree

18 files changed

+587
-648
lines changed

18 files changed

+587
-648
lines changed

sound/isa/Kconfig

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ menu "ISA devices"
66
config SND_AD1848_LIB
77
tristate
88
select SND_PCM
9-
select SND_GENERIC_PM
9+
select SND_GENERIC_DRIVER
1010

1111
config SND_CS4231_LIB
1212
tristate
1313
select SND_PCM
14-
select SND_GENERIC_PM
14+
select SND_GENERIC_DRIVER
1515

1616
config SND_AD1816A
1717
tristate "Analog Devices SoundPort AD1816A"
@@ -97,6 +97,7 @@ config SND_ES1688
9797
select SND_OPL3_LIB
9898
select SND_MPU401_UART
9999
select SND_PCM
100+
select SND_GENERIC_DRIVER
100101
help
101102
Say Y here to include support for ESS AudioDrive ES688 or
102103
ES1688 chips.
@@ -110,7 +111,7 @@ config SND_ES18XX
110111
select SND_OPL3_LIB
111112
select SND_MPU401_UART
112113
select SND_PCM
113-
select SND_GENERIC_PM
114+
select SND_GENERIC_DRIVER
114115
help
115116
Say Y here to include support for ESS AudioDrive ES18xx chips.
116117

@@ -126,6 +127,7 @@ config SND_GUSCLASSIC
126127
select SND_RAWMIDI
127128
select SND_PCM
128129
select SND_GUS_SYNTH
130+
select SND_GENERIC_DRIVER
129131
help
130132
Say Y here to include support for Gravis UltraSound Classic
131133
soundcards.
@@ -140,6 +142,7 @@ config SND_GUSEXTREME
140142
select SND_MPU401_UART
141143
select SND_PCM
142144
select SND_GUS_SYNTH
145+
select SND_GENERIC_DRIVER
143146
help
144147
Say Y here to include support for Gravis UltraSound Extreme
145148
soundcards.
@@ -153,6 +156,7 @@ config SND_GUSMAX
153156
select SND_RAWMIDI
154157
select SND_CS4231_LIB
155158
select SND_GUS_SYNTH
159+
select SND_GENERIC_DRIVER
156160
help
157161
Say Y here to include support for Gravis UltraSound MAX
158162
soundcards.
@@ -166,7 +170,7 @@ config SND_INTERWAVE
166170
select SND_RAWMIDI
167171
select SND_CS4231_LIB
168172
select SND_GUS_SYNTH
169-
select ISAPNP
173+
select SND_GENERIC_DRIVER
170174
help
171175
Say Y here to include support for AMD InterWave based
172176
soundcards (Gravis UltraSound Plug & Play, STB SoundRage32,
@@ -181,7 +185,7 @@ config SND_INTERWAVE_STB
181185
select SND_RAWMIDI
182186
select SND_CS4231_LIB
183187
select SND_GUS_SYNTH
184-
select ISAPNP
188+
select SND_GENERIC_DRIVER
185189
help
186190
Say Y here to include support for AMD InterWave based
187191
soundcards with a TEA6330T bass and treble regulator
@@ -224,6 +228,7 @@ config SND_OPTI93X
224228
select SND_OPL3_LIB
225229
select SND_MPU401_UART
226230
select SND_PCM
231+
select SND_GENERIC_DRIVER
227232
help
228233
Say Y here to include support for soundcards based on Opti
229234
82C93x chips.
@@ -237,6 +242,7 @@ config SND_SB8
237242
select SND_OPL3_LIB
238243
select SND_RAWMIDI
239244
select SND_PCM
245+
select SND_GENERIC_DRIVER
240246
help
241247
Say Y here to include support for Creative Sound Blaster 1.0/
242248
2.0/Pro (8-bit) or 100% compatible soundcards.
@@ -250,6 +256,7 @@ config SND_SB16
250256
select SND_OPL3_LIB
251257
select SND_MPU401_UART
252258
select SND_PCM
259+
select SND_GENERIC_DRIVER
253260
help
254261
Say Y here to include support for Sound Blaster 16 soundcards
255262
(including the Plug and Play version).
@@ -263,6 +270,7 @@ config SND_SBAWE
263270
select SND_OPL3_LIB
264271
select SND_MPU401_UART
265272
select SND_PCM
273+
select SND_GENERIC_DRIVER
266274
help
267275
Say Y here to include support for Sound Blaster AWE soundcards
268276
(including the Plug and Play version).

sound/isa/ad1848/ad1848.c

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -91,35 +91,36 @@ static int __init snd_card_ad1848_probe(int dev)
9191
irq[dev],
9292
dma1[dev],
9393
thinkpad[dev] ? AD1848_HW_THINKPAD : AD1848_HW_DETECT,
94-
&chip)) < 0) {
95-
snd_card_free(card);
96-
return err;
97-
}
94+
&chip)) < 0)
95+
goto _err;
96+
97+
if ((err = snd_ad1848_pcm(chip, 0, &pcm)) < 0)
98+
goto _err;
99+
100+
if ((err = snd_ad1848_mixer(chip)) < 0)
101+
goto _err;
98102

99-
if ((err = snd_ad1848_pcm(chip, 0, &pcm)) < 0) {
100-
snd_card_free(card);
101-
return err;
102-
}
103-
if ((err = snd_ad1848_mixer(chip)) < 0) {
104-
snd_card_free(card);
105-
return err;
106-
}
107103
strcpy(card->driver, "AD1848");
108104
strcpy(card->shortname, pcm->name);
109105

110106
sprintf(card->longname, "%s at 0x%lx, irq %d, dma %d",
111107
pcm->name, chip->port, irq[dev], dma1[dev]);
112108

113-
if (thinkpad[dev]) {
109+
if (thinkpad[dev])
114110
strcat(card->longname, " [Thinkpad]");
115-
}
116111

117-
if ((err = snd_card_register(card)) < 0) {
118-
snd_card_free(card);
119-
return err;
120-
}
112+
if ((err = snd_card_set_generic_dev(card)) < 0)
113+
goto _err;
114+
115+
if ((err = snd_card_register(card)) < 0)
116+
goto _err;
117+
121118
snd_ad1848_cards[dev] = card;
122119
return 0;
120+
121+
_err:
122+
snd_card_free(card);
123+
return err;
123124
}
124125

125126
static int __init alsa_card_ad1848_init(void)

sound/isa/cmi8330.c

Lines changed: 38 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -438,33 +438,37 @@ static int __devinit snd_cmi8330_pcm(snd_card_t *card, struct snd_cmi8330 *chip)
438438
/*
439439
*/
440440

441+
#ifdef CONFIG_PNP
442+
#define is_isapnp_selected(dev) isapnp[dev]
443+
#else
444+
#define is_isapnp_selected(dev) 0
445+
#endif
446+
447+
#define PFX "cmi8330: "
448+
441449
static int __devinit snd_cmi8330_probe(int dev,
442450
struct pnp_card_link *pcard,
443451
const struct pnp_card_device_id *pid)
444452
{
445453
snd_card_t *card;
446454
struct snd_cmi8330 *acard;
447-
unsigned long flags;
448455
int i, err;
449456

450-
#ifdef CONFIG_PNP
451-
if (!isapnp[dev]) {
452-
#endif
457+
if (! is_isapnp_selected(dev)) {
453458
if (wssport[dev] == SNDRV_AUTO_PORT) {
454-
snd_printk("specify wssport\n");
459+
snd_printk(KERN_ERR PFX "specify wssport\n");
455460
return -EINVAL;
456461
}
457462
if (sbport[dev] == SNDRV_AUTO_PORT) {
458-
snd_printk("specify sbport\n");
463+
snd_printk(KERN_ERR PFX "specify sbport\n");
459464
return -EINVAL;
460465
}
461-
#ifdef CONFIG_PNP
462466
}
463-
#endif
467+
464468
card = snd_card_new(index[dev], id[dev], THIS_MODULE,
465469
sizeof(struct snd_cmi8330));
466470
if (card == NULL) {
467-
snd_printk("could not get a new card\n");
471+
snd_printk(KERN_ERR PFX "could not get a new card\n");
468472
return -ENOMEM;
469473
}
470474
acard = (struct snd_cmi8330 *)card->private_data;
@@ -473,9 +477,8 @@ static int __devinit snd_cmi8330_probe(int dev,
473477
#ifdef CONFIG_PNP
474478
if (isapnp[dev]) {
475479
if ((err = snd_cmi8330_pnp(dev, acard, pcard, pid)) < 0) {
476-
snd_printk("PnP detection failed\n");
477-
snd_card_free(card);
478-
return err;
480+
snd_printk(KERN_ERR PFX "PnP detection failed\n");
481+
goto _err;
479482
}
480483
snd_card_set_dev(card, &pcard->card->dev);
481484
}
@@ -487,14 +490,13 @@ static int __devinit snd_cmi8330_probe(int dev,
487490
wssdma[dev],
488491
AD1848_HW_DETECT,
489492
&acard->wss)) < 0) {
490-
snd_printk("(AD1848) device busy??\n");
491-
snd_card_free(card);
492-
return err;
493+
snd_printk(KERN_ERR PFX "(AD1848) device busy??\n");
494+
goto _err;
493495
}
494496
if (acard->wss->hardware != AD1848_HW_CMI8330) {
495-
snd_printk("(AD1848) not found during probe\n");
496-
snd_card_free(card);
497-
return -ENODEV;
497+
snd_printk(KERN_ERR PFX "(AD1848) not found during probe\n");
498+
err = -ENODEV;
499+
goto _err;
498500
}
499501

500502
if ((err = snd_sbdsp_create(card, sbport[dev],
@@ -503,32 +505,26 @@ static int __devinit snd_cmi8330_probe(int dev,
503505
sbdma8[dev],
504506
sbdma16[dev],
505507
SB_HW_AUTO, &acard->sb)) < 0) {
506-
snd_printk("(SB16) device busy??\n");
507-
snd_card_free(card);
508-
return err;
508+
snd_printk(KERN_ERR PFX "(SB16) device busy??\n");
509+
goto _err;
509510
}
510511
if (acard->sb->hardware != SB_HW_16) {
511-
snd_printk("(SB16) not found during probe\n");
512-
snd_card_free(card);
513-
return -ENODEV;
512+
snd_printk(KERN_ERR PFX "(SB16) not found during probe\n");
513+
goto _err;
514514
}
515515

516-
spin_lock_irqsave(&acard->wss->reg_lock, flags);
517516
snd_ad1848_out(acard->wss, AD1848_MISC_INFO, 0x40); /* switch on MODE2 */
518517
for (i = CMI8330_RMUX3D; i <= CMI8330_CDINGAIN; i++)
519518
snd_ad1848_out(acard->wss, i, snd_cmi8330_image[i - CMI8330_RMUX3D]);
520-
spin_unlock_irqrestore(&acard->wss->reg_lock, flags);
521519

522520
if ((err = snd_cmi8330_mixer(card, acard)) < 0) {
523-
snd_printk("failed to create mixers\n");
524-
snd_card_free(card);
525-
return err;
521+
snd_printk(KERN_ERR PFX "failed to create mixers\n");
522+
goto _err;
526523
}
527524

528525
if ((err = snd_cmi8330_pcm(card, acard)) < 0) {
529-
snd_printk("failed to create pcms\n");
530-
snd_card_free(card);
531-
return err;
526+
snd_printk(KERN_ERR PFX "failed to create pcms\n");
527+
goto _err;
532528
}
533529

534530
strcpy(card->driver, "CMI8330/C3D");
@@ -539,16 +535,21 @@ static int __devinit snd_cmi8330_probe(int dev,
539535
wssirq[dev],
540536
wssdma[dev]);
541537

542-
if ((err = snd_card_register(card)) < 0) {
543-
snd_card_free(card);
544-
return err;
545-
}
538+
if ((err = snd_card_set_generic_dev(card)) < 0)
539+
goto _err;
540+
541+
if ((err = snd_card_register(card)) < 0)
542+
goto _err;
546543

547544
if (pcard)
548545
pnp_set_card_drvdata(pcard, card);
549546
else
550547
snd_cmi8330_legacy[dev] = card;
551548
return 0;
549+
550+
_err:
551+
snd_card_free(card);
552+
return err;
552553
}
553554

554555
#ifdef CONFIG_PNP
@@ -594,10 +595,8 @@ static int __init alsa_card_cmi8330_init(void)
594595
for (dev = 0; dev < SNDRV_CARDS; dev++) {
595596
if (!enable[dev])
596597
continue;
597-
#ifdef CONFIG_PNP
598-
if (isapnp[dev])
598+
if (is_isapnp_selected(dev))
599599
continue;
600-
#endif
601600
if (snd_cmi8330_probe(dev, NULL, NULL) >= 0)
602601
cards++;
603602
}

0 commit comments

Comments
 (0)