Add check to prevent duplicate PIN assignments

All PIN() assignments in board/$BOARD/gpio.inc must be unique,
since otherwise you're just creating duplicate names and table
entries for the same core interrupt and may not be initializing
things the way you think.

BUG=none
BRANCH=none
TEST=make buildall; test on Cr50 hardware

Also verified that the image size is exactly the same before an
after this CL.

Change-Id: Ifb1805a010905f67fc5c0d246b6252af73715409
Signed-off-by: Bill Richardson <wfrichar@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/383773
Reviewed-by: Randall Spangler <rspangler@chromium.org>
This commit is contained in:
Bill Richardson
2016-09-01 17:57:05 -07:00
committed by chrome-bot
parent d9048f0896
commit eb10d4518b
2 changed files with 27 additions and 12 deletions

View File

@@ -9,18 +9,18 @@
* Note: Those with interrupt handlers must be declared first. */
GPIO_INT(LID_OPEN, PIN(0, 0), GPIO_INT_BOTH, lid_interrupt)
GPIO_INT(POWER_BUTTON_L, PIN(0, 0), GPIO_INT_BOTH, power_button_interrupt)
GPIO_INT(AC_PRESENT, PIN(0, 0), GPIO_INT_BOTH, extpower_interrupt)
GPIO_INT(BUTTON_VOLUME_DOWN_L, PIN(0, 0), GPIO_INT_BOTH, button_interrupt)
GPIO_INT(BUTTON_VOLUME_UP, PIN(0, 0), GPIO_INT_BOTH, button_interrupt)
GPIO_INT(CHARGE_DONE, PIN(0, 0), GPIO_INT_BOTH, inductive_charging_interrupt)
GPIO_INT(POWER_BUTTON_L, PIN(0, 1), GPIO_INT_BOTH, power_button_interrupt)
GPIO_INT(AC_PRESENT, PIN(0, 2), GPIO_INT_BOTH, extpower_interrupt)
GPIO_INT(BUTTON_VOLUME_DOWN_L, PIN(0, 3), GPIO_INT_BOTH, button_interrupt)
GPIO_INT(BUTTON_VOLUME_UP, PIN(0, 4), GPIO_INT_BOTH, button_interrupt)
GPIO_INT(CHARGE_DONE, PIN(0, 5), GPIO_INT_BOTH, inductive_charging_interrupt)
GPIO(EC_INT_L, PIN(0, 0), 0)
GPIO(WP, PIN(0, 0), 0)
GPIO(ENTERING_RW, PIN(0, 0), 0)
GPIO(PCH_BKLTEN, PIN(0, 0), 0)
GPIO(ENABLE_BACKLIGHT, PIN(0, 0), 0)
GPIO(EC_INT_L, PIN(0, 6), 0)
GPIO(WP, PIN(0, 7), 0)
GPIO(ENTERING_RW, PIN(0, 8), 0)
GPIO(PCH_BKLTEN, PIN(0, 9), 0)
GPIO(ENABLE_BACKLIGHT, PIN(0, 10), 0)
/* Inductive charging */
GPIO(CHARGE_EN, PIN(0, 0), 0)
GPIO(BASE_CHG_VDD_EN, PIN(0, 0), 0)
GPIO(CHARGE_EN, PIN(0, 11), 0)
GPIO(BASE_CHG_VDD_EN, PIN(0, 12), 0)

View File

@@ -37,3 +37,18 @@ const int gpio_ih_count = ARRAY_SIZE(gpio_irq_handlers);
#define GPIO_INT(name, pin, flags, signal) \
BUILD_ASSERT(GPIO_##name < ARRAY_SIZE(gpio_irq_handlers));
#include "gpio.wrap"
/*
* All PIN(...) assignments must be unique, since otherwise you're just
* creating duplicate names for the same thing, and may not always be
* initializing them the way you think.
*/
#define GPIO(name, pin, flags) pin
#define GPIO_INT(name, pin, flags, signal) pin
/*
* The compiler will complain if we use the same name twice. The linker ignores
* anything that gets by.
*/
#define PIN(a, b...) static const int _pin_ ## a ## _ ## b \
__attribute__((unused, section(".unused"))) = __LINE__;
#include "gpio.wrap"