This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

PROCESSOR-SDK-AM62X: LVDS and RGB

Part Number: PROCESSOR-SDK-AM62X

Hi,

  1. How do i change the pixel clock for LVDS and RGB on am62x EVK?
  2. I would like to change the RGB888 to RGB565, do i need to do any kernel changes?
  3. I would like to change LVDS 8-lane to 4-lane, do i need to do any kernel changes?

Regards,
Cyra

  • Hello,

    1. For RGB and LVDS, you need to first define a compatible field for your LVDS panel. Here is an example: https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/arch/arm64/boot/dts/ti/k3-am625-sk-oldi-panel.dts?h=ti-linux-5.10.y#n21. Next, based on the compatible field, you need to modify the panel-simple file:https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/drivers/gpu/drm/panel/panel-simple.c?h=ti-linux-5.10.y#n2821. In the panel simple file, you define all your timing parameters including pixel clock.

    2. For input buffer, you need to modify your userspace application. For the output buffer, need to change the bus_format in the panel-simple.c file.

    3. In the DTS file, do not add the following:

    				port@1 {
    					dual-lvds-even-pixels;
    					lcd_in1: endpoint {
    						remote-endpoint = <&oldi_out1>;
    					};

    	/* VP1: LVDS Output (OLDI TX 1) */
    	port@2 {
    		reg = <2>;
    		oldi_out1: endpoint {
    			remote-endpoint = <&lcd_in1>;
    		};
    	};
    Regards,

    Krunal

  • Hi,

    I need to do the following for custom board based on am62x.
    We'll use the same panel for both RGB565 and RGB888.
    RGB565 is from SoC directly. RGB888 is converted from 4-lane LVDS.

    What are the configurations necessary?

    When you mentioned "do not add" you mean to remove those? So will become like this?

    {
    	fragment@101 {
    		target-path = "/";
    
    		__overlay__ {
    			display {
    				compatible = "microtips,13-101hieb0hf0-s";
    			};
    		};
    	};
    };
    
  • It will look something like the following:

    / {
    	fragment@101 {
    		target-path = "/";
    
    		__overlay__ {
    			display {
    				compatible = "microtips,13-101hieb0hf0-s";
    
    				/*
    				* Note that the OLDI TX 0 transmits the odd set of pixels
    				* while the OLDI TX 1 transmits the even set. This is a
    				* fixed configuration in the IP integration and is not
    				* changeable. The properties, "dual-lvds-odd-pixels" and
    				* "dual-lvds-even-pixels" have been used to merely
    				* identify if a Dual Link configuration is required.
    				* Swapping them will not make any difference.
    				*/
    				port@0 {
    					dual-lvds-odd-pixels;
    					lcd_in0: endpoint {
    						remote-endpoint = <&oldi_out0>;
    					};
    				};
    			};
    		};
    	};
    };
    
    &main_pmx0 {
    	main_oldi0_pins_default: main-oldi0-pins-default {
    		pinctrl-single,pins = <
    			AM62X_IOPAD(0x0260, PIN_OUTPUT, 0) /* (AA5) OLDI0_A0N */
    			AM62X_IOPAD(0x025c, PIN_OUTPUT, 0) /* (Y6) OLDI0_A0P */
    			AM62X_IOPAD(0x0268, PIN_OUTPUT, 0) /* (AD3) OLDI0_A1N */
    			AM62X_IOPAD(0x0264, PIN_OUTPUT, 0) /* (AB4) OLDI0_A1P */
    			AM62X_IOPAD(0x0270, PIN_OUTPUT, 0) /* (Y8) OLDI0_A2N */
    			AM62X_IOPAD(0x026c, PIN_OUTPUT, 0) /* (AA8) OLDI0_A2P */
    			AM62X_IOPAD(0x0278, PIN_OUTPUT, 0) /* (AB6) OLDI0_A3N */
    			AM62X_IOPAD(0x0274, PIN_OUTPUT, 0) /* (AA7) OLDI0_A3P */
    			AM62X_IOPAD(0x0280, PIN_OUTPUT, 0) /* (AC6) OLDI0_A4N */
    			AM62X_IOPAD(0x027c, PIN_OUTPUT, 0) /* (AC5) OLDI0_A4P */
    			AM62X_IOPAD(0x0288, PIN_OUTPUT, 0) /* (AE5) OLDI0_A5N */
    			AM62X_IOPAD(0x0284, PIN_OUTPUT, 0) /* (AD6) OLDI0_A5P */
    			AM62X_IOPAD(0x0290, PIN_OUTPUT, 0) /* (AE6) OLDI0_A6N */
    			AM62X_IOPAD(0x028c, PIN_OUTPUT, 0) /* (AD7) OLDI0_A6P */
    			AM62X_IOPAD(0x0298, PIN_OUTPUT, 0) /* (AD8) OLDI0_A7N */
    			AM62X_IOPAD(0x0294, PIN_OUTPUT, 0) /* (AE7) OLDI0_A7P */
    			AM62X_IOPAD(0x02a0, PIN_OUTPUT, 0) /* (AD4) OLDI0_CLK0N */
    			AM62X_IOPAD(0x029c, PIN_OUTPUT, 0) /* (AE3) OLDI0_CLK0P */
    			AM62X_IOPAD(0x02a8, PIN_OUTPUT, 0) /* (AE4) OLDI0_CLK1N */
    			AM62X_IOPAD(0x02a4, PIN_OUTPUT, 0) /* (AD5) OLDI0_CLK1P */
    		>;
    	};
    };
    
    &dss {
    	pinctrl-names = "default";
    	pinctrl-0 = <&main_oldi0_pins_default &main_dss0_pins_default>;
    };
    
    &dss_ports {
    	#address-cells = <1>;
    	#size-cells = <0>;
    
    	/* VP1: LVDS Output (OLDI TX 0) */
    	port@0 {
    		reg = <0>;
    		oldi_out0: endpoint {
    			remote-endpoint = <&lcd_in0>;
    		};
    	};
    
    };
    
    

    The above config is for a single link LVDS.

    Regards,
    Krunal