static int pnp_registered;
#endif
#endif /* CONFIG_PNP */
-static unsigned int snd_cs423x_devices;
struct snd_card_cs4236 {
struct snd_cs4231 *chip;
if (snd_mpu401_uart_new(card, 0, MPU401_HW_CS4232,
mpu_port[dev], 0,
mpu_irq[dev],
- mpu_irq[dev] >= 0 ? IRQF_DISABLED : 0, NULL) < 0)
+ mpu_irq[dev] >= 0 ? SA_INTERRUPT : 0, NULL) < 0)
printk(KERN_WARNING IDENT ": MPU401 not detected\n");
}
snd_card_free(card);
return err;
}
-
+
platform_set_drvdata(pdev, card);
return 0;
}
}
pnp_set_drvdata(pdev, card);
dev++;
- snd_cs423x_devices++;
return 0;
}
}
pnp_set_card_drvdata(pcard, card);
dev++;
- snd_cs423x_devices++;
return 0;
}
snd_card_free(pnp_get_card_drvdata(pcard));
pnp_set_card_drvdata(pcard, NULL);
}
-
+
#ifdef CONFIG_PM
static int snd_cs423x_pnpc_suspend(struct pnp_card_link *pcard, pm_message_t state)
{
static int __init alsa_card_cs423x_init(void)
{
- int i, err;
+ int i, err, cards = 0;
if ((err = platform_driver_register(&cs423x_nonpnp_driver)) < 0)
return err;
- for (i = 0; i < SNDRV_CARDS; i++) {
+ for (i = 0; i < SNDRV_CARDS && enable[i]; i++) {
struct platform_device *device;
- if (! enable[i] || is_isapnp_selected(i))
+ if (is_isapnp_selected(i))
continue;
device = platform_device_register_simple(CS423X_DRIVER,
i, NULL, 0);
- if (IS_ERR(device))
- continue;
- if (!platform_get_drvdata(device)) {
- platform_device_unregister(device);
- continue;
+ if (IS_ERR(device)) {
+ err = PTR_ERR(device);
+ goto errout;
}
platform_devices[i] = device;
- snd_cs423x_devices++;
+ cards++;
}
#ifdef CONFIG_PNP
#ifdef CS4232
- err = pnp_register_driver(&cs4232_pnp_driver);
- if (!err)
+ i = pnp_register_driver(&cs4232_pnp_driver);
+ if (i >= 0) {
pnp_registered = 1;
+ cards += i;
+ }
#endif
- err = pnp_register_card_driver(&cs423x_pnpc_driver);
- if (!err)
+ i = pnp_register_card_driver(&cs423x_pnpc_driver);
+ if (i >= 0) {
pnpc_registered = 1;
+ cards += i;
+ }
#endif /* CONFIG_PNP */
- if (!snd_cs423x_devices) {
+ if (!cards) {
#ifdef MODULE
printk(KERN_ERR IDENT " soundcard not found or device busy\n");
#endif
- snd_cs423x_unregister_all();
- return -ENODEV;
+ err = -ENODEV;
+ goto errout;
}
return 0;
+
+ errout:
+ snd_cs423x_unregister_all();
+ return err;
}
static void __exit alsa_card_cs423x_exit(void)