mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
[ALSA] Unregister device files at disconnection
Orignally proposed by Sam Revitch <[email protected]>. 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 <[email protected]> Signed-off-by: Jaroslav Kysela <[email protected]>
This commit is contained in:
parent
746d4a02e6
commit
c461482c80
15 changed files with 148 additions and 172 deletions
|
|
@ -71,7 +71,6 @@ struct snd_device_ops {
|
|||
int (*dev_free)(struct snd_device *dev);
|
||||
int (*dev_register)(struct snd_device *dev);
|
||||
int (*dev_disconnect)(struct snd_device *dev);
|
||||
int (*dev_unregister)(struct snd_device *dev);
|
||||
};
|
||||
|
||||
struct snd_device {
|
||||
|
|
@ -131,6 +130,7 @@ struct snd_card {
|
|||
state */
|
||||
spinlock_t files_lock; /* lock the files for this card */
|
||||
int shutdown; /* this card is going down */
|
||||
int free_on_last_close; /* free in context of file_release */
|
||||
wait_queue_head_t shutdown_sleep;
|
||||
struct work_struct free_workq; /* for free in workqueue */
|
||||
struct device *dev;
|
||||
|
|
@ -244,6 +244,7 @@ struct snd_card *snd_card_new(int idx, const char *id,
|
|||
struct module *module, int extra_size);
|
||||
int snd_card_disconnect(struct snd_card *card);
|
||||
int snd_card_free(struct snd_card *card);
|
||||
int snd_card_free_when_closed(struct snd_card *card);
|
||||
int snd_card_free_in_thread(struct snd_card *card);
|
||||
int snd_card_register(struct snd_card *card);
|
||||
int snd_card_info_init(void);
|
||||
|
|
|
|||
|
|
@ -129,7 +129,6 @@ void snd_timer_notify(struct snd_timer *timer, int event, struct timespec *tstam
|
|||
int snd_timer_global_new(char *id, int device, struct snd_timer **rtimer);
|
||||
int snd_timer_global_free(struct snd_timer *timer);
|
||||
int snd_timer_global_register(struct snd_timer *timer);
|
||||
int snd_timer_global_unregister(struct snd_timer *timer);
|
||||
|
||||
int snd_timer_open(struct snd_timer_instance **ti, char *owner, struct snd_timer_id *tid, unsigned int slave_id);
|
||||
int snd_timer_close(struct snd_timer_instance *timeri);
|
||||
|
|
|
|||
Loading…
Reference in a new issue