The helper function devm_add_action_or_reset() will internally call devm_add_action(), and if devm_add_action() fails then it will execute the action mentioned and return the error code. So use devm_add_action_or_reset() instead of devm_add_action() to simplify the error handling, reduce the code. Signed-off-by: Cai Huoqing <caihuoqing@xxxxxxxxx> --- drivers/gpu/drm/i2c/tda9950.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/i2c/tda9950.c b/drivers/gpu/drm/i2c/tda9950.c index 5b03fdd1eaa4..922e431d3eb0 100644 --- a/drivers/gpu/drm/i2c/tda9950.c +++ b/drivers/gpu/drm/i2c/tda9950.c @@ -361,9 +361,7 @@ static int tda9950_devm_glue_init(struct device *dev, struct tda9950_glue *glue) return ret; } - ret = devm_add_action(dev, tda9950_devm_glue_exit, glue); - if (ret) - tda9950_devm_glue_exit(glue); + ret = devm_add_action_or_reset(dev, tda9950_devm_glue_exit, glue); return ret; } @@ -426,11 +424,9 @@ static int tda9950_probe(struct i2c_client *client, if (IS_ERR(priv->adap)) return PTR_ERR(priv->adap); - ret = devm_add_action(dev, tda9950_cec_del, priv); - if (ret) { - cec_delete_adapter(priv->adap); + ret = devm_add_action_or_reset(dev, tda9950_cec_del, priv); + if (ret) return ret; - } ret = tda9950_devm_glue_init(dev, glue); if (ret) -- 2.25.1