[ADV7393] DRM Encoder Slave or DRM Bridge

Vikas Patil vikasmpatil at gmail.com
Fri Sep 23 10:08:46 UTC 2016


Hi Tomi,

I added the missing check for "OMAP_DISPLAY_TYPE_VENC" in function
omap_connector_detect @ gpu/drm/omapdrm/omap_connector.c and now
modetest  seems to be showing correct status and connections.

But still I could not see kmscube on panel and can see some flicker is
going on display. I think I need to understand about what display
timing I could use as interlace doesn't seems to be supported as I
mentioned above.

Could you please comment on this?

Thanks & Regards,
Vikash


On Thu, Sep 22, 2016 at 6:52 PM, Vikas Patil <vikasmpatil at gmail.com> wrote:
> Hi Tomi,
>
>
> Now with the adv7393 driver in place, I was getting following error.
> After debugging found out that this is due to the “.interlace= true”
> in display timings
> “drivers\gpu\drm\omapdrm\displays\connector-analog-tv.c”.
>
>
> [   14.564872] [drm:drm_helper_probe_single_connector_modes_merge_bits]
> [CONNECTOR:32:Unknown-1]
> [   14.564882] [drm:omap_connector_get_modes] cvbs_out
> [   14.564898] ------>adv7393_check_timings: start
> [   14.569646] [drm:omap_connector_mode_valid] connector: mode
> invalid: 45:"720x480i" 120 27000 720 739 801 858 480 490 493 527 0x48
> 0x2a000015
> [   14.569659] [drm:drm_mode_debug_printmodeline] Modeline
> 45:"720x480i" 120 27000 720 739 801 858 480 490 493 527 0x48
> 0x2a000015
> [   14.569668] [drm:drm_mode_prune_invalid] Not using 720x480i mode: BAD
>
> After setting “.interlace= false”  in display timings
> “\displays\connector-analog-tv.c” mode seems to be valid but still
> nothing on display probably because connector still doesn’t seem to be
> enabled from the below drm log.
>
> [   14.787200] [drm:drm_setup_crtcs]
> [   14.787211] [drm:drm_enable_connectors] connector 32 enabled? no
> [   14.787220] [drm:drm_enable_connectors] connector 36 enabled? Yes
>
> Could you help me to understand if I could use “interlace=false”?
> ADV7393 seems to be supporting non-interlaced mode. From datasheet:
> “The ADV7390/ADV7391/ADV7392/ADV7393 support an SD noninterlaced mode.
> Using this mode, progressive inputs at twice the frame rate of NTSC
> and PAL (240p/59.94 Hz and 288p/50 Hz, respectively) can be input into
> the ADV7390/ ADV7391/ADV7392/ADV7393. The SD noninterlaced mode can be
> enabled using Subaddress 0x88, Bit 1.”
>
> What/Where should I need to look for enabling the above connector and
> attached to the correct encoder/crtc?
>
> Also looking at function dispc_mgr_timings_ok () in
> drivers/gpu/drm/omapdrm/dss/dispc.c, it seems driver of DSS doesn’t
> support interlace out as comment suggests below. Would this be a
> problem for me for driving ADV7393? What does this means?
>
>
> if (dss_mgr_is_lcd(channel)) {
>                 /* TODO: OMAP4+ supports interlace for LCD outputs */
>                 if (timings->interlace)
>                 {
>                         DSSWARN("vikas----->: interlace failed\n");
>                         return false;
>                 }
>
>                 if (!_dispc_lcd_timings_ok(timings->hsw, timings->hfp,
>                                 timings->hbp, timings->vsw, timings->vfp,
>                                timings->vbp))
>                 {
>                         return false;
>                 }
>         }
>
>
> Thanks & Regards,
> Vikash
>
>
>
> On Thu, Sep 15, 2016 at 3:23 PM, Tomi Valkeinen <tomi.valkeinen at ti.com> wrote:
>>
>>
>> On 15/09/16 12:44, Vikas Patil wrote:
>>> On Wed, Sep 14, 2016 at 3:04 PM, Tomi Valkeinen <tomi.valkeinen at ti.com> wrote:
>>>>
>>>>
>>>> On 13/09/16 16:13, Vikas Patil wrote:
>>>>> Thanks Tomi for quick comment.
>>>>>
>>>>> I am thinking to base adv7393 driver on
>>>>> "drivers\gpu\drm\omapdrm\displays\encoder-tc358768.c" as I don't think
>>>>> any similar to adv7393 chip driver available. Could you please comment
>>>>> if this will help to get adv chip running?
>>>>
>>>> I presume you're not using mainline kernel, as that driver is not there.
>>>> I'm not familiar with adv7393, but yes, I think you can use that as an
>>>> example.
>>>>
>>>
>>> Thanks a lot for your comments. I am using latest (i.e. 3.00.00.03 )
>>> Processor SDK Linux Automotive which is based on linux 4.4.14.
>>>
>>> As my display panel is connected as follows. I am little confused over
>>> the values I need to set for following properties in probe function.
>>>
>>> DPI1/VOUT1 -----16bit DRGB---> ADV7393 (Digital to Analog video
>>> encoder) ------> CVBS Out ------> Display Panel
>>>
>>>
>>>      dssdev->ops.dpi = &adv7393_dpi_ops; (atv?)
>>>     dssdev->type = OMAP_DISPLAY_TYPE_DPI;
>>>     dssdev->output_type = OMAP_DISPLAY_TYPE_DPI; (Do I need to use
>>> OMAP_DISPLAY_TYPE_VENC, but DRA74x do not have VENC Encoder I think)
>>>     dssdev->phy.dpi.data_lines = ddata->dpi_ndl;
>>>     dssdev->port_num = 1;
>>>
>>>
>>> As adv7393 takes 16-bit DRGB as input and gives composite as output,
>>> does above configuration looks correct? or Do I need to change to
>>> something else (e.g. dpi,sdi,dvi, hdmi, atv, dsi)?
>>
>> The API is quite messy (full of legacy)...
>>
>> But the "ops" there are for the "downstream" direction, i.e. towards the
>> connector. So here you should have atv ops. You should then have
>> connector-analog-tv as a device after adv7393, and that connector driver
>> will be calling those atv ops.
>>
>> adv7393 itself will be calling dpi ops, offered by the DSS.
>>
>> You should set dssdev->type to DPI (that's the input).
>> dssdev->output_type to OMAP_DISPLAY_TYPE_VENC (output, although "venc"
>> is not quite correct here, but closest match we have). DRA74x doesn't
>> have VENC, but this is what the adv7393 outputs.
>>
>>  Tomi
>>


More information about the dri-devel mailing list