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.

SN65DSI86: How does linux read/write HDCP?

Part Number: SN65DSI86


Hi Ti,

We will use the OLED screen and need to control the backlight brightness through the aux channel.
How do we read and write HDCP data when using linux? Can you provide demo code?

Looking forward to your reply!

  • Hi Zach,

    If User sn65dsi86 does not support HDCP, how does User sn65dsi86 R/W the display parameters (such as resolution, Hsync, and Vsync)?
    We will use sn65dsi86 to light up the OLED screen. If sn65dsi86 does not support HDCP, how do we need to control the backlight through aux channel?

    Looking forward to your reply,Thanks!

    Evan

  • Hello, Chen,

    The Control and status registers need to be configured to support a standard DP display panel. 

    The datasheet lists what the user can R/W to configure the device.

    Here is a spreadsheet that can assist you in configuring the device: 

    https://e2e.ti.com/support/interface-group/interface/f/interface-forum/945404/faq-sn65dsi86-how-do-i-programming-the-sn65dsi86-registers

    For your second question, here is a previous thread, https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1163750/sn65dsi86-aux-backlight-control

    Thanks,

    Zach

  • Hi Zach,

    According to the data manual, the backlight control can be read and written through the 0xA0h-0xA5h register, but the manual describes the PWM control mode.
    If we use OLED screen, the hardware connection does not have PWM signal, but is 0xA0h-0xA5h the same configuration as LCD?

  • Hello, Chen,

    Apologies for the late reply.

    Does the monitor support the use of DPCD Addresses 00700h through 007FFh for brightness control? Can they read the DPCD_DISPLAY_CONTROL_CAPABLE bit in the eDP_CONFIGURATION_CAP register (DPCD Address 0000Dh, bit 3) to verify this capability?

    Thanks,

    Zach

  • Hi Zach,

    According to the datasheet for this Samsung OLED panel, I think the brightness can only be controlled by 0x0320 or 0x0354.
    1. The following is the description of brightness control:

       1.1 Brightness Control for Intel

    Addr. R/W Values Description
    0x0354
    0x0355
    R/W { 0xXX, 0xXX }; /* 0x90, 0x01 : 400nit */
    /* 0x96, 0x00 : 150nit */
    /* 0x04, 0x00 : 4nit */
    DPCD_INTEL_EDP_BRIGHTNESS_NITS
    {LSB, MSB} of nits value


       1.2 Brightness Control for AMD

    Addr. R/W Values Description
    0x0320
    0x0321
    0x0322
    0x0323
    W { 0xXX, 0xXX, 0xXX, 0xXX };
    /* 0x80, 0x1A, 0x06, 0x00 : 400nit */
    /* 0xF0, 0x49, 0x02, 0x00 : 150nit */
    /* 0xA0, 0x0F, 0x00, 0x00 : 4nit */
    32bit requested brightness in millinits
    – Byte0(LSB) ~ Byte3(MSB)

    2. The following is the backlight code of inter in linux:
    #define INTEL_EDP_BRIGHTNESS_NITS_LSB 0x354
    static void intel_dp_aux_hdr_set_aux_backlight(const struct drm_connector_state *conn_state, u32 level)
    {

    buf[0] = level & 0xFF;
    buf[1] = (level & 0xFF00) >> 8;
    drm_dp_dpcd_write(&intel_dp-> aux, INTEL_EDP_BRIGHTNESS_NITS_LSB, buf, sizeof(buf)) ! = sizeof(buf))
    }

    3.So I need to read and write the 0x0320 register address of the Samsung OLED panel for brightness control via aux.
    How do I configure the sn65dsi86 value to read and write the address 0x0320 of the OLED panel?

    Looking forward to your reply! Thinks!

  • Hello, Chen,

    Let's keep this discussion to one thread.

    Looks like David is helping you with similar questions here:

    https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1201716/sn65dsi86-how-to-modify-the-specified-register-of-oled-panel-through-i2c-over-aux

    Thanks,

    Zach

  • Hi Zach,

    Thanks for your reply.
    1. If I want to overwrite a specified register, is there a tool that can generate the register address?
    2.DSI Tuner 2.0.exe does not seem to generate code for the specified register, such as writing values to 0x0320 or 00722h.
    3. What tool is used to generate the following code?

    <configure i2c="1" spi="1" gpio="0" tpower="1" pullups="0" />
    <i2c_bitrate khz="100" />
    ======Clear Status Registers for AUX Write Request======
    <i2c_write addr="0x2D" count="1" radix="16">F4 FF</i2c_write> />
    ======Write DPCD Register 0x0010A in Sink to Enable ASSR======
    ===========Data to Write is 0x01. ======
    <i2c_write addr="0x2D" count="1" radix="16">64 01</i2c_write> />
    ===========DPCD Register is 0x0010A. ======
    <i2c_write addr="0x2D" count="1" radix="16">74 00</i2c_write> />
    <i2c_write addr="0x2D" count="1" radix="16">75 01</i2c_write> />
    <i2c_write addr="0x2D" count="1" radix="16">76 0A</i2c_write> />
    ===========Number of Bytes to Write is 1 ======
    <i2c_write addr="0x2D" count="1" radix="16">77 01</i2c_write> />
    ===========Send AUX Write Request ======
    <i2c_write addr="0x2D" count="1" radix="16">78 81</i2c_write> <sleep ms="10" />
    ======Read Status of AUX Request======
    ======Make sure SEND_INT is set and no errors======
    <i2c_write addr="0x2D" count="0" radix="16">F4</i2c_write> />

    <i2c_read addr="0x2D" count="1" radix="16">00</i2c_read> />

  • Hello, Chen,

    You can use a SPI/I2C controller to write to specific registers. 

    There is no tool that generated that code but it does appear to be written for the Aardvark SPI/I2C controller.

    The following is just meant as an example of the structure of the code: 

    <i2c_write addr="0x2D" count="1" radix="16">74 00</i2c_write> />

    This is a one time i2c write to address 2D. You are writing "00" to register offset 0x74h.

    To overwrite this you can change the code to any desired value based on the datasheet and desired performance.

    Thanks,

    zach