# SPDX-License-Identifier: GPL-2.0
config FB_OMAP2_DSS_INIT
	bool

config FB_OMAP2_DSS
	tristate
	select VIDEOMODE_HELPERS
	select FB_OMAP2_DSS_INIT
	select HDMI

config FB_OMAP2_DSS_DEBUG
	bool "Debug support"
	help
	  This enables printing of debug messages. Alternatively, debug messages
	  can also be enabled by setting CONFIG_DYNAMIC_DEBUG and then setting
	  appropriate flags in <debugfs>/dynamic_debug/control.

config FB_OMAP2_DSS_DEBUGFS
	bool "Debugfs filesystem support"
	depends on DEBUG_FS
	help
	  This enables debugfs for OMAPDSS at <debugfs>/omapdss. This enables
	  querying about clock configuration and register configuration of dss,
	  dispc, dsi, hdmi and rfbi.

config FB_OMAP2_DSS_COLLECT_IRQ_STATS
	bool "Collect DSS IRQ statistics"
	depends on FB_OMAP2_DSS_DEBUGFS
	help
	  Collect DSS IRQ statistics, printable via debugfs.

	  The statistics can be found from
	  <debugfs>/omapdss/dispc_irq for DISPC interrupts, and
	  <debugfs>/omapdss/dsi_irq for DSI interrupts.

config FB_OMAP2_DSS_DPI
	bool "DPI support"
	default y
	help
	  DPI Interface. This is the Parallel Display Interface.

config FB_OMAP2_DSS_RFBI
	bool "RFBI support"
	depends on BROKEN
	help
	  MIPI DBI support (RFBI, Remote Framebuffer Interface, in Texas
	  Instrument's terminology).

	  DBI is a bus between the host processor and a peripheral,
	  such as a display or a framebuffer chip.

	  See http://www.mipi.org/ for DBI specifications.

config FB_OMAP2_DSS_VENC
	bool "VENC support"
	default y
	help
	  OMAP Video Encoder support for S-Video and composite TV-out.

config FB_OMAP2_DSS_HDMI_COMMON
	bool

config FB_OMAP4_DSS_HDMI
	bool "HDMI support for OMAP4"
	default y
	select FB_OMAP2_DSS_HDMI_COMMON
	help
	  HDMI support for OMAP4 based SoCs.

config FB_OMAP5_DSS_HDMI
	bool "HDMI support for OMAP5"
	select FB_OMAP2_DSS_HDMI_COMMON
	help
	  HDMI Interface for OMAP5 and similar cores. This adds the High
	  Definition Multimedia Interface. See http://www.hdmi.org/ for HDMI
	  specification.

config FB_OMAP2_DSS_SDI
	bool "SDI support"
	help
	  SDI (Serial Display Interface) support.

	  SDI is a high speed one-way display serial bus between the host
	  processor and a display.

config FB_OMAP2_DSS_DSI
	bool "DSI support"
	help
	  MIPI DSI (Display Serial Interface) support.

	  DSI is a high speed half-duplex serial interface between the host
	  processor and a peripheral, such as a display or a framebuffer chip.

	  See http://www.mipi.org/ for DSI specifications.

config FB_OMAP2_DSS_MIN_FCK_PER_PCK
	int "Minimum FCK/PCK ratio (for scaling)"
	range 0 32
	default 0
	help
	  This can be used to adjust the minimum FCK/PCK ratio.

	  With this you can make sure that DISPC FCK is at least
	  n x PCK. Video plane scaling requires higher FCK than
	  normally.

	  If this is set to 0, there's no extra constraint on the
	  DISPC FCK. However, the FCK will at minimum be
	  2xPCK (if active matrix) or 3xPCK (if passive matrix).

	  Max FCK is 173MHz, so this doesn't work if your PCK
	  is very high.

config FB_OMAP2_DSS_SLEEP_AFTER_VENC_RESET
	bool "Sleep 20ms after VENC reset"
	default y
	help
	  There is a 20ms sleep after VENC reset which seemed to fix the
	  reset. The reason for the bug is unclear, and it's also unclear
	  on what platforms this happens.

	  This option enables the sleep, and is enabled by default. You can
	  disable the sleep if it doesn't cause problems on your platform.
