diff options
l--------- | board/flapjack | 1 | ||||
l--------- | board/flapjack/battery.c | 1 | ||||
l--------- | board/flapjack/board.c | 1 | ||||
l--------- | board/flapjack/board.h | 1 | ||||
l--------- | board/flapjack/build.mk | 1 | ||||
l--------- | board/flapjack/ec.tasklist | 1 | ||||
l--------- | board/flapjack/emmc.c | 1 | ||||
-rw-r--r-- | board/flapjack/gpio.inc | 127 | ||||
-rw-r--r-- | board/flapjack/led.c | 90 | ||||
l--------- | board/flapjack/usb_pd_policy.c | 1 |
10 files changed, 224 insertions, 1 deletions
diff --git a/board/flapjack b/board/flapjack deleted file mode 120000 index 0b14d5a383..0000000000 --- a/board/flapjack +++ /dev/null @@ -1 +0,0 @@ -kukui
\ No newline at end of file diff --git a/board/flapjack/battery.c b/board/flapjack/battery.c new file mode 120000 index 0000000000..e541dac805 --- /dev/null +++ b/board/flapjack/battery.c @@ -0,0 +1 @@ +../kukui/battery.c
\ No newline at end of file diff --git a/board/flapjack/board.c b/board/flapjack/board.c new file mode 120000 index 0000000000..02dd2b5596 --- /dev/null +++ b/board/flapjack/board.c @@ -0,0 +1 @@ +../kukui/board.c
\ No newline at end of file diff --git a/board/flapjack/board.h b/board/flapjack/board.h new file mode 120000 index 0000000000..8567b42c3f --- /dev/null +++ b/board/flapjack/board.h @@ -0,0 +1 @@ +../kukui/board.h
\ No newline at end of file diff --git a/board/flapjack/build.mk b/board/flapjack/build.mk new file mode 120000 index 0000000000..2bba642999 --- /dev/null +++ b/board/flapjack/build.mk @@ -0,0 +1 @@ +../kukui/build.mk
\ No newline at end of file diff --git a/board/flapjack/ec.tasklist b/board/flapjack/ec.tasklist new file mode 120000 index 0000000000..3bfd8d3fe9 --- /dev/null +++ b/board/flapjack/ec.tasklist @@ -0,0 +1 @@ +../kukui/ec.tasklist
\ No newline at end of file diff --git a/board/flapjack/emmc.c b/board/flapjack/emmc.c new file mode 120000 index 0000000000..3464933875 --- /dev/null +++ b/board/flapjack/emmc.c @@ -0,0 +1 @@ +../kukui/emmc.c
\ No newline at end of file diff --git a/board/flapjack/gpio.inc b/board/flapjack/gpio.inc new file mode 100644 index 0000000000..b252e9d90d --- /dev/null +++ b/board/flapjack/gpio.inc @@ -0,0 +1,127 @@ +/* -*- mode:c -*- + * + * Copyright 2019 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. + */ + +/* + * Declare symbolic names for all the GPIOs that we care about. + * Note: Those with interrupt handlers must be declared first. + */ + +/* Interrupts */ +GPIO_INT(USB_C0_PD_INT_ODL, PIN(B, 1), GPIO_INT_FALLING | GPIO_PULL_UP, + tcpc_alert_event) +GPIO_INT(VOLUME_UP_L, PIN(B, 10), GPIO_INT_BOTH | GPIO_PULL_UP, + button_interrupt) /* EC_VOLUP_BTN_ODL */ +GPIO_INT(VOLUME_DOWN_L, PIN(B, 11), GPIO_INT_BOTH | GPIO_PULL_UP, + button_interrupt) /* EC_VOLDN_BTN_ODL */ +GPIO_INT(POWER_BUTTON_L, PIN(A, 0), GPIO_INT_BOTH | GPIO_PULL_UP, + power_button_interrupt) /* EC_PWR_BTN_ODL */ + +GPIO_INT(AP_IN_SLEEP_L, PIN(C, 12), GPIO_INT_BOTH | GPIO_PULL_DOWN, + power_signal_interrupt) +GPIO_INT(PMIC_EC_RESETB, PIN(B, 7), GPIO_INT_BOTH | GPIO_PULL_DOWN, + power_signal_interrupt) +GPIO_INT(WARM_RESET_REQ, PIN(A, 3), GPIO_INT_RISING | GPIO_PULL_DOWN, + chipset_reset_request_interrupt) +GPIO_INT(AP_EC_WATCHDOG_L, PIN(C, 2), GPIO_INT_FALLING, + chipset_watchdog_interrupt) + +GPIO_INT_RW(ACCEL_INT_ODL, PIN(A, 4), GPIO_INT_FALLING | GPIO_SEL_1P8V | GPIO_PULL_UP, + bmi160_interrupt) +GPIO_INT(CHARGER_INT_ODL, PIN(C, 13), GPIO_INT_FALLING | GPIO_PULL_UP, + rt946x_interrupt) +GPIO_INT_RO(EMMC_CMD, PIN(B, 15), GPIO_INT_FALLING, + emmc_cmd_interrupt) +GPIO_INT(SPI1_NSS, PIN(A, 15), GPIO_INT_BOTH, + spi_event) +GPIO_INT_RW(SYNC_INT, PIN(A, 8), GPIO_INT_RISING | GPIO_PULL_DOWN, + sync_interrupt) +GPIO_INT(HALL_INT_L, PIN(C, 5), GPIO_INT_FALLING, + hall_interrupt) +GPIO_INT(GAUGE_INT_ODL, PIN(C, 9), GPIO_INT_FALLING | GPIO_PULL_UP, + gauge_interrupt) + +/* Interrupts not implemented yet */ +#if BOARD_REV < 2 +GPIO(ALS_INT_ODL, PIN(A, 6), GPIO_INPUT) +#elif BOARD_REV >= 2 +/* TODO(b:122993147): It's also an analog input. */ +GPIO(POGO_ADC_INT_L, PIN(A, 6), GPIO_INPUT) +#endif + +/* Voltage rails control pins */ +#if BOARD_REV < 2 +GPIO(PP3300_S0_EN, PIN(B, 6), GPIO_OUT_LOW) +GPIO(PP1800_S3_EN, PIN(C, 7), GPIO_OUT_LOW) +GPIO(PP3300_S3_EN, PIN(D, 2), GPIO_OUT_LOW) +#endif + +/* Reset pins */ +GPIO(AP_SYS_RST_L, PIN(C, 11), GPIO_OUT_LOW) +GPIO(PMIC_WATCHDOG_L, PIN(C, 3), GPIO_OUT_LOW) +GPIO(PMIC_EN_ODL, PIN(C, 10), GPIO_ODR_HIGH) +GPIO(PMIC_FORCE_RESET_ODL, PIN(A, 2), GPIO_ODR_HIGH) +GPIO(MT6370_RST_L, PIN(F, 0), GPIO_OUT_LOW) + +/* + * I2C pins should be configured as inputs until I2C module is + * initialized. This will avoid driving the lines unintentionally. + */ +GPIO(I2C1_SCL, PIN(B, 8), GPIO_INPUT) +GPIO(I2C1_SDA, PIN(B, 9), GPIO_INPUT) +GPIO(I2C2_SCL, PIN(A, 11), GPIO_INPUT) +GPIO(I2C2_SDA, PIN(A, 12), GPIO_INPUT) + +/* Analog pins */ +GPIO(BATT_ID, PIN(A, 7), GPIO_ANALOG) +GPIO(BOARD_ID, PIN(C, 0), GPIO_ANALOG) +#if BOARD_REV >= 2 +GPIO(EC_SKU_ID, PIN(B, 0), GPIO_ANALOG) +GPIO(USBC_THERM, PIN(C, 4), GPIO_ANALOG) +#endif + +/* Other input pins */ +GPIO(WP_L, PIN(C, 8), GPIO_INPUT) /* EC_FLASH_WP_ODL */ +GPIO(BOOT0, PIN(F, 11), GPIO_INPUT) +GPIO(CCD_MODE_ODL, PIN(A, 1), GPIO_INPUT) +#if BOARD_REV >= 2 +GPIO(POGO_VBUS_PRESENT, PIN(A, 14), GPIO_INPUT) +#endif + +/* Other output pins */ +GPIO(ENTERING_RW, PIN(C, 6), GPIO_ODR_HIGH) /* EC_ENTERING_RW_ODL */ +GPIO(EC_INT_L, PIN(B, 12), GPIO_ODR_HIGH) /* EC_AP_INT_ODL */ +GPIO(EC_BOARD_ID_EN_L, PIN(C, 15), GPIO_ODR_HIGH) /* EC_BOARD_ID_EN_ODL */ +GPIO(USB_C0_DP_POLARITY, PIN(C, 14), GPIO_OUT_LOW) +GPIO(USB_C0_HPD_OD, PIN(F, 1), GPIO_ODR_LOW) +GPIO(BOOTBLOCK_EN_L, PIN(C, 1), GPIO_ODR_HIGH) +GPIO(USB_C0_DP_OE_L, PIN(A, 5), GPIO_OUT_HIGH) +#if BOARD_REV < 2 +GPIO(USB_C0_DISCHARGE, PIN(B, 0), GPIO_OUT_LOW) +GPIO(BOOTBLOCK_MUX_OE, PIN(C, 4), GPIO_ODR_HIGH) +GPIO(USB_ID, PIN(A, 13), GPIO_ODR_HIGH) +#elif BOARD_REV >= 2 +GPIO(EN_PP3300_POGO, PIN(A, 13), GPIO_OUT_LOW) +GPIO(EN_POGO_CHARGE_L, PIN(B, 6), GPIO_OUT_LOW) +GPIO(EN_USBC_CHARGE_L, PIN(C, 7), GPIO_OUT_LOW) +GPIO(EN_PP5000_USBC, PIN(D, 2), GPIO_OUT_LOW) +#endif + + +/* USART1: PA9/PA10 */ +ALTERNATE(PIN_MASK(A, 0x0600), 1, MODULE_UART, 0) +/* I2C MASTER: PB8/9 */ +ALTERNATE(PIN_MASK(B, 0x0300), 1, MODULE_I2C, GPIO_ODR_HIGH ) +/* I2C MASTER: PA11/12 */ +ALTERNATE(PIN_MASK(A, 0x1800), 5, MODULE_I2C, GPIO_ODR_HIGH ) +/* SPI SLAVE: PB3/4/5 */ +ALTERNATE(PIN_MASK(B, 0x0038), 0, MODULE_SPI, 0) +#ifdef SECTION_IS_RO +/* SPI SLAVE: PB13/14/15 */ +ALTERNATE(PIN_MASK(B, 0xE000), 0, MODULE_SPI_FLASH, 0) +#endif +/* SPI SLAVE CS: PA15 */ +ALTERNATE(PIN_MASK(A, 0x8000), 0, MODULE_SPI, 0) diff --git a/board/flapjack/led.c b/board/flapjack/led.c new file mode 100644 index 0000000000..5403b2f639 --- /dev/null +++ b/board/flapjack/led.c @@ -0,0 +1,90 @@ +/* Copyright 2019 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. + * + * Battery LED control for Flapjack board. + */ + +#include "battery.h" +#include "charge_state.h" +#include "driver/charger/rt946x.h" +#include "hooks.h" +#include "led_common.h" + +const enum ec_led_id supported_led_ids[] = { EC_LED_ID_BATTERY_LED }; + +const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids); + +#define LED_OFF MT6370_LED_ID_OFF +#define LED_GREEN MT6370_LED_ID1 +#define LED_RED MT6370_LED_ID2 + +static void led_set_battery(void) +{ + static int battery_second; + uint32_t chflags = charge_get_flags(); + + battery_second++; + + switch (charge_get_state()) { + case PWR_STATE_CHARGE: + /* Always indicate when charging, even in suspend. */ + mt6370_led_set_color(LED_RED); + break; + case PWR_STATE_DISCHARGE: + if (charge_get_percent() <= 10) + mt6370_led_set_color( + (battery_second & 0x4) ? LED_RED : LED_OFF); + else + mt6370_led_set_color(LED_OFF); + break; + case PWR_STATE_ERROR: + mt6370_led_set_color((battery_second & 0x2) ? + LED_RED : LED_OFF); + break; + case PWR_STATE_CHARGE_NEAR_FULL: + mt6370_led_set_color(LED_GREEN); + break; + case PWR_STATE_IDLE: /* External power connected in IDLE. */ + if (chflags & CHARGE_FLAG_FORCE_IDLE) { + mt6370_led_set_color(LED_RED); + mt6370_led_set_dim_mode(LED_RED, + MT6370_LED_DIM_MODE_BREATH); + } else { + mt6370_led_set_color(LED_GREEN); + mt6370_led_set_dim_mode(LED_GREEN, + MT6370_LED_DIM_MODE_BREATH); + } + break; + default: + /* Other states don't alter LED behavior */ + break; + } +} + +void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range) +{ + if (led_id != EC_LED_ID_BATTERY_LED) + return; + + brightness_range[EC_LED_COLOR_GREEN] = MT6370_LED_BRIGHTNESS_MAX; + brightness_range[EC_LED_COLOR_RED] = MT6370_LED_BRIGHTNESS_MAX; +} + +int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness) +{ + if (led_id != EC_LED_ID_BATTERY_LED) + return EC_ERROR_INVAL; + + mt6370_led_set_brightness(LED_GREEN, brightness[EC_LED_COLOR_GREEN]); + mt6370_led_set_brightness(LED_RED, brightness[EC_LED_COLOR_RED]); + return EC_SUCCESS; +} + +/* Called by hook task every 1 sec */ +static void led_second(void) +{ + if (led_auto_control_is_enabled(EC_LED_ID_BATTERY_LED)) + led_set_battery(); +} +DECLARE_HOOK(HOOK_SECOND, led_second, HOOK_PRIO_DEFAULT); diff --git a/board/flapjack/usb_pd_policy.c b/board/flapjack/usb_pd_policy.c new file mode 120000 index 0000000000..bcb9116de7 --- /dev/null +++ b/board/flapjack/usb_pd_policy.c @@ -0,0 +1 @@ +../kukui/usb_pd_policy.c
\ No newline at end of file |