Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drivers: imu: adis16475.c: Remove scan index from delta channels

Some devices do not support delta angle and delta velocity
burst readings, which means there should be no buffer support
for these types of channels.
A new list of channels is created which contains the delta
channels structures with the scan index equal to -1 to allow
for raw register readings, without buffer support.
This list of channels is assigned to the devices which
do not support delta angle and delta velocity burst
readings.

Fixes: 8f6bc87d67c0 ("iio: imu: adis16475.c: Add delta angle and delta velocity channels")
Signed-off-by: Ramona Gradinariu <ramona.gradinariu@analog.com>
Reviewed-by: Nuno Sa <nuno.sa@analog.com>
Link: https://lore.kernel.org/r/20231012122456.765709-2-ramona.gradinariu@analog.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

Ramona Gradinariu and committed by
Jonathan Cameron
ba251b20 e9d8add6

+46 -21
+46 -21
drivers/iio/imu/adis16475.c
··· 604 604 ADIS16475_MOD_CHAN_DELTA(IIO_DELTA_VELOCITY, IIO_MOD_ ## _mod, \ 605 605 ADIS16475_REG_ ## _mod ## _DELTVEL_L, ADIS16475_SCAN_DELTVEL_ ## _mod, 32, 32) 606 606 607 - static const struct iio_chan_spec adis16475_channels[] = { 607 + #define ADIS16475_DELTANG_CHAN_NO_SCAN(_mod) \ 608 + ADIS16475_MOD_CHAN_DELTA(IIO_DELTA_ANGL, IIO_MOD_ ## _mod, \ 609 + ADIS16475_REG_ ## _mod ## _DELTANG_L, -1, 32, 32) 610 + 611 + #define ADIS16475_DELTVEL_CHAN_NO_SCAN(_mod) \ 612 + ADIS16475_MOD_CHAN_DELTA(IIO_DELTA_VELOCITY, IIO_MOD_ ## _mod, \ 613 + ADIS16475_REG_ ## _mod ## _DELTVEL_L, -1, 32, 32) 614 + 615 + static const struct iio_chan_spec adis16477_channels[] = { 608 616 ADIS16475_GYRO_CHANNEL(X), 609 617 ADIS16475_GYRO_CHANNEL(Y), 610 618 ADIS16475_GYRO_CHANNEL(Z), ··· 627 619 ADIS16475_DELTVEL_CHAN(Y), 628 620 ADIS16475_DELTVEL_CHAN(Z), 629 621 IIO_CHAN_SOFT_TIMESTAMP(13) 622 + }; 623 + 624 + static const struct iio_chan_spec adis16475_channels[] = { 625 + ADIS16475_GYRO_CHANNEL(X), 626 + ADIS16475_GYRO_CHANNEL(Y), 627 + ADIS16475_GYRO_CHANNEL(Z), 628 + ADIS16475_ACCEL_CHANNEL(X), 629 + ADIS16475_ACCEL_CHANNEL(Y), 630 + ADIS16475_ACCEL_CHANNEL(Z), 631 + ADIS16475_TEMP_CHANNEL(), 632 + ADIS16475_DELTANG_CHAN_NO_SCAN(X), 633 + ADIS16475_DELTANG_CHAN_NO_SCAN(Y), 634 + ADIS16475_DELTANG_CHAN_NO_SCAN(Z), 635 + ADIS16475_DELTVEL_CHAN_NO_SCAN(X), 636 + ADIS16475_DELTVEL_CHAN_NO_SCAN(Y), 637 + ADIS16475_DELTVEL_CHAN_NO_SCAN(Z), 638 + IIO_CHAN_SOFT_TIMESTAMP(7) 630 639 }; 631 640 632 641 enum adis16475_variant { ··· 807 782 }, 808 783 [ADIS16477_1] = { 809 784 .name = "adis16477-1", 810 - .num_channels = ARRAY_SIZE(adis16475_channels), 811 - .channels = adis16475_channels, 785 + .num_channels = ARRAY_SIZE(adis16477_channels), 786 + .channels = adis16477_channels, 812 787 .gyro_max_val = 1, 813 788 .gyro_max_scale = IIO_RAD_TO_DEGREE(160 << 16), 814 789 .accel_max_val = 1, ··· 825 800 }, 826 801 [ADIS16477_2] = { 827 802 .name = "adis16477-2", 828 - .num_channels = ARRAY_SIZE(adis16475_channels), 829 - .channels = adis16475_channels, 803 + .num_channels = ARRAY_SIZE(adis16477_channels), 804 + .channels = adis16477_channels, 830 805 .gyro_max_val = 1, 831 806 .gyro_max_scale = IIO_RAD_TO_DEGREE(40 << 16), 832 807 .accel_max_val = 1, ··· 843 818 }, 844 819 [ADIS16477_3] = { 845 820 .name = "adis16477-3", 846 - .num_channels = ARRAY_SIZE(adis16475_channels), 847 - .channels = adis16475_channels, 821 + .num_channels = ARRAY_SIZE(adis16477_channels), 822 + .channels = adis16477_channels, 848 823 .gyro_max_val = 1, 849 824 .gyro_max_scale = IIO_RAD_TO_DEGREE(10 << 16), 850 825 .accel_max_val = 1, ··· 963 938 }, 964 939 [ADIS16500] = { 965 940 .name = "adis16500", 966 - .num_channels = ARRAY_SIZE(adis16475_channels), 967 - .channels = adis16475_channels, 941 + .num_channels = ARRAY_SIZE(adis16477_channels), 942 + .channels = adis16477_channels, 968 943 .gyro_max_val = 1, 969 944 .gyro_max_scale = IIO_RAD_TO_DEGREE(10 << 16), 970 945 .accel_max_val = 392, ··· 982 957 }, 983 958 [ADIS16505_1] = { 984 959 .name = "adis16505-1", 985 - .num_channels = ARRAY_SIZE(adis16475_channels), 986 - .channels = adis16475_channels, 960 + .num_channels = ARRAY_SIZE(adis16477_channels), 961 + .channels = adis16477_channels, 987 962 .gyro_max_val = 1, 988 963 .gyro_max_scale = IIO_RAD_TO_DEGREE(160 << 16), 989 964 .accel_max_val = 78, ··· 1001 976 }, 1002 977 [ADIS16505_2] = { 1003 978 .name = "adis16505-2", 1004 - .num_channels = ARRAY_SIZE(adis16475_channels), 1005 - .channels = adis16475_channels, 979 + .num_channels = ARRAY_SIZE(adis16477_channels), 980 + .channels = adis16477_channels, 1006 981 .gyro_max_val = 1, 1007 982 .gyro_max_scale = IIO_RAD_TO_DEGREE(40 << 16), 1008 983 .accel_max_val = 78, ··· 1020 995 }, 1021 996 [ADIS16505_3] = { 1022 997 .name = "adis16505-3", 1023 - .num_channels = ARRAY_SIZE(adis16475_channels), 1024 - .channels = adis16475_channels, 998 + .num_channels = ARRAY_SIZE(adis16477_channels), 999 + .channels = adis16477_channels, 1025 1000 .gyro_max_val = 1, 1026 1001 .gyro_max_scale = IIO_RAD_TO_DEGREE(10 << 16), 1027 1002 .accel_max_val = 78, ··· 1039 1014 }, 1040 1015 [ADIS16507_1] = { 1041 1016 .name = "adis16507-1", 1042 - .num_channels = ARRAY_SIZE(adis16475_channels), 1043 - .channels = adis16475_channels, 1017 + .num_channels = ARRAY_SIZE(adis16477_channels), 1018 + .channels = adis16477_channels, 1044 1019 .gyro_max_val = 1, 1045 1020 .gyro_max_scale = IIO_RAD_TO_DEGREE(160 << 16), 1046 1021 .accel_max_val = 392, ··· 1058 1033 }, 1059 1034 [ADIS16507_2] = { 1060 1035 .name = "adis16507-2", 1061 - .num_channels = ARRAY_SIZE(adis16475_channels), 1062 - .channels = adis16475_channels, 1036 + .num_channels = ARRAY_SIZE(adis16477_channels), 1037 + .channels = adis16477_channels, 1063 1038 .gyro_max_val = 1, 1064 1039 .gyro_max_scale = IIO_RAD_TO_DEGREE(40 << 16), 1065 1040 .accel_max_val = 392, ··· 1077 1052 }, 1078 1053 [ADIS16507_3] = { 1079 1054 .name = "adis16507-3", 1080 - .num_channels = ARRAY_SIZE(adis16475_channels), 1081 - .channels = adis16475_channels, 1055 + .num_channels = ARRAY_SIZE(adis16477_channels), 1056 + .channels = adis16477_channels, 1082 1057 .gyro_max_val = 1, 1083 1058 .gyro_max_scale = IIO_RAD_TO_DEGREE(10 << 16), 1084 1059 .accel_max_val = 392,