# SPDX-License-Identifier: GPL-2.0-only
config DRM_ROCKCHIP
	tristate "DRM Support for Rockchip"
	depends on DRM && ROCKCHIP_IOMMU
	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_DW_HDMI if ROCKCHIP_DW_HDMI
	select DRM_DW_MIPI_DSI if ROCKCHIP_DW_MIPI_DSI
	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_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_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_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_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_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
