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

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

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

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

config USE_MAX98390
	bool "MAX98390"

config USE_NAU8318
	bool "NAU8318"

endchoice

endif
