ALSA: ice1712: add chip_exit callback
Add chip_exit callback to allow card subdrivers to do cleanup work on module removal. Needed by Philips PSC724 subdriver to cancel delayed work. Signed-off-by: Ondrej Zary <linux@rainbow-software.org> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
dcda580616
commit
267bccaf04
3 changed files with 17 additions and 2 deletions
|
@ -2686,6 +2686,7 @@ static int __devinit snd_ice1712_probe(struct pci_dev *pci,
|
||||||
for (tbl = card_tables; *tbl; tbl++) {
|
for (tbl = card_tables; *tbl; tbl++) {
|
||||||
for (c = *tbl; c->subvendor; c++) {
|
for (c = *tbl; c->subvendor; c++) {
|
||||||
if (c->subvendor == ice->eeprom.subvendor) {
|
if (c->subvendor == ice->eeprom.subvendor) {
|
||||||
|
ice->card_info = c;
|
||||||
strcpy(card->shortname, c->name);
|
strcpy(card->shortname, c->name);
|
||||||
if (c->driver) /* specific driver? */
|
if (c->driver) /* specific driver? */
|
||||||
strcpy(card->driver, c->driver);
|
strcpy(card->driver, c->driver);
|
||||||
|
@ -2799,7 +2800,12 @@ static int __devinit snd_ice1712_probe(struct pci_dev *pci,
|
||||||
|
|
||||||
static void __devexit snd_ice1712_remove(struct pci_dev *pci)
|
static void __devexit snd_ice1712_remove(struct pci_dev *pci)
|
||||||
{
|
{
|
||||||
snd_card_free(pci_get_drvdata(pci));
|
struct snd_card *card = pci_get_drvdata(pci);
|
||||||
|
struct snd_ice1712 *ice = card->private_data;
|
||||||
|
|
||||||
|
if (ice->card_info && ice->card_info->chip_exit)
|
||||||
|
ice->card_info->chip_exit(ice);
|
||||||
|
snd_card_free(card);
|
||||||
pci_set_drvdata(pci, NULL);
|
pci_set_drvdata(pci, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -288,6 +288,7 @@ struct snd_ice1712_spdif {
|
||||||
} ops;
|
} ops;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct snd_ice1712_card_info;
|
||||||
|
|
||||||
struct snd_ice1712 {
|
struct snd_ice1712 {
|
||||||
unsigned long conp_dma_size;
|
unsigned long conp_dma_size;
|
||||||
|
@ -324,6 +325,7 @@ struct snd_ice1712 {
|
||||||
struct snd_info_entry *proc_entry;
|
struct snd_info_entry *proc_entry;
|
||||||
|
|
||||||
struct snd_ice1712_eeprom eeprom;
|
struct snd_ice1712_eeprom eeprom;
|
||||||
|
struct snd_ice1712_card_info *card_info;
|
||||||
|
|
||||||
unsigned int pro_volumes[20];
|
unsigned int pro_volumes[20];
|
||||||
unsigned int omni:1; /* Delta Omni I/O */
|
unsigned int omni:1; /* Delta Omni I/O */
|
||||||
|
@ -517,6 +519,7 @@ struct snd_ice1712_card_info {
|
||||||
char *model;
|
char *model;
|
||||||
char *driver;
|
char *driver;
|
||||||
int (*chip_init)(struct snd_ice1712 *);
|
int (*chip_init)(struct snd_ice1712 *);
|
||||||
|
void (*chip_exit)(struct snd_ice1712 *);
|
||||||
int (*build_controls)(struct snd_ice1712 *);
|
int (*build_controls)(struct snd_ice1712 *);
|
||||||
unsigned int no_mpu401:1;
|
unsigned int no_mpu401:1;
|
||||||
unsigned int mpu401_1_info_flags;
|
unsigned int mpu401_1_info_flags;
|
||||||
|
|
|
@ -2348,6 +2348,7 @@ static int __devinit snd_vt1724_read_eeprom(struct snd_ice1712 *ice,
|
||||||
ice->eeprom.subvendor = c->subvendor;
|
ice->eeprom.subvendor = c->subvendor;
|
||||||
} else if (c->subvendor != ice->eeprom.subvendor)
|
} else if (c->subvendor != ice->eeprom.subvendor)
|
||||||
continue;
|
continue;
|
||||||
|
ice->card_info = c;
|
||||||
if (!c->eeprom_size || !c->eeprom_data)
|
if (!c->eeprom_size || !c->eeprom_data)
|
||||||
goto found;
|
goto found;
|
||||||
/* if the EEPROM is given by the driver, use it */
|
/* if the EEPROM is given by the driver, use it */
|
||||||
|
@ -2788,7 +2789,12 @@ __found:
|
||||||
|
|
||||||
static void __devexit snd_vt1724_remove(struct pci_dev *pci)
|
static void __devexit snd_vt1724_remove(struct pci_dev *pci)
|
||||||
{
|
{
|
||||||
snd_card_free(pci_get_drvdata(pci));
|
struct snd_card *card = pci_get_drvdata(pci);
|
||||||
|
struct snd_ice1712 *ice = card->private_data;
|
||||||
|
|
||||||
|
if (ice->card_info && ice->card_info->chip_exit)
|
||||||
|
ice->card_info->chip_exit(ice);
|
||||||
|
snd_card_free(card);
|
||||||
pci_set_drvdata(pci, NULL);
|
pci_set_drvdata(pci, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue