# SPDX-License-Identifier: GPL-2.0-only
config FB_OMAP
	tristate "OMAP frame buffer support"
	depends on FB
	depends on ARCH_OMAP1 || (ARM && COMPILE_TEST)
	select FB_IOMEM_HELPERS
	help
	  Frame buffer driver for OMAP based boards.

config FB_OMAP_LCDC_EXTERNAL
	bool "External LCD controller support"
	depends on FB_OMAP
	help
	  Say Y here, if you want to have support for boards with an
	  external LCD controller connected to the SoSSI/RFBI interface.

config FB_OMAP_LCDC_HWA742
	bool "Epson HWA742 LCD controller support"
	depends on FB_OMAP && FB_OMAP_LCDC_EXTERNAL
	help
	  Say Y here if you want to have support for the external
	  Epson HWA742 LCD controller.

config FB_OMAP_MANUAL_UPDATE
	bool "Default to manual update mode"
	depends on FB_OMAP && FB_OMAP_LCDC_EXTERNAL
	help
	  Say Y here, if your user-space applications are capable of
	  notifying the frame buffer driver when a change has occurred in
	  the frame buffer content and thus a reload of the image data to
	  the external frame buffer is required. If unsure, say N.

config FB_OMAP_LCD_MIPID
	bool "MIPI DBI-C/DCS compatible LCD support"
	depends on FB_OMAP && SPI_MASTER
	help
	  Say Y here if you want to have support for LCDs compatible with
	  the Mobile Industry Processor Interface DBI-C/DCS
	  specification. (Supported LCDs: Philips LPH8923, Sharp LS041Y3)

config FB_OMAP_DMA_TUNE
	bool "Set DMA SDRAM access priority high"
	depends on FB_OMAP
	help
	  On systems in which video memory is in system memory
	  (SDRAM) this will speed up graphics DMA operations.
	  If you have such a system and want to use rotation
	  answer yes. Answer no if you have a dedicated video
	  memory, or don't use any of the accelerated features.
