Index: sys/arm/ti/ti_gpio.c =================================================================== --- sys/arm/ti/ti_gpio.c (revision 278739) +++ sys/arm/ti/ti_gpio.c (working copy) @@ -704,7 +704,7 @@ { int pin; struct ti_gpio_softc *sc; - uint32_t flags, reg_oe, rev; + uint32_t flags, reg_oe, reg_clear, reg_set, rev; sc = device_get_softc(dev); @@ -730,12 +730,24 @@ /* Init OE register based on pads configuration. */ reg_oe = 0xffffffff; + reg_clear = 0x0; + reg_set = 0x0; for (pin = 0; pin < PINS_PER_BANK; pin++) { TI_GPIO_GET_FLAGS(dev, PINS_PER_BANK * bank + pin, &flags); - if (flags & GPIO_PIN_OUTPUT) + if (flags & GPIO_PIN_OUTPUT) { reg_oe &= ~(1UL << pin); + if (flags & GPIO_PIN_PULLDOWN) + reg_clear |= (1UL << pin); + if (flags & GPIO_PIN_PULLUP) + reg_set |= (1UL << pin); + } } + ti_gpio_write_4(sc, bank, TI_GPIO_OE, reg_oe); + if (reg_clear) + ti_gpio_write_4(sc, bank, TI_GPIO_CLEARDATAOUT, reg_clear); + if (reg_set) + ti_gpio_write_4(sc, bank, TI_GPIO_SETDATAOUT, reg_set); return (0); }