lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <20250706104941.13983ca1@jic23-huawei> Date: Sun, 6 Jul 2025 10:49:41 +0100 From: Jonathan Cameron <jic23@...nel.org> To: David Lechner <dlechner@...libre.com> Cc: Lars-Peter Clausen <lars@...afoo.de>, Michael Hennerich <Michael.Hennerich@...log.com>, Nuno Sá <nuno.sa@...log.com>, Andy Shevchenko <andy@...nel.org>, linux-iio@...r.kernel.org, linux-kernel@...r.kernel.org Subject: Re: [PATCH] iio: imu: adis16400: drop use of chip info array On Sat, 28 Jun 2025 12:27:46 -0500 David Lechner <dlechner@...libre.com> wrote: > Change the adis16400 driver to use individual chip info structures > instead of an array. This reduces the verbosity of the code. Also, the > data is now const as it should have been in the first place. Applied with title changed to be Use separate structures rather than an array for chip info > > Signed-off-by: David Lechner <dlechner@...libre.com> > --- > drivers/iio/imu/adis16400.c | 314 +++++++++++++++++++++----------------------- > 1 file changed, 153 insertions(+), 161 deletions(-) > > diff --git a/drivers/iio/imu/adis16400.c b/drivers/iio/imu/adis16400.c > index 90ed3f9bb39c502996161d9df3addcb093ccd11a..36323ad149e04de69f58403cb39d41df64564201 100644 > --- a/drivers/iio/imu/adis16400.c > +++ b/drivers/iio/imu/adis16400.c > @@ -170,7 +170,7 @@ struct adis16400_chip_info { > * that must be enabled together > **/ > struct adis16400_state { > - struct adis16400_chip_info *variant; > + const struct adis16400_chip_info *variant; > int filt_int; > > struct adis adis; > @@ -289,19 +289,6 @@ static void adis16400_debugfs_init(struct iio_dev *indio_dev) > d, st, &adis16400_flash_count_fops); > } > > -enum adis16400_chip_variant { > - ADIS16300, > - ADIS16334, > - ADIS16350, > - ADIS16360, > - ADIS16362, > - ADIS16364, > - ADIS16367, > - ADIS16400, > - ADIS16445, > - ADIS16448, > -}; > - > static int adis16334_get_freq(struct adis16400_state *st) > { > int ret; > @@ -984,137 +971,142 @@ static const struct adis_timeout adis16448_timeouts = { > .self_test_ms = 45, > }; > > -static struct adis16400_chip_info adis16400_chips[] = { > - [ADIS16300] = { > - .channels = adis16300_channels, > - .num_channels = ARRAY_SIZE(adis16300_channels), > - .flags = ADIS16400_HAS_PROD_ID | ADIS16400_HAS_SLOW_MODE | > - ADIS16400_HAS_SERIAL_NUMBER, > - .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ > - .accel_scale_micro = 5884, > - .temp_scale_nano = 140000000, /* 0.14 C */ > - .temp_offset = 25000000 / 140000, /* 25 C = 0x00 */ > - .set_freq = adis16400_set_freq, > - .get_freq = adis16400_get_freq, > - .adis_data = ADIS16400_DATA(&adis16300_timeouts, 18), > - }, > - [ADIS16334] = { > - .channels = adis16334_channels, > - .num_channels = ARRAY_SIZE(adis16334_channels), > - .flags = ADIS16400_HAS_PROD_ID | ADIS16400_NO_BURST | > - ADIS16400_HAS_SERIAL_NUMBER, > - .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ > - .accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */ > - .temp_scale_nano = 67850000, /* 0.06785 C */ > - .temp_offset = 25000000 / 67850, /* 25 C = 0x00 */ > - .set_freq = adis16334_set_freq, > - .get_freq = adis16334_get_freq, > - .adis_data = ADIS16400_DATA(&adis16334_timeouts, 0), > - }, > - [ADIS16350] = { > - .channels = adis16350_channels, > - .num_channels = ARRAY_SIZE(adis16350_channels), > - .gyro_scale_micro = IIO_DEGREE_TO_RAD(73260), /* 0.07326 deg/s */ > - .accel_scale_micro = IIO_G_TO_M_S_2(2522), /* 0.002522 g */ > - .temp_scale_nano = 145300000, /* 0.1453 C */ > - .temp_offset = 25000000 / 145300, /* 25 C = 0x00 */ > - .flags = ADIS16400_NO_BURST | ADIS16400_HAS_SLOW_MODE, > - .set_freq = adis16400_set_freq, > - .get_freq = adis16400_get_freq, > - .adis_data = ADIS16400_DATA(&adis16300_timeouts, 0), > - }, > - [ADIS16360] = { > - .channels = adis16350_channels, > - .num_channels = ARRAY_SIZE(adis16350_channels), > - .flags = ADIS16400_HAS_PROD_ID | ADIS16400_HAS_SLOW_MODE | > - ADIS16400_HAS_SERIAL_NUMBER, > - .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ > - .accel_scale_micro = IIO_G_TO_M_S_2(3333), /* 3.333 mg */ > - .temp_scale_nano = 136000000, /* 0.136 C */ > - .temp_offset = 25000000 / 136000, /* 25 C = 0x00 */ > - .set_freq = adis16400_set_freq, > - .get_freq = adis16400_get_freq, > - .adis_data = ADIS16400_DATA(&adis16300_timeouts, 28), > - }, > - [ADIS16362] = { > - .channels = adis16350_channels, > - .num_channels = ARRAY_SIZE(adis16350_channels), > - .flags = ADIS16400_HAS_PROD_ID | ADIS16400_HAS_SLOW_MODE | > - ADIS16400_HAS_SERIAL_NUMBER, > - .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ > - .accel_scale_micro = IIO_G_TO_M_S_2(333), /* 0.333 mg */ > - .temp_scale_nano = 136000000, /* 0.136 C */ > - .temp_offset = 25000000 / 136000, /* 25 C = 0x00 */ > - .set_freq = adis16400_set_freq, > - .get_freq = adis16400_get_freq, > - .adis_data = ADIS16400_DATA(&adis16362_timeouts, 28), > - }, > - [ADIS16364] = { > - .channels = adis16350_channels, > - .num_channels = ARRAY_SIZE(adis16350_channels), > - .flags = ADIS16400_HAS_PROD_ID | ADIS16400_HAS_SLOW_MODE | > - ADIS16400_HAS_SERIAL_NUMBER, > - .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ > - .accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */ > - .temp_scale_nano = 136000000, /* 0.136 C */ > - .temp_offset = 25000000 / 136000, /* 25 C = 0x00 */ > - .set_freq = adis16400_set_freq, > - .get_freq = adis16400_get_freq, > - .adis_data = ADIS16400_DATA(&adis16362_timeouts, 28), > - }, > - [ADIS16367] = { > - .channels = adis16350_channels, > - .num_channels = ARRAY_SIZE(adis16350_channels), > - .flags = ADIS16400_HAS_PROD_ID | ADIS16400_HAS_SLOW_MODE | > - ADIS16400_HAS_SERIAL_NUMBER, > - .gyro_scale_micro = IIO_DEGREE_TO_RAD(2000), /* 0.2 deg/s */ > - .accel_scale_micro = IIO_G_TO_M_S_2(3333), /* 3.333 mg */ > - .temp_scale_nano = 136000000, /* 0.136 C */ > - .temp_offset = 25000000 / 136000, /* 25 C = 0x00 */ > - .set_freq = adis16400_set_freq, > - .get_freq = adis16400_get_freq, > - .adis_data = ADIS16400_DATA(&adis16300_timeouts, 28), > - }, > - [ADIS16400] = { > - .channels = adis16400_channels, > - .num_channels = ARRAY_SIZE(adis16400_channels), > - .flags = ADIS16400_HAS_PROD_ID | ADIS16400_HAS_SLOW_MODE, > - .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ > - .accel_scale_micro = IIO_G_TO_M_S_2(3333), /* 3.333 mg */ > - .temp_scale_nano = 140000000, /* 0.14 C */ > - .temp_offset = 25000000 / 140000, /* 25 C = 0x00 */ > - .set_freq = adis16400_set_freq, > - .get_freq = adis16400_get_freq, > - .adis_data = ADIS16400_DATA(&adis16400_timeouts, 24), > - }, > - [ADIS16445] = { > - .channels = adis16445_channels, > - .num_channels = ARRAY_SIZE(adis16445_channels), > - .flags = ADIS16400_HAS_PROD_ID | > - ADIS16400_HAS_SERIAL_NUMBER | > - ADIS16400_BURST_DIAG_STAT, > - .gyro_scale_micro = IIO_DEGREE_TO_RAD(10000), /* 0.01 deg/s */ > - .accel_scale_micro = IIO_G_TO_M_S_2(250), /* 1/4000 g */ > - .temp_scale_nano = 73860000, /* 0.07386 C */ > - .temp_offset = 31000000 / 73860, /* 31 C = 0x00 */ > - .set_freq = adis16334_set_freq, > - .get_freq = adis16334_get_freq, > - .adis_data = ADIS16400_DATA(&adis16445_timeouts, 16), > - }, > - [ADIS16448] = { > - .channels = adis16448_channels, > - .num_channels = ARRAY_SIZE(adis16448_channels), > - .flags = ADIS16400_HAS_PROD_ID | > - ADIS16400_HAS_SERIAL_NUMBER | > - ADIS16400_BURST_DIAG_STAT, > - .gyro_scale_micro = IIO_DEGREE_TO_RAD(40000), /* 0.04 deg/s */ > - .accel_scale_micro = IIO_G_TO_M_S_2(833), /* 1/1200 g */ > - .temp_scale_nano = 73860000, /* 0.07386 C */ > - .temp_offset = 31000000 / 73860, /* 31 C = 0x00 */ > - .set_freq = adis16334_set_freq, > - .get_freq = adis16334_get_freq, > - .adis_data = ADIS16400_DATA(&adis16448_timeouts, 24), > - } > +static const struct adis16400_chip_info adis16300_chip_info = { > + .channels = adis16300_channels, > + .num_channels = ARRAY_SIZE(adis16300_channels), > + .flags = ADIS16400_HAS_PROD_ID | ADIS16400_HAS_SLOW_MODE | > + ADIS16400_HAS_SERIAL_NUMBER, > + .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ > + .accel_scale_micro = 5884, > + .temp_scale_nano = 140000000, /* 0.14 C */ > + .temp_offset = 25000000 / 140000, /* 25 C = 0x00 */ > + .set_freq = adis16400_set_freq, > + .get_freq = adis16400_get_freq, > + .adis_data = ADIS16400_DATA(&adis16300_timeouts, 18), > +}; > + > +static const struct adis16400_chip_info adis16334_chip_info = { > + .channels = adis16334_channels, > + .num_channels = ARRAY_SIZE(adis16334_channels), > + .flags = ADIS16400_HAS_PROD_ID | ADIS16400_NO_BURST | > + ADIS16400_HAS_SERIAL_NUMBER, > + .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ > + .accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */ > + .temp_scale_nano = 67850000, /* 0.06785 C */ > + .temp_offset = 25000000 / 67850, /* 25 C = 0x00 */ > + .set_freq = adis16334_set_freq, > + .get_freq = adis16334_get_freq, > + .adis_data = ADIS16400_DATA(&adis16334_timeouts, 0), > +}; > + > +static const struct adis16400_chip_info adis16350_chip_info = { > + .channels = adis16350_channels, > + .num_channels = ARRAY_SIZE(adis16350_channels), > + .gyro_scale_micro = IIO_DEGREE_TO_RAD(73260), /* 0.07326 deg/s */ > + .accel_scale_micro = IIO_G_TO_M_S_2(2522), /* 0.002522 g */ > + .temp_scale_nano = 145300000, /* 0.1453 C */ > + .temp_offset = 25000000 / 145300, /* 25 C = 0x00 */ > + .flags = ADIS16400_NO_BURST | ADIS16400_HAS_SLOW_MODE, > + .set_freq = adis16400_set_freq, > + .get_freq = adis16400_get_freq, > + .adis_data = ADIS16400_DATA(&adis16300_timeouts, 0), > +}; > + > +static const struct adis16400_chip_info adis16360_chip_info = { > + .channels = adis16350_channels, > + .num_channels = ARRAY_SIZE(adis16350_channels), > + .flags = ADIS16400_HAS_PROD_ID | ADIS16400_HAS_SLOW_MODE | > + ADIS16400_HAS_SERIAL_NUMBER, > + .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ > + .accel_scale_micro = IIO_G_TO_M_S_2(3333), /* 3.333 mg */ > + .temp_scale_nano = 136000000, /* 0.136 C */ > + .temp_offset = 25000000 / 136000, /* 25 C = 0x00 */ > + .set_freq = adis16400_set_freq, > + .get_freq = adis16400_get_freq, > + .adis_data = ADIS16400_DATA(&adis16300_timeouts, 28), > +}; > + > +static const struct adis16400_chip_info adis16362_chip_info = { > + .channels = adis16350_channels, > + .num_channels = ARRAY_SIZE(adis16350_channels), > + .flags = ADIS16400_HAS_PROD_ID | ADIS16400_HAS_SLOW_MODE | > + ADIS16400_HAS_SERIAL_NUMBER, > + .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ > + .accel_scale_micro = IIO_G_TO_M_S_2(333), /* 0.333 mg */ > + .temp_scale_nano = 136000000, /* 0.136 C */ > + .temp_offset = 25000000 / 136000, /* 25 C = 0x00 */ > + .set_freq = adis16400_set_freq, > + .get_freq = adis16400_get_freq, > + .adis_data = ADIS16400_DATA(&adis16362_timeouts, 28), > +}; > + > +static const struct adis16400_chip_info adis16364_chip_info = { > + .channels = adis16350_channels, > + .num_channels = ARRAY_SIZE(adis16350_channels), > + .flags = ADIS16400_HAS_PROD_ID | ADIS16400_HAS_SLOW_MODE | > + ADIS16400_HAS_SERIAL_NUMBER, > + .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ > + .accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */ > + .temp_scale_nano = 136000000, /* 0.136 C */ > + .temp_offset = 25000000 / 136000, /* 25 C = 0x00 */ > + .set_freq = adis16400_set_freq, > + .get_freq = adis16400_get_freq, > + .adis_data = ADIS16400_DATA(&adis16362_timeouts, 28), > +}; > + > +static const struct adis16400_chip_info adis16367_chip_info = { > + .channels = adis16350_channels, > + .num_channels = ARRAY_SIZE(adis16350_channels), > + .flags = ADIS16400_HAS_PROD_ID | ADIS16400_HAS_SLOW_MODE | > + ADIS16400_HAS_SERIAL_NUMBER, > + .gyro_scale_micro = IIO_DEGREE_TO_RAD(2000), /* 0.2 deg/s */ > + .accel_scale_micro = IIO_G_TO_M_S_2(3333), /* 3.333 mg */ > + .temp_scale_nano = 136000000, /* 0.136 C */ > + .temp_offset = 25000000 / 136000, /* 25 C = 0x00 */ > + .set_freq = adis16400_set_freq, > + .get_freq = adis16400_get_freq, > + .adis_data = ADIS16400_DATA(&adis16300_timeouts, 28), > +}; > + > +static const struct adis16400_chip_info adis16400_chip_info = { > + .channels = adis16400_channels, > + .num_channels = ARRAY_SIZE(adis16400_channels), > + .flags = ADIS16400_HAS_PROD_ID | ADIS16400_HAS_SLOW_MODE, > + .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ > + .accel_scale_micro = IIO_G_TO_M_S_2(3333), /* 3.333 mg */ > + .temp_scale_nano = 140000000, /* 0.14 C */ > + .temp_offset = 25000000 / 140000, /* 25 C = 0x00 */ > + .set_freq = adis16400_set_freq, > + .get_freq = adis16400_get_freq, > + .adis_data = ADIS16400_DATA(&adis16400_timeouts, 24), > +}; > + > +static const struct adis16400_chip_info adis16445_chip_info = { > + .channels = adis16445_channels, > + .num_channels = ARRAY_SIZE(adis16445_channels), > + .flags = ADIS16400_HAS_PROD_ID | ADIS16400_HAS_SERIAL_NUMBER | > + ADIS16400_BURST_DIAG_STAT, > + .gyro_scale_micro = IIO_DEGREE_TO_RAD(10000), /* 0.01 deg/s */ > + .accel_scale_micro = IIO_G_TO_M_S_2(250), /* 1/4000 g */ > + .temp_scale_nano = 73860000, /* 0.07386 C */ > + .temp_offset = 31000000 / 73860, /* 31 C = 0x00 */ > + .set_freq = adis16334_set_freq, > + .get_freq = adis16334_get_freq, > + .adis_data = ADIS16400_DATA(&adis16445_timeouts, 16), > +}; > + > +static const struct adis16400_chip_info adis16448_chip_info = { > + .channels = adis16448_channels, > + .num_channels = ARRAY_SIZE(adis16448_channels), > + .flags = ADIS16400_HAS_PROD_ID | ADIS16400_HAS_SERIAL_NUMBER | > + ADIS16400_BURST_DIAG_STAT, > + .gyro_scale_micro = IIO_DEGREE_TO_RAD(40000), /* 0.04 deg/s */ > + .accel_scale_micro = IIO_G_TO_M_S_2(833), /* 1/1200 g */ > + .temp_scale_nano = 73860000, /* 0.07386 C */ > + .temp_offset = 31000000 / 73860, /* 31 C = 0x00 */ > + .set_freq = adis16334_set_freq, > + .get_freq = adis16334_get_freq, > + .adis_data = ADIS16400_DATA(&adis16448_timeouts, 24), > }; > > static const struct iio_info adis16400_info = { > @@ -1157,7 +1149,7 @@ static int adis16400_probe(struct spi_device *spi) > st = iio_priv(indio_dev); > > /* setup the industrialio driver allocated elements */ > - st->variant = &adis16400_chips[spi_get_device_id(spi)->driver_data]; > + st->variant = spi_get_device_match_data(spi); > indio_dev->name = spi_get_device_id(spi)->name; > indio_dev->channels = st->variant->channels; > indio_dev->num_channels = st->variant->num_channels; > @@ -1197,21 +1189,21 @@ static int adis16400_probe(struct spi_device *spi) > } > > static const struct spi_device_id adis16400_id[] = { > - {"adis16300", ADIS16300}, > - {"adis16305", ADIS16300}, > - {"adis16334", ADIS16334}, > - {"adis16350", ADIS16350}, > - {"adis16354", ADIS16350}, > - {"adis16355", ADIS16350}, > - {"adis16360", ADIS16360}, > - {"adis16362", ADIS16362}, > - {"adis16364", ADIS16364}, > - {"adis16365", ADIS16360}, > - {"adis16367", ADIS16367}, > - {"adis16400", ADIS16400}, > - {"adis16405", ADIS16400}, > - {"adis16445", ADIS16445}, > - {"adis16448", ADIS16448}, > + { "adis16300", (kernel_ulong_t)&adis16300_chip_info }, > + { "adis16305", (kernel_ulong_t)&adis16300_chip_info }, > + { "adis16334", (kernel_ulong_t)&adis16334_chip_info }, > + { "adis16350", (kernel_ulong_t)&adis16350_chip_info }, > + { "adis16354", (kernel_ulong_t)&adis16350_chip_info }, > + { "adis16355", (kernel_ulong_t)&adis16350_chip_info }, > + { "adis16360", (kernel_ulong_t)&adis16360_chip_info }, > + { "adis16362", (kernel_ulong_t)&adis16362_chip_info }, > + { "adis16364", (kernel_ulong_t)&adis16364_chip_info }, > + { "adis16365", (kernel_ulong_t)&adis16360_chip_info }, > + { "adis16367", (kernel_ulong_t)&adis16367_chip_info }, > + { "adis16400", (kernel_ulong_t)&adis16400_chip_info }, > + { "adis16405", (kernel_ulong_t)&adis16400_chip_info }, > + { "adis16445", (kernel_ulong_t)&adis16445_chip_info }, > + { "adis16448", (kernel_ulong_t)&adis16448_chip_info }, > { } > }; > MODULE_DEVICE_TABLE(spi, adis16400_id); > > --- > base-commit: 14071b9cf2d751ff9bc8b5e43fa94fbf08aceea1 > change-id: 20250628-iio-const-data-17-e2a380903879 > > Best regards,
Powered by blists - more mailing lists