patch "iio: imu: adis16475: add spi_device_id table" added to char-misc-linus
This is a note to let you know that I've just added the patch titled
iio: imu: adis16475: add spi_device_id table
to my char-misc git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
in the char-misc-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From ee4d79055aeea27f1b8c42233cc0c90d0a8b5355 Mon Sep 17 00:00:00 2001
From: Nuno Sa <[email protected]>
Date: Thu, 2 Nov 2023 13:52:58 +0100
Subject: iio: imu: adis16475: add spi_device_id table
This prevents the warning message "SPI driver has no spi_device_id for..." when registering the driver. More importantly, it makes sure that module autoloading works as spi relies on spi: modaliases and not of.
While at it, move the of_device_id table to it's natural place.
--- drivers/iio/imu/adis16475.c | 129 ++++++++++++++++++++++-------------- 1 file changed, 78 insertions(+), 51 deletions(-)
drivers/iio/imu/adis16475.c +78 -51
@@ -1406,6 +1406,59 @@ static int adis16475_config_irq_pin(struct adis16475 *st)return 0 ; } + +static int adis16475_probe (struct spi_device *spi) +{ +struct iio_dev *indio_dev; +struct adis16475 *st; +int ret; + + indio_dev =devm_iio_device_alloc (&spi->dev,sizeof (*st)); +if (!indio_dev) +return -ENOMEM ; + + st =iio_priv (indio_dev); + + st->info =spi_get_device_match_data (spi); +if (!st->info) +return -EINVAL ; + + ret =adis_init (&st->adis, indio_dev, spi, &st->info->adis_data); +if (ret) +return ret; + + indio_dev->name = st->info->name; + indio_dev->channels = st->info->channels; + indio_dev->num_channels = st->info->num_channels; + indio_dev->info = &adis16475_info; + indio_dev->modes =INDIO_DIRECT_MODE ; + + ret =__adis_initial_startup (&st->adis); +if (ret) +return ret; + + ret =adis16475_config_irq_pin (st); +if (ret) +return ret; + + ret =adis16475_config_sync_mode (st); +if (ret) +return ret; + + ret =devm_adis_setup_buffer_and_trigger (&st->adis, indio_dev, + adis16475_trigger_handler); +if (ret) +return ret; + + ret =devm_iio_device_register (&spi->dev, indio_dev); +if (ret) +return ret; + +adis16475_debugfs_init (indio_dev); + +return 0 ; +} +static const struct of_device_id adis16475_of_match[] = { { .compatible ="adi,adis16470" , .data = &adis16475_chip_info[ADIS16470 ] },
@@ -1451,57 +1504,30 @@ static const struct of_device_id adis16475_of_match[] = { };MODULE_DEVICE_TABLE (of, adis16475_of_match); -static int adis16475_probe (struct spi_device *spi) -{ -struct iio_dev *indio_dev; -struct adis16475 *st; -int ret; - - indio_dev =devm_iio_device_alloc (&spi->dev,sizeof (*st)); -if (!indio_dev) -return -ENOMEM ; - - st =iio_priv (indio_dev); - - st->info =device_get_match_data (&spi->dev); -if (!st->info) -return -EINVAL ; - - ret =adis_init (&st->adis, indio_dev, spi, &st->info->adis_data); -if (ret) -return ret; - - indio_dev->name = st->info->name; - indio_dev->channels = st->info->channels; - indio_dev->num_channels = st->info->num_channels; - indio_dev->info = &adis16475_info; - indio_dev->modes =INDIO_DIRECT_MODE ; - - ret =__adis_initial_startup (&st->adis); -if (ret) -return ret; - - ret =adis16475_config_irq_pin (st); -if (ret) -return ret; - - ret =adis16475_config_sync_mode (st); -if (ret) -return ret; - - ret =devm_adis_setup_buffer_and_trigger (&st->adis, indio_dev, - adis16475_trigger_handler); -if (ret) -return ret; - - ret =devm_iio_device_register (&spi->dev, indio_dev); -if (ret) -return ret; - -adis16475_debugfs_init (indio_dev); - -return 0 ; -} +static const struct spi_device_id adis16475_ids[] = { + {"adis16470" , (kernel_ulong_t)&adis16475_chip_info[ADIS16470 ] }, + {"adis16475-1" , (kernel_ulong_t)&adis16475_chip_info[ADIS16475_1 ] }, + {"adis16475-2" , (kernel_ulong_t)&adis16475_chip_info[ADIS16475_2 ] }, + {"adis16475-3" , (kernel_ulong_t)&adis16475_chip_info[ADIS16475_3 ] }, + {"adis16477-1" , (kernel_ulong_t)&adis16475_chip_info[ADIS16477_1 ] }, + {"adis16477-2" , (kernel_ulong_t)&adis16475_chip_info[ADIS16477_2 ] }, + {"adis16477-3" , (kernel_ulong_t)&adis16475_chip_info[ADIS16477_3 ] }, + {"adis16465-1" , (kernel_ulong_t)&adis16475_chip_info[ADIS16465_1 ] }, + {"adis16465-2" , (kernel_ulong_t)&adis16475_chip_info[ADIS16465_2 ] }, + {"adis16465-3" , (kernel_ulong_t)&adis16475_chip_info[ADIS16465_3 ] }, + {"adis16467-1" , (kernel_ulong_t)&adis16475_chip_info[ADIS16467_1 ] }, + {"adis16467-2" , (kernel_ulong_t)&adis16475_chip_info[ADIS16467_2 ] }, + {"adis16467-3" , (kernel_ulong_t)&adis16475_chip_info[ADIS16467_3 ] }, + {"adis16500" , (kernel_ulong_t)&adis16475_chip_info[ADIS16500 ] }, + {"adis16505-1" , (kernel_ulong_t)&adis16475_chip_info[ADIS16505_1 ] }, + {"adis16505-2" , (kernel_ulong_t)&adis16475_chip_info[ADIS16505_2 ] }, + {"adis16505-3" , (kernel_ulong_t)&adis16475_chip_info[ADIS16505_3 ] }, + {"adis16507-1" , (kernel_ulong_t)&adis16475_chip_info[ADIS16507_1 ] }, + {"adis16507-2" , (kernel_ulong_t)&adis16475_chip_info[ADIS16507_2 ] }, + {"adis16507-3" , (kernel_ulong_t)&adis16475_chip_info[ADIS16507_3 ] }, + { } +}; +MODULE_DEVICE_TABLE (spi, adis16475_ids);static struct spi_driver adis16475_driver = { .driver = {
@@ -1509,6 +1535,7 @@ static struct spi_driver adis16475_driver = { .of_match_table = adis16475_of_match, }, .probe = adis16475_probe, + .id_table = adis16475_ids, };module_spi_driver (adis16475_driver);
Signature · 1 line
2.43.0