.. | .. |
---|
17 | 17 | |
---|
18 | 18 | #include <linux/util_macros.h> |
---|
19 | 19 | |
---|
| 20 | +#include <asm/unaligned.h> |
---|
| 21 | + |
---|
20 | 22 | #define SI1133_REG_PART_ID 0x00 |
---|
21 | 23 | #define SI1133_REG_REV_ID 0x01 |
---|
22 | 24 | #define SI1133_REG_MFR_ID 0x02 |
---|
.. | .. |
---|
103 | 105 | #define SI1133_LUX_OUTPUT_FRACTION 12 |
---|
104 | 106 | #define SI1133_LUX_BUFFER_SIZE 9 |
---|
105 | 107 | #define SI1133_MEASURE_BUFFER_SIZE 3 |
---|
106 | | - |
---|
107 | | -#define SI1133_SIGN_BIT_INDEX 23 |
---|
108 | 108 | |
---|
109 | 109 | static const int si1133_scale_available[] = { |
---|
110 | 110 | 1, 2, 4, 8, 16, 32, 64, 128}; |
---|
.. | .. |
---|
633 | 633 | if (err) |
---|
634 | 634 | return err; |
---|
635 | 635 | |
---|
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); |
---|
638 | 637 | |
---|
639 | 638 | return err; |
---|
640 | 639 | } |
---|
.. | .. |
---|
723 | 722 | if (err) |
---|
724 | 723 | return err; |
---|
725 | 724 | |
---|
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); |
---|
729 | 726 | |
---|
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); |
---|
733 | 728 | |
---|
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); |
---|
736 | 730 | |
---|
737 | 731 | if (high_vis > SI1133_ADC_THRESHOLD || ir > SI1133_ADC_THRESHOLD) |
---|
738 | 732 | lux = si1133_calc_polynomial(high_vis, ir, |
---|
.. | .. |
---|
1021 | 1015 | i2c_set_clientdata(client, iio_dev); |
---|
1022 | 1016 | data->client = client; |
---|
1023 | 1017 | |
---|
1024 | | - iio_dev->dev.parent = &client->dev; |
---|
1025 | 1018 | iio_dev->name = id->name; |
---|
1026 | 1019 | iio_dev->channels = si1133_channels; |
---|
1027 | 1020 | iio_dev->num_channels = ARRAY_SIZE(si1133_channels); |
---|