# SPDX-License-Identifier: GPL-2.0-only
config DRM_ROCKCHIP
	tristate "DRM Support for Rockchip"
	depends on DRM
	depends on ARCH_ROCKCHIP || COMPILE_TEST
	depends on ROCKCHIP_IOMMU || !ROCKCHIP_IOMMU
	depends on OF
	select DRM_CLIENT_SELECTION
	select DRM_GEM_DMA_HELPER
	select DRM_KMS_HELPER
	select DRM_PANEL
	select VIDEOMODE_HELPERS
	select DRM_ANALOGIX_DP if ROCKCHIP_ANALOGIX_DP
	select DRM_DISPLAY_DP_AUX_BUS if ROCKCHIP_ANALOGIX_DP
	select DRM_DW_DP if ROCKCHIP_DW_DP
	select DRM_DW_HDMI if ROCKCHIP_DW_HDMI
	select DRM_DW_HDMI_QP if ROCKCHIP_DW_HDMI_QP
	select DRM_DW_MIPI_DSI if ROCKCHIP_DW_MIPI_DSI
	select DRM_DW_MIPI_DSI2 if ROCKCHIP_DW_MIPI_DSI2
	select DRM_INNO_HDMI if ROCKCHIP_INNO_HDMI
	select GENERIC_PHY if ROCKCHIP_DW_MIPI_DSI
	select GENERIC_PHY_MIPI_DPHY if ROCKCHIP_DW_MIPI_DSI
	select SND_SOC_HDMI_CODEC if ROCKCHIP_CDN_DP && SND_SOC
	help
	  Choose this option if you have a Rockchip soc chipset.
	  This driver provides kernel mode setting and buffer
	  management to userspace. This driver does not provide
	  2D or 3D acceleration; acceleration is performed by other
	  IP found on the SoC.

if DRM_ROCKCHIP

config ROCKCHIP_VOP
	bool "Rockchip VOP driver"
	default y
	help
	  This selects support for the VOP driver. You should enable it
	  on older SoCs.

config ROCKCHIP_VOP2
	bool "Rockchip VOP2 driver"
	help
	  This selects support for the VOP2 driver. The VOP2 hardware is
	  first found on the RK3568.

config ROCKCHIP_ANALOGIX_DP
	bool "Rockchip specific extensions for Analogix DP driver"
	depends on ROCKCHIP_VOP
	select DRM_BRIDGE_CONNECTOR
	select DRM_DISPLAY_HELPER
	select DRM_DISPLAY_DP_HELPER
	help
	  This selects support for Rockchip SoC specific extensions
	  for the Analogix Core DP driver. If you want to enable DP
	  on RK3288 or RK3399 based SoC, you should select this option.

config ROCKCHIP_CDN_DP
	bool "Rockchip cdn DP"
	depends on EXTCON=y || (EXTCON=m && DRM_ROCKCHIP=m)
	select DRM_DISPLAY_HELPER
	select DRM_BRIDGE_CONNECTOR
	select DRM_DISPLAY_DP_HELPER
	help
	  This selects support for Rockchip SoC specific extensions
	  for the cdn DP driver. If you want to enable Dp on
	  RK3399 based SoC, you should select this
	  option.

config ROCKCHIP_DW_DP
	bool "Rockchip specific extensions for Synopsys DW DP"
	help
	  This selects support for Rockchip SoC specific extensions
	  to enable Synopsys DesignWare Cores based DisplayPort transmit
	  controller support on Rockchip SoC, If you want to enable DP on
	  rk3588 based SoC, you should select this option.

config ROCKCHIP_DW_HDMI
	bool "Rockchip specific extensions for Synopsys DW HDMI"
	help
	  This selects support for Rockchip SoC specific extensions
	  for the Synopsys DesignWare HDMI driver. If you want to
	  enable HDMI on RK3288 or RK3399 based SoC, you should select
	  this option.

config ROCKCHIP_DW_HDMI_QP
	bool "Rockchip specific extensions for Synopsys DW HDMI QP"
	select DRM_BRIDGE_CONNECTOR
	help
	  This selects support for Rockchip SoC specific extensions
	  for the Synopsys DesignWare HDMI QP driver. If you want to
	  enable HDMI on RK3588 based SoC, you should select this option.

config ROCKCHIP_DW_MIPI_DSI
	bool "Rockchip specific extensions for Synopsys DW MIPI DSI"
	select GENERIC_PHY_MIPI_DPHY
	help
	  This selects support for Rockchip SoC specific extensions
	  for the Synopsys DesignWare dsi driver. If you want to
	  enable MIPI DSI on RK3288 or RK3399 based SoC, you should
	  select this option.

config ROCKCHIP_DW_MIPI_DSI2
	bool "Rockchip specific extensions for Synopsys DW MIPI DSI2"
	select GENERIC_PHY_MIPI_DPHY
	help
	  This selects support for Rockchip SoC specific extensions
	  for the Synopsys DesignWare DSI2 driver. If you want to
	  enable MIPI DSI on RK3576 or RK3588 based SoC, you should
	  select this option.

config ROCKCHIP_INNO_HDMI
	bool "Rockchip specific extensions for Innosilicon HDMI"
	select DRM_DISPLAY_HDMI_HELPER
	select DRM_DISPLAY_HDMI_STATE_HELPER
	select DRM_DISPLAY_HELPER
	help
	  This selects support for Rockchip SoC specific extensions
	  for the Innosilicon HDMI driver. If you want to enable
	  HDMI on RK3036 based SoC, you should select this option.

config ROCKCHIP_LVDS
	bool "Rockchip LVDS support"
	depends on DRM_ROCKCHIP
	depends on PINCTRL && OF
	select DRM_DISPLAY_HELPER
	select DRM_BRIDGE_CONNECTOR
	help
	  Choose this option to enable support for Rockchip LVDS controllers.
	  Rockchip rk3288 SoC has LVDS TX Controller can be used, and it
	  support LVDS, rgb, dual LVDS output mode. say Y to enable its
	  driver.

config ROCKCHIP_RGB
	bool "Rockchip RGB support"
	depends on DRM_ROCKCHIP
	depends on PINCTRL
	select DRM_DISPLAY_HELPER
	select DRM_BRIDGE_CONNECTOR
	help
	  Choose this option to enable support for Rockchip RGB output.
	  Some Rockchip CRTCs, like rv1108, can directly output parallel
	  and serial RGB format to panel or connect to a conversion chip.
	  say Y to enable its driver.

config ROCKCHIP_RK3066_HDMI
	bool "Rockchip specific extensions for RK3066 HDMI"
	depends on DRM_ROCKCHIP
	help
	  This selects support for Rockchip SoC specific extensions
	  for the RK3066 HDMI driver. If you want to enable
	  HDMI on RK3066 based SoC, you should select this option.
endif
