summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/gpio.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/lib/gpio.c b/src/lib/gpio.c
index 3f3ae60d91..801a3b3b9c 100644
--- a/src/lib/gpio.c
+++ b/src/lib/gpio.c
@@ -114,6 +114,12 @@ uint32_t _gpio_base3_value(const gpio_t gpio[], int num_gpio, int binary_first)
printk(BIOS_DEBUG, "%c ", tristate_char[temp]);
result = (result * 3) + temp;
+ /* Disable pull to avoid wasting power. For HiZ we leave the
+ pull-down enabled, since letting them float freely back and
+ forth may waste power in the SoC's GPIO input logic. */
+ if (temp != Z)
+ gpio_input(gpio[index]);
+
/*
* For binary_first we keep track of the normal ternary result
* and whether we found any pin that was a Z. We also determine
@@ -159,10 +165,6 @@ uint32_t _gpio_base3_value(const gpio_t gpio[], int num_gpio, int binary_first)
printk(BIOS_DEBUG, "= %d (%s base3 number system)\n", result,
binary_first ? "binary_first" : "standard");
- /* Disable pull up / pull down to conserve power */
- for (index = 0; index < num_gpio; ++index)
- gpio_input(gpio[index]);
-
return result;
}