| .. | .. |
|---|
| 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); |
|---|