Post Go back to editing

ADIS16448 iio driver on Nvidia Jetson TK1

Hello,

I am attempting to set up an ADIS16448 imu on a Nvidia Jetson TK1 over SPI. I have been following the guide here to configure the Jetson TK1 for spidev.

After following this guide, I have verified that I can communicate out over the SPI interface on the TK1 using the configured spidev interface by tweaking the ioctl commands as shown in the code sample from the tutorial.

I have compiled the kernel modules and made sure that they are loaded:

    username@host:~$ lsmod

    Module                  Size  Used by

    dm_crypt               12216  0

    bnep                   11872  2

    rfcomm                 46483  0

    rtc_as3722              3212  0

    bluetooth             279594  10 bnep,rfcomm

    rfkill                 14634  3 bluetooth

    parport_pc             28658  0

    parport                27466  1 parport_pc

    adis16400              10748  0

    adis_lib                5597  1 adis16400

    nvhost_vi               2908  0

The tutorial linked above has the following snippet from the device tree:

spi@7000d400 {
        compatible = "nvidia,tegra114-spi";
        reg = <0x7000d400 0x200>;
        interrupts = <0x0 0x3b 0x4>;
        nvidia,dma-request-selector = <0x7 0xf>;
        nvidia,memory-clients = <0xe>;
        #address-cells = <0x1>;
        #size-cells = <0x0>;
        status = "okay";
        spi-max-frequency = <0x17d7840>;

        spi0_0 {
            #address-cells = <0x1>;
            #size-cells = <0x0>;
            compatible = "spidev";
            reg = <0x0>;
            spi-max-frequency = <0x17d7840>;
            spi-cpha;
            nvidia,enable-hw-based-cs;
            nvidia,cs-setup-clk-count = <0x1e>;
            nvidia,cs-hold-clk-count = <0x1e>;
            nvidia,rx-clk-tap-delay = <0x1f>;
            nvidia,tx-clk-tap-delay = <0x0>;
        };
    };

where spi0_0 corresponds to the spidev device that presents itself as /dev/spidev0.0

My guess is that I need to join the IMU to this same spi bus, but I am unsure how. I have attempted to follow this similar issue that deals with the same concepts on the beaglebone, but the device tree is so vastly different that I am uncertain whether I am doing it right.

By adding the spi0_1 entry (as seen below), I was able to get your IIO driver to present itself. Note that when I have it configured like this, the spidev device seems to be unable to access the chip select line (as verified by my logic analyzer). I believe that both devices want to use reg = <0x0> for their chip select.

  spi@7000d400 {
                compatible = "nvidia,tegra114-spi";
                reg = <0x7000d400 0x200>;
                interrupts = <0x0 0x3b 0x4>;
                nvidia,dma-request-selector = <0x7 0xf>;
                nvidia,memory-clients = <0xe>;
                #address-cells = <0x1>;
                #size-cells = <0x0>;
                status = "okay";
                spi-max-frequency = <0x17d7840>;

                spi0_0 {
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        compatible = "spidev";
                        reg = <0x1>;
                        spi-max-frequency = <0x17d7840>;
                        spi-cpha;
                        nvidia,enable-hw-based-cs;
                        nvidia,cs-setup-clk-count = <0x1e>;
                        nvidia,cs-hold-clk-count = <0x1e>;
                        nvidia,rx-clk-tap-delay = <0x1f>;
                        nvidia,tx-clk-tap-delay = <0x0>;

                };

                spi0_1{
                    #address-cells = <0x1>;
                    #size-cells = <0x0>;
                    compatible = "adi,adis16400";
                    reg = <0x0>;
                    spi-cpha;
                    spi-cpol;
                    spi-max-frequency = <0x17d7840>;
                    nvidia,enable-hw-based-cs;
                    nvidia,cs-setup-clk-count = <0x10>;
                    nvidia,cs-hold-clk-count = <0x10>;
                    nvidia,rx-clk-tap-delay = <0x28>;
                    nvidia,tx-clk-tap-delay = <0x0>;
                };

        };

My issue is that when I add the spi0_1 piece, the device shows up under the IIO but when I attempt to read values, they all return "0". I am new to the concept of device trees, so I believe that I am close, but I just need to tweak these entries somehow.

Any info on how to get data out of the device from this stage would be helpful =)

Thank you,

Curtis