The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: "Nuno Sá" <noname.nuno@gmail.com>
To: "Uwe Kleine-König (The Capable Hub)" <u.kleine-koenig@baylibre.com>
Cc: "Nuno Sá" <nuno.sa@analog.com>,
	"Michael Hennerich" <Michael.Hennerich@analog.com>,
	"Jonathan Cameron" <jic23@kernel.org>,
	"David Lechner" <dlechner@baylibre.com>,
	"Andy Shevchenko" <andy@kernel.org>,
	linux@analog.com, linux-iio@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 2/3] iio: imu: adis16550: Simplify device abstraction
Date: Wed, 1 Jul 2026 16:14:47 +0100	[thread overview]
Message-ID: <akUuypU25OtpCFWF@nsa> (raw)
In-Reply-To: <f9c18b3c1ee486341704f917e06b91f7a39119ec.1782833415.git.u.kleine-koenig@baylibre.com>

On Tue, Jun 30, 2026 at 05:35:35PM +0200, Uwe Kleine-König (The Capable Hub) wrote:
> The driver supports a single chip variant only. Simplify the driver by
> hard-coding the device properties instead of using the id_table's
> abstraction for a single chip type and a lookup in a table with only one
> entry.
> 
> Signed-off-by: Uwe Kleine-König (The Capable Hub) <u.kleine-koenig@baylibre.com>
> ---

LGTM

Reviewed-by: Nuno Sá <nuno.sa@analog.com>

>  drivers/iio/imu/adis16550.c | 89 +++++++++++--------------------------
>  1 file changed, 26 insertions(+), 63 deletions(-)
> 
> diff --git a/drivers/iio/imu/adis16550.c b/drivers/iio/imu/adis16550.c
> index 75679612052f..fe0034964408 100644
> --- a/drivers/iio/imu/adis16550.c
> +++ b/drivers/iio/imu/adis16550.c
> @@ -89,25 +89,7 @@ struct adis16550_sync {
>  	u16 max_rate;
>  };
>  
> -struct adis16550_chip_info {
> -	const struct iio_chan_spec *channels;
> -	const struct adis16550_sync *sync_mode;
> -	char *name;
> -	u32 num_channels;
> -	u32 gyro_max_val;
> -	u32 gyro_max_scale;
> -	u32 accel_max_val;
> -	u32 accel_max_scale;
> -	u32 temp_scale;
> -	u32 deltang_max_val;
> -	u32 deltvel_max_val;
> -	u32 int_clk;
> -	u16 max_dec;
> -	u16 num_sync;
> -};
> -
>  struct adis16550 {
> -	const struct adis16550_chip_info *info;
>  	struct adis adis;
>  	unsigned long clk_freq_hz;
>  	u32 sync_mode;
> @@ -450,8 +432,8 @@ static int adis16550_set_freq_hz(struct adis16550 *st, u32 freq_hz)
>  	 * The optimal sample rate for the supported IMUs is between
>  	 * int_clk - 1000 and int_clk + 500.
>  	 */
> -	u32 max_sample_rate = st->info->int_clk * 1000 + 500000;
> -	u32 min_sample_rate = st->info->int_clk * 1000 - 1000000;
> +	u32 max_sample_rate = 4000 * 1000 + 500000;
> +	u32 min_sample_rate = 4000 * 1000 - 1000000;
>  
>  	if (!freq_hz)
>  		return -EINVAL;
> @@ -484,7 +466,7 @@ static int adis16550_set_freq_hz(struct adis16550 *st, u32 freq_hz)
>  	if (dec)
>  		dec--;
>  
> -	dec = min(dec, st->info->max_dec);
> +	dec = min(dec, 4095);
>  
>  	return __adis_write_reg_16(&st->adis, ADIS16550_REG_DEC_RATE, dec);
>  }
> @@ -592,30 +574,30 @@ static int adis16550_read_raw(struct iio_dev *indio_dev,
>  	case IIO_CHAN_INFO_SCALE:
>  		switch (chan->type) {
>  		case IIO_ANGL_VEL:
> -			*val = st->info->gyro_max_val;
> -			*val2 = st->info->gyro_max_scale;
> +			*val = 1;
> +			*val2 = IIO_RAD_TO_DEGREE(80 << 16);
>  			return IIO_VAL_FRACTIONAL;
>  		case IIO_ACCEL:
> -			*val = st->info->accel_max_val;
> -			*val2 = st->info->accel_max_scale;
> +			*val = 1;
> +			*val2 = IIO_M_S_2_TO_G(102400000);
>  			return IIO_VAL_FRACTIONAL;
>  		case IIO_TEMP:
> -			*val = st->info->temp_scale;
> +			*val = 4;
>  			return IIO_VAL_INT;
>  		case IIO_DELTA_ANGL:
> -			*val = st->info->deltang_max_val;
> +			*val = IIO_DEGREE_TO_RAD(720);
>  			*val2 = 31;
>  			return IIO_VAL_FRACTIONAL_LOG2;
>  		case IIO_DELTA_VELOCITY:
> -			*val = st->info->deltvel_max_val;
> +			*val = 125;
>  			*val2 = 31;
>  			return IIO_VAL_FRACTIONAL_LOG2;
>  		default:
>  			return -EINVAL;
>  		}
>  	case IIO_CHAN_INFO_OFFSET:
> -		/* temperature centered at 25°C */
> -		*val = DIV_ROUND_CLOSEST(25000, st->info->temp_scale);
> +		/* temperature centered at 25°C divided by temp scale */
> +		*val = 25000 / 4;
>  		return IIO_VAL_INT;
>  	case IIO_CHAN_INFO_CALIBBIAS:
>  		ret = adis_read_reg_32(&st->adis,
> @@ -793,23 +775,6 @@ static const struct adis16550_sync adis16550_sync_modes[] = {
>  	{ ADIS16550_SYNC_MODE_SCALED, 1, 128 },
>  };
>  
> -static const struct adis16550_chip_info adis16550_chip_info = {
> -	.num_channels = ARRAY_SIZE(adis16550_channels),
> -	.channels = adis16550_channels,
> -	.name = "adis16550",
> -	.gyro_max_val = 1,
> -	.gyro_max_scale = IIO_RAD_TO_DEGREE(80 << 16),
> -	.accel_max_val = 1,
> -	.accel_max_scale = IIO_M_S_2_TO_G(102400000),
> -	.temp_scale = 4,
> -	.deltang_max_val = IIO_DEGREE_TO_RAD(720),
> -	.deltvel_max_val = 125,
> -	.int_clk = 4000,
> -	.max_dec = 4095,
> -	.sync_mode = adis16550_sync_modes,
> -	.num_sync = ARRAY_SIZE(adis16550_sync_modes),
> -};
> -
>  static u32 adis16550_validate_crc(__be32 *buffer, const u8 n_elem)
>  {
>  	int i;
> @@ -918,21 +883,21 @@ static int adis16550_config_sync(struct adis16550 *st)
>  	if (IS_ERR(clk))
>  		return PTR_ERR(clk);
>  	if (!clk) {
> -		st->clk_freq_hz = st->info->int_clk * 1000;
> +		st->clk_freq_hz = 4000000;
>  		return 0;
>  	}
>  
>  	st->clk_freq_hz = clk_get_rate(clk);
>  
> -	for (i = 0; i < st->info->num_sync; i++) {
> -		if (st->clk_freq_hz >= st->info->sync_mode[i].min_rate &&
> -		    st->clk_freq_hz <= st->info->sync_mode[i].max_rate) {
> -			sync_mode_data = &st->info->sync_mode[i];
> +	for (i = 0; i < ARRAY_SIZE(adis16550_sync_modes); i++) {
> +		if (st->clk_freq_hz >= adis16550_sync_modes[i].min_rate &&
> +		    st->clk_freq_hz <= adis16550_sync_modes[i].max_rate) {
> +			sync_mode_data = &adis16550_sync_modes[i];
>  			break;
>  		}
>  	}
>  
> -	if (i == st->info->num_sync)
> +	if (i == ARRAY_SIZE(adis16550_sync_modes))
>  		return dev_err_probe(dev, -EINVAL, "Clk rate: %lu not in a valid range",
>  				     st->clk_freq_hz);
>  
> @@ -943,7 +908,7 @@ static int adis16550_config_sync(struct adis16550 *st)
>  		 * of [3000 4500].
>  		 */
>  
> -		sync_scale = DIV_ROUND_CLOSEST(st->info->int_clk, st->clk_freq_hz);
> +		sync_scale = DIV_ROUND_CLOSEST(4000, st->clk_freq_hz);
>  
>  		if (3000 > sync_scale || 4500 < sync_scale)
>  			return dev_err_probe(dev, -EINVAL,
> @@ -955,7 +920,7 @@ static int adis16550_config_sync(struct adis16550 *st)
>  		if (ret)
>  			return ret;
>  
> -		st->clk_freq_hz = st->info->int_clk;
> +		st->clk_freq_hz = 4000;
>  	}
>  
>  	st->clk_freq_hz *= 1000;
> @@ -1064,13 +1029,11 @@ static int adis16550_probe(struct spi_device *spi)
>  		return -ENOMEM;
>  
>  	st = iio_priv(indio_dev);
> -	st->info = spi_get_device_match_data(spi);
> -	if (!st->info)
> -		return -EINVAL;
> +
>  	adis = &st->adis;
> -	indio_dev->name = st->info->name;
> -	indio_dev->channels = st->info->channels;
> -	indio_dev->num_channels = st->info->num_channels;
> +	indio_dev->name = "adis16550";
> +	indio_dev->channels = adis16550_channels;
> +	indio_dev->num_channels = ARRAY_SIZE(adis16550_channels);
>  	indio_dev->available_scan_masks = adis16550_channel_masks;
>  	indio_dev->info = &adis16550_info;
>  	indio_dev->modes = INDIO_DIRECT_MODE;
> @@ -1117,13 +1080,13 @@ static int adis16550_probe(struct spi_device *spi)
>  }
>  
>  static const struct spi_device_id adis16550_id[] = {
> -	{ "adis16550",  (kernel_ulong_t)&adis16550_chip_info},
> +	{ .name = "adis16550" },
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(spi, adis16550_id);
>  
>  static const struct of_device_id adis16550_of_match[] = {
> -	{ .compatible = "adi,adis16550", .data = &adis16550_chip_info },
> +	{ .compatible = "adi,adis16550" },
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(of, adis16550_of_match);
> -- 
> 2.47.3
> 

  reply	other threads:[~2026-07-01 15:13 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-30 15:35 [PATCH v2 0/3] iio: Use named initializers for device_id structures Uwe Kleine-König (The Capable Hub)
2026-06-30 15:35 ` [PATCH v2 1/3] iio: adc: ti-tsc2046: Simplify device handling Uwe Kleine-König (The Capable Hub)
2026-06-30 23:02   ` Jonathan Cameron
2026-07-01  4:41   ` Oleksij Rempel
2026-06-30 15:35 ` [PATCH v2 2/3] iio: imu: adis16550: Simplify device abstraction Uwe Kleine-König (The Capable Hub)
2026-07-01 15:14   ` Nuno Sá [this message]
2026-07-01 17:40     ` Jonathan Cameron
2026-06-30 15:35 ` [PATCH v2 3/3] staging: iio: Initialize spi_device_id arrays using member names Uwe Kleine-König (The Capable Hub)
2026-06-30 22:59   ` Jonathan Cameron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=akUuypU25OtpCFWF@nsa \
    --to=noname.nuno@gmail.com \
    --cc=Michael.Hennerich@analog.com \
    --cc=andy@kernel.org \
    --cc=dlechner@baylibre.com \
    --cc=jic23@kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@analog.com \
    --cc=nuno.sa@analog.com \
    --cc=u.kleine-koenig@baylibre.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox