Message ID | 1617884260-15461-1-git-send-email-yangyicong@hisilicon.com |
---|---|
State | Accepted |
Commit | bb7f086b8404e70ac2891ba539f959805f1684b0 |
Headers | show |
Series | i2c: core: simplify devm_i2c_new_dummy_device() | expand |
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@linux.intel.com> > Signed-off-by: Yicong Yang <yangyicong@hisilicon.com> > --- > 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 >
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; }
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. Signed-off-by: Yicong Yang <yangyicong@hisilicon.com> --- drivers/i2c/i2c-core-base.c | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) -- 2.8.1