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.

DSI video mode blank pixel data

Hello,

I'm currently trying to get a panel working in video mode. The used driver is panel-taal.c which I've used  to get a panel working in command mode, for video mode i've created a secondairy virtual channel called pixel channel for the data. As far as i can see the initialization looks fine accept for a "failed to complete previous l4 transfer" error.

When setting the display to set all pixels on if data is received the panel lights on this leads me to believe that the timing settings are in order.

The actual problem is that i can see the pixeldata packets on the scope, of this packet the header is what it should be however the pixel data contains only black pixels. Could this be a problem with source selection?

I'm using the software found here http://omapedia.org/wiki/Panda5AJ.1.5_Release_Notes
Linux kernel 3.4.34 and the prebuild android image.

Any help would be appreciated.

Regards,

Anthony Fibi

  • Hi Anthony,

    Can you check the registers mentioned in the post below are set correctly:

    http://e2e.ti.com/support/dsp/omap_applications_processors/f/447/t/181870.aspx

    I think your problem is due to the same reason.

    Regards,

    Boyko

     

  • Hello Boyko,

    The value of my VC while the black pixels come by is DSI_VC_CTRL(0)       20808fb1

    The sequence followed is

    int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel)
    {
        struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
        int bpp = dsi_get_pixel_size(dssdev->panel.dsi_pix_fmt);
        u8 data_type;
        u16 word_count;
        int r;

        if (dssdev->panel.dsi_mode == OMAP_DSS_DSI_VIDEO_MODE) {
            data_type = MIPI_DSI_PACKED_PIXEL_STREAM_24;

            dsi_if_enable(dsidev, false);
            dsi_vc_enable(dsidev, channel, false);

            /* MODE, 1 = video mode */
            REG_FLD_MOD(dsidev, DSI_VC_CTRL(channel), 1, 4, 4);

            word_count = DIV_ROUND_UP(dssdev->panel.timings.x_res * bpp, 8);
            //wordcount is amount of bytes for one horizontal row

            dsi_vc_write_long_header(dsidev, channel, data_type, word_count, 0);

            dsi_vc_enable(dsidev, channel, true);
            dsi_if_enable(dsidev, true);
        }
        msleep(2);

        r = dss_mgr_enable(dssdev->manager);
        if (r) {
            return r;
        }
        return 0;
    }

     dsi_vc_write_long_header writes to register DSIREG(0x0108 + (n * 0x20)) which according to the datasheet should be the correct adres. When measuring the DSI on the scope the header is visable and the vlaue is correct.

  • Solved the issue by changing the values M4REG, LCD and PCD.

    Used to be 12, 1, 1 is now 3, 1, 4