config GKI_HIDDEN_DRM_CONFIGS
	bool "Hidden DRM configs needed for GKI"
	select DRM_KMS_HELPER if (HAS_IOMEM && DRM)
	select DRM_GEM_CMA_HELPER
	select DRM_KMS_CMA_HELPER
	select DRM_MIPI_DSI
	select DRM_TTM if (HAS_IOMEM && DRM)
	select VIDEOMODE_HELPERS
	select WANT_DEV_COREDUMP if !AMLOGIC_MODIFY
	select INTERVAL_TREE
	select DRM_FBDEV_EMULATION if AMLOGIC_MODIFY
	help
	  Dummy config option used to enable hidden DRM configs.
	  These are normally selected implicitly when including a
	  DRM module, but for GKI, the modules are built out-of-tree.

config GKI_HIDDEN_REGMAP_CONFIGS
	bool "Hidden Regmap configs needed for GKI"
	select REGMAP_IRQ
	select REGMAP_MMIO
	help
	  Dummy config option used to enable hidden regmap configs.
	  These are normally selected implicitly when a module
	  that relies on it is configured.

config GKI_HIDDEN_CRYPTO_CONFIGS
	bool "Hidden CRYPTO configs needed for GKI"
	select CRYPTO_ENGINE
	help
	  Dummy config option used to enable hidden CRYPTO configs.
	  These are normally selected implicitly when a module
	  that relies on it is configured.

config GKI_HIDDEN_SND_CONFIGS
	bool "Hidden SND configs needed for GKI"
	select SND_VMASTER
	select SND_PCM_ELD
	select SND_JACK
	select SND_JACK_INPUT_DEV
	help
	  Dummy config option used to enable hidden SND configs.
	  These are normally selected implicitly when a module
	  that relies on it is configured.

config GKI_HIDDEN_SND_SOC_CONFIGS
	bool "Hidden SND_SOC configs needed for GKI"
	select SND_SOC_GENERIC_DMAENGINE_PCM if (SND_SOC && SND)
	select SND_PCM_IEC958
	select SND_SOC_COMPRESS if (SND_SOC && SND)
	select SND_SOC_TOPOLOGY if (SND_SOC && SND)
	help
	  Dummy config option used to enable hidden SND_SOC configs.
	  These are normally selected implicitly when a module
	  that relies on it is configured.

config GKI_HIDDEN_MMC_CONFIGS
	bool "Hidden MMC configs needed for GKI"
	select MMC_SDHCI_IO_ACCESSORS if (MMC_SDHCI)
	help
	  Dummy config option used to enable hidden MMC configs.
	  These are normally selected implicitly when a module
	  that relies on it is configured.

config GKI_HIDDEN_GPIO_CONFIGS
	bool "Hidden GPIO configs needed for GKI"
	select PINCTRL_SINGLE if (PINCTRL && OF && HAS_IOMEM && !AMLOGIC_MODIFY)
	select GPIO_PL061 if (HAS_IOMEM && ARM_AMBA && GPIOLIB && !AMLOGIC_MODIFY)
	help
	  Dummy config option used to enable hidden GPIO configs.
	  These are normally selected implicitly when a module
	  that relies on it is configured.

config GKI_HIDDEN_QCOM_CONFIGS
	bool "Hidden QCOM configs needed for GKI"
	select QCOM_SMEM_STATE
	select QCOM_GDSC if (ARCH_QCOM)
	select PINCTRL_MSM if (PINCTRL && ARCH_QCOM)
	select IOMMU_IO_PGTABLE_LPAE if (ARCH_QCOM)

	help
	  Dummy config option used to enable hidden QCOM configs.
	  These are normally selected implicitly when a module
	  that relies on it is configured.

config GKI_HIDDEN_MEDIA_CONFIGS
	bool "Hidden Media configs needed for GKI"
	select VIDEOBUF2_CORE
	select MEDIA_SUPPORT
	select FRAME_VECTOR
	select VIDEOBUF2_DMA_CONTIG
	select VIDEOBUF2_DMA_SG
	select CEC_CORE
	select CEC_NOTIFIER
	select CEC_PIN
	help
	  Dummy config option used to enable hidden media configs.
	  These are normally selected implicitly when a module
	  that relies on it is configured.

config GKI_HIDDEN_VIRTUAL_CONFIGS
	bool "Hidden Virtual configs needed for GKI"
	select HVC_DRIVER if !AMLOGIC_MODIFY
	help
	  Dummy config option used to enable hidden virtual device configs.
	  These are normally selected implicitly when a module
	  that relies on it is configured.

# LEGACY_WEXT_ALLCONFIG Discussed upstream, soundly rejected as a unique
# problem for GKI to solve.  It should be noted that these extensions are
# in-effect deprecated and generally unsupported and we should pressure
# the SOC vendors to drop any modules that require these extensions.
config GKI_LEGACY_WEXT_ALLCONFIG
	bool "Hidden wireless extension configs needed for GKI"
	select WIRELESS_EXT
	select WEXT_CORE
	select WEXT_PROC
	select WEXT_SPY
	select WEXT_PRIV
	help
	  Placeholder config option used to enable all the hidden legacy
	  wireless extensions to the core wireless network functionality used
	  by add-in modules.  If you are not building a kernel to be used for
	  a variety of out-of-kernel built wireless modules, say N here.

config GKI_HIDDEN_USB_CONFIGS
	bool "Hiddel USB configurations needed for GKI"
	select USB_PHY
	help
	  Dummy config option used to enable all USB related hidden configs.
	  These configurations are usually only selected by another config
	  option or a combination of them.

	  If you are not building a kernel to be used for a variety of
	  out-of-kernel build USB drivers, say N here.

config GKI_HIDDEN_SOC_BUS_CONFIGS
	bool "Hidden SoC bus configuration needed for GKI"
	select SOC_BUS
	  help
	    Dummy config option used to enable SOC_BUS hidden Kconfig.
	    The configuration is required for SoCs to register themselves to the bus.

	    If you are not building a kernel to be used for a variety of SoCs and
	    out-of-tree drivers, say N here.

config GKI_HIDDEN_RPMSG_CONFIGS
	bool "Hidden RPMSG configuration needed for GKI"
	select RPMSG
	help
	  Dummy config option used to enable the hidden RPMSG config.
	  This configuration is usually only selected by another config
	  option or a combination of them.

	  If you are not building a kernel to be used for a variety of
	  out-of-kernel build RPMSG drivers, say N here.

config GKI_HIDDEN_GPU_CONFIGS
	bool "Hidden GPU configuration needed for GKI"
	select TRACE_GPU_MEM
	help
	  Dummy config option used to enable the hidden GPU config.
	  These are normally selected implicitly when a module
	  that relies on it is configured.

config GKI_HIDDEN_IRQ_CONFIGS
	bool "Hidden IRQ configuration needed for GKI"
	select GENERIC_IRQ_CHIP if !AMLOGIC_MODIFY
	help
	  Dummy config option used to enable GENERIC_IRQ_CHIP hidden
	  config, required by various SoC platforms. This is usually
	  selected by ARCH_*.

config GKI_HIDDEN_HYPERVISOR_CONFIGS
	bool "Hidden hypervisor configuration needed for GKI"
	select SYS_HYPERVISOR if !AMLOGIC_MODIFY
	help
	  Dummy config option used to enable the SYS_HYPERVISOR hidden
	  config, required by various SoC platforms. This is usually
	  selected by XEN or S390.

config GKI_HIDDEN_MM_CONFIGS
	bool "Hidden MM configuration needed for GKI"
	select MEMORY_BALLOON
	select BALLOON_COMPACTION
	select PAGE_REPORTING
	help
	  Dummy config option used to enable hidden MM configs,
	  currently required for VIRTIO_BALLOON

# Atrocities needed for
# a) building GKI modules in separate tree, or
# b) building drivers that are not modularizable
#
# All of these should be reworked into an upstream solution
# if possible.
#
config GKI_HACKS_TO_FIX
	bool "GKI Dummy config options"
	select GKI_HIDDEN_CRYPTO_CONFIGS
	select GKI_HIDDEN_DRM_CONFIGS
	select GKI_HIDDEN_REGMAP_CONFIGS
	select GKI_HIDDEN_SND_CONFIGS
	select GKI_HIDDEN_SND_SOC_CONFIGS
	select GKI_HIDDEN_MMC_CONFIGS
	select GKI_HIDDEN_GPIO_CONFIGS
	select GKI_HIDDEN_QCOM_CONFIGS if !AMLOGIC_MODIFY
	select GKI_LEGACY_WEXT_ALLCONFIG
	select GKI_HIDDEN_MEDIA_CONFIGS
	select GKI_HIDDEN_VIRTUAL_CONFIGS
	select GKI_HIDDEN_USB_CONFIGS
	select GKI_HIDDEN_SOC_BUS_CONFIGS
	select GKI_HIDDEN_RPMSG_CONFIGS
	select GKI_HIDDEN_GPU_CONFIGS
	select GKI_HIDDEN_IRQ_CONFIGS
	select GKI_HIDDEN_HYPERVISOR_CONFIGS
	select GKI_HIDDEN_MM_CONFIGS
# Amlogic added
	select VIDEOBUF_GEN
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select V4L2_MEM2MEM_DEV

	help
	  Dummy config option used to enable core functionality used by
	  modules that may not be selectable in this config.

	  Unless you are building a GKI kernel to be used with modules
	  built from a different config, say N here.
