[PATCH v6 05/11] drm: add Atmel HLCDC Display Controller support
Boris BREZILLON
boris.brezillon at free-electrons.com
Mon Sep 29 10:20:57 PDT 2014
On Mon, 29 Sep 2014 16:44:18 +0200
Boris Brezillon <boris.brezillon at free-electrons.com> wrote:
> From: Boris BREZILLON <boris.brezillon at free-electrons.com>
>
> The Atmel HLCDC (HLCD Controller) IP available on some Atmel SoCs (i.e.
> at91sam9n12, at91sam9x5 family or sama5d3 family) provides a display
> controller device.
>
> This display controller supports at least one primary plane and might
> provide several overlays and an hardware cursor depending on the IP
> version.
>
> At the moment, this driver only implements an RGB connector to interface
> with LCD panels, but support for other kind of external devices might be
> added later.
>
> Signed-off-by: Boris Brezillon <boris.brezillon at free-electrons.com>
> Reviewed-by: Rob Clark <robdclark at gmail.com>
> Tested-by: Anthony Harivel <anthony.harivel at emtrion.de>
> Tested-by: Ludovic Desroches <ludovic.desroches at atmel.com>
> ---
> drivers/gpu/drm/Kconfig | 2 +
> drivers/gpu/drm/Makefile | 1 +
> drivers/gpu/drm/atmel-hlcdc/Kconfig | 13 +
> drivers/gpu/drm/atmel-hlcdc/Makefile | 7 +
> drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c | 392 +++++++++++
> drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 527 ++++++++++++++
> drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h | 216 ++++++
> drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_layer.c | 659 ++++++++++++++++++
> drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_layer.h | 403 +++++++++++
> drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c | 443 ++++++++++++
> drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c | 833 +++++++++++++++++++++++
> 11 files changed, 3496 insertions(+)
> create mode 100644 drivers/gpu/drm/atmel-hlcdc/Kconfig
> create mode 100644 drivers/gpu/drm/atmel-hlcdc/Makefile
> create mode 100644 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> create mode 100644 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> create mode 100644 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
> create mode 100644 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_layer.c
> create mode 100644 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_layer.h
> create mode 100644 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c
> create mode 100644 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c
>
> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
> index b066bb3..2d97f7e 100644
> --- a/drivers/gpu/drm/Kconfig
> +++ b/drivers/gpu/drm/Kconfig
> @@ -185,6 +185,8 @@ source "drivers/gpu/drm/cirrus/Kconfig"
>
[...]
> +
> +int atmel_hlcdc_crtc_mode_valid(struct drm_crtc *c,
> + struct drm_display_mode *mode)
> +{
> + struct videomode vm;
> +
> + vm.vfront_porch = mode->vsync_start - mode->vdisplay;
> + vm.vback_porch = mode->vtotal - mode->vsync_end;
> + vm.vsync_len = mode->vsync_end - mode->vsync_start;
> + vm.hfront_porch = mode->hsync_start - mode->hdisplay;
> + vm.hback_porch = mode->htotal - mode->hsync_end;
> + vm.hsync_len = mode->hsync_end - mode->hsync_start;
> +
> + if (vm.hsync_len > 0x40 || vm.hsync_len < 1)
> + return MODE_HSYNC;
> +
> + if (vm.vsync_len > 0x40 || vm.vsync_len < 1)
> + return MODE_VSYNC;
> +
> + if (vm.vfront_porch > 0x40 || vm.hfront_porch < 1 ||
> + vm.vback_porch > 0x40 || vm.vback_porch < 0 ||
> + mode->hdisplay > 2048 || mode->hdisplay < 1)
> + return MODE_H_ILLEGAL;
> +
> + if (vm.hfront_porch > 0x200 || vm.hfront_porch < 1 ||
> + vm.hback_porch > 0x200 || vm.hback_porch < 1 ||
> + mode->hdisplay > 2048 || mode->hdisplay < 1)
> + return MODE_V_ILLEGAL;
> +
> + return MODE_OK;
> +}
> +
I forgot to squash the commit removing this function which a vestige
from one of my attempt to provide a common mode_valid function that can
be called from the connector mode_valid function.
--
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
More information about the linux-arm-kernel
mailing list