aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2015-04-08 05:41:59 -0400
committerTakashi Iwai <tiwai@suse.de>2015-04-08 05:41:59 -0400
commit142267c9e026827ca5fa622f1f13780b6db26cf8 (patch)
tree09ae08237b4effe5510a00dd86b0c098123aab2d
parente1e62b98ebddc3234f3259019d3236f66fc667f8 (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.c16
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}