[PATCH 1/4] iio: pressure: mpl3115: convert probe to fully devm managed

SeungJu Cheon <[email protected]>
Newsgroups dev.linux.lists.linux-kernel-mentees,org.kernel.vger.linux-iio
Message-ID <[email protected]>
Convert probe to use devm-managed resource allocation,
removing the need for an explicit remove callback.

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().

Move mpl3115_standby() and suspend/resume helpers above
probe to satisfy declaration ordering requirements.

No 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);
+}
+
+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));
+
+	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);
+}
+
 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);
 	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);
+	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);
-- 
2.52.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.