amdgpio: fix reading status of input pins

AMD FCH GPIO controller uses different bits for setting the output level
and for reporting the input level.

MFC after:	2 weeks
This commit is contained in:
avg 2019-05-24 06:06:42 +00:00
parent 2392f28d2e
commit 21d2e002bb

View File

@ -264,10 +264,17 @@ amdgpio_pin_get(device_t dev, uint32_t pin, unsigned int *value)
reg = AMDGPIO_PIN_REGISTER(pin);
val = amdgpio_read_4(sc, reg);
if (val & BIT(OUTPUT_VALUE_OFF))
*value = GPIO_PIN_HIGH;
else
*value = GPIO_PIN_LOW;
if ((sc->sc_gpio_pins[pin].gp_flags & GPIO_PIN_OUTPUT) != 0) {
if (val & BIT(OUTPUT_VALUE_OFF))
*value = GPIO_PIN_HIGH;
else
*value = GPIO_PIN_LOW;
} else {
if (val & BIT(PIN_STS_OFF))
*value = GPIO_PIN_HIGH;
else
*value = GPIO_PIN_LOW;
}
dprintf("pin %d value 0x%x\n", pin, *value);