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
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
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

Powered by Openwall GNU/*/Linux Powered by OpenVZ