# SPDX-License-Identifier: GPL-2.0-only

config DRM_MSM
	tristate "MSM DRM"
	depends on DRM
	depends on ARCH_QCOM || SOC_IMX5 || COMPILE_TEST
	depends on COMMON_CLK
	depends on IOMMU_SUPPORT
	depends on OF
	depends on QCOM_AOSS_QMP || QCOM_AOSS_QMP=n
	depends on QCOM_OCMEM || QCOM_OCMEM=n
	depends on QCOM_LLCC || QCOM_LLCC=n
	depends on QCOM_COMMAND_DB || QCOM_COMMAND_DB=n
	depends on PM
	select IOMMU_IO_PGTABLE
	select QCOM_MDT_LOADER if ARCH_QCOM
	select REGULATOR
	select DRM_EXEC
	select DRM_GPUVM
	select DRM_SCHED
	select SHMEM
	select TMPFS
	select QCOM_SCM
	select QCOM_UBWC_CONFIG
	select WANT_DEV_COREDUMP
	select SND_SOC_HDMI_CODEC if SND_SOC
	select SYNC_FILE
	select PM_OPP
	select NVMEM
	select PM_GENERIC_DOMAINS
	select TRACE_GPU_MEM
	help
	  DRM/KMS driver for MSM/snapdragon.

config DRM_MSM_GPU_STATE
	bool
	depends on DRM_MSM && (DEBUG_FS || DEV_COREDUMP)
	default y

config DRM_MSM_GPU_SUDO
	bool "Enable SUDO flag on submits"
	depends on DRM_MSM && EXPERT
	default n
	help
	  Enable userspace that has CAP_SYS_RAWIO to submit GPU commands
	  that are run from RB instead of IB1.  This essentially gives
	  userspace kernel level access, but is useful for firmware
	  debugging.

	  Only use this if you are a driver developer.  This should *not*
	  be enabled for production kernels.  If unsure, say N.

config DRM_MSM_VALIDATE_XML
	bool "Validate XML register files against schema"
	depends on DRM_MSM && EXPERT
	depends on $(success,$(PYTHON3) -c "import lxml")
	help
	  Validate XML files with register definitions against rules-fd schema.
	  This option is mostly targeting DRM MSM developers. If unsure, say N.

config DRM_MSM_KMS
	def_bool n
	depends on DRM_MSM
	select DRM_BRIDGE
	select DRM_BRIDGE_CONNECTOR
	select DRM_CLIENT_SELECTION
	select DRM_DISPLAY_HELPER
	select DRM_KMS_HELPER
	select DRM_PANEL
	select DRM_PANEL_BRIDGE

config DRM_MSM_KMS_FBDEV
	def_bool DRM_FBDEV_EMULATION
	depends on DRM_MSM_KMS
	select FB_SYSMEM_HELPERS

config DRM_MSM_MDSS
	bool
	depends on DRM_MSM
	default n

config DRM_MSM_MDP4
	bool "Enable MDP4 support in MSM DRM driver"
	depends on DRM_MSM
	select DRM_MSM_KMS
	default y
	help
	  Compile in support for the Mobile Display Processor v4 (MDP4) in
	  the MSM DRM driver. It is the older display controller found in
	  devices using APQ8064/MSM8960/MSM8x60 platforms.

config DRM_MSM_MDP5
	bool "Enable MDP5 support in MSM DRM driver"
	depends on DRM_MSM
	select DRM_MSM_MDSS
	select DRM_MSM_KMS
	default y
	help
	  Compile in support for the Mobile Display Processor v5 (MDP5) in
	  the MSM DRM driver. It is the display controller found in devices
	  using e.g. APQ8016/MSM8916/APQ8096/MSM8996/MSM8974/SDM6x0 platforms.

config DRM_MSM_DPU
	bool "Enable DPU support in MSM DRM driver"
	depends on DRM_MSM
	select DRM_MSM_MDSS
	select DRM_MSM_KMS
	select DRM_DISPLAY_DSC_HELPER
	default y
	help
	  Compile in support for the Display Processing Unit in
	  the MSM DRM driver. It is the display controller found in devices
	  using e.g. SDM845 and newer platforms.

config DRM_MSM_DP
	bool "Enable DisplayPort support in MSM DRM driver"
	depends on DRM_MSM
	depends on DRM_MSM_KMS
	select DRM_DISPLAY_HDMI_AUDIO_HELPER
	select RATIONAL
	select DRM_DISPLAY_DP_AUX_BUS
	select DRM_DISPLAY_DP_HELPER
	default y
	help
	  Compile in support for DP driver in MSM DRM driver. DP external
	  display support is enabled through this config option. It can
	  be primary or secondary display on device.

config DRM_MSM_DSI
	bool "Enable DSI support in MSM DRM driver"
	depends on DRM_MSM
	depends on DRM_MSM_KMS
	select DRM_PANEL
	select DRM_MIPI_DSI
	select DRM_DISPLAY_DSC_HELPER
	default y
	help
	  Choose this option if you have a need for MIPI DSI connector
	  support.

config DRM_MSM_DSI_28NM_PHY
	bool "Enable DSI 28nm PHY driver in MSM DRM"
	depends on DRM_MSM_DSI
	default y
	help
	  Choose this option if the 28nm DSI PHY is used on the platform.

config DRM_MSM_DSI_20NM_PHY
	bool "Enable DSI 20nm PHY driver in MSM DRM"
	depends on DRM_MSM_DSI
	default y
	help
	  Choose this option if the 20nm DSI PHY is used on the platform.

config DRM_MSM_DSI_28NM_8960_PHY
	bool "Enable DSI 28nm 8960 PHY driver in MSM DRM"
	depends on DRM_MSM_DSI
	default y
	help
	  Choose this option if the 28nm DSI PHY 8960 variant is used on the
	  platform.

config DRM_MSM_DSI_14NM_PHY
	bool "Enable DSI 14nm PHY driver in MSM DRM (used by MSM8996/APQ8096)"
	depends on DRM_MSM_DSI
	default y
	help
	  Choose this option if DSI PHY on 8996 is used on the platform.

config DRM_MSM_DSI_10NM_PHY
	bool "Enable DSI 10nm PHY driver in MSM DRM (used by SDM845)"
	depends on DRM_MSM_DSI
	default y
	help
	  Choose this option if DSI PHY on SDM845 is used on the platform.

config DRM_MSM_DSI_7NM_PHY
	bool "Enable DSI 7nm/5nm/4nm PHY driver in MSM DRM"
	depends on DRM_MSM_DSI
	default y
	help
	  Choose this option if DSI PHY on SM8150/SM8250/SM8350/SM8450/SM8550/SC7280
	  is used on the platform.

config DRM_MSM_HDMI
	bool "Enable HDMI support in MSM DRM driver"
	depends on DRM_MSM
	depends on DRM_MSM_KMS
	default y
	select DRM_DISPLAY_HDMI_HELPER
	select DRM_DISPLAY_HDMI_STATE_HELPER
	help
	  Compile in support for the HDMI output MSM DRM driver. It can
	  be a primary or a secondary display on device. Note that this is used
	  only for the direct HDMI output. If the device outputs HDMI data
	  through some kind of DSI-to-HDMI bridge, this option can be disabled.

config DRM_MSM_HDMI_HDCP
	bool "Enable HDMI HDCP support in MSM DRM driver"
	depends on DRM_MSM && DRM_MSM_HDMI
	default y
	help
	  Choose this option to enable HDCP state machine
