Post Go back to editing

ADRV9002 Kernel Module Support

Category: Choose a category
Product Number: ADRV9002BBCZ
Software Version: 2021_R1

We're using the Petalinux build of the 2021_R1 branch, and we're about to switch away from our ZCU102 and transceiver devkits to actual hardware.
With the way that the device clock needs to be configured on our board, it would be very beneficial to be able to load the ADRV9002 driver after boot as a kernel module.
In looking at the kernel config, it appears that the driver can only be built into the kernel and has no module support.

Is there a specific reason why the ADRV9001/9002 driver doesn't support being built as a module?
And if being built/loaded as a module should work, any idea the difficulty in converting the code to make this happen?

Thanks,
~Seth

Parents
  • HI,

    Yeah, in our linux tree we just compile everything built in as we want all the drivers enabled and to be compiled (so that we catch up possible compile time issues when moving to newer kernels). However, you should be able to compile adrv9002 as a module by changing the configuration.

    Not that "Build all Analog Devices Kernel Drivers" is disabled and the IIO drivers is now changed to "M". With this, you can go and change ADRV9001 to compile as a module.

    - Nuno Sá

  • Ahhh gotcha!
    It was the disabling of 'Build All Analog Devices Kernel Drivers' that i was missing-
    didnt realize this acted like a switch for the build options below it. In retrospect, I should have realized this.
    Appreciate the help!

    Thanks,
    ~Seth

  • Yeah, but this actually made me work on this:

    https://github.com/analogdevicesinc/linux/pull/2022

    Now, it's easier to disable, turn things into modules...

    - Nuno Sá

  • So i'm just getting around to testing this out:
    After changing the above configuration like you've recommended:


    and verifying this updated kernel config is getting picked up, when i boot my system i was hoping to see the adrv9002 driver in the /lib/modules/ directory (or somewhere on the file system). 

    Any idea if there are additional steps needed for this to work? (I'm using petalinux 2019.1)
    The adrv9002 driver definitely is not being loaded at boot now- i'm guessing because its presumably being built as a module that's not being included, or potentially not being built at all with this change.

    Thanks,
    ~Seth

  • Just to add a bit more information:
    once i save this configuration and then re-run menuconfig, it appears that menuconfig is confused by this configuration and de-selects entries that i previously selected:


    Ive tried making them all modules as well, and changing the IIO drivers to modules.
    This ends up with failures when trying to compile the kernel modules during the petalinux build.

    ~Seth

  • Hi,

    So i'm just getting around to testing this out:
    After changing the above configuration like you've recommended:

    How are you changing your config? You should be using 'petalinux-config -c kernel'...

    once i save this configuration and then re-run menuconfig, it appears that menuconfig is confused by this configuration and de-selects entries that i previously selected:

    Well, you do have 'CONFIG_KERNEL_ALL_ADI_DRIVERS not set' and this might be the problem... If you do it on the defcondig file, then none of the drivers below CONFIG_KERNEL_ALL_ADI_DRIVERS will be enabled:

    https://github.com/analogdevicesinc/linux/blob/master/Kconfig.adi#L28

    And I can see SPI in there which means adrv9002 is most likely not being build (as it depends on spi)...

    The adrv9002 driver definitely is not being loaded at boot now

    Not sure if you can make auto-loading work out of the box... You can play with KERNEL_MODULE_AUTOLOAD to see if it works but I think the driver needs a missing table for auto-load to work...

    Ive tried making them all modules as well, and changing the IIO drivers to modules.
    This ends up with failures when trying to compile the kernel modules during the petalinux build.

    Yeah, might be a problem as I suspect not all drivers are playing well when build as modules...

    - Nuno Sá

Reply
  • Hi,

    So i'm just getting around to testing this out:
    After changing the above configuration like you've recommended:

    How are you changing your config? You should be using 'petalinux-config -c kernel'...

    once i save this configuration and then re-run menuconfig, it appears that menuconfig is confused by this configuration and de-selects entries that i previously selected:

    Well, you do have 'CONFIG_KERNEL_ALL_ADI_DRIVERS not set' and this might be the problem... If you do it on the defcondig file, then none of the drivers below CONFIG_KERNEL_ALL_ADI_DRIVERS will be enabled:

    https://github.com/analogdevicesinc/linux/blob/master/Kconfig.adi#L28

    And I can see SPI in there which means adrv9002 is most likely not being build (as it depends on spi)...

    The adrv9002 driver definitely is not being loaded at boot now

    Not sure if you can make auto-loading work out of the box... You can play with KERNEL_MODULE_AUTOLOAD to see if it works but I think the driver needs a missing table for auto-load to work...

    Ive tried making them all modules as well, and changing the IIO drivers to modules.
    This ends up with failures when trying to compile the kernel modules during the petalinux build.

    Yeah, might be a problem as I suspect not all drivers are playing well when build as modules...

    - Nuno Sá

Children
  • Also did a quick test... On the master branch, I can see the module being populated on the image:

    - Nuno Sá

  • I'm changing the kernel config using the normal method: 'petalinux-config -c kernel'.
    One thing that's interesting, is that the 2019 version does not allow you to change the rest of the ADI build options without first de-selecting 'Build all Analog Devices Kernel Drivers', as you can see below:

    When selected 'Yes' by default, it makes all other values here un-editable.

    I tested this on the 2021/master branch and this is not the case for that version, so maybe i need to backport the newer Kconfig?

    Are you able to test this on the 2019 branch by chance?

    Thanks as always for the help Nuno!
    ~Seth

  • So i tried creating a patch for the 2019 kernel that replicated your changes on the commit you linked- essentially going to all of the Kconfig.adi files within the kernel build and changing the entries from 'select' to 'imply'.

    Unfortunately it wont let me upload the patch file so ive embedded the contents below:

    diff --git a/Kconfig.adi b/Kconfig.adi
    index f3e14a7dad47..13a299b91638 100644
    --- a/Kconfig.adi
    +++ b/Kconfig.adi
    @@ -3,84 +3,84 @@
     
     config KERNEL_ALL_ADI_DRIVERS
     	tristate "Build all Analog Devices Kernel Drivers"
    -	select SPI
    -	select I2C
    -	select IIO
    -	select PWM
    -	select JESD204
    -	select STAGING
    -	select FB_TFT
    -	select HWMON
    -	select POWER_RESET
    -	select POWER_SUPPLY
    -	select SOUND
    -	select SND
    -	select SND_SOC
    -	select I2C_MUX
    -	select LEDS_CLASS_FLASH
    -	select PHYLIB
    -	select MULTIPLEXER
    -	select MEDIA_SUPPORT
    -	select MEDIA_CONTROLLER
    -	select MEDIA_CAMERA_SUPPORT
    -	select VIDEO_V4L2
    -	select VIDEO_V4L2_SUBDEV_API
    -	select V4L_PLATFORM_DRIVERS
    -	select BACKLIGHT_LCD_SUPPORT
    -	select BACKLIGHT_CLASS_DEVICE
    -	select HWMON_ALL_ADI_DRIVERS
    -	select IIO_ALL_ADI_DRIVERS
    -	select INPUT_ALL_ADI_DRIVERS
    -	select MEDIA_ALL_ADI_DRIVERS
    -	select SND_SOC_ALL_ADI_CODECS
    -	select USB_ALL_ADI_DRIVERS
    -	select POWER_RESET_LTC2952
    -	select CHARGER_ADP5061
    -	select I2C_MUX_LTC4306
    -	select CHARGER_LTC3651
    -	select BATTERY_GAUGE_LTC2941
    -	select MUX_ADG792A
    -	select MUX_ADGS1408
    -	select AD525X_DPOT
    -	select AD525X_DPOT_I2C
    -	select AD525X_DPOT_SPI
    -	select ADIN_PHY
    -	select ADIN_T1L_PHY
    -	select IPV6
    -	select BRIDGE
    -	select MEDIA_USB_SUPPORT
    -	select NET_DSA
    -	select MICROCHIP_KSZ
    -	select MICROCHIP_KSZ_SPI_DRIVER
    -	select GPIO_ADP5588
    -	select GPIO_ADP5588_IRQ
    -	select GPIO_ADP5520
    -	select GPIO_ADI_DAQ1
    -	select SPI_AD9250FMC
    -	select SPI_AXI_SPI_ENGINE
    -	select MAC802154
    -	select IEEE802154
    -	select IEEE802154_DRIVERS
    -	select IEEE802154_ADF7242
    -	select PMIC_ADP5520
    -	select PWM_AXI_PWMGEN
    -	select LEDS_ADP5520
    -	select BACKLIGHT_ADP5520
    -	select BACKLIGHT_ADP8860
    -	select BACKLIGHT_ADP8870
    -	select REGULATOR_AD5398
    -	select REGULATOR_LTC3589
    -	select REGULATOR_LTC3676
    -	select DRM
    -	select DRM_ADI_AXI_HDMI
    -	select DRM_I2C_ADV7511
    -	select DRM_I2C_ADV7511_AUDIO
    -	select DRM_I2C_ADV7533
    -	select NVMEM_AXI_SYSID if (ARCH_ZYNQMP || ARCH_ZYNQ || MICROBLAZE || ARCH_SOCFPGA || NIOS2)
    -	select INPUT_PCF8574
    -	select AXI_INTR_MONITOR
    -	select FB_TFT_SEPS525
    -	select LEDS_AS3645A
    +	imply SPI
    +	imply I2C
    +	imply IIO
    +	imply PWM
    +	imply JESD204
    +	imply STAGING
    +	imply FB_TFT
    +	imply HWMON
    +	imply POWER_RESET
    +	imply POWER_SUPPLY
    +	imply SOUND
    +	imply SND
    +	imply SND_SOC
    +	imply I2C_MUX
    +	imply LEDS_CLASS_FLASH
    +	imply PHYLIB
    +	imply MULTIPLEXER
    +	imply MEDIA_SUPPORT
    +	imply MEDIA_CONTROLLER
    +	imply MEDIA_CAMERA_SUPPORT
    +	imply VIDEO_V4L2
    +	imply VIDEO_V4L2_SUBDEV_API
    +	imply V4L_PLATFORM_DRIVERS
    +	imply BACKLIGHT_LCD_SUPPORT
    +	imply BACKLIGHT_CLASS_DEVICE
    +	imply HWMON_ALL_ADI_DRIVERS
    +	imply IIO_ALL_ADI_DRIVERS
    +	imply INPUT_ALL_ADI_DRIVERS
    +	imply MEDIA_ALL_ADI_DRIVERS
    +	imply SND_SOC_ALL_ADI_CODECS
    +	imply USB_ALL_ADI_DRIVERS
    +	imply POWER_RESET_LTC2952
    +	imply CHARGER_ADP5061
    +	imply I2C_MUX_LTC4306
    +	imply CHARGER_LTC3651
    +	imply BATTERY_GAUGE_LTC2941
    +	imply MUX_ADG792A
    +	imply MUX_ADGS1408
    +	imply AD525X_DPOT
    +	imply AD525X_DPOT_I2C
    +	imply AD525X_DPOT_SPI
    +	imply ADIN_PHY
    +	imply ADIN_T1L_PHY
    +	imply IPV6
    +	imply BRIDGE
    +	imply MEDIA_USB_SUPPORT
    +	imply NET_DSA
    +	imply MICROCHIP_KSZ
    +	imply MICROCHIP_KSZ_SPI_DRIVER
    +	imply GPIO_ADP5588
    +	imply GPIO_ADP5588_IRQ
    +	imply GPIO_ADP5520
    +	imply GPIO_ADI_DAQ1
    +	imply SPI_AD9250FMC
    +	imply SPI_AXI_SPI_ENGINE
    +	imply MAC802154
    +	imply IEEE802154
    +	imply IEEE802154_DRIVERS
    +	imply IEEE802154_ADF7242
    +	imply PMIC_ADP5520
    +	imply PWM_AXI_PWMGEN
    +	imply LEDS_ADP5520
    +	imply BACKLIGHT_ADP5520
    +	imply BACKLIGHT_ADP8860
    +	imply BACKLIGHT_ADP8870
    +	imply REGULATOR_AD5398
    +	imply REGULATOR_LTC3589
    +	imply REGULATOR_LTC3676
    +	imply DRM
    +	imply DRM_ADI_AXI_HDMI
    +	imply DRM_I2C_ADV7511
    +	imply DRM_I2C_ADV7511_AUDIO
    +	imply DRM_I2C_ADV7533
    +	imply NVMEM_AXI_SYSID if (ARCH_ZYNQMP || ARCH_ZYNQ || MICROBLAZE || ARCH_SOCFPGA || NIOS2)
    +	imply INPUT_PCF8574
    +	imply AXI_INTR_MONITOR
    +	imply FB_TFT_SEPS525
    +	imply LEDS_AS3645A
     
     source "drivers/hwmon/Kconfig.adi"
     source "drivers/iio/Kconfig.adi"
    diff --git a/drivers/hwmon/Kconfig.adi b/drivers/hwmon/Kconfig.adi
    index 07e805cbf261..5638db5aca51 100644
    --- a/drivers/hwmon/Kconfig.adi
    +++ b/drivers/hwmon/Kconfig.adi
    @@ -3,39 +3,39 @@
     
     config HWMON_ALL_ADI_DRIVERS
     	tristate "Build all Analog Devices HWMON Drivers"
    -	select CRC8
    -	select PMBUS
    -	select SENSORS_PMBUS
    -	select SENSORS_AD7314
    -	select SENSORS_AD7414
    -	select SENSORS_AXI_FAN_CONTROL
    -	select SENSORS_AD7418
    -	select SENSORS_ADM1021
    -	select SENSORS_ADM1025
    -	select SENSORS_ADM1026
    -	select SENSORS_ADM1029
    -	select SENSORS_ADM1031
    -	select SENSORS_ADM1177
    -	select SENSORS_ADM1266
    -	select SENSORS_ADM1275
    -	select SENSORS_ADM9240
    -	select SENSORS_ADT7310
    -	select SENSORS_ADT7410
    -	select SENSORS_ADT7411
    -	select SENSORS_ADT7462
    -	select SENSORS_ADT7470
    -	select SENSORS_ADT7475
    -	select SENSORS_LTC2945
    -	select SENSORS_LTC2947_I2C
    -	select SENSORS_LTC2947_SPI
    -	select SENSORS_LTC2978
    -	select SENSORS_LTC2978_REGULATOR
    -	select SENSORS_LTC2990
    -	select SENSORS_LTC2992
    -	select SENSORS_LTC3815
    -	select SENSORS_LTC4151
    -	select SENSORS_LTC4215
    -	select SENSORS_LTC4222
    -	select SENSORS_LTC4245
    -	select SENSORS_LTC4260
    -	select SENSORS_LTC4261
    +	imply CRC8
    +	imply PMBUS
    +	imply SENSORS_PMBUS
    +	imply SENSORS_AD7314
    +	imply SENSORS_AD7414
    +	imply SENSORS_AXI_FAN_CONTROL
    +	imply SENSORS_AD7418
    +	imply SENSORS_ADM1021
    +	imply SENSORS_ADM1025
    +	imply SENSORS_ADM1026
    +	imply SENSORS_ADM1029
    +	imply SENSORS_ADM1031
    +	imply SENSORS_ADM1177
    +	imply SENSORS_ADM1266
    +	imply SENSORS_ADM1275
    +	imply SENSORS_ADM9240
    +	imply SENSORS_ADT7310
    +	imply SENSORS_ADT7410
    +	imply SENSORS_ADT7411
    +	imply SENSORS_ADT7462
    +	imply SENSORS_ADT7470
    +	imply SENSORS_ADT7475
    +	imply SENSORS_LTC2945
    +	imply SENSORS_LTC2947_I2C
    +	imply SENSORS_LTC2947_SPI
    +	imply SENSORS_LTC2978
    +	imply SENSORS_LTC2978_REGULATOR
    +	imply SENSORS_LTC2990
    +	imply SENSORS_LTC2992
    +	imply SENSORS_LTC3815
    +	imply SENSORS_LTC4151
    +	imply SENSORS_LTC4215
    +	imply SENSORS_LTC4222
    +	imply SENSORS_LTC4245
    +	imply SENSORS_LTC4260
    +	imply SENSORS_LTC4261
    diff --git a/drivers/iio/Kconfig.adi b/drivers/iio/Kconfig.adi
    index f0ed3cf7055c..765bacb25822 100644
    --- a/drivers/iio/Kconfig.adi
    +++ b/drivers/iio/Kconfig.adi
    @@ -6,151 +6,151 @@
     
     config IIO_ALL_ADI_DRIVERS
     	tristate "Build all Analog Devices IIO Drivers"
    -	select IIO_BUFFER
    -	select IIO_SW_DEVICE
    -	select IIO_SW_TRIGGER
    -	select IIO_TRIGGERED_EVENT
    -	select IIO_HRTIMER_TRIGGER
    -	select IIO_INTERRUPT_TRIGGER
    -	select IIO_SYSFS_TRIGGER
    -	select IIO_TIGHTLOOP_TRIGGER
    -	select IIO_BUFFER_CB
    -	select IIO_BUFFER_DMA
    -	select IIO_BUFFER_DMAENGINE
    -	select IIO_BUFFER_HW_CONSUMER
    -	select IIO_KFIFO_BUF
    -	select IIO_TRIGGERED_BUFFER
    -	select ALTERA_ARRIA10_JESD204_PHY if ARCH_SOCFPGA
    -	select ADIS16201
    -	select ADIS16209
    -	select ADXL345_I2C if I2C
    -	select ADXL345_SPI if SPI
    -	select ADXL372_I2C if I2C
    -	select ADXL372_SPI if SPI
    -	select AD400X
    -	select AD6676
    -	select AD7091R5
    -	select AD7124
    -	select AD7173
    -	select AD7266
    -	select AD7291
    -	select AD7298
    -	select AD738X
    -	select AD7923
    -	select AD7476
    -	select AD7606_IFACE_PARALLEL
    -	select AD7606_IFACE_SPI
    -	select AD7766
    -	select AD7768
    -	select AD7768_1
    -	select AD7791
    -	select AD7793
    -	select AD7887
    -	select AD799X
    -	select AD9963
    -	select CF_AXI_ADC
    -	select AD9208
    -	select AD9081
    -	select AD9361
    -	select AD9361_EXT_BAND_CONTROL
    -	select AD9371
    -	select ADAR1000
    -	select ADRV9009
    -	select ADRV9001
    -	select AD9467
    -	select AD9680
    -	select ADMC
    -	select CF_AXI_TDD
    -	select AXI_PULSE_CAPTURE
    -	select AXI_FMCADC5_SYNC
    -	select XILINX_XADC if (ARCH_ZYNQ || ARCH_ZYNQMP || MICROBLAZE)
    -	select LTC2497
    -	select LTC2308
    -	select AD8366
    -	select HMC425
    -	select AD5270
    -	select AD5360
    -	select AD5380
    -	select AD5421
    -	select AD5624R_SPI if SPI
    -	select AD5064
    -	select AD5504
    -	select AD5446
    -	select AD5449
    -	select AD5592R_BASE
    -	select AD5592R
    -	select AD5593R
    -	select AD5755
    -	select AD5758
    -	select AD5761
    -	select AD5764
    -	select AD5766
    -	select AD5770R
    -	select AD5791
    -	select AD5686
    -	select AD5686_SPI if SPI
    -	select AD5696_I2C if I2C
    -	select AD7303
    -	select AD8801
    -	select AD9508
    -	select AD9517
    -	select AD9523
    -	select AD9528
    -	select AD9548
    -	select ADF4350
    -	select ADF4360
    -	select ADF4371
    -	select ADF5355
    -	select CF_AXI_DDS
    -	select CF_AXI_DDS_AD9122
    -	select CF_AXI_DDS_AD9144
    -	select CF_AXI_DDS_AD9739A
    -	select HMC7044
    -	select CF_AXI_DDS_AD9162
    -	select CF_AXI_DDS_AD9172
    -	select AD916X_AMP
    -	select M2K_DAC
    -	select ADIS16080
    -	select ADIS16130
    -	select ADIS16136
    -	select ADIS16260
    -	select ADIS16400
    -	select ADIS16460
    -	select ADIS16475
    -	select ADIS16480
    -	select M2K_LOGIC_ANALYZER
    -	select AD5272
    -	select IIO_REGMAP_I2C
    -	select IIO_REGMAP_SPI
    -	select AD2S1200
    -	select LTC2983
    -	select ADIS16203
    -	select ADIS16240
    -	select AD7780
    -	select AD7816
    -	select AD7192
    -	select AD7280
    -	select ADT7316
    -	select ADT7316_SPI if SPI
    -	select ADT7316_I2C if I2C
    -	select AD7150
    -	select AD7152
    -	select AD7746
    -	select AD9832
    -	select AD9834
    -	select AD5933
    -	select ADE7854
    -	select ADE7854_I2C if I2C
    -	select ADE7854_SPI if SPI
    -	select AD2S90
    -	select AD2S1210
    -	select LTC6952
    -	select LTC2471
    -	select LTC2632
    -	select LTC2485
    -	select ADXRS290
    -	select ADXRS450
    -	select AXI_JESD204_TX
    -	select AXI_JESD204_RX
    -	select AXI_ADXCVR
    -	select ONE_BIT_ADC_DAC
    +	imply IIO_BUFFER
    +	imply IIO_SW_DEVICE
    +	imply IIO_SW_TRIGGER
    +	imply IIO_TRIGGERED_EVENT
    +	imply IIO_HRTIMER_TRIGGER
    +	imply IIO_INTERRUPT_TRIGGER
    +	imply IIO_SYSFS_TRIGGER
    +	imply IIO_TIGHTLOOP_TRIGGER
    +	imply IIO_BUFFER_CB
    +	imply IIO_BUFFER_DMA
    +	imply IIO_BUFFER_DMAENGINE
    +	imply IIO_BUFFER_HW_CONSUMER
    +	imply IIO_KFIFO_BUF
    +	imply IIO_TRIGGERED_BUFFER
    +	imply ALTERA_ARRIA10_JESD204_PHY if ARCH_SOCFPGA
    +	imply ADIS16201
    +	imply ADIS16209
    +	imply ADXL345_I2C if I2C
    +	imply ADXL345_SPI if SPI
    +	imply ADXL372_I2C if I2C
    +	imply ADXL372_SPI if SPI
    +	imply AD400X
    +	imply AD6676
    +	imply AD7091R5
    +	imply AD7124
    +	imply AD7173
    +	imply AD7266
    +	imply AD7291
    +	imply AD7298
    +	imply AD738X
    +	imply AD7923
    +	imply AD7476
    +	imply AD7606_IFACE_PARALLEL
    +	imply AD7606_IFACE_SPI
    +	imply AD7766
    +	imply AD7768
    +	imply AD7768_1
    +	imply AD7791
    +	imply AD7793
    +	imply AD7887
    +	imply AD799X
    +	imply AD9963
    +	imply CF_AXI_ADC
    +	imply AD9208
    +	imply AD9081
    +	imply AD9361
    +	imply AD9361_EXT_BAND_CONTROL
    +	imply AD9371
    +	imply ADAR1000
    +	imply ADRV9009
    +	imply ADRV9001
    +	imply AD9467
    +	imply AD9680
    +	imply ADMC
    +	imply CF_AXI_TDD
    +	imply AXI_PULSE_CAPTURE
    +	imply AXI_FMCADC5_SYNC
    +	imply XILINX_XADC if (ARCH_ZYNQ || ARCH_ZYNQMP || MICROBLAZE)
    +	imply LTC2497
    +	imply LTC2308
    +	imply AD8366
    +	imply HMC425
    +	imply AD5270
    +	imply AD5360
    +	imply AD5380
    +	imply AD5421
    +	imply AD5624R_SPI if SPI
    +	imply AD5064
    +	imply AD5504
    +	imply AD5446
    +	imply AD5449
    +	imply AD5592R_BASE
    +	imply AD5592R
    +	imply AD5593R
    +	imply AD5755
    +	imply AD5758
    +	imply AD5761
    +	imply AD5764
    +	imply AD5766
    +	imply AD5770R
    +	imply AD5791
    +	imply AD5686
    +	imply AD5686_SPI if SPI
    +	imply AD5696_I2C if I2C
    +	imply AD7303
    +	imply AD8801
    +	imply AD9508
    +	imply AD9517
    +	imply AD9523
    +	imply AD9528
    +	imply AD9548
    +	imply ADF4350
    +	imply ADF4360
    +	imply ADF4371
    +	imply ADF5355
    +	imply CF_AXI_DDS
    +	imply CF_AXI_DDS_AD9122
    +	imply CF_AXI_DDS_AD9144
    +	imply CF_AXI_DDS_AD9739A
    +	imply HMC7044
    +	imply CF_AXI_DDS_AD9162
    +	imply CF_AXI_DDS_AD9172
    +	imply AD916X_AMP
    +	imply M2K_DAC
    +	imply ADIS16080
    +	imply ADIS16130
    +	imply ADIS16136
    +	imply ADIS16260
    +	imply ADIS16400
    +	imply ADIS16460
    +	imply ADIS16475
    +	imply ADIS16480
    +	imply M2K_LOGIC_ANALYZER
    +	imply AD5272
    +	imply IIO_REGMAP_I2C
    +	imply IIO_REGMAP_SPI
    +	imply AD2S1200
    +	imply LTC2983
    +	imply ADIS16203
    +	imply ADIS16240
    +	imply AD7780
    +	imply AD7816
    +	imply AD7192
    +	imply AD7280
    +	imply ADT7316
    +	imply ADT7316_SPI if SPI
    +	imply ADT7316_I2C if I2C
    +	imply AD7150
    +	imply AD7152
    +	imply AD7746
    +	imply AD9832
    +	imply AD9834
    +	imply AD5933
    +	imply ADE7854
    +	imply ADE7854_I2C if I2C
    +	imply ADE7854_SPI if SPI
    +	imply AD2S90
    +	imply AD2S1210
    +	imply LTC6952
    +	imply LTC2471
    +	imply LTC2632
    +	imply LTC2485
    +	imply ADXRS290
    +	imply ADXRS450
    +	imply AXI_JESD204_TX
    +	imply AXI_JESD204_RX
    +	imply AXI_ADXCVR
    +	imply ONE_BIT_ADC_DAC
    diff --git a/drivers/input/Kconfig.adi b/drivers/input/Kconfig.adi
    index fc8b3d857107..d4e324f733ed 100644
    --- a/drivers/input/Kconfig.adi
    +++ b/drivers/input/Kconfig.adi
    @@ -1,17 +1,17 @@
     
     config INPUT_ALL_ADI_DRIVERS
     	tristate "Build all Analog Devices Input Drivers"
    -	select KEYBOARD_ADP5520
    -	select KEYBOARD_ADP5588
    -	select KEYBOARD_ADP5589
    -	select KEYBOARD_GPIO
    -	select INPUT_TOUCHSCREEN
    -	select TOUCHSCREEN_ADS7846
    -	select TOUCHSCREEN_AD7877
    -	select TOUCHSCREEN_AD7879
    -	select TOUCHSCREEN_AD7879_I2C
    -	select TOUCHSCREEN_AD7879_SPI
    -	select INPUT_MISC
    -	select INPUT_AD714X
    -	select INPUT_AD714X_I2C
    -	select INPUT_AD714X_SPI
    +	imply KEYBOARD_ADP5520
    +	imply KEYBOARD_ADP5588
    +	imply KEYBOARD_ADP5589
    +	imply KEYBOARD_GPIO
    +	imply INPUT_TOUCHSCREEN
    +	imply TOUCHSCREEN_ADS7846
    +	imply TOUCHSCREEN_AD7877
    +	imply TOUCHSCREEN_AD7879
    +	imply TOUCHSCREEN_AD7879_I2C
    +	imply TOUCHSCREEN_AD7879_SPI
    +	imply INPUT_MISC
    +	imply INPUT_AD714X
    +	imply INPUT_AD714X_I2C
    +	imply INPUT_AD714X_SPI
    diff --git a/drivers/media/Kconfig.adi b/drivers/media/Kconfig.adi
    index 132724ce9b24..cf030a17fa5f 100644
    --- a/drivers/media/Kconfig.adi
    +++ b/drivers/media/Kconfig.adi
    @@ -3,23 +3,23 @@
     
     config MEDIA_ALL_ADI_DRIVERS
     	tristate "Build all Analog Devices Media Drivers"
    -	select VIDEO_ADV_DEBUG
    -	select VIDEO_ADV7170
    -	select VIDEO_ADV7175
    -	select VIDEO_ADV7343
    -	select VIDEO_ADV7393
    -	select VIDEO_ADV7511
    -	select VIDEO_ADV7511_CEC
    -	select VIDEO_AD9389B
    -	select VIDEO_ADDI9036
    -	select VIDEO_ADV7180
    -	select VIDEO_ADV7183
    -	select VIDEO_ADV748X
    -	select VIDEO_ADV7604
    -	select VIDEO_ADV7604_CEC
    -	select VIDEO_ADV7842
    -	select VIDEO_ADV7842_CEC
    -	select VIDEO_AXI_HDMI_RX
    -	select ADI_AXI_VIDEO_FRAME_BUFFER
    -	select VIDEO_ADP1653
    -	select USB_VIDEO_CLASS
    +	imply VIDEO_ADV_DEBUG
    +	imply VIDEO_ADV7170
    +	imply VIDEO_ADV7175
    +	imply VIDEO_ADV7343
    +	imply VIDEO_ADV7393
    +	imply VIDEO_ADV7511
    +	imply VIDEO_ADV7511_CEC
    +	imply VIDEO_AD9389B
    +	imply VIDEO_ADDI9036
    +	imply VIDEO_ADV7180
    +	imply VIDEO_ADV7183
    +	imply VIDEO_ADV748X
    +	imply VIDEO_ADV7604
    +	imply VIDEO_ADV7604_CEC
    +	imply VIDEO_ADV7842
    +	imply VIDEO_ADV7842_CEC
    +	imply VIDEO_AXI_HDMI_RX
    +	imply ADI_AXI_VIDEO_FRAME_BUFFER
    +	imply VIDEO_ADP1653
    +	imply USB_VIDEO_CLASS
    diff --git a/drivers/usb/Kconfig.adi b/drivers/usb/Kconfig.adi
    index cb460cb170c0..10f0d2ee4343 100644
    --- a/drivers/usb/Kconfig.adi
    +++ b/drivers/usb/Kconfig.adi
    @@ -3,40 +3,40 @@
     
     config USB_ALL_ADI_DRIVERS
     	tristate "Build all USB drivers for the Analog Devices kernel"
    -	select USB
    -	select USB_SUPPORT
    -	select USB_SERIAL
    -	select USB_HIDDEV
    -	select USB_ANNOUNCE_NEW_DEVICES
    -	select USB_OTG
    -	select USB_UAS
    -	select USB_EHCI_HCD
    -	select USB_STORAGE
    -	select USB_MASS_STORAGE
    -	select USB_CHIPIDEA
    -	select USB_CHIPIDEA_UDC
    -	select USB_CHIPIDEA_HOST
    -	select USB_SERIAL_GENERIC
    -	select USB_SERIAL_FTDI_SIO
    -	select USB_ULPI
    -	select USB_GADGET
    -	select USB_GADGET_XILINX
    -	select USB_CONFIGFS
    -	select USB_CONFIGFS_SERIAL
    -	select USB_CONFIGFS_ACM
    -	select USB_CONFIGFS_NCM
    -	select USB_CONFIGFS_ECM
    -	select USB_CONFIGFS_ECM_SUBSET
    -	select USB_CONFIGFS_RNDIS
    -	select USB_CONFIGFS_EEM
    -	select USB_CONFIGFS_MASS_STORAGE
    -	select USB_CONFIGFS_F_FS
    -	select USB_F_RNDIS
    -	select USB_SERIAL_UPD78F0730
    -	select USB_DWC2
    -	select USB_DWC3
    -	select USB_XHCI_HCD
    -	select NOP_USB_XCEIV
    -	select USB_USBNET
    -	select USB_DEFAULT_PERSIST
    -	select TYPEC
    +	imply USB
    +	imply USB_SUPPORT
    +	imply USB_SERIAL
    +	imply USB_HIDDEV
    +	imply USB_ANNOUNCE_NEW_DEVICES
    +	imply USB_OTG
    +	imply USB_UAS
    +	imply USB_EHCI_HCD
    +	imply USB_STORAGE
    +	imply USB_MASS_STORAGE
    +	imply USB_CHIPIDEA
    +	imply USB_CHIPIDEA_UDC
    +	imply USB_CHIPIDEA_HOST
    +	imply USB_SERIAL_GENERIC
    +	imply USB_SERIAL_FTDI_SIO
    +	imply USB_ULPI
    +	imply USB_GADGET
    +	imply USB_GADGET_XILINX
    +	imply USB_CONFIGFS
    +	imply USB_CONFIGFS_SERIAL
    +	imply USB_CONFIGFS_ACM
    +	imply USB_CONFIGFS_NCM
    +	imply USB_CONFIGFS_ECM
    +	imply USB_CONFIGFS_ECM_SUBSET
    +	imply USB_CONFIGFS_RNDIS
    +	imply USB_CONFIGFS_EEM
    +	imply USB_CONFIGFS_MASS_STORAGE
    +	imply USB_CONFIGFS_F_FS
    +	imply USB_F_RNDIS
    +	imply USB_SERIAL_UPD78F0730
    +	imply USB_DWC2
    +	imply USB_DWC3
    +	imply USB_XHCI_HCD
    +	imply NOP_USB_XCEIV
    +	imply USB_USBNET
    +	imply USB_DEFAULT_PERSIST
    +	imply TYPEC
    diff --git a/sound/soc/codecs/Kconfig.adi b/sound/soc/codecs/Kconfig.adi
    index 80d0ffc67dbe..2f7bc0c4e7e4 100644
    --- a/sound/soc/codecs/Kconfig.adi
    +++ b/sound/soc/codecs/Kconfig.adi
    @@ -9,32 +9,32 @@
     
     config SND_SOC_ALL_ADI_CODECS
     	tristate "Build all Analog Devices ASoC CODEC drivers"
    -	select SND_SOC_AD1836 if SPI_MASTER
    -	select SND_SOC_AD193X_SPI if SPI_MASTER
    -	select SND_SOC_AD193X_I2C if I2C
    -	select SND_SOC_AD1980 if SND_SOC_AC97_BUS
    -	select SND_SOC_ADAU1373 if I2C
    -	select SND_SOC_ADAU1761_I2C if I2C
    -	select SND_SOC_ADAU1761_SPI if SPI
    -	select SND_SOC_ADAU1781_I2C if I2C
    -	select SND_SOC_ADAU1781_SPI if SPI
    -	select SND_SOC_ADAV801 if SPI_MASTER
    -	select SND_SOC_ADAV803 if I2C
    -	select SND_SOC_ADAU1977_SPI if SPI_MASTER
    -	select SND_SOC_ADAU1977_I2C if I2C
    -	select SND_SOC_ADAU1701 if I2C
    -	select SND_SOC_ADAU7002
    -	select SND_SOC_ADAU7118_I2C if I2C
    -	select SND_SOC_ADAU7118_HW
    -	select SND_SOC_SSM2305
    -	select SND_SOC_SSM2518 if I2C
    -	select SND_SOC_SSM2602_SPI if SPI_MASTER
    -	select SND_SOC_SSM2602_I2C if I2C
    -	select SND_SOC_SSM4567 if I2C
    -	select SND_SOC_ADI
    -	select SND_SOC_ADI_AXI_I2S
    -	select SND_SOC_ADI_AXI_SPDIF
    -	select SND_SOC_ADRV936X_BOX
    -	select SND_USB
    -	select SND_USB_AUDIO
    -	select SND_SIMPLE_CARD
    +	imply SND_SOC_AD1836 if SPI_MASTER
    +	imply SND_SOC_AD193X_SPI if SPI_MASTER
    +	imply SND_SOC_AD193X_I2C if I2C
    +	imply SND_SOC_AD1980 if SND_SOC_AC97_BUS
    +	imply SND_SOC_ADAU1373 if I2C
    +	imply SND_SOC_ADAU1761_I2C if I2C
    +	imply SND_SOC_ADAU1761_SPI if SPI
    +	imply SND_SOC_ADAU1781_I2C if I2C
    +	imply SND_SOC_ADAU1781_SPI if SPI
    +	imply SND_SOC_ADAV801 if SPI_MASTER
    +	imply SND_SOC_ADAV803 if I2C
    +	imply SND_SOC_ADAU1977_SPI if SPI_MASTER
    +	imply SND_SOC_ADAU1977_I2C if I2C
    +	imply SND_SOC_ADAU1701 if I2C
    +	imply SND_SOC_ADAU7002
    +	imply SND_SOC_ADAU7118_I2C if I2C
    +	imply SND_SOC_ADAU7118_HW
    +	imply SND_SOC_SSM2305
    +	imply SND_SOC_SSM2518 if I2C
    +	imply SND_SOC_SSM2602_SPI if SPI_MASTER
    +	imply SND_SOC_SSM2602_I2C if I2C
    +	imply SND_SOC_SSM4567 if I2C
    +	imply SND_SOC_ADI
    +	imply SND_SOC_ADI_AXI_I2S
    +	imply SND_SOC_ADI_AXI_SPDIF
    +	imply SND_SOC_ADRV936X_BOX
    +	imply SND_USB
    +	imply SND_USB_AUDIO
    +	imply SND_SIMPLE_CARD
    

    Although this does allow me to independently change the top level ADI build options like 'Build all Analog Devices IIO Drivers' to a 'No', it does not allow me to change it to be a module still (unless 'Build All Analog Devices Kernel Drivers' is de-selected).

    I've tried the 2021 build, and it does allow me to configure the adrv9001/9002 driver as a module without touching any of the other kconfig options. After a build, it looks like its putting it in the correct location as well.

    With the patch i have above, im a little at a loss for the reason why the 2019 and 2021 menuconfig options are acting differently- unless the subsystems they rely on have different options between the two kernel versions.

    Thanks,
    ~Seth

  • I would have to install petalinux for that version... Any strong reason for you to not update to a newer kernel + petalinux? Also note that the 2019 driver is missing some features...

    Although this does allow me to independently change the top level ADI build options like 'Build all Analog Devices IIO Drivers' to a 'No', it does not allow me to change it to be a module still (unless 'Build All Analog Devices Kernel Drivers' is de-selected).

    Yeah, mainly because this commit is not part of the 2019_R2 branch... It was only introduced in the 5.6 release cycle...

    If you really need to stick with 2019_R2, you can try this config...

    CONFIG_HWMON_ALL_ADI_DRIVERS=y
    CONFIG_IIO_ALL_ADI_DRIVERS=m
    CONFIG_INPUT_ALL_ADI_DRIVERS=y
    CONFIG_MEDIA_ALL_ADI_DRIVERS=y
    CONFIG_USB_ALL_ADI_DRIVERS=y
    CONFIG_SND_SOC_ALL_ADI_CODECS=y
    CONFIG_SYSVIPC=y
    CONFIG_POSIX_MQUEUE=y
    CONFIG_AUDIT=y
    CONFIG_NO_HZ=y
    CONFIG_HIGH_RES_TIMERS=y
    CONFIG_BSD_PROCESS_ACCT=y
    CONFIG_TASKSTATS=y
    CONFIG_TASK_DELAY_ACCT=y
    CONFIG_TASK_XACCT=y
    CONFIG_TASK_IO_ACCOUNTING=y
    CONFIG_IKCONFIG=y
    CONFIG_IKCONFIG_PROC=y
    CONFIG_LOG_BUF_SHIFT=16
    CONFIG_CGROUPS=y
    CONFIG_BLK_DEV_INITRD=y
    CONFIG_EMBEDDED=y
    # CONFIG_COMPAT_BRK is not set
    CONFIG_SLAB=y
    CONFIG_PROFILING=y
    CONFIG_ARCH_ZYNQMP=y
    CONFIG_PCI=y
    CONFIG_PCIE_XILINX_NWL=y
    CONFIG_NR_CPUS=8
    CONFIG_ARMV8_DEPRECATED=y
    CONFIG_SWP_EMULATION=y
    CONFIG_CP15_BARRIER_EMULATION=y
    CONFIG_SETEND_EMULATION=y
    # CONFIG_DMI is not set
    CONFIG_COMPAT=y
    CONFIG_CPU_IDLE=y
    CONFIG_ARM_CPUIDLE=y
    CONFIG_CPU_FREQ=y
    CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
    CONFIG_CPUFREQ_DT=y
    CONFIG_MODULES=y
    CONFIG_MODULE_UNLOAD=y
    CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
    CONFIG_TRANSPARENT_HUGEPAGE=y
    CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
    CONFIG_CMA=y
    CONFIG_NET=y
    CONFIG_PACKET=y
    CONFIG_UNIX=y
    CONFIG_XFRM_USER=y
    CONFIG_NET_KEY=y
    CONFIG_NET_KEY_MIGRATE=y
    CONFIG_INET=y
    CONFIG_IP_MULTICAST=y
    CONFIG_IP_PNP=y
    CONFIG_IP_PNP_DHCP=y
    CONFIG_IP_PNP_BOOTP=y
    CONFIG_IP_PNP_RARP=y
    CONFIG_SYN_COOKIES=y
    CONFIG_NETWORK_SECMARK=y
    CONFIG_NETFILTER=y
    CONFIG_NETFILTER_NETLINK_LOG=y
    CONFIG_NF_CONNTRACK=m
    CONFIG_NF_CT_NETLINK=m
    CONFIG_NETFILTER_XT_MARK=y
    CONFIG_NETFILTER_XT_TARGET_CHECKSUM=y
    CONFIG_NETFILTER_XT_TARGET_LOG=y
    CONFIG_NETFILTER_XT_TARGET_REDIRECT=m
    CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
    CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
    CONFIG_NETFILTER_XT_MATCH_LIMIT=y
    CONFIG_NETFILTER_XT_MATCH_MAC=y
    CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
    CONFIG_NETFILTER_XT_MATCH_STATE=m
    CONFIG_NF_NAT_IPV4=m
    CONFIG_IP_NF_IPTABLES=y
    CONFIG_IP_NF_FILTER=y
    CONFIG_IP_NF_TARGET_REJECT=y
    CONFIG_IP_NF_MANGLE=y
    CONFIG_NF_NAT_IPV6=m
    CONFIG_IP6_NF_IPTABLES=y
    CONFIG_IP6_NF_FILTER=y
    CONFIG_IP6_NF_TARGET_REJECT=y
    CONFIG_IP6_NF_MANGLE=y
    CONFIG_BRIDGE_NF_EBTABLES=y
    CONFIG_BRIDGE_EBT_T_FILTER=y
    CONFIG_BRIDGE_EBT_T_NAT=y
    CONFIG_BRIDGE_EBT_MARK_T=y
    CONFIG_BRIDGE=y
    CONFIG_NET_DSA=y
    CONFIG_IEEE802154=y
    CONFIG_MAC802154=y
    CONFIG_NET_PKTGEN=y
    CONFIG_CAN=y
    CONFIG_CAN_XILINXCAN=y
    CONFIG_BT=y
    CONFIG_BT_RFCOMM=y
    CONFIG_BT_RFCOMM_TTY=y
    CONFIG_BT_BNEP=y
    CONFIG_BT_BNEP_MC_FILTER=y
    CONFIG_BT_BNEP_PROTO_FILTER=y
    CONFIG_BT_HIDP=y
    CONFIG_BT_LEDS=y
    CONFIG_BT_HCIBTUSB=y
    CONFIG_BT_HCIBTSDIO=y
    CONFIG_BT_HCIUART=y
    CONFIG_BT_HCIUART_BCSP=y
    CONFIG_BT_HCIUART_ATH3K=y
    CONFIG_BT_HCIUART_LL=y
    CONFIG_BT_HCIUART_3WIRE=y
    CONFIG_BT_HCIUART_INTEL=y
    CONFIG_BT_HCIUART_QCA=y
    CONFIG_BT_HCIBCM203X=y
    CONFIG_BT_HCIBPA10X=y
    CONFIG_BT_HCIBFUSB=y
    CONFIG_BT_HCIVHCI=y
    CONFIG_BT_MRVL=y
    CONFIG_BT_MRVL_SDIO=y
    CONFIG_BT_ATH3K=y
    CONFIG_BT_WILINK=y
    CONFIG_CFG80211=y
    CONFIG_NL80211_TESTMODE=y
    CONFIG_CFG80211_CERTIFICATION_ONUS=y
    CONFIG_CFG80211_REG_CELLULAR_HINTS=y
    CONFIG_CFG80211_REG_RELAX_NO_IR=y
    CONFIG_CFG80211_WEXT=y
    CONFIG_MAC80211=y
    CONFIG_MAC80211_LEDS=y
    CONFIG_MAC80211_MESSAGE_TRACING=y
    CONFIG_MAC80211_DEBUG_MENU=y
    CONFIG_RFKILL=y
    CONFIG_RFKILL_INPUT=y
    CONFIG_RFKILL_GPIO=y
    CONFIG_NET_9P=y
    CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
    CONFIG_DEVTMPFS=y
    CONFIG_DEVTMPFS_MOUNT=y
    CONFIG_EXTRA_FIRMWARE="ad9144_fmc_ebz_ad9516.stp Mykonos_M3.bin TaliseStream.bin TaliseTDDArmFirmware.bin TaliseTxArmFirmware.bin TaliseRxArmFirmware.bin adau1761.bin Navassa_EvaluationFw.bin RxGainTable.csv ORxGainTable.csv TxAttenTable.csv Navassa_Stream.bin Navassa_CMOS_profile.json Navassa_LVDS_profile.json"
    CONFIG_EXTRA_FIRMWARE_DIR="./firmware"
    CONFIG_DMA_CMA=y
    CONFIG_CMA_SIZE_MBYTES=256
    CONFIG_CONNECTOR=y
    CONFIG_MTD=y
    CONFIG_MTD_TESTS=m
    CONFIG_MTD_CMDLINE_PARTS=y
    CONFIG_MTD_BLOCK=y
    CONFIG_MTD_OOPS=y
    CONFIG_MTD_CFI=y
    CONFIG_MTD_CFI_INTELEXT=y
    CONFIG_MTD_DATAFLASH=y
    CONFIG_MTD_M25P80=y
    CONFIG_MTD_NAND=y
    CONFIG_MTD_NAND_ARASAN=y
    CONFIG_MTD_SPI_NOR=y
    CONFIG_OF_OVERLAY=y
    CONFIG_OF_CONFIGFS=y
    CONFIG_BLK_DEV_LOOP=y
    CONFIG_BLK_DEV_RAM=y
    CONFIG_BLK_DEV_RAM_SIZE=65536
    CONFIG_AD525X_DPOT=y
    CONFIG_AD525X_DPOT_I2C=y
    CONFIG_AD525X_DPOT_SPI=y
    CONFIG_XILINX_SDFEC=y
    CONFIG_XILINX_JESD204B=y
    CONFIG_XILINX_JESD204B_PHY=y
    CONFIG_EEPROM_AT24=y
    CONFIG_EEPROM_AT25=y
    CONFIG_TI_ST=y
    CONFIG_MATHWORKS_IP_CORE=y
    CONFIG_MWIPCORE=y
    CONFIG_MWIPCORE_DMA_STREAMING=y
    CONFIG_MWIPCORE_IIO_STREAMING=y
    CONFIG_MATHWORKS_GENERIC_OF=y
    CONFIG_BLK_DEV_SD=y
    CONFIG_ATA=y
    CONFIG_SATA_AHCI_PLATFORM=y
    CONFIG_AHCI_CEVA=y
    # CONFIG_ATA_SFF is not set
    CONFIG_NETDEVICES=y
    CONFIG_TUN=y
    CONFIG_MICROCHIP_KSZ=y
    CONFIG_MICROCHIP_KSZ_SPI_DRIVER=y
    CONFIG_MACB=y
    CONFIG_XILINX_EMACLITE=y
    CONFIG_XILINX_AXI_EMAC=y
    CONFIG_ADIN_PHY=y
    CONFIG_ADIN_T1L_PHY=y
    CONFIG_AMD_PHY=y
    CONFIG_AT803X_PHY=y
    CONFIG_BCM7XXX_PHY=y
    CONFIG_BCM87XX_PHY=y
    CONFIG_BROADCOM_PHY=y
    CONFIG_CICADA_PHY=y
    CONFIG_DAVICOM_PHY=y
    CONFIG_DP83867_PHY=y
    CONFIG_ICPLUS_PHY=y
    CONFIG_LSI_ET1011C_PHY=y
    CONFIG_LXT_PHY=y
    CONFIG_MARVELL_PHY=y
    CONFIG_MICREL_PHY=y
    CONFIG_NATIONAL_PHY=y
    CONFIG_QSEMI_PHY=y
    CONFIG_REALTEK_PHY=y
    CONFIG_SMSC_PHY=y
    CONFIG_STE10XP=y
    CONFIG_VITESSE_PHY=y
    CONFIG_XILINX_GMII2RGMII=y
    CONFIG_WL18XX=y
    CONFIG_WLCORE_SPI=y
    CONFIG_WLCORE_SDIO=y
    CONFIG_IEEE802154_ADF7242=y
    CONFIG_INPUT_EVDEV=y
    CONFIG_KEYBOARD_GPIO_POLLED=y
    CONFIG_INPUT_PCF8574=y
    CONFIG_SERIAL_8250=y
    CONFIG_SERIAL_8250_CONSOLE=y
    CONFIG_SERIAL_OF_PLATFORM=y
    CONFIG_SERIAL_MAX310X=y
    CONFIG_SERIAL_UARTLITE=y
    CONFIG_SERIAL_UARTLITE_CONSOLE=y
    CONFIG_SERIAL_XILINX_PS_UART=y
    CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y
    CONFIG_SERIAL_DEV_BUS=y
    # CONFIG_HW_RANDOM is not set
    CONFIG_AXI_INTR_MONITOR=y
    CONFIG_I2C_CHARDEV=y
    CONFIG_I2C_MUX=y
    CONFIG_I2C_MUX_GPMUX=y
    CONFIG_I2C_MUX_LTC4306=y
    CONFIG_I2C_MUX_PCA9541=y
    CONFIG_I2C_MUX_PCA954x=y
    CONFIG_I2C_CADENCE=y
    CONFIG_I2C_XILINX=y
    CONFIG_SPI=y
    CONFIG_SPI_AXI_SPI_ENGINE=y
    CONFIG_SPI_CADENCE=y
    CONFIG_SPI_AD9250FMC=y
    CONFIG_SPI_XILINX=y
    CONFIG_SPI_ZYNQMP_GQSPI=y
    CONFIG_GPIO_SYSFS=y
    CONFIG_GPIO_XILINX=y
    CONFIG_GPIO_ZYNQ=y
    CONFIG_GPIO_ADP5588=y
    CONFIG_GPIO_ADP5588_IRQ=y
    CONFIG_GPIO_PCA953X=y
    CONFIG_GPIO_ADP5520=y
    CONFIG_GPIO_TPS65086=y
    CONFIG_GPIO_ADI_DAQ1=y
    CONFIG_POWER_RESET_LTC2952=y
    CONFIG_CHARGER_ADP5061=y
    CONFIG_CHARGER_LTC3651=y
    CONFIG_BATTERY_GAUGE_LTC2941=y
    CONFIG_SENSORS_IIO_HWMON=y
    CONFIG_SENSORS_JC42=y
    CONFIG_SENSORS_LM87=y
    CONFIG_SENSORS_LM90=y
    CONFIG_SENSORS_MAX20751=y
    CONFIG_SENSORS_INA2XX=y
    CONFIG_WATCHDOG=y
    CONFIG_XILINX_WATCHDOG=y
    CONFIG_CADENCE_WATCHDOG=y
    CONFIG_PMIC_ADP5520=y
    CONFIG_MFD_TPS65086=y
    CONFIG_REGULATOR=y
    CONFIG_REGULATOR_FIXED_VOLTAGE=y
    CONFIG_REGULATOR_AD5398=y
    CONFIG_REGULATOR_GPIO=y
    CONFIG_REGULATOR_LTC3589=y
    CONFIG_REGULATOR_LTC3676=y
    CONFIG_REGULATOR_TPS65086=y
    CONFIG_MEDIA_SUPPORT=y
    CONFIG_MEDIA_CAMERA_SUPPORT=y
    CONFIG_MEDIA_CONTROLLER=y
    CONFIG_VIDEO_V4L2_SUBDEV_API=y
    CONFIG_MEDIA_USB_SUPPORT=y
    CONFIG_V4L_PLATFORM_DRIVERS=y
    CONFIG_VIDEO_XILINX=y
    CONFIG_VIDEO_XILINX_AXI4S_SWITCH=y
    CONFIG_VIDEO_XILINX_CFA=y
    CONFIG_VIDEO_XILINX_CRESAMPLE=y
    CONFIG_VIDEO_XILINX_DEMOSAIC=y
    CONFIG_VIDEO_XILINX_GAMMA=y
    CONFIG_VIDEO_XILINX_HLS=y
    CONFIG_VIDEO_XILINX_REMAPPER=y
    CONFIG_VIDEO_XILINX_RGB2YUV=y
    CONFIG_VIDEO_XILINX_SCALER=y
    CONFIG_VIDEO_XILINX_MULTISCALER=y
    CONFIG_VIDEO_XILINX_SDIRXSS=y
    CONFIG_VIDEO_XILINX_SWITCH=y
    CONFIG_VIDEO_XILINX_TPG=y
    CONFIG_VIDEO_XILINX_VPSS_CSC=y
    CONFIG_VIDEO_XILINX_VPSS_SCALER=y
    CONFIG_VIDEO_XILINX_CSI2RXSS=y
    CONFIG_VIDEO_XILINX_SCD=y
    CONFIG_VIDEO_XILINX_M2M=y
    # CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set
    # CONFIG_VGA_ARB is not set
    CONFIG_DRM=y
    CONFIG_DRM_ADI_AXI_HDMI=y
    CONFIG_DRM_I2C_ADV7511=y
    CONFIG_DRM_I2C_ADV7511_AUDIO=y
    CONFIG_DRM_XILINX=y
    CONFIG_DRM_XILINX_SDI=y
    CONFIG_DRM_XLNX=y
    CONFIG_DRM_XLNX_BRIDGE=y
    CONFIG_DRM_XLNX_BRIDGE_DEBUG_FS=y
    CONFIG_DRM_ZYNQMP_DPSUB=y
    CONFIG_DRM_XLNX_DSI=y
    CONFIG_DRM_XLNX_MIXER=y
    CONFIG_DRM_XLNX_PL_DISP=y
    CONFIG_DRM_XLNX_SDI=y
    CONFIG_DRM_XLNX_BRIDGE_CSC=y
    CONFIG_DRM_XLNX_BRIDGE_SCALER=y
    CONFIG_DRM_XLNX_BRIDGE_VTC=y
    CONFIG_FB_XILINX=y
    CONFIG_BACKLIGHT_ADP5520=y
    CONFIG_BACKLIGHT_ADP8860=y
    CONFIG_BACKLIGHT_ADP8870=y
    CONFIG_FRAMEBUFFER_CONSOLE=y
    CONFIG_SOUND=y
    CONFIG_SND=y
    # CONFIG_SND_DRIVERS is not set
    # CONFIG_SND_PCI is not set
    CONFIG_SND_SOC=y
    CONFIG_SND_SOC_XILINX_DP=y
    CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER=y
    CONFIG_SND_SOC_XILINX_SDI=y
    CONFIG_SND_SOC_XILINX_I2S=y
    CONFIG_SND_SOC_XILINX_SPDIF=y
    CONFIG_SND_SOC_XILINX_PL_SND_CARD=y
    CONFIG_USB_ETH=m
    CONFIG_USB_ETH_EEM=y
    CONFIG_USB_MASS_STORAGE=m
    CONFIG_MMC=y
    CONFIG_MMC_SDHCI=y
    CONFIG_MMC_SDHCI_PLTFM=y
    CONFIG_MMC_SDHCI_OF_ARASAN=y
    CONFIG_LEDS_CLASS_FLASH=y
    CONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y
    CONFIG_LEDS_AS3645A=y
    CONFIG_LEDS_GPIO=y
    CONFIG_LEDS_ADP5520=y
    CONFIG_LEDS_TRIGGER_TIMER=y
    CONFIG_LEDS_TRIGGER_ONESHOT=y
    CONFIG_LEDS_TRIGGER_HEARTBEAT=y
    CONFIG_LEDS_TRIGGER_BACKLIGHT=y
    CONFIG_LEDS_TRIGGER_CPU=y
    CONFIG_LEDS_TRIGGER_GPIO=y
    CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
    CONFIG_LEDS_TRIGGER_TRANSIENT=y
    CONFIG_LEDS_TRIGGER_CAMERA=y
    CONFIG_EDAC=y
    CONFIG_EDAC_SYNOPSYS=y
    CONFIG_EDAC_ZYNQMP_OCM=y
    CONFIG_RTC_CLASS=y
    CONFIG_RTC_DRV_ZYNQMP=y
    CONFIG_AXI_DMAC=y
    CONFIG_XILINX_ZYNQMP_DMA=y
    CONFIG_DMATEST=y
    CONFIG_UIO=y
    CONFIG_UIO_PDRV_GENIRQ=m
    CONFIG_UIO_DMEM_GENIRQ=m
    CONFIG_UIO_XILINX_APM=y
    CONFIG_STAGING=y
    CONFIG_ADIS16203=y
    CONFIG_ADIS16240=y
    CONFIG_AD7780=y
    CONFIG_AD7816=y
    CONFIG_AD7192=y
    CONFIG_AD7280=y
    CONFIG_ADT7316=y
    CONFIG_ADT7316_I2C=y
    CONFIG_AD7150=y
    CONFIG_AD7152=y
    CONFIG_AD7746=y
    CONFIG_AD9832=y
    CONFIG_AD9834=y
    CONFIG_AD5933=y
    CONFIG_ADE7854=y
    CONFIG_AD2S90=y
    CONFIG_AD2S1210=y
    CONFIG_ION=y
    CONFIG_ION_SYSTEM_HEAP=y
    CONFIG_ION_CARVEOUT_HEAP=y
    CONFIG_ION_CHUNK_HEAP=y
    CONFIG_ION_CMA_HEAP=y
    CONFIG_COMMON_CLK_XLNX_CLKWZRD=y
    CONFIG_FB_TFT=y
    CONFIG_FB_TFT_SEPS525=y
    CONFIG_XILINX_FCLK=y
    CONFIG_XLNX_CTRL_FRMBUF=y
    CONFIG_XLNX_CTRL_VPSS=y
    CONFIG_COMMON_CLK_SI514=y
    CONFIG_COMMON_CLK_SI570=y
    CONFIG_COMMON_CLK_SI5324=y
    CONFIG_COMMON_CLK_AXI_CLKGEN=y
    # CONFIG_COMMON_CLK_XGENE is not set
    CONFIG_COMMON_CLK_ZYNQMP=y
    CONFIG_ARM_SMMU=y
    CONFIG_REMOTEPROC=y
    CONFIG_ZYNQMP_R5_REMOTEPROC=m
    CONFIG_XILINX_VCU=m
    CONFIG_IIO=y
    CONFIG_IIO_BUFFER_CB=y
    CONFIG_IIO_SW_DEVICE=y
    CONFIG_IIO_SW_TRIGGER=y
    CONFIG_ADIS16201=y
    CONFIG_ADIS16209=y
    CONFIG_ADXL345_I2C=y
    CONFIG_ADXL345_SPI=y
    CONFIG_ADXL372_SPI=y
    CONFIG_ADXL372_I2C=y
    CONFIG_AD400X=y
    CONFIG_AD7091R5=y
    CONFIG_AD7124=y
    CONFIG_AD7173=y
    CONFIG_AD7266=y
    CONFIG_AD7291=y
    CONFIG_AD7298=y
    CONFIG_AD738X=y
    CONFIG_AD7476=y
    CONFIG_AD7606_IFACE_PARALLEL=y
    CONFIG_AD7606_IFACE_SPI=y
    CONFIG_AD7766=y
    CONFIG_AD7768=y
    CONFIG_AD7768_1=y
    CONFIG_AD7791=y
    CONFIG_AD7793=y
    CONFIG_AD7887=y
    CONFIG_AD7923=y
    CONFIG_AD799X=y
    CONFIG_AD9963=y
    CONFIG_AD9081=y
    CONFIG_AD9208=y
    CONFIG_AD9361=y
    CONFIG_AD9371=y
    CONFIG_ADRV9009=y
    CONFIG_AD6676=y
    CONFIG_AD9467=y
    CONFIG_AD9680=y
    CONFIG_CF_AXI_TDD=y
    CONFIG_AXI_PULSE_CAPTURE=y
    CONFIG_AXI_FMCADC5_SYNC=y
    CONFIG_LTC2308=y
    CONFIG_LTC2471=y
    CONFIG_LTC2485=y
    CONFIG_LTC2497=y
    CONFIG_XILINX_XADC=y
    CONFIG_XILINX_AMS=y
    CONFIG_ONE_BIT_ADC_DAC=y
    CONFIG_AD8366=y
    CONFIG_AD916X_AMP=y
    CONFIG_HMC425=y
    CONFIG_ADAR1000=y
    CONFIG_AD5064=y
    CONFIG_AD5270=y
    CONFIG_AD5360=y
    CONFIG_AD5380=y
    CONFIG_AD5421=y
    CONFIG_AD5446=y
    CONFIG_AD5449=y
    CONFIG_AD5592R=y
    CONFIG_AD5593R=y
    CONFIG_AD5504=y
    CONFIG_AD5624R_SPI=y
    CONFIG_LTC2632=y
    CONFIG_AD5686_SPI=y
    CONFIG_AD5696_I2C=y
    CONFIG_AD5755=y
    CONFIG_AD5758=y
    CONFIG_AD5761=y
    CONFIG_AD5764=y
    CONFIG_AD5766=y
    CONFIG_AD5770R=y
    CONFIG_AD5791=y
    CONFIG_AD7303=y
    CONFIG_AD8801=y
    CONFIG_AD9508=y
    CONFIG_AD9523=y
    CONFIG_AD9528=y
    CONFIG_AD9548=y
    CONFIG_AD9517=y
    CONFIG_HMC7044=y
    CONFIG_LTC6952=y
    CONFIG_CF_AXI_DDS=y
    CONFIG_CF_AXI_DDS_AD9122=y
    CONFIG_CF_AXI_DDS_AD9144=y
    CONFIG_CF_AXI_DDS_AD9162=y
    CONFIG_CF_AXI_DDS_AD9172=y
    CONFIG_CF_AXI_DDS_AD9739A=y
    CONFIG_M2K_DAC=y
    CONFIG_ADF4350=y
    CONFIG_ADF4360=y
    CONFIG_ADF4371=y
    CONFIG_ADF5355=y
    CONFIG_ADIS16080=y
    CONFIG_ADIS16130=y
    CONFIG_ADIS16136=y
    CONFIG_ADIS16260=y
    CONFIG_ADXRS290=y
    CONFIG_ADXRS450=y
    CONFIG_ADIS16400=y
    CONFIG_ADIS16460=y
    CONFIG_ADIS16475=y
    CONFIG_ADIS16480=y
    CONFIG_AXI_ADXCVR=y
    CONFIG_AXI_JESD204_TX=y
    CONFIG_AXI_JESD204_RX=y
    CONFIG_M2K_LOGIC_ANALYZER=y
    CONFIG_IIO_REGMAP_I2C=y
    CONFIG_IIO_REGMAP_SPI=y
    CONFIG_IIO_HRTIMER_TRIGGER=y
    CONFIG_IIO_INTERRUPT_TRIGGER=y
    CONFIG_IIO_TIGHTLOOP_TRIGGER=y
    CONFIG_IIO_SYSFS_TRIGGER=y
    CONFIG_AD5272=y
    CONFIG_AD2S1200=y
    CONFIG_LTC2983=y
    CONFIG_JESD204=y
    CONFIG_PWM=y
    CONFIG_PWM_AXI_PWMGEN=y
    CONFIG_XILINX_INTC=y
    CONFIG_RAS=y
    CONFIG_ANDROID=y
    CONFIG_NVMEM_AXI_SYSID=y
    CONFIG_NVMEM_ZYNQMP=y
    CONFIG_FPGA=y
    CONFIG_XILINX_AFI_FPGA=y
    CONFIG_FPGA_BRIDGE=y
    CONFIG_XILINX_PR_DECOUPLER=y
    CONFIG_FPGA_REGION=y
    CONFIG_OF_FPGA_REGION=y
    CONFIG_FPGA_MGR_ZYNQMP_FPGA=y
    CONFIG_MUX_ADG792A=y
    CONFIG_MUX_ADGS1408=y
    CONFIG_MUX_GPIO=y
    CONFIG_EXT2_FS=y
    CONFIG_EXT3_FS=y
    CONFIG_EXT4_FS_POSIX_ACL=y
    CONFIG_EXT4_FS_SECURITY=y
    CONFIG_BTRFS_FS=y
    CONFIG_QUOTA=y
    CONFIG_QFMT_V2=y
    CONFIG_AUTOFS4_FS=y
    CONFIG_MSDOS_FS=y
    CONFIG_VFAT_FS=y
    CONFIG_TMPFS=y
    CONFIG_TMPFS_POSIX_ACL=y
    CONFIG_HUGETLBFS=y
    CONFIG_ECRYPT_FS=y
    CONFIG_JFFS2_FS=y
    CONFIG_JFFS2_SUMMARY=y
    CONFIG_JFFS2_FS_XATTR=y
    CONFIG_JFFS2_COMPRESSION_OPTIONS=y
    CONFIG_JFFS2_LZO=y
    CONFIG_JFFS2_RUBIN=y
    CONFIG_CRAMFS=y
    CONFIG_NFS_FS=y
    CONFIG_NFS_V3_ACL=y
    CONFIG_NFS_V4=y
    CONFIG_NFS_V4_1=y
    CONFIG_NFS_V4_2=y
    CONFIG_ROOT_NFS=y
    CONFIG_NLS_CODEPAGE_437=y
    CONFIG_NLS_ISO8859_1=y
    # CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
    CONFIG_CRYPTO_CRCT10DIF=y
    CONFIG_CRYPTO_USER_API_SKCIPHER=y
    CONFIG_CRYPTO_DEV_ZYNQMP_SHA3=y
    CONFIG_CRYPTO_DEV_XILINX_RSA=y
    CONFIG_CRYPTO_DEV_ZYNQMP_AES=y
    CONFIG_PRINTK_TIME=y
    CONFIG_DEBUG_INFO=y
    CONFIG_DEBUG_FS=y
    CONFIG_MAGIC_SYSRQ=y
    # CONFIG_SCHED_DEBUG is not set
    # CONFIG_FTRACE is not set
    

    To generate this file I run the following command on the 2019_R2 branch:

    1. make adi_zynqmp_defconfig

    2. make menuconfig (and made all the changes - disable all ADI drivers, turned IIO drivers into M and the adrv9001 into M)

    3. make savedefconfig (it creates a defconfig file)

    4. mv defconfig arch/arm64/configs/custom_defconfig

    Then build the kernel with this new config and adrv9001 is compiled as a module... So, you can create a new defconfig file and update (or further extend) the kernel recipe to use that file... If you don't want to clone the git repo to run the above commands (if the uploaded config is not 100% suitable for your platform), you can use yocto devshell or devtool (check petalinux documentation if needed).

    Let me know if this helps... If not, I'll reinstall petalinux for the 2019_R2 release and give it a go.

    - Nuno Sá 

  • Thanks for the config! :)

    We're still on 2019 because this was the last stable release when we started our project and we would have a number of things to convert over in our process if we were to change. It's possible at some point we'll make the jump forward.

    Originally i tried overriding the ADI defconfig file: adi_zynqmp_defconfig with a patch, as this seemed like the easiest way for me to change out the defconfig that was being used. This ended up failing because (i believe) the file pointed to by KBUILD_DEFCONFIG_zynqmp is used BEFORE the kernel patching process. Hence, it kept using the original file as opposed to the changes i had patched in. This was also the case when i tried to patch in an additional file to the ADI kernel and set the KBUILD_DEFCONFIG to point to it (file was not found).

    Since i wanted to keep the kernel recipe locked to your ADI repo, what i decided to do was set the KBUILD_DEFCONFIG_zynqmp var back to one of the base xilinx ones: "xilinx_zynqmp_defconfig", and then layer your config on top as a kernel config fragment.

    This appears to work, and the adrv9002 driver is now building and im able to load at runtime.

    Thanks again!
    ~Seth