# SPDX-License-Identifier: (GPL-2.0+ OR MIT)

config AMLOGIC_DRM
	tristate "DRM Support for Amlogic new Display Controller"
	default n
	depends on AMLOGIC_DRIVER && DRM && OF && (ARM || ARM64)
	depends on DRM_KMS_HELPER
	depends on DRM_KMS_CMA_HELPER
	depends on DRM_GEM_CMA_HELPER
	depends on VIDEOMODE_HELPERS
	help
		amlogic new soc display controller
		use the pipeline and modularized

config AMLOGIC_DRM_VPU
	bool "support drm vpu function for meson drm display."
	default n
	depends on AMLOGIC_DRM
	help
		add drm vpu support.
		Choose this option if you have a aMLOGIC soc chipset.
		This driver provides KMS.
		This driver also provides crtcs and planes management.

config AMLOGIC_DRM_HDMI
	bool "support drm hdmi function for meson drm display."
	default n
	depends on AMLOGIC_DRM
	depends on AMLOGIC_HDMITX
	help
		add drm hdmi support.
		use internal amlogic media vout hdmi driver.
		We should confirm AMLOGIC_HDMITX is configured if
		AMLOGIC_DRM_HDMI is selected.

config AMLOGIC_DRM_CVBS
	bool "support drm cvbs function for meson drm display."
	default n
	depends on AMLOGIC_DRM
	depends on AMLOGIC_CVBS_OUTPUT
	help
		add drm cvbs support.
		use internal amlogic media vout cvbs driver.
		We should confirm AMLOGIC_CVBSOUT is configured if
		AMLOGIC_DRM_CVBS is selected.

config AMLOGIC_DRM_PANEL
	bool "support drm panel function for meson drm display."
	default n
	depends on AMLOGIC_DRM
	depends on AMLOGIC_LCD
	depends on DRM_PANEL
	help
		add drm panel support.
		use internal amlogic media vout lcd driver.
		We should confirm AMLOGIC_LCD is configured if
		AMLOGIC_DRM_PANEL is selected.

config AMLOGIC_DRM_USE_ION
	bool "gem use ion to alloc/free graphic buffer."
	default n
	depends on AMLOGIC_DRM
	help
		MESON DRM use CMA HELPER to manage framebuffer.
		It need reserve memory in CMA pool.
		We implement GEM to allocate/free framebuffer from ion.
		For dumb used by displaycontrol we alloc from the ION CMA HEAP.
		For dumb used by app, we can alloc from the ION.
		SYSTEM HEAP which dont need reserve memory.

config AMLOGIC_DRM_EMULATE_FBDEV
	bool "emulate framebuffer dev by drm."
	default n
	depends on AMLOGIC_DRM && AMLOGIC_DRM_USE_ION
	help
		Emulate framebuffer device for device
		which need use fbdev api.
