forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-10 37f49e37ab4cb5d0bc4c60eb5c6d4dd57db767bb
kernel/drivers/iio/pressure/zpa2326.c
....@@ -1,18 +1,10 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * Murata ZPA2326 pressure and temperature sensor IIO driver
34 *
45 * Copyright (c) 2016 Parrot S.A.
56 *
67 * Author: Gregor Boirie <gregor.boirie@parrot.com>
7
- *
8
- * This program is free software; you can redistribute it and/or modify it
9
- * under the terms of the GNU General Public License version 2 as published by
10
- * the Free Software Foundation.
11
- *
12
- * This program is distributed in the hope that it will be useful, but WITHOUT
13
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15
- * more details.
168 */
179
1810 /**
....@@ -72,6 +64,7 @@
7264 #include <linux/iio/trigger.h>
7365 #include <linux/iio/trigger_consumer.h>
7466 #include <linux/iio/triggered_buffer.h>
67
+#include <asm/unaligned.h>
7568 #include "zpa2326.h"
7669
7770 /* 200 ms should be enough for the longest conversion time in one-shot mode. */
....@@ -1015,22 +1008,20 @@
10151008 struct regmap *regs = ((struct zpa2326_private *)
10161009 iio_priv(indio_dev))->regmap;
10171010 int err;
1011
+ u8 v[3];
10181012
10191013 switch (type) {
10201014 case IIO_PRESSURE:
10211015 zpa2326_dbg(indio_dev, "fetching raw pressure sample");
10221016
1023
- err = regmap_bulk_read(regs, ZPA2326_PRESS_OUT_XL_REG, value,
1024
- 3);
1017
+ err = regmap_bulk_read(regs, ZPA2326_PRESS_OUT_XL_REG, v, sizeof(v));
10251018 if (err) {
10261019 zpa2326_warn(indio_dev, "failed to fetch pressure (%d)",
10271020 err);
10281021 return err;
10291022 }
10301023
1031
- /* Pressure is a 24 bits wide little-endian unsigned int. */
1032
- *value = (((u8 *)value)[2] << 16) | (((u8 *)value)[1] << 8) |
1033
- ((u8 *)value)[0];
1024
+ *value = get_unaligned_le24(&v[0]);
10341025
10351026 return IIO_VAL_INT;
10361027
....@@ -1259,8 +1250,11 @@
12591250 * get rid of samples acquired during previous rounds (if any).
12601251 */
12611252 err = zpa2326_clear_fifo(indio_dev, 0);
1262
- if (err)
1263
- goto err;
1253
+ if (err) {
1254
+ zpa2326_err(indio_dev,
1255
+ "failed to enable buffering (%d)", err);
1256
+ return err;
1257
+ }
12641258 }
12651259
12661260 if (!iio_trigger_using_own(indio_dev) && priv->waken) {
....@@ -1269,21 +1263,14 @@
12691263 * powered up: reconfigure one-shot mode.
12701264 */
12711265 err = zpa2326_config_oneshot(indio_dev, priv->irq);
1272
- if (err)
1273
- goto err;
1266
+ if (err) {
1267
+ zpa2326_err(indio_dev,
1268
+ "failed to enable buffering (%d)", err);
1269
+ return err;
1270
+ }
12741271 }
12751272
1276
- /* Plug our own trigger event handler. */
1277
- err = iio_triggered_buffer_postenable(indio_dev);
1278
- if (err)
1279
- goto err;
1280
-
12811273 return 0;
1282
-
1283
-err:
1284
- zpa2326_err(indio_dev, "failed to enable buffering (%d)", err);
1285
-
1286
- return err;
12871274 }
12881275
12891276 static int zpa2326_postdisable_buffer(struct iio_dev *indio_dev)
....@@ -1296,7 +1283,6 @@
12961283 static const struct iio_buffer_setup_ops zpa2326_buffer_setup_ops = {
12971284 .preenable = zpa2326_preenable_buffer,
12981285 .postenable = zpa2326_postenable_buffer,
1299
- .predisable = iio_triggered_buffer_predisable,
13001286 .postdisable = zpa2326_postdisable_buffer
13011287 };
13021288
....@@ -1610,7 +1596,6 @@
16101596
16111597 /* Setup for userspace synchronous on demand sampling. */
16121598 indio_dev->modes = INDIO_DIRECT_MODE;
1613
- indio_dev->dev.parent = device;
16141599 indio_dev->channels = zpa2326_channels;
16151600 indio_dev->num_channels = ARRAY_SIZE(zpa2326_channels);
16161601 indio_dev->name = name;