From: Ian Campbell <ijc+uboot@hellion.org.uk>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2] sunxi: video: Force h/vsync active high when using ext. vga dac on some boards
Date: Wed, 28 Jan 2015 12:05:56 +0000 [thread overview]
Message-ID: <1422446756.14124.9.camel@hellion.org.uk> (raw)
In-Reply-To: <1422442041-21957-1-git-send-email-hdegoede@redhat.com>
On Wed, 2015-01-28 at 11:47 +0100, Hans de Goede wrote:
> On both my A13-OLinuxIno and my A13-OLinuxIno-Micro, the vga output gives an
> unstable image when active low v or hsync is used.
>
> The problem seems to be specific to the OLinuxIno A13 (normal & micro)
> boards. I've just looked up the schematics and they use an opendrain driver
> for the vga sync lines, and with sync pulses it is the logical high->low
> edge of the pulse which counts for the timing, which with an active low
> sync is being driven by the pull-up, and that simply seems to not drive
> it hard enough to get a stable image.
>
> So force v and hsync active high on these boards. independent of what the
> modeline says. This fixes the unstable image.
>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Ian Campbell <ijc@hellion.org.uk>
Although I might have been tempted to adjust mode->sync in the caller or
the place which populates it in the first place, just due to a general
dislike of boolean params to functions (which are opaque at the caller)
and to keep mode in sync with reality (if that matters).
Ian.
> ---
> board/sunxi/Kconfig | 10 ++++++++++
> configs/A13-OLinuXinoM_defconfig | 1 +
> configs/A13-OLinuXino_defconfig | 1 +
> drivers/video/sunxi_display.c | 12 +++++++++---
> 4 files changed, 21 insertions(+), 3 deletions(-)
>
> diff --git a/board/sunxi/Kconfig b/board/sunxi/Kconfig
> index 8b94311..ab884dc 100644
> --- a/board/sunxi/Kconfig
> +++ b/board/sunxi/Kconfig
> @@ -190,6 +190,16 @@ config VIDEO_VGA_VIA_LCD
> LCD interface driving a VGA connector, such as found on the
> Olimex A13 boards.
>
> +config VIDEO_VGA_VIA_LCD_FORCE_SYNC_ACTIVE_HIGH
> + boolean "Force sync active high for VGA via LCD controller support"
> + depends on VIDEO_VGA_VIA_LCD
> + default n
> + ---help---
> + Say Y here if you've a board which uses opendrain drivers for the vga
> + hsync and vsync signals. Opendrain drivers cannot generate steep enough
> + positive edges for a stable video output, so on boards with opendrain
> + drivers the sync signals must always be active high.
> +
> config VIDEO_VGA_EXTERNAL_DAC_EN
> string "LCD panel power enable pin"
> depends on VIDEO_VGA_VIA_LCD
> diff --git a/configs/A13-OLinuXinoM_defconfig b/configs/A13-OLinuXinoM_defconfig
> index 1c3fc3a..a04f2b3 100644
> --- a/configs/A13-OLinuXinoM_defconfig
> +++ b/configs/A13-OLinuXinoM_defconfig
> @@ -4,6 +4,7 @@ CONFIG_FDTFILE="sun5i-a13-olinuxino-micro.dtb"
> CONFIG_USB1_VBUS_PIN="PG11"
> CONFIG_VIDEO_HDMI=n
> CONFIG_VIDEO_VGA_VIA_LCD=y
> +CONFIG_VIDEO_VGA_VIA_LCD_FORCE_SYNC_ACTIVE_HIGH=y
> # For use with the Olimex 7" LCD module, adjust timings for other displays
> # Set video-mode=sunxi:800x600-24 at 60,monitor=lcd in the env. to enable
> CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:16,ri:209,up:22,lo:22,hs:30,vs:1,sync:3,vmode:0"
> diff --git a/configs/A13-OLinuXino_defconfig b/configs/A13-OLinuXino_defconfig
> index 0daaaae..806d5b7 100644
> --- a/configs/A13-OLinuXino_defconfig
> +++ b/configs/A13-OLinuXino_defconfig
> @@ -4,6 +4,7 @@ CONFIG_FDTFILE="sun5i-a13-olinuxino.dtb"
> CONFIG_USB1_VBUS_PIN="PG11"
> CONFIG_VIDEO_HDMI=n
> CONFIG_VIDEO_VGA_VIA_LCD=y
> +CONFIG_VIDEO_VGA_VIA_LCD_FORCE_SYNC_ACTIVE_HIGH=y
> # For use with the Olimex 7" LCD module, adjust timings for other displays
> # Set video-mode=sunxi:800x600-24 at 60,monitor=lcd in the env. to enable
> CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:16,ri:209,up:22,lo:22,hs:30,vs:1,sync:3,vmode:0"
> diff --git a/drivers/video/sunxi_display.c b/drivers/video/sunxi_display.c
> index af728b5..f5f24fc 100644
> --- a/drivers/video/sunxi_display.c
> +++ b/drivers/video/sunxi_display.c
> @@ -645,7 +645,8 @@ static int sunxi_lcdc_get_clk_delay(const struct ctfb_res_modes *mode)
> return (delay > 30) ? 30 : delay;
> }
>
> -static void sunxi_lcdc_tcon0_mode_set(const struct ctfb_res_modes *mode)
> +static void sunxi_lcdc_tcon0_mode_set(const struct ctfb_res_modes *mode,
> + bool for_ext_vga_dac)
> {
> struct sunxi_lcdc_reg * const lcdc =
> (struct sunxi_lcdc_reg *)SUNXI_LCD0_BASE;
> @@ -719,6 +720,11 @@ static void sunxi_lcdc_tcon0_mode_set(const struct ctfb_res_modes *mode)
> val |= SUNXI_LCDC_TCON_HSYNC_MASK;
> if (!(mode->sync & FB_SYNC_VERT_HIGH_ACT))
> val |= SUNXI_LCDC_TCON_VSYNC_MASK;
> +
> +#ifdef CONFIG_VIDEO_VGA_VIA_LCD_FORCE_SYNC_ACTIVE_HIGH
> + if (for_ext_vga_dac)
> + val = 0;
> +#endif
> writel(val, &lcdc->tcon0_io_polarity);
>
> writel(0, &lcdc->tcon0_io_tristate);
> @@ -1015,7 +1021,7 @@ static void sunxi_mode_set(const struct ctfb_res_modes *mode,
> hitachi_tx18d42vm_init();
> }
> sunxi_composer_mode_set(mode, address);
> - sunxi_lcdc_tcon0_mode_set(mode);
> + sunxi_lcdc_tcon0_mode_set(mode, false);
> sunxi_composer_enable();
> sunxi_lcdc_enable();
> #ifdef CONFIG_VIDEO_LCD_SSD2828
> @@ -1033,7 +1039,7 @@ static void sunxi_mode_set(const struct ctfb_res_modes *mode,
> sunxi_vga_enable();
> #elif defined CONFIG_VIDEO_VGA_VIA_LCD
> sunxi_composer_mode_set(mode, address);
> - sunxi_lcdc_tcon0_mode_set(mode);
> + sunxi_lcdc_tcon0_mode_set(mode, true);
> sunxi_composer_enable();
> sunxi_lcdc_enable();
> sunxi_vga_external_dac_enable();
next prev parent reply other threads:[~2015-01-28 12:05 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-28 10:47 [U-Boot] [PATCH v2] sunxi: video: Force h/vsync active high when using ext. vga dac on some boards Hans de Goede
2015-01-28 12:05 ` Ian Campbell [this message]
2015-01-28 14:42 ` Hans de Goede
2015-01-28 15:33 ` Ian Campbell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1422446756.14124.9.camel@hellion.org.uk \
--to=ijc+uboot@hellion.org.uk \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.