# SPDX-License-Identifier: GPL-2.0-only
config DRM_ROCKCHIP
	tristate "DRM Support for Rockchip"
	depends on DRM && ROCKCHIP_IOMMU
	select DRM_GEM_CMA_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_ANALOGIX_DP
	bool "Rockchip specific extensions for Analogix DP driver"
	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)
	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"
	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
	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
	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
