## SPDX-License-Identifier: GPL-2.0-only

# Umbrella option to be selected by variant boards.
config BOARD_GOOGLE_CORSOLA_COMMON
	def_bool n
	select SOC_MEDIATEK_MT8186
	select BOARD_ROMSIZE_KB_8192
	select MAINBOARD_HAS_CHROMEOS
	select CHROMEOS_USE_EC_WATCHDOG_FLAG if CHROMEOS
	select COMMON_CBFS_SPI_WRAPPER
	select SPI_FLASH
	select SPI_FLASH_INCLUDE_ALL_DRIVERS
	select COMMONLIB_STORAGE
	select COMMONLIB_STORAGE_MMC
	select EC_GOOGLE_CHROMEEC
	select EC_GOOGLE_CHROMEEC_BOARDID
	select EC_GOOGLE_CHROMEEC_SKUID
	select EC_GOOGLE_CHROMEEC_SPI
	select SPI_TPM if VBOOT
	select TPM_GOOGLE_TI50 if VBOOT
	select MAINBOARD_HAS_TPM2 if VBOOT
	select MAINBOARD_HAS_NATIVE_VGA_INIT
	select HAVE_LINEAR_FRAMEBUFFER
	select RTC
	select FW_CONFIG
	select FW_CONFIG_SOURCE_CHROMEEC_CBI

config BOARD_GOOGLE_KINGLER_COMMON
	def_bool n
	select BOARD_GOOGLE_CORSOLA_COMMON

config BOARD_GOOGLE_KRABBY_COMMON
	def_bool n
	select BOARD_GOOGLE_CORSOLA_COMMON

config BOARD_GOOGLE_STARYU_COMMON
	def_bool n
	select BOARD_GOOGLE_CORSOLA_COMMON

config BOARD_GOOGLE_KINGLER
	select BOARD_GOOGLE_KINGLER_COMMON
	select DRIVER_ANALOGIX_ANX7625

config BOARD_GOOGLE_PONYTA
	select BOARD_GOOGLE_KINGLER_COMMON
	select DRIVER_ANALOGIX_ANX7625

config BOARD_GOOGLE_STEELIX
	select BOARD_GOOGLE_KINGLER_COMMON
	select DRIVER_ANALOGIX_ANX7625
	select DRIVER_PARADE_PS8640

config BOARD_GOOGLE_VOLTORB
	select BOARD_GOOGLE_KINGLER_COMMON
	select DRIVER_ANALOGIX_ANX7625

config BOARD_GOOGLE_KRABBY
	select BOARD_GOOGLE_KRABBY_COMMON
	select DRIVER_PARADE_PS8640

config BOARD_GOOGLE_CHINCHOU
	select BOARD_GOOGLE_KRABBY_COMMON
	select DRIVER_ANALOGIX_ANX7625

config BOARD_GOOGLE_TENTACRUEL
	select BOARD_GOOGLE_KRABBY_COMMON
	select DRIVER_PARADE_PS8640

config BOARD_GOOGLE_MAGIKARP
	select BOARD_GOOGLE_KRABBY_COMMON
	select DRIVER_PARADE_PS8640

config BOARD_GOOGLE_STARMIE
	select BOARD_GOOGLE_STARYU_COMMON
	select MIPI_PANEL_STA_HIMAX83102_J02
	select MIPI_PANEL_STA_ILI9882T

if BOARD_GOOGLE_CORSOLA_COMMON

config VBOOT
	select EC_GOOGLE_CHROMEEC_SWITCHES
	select VBOOT_VBNV_FLASH

config MAINBOARD_DIR
	string
	default "google/corsola"

config MAINBOARD_PART_NUMBER
	string
	default "Kingler" if BOARD_GOOGLE_KINGLER
	default "Krabby" if BOARD_GOOGLE_KRABBY
	default "Steelix" if BOARD_GOOGLE_STEELIX
	default "Tentacruel" if BOARD_GOOGLE_TENTACRUEL
	default "Magikarp" if BOARD_GOOGLE_MAGIKARP
	default "Voltorb" if BOARD_GOOGLE_VOLTORB
	default "Starmie" if BOARD_GOOGLE_STARMIE
	default "Ponyta" if BOARD_GOOGLE_PONYTA
	default "Chinchou" if BOARD_GOOGLE_CHINCHOU

config BOOT_DEVICE_SPI_FLASH_BUS
	int
	default 7

config SDCARD_INIT
	bool
	default y if BOARD_GOOGLE_MAGIKARP
	default y if BOARD_GOOGLE_TENTACRUEL
	default y if BOARD_GOOGLE_KINGLER_COMMON
	default n if BOARD_GOOGLE_KRABBY_COMMON

config DRIVER_TPM_SPI_BUS
	hex
	default 0x2

config EC_GOOGLE_CHROMEEC_SPI_BUS
	hex
	default 0x1
endif
