summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
Diffstat (limited to 'sound')
-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)
if (!tree)
return;
+ free_widget_node(tree->afg, &widget_afg_group);
if (tree->nodes) {
for (p = tree->nodes; *p; p++)
free_widget_node(*p, &widget_node_group);
kfree(tree->nodes);
}
- free_widget_node(tree->afg, &widget_afg_group);
if (tree->root)
kobject_put(tree->root);
kfree(tree);
@@ -362,13 +362,6 @@ static int widget_tree_create(struct hdac_device *codec)
if (!tree->root)
return -ENOMEM;
- if (codec->afg) {
- err = add_widget_node(tree->root, codec->afg,
- &widget_afg_group, &tree->afg);
- if (err < 0)
- return err;
- }
-
tree->nodes = kcalloc(codec->num_nodes + 1, sizeof(*tree->nodes),
GFP_KERNEL);
if (!tree->nodes)
@@ -381,6 +374,13 @@ static int widget_tree_create(struct hdac_device *codec)
return err;
}
+ if (codec->afg) {
+ err = add_widget_node(tree->root, codec->afg,
+ &widget_afg_group, &tree->afg);
+ if (err < 0)
+ return err;
+ }
+
kobject_uevent(tree->root, KOBJ_CHANGE);
return 0;
}