[ALSA] Nest sound devices

Modules: ALSA Core

Make the control device parent of all other ALSA devices of a card.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
diff --git a/sound/core/sound.c b/sound/core/sound.c
index a8eda02..2f6108d 100644
--- a/sound/core/sound.c
+++ b/sound/core/sound.c
@@ -245,6 +245,7 @@
 	int minor;
 	struct snd_minor *preg;
 	struct device *device = NULL;
+	struct class_device *class_device = NULL;
 
 	snd_assert(name, return -EINVAL);
 	preg = kmalloc(sizeof(struct snd_minor) + strlen(name) + 1, GFP_KERNEL);
@@ -272,9 +273,15 @@
 	snd_minors[minor] = preg;
 	if (type != SNDRV_DEVICE_TYPE_CONTROL || preg->card >= cards_limit)
 		devfs_mk_cdev(MKDEV(major, minor), S_IFCHR | device_mode, "snd/%s", name);
-	if (card)
+	if (card) {
 		device = card->dev;
-	class_device_create(sound_class, NULL, MKDEV(major, minor), device, "%s", name);
+		class_device = card->parent_device;
+	}
+	class_device = class_device_create(sound_class, class_device,
+					   MKDEV(major, minor), device,
+					   "%s", name);
+	if (type == SNDRV_DEVICE_TYPE_CONTROL)
+		card->parent_device = class_device;
 
 	up(&sound_mutex);
 	return 0;