[alsa-devel] RFC: add possibility to change text identification string

Jaroslav Kysela perex at perex.cz
Wed Nov 12 16:29:22 CET 2008


On Wed, 12 Nov 2008, Takashi Iwai wrote:

> At Tue, 11 Nov 2008 17:33:42 +0100,
> I wrote:
> > 
> > At Tue, 11 Nov 2008 17:00:41 +0100 (CET),
> > Jaroslav Kysela wrote:
> > > 
> > > Hi all,
> > > 
> > > 	based on discussion today, I prepared a patch to handle udev-style 
> > > card renaming. Comments are welcome.
> > 
> > Looks good to me.  The sanity check of the id string should be used
> > for the assignment from the module option, too.
> 
> One remaining problem I found is a symlink of id in /proc/asound.
> This won't be changed even if you change the id string via sysfs.
> A minor issue, though.

Thanks for this note. The patch bellow should fix this issue. Also, I'm 
going to remove card->id from hdsp.c and hdspm.c where this string is 
used for rawmidi device name - it might be confusing when changed, too.

						Jaroslav

diff --git a/include/sound/info.h b/include/sound/info.h
index 8ae72e7..baf09d8 100644
--- a/include/sound/info.h
+++ b/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 */
diff --git a/sound/core/info.c b/sound/core/info.c
index 527b207..e91da07 100644
--- a/sound/core/info.c
+++ b/sound/core/info.c
@@ -653,6 +653,21 @@ int snd_info_card_register(struct snd_card *card)
 }
 
 /*
+ * 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/sound/core/init.c b/sound/core/init.c
index 5ff297d..af1e407 100644
--- a/sound/core/init.c
+++ b/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;

					Jaroslav

-----
Jaroslav Kysela <perex at perex.cz>
Linux Kernel Sound Maintainer
ALSA Project, Red Hat, Inc.



More information about the Alsa-devel mailing list