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.

AM4378: AM4378: HDMI Issue

Part Number: AM4378

This is related to the below locked thread:

AM4378: HDMI Issue - Processors forum - Processors - TI E2E support forums

We still have not received a response that we could make it work, Its clearly a software/driver related issue and would appreciate more help. 

We are still stuck in -22 error, any ideas would be much appreciated. 

Thank you in advance for your help. 

Regards, 

Berkay

  • Hello,

    Let me internally check with our developer for additional feedback and I will get back to you in 24-48 hours. Please keep in mind that we have not tested the HDMI transmitter that you are using and support will be limited.

    Regards,
    Krunal

  • Hello,

    Based on my discussion with our developer, here are a few pointers:

    1. Please revert the changes mentioned in the following link: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1172821/am4378-hdmi-issue/4429569#4429569 

    2. In general, the community has updated the drm framework and now the dss/encoder driver(omap_dss) is expected to attach to the drm connector entity. The community has already updated our dss driver to be complaint with the DRM framework. However, the tda19988 bridge driver, has not been updated to be compatible with the new framework and it reports an error when dss tries to attach the bridge: https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/drivers/gpu/drm/i2c/tda998x_drv.c?h=ti-linux-5.10.y#n1365

    3. Our guidance would be to work with the tda19988 manufacturer and ask them to update the driver. Here is an example of how we think the code should look like:

    static int simple_bridge_attach(struct drm_bridge *bridge,
                    enum drm_bridge_attach_flags flags)
    {
        struct simple_bridge *sbridge = drm_bridge_to_simple_bridge(bridge);
        int ret;
    
        ret = drm_bridge_attach(bridge->encoder, sbridge->next_bridge, bridge,
                    DRM_BRIDGE_ATTACH_NO_CONNECTOR);
        if (ret < 0)
            return ret;
    
        if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR)
            return 0;
    
        if (!bridge->encoder) {
            DRM_ERROR("Missing encoder\n");
            return -ENODEV;
        }
    
        drm_connector_helper_add(&sbridge->connector,
                     &simple_bridge_con_helper_funcs);
        ret = drm_connector_init_with_ddc(bridge->dev, &sbridge->connector,
                          &simple_bridge_con_funcs,
                          sbridge->info->connector_type,
                          sbridge->next_bridge->ddc);
        if (ret) {
            DRM_ERROR("Failed to initialize connector\n");
            return ret;
        }
    
        drm_connector_attach_encoder(&sbridge->connector, bridge->encoder);
    
        return 0;
    } 

    Regards,
    Krunal