[ALSA] Unregister device files at disconnection
Orignally proposed by Sam Revitch <sam.revitch@gmail.com>. Unregister device files at disconnection to avoid the futher accesses. Also, the dev_unregister callback is removed and replaced with the combination of disconnect + free. A new function snd_card_free_when_closed() is introduced, which is used in USB disconnect callback. Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
This commit is contained in:
committed by
Jaroslav Kysela
parent
746d4a02e6
commit
c461482c80
@@ -42,7 +42,7 @@ static DEFINE_MUTEX(register_mutex);
|
||||
static int snd_hwdep_free(struct snd_hwdep *hwdep);
|
||||
static int snd_hwdep_dev_free(struct snd_device *device);
|
||||
static int snd_hwdep_dev_register(struct snd_device *device);
|
||||
static int snd_hwdep_dev_unregister(struct snd_device *device);
|
||||
static int snd_hwdep_dev_disconnect(struct snd_device *device);
|
||||
|
||||
|
||||
static struct snd_hwdep *snd_hwdep_search(struct snd_card *card, int device)
|
||||
@@ -353,7 +353,7 @@ int snd_hwdep_new(struct snd_card *card, char *id, int device,
|
||||
static struct snd_device_ops ops = {
|
||||
.dev_free = snd_hwdep_dev_free,
|
||||
.dev_register = snd_hwdep_dev_register,
|
||||
.dev_unregister = snd_hwdep_dev_unregister
|
||||
.dev_disconnect = snd_hwdep_dev_disconnect,
|
||||
};
|
||||
|
||||
snd_assert(rhwdep != NULL, return -EINVAL);
|
||||
@@ -439,7 +439,7 @@ static int snd_hwdep_dev_register(struct snd_device *device)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int snd_hwdep_dev_unregister(struct snd_device *device)
|
||||
static int snd_hwdep_dev_disconnect(struct snd_device *device)
|
||||
{
|
||||
struct snd_hwdep *hwdep = device->device_data;
|
||||
|
||||
@@ -454,9 +454,9 @@ static int snd_hwdep_dev_unregister(struct snd_device *device)
|
||||
snd_unregister_oss_device(hwdep->oss_type, hwdep->card, hwdep->device);
|
||||
#endif
|
||||
snd_unregister_device(SNDRV_DEVICE_TYPE_HWDEP, hwdep->card, hwdep->device);
|
||||
list_del(&hwdep->list);
|
||||
list_del_init(&hwdep->list);
|
||||
mutex_unlock(®ister_mutex);
|
||||
return snd_hwdep_free(hwdep);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
|
Reference in New Issue
Block a user