From 1769dd94bf480cb86f53a3478fd00b192e4e91d2 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Wed, 12 Nov 2008 16:31:37 +0100 Subject: [PATCH] --- yaml --- r: 120578 b: refs/heads/master c: c2eb9c4ea383aee154e7139395872c4da629e715 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/include/sound/info.h | 2 ++ trunk/sound/core/info.c | 17 +++++++++++++++++ trunk/sound/core/init.c | 1 + 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index add050c73f92..adb130371421 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9fb6198e8c574c6547fbfac0ae1eaf7894ddfdcc +refs/heads/master: c2eb9c4ea383aee154e7139395872c4da629e715 diff --git a/trunk/include/sound/info.h b/trunk/include/sound/info.h index 8ae72e74f898..46f702a76e4f 100644 --- a/trunk/include/sound/info.h +++ b/trunk/include/sound/info.h @@ -126,6 +126,7 @@ int snd_info_card_create(struct snd_card * card); int snd_info_card_register(struct snd_card * card); int snd_info_card_free(struct snd_card * card); void snd_info_card_disconnect(struct snd_card * card); +void snd_info_card_id_change(struct snd_card * card); int snd_info_register(struct snd_info_entry * entry); /* for card drivers */ @@ -160,6 +161,7 @@ static inline int snd_info_card_create(struct snd_card * card) { return 0; } static inline int snd_info_card_register(struct snd_card * card) { return 0; } static inline int snd_info_card_free(struct snd_card * card) { return 0; } static inline void snd_info_card_disconnect(struct snd_card * card) { } +static inline void snd_info_card_id_change(struct snd_card * card) { } static inline int snd_info_register(struct snd_info_entry * entry) { return 0; } static inline int snd_card_proc_new(struct snd_card *card, const char *name, diff --git a/trunk/sound/core/info.c b/trunk/sound/core/info.c index 527b207462b0..70fa87189f36 100644 --- a/trunk/sound/core/info.c +++ b/trunk/sound/core/info.c @@ -652,6 +652,23 @@ int snd_info_card_register(struct snd_card *card) return 0; } +/* + * called on card->id change + */ +void snd_info_card_id_change(struct snd_card *card) +{ + mutex_lock(&info_mutex); + if (card->proc_root_link) { + snd_remove_proc_entry(snd_proc_root, card->proc_root_link); + card->proc_root_link = NULL; + } + if (strcmp(card->id, card->proc_root->name)) + card->proc_root_link = proc_symlink(card->id, + snd_proc_root, + card->proc_root->name); + mutex_unlock(&info_mutex); +} + /* * de-register the card proc file * called from init.c diff --git a/trunk/sound/core/init.c b/trunk/sound/core/init.c index 5ff297d1d89a..af1e407ca27f 100644 --- a/trunk/sound/core/init.c +++ b/trunk/sound/core/init.c @@ -571,6 +571,7 @@ card_id_store_attr(struct device *dev, struct device_attribute *attr, goto __exist; } strcpy(card->id, buf1); + snd_info_card_id_change(card); mutex_unlock(&snd_card_mutex); return count;