Merge branch 'topic/hda-refresh-cleanup' into for-next

Merge a cleanup for HD-audio widget refresh code

Signed-off-by: Takashi Iwai <[email protected]>
This commit is contained in:
Takashi Iwai 2019-07-07 11:29:03 +02:00
commit b89b889a32
6 changed files with 25 additions and 17 deletions

View file

@ -89,7 +89,7 @@ int snd_hdac_device_init(struct hdac_device *codec, struct hdac_bus *bus,
fg = codec->afg ? codec->afg : codec->mfg;
err = snd_hdac_refresh_widgets(codec, false);
err = snd_hdac_refresh_widgets(codec);
if (err < 0)
goto error;
@ -394,32 +394,35 @@ static void setup_fg_nodes(struct hdac_device *codec)
/**
* snd_hdac_refresh_widgets - Reset the widget start/end nodes
* @codec: the codec object
* @sysfs: re-initialize sysfs tree, too
*/
int snd_hdac_refresh_widgets(struct hdac_device *codec, bool sysfs)
int snd_hdac_refresh_widgets(struct hdac_device *codec)
{
hda_nid_t start_nid;
int nums, err;
int nums, err = 0;
/*
* Serialize against multiple threads trying to update the sysfs
* widgets array.
*/
mutex_lock(&codec->widget_lock);
nums = snd_hdac_get_sub_nodes(codec, codec->afg, &start_nid);
if (!start_nid || nums <= 0 || nums >= 0xff) {
dev_err(&codec->dev, "cannot read sub nodes for FG 0x%02x\n",
codec->afg);
return -EINVAL;
err = -EINVAL;
goto unlock;
}
if (sysfs) {
mutex_lock(&codec->widget_lock);
err = hda_widget_sysfs_reinit(codec, start_nid, nums);
mutex_unlock(&codec->widget_lock);
if (err < 0)
return err;
}
err = hda_widget_sysfs_reinit(codec, start_nid, nums);
if (err < 0)
goto unlock;
codec->num_nodes = nums;
codec->start_nid = start_nid;
codec->end_nid = start_nid + nums;
return 0;
unlock:
mutex_unlock(&codec->widget_lock);
return err;
}
EXPORT_SYMBOL_GPL(snd_hdac_refresh_widgets);

View file

@ -428,7 +428,7 @@ int hda_widget_sysfs_reinit(struct hdac_device *codec,
int i;
if (!codec->widgets)
return hda_widget_sysfs_init(codec);
return 0;
tree = kmemdup(codec->widgets, sizeof(*tree), GFP_KERNEL);
if (!tree)