/* Copyright 2021 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

/* Intel ADLRVP-P-DDR4-MEC1521 board-specific configuration */

#ifndef __CROS_EC_BOARD_H
#define __CROS_EC_BOARD_H

/* Microchip EC variant */
#define VARIANT_INTELRVP_EC_MCHP

/* UART for EC console */
#undef CONFIG_UART_CONSOLE
#define CONFIG_UART_CONSOLE 2

#include "adlrvp.h"

/*
 * Macros for GPIO signals used in common code that don't match the
 * schematic names. Signal names in gpio.inc match the schematic and are
 * then redefined here to so it's more clear which signal is being used for
 * which purpose.
 */
/* Power sequencing */
#define GPIO_EC_SPI_OE_N		GPIO_EC_PCH_SPI_OE_N
#define GPIO_PG_EC_ALL_SYS_PWRGD	GPIO_ALL_SYS_PWRGD
#define GPIO_RSMRST_L_PGOOD		GPIO_RSMRST_PWRGD_EC_N
#define GPIO_PG_EC_RSMRST_ODL		GPIO_RSMRST_PWRGD_EC_N
#define GPIO_PCH_SLP_S0_L		GPIO_PM_SLP_S0_R_N
#define GPIO_PG_EC_DSW_PWROK		GPIO_EC_TRACE_DATA_2
#define GPIO_VCCST_PWRGD		GPIO_EC_TRACE_DATA_3
#define GPIO_SLP_SUS_L			GPIO_PM_SLP_SUS_N
#define GPIO_SYS_RESET_L		GPIO_DG2_PRESENT
#define GPIO_PCH_RSMRST_L		GPIO_PM_RSMRST_R
#define GPIO_PCH_PWRBTN_L		GPIO_PM_PWRBTN_N_R
#define GPIO_EN_PP3300_A		GPIO_EC_DS3_R
#define GPIO_SYS_PWROK_EC		GPIO_SYS_PWROK_EC_R
#define GPIO_PCH_DSW_PWROK		GPIO_EC_TRACE_DATA_1

/* Buttons */
#define GPIO_LID_OPEN			GPIO_SMC_LID
#define GPIO_VOLUME_UP_L		GPIO_VOL_UP_EC
#define GPIO_VOLUME_DOWN_L		GPIO_VOL_DOWN_EC
#define GPIO_POWER_BUTTON_L		GPIO_PWRBTN_EC_IN_N

/* Sensors */
#define GMR_TABLET_MODE_GPIO_L		GPIO_EC_SLATEMODE_HALLOUT_SNSR_R
#define GPIO_CPU_PROCHOT		GPIO_PROCHOT_EC_R

/* AC & Battery */
#define GPIO_DC_JACK_PRESENT		GPIO_STD_ADP_PRSNT_EC
#define GPIO_AC_PRESENT			GPIO_BC_ACOK_EC_IN
#define CONFIG_BATTERY_PRESENT_GPIO	GPIO_BATT_ID_R

/* eSPI/Host communication */
#define GPIO_ESPI_RESET_L		GPIO_ESPI_RST_EC_R_N
#define GPIO_PCH_WAKE_L			GPIO_SMC_WAKE_SCI_N
#define GPIO_EC_INT_L			GPIO_EC_TRACE_DATA_0

/* H1 */
#define GPIO_WP_L			GPIO_EC_WAKE_CLK_R
#define GPIO_PACKET_MODE_EN		GPIO_EC_TRACE_CLK
#define GPIO_ENTERING_RW		GPIO_DNX_FORCE_RELOAD_EC_R

/* FAN */
#define GPIO_FAN_POWER_EN		GPIO_FAN_PWR_DISABLE

/* LEDs */
#define GPIO_BAT_LED_RED_L		GPIO_PM_BAT_STATUS_LED2
#define GPIO_PWR_LED_WHITE_L		GPIO_PM_PWRBTN_LED

/* Uart */
#define GPIO_UART2_RX			GPIO_EC_UART_RX

/* Case Closed Debug Mode interrupt */
#define GPIO_CCD_MODE_ODL		GPIO_KBC_NUMLOCK

/* USB-C interrupts */
#define GPIO_USBC_TCPC_ALRT_P0		GPIO_TYPEC_EC_SMBUS_ALERT_0_R
#define GPIO_USBC_TCPC_ALRT_P1		GPIO_TYPEC_EC_SMBUS_ALERT_1_R
#define GPIO_USBC_TCPC_PPC_ALRT_P0	GPIO_KBC_SCANOUT_15
#define GPIO_USBC_TCPC_PPC_ALRT_P1	GPIO_KBC_CAPSLOCK


/* I2C ports & Configs */
/* Charger */
#define I2C_PORT_CHARGER		MCHP_I2C_PORT0
/* Port 80 */
#define I2C_PORT_PORT80			MCHP_I2C_PORT0
/* Board ID */
#define I2C_PORT_PCA9555_BOARD_ID_GPIO	MCHP_I2C_PORT0
/* Battery */
#define I2C_PORT_BATTERY		MCHP_I2C_PORT0
/* USB-C I2C */
#define I2C_PORT_TYPEC_0		MCHP_I2C_PORT1
#define I2C_PORT_TYPEC_1		MCHP_I2C_PORT5

/*
 * MEC1521H loads firmware using QMSPI controller
 * CONFIG_SPI_FLASH_PORT is the index into
 * spi_devices[] in board.c
 */
#define CONFIG_SPI_FLASH_PORT 0
#define CONFIG_SPI_FLASH

/*
 * ADLRVP uses 32MB SPI flash- W25R256JVEIQ.But, EC binary to be generated
 * is of size 512KB. This bin is then later appended with 0xFF to become 32MB
 * binary for flashing purpose.
 */
#define CONFIG_FLASH_SIZE_BYTES	(512 * 1024)
#define CONFIG_SPI_FLASH_W25X40	/* TODO: change to W25R256 */

/* ADC channels */
/*
 * Undefining below and redefining based on ADL RVP schematics,
 * as they are already defined with different channels in mchp_ec.h.
 */
#undef ADC_TEMP_SNS_AMBIENT_CHANNEL
#undef ADC_TEMP_SNS_VR_CHANNEL
#undef ADC_TEMP_SNS_DDR_CHANNEL
#undef ADC_TEMP_SNS_SKIN_CHANNEL

#define ADC_TEMP_SNS_AMBIENT_CHANNEL	CHIP_ADC_CH4
#define ADC_TEMP_SNS_VR_CHANNEL		CHIP_ADC_CH5
#define ADC_TEMP_SNS_DDR_CHANNEL	CHIP_ADC_CH6
#define ADC_TEMP_SNS_SKIN_CHANNEL	CHIP_ADC_CH7

/* To do: Remove once fan register details are added in mchp/fan.c */
#undef CONFIG_FANS

/* Use internal silicon 32KHz oscillator */
#undef CONFIG_CLOCK_SRC_EXTERNAL

#ifndef __ASSEMBLER__

enum adlrvp_i2c_channel {
	I2C_CHAN_BATT_CHG,
	I2C_CHAN_TCPC_0,
	I2C_CHAN_TCPC_1,
	I2C_CHAN_COUNT,
};

/* Map I2C port to controller */
int board_i2c_p2c(int port);
#endif /* !__ASSEMBLER__ */

#endif /* __CROS_EC_BOARD_H */
