Re: [PATCH 1/4] iio: pressure: mpl3115: convert probe to fully devm managed
SeungJu Cheon <[email protected]> Sun, 31 May 2026 19:49:40 +0900
| Newsgroups | dev.linux.lists.linux-kernel-mentees,org.kernel.vger.linux-iio |
|---|---|
| Message-ID | <CAGwK=3oJ1EhcC9uA0dufvCfkEfok2vx9yGYCO7iy22gkYW-=5A@mail.gmail.com> |
Hi Jonathan, thanks for the detailed review. On Sat, 30 May 2026 20:39:35 +0900 SeungJu Cheon <[email protected]> wrote: > > Register a devm action to return the device to standby, > > replacing the cleanup previously performed in > > mpl3115_remove(). > > This should have noted that in error paths the standby wasn't there > and now is. However see below; I think the patch need to be split in > at least two parts. You're right. I'll split it into two patches in v2: 1. Add the standby cleanup on the probe error path (no devm yet). 2. Convert to devm-managed allocation. and note the error-path behaviour change explicitly. > Very short wrap. Exactly whether to limit commit messages to 72 or > 75 chars is a bit of a matter of opinion, but this is 50 something. Understood, I'll rewrap the commit messages closer to 75 chars. > > Move mpl3115_standby() and suspend/resume helpers above > > probe to satisfy declaration ordering requirements. > > Not obvious why the suspend/resume moved. Just move the minimum to > make the patch easier to read. Agreed, that was unnecessary churn. I'll move only what's needed and leave suspend/resume in place. > > No functional change. > > Not true. That error path gaining suspend of device is a functional > change. You're right, I'll drop that line. The error-path change will live in the split-out fix patch and be described there. > Take opportunity to tidy indent up now we are less fuzzy about 80 > chars. Will fix the indentation as you show. > Andy covered this. I think we ripped out most instances of this a > year or so back as it is a pointless bit of bouncing back and forth > between container structure and the contained. Yes, switching to dev_get_drvdata() in v2. > Andy called out the question of why these moved. It makes the patch > somewhat harder to review, so don't do that in this patch even if > there is a reason to do it. Understood, I'll leave suspend/resume untouched here. > So in the error path for this function we will now call this standby > action. If there isn't an equivalent in the original code, break > this up. > Patch 1. Add that cleanup without any devm stuff ... > Patch 2. Devm stuff. Confirmed there's no standby on the error path in the current code, so I'll break it up exactly as you describe. > Indent as something like: > ret = devm_iio_triggered_buffer_setup(&client->dev, indio_dev, NULL, > mpl3115_trigger_handler, NULL); Will do. Thanks again. On Sun, May 31, 2026 at 12:10 AM Jonathan Cameron <[email protected]> wrote: > > On Sat, 30 May 2026 20:39:35 +0900 > SeungJu Cheon <[email protected]> wrote: > > > Convert probe to use devm-managed resource allocation, > > removing the need for an explicit remove callback. > > Hi SeungJu, > > > > > Replace iio_triggered_buffer_setup() and > > iio_device_register() with their devm equivalents. > > Register a devm action to return the device to standby, > > replacing the cleanup previously performed in > > mpl3115_remove(). > > This should have noted that in error paths the standby wasn't there and now is. > However see below; I think the patch need to be split in at least two parts. > > Very short wrap. Exactly whether to limit commit messages to 72 or 75 chars > is a bit of a matter of opinion, but this is 50 something. > > > > Move mpl3115_standby() and suspend/resume helpers above > > probe to satisfy declaration ordering requirements. > Not obvious why the suspend/resume moved. Just move the minimum to make > the patch easier to read. > > > > No functional change. > > Not true. That error path gaining suspend of device is a functional change. > > > > > Signed-off-by: SeungJu Cheon <[email protected]> > > --- > > drivers/iio/pressure/mpl3115.c | 81 ++++++++++++++++------------------ > > 1 file changed, 39 insertions(+), 42 deletions(-) > > > > diff --git a/drivers/iio/pressure/mpl3115.c b/drivers/iio/pressure/mpl3115.c > > index aeac1586f12e..befb6d48efa9 100644 > > --- a/drivers/iio/pressure/mpl3115.c > > +++ b/drivers/iio/pressure/mpl3115.c > > @@ -691,6 +691,33 @@ static int mpl3115_trigger_probe(struct mpl3115_data *data, > > return 0; > > } > > > > +static int mpl3115_standby(struct mpl3115_data *data) > > +{ > > + return i2c_smbus_write_byte_data(data->client, MPL3115_CTRL_REG1, > > + data->ctrl_reg1 & ~MPL3115_CTRL1_ACTIVE); > > Take opportunity to tidy indent up now we are less fuzzy about 80 chars. > > return i2c_smbus_write_byte_data(data->client, MPL3115_CTRL_REG1, > data->ctrl_reg1 & ~MPL3115_CTRL1_ACTIVE); > is the preferred style. > > > +} > > + > > +static void mpl3115_standby_action(void *d) > > +{ > > + mpl3115_standby(d); > > +} > > + > > +static int mpl3115_suspend(struct device *dev) > > +{ > > + struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); > > Andy covered this. I think we ripped out most instances of this a year > or so back as it is a pointless bit of bouncing back and forth between > container structure and the contained. > > > + > > + return mpl3115_standby(iio_priv(indio_dev)); > > +} > > + > > +static int mpl3115_resume(struct device *dev) > > +{ > > + struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); > > + struct mpl3115_data *data = iio_priv(indio_dev); > > + > > + return i2c_smbus_write_byte_data(data->client, MPL3115_CTRL_REG1, > > + data->ctrl_reg1); > > +} > > Andy called out the question of why these moved. It makes the patch > somewhat harder to review, so don't do that in this patch even if there > is a reason to do it. > > > + > > static int mpl3115_probe(struct i2c_client *client) > > { > > const struct i2c_device_id *id = i2c_client_get_device_id(client); > > @@ -730,53 +757,24 @@ static int mpl3115_probe(struct i2c_client *client) > > if (ret < 0) > > return ret; > > > > - ret = mpl3115_trigger_probe(data, indio_dev); > > + ret = devm_add_action_or_reset(&client->dev, mpl3115_standby_action, > > + data); > > So in the error path for this function we will now call this standby > action. If there isn't an equivalent in the original code, break this up. > > Patch 1. Add that cleanup without any devm stuff (almost a fix but it's > only going to waste a bit of power in an unlikely error path so > we probably won't backport it). > Patch 2. Devm stuff. > > > if (ret) > > return ret; > > > > - ret = iio_triggered_buffer_setup(indio_dev, NULL, > > - mpl3115_trigger_handler, NULL); > > - if (ret < 0) > > + ret = mpl3115_trigger_probe(data, indio_dev); > > + if (ret) > > return ret; > > > > - ret = iio_device_register(indio_dev); > > - if (ret < 0) > > - goto buffer_cleanup; > > - return 0; > > - > > -buffer_cleanup: > > - iio_triggered_buffer_cleanup(indio_dev); > > - return ret; > > -} > > - > > -static int mpl3115_standby(struct mpl3115_data *data) > > -{ > > - return i2c_smbus_write_byte_data(data->client, MPL3115_CTRL_REG1, > > - data->ctrl_reg1 & ~MPL3115_CTRL1_ACTIVE); > > -} > > - > > -static void mpl3115_remove(struct i2c_client *client) > > -{ > > - struct iio_dev *indio_dev = i2c_get_clientdata(client); > > - > > - iio_device_unregister(indio_dev); > > - iio_triggered_buffer_cleanup(indio_dev); > > - mpl3115_standby(iio_priv(indio_dev)); > > -} > > - > > -static int mpl3115_suspend(struct device *dev) > > -{ > > - return mpl3115_standby(iio_priv(i2c_get_clientdata( > > - to_i2c_client(dev)))); > > -} > > - > > -static int mpl3115_resume(struct device *dev) > > -{ > > - struct mpl3115_data *data = iio_priv(i2c_get_clientdata( > > - to_i2c_client(dev))); > > + ret = devm_iio_triggered_buffer_setup(&client->dev, > > + indio_dev, > > + NULL, > > + mpl3115_trigger_handler, > > + NULL); > > Indent as something like: > > ret = devm_iio_triggered_buffer_setup(&client->dev, indio_dev, NULL, > mpl3115_trigger_handler, NULL); > > > + if (ret) > > + return ret; > > > > - return i2c_smbus_write_byte_data(data->client, MPL3115_CTRL_REG1, > > - data->ctrl_reg1); > > + return devm_iio_device_register(&client->dev, indio_dev); > > } > > > > static DEFINE_SIMPLE_DEV_PM_OPS(mpl3115_pm_ops, mpl3115_suspend, > > @@ -801,7 +799,6 @@ static struct i2c_driver mpl3115_driver = { > > .pm = pm_sleep_ptr(&mpl3115_pm_ops), > > }, > > .probe = mpl3115_probe, > > - .remove = mpl3115_remove, > > .id_table = mpl3115_id, > > }; > > module_i2c_driver(mpl3115_driver); >