On Thu, Apr 08, 2021 at 08:17:40PM +0800, Yicong Yang wrote: > Use devm_add_action_or_reset() instead of devres_alloc() and > devres_add(), which works the same. This will simplify the > code. There is no functional change. Nice! Reviewed-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> > Signed-off-by: Yicong Yang <yangyicong@xxxxxxxxxxxxx> > --- > drivers/i2c/i2c-core-base.c | 28 +++++++++------------------- > 1 file changed, 9 insertions(+), 19 deletions(-) > > diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c > index 63ebf72..b883a59 100644 > --- a/drivers/i2c/i2c-core-base.c > +++ b/drivers/i2c/i2c-core-base.c > @@ -1016,15 +1016,9 @@ struct i2c_client *i2c_new_dummy_device(struct i2c_adapter *adapter, u16 address > } > EXPORT_SYMBOL_GPL(i2c_new_dummy_device); > > -struct i2c_dummy_devres { > - struct i2c_client *client; > -}; > - > -static void devm_i2c_release_dummy(struct device *dev, void *res) > +static void devm_i2c_release_dummy(void *client) > { > - struct i2c_dummy_devres *this = res; > - > - i2c_unregister_device(this->client); > + i2c_unregister_device(client); > } > > /** > @@ -1041,20 +1035,16 @@ struct i2c_client *devm_i2c_new_dummy_device(struct device *dev, > struct i2c_adapter *adapter, > u16 address) > { > - struct i2c_dummy_devres *dr; > struct i2c_client *client; > - > - dr = devres_alloc(devm_i2c_release_dummy, sizeof(*dr), GFP_KERNEL); > - if (!dr) > - return ERR_PTR(-ENOMEM); > + int ret; > > client = i2c_new_dummy_device(adapter, address); > - if (IS_ERR(client)) { > - devres_free(dr); > - } else { > - dr->client = client; > - devres_add(dev, dr); > - } > + if (IS_ERR(client)) > + return client; > + > + ret = devm_add_action_or_reset(dev, devm_i2c_release_dummy, client); > + if (ret) > + return ERR_PTR(ret); > > return client; > } > -- > 2.8.1 > -- With Best Regards, Andy Shevchenko