summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaka Ni <nigang@huaqin.corp-partner.google.com>2019-01-25 11:20:04 +0800
committerchrome-bot <chrome-bot@chromium.org>2019-01-29 04:21:12 -0800
commit4106af71698211452933bf2bcc7726c49be6709f (patch)
tree3d55a235c0de9e1a582a43bec2eaa2ffbde41102
parentcee795736f2c0e241f2e50066cfd4150443a097d (diff)
downloadchrome-ec-4106af71698211452933bf2bcc7726c49be6709f.tar.gz
flapjack: seperate gpio.inc and led.c from kukui.
There's a big difference between Kukui's GPIOs and Flapjck's. The LED number and behavior of them are different too. Kukui has differenct HW revisions and so does Flapajck. To avoid too many netsted "#if BOARD_REV" and "#ifdef BOARD_FLAPJACK", seperate gpio.inc and led.c from kukui. BUG=b:123376617 BRANCH=None TEST=1:)BOOTBLOCK=... make BOARD=kukui -j flash_ec; and see AP boots. 2:)BOOTBLOCK=... make BOARD=flapajck -j flash_ec; and see AP boots. Change-Id: I5a6e3c334aff8d4c7253e62ff47ba8e141d29d30 Reviewed-on: https://chromium-review.googlesource.com/1436714 Commit-Ready: Kaka Ni <nigang@huaqin.corp-partner.google.com> Tested-by: Kaka Ni <nigang@huaqin.corp-partner.google.com> Reviewed-by: Kaka Ni <nigang@huaqin.corp-partner.google.com> Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
l---------board/flapjack1
l---------board/flapjack/battery.c1
l---------board/flapjack/board.c1
l---------board/flapjack/board.h1
l---------board/flapjack/build.mk1
l---------board/flapjack/ec.tasklist1
l---------board/flapjack/emmc.c1
-rw-r--r--board/flapjack/gpio.inc127
-rw-r--r--board/flapjack/led.c90
l---------board/flapjack/usb_pd_policy.c1
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