.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * si1145.c - Support for Silabs SI1132 and SI1141/2/3/5/6/7 combined ambient |
---|
3 | 4 | * light, UV index and proximity sensors |
---|
4 | 5 | * |
---|
5 | 6 | * Copyright 2014-16 Peter Meerwald-Stadler <pmeerw@pmeerw.net> |
---|
6 | 7 | * Copyright 2016 Crestez Dan Leonard <leonard.crestez@intel.com> |
---|
7 | | - * |
---|
8 | | - * This file is subject to the terms and conditions of version 2 of |
---|
9 | | - * the GNU General Public License. See the file COPYING in the main |
---|
10 | | - * directory of this archive for more details. |
---|
11 | 8 | * |
---|
12 | 9 | * SI1132 (7-bit I2C slave address 0x60) |
---|
13 | 10 | * SI1141/2/3 (7-bit I2C slave address 0x5a) |
---|
.. | .. |
---|
20 | 17 | #include <linux/slab.h> |
---|
21 | 18 | #include <linux/delay.h> |
---|
22 | 19 | #include <linux/irq.h> |
---|
23 | | -#include <linux/gpio.h> |
---|
24 | 20 | |
---|
25 | 21 | #include <linux/iio/iio.h> |
---|
26 | 22 | #include <linux/iio/sysfs.h> |
---|
.. | .. |
---|
194 | 190 | u8 buffer[24] __aligned(8); |
---|
195 | 191 | }; |
---|
196 | 192 | |
---|
197 | | -/** |
---|
| 193 | +/* |
---|
198 | 194 | * __si1145_command_reset() - Send CMD_NOP and wait for response 0 |
---|
199 | 195 | * |
---|
200 | 196 | * Does not modify data->rsp_seq |
---|
.. | .. |
---|
228 | 224 | } |
---|
229 | 225 | } |
---|
230 | 226 | |
---|
231 | | -/** |
---|
| 227 | +/* |
---|
232 | 228 | * si1145_command() - Execute a command and poll the response register |
---|
233 | 229 | * |
---|
234 | 230 | * All conversion overflows are reported as -EOVERFLOW |
---|
.. | .. |
---|
1049 | 1045 | SI1145_LED_CURRENT_45mA); |
---|
1050 | 1046 | if (ret < 0) |
---|
1051 | 1047 | return ret; |
---|
1052 | | - /* fallthrough */ |
---|
| 1048 | + fallthrough; |
---|
1053 | 1049 | case 2: |
---|
1054 | 1050 | ret = i2c_smbus_write_byte_data(client, |
---|
1055 | 1051 | SI1145_REG_PS_LED21, |
---|
.. | .. |
---|
1178 | 1174 | |
---|
1179 | 1175 | static const struct iio_buffer_setup_ops si1145_buffer_setup_ops = { |
---|
1180 | 1176 | .preenable = si1145_buffer_preenable, |
---|
1181 | | - .postenable = iio_triggered_buffer_postenable, |
---|
1182 | | - .predisable = iio_triggered_buffer_predisable, |
---|
1183 | 1177 | .validate_scan_mask = si1145_validate_scan_mask, |
---|
1184 | 1178 | }; |
---|
1185 | 1179 | |
---|
1186 | | -/** |
---|
| 1180 | +/* |
---|
1187 | 1181 | * si1145_trigger_set_state() - Set trigger state |
---|
1188 | 1182 | * |
---|
1189 | 1183 | * When not using triggers interrupts are disabled and measurement rate is |
---|
.. | .. |
---|
1267 | 1261 | return ret; |
---|
1268 | 1262 | } |
---|
1269 | 1263 | |
---|
1270 | | - ret = iio_trigger_register(trig); |
---|
| 1264 | + ret = devm_iio_trigger_register(&client->dev, trig); |
---|
1271 | 1265 | if (ret) |
---|
1272 | 1266 | return ret; |
---|
1273 | 1267 | |
---|
.. | .. |
---|
1275 | 1269 | indio_dev->trig = iio_trigger_get(data->trig); |
---|
1276 | 1270 | |
---|
1277 | 1271 | return 0; |
---|
1278 | | -} |
---|
1279 | | - |
---|
1280 | | -static void si1145_remove_trigger(struct iio_dev *indio_dev) |
---|
1281 | | -{ |
---|
1282 | | - struct si1145_data *data = iio_priv(indio_dev); |
---|
1283 | | - |
---|
1284 | | - if (data->trig) { |
---|
1285 | | - iio_trigger_unregister(data->trig); |
---|
1286 | | - data->trig = NULL; |
---|
1287 | | - } |
---|
1288 | 1272 | } |
---|
1289 | 1273 | |
---|
1290 | 1274 | static int si1145_probe(struct i2c_client *client, |
---|
.. | .. |
---|
1324 | 1308 | return -ENODEV; |
---|
1325 | 1309 | } |
---|
1326 | 1310 | |
---|
1327 | | - indio_dev->dev.parent = &client->dev; |
---|
1328 | 1311 | indio_dev->name = id->name; |
---|
1329 | 1312 | indio_dev->channels = data->part_info->channels; |
---|
1330 | 1313 | indio_dev->num_channels = data->part_info->num_channels; |
---|
.. | .. |
---|
1338 | 1321 | if (ret < 0) |
---|
1339 | 1322 | return ret; |
---|
1340 | 1323 | |
---|
1341 | | - ret = iio_triggered_buffer_setup(indio_dev, NULL, |
---|
| 1324 | + ret = devm_iio_triggered_buffer_setup(&client->dev, |
---|
| 1325 | + indio_dev, NULL, |
---|
1342 | 1326 | si1145_trigger_handler, &si1145_buffer_setup_ops); |
---|
1343 | 1327 | if (ret < 0) |
---|
1344 | 1328 | return ret; |
---|
.. | .. |
---|
1346 | 1330 | if (client->irq) { |
---|
1347 | 1331 | ret = si1145_probe_trigger(indio_dev); |
---|
1348 | 1332 | if (ret < 0) |
---|
1349 | | - goto error_free_buffer; |
---|
| 1333 | + return ret; |
---|
1350 | 1334 | } else { |
---|
1351 | 1335 | dev_info(&client->dev, "no irq, using polling\n"); |
---|
1352 | 1336 | } |
---|
1353 | 1337 | |
---|
1354 | | - ret = iio_device_register(indio_dev); |
---|
1355 | | - if (ret < 0) |
---|
1356 | | - goto error_free_trigger; |
---|
1357 | | - |
---|
1358 | | - return 0; |
---|
1359 | | - |
---|
1360 | | -error_free_trigger: |
---|
1361 | | - si1145_remove_trigger(indio_dev); |
---|
1362 | | -error_free_buffer: |
---|
1363 | | - iio_triggered_buffer_cleanup(indio_dev); |
---|
1364 | | - |
---|
1365 | | - return ret; |
---|
| 1338 | + return devm_iio_device_register(&client->dev, indio_dev); |
---|
1366 | 1339 | } |
---|
1367 | 1340 | |
---|
1368 | 1341 | static const struct i2c_device_id si1145_ids[] = { |
---|
.. | .. |
---|
1377 | 1350 | }; |
---|
1378 | 1351 | MODULE_DEVICE_TABLE(i2c, si1145_ids); |
---|
1379 | 1352 | |
---|
1380 | | -static int si1145_remove(struct i2c_client *client) |
---|
1381 | | -{ |
---|
1382 | | - struct iio_dev *indio_dev = i2c_get_clientdata(client); |
---|
1383 | | - |
---|
1384 | | - iio_device_unregister(indio_dev); |
---|
1385 | | - si1145_remove_trigger(indio_dev); |
---|
1386 | | - iio_triggered_buffer_cleanup(indio_dev); |
---|
1387 | | - |
---|
1388 | | - return 0; |
---|
1389 | | -} |
---|
1390 | | - |
---|
1391 | 1353 | static struct i2c_driver si1145_driver = { |
---|
1392 | 1354 | .driver = { |
---|
1393 | 1355 | .name = "si1145", |
---|
1394 | 1356 | }, |
---|
1395 | 1357 | .probe = si1145_probe, |
---|
1396 | | - .remove = si1145_remove, |
---|
1397 | 1358 | .id_table = si1145_ids, |
---|
1398 | 1359 | }; |
---|
1399 | 1360 | |
---|