diff options
author | Takashi Iwai <tiwai@suse.de> | 2015-04-08 05:41:59 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2015-04-08 05:41:59 -0400 |
commit | 142267c9e026827ca5fa622f1f13780b6db26cf8 (patch) | |
tree | 09ae08237b4effe5510a00dd86b0c098123aab2d | |
parent | e1e62b98ebddc3234f3259019d3236f66fc667f8 (diff) |
ALSA: hda - Create AFG sysfs node at last
... so that user-space can know that the whole nodes have been
created. Unfortunately, this can't be implemented easily in race-free
way, so it's a kind of compromise.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r-- | sound/hda/hdac_sysfs.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/sound/hda/hdac_sysfs.c b/sound/hda/hdac_sysfs.c index b358d5157802..18aea43d230d 100644 --- a/sound/hda/hdac_sysfs.c +++ b/sound/hda/hdac_sysfs.c | |||
@@ -313,12 +313,12 @@ static void widget_tree_free(struct hdac_device *codec) | |||
313 | 313 | ||
314 | if (!tree) | 314 | if (!tree) |
315 | return; | 315 | return; |
316 | free_widget_node(tree->afg, &widget_afg_group); | ||
316 | if (tree->nodes) { | 317 | if (tree->nodes) { |
317 | for (p = tree->nodes; *p; p++) | 318 | for (p = tree->nodes; *p; p++) |
318 | free_widget_node(*p, &widget_node_group); | 319 | free_widget_node(*p, &widget_node_group); |
319 | kfree(tree->nodes); | 320 | kfree(tree->nodes); |
320 | } | 321 | } |
321 | free_widget_node(tree->afg, &widget_afg_group); | ||
322 | if (tree->root) | 322 | if (tree->root) |
323 | kobject_put(tree->root); | 323 | kobject_put(tree->root); |
324 | kfree(tree); | 324 | kfree(tree); |
@@ -362,13 +362,6 @@ static int widget_tree_create(struct hdac_device *codec) | |||
362 | if (!tree->root) | 362 | if (!tree->root) |
363 | return -ENOMEM; | 363 | return -ENOMEM; |
364 | 364 | ||
365 | if (codec->afg) { | ||
366 | err = add_widget_node(tree->root, codec->afg, | ||
367 | &widget_afg_group, &tree->afg); | ||
368 | if (err < 0) | ||
369 | return err; | ||
370 | } | ||
371 | |||
372 | tree->nodes = kcalloc(codec->num_nodes + 1, sizeof(*tree->nodes), | 365 | tree->nodes = kcalloc(codec->num_nodes + 1, sizeof(*tree->nodes), |
373 | GFP_KERNEL); | 366 | GFP_KERNEL); |
374 | if (!tree->nodes) | 367 | if (!tree->nodes) |
@@ -381,6 +374,13 @@ static int widget_tree_create(struct hdac_device *codec) | |||
381 | return err; | 374 | return err; |
382 | } | 375 | } |
383 | 376 | ||
377 | if (codec->afg) { | ||
378 | err = add_widget_node(tree->root, codec->afg, | ||
379 | &widget_afg_group, &tree->afg); | ||
380 | if (err < 0) | ||
381 | return err; | ||
382 | } | ||
383 | |||
384 | kobject_uevent(tree->root, KOBJ_CHANGE); | 384 | kobject_uevent(tree->root, KOBJ_CHANGE); |
385 | return 0; | 385 | return 0; |
386 | } | 386 | } |