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

config BOARD_GOOGLE_CORSOLA_COMMON
	def_bool BOARD_GOOGLE_KINGLER_COMMON || \
		 BOARD_GOOGLE_KRABBY_COMMON || \
		 BOARD_GOOGLE_STARYU_COMMON

config BOARD_GOOGLE_KINGLER_COMMON
	def_bool BOARD_GOOGLE_KINGLER || \
		 BOARD_GOOGLE_KYOGRE || \
		 BOARD_GOOGLE_PONYTA || \
		 BOARD_GOOGLE_SQUIRTLE || \
		 BOARD_GOOGLE_STEELIX || \
		 BOARD_GOOGLE_VOLTORB

config BOARD_GOOGLE_KRABBY_COMMON
	def_bool BOARD_GOOGLE_CHINCHOU || \
		 BOARD_GOOGLE_KRABBY || \
		 BOARD_GOOGLE_MAGIKARP || \
		 BOARD_GOOGLE_SKITTY || \
		 BOARD_GOOGLE_TENTACRUEL || \
		 BOARD_GOOGLE_VELUZA

config BOARD_GOOGLE_STARYU_COMMON
	def_bool BOARD_GOOGLE_STARMIE || \
		 BOARD_GOOGLE_WUGTRIO

if BOARD_GOOGLE_CORSOLA_COMMON

config CORSOLA_SDCARD_INIT
	def_bool BOARD_GOOGLE_KINGLER_COMMON || \
		 BOARD_GOOGLE_MAGIKARP || \
		 BOARD_GOOGLE_TENTACRUEL || \
		 BOARD_GOOGLE_WUGTRIO

config BOARD_SPECIFIC_OPTIONS
	def_bool y
	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 DRIVER_ANALOGIX_ANX7625 if BOARD_GOOGLE_CHINCHOU || \
					  BOARD_GOOGLE_KINGLER || \
					  BOARD_GOOGLE_KYOGRE || \
					  BOARD_GOOGLE_PONYTA || \
					  BOARD_GOOGLE_SQUIRTLE || \
					  BOARD_GOOGLE_STEELIX || \
					  BOARD_GOOGLE_VOLTORB
	select DRIVER_PARADE_PS8640 if BOARD_GOOGLE_KRABBY || \
				       BOARD_GOOGLE_MAGIKARP || \
				       BOARD_GOOGLE_SKITTY || \
				       BOARD_GOOGLE_STEELIX || \
				       BOARD_GOOGLE_TENTACRUEL || \
				       BOARD_GOOGLE_VELUZA
	select RTC
	select FW_CONFIG
	select FW_CONFIG_SOURCE_CHROMEEC_CBI
	select MIPI_PANEL_KD_KD101NE3_40TI if BOARD_GOOGLE_WUGTRIO
	select MIPI_PANEL_LCE_LMFBX101117480 if BOARD_GOOGLE_WUGTRIO
	select MIPI_PANEL_STA_ER88577 if BOARD_GOOGLE_WUGTRIO
	select MIPI_PANEL_STA_HIMAX83102_J02 if BOARD_GOOGLE_STARMIE
	select MIPI_PANEL_STA_ILI9882T if BOARD_GOOGLE_STARMIE

config VBOOT
	select EC_GOOGLE_CHROMEEC_SWITCHES
	select VBOOT_VBNV_FLASH

config MAINBOARD_DIR
	string
	default "google/corsola"

config MAINBOARD_PART_NUMBER
	string
	default "Chinchou" if BOARD_GOOGLE_CHINCHOU
	default "Kingler" if BOARD_GOOGLE_KINGLER
	default "Krabby" if BOARD_GOOGLE_KRABBY
	default "Kyogre" if BOARD_GOOGLE_KYOGRE
	default "Magikarp" if BOARD_GOOGLE_MAGIKARP
	default "Ponyta" if BOARD_GOOGLE_PONYTA
	default "Skitty" if BOARD_GOOGLE_SKITTY
	default "Squirtle" if BOARD_GOOGLE_SQUIRTLE
	default "Starmie" if BOARD_GOOGLE_STARMIE
	default "Steelix" if BOARD_GOOGLE_STEELIX
	default "Tentacruel" if BOARD_GOOGLE_TENTACRUEL
	default "Veluza" if BOARD_GOOGLE_VELUZA
	default "Voltorb" if BOARD_GOOGLE_VOLTORB
	default "Wugtrio" if BOARD_GOOGLE_WUGTRIO

config BOOT_DEVICE_SPI_FLASH_BUS
	int
	default 7

config DRIVER_TPM_SPI_BUS
	hex
	default 0x2

config EC_GOOGLE_CHROMEEC_SPI_BUS
	hex
	default 0x1
endif
