diff options
Diffstat (limited to 'sound/core/sound.c')
-rw-r--r-- | sound/core/sound.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/sound/core/sound.c b/sound/core/sound.c index a8eda02bcf1c..2f6108deb211 100644 --- a/sound/core/sound.c +++ b/sound/core/sound.c | |||
@@ -245,6 +245,7 @@ int snd_register_device(int type, struct snd_card *card, int dev, | |||
245 | int minor; | 245 | int minor; |
246 | struct snd_minor *preg; | 246 | struct snd_minor *preg; |
247 | struct device *device = NULL; | 247 | struct device *device = NULL; |
248 | struct class_device *class_device = NULL; | ||
248 | 249 | ||
249 | snd_assert(name, return -EINVAL); | 250 | snd_assert(name, return -EINVAL); |
250 | preg = kmalloc(sizeof(struct snd_minor) + strlen(name) + 1, GFP_KERNEL); | 251 | 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, | |||
272 | snd_minors[minor] = preg; | 273 | snd_minors[minor] = preg; |
273 | if (type != SNDRV_DEVICE_TYPE_CONTROL || preg->card >= cards_limit) | 274 | if (type != SNDRV_DEVICE_TYPE_CONTROL || preg->card >= cards_limit) |
274 | devfs_mk_cdev(MKDEV(major, minor), S_IFCHR | device_mode, "snd/%s", name); | 275 | devfs_mk_cdev(MKDEV(major, minor), S_IFCHR | device_mode, "snd/%s", name); |
275 | if (card) | 276 | if (card) { |
276 | device = card->dev; | 277 | device = card->dev; |
277 | class_device_create(sound_class, NULL, MKDEV(major, minor), device, "%s", name); | 278 | class_device = card->parent_device; |
279 | } | ||
280 | class_device = class_device_create(sound_class, class_device, | ||
281 | MKDEV(major, minor), device, | ||
282 | "%s", name); | ||
283 | if (type == SNDRV_DEVICE_TYPE_CONTROL) | ||
284 | card->parent_device = class_device; | ||
278 | 285 | ||
279 | up(&sound_mutex); | 286 | up(&sound_mutex); |
280 | return 0; | 287 | return 0; |