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

# Umbrella option to be selected by variant boards.
config BOARD_GOOGLE_GERALT_COMMON
	def_bool n

config BOARD_GOOGLE_GERALT
	select BOARD_GOOGLE_GERALT_COMMON

config BOARD_GOOGLE_CIRI
	select BOARD_GOOGLE_GERALT_COMMON

if BOARD_GOOGLE_GERALT_COMMON

config VBOOT
	select VBOOT_VBNV_FLASH
	select EC_GOOGLE_CHROMEEC_SWITCHES

config BOARD_SPECIFIC_OPTIONS
	def_bool y
	select SOC_MEDIATEK_MT8188
	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 I2C_TPM if VBOOT
	select MAINBOARD_HAS_TPM2 if VBOOT
	select TPM_GOOGLE_TI50 if VBOOT
	select MAINBOARD_HAS_NATIVE_VGA_INIT
	select HAVE_LINEAR_FRAMEBUFFER
	select RTC
	select MIPI_PANEL_BOE_TV110C9M_LL0 if BOARD_GOOGLE_GERALT
	select FW_CONFIG
	select FW_CONFIG_SOURCE_CHROMEEC_CBI

config MAINBOARD_DIR
	string
	default "google/geralt"

config MAINBOARD_PART_NUMBER
	string
	default "Geralt" if BOARD_GOOGLE_GERALT
	default "Ciri" if BOARD_GOOGLE_CIRI

config BOOT_DEVICE_SPI_FLASH_BUS
	int
	default 7

config EC_GOOGLE_CHROMEEC_SPI_BUS
	hex
	default 0x0

config DRIVER_TPM_I2C_BUS
	hex
	default 0x1

config DRIVER_TPM_I2C_ADDR
	hex
	default 0x50

config SDCARD_INIT
	bool
	default y if BOARD_GOOGLE_GERALT
	default n if BOARD_GOOGLE_CIRI

choice
	prompt "Speaker AMP for Geralt"
	default USE_MAX98390 if BOARD_GOOGLE_GERALT || BOARD_GOOGLE_CIRI

config USE_MAX98390
	bool "MAX98390"

config USE_NAU8318
	bool "NAU8318"

endchoice

endif
