diff --git a/sys/dev/etherswitch/arswitch/arswitch_reg.c b/sys/dev/etherswitch/arswitch/arswitch_reg.c index 3eb0600fdc3e..3251da8a2eec 100644 --- a/sys/dev/etherswitch/arswitch/arswitch_reg.c +++ b/sys/dev/etherswitch/arswitch/arswitch_reg.c @@ -172,10 +172,21 @@ arswitch_readreg(device_t dev, int addr) int arswitch_writereg(device_t dev, int addr, int value) { + struct arswitch_softc *sc; + int r; + + sc = device_get_softc(dev); /* XXX Check the first write too? */ - arswitch_writereg_msb(dev, addr, value); - return (arswitch_writereg_lsb(dev, addr, value)); + if (sc->mii_lo_first) { + r = arswitch_writereg_lsb(dev, addr, value); + r |= arswitch_writereg_msb(dev, addr, value); + } else { + r = arswitch_writereg_msb(dev, addr, value); + r |= arswitch_writereg_lsb(dev, addr, value); + } + + return r; } int diff --git a/sys/dev/etherswitch/arswitch/arswitchvar.h b/sys/dev/etherswitch/arswitch/arswitchvar.h index 91d755aa4926..10a942d861cb 100644 --- a/sys/dev/etherswitch/arswitch/arswitchvar.h +++ b/sys/dev/etherswitch/arswitch/arswitchvar.h @@ -53,6 +53,7 @@ struct arswitch_softc { int is_mii; /* PHY mode is MII (XXX which PHY?) */ int page; int is_internal_switch; + int mii_lo_first; ar8x16_switch_type sc_switchtype; char *ifname[AR8X16_NUM_PHYS]; device_t miibus[AR8X16_NUM_PHYS];