> + if (aqc111_data->dpa) { > + aqc111_set_phy_speed(dev, AUTONEG_DISABLE, SPEED_100); I don't think that works. You should leave AUTONEG on, but only advertise SPEED_100 and trigger auto-neg. If you force it to 100, there is no guarantee the peer will figure out what the new link speed is. I've often seen failed auto-net result in 10/Half. So you will loose the link, making WoL pointless. > +static int aqc111_resume(struct usb_interface *intf) > +{ > + struct usbnet *dev = usb_get_intfdata(intf); > + struct aqc111_data *aqc111_data = (struct aqc111_data *)dev->data[0]; > + u8 reg8; > + u16 reg16; > + > + netif_carrier_off(dev->net); > + > + /* Power up ethernet PHY */ > + aqc111_data->phy_ops.phy_power = 1; > + aqc111_data->phy_ops.low_power = 0; > + aqc111_data->phy_ops.wol = 0; > + if (aqc111_data->dpa) { > + aqc111_read_cmd_nopm(dev, AQ_PHY_POWER, 0, 0, 1, ®8); > + if (reg8 == 0x00) { > + reg8 = 0x02; > + aqc111_write_cmd_nopm(dev, AQ_PHY_POWER, 0, 0, > + 1, ®8); > + msleep(200); > + } > + > + aq_mdio_read_cmd(dev, AQ_GLB_STD_CTRL_REG, AQ_PHY_GLOBAL_ADDR, > + 2, ®16); > + if (reg16 & AQ_PHY_LOW_POWER_MODE) { > + reg16 &= ~AQ_PHY_LOW_POWER_MODE; > + aq_mdio_write_cmd(dev, AQ_GLB_STD_CTRL_REG, > + AQ_PHY_GLOBAL_ADDR, 2, ®16); > + } > + } > + > + reg8 = 0xFF; > + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_BM_INT_MASK, > + 1, 1, ®8); > + /* Configure RX control register => start operation */ > + reg16 = aqc111_data->rxctl; > + reg16 &= ~SFR_RX_CTL_START; > + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, 2, ®16); > + > + reg16 |= SFR_RX_CTL_START; > + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, 2, ®16); > + > + aqc111_set_phy_speed(dev, aqc111_data->autoneg, > + aqc111_data->advertised_speed); > + Should that be conditional on aqc111_data->dpa? > +struct aqc111_wol_cfg { > + u8 hw_addr[6]; > + u8 flags; > + u8 rsvd[283]; > +}; Do you really need these 283 bytes?? > + > +#define WOL_CFG_SIZE sizeof(struct aqc111_wol_cfg) > + > struct aqc111_data { > u16 rxctl; > u8 rx_checksum; > @@ -228,6 +238,7 @@ struct aqc111_data { > } fw_ver; > u8 dpa; /*direct PHY access*/ > struct aqc111_phy_options phy_ops; > + struct aqc111_wol_cfg wol_cfg; Those 283 bytes make this whole structure bigger... Andrew