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
	select INTERVAL_TREE
	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)
	select GPIO_PL061 if (HAS_IOMEM && ARM_AMBA && GPIOLIB)
	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_QCOM_CLKS_CONFIGS
	bool "QCOM clk drivers needed for GKI due to powerdomain restrictions"
	select QCOM_RPMHPD	if (ARCH_QCOM)
	help
	  This config option selects various QCOM clk drivers that
	  cannot be built as a module currently due to power-domain
	  deferred probing limitations.
	  See https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e01afc32502555beb2057ddd74401be38475d851

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
	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
	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.

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
	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
	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.

# 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
	select GKI_HIDDEN_MEDIA_CONFIGS
	select GKI_HIDDEN_VIRTUAL_CONFIGS
	select GKI_QCOM_CLKS_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
	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.
