diff options
author | Anton Staaf <robotboy@chromium.org> | 2014-06-24 07:52:49 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-06-26 02:43:01 +0000 |
commit | 9ccfd4553e708a5df4be3aa18b97c75da3f6c1b9 (patch) | |
tree | bd10678c7ee25901de97260967b8bee4a849baa5 /board/falco | |
parent | 88c0ffd692b4e6d5fadc75bb15255e0684d6a1c9 (diff) | |
download | chrome-ec-9ccfd4553e708a5df4be3aa18b97c75da3f6c1b9.tar.gz |
gpio: Replace duplication in gpio declarations with X-macro file
Previously each board.h and board.c contained an enum and an array
for gpio definitons that had to be manually kept in sync, with no
compiler assistance other than that their lengths matched.
This change adds a single gpio.inc file that declares all gpio's
that a board uses and is used as an X-macro include file to
generate both the gpio_signal enum and the gpio_list array.
Signed-off-by: Anton Staaf <robotboy@chromium.org>
BRANCH=none
TEST=make buildall -j
Change-Id: If9c9feca968619a59ff9f20701359bcb9374e4da
Reviewed-on: https://chromium-review.googlesource.com/205354
Tested-by: Anton Staaf <robotboy@chromium.org>
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
Commit-Queue: Anton Staaf <robotboy@chromium.org>
Diffstat (limited to 'board/falco')
-rw-r--r-- | board/falco/board.c | 102 | ||||
-rw-r--r-- | board/falco/board.h | 79 | ||||
-rw-r--r-- | board/falco/gpio.inc | 148 |
3 files changed, 150 insertions, 179 deletions
diff --git a/board/falco/board.c b/board/falco/board.c index 97a7fccc53..a9eeee7723 100644 --- a/board/falco/board.c +++ b/board/falco/board.c @@ -31,107 +31,7 @@ #include "uart.h" #include "util.h" -/* GPIO signal list. Must match order from enum gpio_signal. */ -const struct gpio_info gpio_list[] = { - /* Inputs with interrupt handlers are first for efficiency */ - {"POWER_BUTTON_L", LM4_GPIO_A, (1<<2), GPIO_INT_BOTH_DSLEEP, - power_button_interrupt}, - {"LID_OPEN", LM4_GPIO_A, (1<<3), GPIO_INT_BOTH_DSLEEP, - lid_interrupt}, - {"AC_PRESENT", LM4_GPIO_H, (1<<3), GPIO_INT_BOTH_DSLEEP, - extpower_interrupt}, - {"PCH_BKLTEN", LM4_GPIO_M, (1<<3), GPIO_INT_BOTH, - backlight_interrupt}, - {"PCH_SLP_S0_L", LM4_GPIO_G, (1<<6), GPIO_INT_BOTH, - power_signal_interrupt}, - {"PCH_SLP_S3_L", LM4_GPIO_G, (1<<7), GPIO_INT_BOTH_DSLEEP, - power_signal_interrupt}, - {"PCH_SLP_S5_L", LM4_GPIO_H, (1<<1), GPIO_INT_BOTH_DSLEEP, - power_signal_interrupt}, - {"PCH_SLP_SUS_L", LM4_GPIO_G, (1<<3), GPIO_INT_BOTH, - power_signal_interrupt}, - {"PP1050_PGOOD", LM4_GPIO_H, (1<<4), GPIO_INT_BOTH, - power_signal_interrupt}, - {"PP1350_PGOOD", LM4_GPIO_H, (1<<6), GPIO_INT_BOTH, - power_signal_interrupt}, - {"PP5000_PGOOD", LM4_GPIO_N, (1<<0), GPIO_INT_BOTH, - power_signal_interrupt}, - {"VCORE_PGOOD", LM4_GPIO_C, (1<<6), GPIO_INT_BOTH, - power_signal_interrupt}, - {"PCH_EDP_VDD_EN", LM4_GPIO_J, (1<<1), GPIO_INT_BOTH, - lcdvcc_interrupt}, - {"RECOVERY_L", LM4_GPIO_A, (1<<5), GPIO_PULL_UP|GPIO_INT_BOTH, - switch_interrupt}, - {"WP_L", LM4_GPIO_A, (1<<4), GPIO_INT_BOTH, - switch_interrupt}, - {"JTAG_TCK", LM4_GPIO_C, (1<<0), GPIO_DEFAULT, - jtag_interrupt}, - {"UART0_RX", LM4_GPIO_A, (1<<0), GPIO_PULL_UP| - GPIO_INT_BOTH_DSLEEP, - uart_deepsleep_interrupt}, - - /* Other inputs */ - {"FAN_ALERT_L", LM4_GPIO_B, (1<<0), GPIO_INPUT, NULL}, - {"PCH_SUSWARN_L", LM4_GPIO_G, (1<<2), GPIO_INT_BOTH, NULL}, - {"USB1_OC_L", LM4_GPIO_E, (1<<7), GPIO_INPUT, NULL}, - {"USB2_OC_L", LM4_GPIO_E, (1<<0), GPIO_INPUT, NULL}, - {"BOARD_VERSION1", LM4_GPIO_Q, (1<<5), GPIO_INPUT, NULL}, - {"BOARD_VERSION2", LM4_GPIO_Q, (1<<6), GPIO_INPUT, NULL}, - {"BOARD_VERSION3", LM4_GPIO_Q, (1<<7), GPIO_INPUT, NULL}, - {"CPU_PGOOD", LM4_GPIO_C, (1<<4), GPIO_INPUT, NULL}, - - /* Outputs; all unasserted by default except for reset signals */ - {"CPU_PROCHOT", LM4_GPIO_B, (1<<1), GPIO_OUT_LOW, NULL}, - {"PP1350_EN", LM4_GPIO_H, (1<<5), GPIO_OUT_LOW, NULL}, - {"PP3300_DSW_GATED_EN", LM4_GPIO_J, (1<<3), GPIO_OUT_LOW, NULL}, - {"PP3300_DX_EN", LM4_GPIO_J, (1<<2), GPIO_OUT_LOW, NULL}, - {"PP3300_LTE_EN", LM4_GPIO_D, (1<<2), GPIO_OUT_LOW, NULL}, - {"PP3300_WLAN_EN", LM4_GPIO_J, (1<<0), GPIO_OUT_LOW, NULL}, - {"SUSP_VR_EN", LM4_GPIO_C, (1<<7), GPIO_OUT_LOW, NULL}, - {"VCORE_EN", LM4_GPIO_C, (1<<5), GPIO_OUT_LOW, NULL}, - {"PP5000_EN", LM4_GPIO_H, (1<<7), GPIO_OUT_LOW, NULL}, - {"SYS_PWROK", LM4_GPIO_H, (1<<2), GPIO_OUT_LOW, NULL}, - {"WLAN_OFF_L", LM4_GPIO_J, (1<<4), GPIO_OUT_LOW, NULL}, - {"CHARGE_L", LM4_GPIO_E, (1<<6), GPIO_OUT_LOW, NULL}, - - {"ENABLE_BACKLIGHT", LM4_GPIO_M, (1<<7), GPIO_OUT_LOW, NULL}, - {"ENABLE_TOUCHPAD", LM4_GPIO_N, (1<<1), GPIO_OUT_LOW, NULL}, - {"ENTERING_RW", LM4_GPIO_D, (1<<3), GPIO_OUT_LOW, NULL}, - {"PCH_DPWROK", LM4_GPIO_G, (1<<0), GPIO_OUT_LOW, NULL}, - /* - * HDA_SDO is technically an output, but we need to leave it as an - * input until we drive it high. So can't use open-drain (HI_Z). - */ - {"PCH_HDA_SDO", LM4_GPIO_G, (1<<1), GPIO_INPUT, NULL}, - {"PCH_WAKE_L", LM4_GPIO_F, (1<<0), GPIO_OUT_HIGH, NULL}, - {"PCH_NMI_L", LM4_GPIO_F, (1<<2), GPIO_OUT_HIGH, NULL}, - {"PCH_PWRBTN_L", LM4_GPIO_H, (1<<0), GPIO_OUT_HIGH, NULL}, - {"PCH_PWROK", LM4_GPIO_F, (1<<5), GPIO_OUT_LOW, NULL}, - /* - * PL6 is one of 4 pins on the EC which can't be used in open-drain - * mode. To work around this PCH_RCIN_L is set to an input. It will - * only be set to an output when it needs to be driven to 0. - */ - {"PCH_RCIN_L", LM4_GPIO_L, (1<<6), GPIO_INPUT, NULL}, - {"PCH_RSMRST_L", LM4_GPIO_F, (1<<1), GPIO_OUT_LOW, NULL}, - {"PCH_SMI_L", LM4_GPIO_F, (1<<4), GPIO_ODR_HIGH, NULL}, - {"TOUCHSCREEN_RESET_L", LM4_GPIO_N, (1<<7), GPIO_OUT_LOW, NULL}, - {"EC_EDP_VDD_EN", LM4_GPIO_J, (1<<5), GPIO_OUT_LOW, NULL}, - - {"LPC_CLKRUN_L", LM4_GPIO_M, (1<<2), GPIO_ODR_HIGH, NULL}, - {"USB1_ENABLE", LM4_GPIO_E, (1<<4), GPIO_OUT_LOW, NULL}, - {"USB2_ENABLE", LM4_GPIO_D, (1<<5), GPIO_OUT_LOW, NULL}, - - {"PCH_SUSACK_L", LM4_GPIO_F, (1<<3), GPIO_OUT_HIGH, NULL}, - {"PCH_RTCRST_L", LM4_GPIO_F, (1<<6), GPIO_ODR_HIGH, NULL}, - {"PCH_SRTCRST_L", LM4_GPIO_F, (1<<7), GPIO_ODR_HIGH, NULL}, - - {"PWR_LED_L", LM4_GPIO_N, (1<<6), GPIO_OUT_HIGH, NULL}, - {"KB_LED_EN", LM4_GPIO_D, (1<<4), GPIO_OUT_LOW, NULL}, - {"BAT_LED0", LM4_GPIO_D, (1<<0), GPIO_OUT_LOW, NULL}, - {"BAT_LED1", LM4_GPIO_D, (1<<1), GPIO_OUT_LOW, NULL}, -}; -BUILD_ASSERT(ARRAY_SIZE(gpio_list) == GPIO_COUNT); +#include "gpio_list.h" /* Pins with alternate functions */ const struct gpio_alt_func gpio_alt_funcs[] = { diff --git a/board/falco/board.h b/board/falco/board.h index 9cd5ec0c13..8b79534384 100644 --- a/board/falco/board.h +++ b/board/falco/board.h @@ -56,84 +56,7 @@ /* USB ports */ #define USB_PORT_COUNT 2 -/* GPIO signal definitions. */ -enum gpio_signal { - /* Inputs with interrupt handlers are first for efficiency */ - GPIO_POWER_BUTTON_L = 0, /* Power button */ - GPIO_LID_OPEN, /* Lid switch */ - GPIO_AC_PRESENT, /* AC power present */ - GPIO_PCH_BKLTEN, /* Backlight enable signal from PCH */ - GPIO_PCH_SLP_S0_L, /* SLP_S0# signal from PCH */ - GPIO_PCH_SLP_S3_L, /* SLP_S3# signal from PCH */ - GPIO_PCH_SLP_S5_L, /* SLP_S5# signal from PCH */ - GPIO_PCH_SLP_SUS_L, /* SLP_SUS# signal from PCH */ - GPIO_PP1050_PGOOD, /* Power good on 1.05V */ - GPIO_PP1350_PGOOD, /* Power good on 1.35V (DRAM) */ - GPIO_PP5000_PGOOD, /* Power good on 5V */ - GPIO_VCORE_PGOOD, /* Power good on core VR */ - GPIO_PCH_EDP_VDD_EN, /* PCH wants EDP enabled */ - GPIO_RECOVERY_L, /* Recovery signal from servo */ - GPIO_WP_L, /* Write protect input */ - GPIO_JTAG_TCK, /* JTAG clock input */ - GPIO_UART0_RX, /* UART0 RX input */ - - /* Other inputs */ - GPIO_FAN_ALERT_L, /* From thermal sensor */ - GPIO_PCH_SUSWARN_L, /* SUSWARN# signal from PCH */ - GPIO_USB1_OC_L, /* USB port overcurrent warning */ - GPIO_USB2_OC_L, /* USB port overcurrent warning */ - GPIO_BOARD_VERSION1, /* Board version stuffing resistor 1 */ - GPIO_BOARD_VERSION2, /* Board version stuffing resistor 2 */ - GPIO_BOARD_VERSION3, /* Board version stuffing resistor 3 */ - GPIO_CPU_PGOOD, /* Power good to the CPU */ - - /* Outputs */ - GPIO_CPU_PROCHOT, /* Force CPU to think it's overheated */ - GPIO_PP1350_EN, /* Enable 1.35V supply */ - GPIO_PP3300_DSW_GATED_EN, /* Enable DSW rails */ - GPIO_PP3300_DX_EN, /* Enable power to lots of peripherals */ - GPIO_PP3300_LTE_EN, /* Enable LTE radio */ - GPIO_PP3300_WLAN_EN, /* Enable WiFi power */ - GPIO_SUSP_VR_EN, /* Enable 1.05V regulator */ - GPIO_VCORE_EN, /* Stuffing option - not connected */ - GPIO_PP5000_EN, /* Enable 5V supply */ - GPIO_SYS_PWROK, /* EC thinks everything is up and ready */ - GPIO_WLAN_OFF_L, /* Disable WiFi radio */ - GPIO_CHARGE_L, /* Allow battery to charge when on AC */ - - GPIO_ENABLE_BACKLIGHT, /* Enable backlight power */ - GPIO_ENABLE_TOUCHPAD, /* Enable touchpad power */ - GPIO_ENTERING_RW, /* Indicate when EC is entering RW code */ - GPIO_PCH_DPWROK, /* Indicate when VccDSW is good */ - - GPIO_PCH_HDA_SDO, /* HDA_SDO signal to PCH; when high, ME - * ignores security descriptor */ - GPIO_PCH_WAKE_L, /* Wake signal from EC to PCH */ - GPIO_PCH_NMI_L, /* Non-maskable interrupt pin to PCH */ - GPIO_PCH_PWRBTN_L, /* Power button output to PCH */ - GPIO_PCH_PWROK, /* PWROK / APWROK signals to PCH */ - GPIO_PCH_RCIN_L, /* RCIN# line to PCH (for 8042 emulation) */ - GPIO_PCH_RSMRST_L, /* Reset PCH resume power plane logic */ - GPIO_PCH_SMI_L, /* System management interrupt to PCH */ - GPIO_TOUCHSCREEN_RESET_L, /* Reset touch screen */ - GPIO_EC_EDP_VDD_EN, /* Enable EDP (passthru from PCH) */ - GPIO_LPC_CLKRUN_L, /* Dunno. Probably important, though. */ - - GPIO_USB1_ENABLE, /* USB port 1 output power enable */ - GPIO_USB2_ENABLE, /* USB port 2 output power enable */ - - GPIO_PCH_SUSACK_L, /* Acknowledge PCH SUSWARN# signal */ - GPIO_PCH_RTCRST_L, /* Not supposed to be here */ - GPIO_PCH_SRTCRST_L, /* Not supposed to be here */ - - GPIO_PWR_LED_L, /* Power LED */ - GPIO_KB_LED_EN, /* Keyboard LED */ - GPIO_BAT_LED0, /* Battery charger status */ - GPIO_BAT_LED1, /* Battery charger status */ - - /* Number of GPIOs; not an actual GPIO */ - GPIO_COUNT -}; +#include "gpio_signal.h" /* power signal definitions */ enum power_signal { diff --git a/board/falco/gpio.inc b/board/falco/gpio.inc new file mode 100644 index 0000000000..9d405d6f12 --- /dev/null +++ b/board/falco/gpio.inc @@ -0,0 +1,148 @@ +/* -*- mode:c -*- + * + * Copyright (c) 2014 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. + */ + +/* Inputs with interrupt handlers are first for efficiency */ +/* Power button */ +GPIO(POWER_BUTTON_L, A, 2, GPIO_INT_BOTH_DSLEEP, power_button_interrupt) +/* Lid switch */ +GPIO(LID_OPEN, A, 3, GPIO_INT_BOTH_DSLEEP, lid_interrupt) +/* AC power present */ +GPIO(AC_PRESENT, H, 3, GPIO_INT_BOTH_DSLEEP, extpower_interrupt) +/* Backlight enable signal from PCH */ +GPIO(PCH_BKLTEN, M, 3, GPIO_INT_BOTH, backlight_interrupt) +/* SLP_S0# signal from PCH */ +GPIO(PCH_SLP_S0_L, G, 6, GPIO_INT_BOTH, power_signal_interrupt) +/* SLP_S3# signal from PCH */ +GPIO(PCH_SLP_S3_L, G, 7, GPIO_INT_BOTH_DSLEEP, power_signal_interrupt) +/* SLP_S5# signal from PCH */ +GPIO(PCH_SLP_S5_L, H, 1, GPIO_INT_BOTH_DSLEEP, power_signal_interrupt) +/* SLP_SUS# signal from PCH */ +GPIO(PCH_SLP_SUS_L, G, 3, GPIO_INT_BOTH, power_signal_interrupt) +/* Power good on 1.05V */ +GPIO(PP1050_PGOOD, H, 4, GPIO_INT_BOTH, power_signal_interrupt) +/* Power good on 1.35V (DRAM) */ +GPIO(PP1350_PGOOD, H, 6, GPIO_INT_BOTH, power_signal_interrupt) +/* Power good on 5V */ +GPIO(PP5000_PGOOD, N, 0, GPIO_INT_BOTH, power_signal_interrupt) +/* Power good on core VR */ +GPIO(VCORE_PGOOD, C, 6, GPIO_INT_BOTH, power_signal_interrupt) +/* PCH wants EDP enabled */ +GPIO(PCH_EDP_VDD_EN, J, 1, GPIO_INT_BOTH, lcdvcc_interrupt) +/* Recovery signal from servo */ +GPIO(RECOVERY_L, A, 5, GPIO_PULL_UP | GPIO_INT_BOTH, switch_interrupt) +/* Write protect input */ +GPIO(WP_L, A, 4, GPIO_INT_BOTH, switch_interrupt) +/* JTAG clock input */ +GPIO(JTAG_TCK, C, 0, GPIO_DEFAULT, jtag_interrupt) +/* UART0 RX input */ +GPIO(UART0_RX, A, 0, GPIO_PULL_UP | GPIO_INT_BOTH_DSLEEP, + uart_deepsleep_interrupt) + +/* Other inputs */ +/* From thermal sensor */ +GPIO(FAN_ALERT_L, B, 0, GPIO_INPUT, NULL) +/* SUSWARN# signal from PCH */ +GPIO(PCH_SUSWARN_L, G, 2, GPIO_INT_BOTH, NULL) +/* USB port overcurrent warning */ +GPIO(USB1_OC_L, E, 7, GPIO_INPUT, NULL) +/* USB port overcurrent warning */ +GPIO(USB2_OC_L, E, 0, GPIO_INPUT, NULL) +/* Board version stuffing resistor 1 */ +GPIO(BOARD_VERSION1, Q, 5, GPIO_INPUT, NULL) +/* Board version stuffing resistor 2 */ +GPIO(BOARD_VERSION2, Q, 6, GPIO_INPUT, NULL) +/* Board version stuffing resistor 3 */ +GPIO(BOARD_VERSION3, Q, 7, GPIO_INPUT, NULL) +/* Power good to the CPU */ +GPIO(CPU_PGOOD, C, 4, GPIO_INPUT, NULL) + +/* Outputs; all unasserted by default except for reset signals */ +/* Force CPU to think it's overheated */ +GPIO(CPU_PROCHOT, B, 1, GPIO_OUT_LOW, NULL) +/* Enable 1.35V supply */ +GPIO(PP1350_EN, H, 5, GPIO_OUT_LOW, NULL) +/* Enable DSW rails */ +GPIO(PP3300_DSW_GATED_EN, J, 3, GPIO_OUT_LOW, NULL) +/* Enable power to lots of peripherals */ +GPIO(PP3300_DX_EN, J, 2, GPIO_OUT_LOW, NULL) +/* Enable LTE radio */ +GPIO(PP3300_LTE_EN, D, 2, GPIO_OUT_LOW, NULL) +/* Enable WiFi power */ +GPIO(PP3300_WLAN_EN, J, 0, GPIO_OUT_LOW, NULL) +/* Enable 1.05V regulator */ +GPIO(SUSP_VR_EN, C, 7, GPIO_OUT_LOW, NULL) +/* Stuffing option - not connected */ +GPIO(VCORE_EN, C, 5, GPIO_OUT_LOW, NULL) +/* Enable 5V supply */ +GPIO(PP5000_EN, H, 7, GPIO_OUT_LOW, NULL) +/* EC thinks everything is up and ready */ +GPIO(SYS_PWROK, H, 2, GPIO_OUT_LOW, NULL) +/* Disable WiFi radio */ +GPIO(WLAN_OFF_L, J, 4, GPIO_OUT_LOW, NULL) +/* Allow battery to charge when on AC */ +GPIO(CHARGE_L, E, 6, GPIO_OUT_LOW, NULL) + +/* Enable backlight power */ +GPIO(ENABLE_BACKLIGHT, M, 7, GPIO_OUT_LOW, NULL) +/* Enable touchpad power */ +GPIO(ENABLE_TOUCHPAD, N, 1, GPIO_OUT_LOW, NULL) +/* Indicate when EC is entering RW code */ +GPIO(ENTERING_RW, D, 3, GPIO_OUT_LOW, NULL) +/* Indicate when VccDSW is good */ +GPIO(PCH_DPWROK, G, 0, GPIO_OUT_LOW, NULL) +/* + * HDA_SDO is technically an output, but we need to leave it as an + * input until we drive it high. So can't use open-drain (HI_Z). + */ +/* HDA_SDO signal to PCH; when high, ME ignores security descriptor */ +GPIO(PCH_HDA_SDO, G, 1, GPIO_INPUT, NULL) +/* Wake signal from EC to PCH */ +GPIO(PCH_WAKE_L, F, 0, GPIO_OUT_HIGH, NULL) +/* Non-maskable interrupt pin to PCH */ +GPIO(PCH_NMI_L, F, 2, GPIO_OUT_HIGH, NULL) +/* Power button output to PCH */ +GPIO(PCH_PWRBTN_L, H, 0, GPIO_OUT_HIGH, NULL) +/* PWROK / APWROK signals to PCH */ +GPIO(PCH_PWROK, F, 5, GPIO_OUT_LOW, NULL) +/* + * PL6 is one of 4 pins on the EC which can't be used in open-drain + * mode. To work around this PCH_RCIN_L is set to an input. It will + * only be set to an output when it needs to be driven to 0. + */ +/* RCIN# line to PCH (for 8042 emulation) */ +GPIO(PCH_RCIN_L, L, 6, GPIO_INPUT, NULL) +/* Reset PCH resume power plane logic */ +GPIO(PCH_RSMRST_L, F, 1, GPIO_OUT_LOW, NULL) +/* System management interrupt to PCH */ +GPIO(PCH_SMI_L, F, 4, GPIO_ODR_HIGH, NULL) +/* Reset touch screen */ +GPIO(TOUCHSCREEN_RESET_L, N, 7, GPIO_OUT_LOW, NULL) +/* Enable EDP (passthru from PCH) */ +GPIO(EC_EDP_VDD_EN, J, 5, GPIO_OUT_LOW, NULL) + +/* Dunno. Probably important, though. */ +GPIO(LPC_CLKRUN_L, M, 2, GPIO_ODR_HIGH, NULL) +/* USB port 1 output power enable */ +GPIO(USB1_ENABLE, E, 4, GPIO_OUT_LOW, NULL) +/* USB port 2 output power enable */ +GPIO(USB2_ENABLE, D, 5, GPIO_OUT_LOW, NULL) + +/* Acknowledge PCH SUSWARN# signal */ +GPIO(PCH_SUSACK_L, F, 3, GPIO_OUT_HIGH, NULL) +/* Not supposed to be here */ +GPIO(PCH_RTCRST_L, F, 6, GPIO_ODR_HIGH, NULL) +/* Not supposed to be here */ +GPIO(PCH_SRTCRST_L, F, 7, GPIO_ODR_HIGH, NULL) + +/* Power LED */ +GPIO(PWR_LED_L, N, 6, GPIO_OUT_HIGH, NULL) +/* Keyboard LED */ +GPIO(KB_LED_EN, D, 4, GPIO_OUT_LOW, NULL) +/* Battery charger status */ +GPIO(BAT_LED0, D, 0, GPIO_OUT_LOW, NULL) +/* Battery charger status */ +GPIO(BAT_LED1, D, 1, GPIO_OUT_LOW, NULL) |