Index: sys/mips/atheros/ar71xx_gpio.c =================================================================== --- sys/mips/atheros/ar71xx_gpio.c +++ sys/mips/atheros/ar71xx_gpio.c @@ -581,6 +581,30 @@ ar71xx_gpio_ouput_configure(i, gpiofunc); } + for (i = 0; i <= maxpin; i++) { + char buf[32]; + int gpiomux; + int muxoff, muxbit, outfunc; + + snprintf(buf, 32, "func.%d.outmux", i); + if (resource_int_value(device_get_name(dev), + device_get_unit(dev), + buf, + &gpiomux) != 0) + continue; + + device_printf(dev, "GPIO %d: mux=%d\n", + i, + gpiomux); + + muxoff = (i / 4) * 4; + muxbit = (i % 4) * 8; + outfunc = GPIO_READ(sc, AR71XX_GPIO_OUT_FUNCTION + muxoff); + outfunc &= ~ (0xff < muxbit); + outfunc |= gpiomux << muxbit; + GPIO_WRITE(sc, AR71XX_GPIO_OUT_FUNCTION + muxoff, outfunc); + } + sc->busdev = gpiobus_attach_bus(dev); if (sc->busdev == NULL) { ar71xx_gpio_detach(dev); Index: sys/mips/atheros/ar71xxreg.h =================================================================== --- sys/mips/atheros/ar71xxreg.h +++ sys/mips/atheros/ar71xxreg.h @@ -164,6 +164,7 @@ #define GPIO_FUNC_UART_EN (1 << 8) #define GPIO_FUNC_USB_OC_EN (1 << 4) #define GPIO_FUNC_USB_CLK_EN (0) +#define AR71XX_GPIO_OUT_FUNCTION 0x2c #define AR71XX_BASE_FREQ 40000000 #define AR71XX_PLL_CPU_BASE 0x18050000