ARM: when setting a GPIO to put, set the value, then the direction
We saw a problem on x86 last year in which setting direction, then value, glitched the output and caused problems. Change this code to set the output, then the direction. BUG=chrome-os-partner:19420 TEST=Build and boot on pit. BRANCH=None Change-Id: Ie40786139b0b496e22a80dc3dd712b6adff03d1e Signed-off-by: Ronald G. Minnich <rminnich@google.com> Reviewed-on: https://gerrit.chromium.org/gerrit/59087 Reviewed-by: David Hendricks <dhendrix@chromium.org> Commit-Queue: Ronald G. Minnich <rminnich@chromium.org> Tested-by: Ronald G. Minnich <rminnich@chromium.org>
This commit is contained in:
parent
2682fa5a05
commit
26d60b8958
2 changed files with 4 additions and 4 deletions
|
|
@ -170,14 +170,14 @@ int gpio_direction_output(unsigned gpio, int value)
|
|||
unsigned int val;
|
||||
struct gpio_bank *bank = gpio_get_bank(gpio);
|
||||
|
||||
gpio_cfg_pin(gpio, GPIO_OUTPUT);
|
||||
|
||||
val = readl(&bank->dat);
|
||||
val &= ~DAT_MASK(GPIO_BIT(gpio));
|
||||
if (value)
|
||||
val |= DAT_SET(GPIO_BIT(gpio));
|
||||
writel(val, &bank->dat);
|
||||
|
||||
gpio_cfg_pin(gpio, GPIO_OUTPUT);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -170,14 +170,14 @@ int gpio_direction_output(unsigned gpio, int value)
|
|||
unsigned int val;
|
||||
struct gpio_bank *bank = gpio_get_bank(gpio);
|
||||
|
||||
gpio_cfg_pin(gpio, GPIO_OUTPUT);
|
||||
|
||||
val = readl(&bank->dat);
|
||||
val &= ~DAT_MASK(GPIO_BIT(gpio));
|
||||
if (value)
|
||||
val |= DAT_SET(GPIO_BIT(gpio));
|
||||
writel(val, &bank->dat);
|
||||
|
||||
gpio_cfg_pin(gpio, GPIO_OUTPUT);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue