# Copyright 2019,2023-2024 NXP
# Copyright (c) 2022, Basalte bv
# SPDX-License-Identifier: Apache-2.0


menuconfig DISPLAY_MCUX_ELCDIF
	bool "MCUX eLCDIF driver"
	default y
	depends on DT_HAS_NXP_IMX_ELCDIF_ENABLED
	select PINCTRL
	help
	  Enable support for mcux eLCDIF driver.

if DISPLAY_MCUX_ELCDIF

config MCUX_ELCDIF_FB_NUM
	int "Framebuffers to allocate in driver"
	default 2
	range 0 2
	help
	  Number of framebuffers to allocate in ELCDIF driver. Driver allocated
	  framebuffers are required to support partial display updates.
	  The driver has been validated to support 0 through 2 framebuffers.
	  Note that hardware will likely perform best if zero driver
	  framebuffers are allocated by the driver, and the application
	  implements double framebuffering by always calling display_write with
	  a buffer equal in size to the connected panel.

	  NOTE: when no framebuffers are allocated, the ELCDIF will be
	  set to display an empty buffer during initialization. This means
	  the display will show what is effectively a dump of
	  system RAM until a new framebuffer is written. If the security
	  implications of this concern you, leave at least one driver
	  framebuffer enabled.

config MCUX_ELCDIF_FB_SIZE
	int "Framebuffer size required by the eLCDIF driver"
	default 3686400
	help
	  eLCDIF driver allocates framebuffers to support partial display updates.
	  The framebuffer size is computed as : panel_width * panel_height * bpp.
	  The default value is set to afford for a default resolution of 1280x720 and
	  4-bytes pixel format, e.g. ARGB8888. Applications should change this value
	  according to the actual used resolution and format to optimize the heap size.

config MCUX_ELCDIF_PXP
	bool "Use PXP for display rotation"
	depends on MCUX_PXP
	depends on (MCUX_ELCDIF_FB_NUM > 0)
	help
	  Use the PXP for display rotation. This requires the LCDIF node
	  have a "nxp,pxp" devicetree property pointing to the PXP device node.
	  The ELCDIF will only utilize the PXP to rotate frames if
	  display_write is called with a framebuffer equal in size to the
	  display.

if MCUX_ELCDIF_PXP

choice MCUX_ELCDIF_PXP_ROTATE_DIRECTION
	default MCUX_ELCDIF_PXP_ROTATE_0
	prompt "Rotation angle of PXP"
	help
	  Set rotation angle of PXP. The ELCDIF cannot detect the correct
	  rotation angle based on the call to display_write, so the user should
	  configure it here. In order for PXP rotation to work, calls to
	  display_write MUST supply a framebuffer equal in size to screen width
	  and height (without rotation applied).  Note that the width and
	  height settings of the screen in devicetree should not be modified
	  from their values in the default screen orientation when using this
	  functionality.

config MCUX_ELCDIF_PXP_ROTATE_0
	bool "Rotate display by 0 degrees"
	help
	  Rotate display by 0 degrees. Primarily useful for testing,
	  production applications should simply disable the PXP.

config MCUX_ELCDIF_PXP_ROTATE_90
	bool "Rotate display by 90 degrees"
	help
	  Rotate display counter-clockwise by 90 degrees.
	  For LVGL, this corresponds to a rotation of 270 degrees

config MCUX_ELCDIF_PXP_ROTATE_180
	bool "Rotate display by 180 degrees"
	help
	  Rotate display counter-clockwise by 180 degrees

config MCUX_ELCDIF_PXP_ROTATE_270
	bool "Rotate display by 270 degrees"
	help
	  Rotate display counter-clockwise by 270 degrees
	  For LVGL, this corresponds to a rotation of 90 degrees

endchoice

choice MCUX_ELCDIF_PXP_FLIP_DIRECTION
	default MCUX_ELCDIF_PXP_FLIP_DISABLE
	prompt "Flip direction of PXP"
	help
	  Set flip direction of PXP. The ELCDIF cannot detect the correct
	  rotation angle based on the call to display_write, so the user should
	  configure it here. In order for PXP flip to work, calls to
	  display_write MUST supply a framebuffer equal in size to screen width
	  and height (without flip applied).  Note that the width and
	  height settings of the screen in devicetree should not be modified
	  from their values in the default screen orientation when using this
	  functionality.

config MCUX_ELCDIF_PXP_FLIP_DISABLE
	bool "Do not flip display"

config MCUX_ELCDIF_PXP_FLIP_HORIZONTAL
	bool "Flip display horizontally"

config MCUX_ELCDIF_PXP_FLIP_VERTICAL
	bool "Flip display vertically"

config MCUX_ELCDIF_PXP_FLIP_BOTH
	bool "Flib display both horizontally and vertically"

endchoice

endif # MCUX_ELCDIF_PXP

endif # DISPLAY_MCUX_ELCDIF
