[PATCH] video: meson: add HDMI fail-save FullHD option
Neil Armstrong
narmstrong at baylibre.com
Fri Jan 15 09:26:59 CET 2021
Hi,
On 15/01/2021 09:11, Artem Lapkin wrote:
> add VIDEO_MESON_HDMI_FAIL_SAVE_FULL_HD configuration option
>
> ABOUT:
>
> Force setup FullHD display mode, if proper timing cant readed.
> from display! Its happens for some 4K display, which send
> unsupported high timings, but same time can works as FullHD!
> Also its will be useful for suspended or disconnected displays.
Thanks ! It was in my TODO list....
>
> NOTE: this option disabled by default
>
> Signed-off-by: Artem Lapkin <art at khadas.com>
> ---
> drivers/video/meson/Kconfig | 10 ++++++++++
> drivers/video/meson/meson_vpu.c | 19 +++++++++++++++++--
> 2 files changed, 27 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/video/meson/Kconfig b/drivers/video/meson/Kconfig
> index 0c9ddeb8..55d67700 100644
> --- a/drivers/video/meson/Kconfig
> +++ b/drivers/video/meson/Kconfig
> @@ -10,3 +10,13 @@ config VIDEO_MESON
> select DISPLAY
> help
> Enable Amlogic Meson Video Processing Unit video support.
> +
> +config VIDEO_MESON_HDMI_FAIL_SAVE_FULL_HD
> + bool "Enable HDMI fail-save FullHD mode"
> + depends on VIDEO_MESON
> + default n
> + help
> + Force setup FullHD display mode, if proper timing cant readed.
> + from display! Its happens for some 4K display, which send
> + unsupported high timings, but same time can works as FullHD!
> + Also its will be useful for suspended or disconnected displays
I don't think it's necessary to have an option for that.
> diff --git a/drivers/video/meson/meson_vpu.c b/drivers/video/meson/meson_vpu.c
> index 4868839f..af677a45 100644
> --- a/drivers/video/meson/meson_vpu.c
> +++ b/drivers/video/meson/meson_vpu.c
> @@ -52,8 +52,23 @@ static int meson_vpu_setup_mode(struct udevice *dev, struct udevice *disp)
> if (disp) {
> ret = display_read_timing(disp, &timing);
> if (ret) {
> - debug("%s: Failed to read timings\n", __func__);
> - goto cvbs;
> + if (IS_ENABLED(CONFIG_VIDEO_MESON_HDMI_FAIL_SAVE_FULL_HD)) {
> + printf("DISPLAY: setup failsave FullHD mode\n");
> + timing.pixelclock.typ = 148500000;
> + timing.hactive.typ = 1920;
> + timing.hfront_porch.typ = 88;
> + timing.hback_porch.typ = 148;
> + timing.hsync_len.typ = 44;
> + timing.vactive.typ = 1080;
> + timing.vfront_porch.typ = 4;
> + timing.vback_porch.typ = 36;
> + timing.vsync_len.typ = 5;
> + timing.flags = 10;
> + timing.hdmi_monitor = true;
> + } else {
> + debug("%s: Failed to read timings\n", __func__);
> + goto cvbs;
So, 1080p is not a good idea for DVI screens, only for HDMI displays.
And I don't think it's the right place, since when I will add support for DSI output,
it won't work.
So it should go in the meson_dw_hdmi, but you'll need to add a read_timing() callback instead
of the read_edid, that would do the same as display_read_timing() but return a fallback mode if
edid_get_timing_validate() fails.
You could get the info about HDMI or DVI in timing->hdmi_monitor, then you should return 1024x768 for DVI and
1080p for HDMI displays, but you'll need to fix the edid_get_timing_validate to check for HDMI stuff before
validating the timings.
Neil
> + }
> }
>
> uc_priv->xsize = timing.hactive.typ;
>
More information about the U-Boot
mailing list