Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 142267c9 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

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: default avatarTakashi Iwai <tiwai@suse.de>
parent e1e62b98
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -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;
}