FPD-Link III Linux driver questions for beginners

I have several beginners questions regarding implementing a FPD Link iii ser/des Linux driver for the Orin NX SoM with JP 5.1.3

I use the following setup:

  • Orin NX devkit
  • ds90ub960-q1 de-serializer
  • ds90ub953-q1 serializer that acts as a pattern generator

My questions:

  1. Camera programming path:
    I read here:
    Sensor Software Driver Programming — Jetson Linux Developer Guide documentation
    and didn’t understand which path is better for me.
    I’m looking for the simpler/easier path for beginners

  2. I wish to verify that although the correct way of writing configurable kernel drivers is using device tree, for quicker results and debug I can skip it and use “hard coded” configuration in my initial driver just to see quicker results and add the device tree support later

  3. Conceptual question:
    Putting the I2C control aside, I don’t quite understand what the driver should do and why its so complicated.
    If I offload the ser/des I2C control from the kernel module to some user space scripts, then I just need to write a kernel module that will read the incoming sensor’s RAW data from MIPI and transfer it to an existing Linux drivers (V4L).
    The system already has a functioning MIPI driver so why I can’t use this driver in order to transfer the RAW data and have to write a driver of my own. It feels like all the parts are already exists and one should only create a pipe between them.

  4. I saw there is an fpd link driver for kernel 6.10. Will it be simpler to back port it into 5.10?

  5. From your experience, what will be the quickest, easiest way for me to build the most basic kernel module that just receives the serializer pattern and pipes it into V4L without using any additional “advanced” ser/des features. My goal is to start from “hello serializer pattern” module to verify that I’m getting the right pattern on the screen before advancing to more complicated features.

Thanks a lot!

The kernel driver need to report the size/format to NVCSI/VI to receive the correct data.

Maybe you can try implement a dummy kernel driver but report the correct format/size and others work doing in user space.


which path to choose:

  • Camera Core Library Interface
  • Direct V4L2 Interface

I mean sensor driver. doesn’t matter with the Camera Core Library Interface or v4l2 interface.


I need some help with port index. I read here:

and didn’t understand what are VI, CSI, NVCSI (hardware? software?) how they relate to each other and how they relate to my system.

for example my system is:

  1. Debug setup 1:
    FPD Link III DES (also pattern generator) → Orin NX SoC (via MIPI)

  2. Debug setup 2:
    FPD Link III SER (also pattern generator) → FPD Link III DES → Orin NX SoC (via MIPI)

  3. Operational setup:
    camera sensor → FPD Link III SER → FPD Link III DES → Orin NX SoC (via MIPI)

So what are vi, csi,nvcsi in each setup and how I know how to configure them in my DT.

Thanks again

The port-index should the same. You just need to care about the connection for the DES → Orin NX SoC side.


Hi @ShaneCCC ,

I apologize, I don’t understand what you are saying (I’m a beginner in this subject)

  1. Can you please direct me to a learning source or maybe briefly elaborate on the VI, CSI, NVSCI, ISP terms.
  • What are they?
  • Are they software modules or hardware?
  • How they relate to my setup (sensor , ser/des , jetson)

I’m asking these questions since these terms appear in different device trees and sensor developer guide without explanations.

  1. What do you mean by “The port-index should the same”, should be the same like what? what is the “base reference” that is the same? and what does the port-index represents?
  • the connection between the sensor and ser?
  • the connection between the ser and the des?
  • the connection between the des and the SoC?
  • the connection between internal software modules?
  1. You said " You just need to care about the connection for the DES → Orin NX SoC side". What do you mean by that?

Again, I apologize for my long questions but I couldn’t find answerers/explanations in the sensor dev guide section.

Thank you for your patience.

The port-index only relative with the NVCSI, so the you only need to know the SERDES connect to which CSI port to define the port-index.

From below the port-index(stream) of VI are relative with the CSI.
For example if SERDES connect to CSI0 then the port-index of CSI is 0 also the VI is 0.

Thank you for your reply.
So currently I’m only using a deserializer with pattern generation to test my new device driver. It means that basically I can use the “default” values for existing vi, nvcsi ports bindings as they in the imx185 dtsi? (just modifying the number of lanes…)

For the Orin NX should reference to IMX219/IMX477 for the device tree configuration.


For “my_new_sensor” sensor, should I just copy the file:




and modify its values?

Have a check the programing guide.


I read the guide but it has some missing points and guidance regarding specific points.
May I write the missing points here to you and maybe you will be able to help me?