hc
2023-12-06 08f87f769b595151be1afeff53e144f543faa614
kernel/drivers/iio/light/si1133.c
....@@ -17,6 +17,8 @@
1717
1818 #include <linux/util_macros.h>
1919
20
+#include <asm/unaligned.h>
21
+
2022 #define SI1133_REG_PART_ID 0x00
2123 #define SI1133_REG_REV_ID 0x01
2224 #define SI1133_REG_MFR_ID 0x02
....@@ -103,8 +105,6 @@
103105 #define SI1133_LUX_OUTPUT_FRACTION 12
104106 #define SI1133_LUX_BUFFER_SIZE 9
105107 #define SI1133_MEASURE_BUFFER_SIZE 3
106
-
107
-#define SI1133_SIGN_BIT_INDEX 23
108108
109109 static const int si1133_scale_available[] = {
110110 1, 2, 4, 8, 16, 32, 64, 128};
....@@ -633,8 +633,7 @@
633633 if (err)
634634 return err;
635635
636
- *val = sign_extend32((buffer[0] << 16) | (buffer[1] << 8) | buffer[2],
637
- SI1133_SIGN_BIT_INDEX);
636
+ *val = sign_extend32(get_unaligned_be24(&buffer[0]), 23);
638637
639638 return err;
640639 }
....@@ -723,16 +722,11 @@
723722 if (err)
724723 return err;
725724
726
- high_vis =
727
- sign_extend32((buffer[0] << 16) | (buffer[1] << 8) | buffer[2],
728
- SI1133_SIGN_BIT_INDEX);
725
+ high_vis = sign_extend32(get_unaligned_be24(&buffer[0]), 23);
729726
730
- low_vis =
731
- sign_extend32((buffer[3] << 16) | (buffer[4] << 8) | buffer[5],
732
- SI1133_SIGN_BIT_INDEX);
727
+ low_vis = sign_extend32(get_unaligned_be24(&buffer[3]), 23);
733728
734
- ir = sign_extend32((buffer[6] << 16) | (buffer[7] << 8) | buffer[8],
735
- SI1133_SIGN_BIT_INDEX);
729
+ ir = sign_extend32(get_unaligned_be24(&buffer[6]), 23);
736730
737731 if (high_vis > SI1133_ADC_THRESHOLD || ir > SI1133_ADC_THRESHOLD)
738732 lux = si1133_calc_polynomial(high_vis, ir,
....@@ -1021,7 +1015,6 @@
10211015 i2c_set_clientdata(client, iio_dev);
10221016 data->client = client;
10231017
1024
- iio_dev->dev.parent = &client->dev;
10251018 iio_dev->name = id->name;
10261019 iio_dev->channels = si1133_channels;
10271020 iio_dev->num_channels = ARRAY_SIZE(si1133_channels);