##
## This file is part of the coreboot project.
##
## Copyright 2015 MediaTek Inc.
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; version 2 of the License.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##

config BOARD_GOOGLE_OAK_COMMON
	def_bool n

if BOARD_GOOGLE_OAK_COMMON

config BOARD_SPECIFIC_OPTIONS
	def_bool y
	select SOC_MEDIATEK_MT8173
	select BOARD_ID_AUTO
	select BOARD_ROMSIZE_KB_4096
	select COMMON_CBFS_SPI_WRAPPER
	select DRIVER_PARADE_PS8640
	select EC_GOOGLE_CHROMEEC
	select EC_GOOGLE_CHROMEEC_SPI
	select MAINBOARD_HAS_NATIVE_VGA_INIT
	select MAINBOARD_DO_NATIVE_VGA_INIT
	select MAINBOARD_HAS_CHROMEOS
	select RAM_CODE_SUPPORT
	select SPI_FLASH

config CHROMEOS
	select EC_GOOGLE_CHROMEEC_SWITCHES
	select EC_SOFTWARE_SYNC
	select VBOOT_EC_SLOW_UPDATE
	select VBOOT_OPROM_MATTERS
	select VBOOT_VBNV_FLASH
	select VIRTUAL_DEV_SWITCH

config MAINBOARD_DIR
	string
	default google/oak

config MAINBOARD_VENDOR
	string
	default "Google"

config EC_GOOGLE_CHROMEEC_SPI_BUS
	hex
	default 0x0

config DRIVER_TPM_I2C_BUS
	hex
	default 0x2

config DRIVER_TPM_I2C_ADDR
	hex
	default 0x20

config BOOT_DEVICE_SPI_FLASH_BUS
	int
	default 9

config EC_GOOGLE_CHROMEEC_BOARDNAME
	string
	default "oak"

config EC_GOOGLE_CHROMEEC_PD_BOARDNAME
	string
	default "oak_pd"

##########################################################
#### Update below when adding a new derivative board. ####
##########################################################
config MAINBOARD_PART_NUMBER
	string
	default "Oak" if BOARD_GOOGLE_OAK
	default "Elm" if BOARD_GOOGLE_ELM
	default "Hana" if BOARD_GOOGLE_HANA
	default "Rowan" if BOARD_GOOGLE_ROWAN

config GBB_HWID
	string
	depends on CHROMEOS
	default "OAK TEST 6858" if BOARD_GOOGLE_OAK
	default "ELM TEST 3839" if BOARD_GOOGLE_ELM
	default "HANA TEST 5855" if BOARD_GOOGLE_HANA
	default "ROWAN TEST 5855" if BOARD_GOOGLE_ROWAN

# All Oak-derivatives count their board IDs as 0 being equivalent to Oak rev6.
config BOARD_ID_ADJUSTMENT
	int
	default 0 if BOARD_GOOGLE_OAK
	default 7 if BOARD_GOOGLE_ELM
	default 11 if BOARD_GOOGLE_HANA
	default 15 if BOARD_GOOGLE_ROWAN

endif # BOARD_GOOGLE_OAK
