There is a rumtime PM imbalance between the error handling path after devm_snd_soc_register_component() and all other error handling paths. Fix this by moving PM runtime decrement to the end of the function. Signed-off-by: Dinghao Liu <dinghao.liu@xxxxxxxxxx> --- sound/soc/codecs/tas2552.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sound/soc/codecs/tas2552.c b/sound/soc/codecs/tas2552.c index bd00c35116cd..52de6f7b4227 100644 --- a/sound/soc/codecs/tas2552.c +++ b/sound/soc/codecs/tas2552.c @@ -718,13 +718,6 @@ static int tas2552_probe(struct i2c_client *client, return ret; } - pm_runtime_set_active(&client->dev); - pm_runtime_set_autosuspend_delay(&client->dev, 1000); - pm_runtime_use_autosuspend(&client->dev); - pm_runtime_enable(&client->dev); - pm_runtime_mark_last_busy(&client->dev); - pm_runtime_put_sync_autosuspend(&client->dev); - dev_set_drvdata(&client->dev, data); ret = devm_snd_soc_register_component(&client->dev, @@ -733,6 +726,13 @@ static int tas2552_probe(struct i2c_client *client, if (ret < 0) dev_err(&client->dev, "Failed to register component: %d\n", ret); + pm_runtime_set_active(&client->dev); + pm_runtime_set_autosuspend_delay(&client->dev, 1000); + pm_runtime_use_autosuspend(&client->dev); + pm_runtime_enable(&client->dev); + pm_runtime_mark_last_busy(&client->dev); + pm_runtime_put_sync_autosuspend(&client->dev); + return ret; } -- 2.17.1