forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-10-09 244b2c5ca8b14627e4a17755e5922221e121c771
kernel/drivers/iio/light/cm3323.c
....@@ -1,11 +1,8 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * CM3323 - Capella Color Light Sensor
34 *
45 * Copyright (c) 2015, Intel Corporation.
5
- *
6
- * This file is subject to the terms and conditions of version 2 of
7
- * the GNU General Public License. See the file COPYING in the main
8
- * directory of this archive for more details.
96 *
107 * IIO driver for CM3323 (7-bit I2C slave address 0x10)
118 *
....@@ -104,15 +101,16 @@
104101 return 0;
105102 }
106103
107
-static void cm3323_disable(struct iio_dev *indio_dev)
104
+static void cm3323_disable(void *data)
108105 {
109106 int ret;
110
- struct cm3323_data *data = iio_priv(indio_dev);
107
+ struct iio_dev *indio_dev = data;
108
+ struct cm3323_data *cm_data = iio_priv(indio_dev);
111109
112
- ret = i2c_smbus_write_word_data(data->client, CM3323_CMD_CONF,
110
+ ret = i2c_smbus_write_word_data(cm_data->client, CM3323_CMD_CONF,
113111 CM3323_CONF_SD_BIT);
114112 if (ret < 0)
115
- dev_err(&data->client->dev, "Error writing reg_conf\n");
113
+ dev_err(&cm_data->client->dev, "Error writing reg_conf\n");
116114 }
117115
118116 static int cm3323_set_it_bits(struct cm3323_data *data, int val, int val2)
....@@ -233,7 +231,6 @@
233231
234232 mutex_init(&data->mutex);
235233
236
- indio_dev->dev.parent = &client->dev;
237234 indio_dev->info = &cm3323_info;
238235 indio_dev->name = CM3323_DRV_NAME;
239236 indio_dev->channels = cm3323_channels;
....@@ -246,26 +243,11 @@
246243 return ret;
247244 }
248245
249
- ret = iio_device_register(indio_dev);
250
- if (ret < 0) {
251
- dev_err(&client->dev, "failed to register iio dev\n");
252
- goto err_init;
253
- }
246
+ ret = devm_add_action_or_reset(&client->dev, cm3323_disable, indio_dev);
247
+ if (ret < 0)
248
+ return ret;
254249
255
- return 0;
256
-err_init:
257
- cm3323_disable(indio_dev);
258
- return ret;
259
-}
260
-
261
-static int cm3323_remove(struct i2c_client *client)
262
-{
263
- struct iio_dev *indio_dev = i2c_get_clientdata(client);
264
-
265
- iio_device_unregister(indio_dev);
266
- cm3323_disable(indio_dev);
267
-
268
- return 0;
250
+ return devm_iio_device_register(&client->dev, indio_dev);
269251 }
270252
271253 static const struct i2c_device_id cm3323_id[] = {
....@@ -279,7 +261,6 @@
279261 .name = CM3323_DRV_NAME,
280262 },
281263 .probe = cm3323_probe,
282
- .remove = cm3323_remove,
283264 .id_table = cm3323_id,
284265 };
285266