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

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

config BOARD_GOOGLE_JACUZZI_COMMON
	def_bool n
	select BOARD_GOOGLE_KUKUI_COMMON
	select DRIVER_PARADE_PS8640 if BOARD_GOOGLE_JACUZZI
	# All Jacuzzi followers are using ANX7625 except the reference board.
	select DRIVER_ANALOGIX_ANX7625 if !BOARD_GOOGLE_JACUZZI

if BOARD_GOOGLE_KUKUI_COMMON

config VBOOT
	select EC_GOOGLE_CHROMEEC_SWITCHES
	select VBOOT_VBNV_FLASH

config BOARD_SPECIFIC_OPTIONS
	def_bool y
	select RTC
	select SOC_MEDIATEK_MT8183
	select BOARD_ROMSIZE_KB_8192
	select MAINBOARD_HAS_CHROMEOS
	select CHROMEOS_CAMERA
	select CHROMEOS_USE_EC_WATCHDOG_FLAG if CHROMEOS
	select COMMON_CBFS_SPI_WRAPPER
	select SPI_FLASH
	select SPI_FLASH_INCLUDE_ALL_DRIVERS
	select EC_GOOGLE_CHROMEEC
	select EC_GOOGLE_CHROMEEC_BOARDID
	select EC_GOOGLE_CHROMEEC_SPI
	select SPI_TPM if VBOOT
	select TPM_GOOGLE_CR50 if VBOOT
	select MAINBOARD_HAS_TPM2 if VBOOT
	select MAINBOARD_HAS_NATIVE_VGA_INIT
	select MAINBOARD_FORCE_NATIVE_VGA_INIT
	select HAVE_LINEAR_FRAMEBUFFER
	select MT8183_DRAM_EMCP if BOARD_GOOGLE_KRANE || BOARD_GOOGLE_KAKADU || BOARD_GOOGLE_KATSU
	select MIPI_PANEL_AUO_KD101N80_45NA if BOARD_GOOGLE_KRANE
	select MIPI_PANEL_BOE_TV101WUM_NL6 if BOARD_GOOGLE_KRANE
	select MIPI_PANEL_AUO_B101UAN08_3 if BOARD_GOOGLE_KODAMA
	select MIPI_PANEL_BOE_TV101WUM_N53 if BOARD_GOOGLE_KODAMA
	select MIPI_PANEL_BOE_TV105WUM_NW0 if BOARD_GOOGLE_KAKADU
	select MIPI_PANEL_CMN_P097PFG_SSD2858 if BOARD_GOOGLE_KUKUI
	select MIPI_PANEL_AUO_NT51021D8P if BOARD_GOOGLE_FLAPJACK
	select MIPI_PANEL_BOE_TV080WUM_NG0 if BOARD_GOOGLE_FLAPJACK
	select MIPI_PANEL_BOE_TV101WUM_NG0 if BOARD_GOOGLE_FLAPJACK
	select MIPI_PANEL_INX_OTA7290D10P if BOARD_GOOGLE_FLAPJACK
	select MIPI_PANEL_STA_2081101QFH032011_53G if BOARD_GOOGLE_KATSU
	select MIPI_PANEL_BOE_TV105WUM_NW0 if BOARD_GOOGLE_KATSU

config MAINBOARD_DIR
	default "google/kukui"

config MAINBOARD_PART_NUMBER
	default "Kukui" if BOARD_GOOGLE_KUKUI
	default "Krane" if BOARD_GOOGLE_KRANE
	default "Kodama" if BOARD_GOOGLE_KODAMA
	default "Kakadu" if BOARD_GOOGLE_KAKADU
	default "Flapjack" if BOARD_GOOGLE_FLAPJACK
	default "Jacuzzi" if BOARD_GOOGLE_JACUZZI
	default "Juniper" if BOARD_GOOGLE_JUNIPER
	default "Kappa" if BOARD_GOOGLE_KAPPA
	default "Damu" if BOARD_GOOGLE_DAMU
	default "Cerise" if BOARD_GOOGLE_CERISE
	default "Stern" if BOARD_GOOGLE_STERN
	default "Willow" if BOARD_GOOGLE_WILLOW
	default "Esche" if BOARD_GOOGLE_ESCHE
	default "Burnet" if BOARD_GOOGLE_BURNET
	default "Fennel" if BOARD_GOOGLE_FENNEL
	default "Katsu" if BOARD_GOOGLE_KATSU
	default "Cozmo" if BOARD_GOOGLE_COZMO
	default "Makomo" if BOARD_GOOGLE_MAKOMO
	default "Munna" if BOARD_GOOGLE_MUNNA
	default "Pico" if BOARD_GOOGLE_PICO

config DRIVER_TPM_SPI_BUS
	hex
	default 0x0

config BOOT_DEVICE_SPI_FLASH_BUS
	int
	default 1

config EC_GOOGLE_CHROMEEC_SPI_BUS
	hex
	default 0x2

config BOARD_SDRAM_TABLE_OFFSET
	hex
	default 0x10 if BOARD_GOOGLE_FENNEL || BOARD_GOOGLE_CERISE || BOARD_GOOGLE_STERN || BOARD_GOOGLE_MAKOMO || BOARD_GOOGLE_MUNNA
	default 0x20 if BOARD_GOOGLE_KAKADU || BOARD_GOOGLE_KATSU
	default 0x30 if BOARD_GOOGLE_COZMO || BOARD_GOOGLE_PICO || BOARD_GOOGLE_JUNIPER || BOARD_GOOGLE_WILLOW
	default 0x40 if BOARD_GOOGLE_KAPPA
	default 0x50 if BOARD_GOOGLE_BURNET || BOARD_GOOGLE_ESCHE
	default 0x0

config BOARD_OVERRIDE_LCM_ID
	hex
	default 0x1 if BOARD_GOOGLE_JUNIPER || BOARD_GOOGLE_KAPPA || BOARD_GOOGLE_DAMU
	default 0x1 if BOARD_GOOGLE_BURNET || BOARD_GOOGLE_ESCHE
	default 0x0

config SPEAKER_GPIO_NAME
	string
	# MAX98357A, should include KENZO in future.
	default "speaker enable" if BOARD_GOOGLE_JACUZZI || BOARD_GOOGLE_JUNIPER
	default "speaker enable" if BOARD_GOOGLE_WILLOW || BOARD_GOOGLE_DAMU
	# MAX98360
	default "speaker enable" if BOARD_GOOGLE_BURNET || BOARD_GOOGLE_ESCHE
	default "speaker enable" if BOARD_GOOGLE_KAPPA
	# ALC1015Q (default for Jacuzzi followers)
	default "rt1015p sdb" if BOARD_GOOGLE_KAKADU || BOARD_GOOGLE_KATSU
	default "rt1015p sdb" if BOARD_GOOGLE_JACUZZI_COMMON
	# MAX98357A (default for Kukui followers)
	default "speaker enable"

endif
