# 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"
	default n
	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
	default n
	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
	default n
	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
        default n
	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"
	default n
	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"
        default n
	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"
        default n
	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.
