From a287a6aca3a58bd1527a481b0376ad83e18e68ef Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Wed, 7 Dec 2005 09:11:05 +0100 Subject: [PATCH] --- yaml --- r: 16159 b: refs/heads/master c: 416c1079d30f1a52399b96f6772e993274b774ae h: refs/heads/master i: 16157: 09cdec1bc26c0a7cfe382240c38d2d9a6c7b92d3 16155: 4eb68e2a52c65c5d0cab02bc12f67fdc5333de58 16151: b944fb7f4f44c3b4f3d54493686524e30bb7873c 16143: 500ad260b949b5101a4a1195f7626234823df335 16127: b6a4d61f841173846125f140d6c64744b95b63e1 v: v3 --- [refs] | 2 +- trunk/include/sound/core.h | 1 + trunk/sound/core/device.c | 2 +- trunk/sound/core/sound.c | 11 +++++++++-- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index a77b75f2444a..327d901d6855 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 156b2aa3bef17c964006c6448aadd440781d7e7d +refs/heads/master: 416c1079d30f1a52399b96f6772e993274b774ae diff --git a/trunk/include/sound/core.h b/trunk/include/sound/core.h index 90ac6132ea3b..dbe7a2c30272 100644 --- a/trunk/include/sound/core.h +++ b/trunk/include/sound/core.h @@ -134,6 +134,7 @@ struct snd_card { wait_queue_head_t shutdown_sleep; struct work_struct free_workq; /* for free in workqueue */ struct device *dev; + struct class_device *parent_device; #ifdef CONFIG_PM unsigned int power_state; /* power state */ diff --git a/trunk/sound/core/device.c b/trunk/sound/core/device.c index b1cf6ec56784..478264cab67e 100644 --- a/trunk/sound/core/device.c +++ b/trunk/sound/core/device.c @@ -193,7 +193,7 @@ int snd_device_register_all(struct snd_card *card) int err; snd_assert(card != NULL, return -ENXIO); - list_for_each(list, &card->devices) { + list_for_each_prev(list, &card->devices) { dev = snd_device(list); if (dev->state == SNDRV_DEV_BUILD && dev->ops->dev_register) { if ((err = dev->ops->dev_register(dev)) < 0) diff --git a/trunk/sound/core/sound.c b/trunk/sound/core/sound.c index a8eda02bcf1c..2f6108deb211 100644 --- a/trunk/sound/core/sound.c +++ b/trunk/sound/core/sound.c @@ -245,6 +245,7 @@ int snd_register_device(int type, struct snd_card *card, int dev, 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 @@ int snd_register_device(int type, struct snd_card *card, int dev, 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;