diff options
| author | Jeff Garzik <jeff@garzik.org> | 2006-04-18 04:54:00 -0400 | 
|---|---|---|
| committer | Jeff Garzik <jeff@garzik.org> | 2006-04-18 04:54:00 -0400 | 
| commit | 4741c336d27dec3ea68a35659abb8dc82b142388 (patch) | |
| tree | a8576df82129354b77b0144c480c446ec7aba7b2 /drivers/usb/net/asix.c | |
| parent | 26ec634c31a11a003040e10b4d650495158632fd (diff) | |
| parent | a9a5cd5d2a57fb76dbae2115450f777b69beccf7 (diff) | |
Merge branch 'master'
Diffstat (limited to 'drivers/usb/net/asix.c')
| -rw-r--r-- | drivers/usb/net/asix.c | 327 | 
1 files changed, 163 insertions, 164 deletions
| diff --git a/drivers/usb/net/asix.c b/drivers/usb/net/asix.c index 3094970615cb..12b599a0b539 100644 --- a/drivers/usb/net/asix.c +++ b/drivers/usb/net/asix.c | |||
| @@ -37,7 +37,6 @@ | |||
| 37 | 37 | ||
| 38 | #include "usbnet.h" | 38 | #include "usbnet.h" | 
| 39 | 39 | ||
| 40 | |||
| 41 | /* ASIX AX8817X based USB 2.0 Ethernet Devices */ | 40 | /* ASIX AX8817X based USB 2.0 Ethernet Devices */ | 
| 42 | 41 | ||
| 43 | #define AX_CMD_SET_SW_MII 0x06 | 42 | #define AX_CMD_SET_SW_MII 0x06 | 
| @@ -109,7 +108,7 @@ | |||
| 109 | #define AX_EEPROM_MAGIC 0xdeadbeef | 108 | #define AX_EEPROM_MAGIC 0xdeadbeef | 
| 110 | 109 | ||
| 111 | /* This structure cannot exceed sizeof(unsigned long [5]) AKA 20 bytes */ | 110 | /* This structure cannot exceed sizeof(unsigned long [5]) AKA 20 bytes */ | 
| 112 | struct ax8817x_data { | 111 | struct asix_data { | 
| 113 | u8 multi_filter[AX_MCAST_FILTER_SIZE]; | 112 | u8 multi_filter[AX_MCAST_FILTER_SIZE]; | 
| 114 | }; | 113 | }; | 
| 115 | 114 | ||
| @@ -121,7 +120,7 @@ struct ax88172_int_data { | |||
| 121 | u16 res3; | 120 | u16 res3; | 
| 122 | } __attribute__ ((packed)); | 121 | } __attribute__ ((packed)); | 
| 123 | 122 | ||
| 124 | static int ax8817x_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index, | 123 | static int asix_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index, | 
| 125 | u16 size, void *data) | 124 | u16 size, void *data) | 
| 126 | { | 125 | { | 
| 127 | return usb_control_msg( | 126 | return usb_control_msg( | 
| @@ -136,7 +135,7 @@ static int ax8817x_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index, | |||
| 136 | USB_CTRL_GET_TIMEOUT); | 135 | USB_CTRL_GET_TIMEOUT); | 
| 137 | } | 136 | } | 
| 138 | 137 | ||
| 139 | static int ax8817x_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index, | 138 | static int asix_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index, | 
| 140 | u16 size, void *data) | 139 | u16 size, void *data) | 
| 141 | { | 140 | { | 
| 142 | return usb_control_msg( | 141 | return usb_control_msg( | 
| @@ -151,19 +150,80 @@ static int ax8817x_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index, | |||
| 151 | USB_CTRL_SET_TIMEOUT); | 150 | USB_CTRL_SET_TIMEOUT); | 
| 152 | } | 151 | } | 
| 153 | 152 | ||
| 154 | static void ax8817x_async_cmd_callback(struct urb *urb, struct pt_regs *regs) | 153 | static void asix_async_cmd_callback(struct urb *urb, struct pt_regs *regs) | 
| 155 | { | 154 | { | 
| 156 | struct usb_ctrlrequest *req = (struct usb_ctrlrequest *)urb->context; | 155 | struct usb_ctrlrequest *req = (struct usb_ctrlrequest *)urb->context; | 
| 157 | 156 | ||
| 158 | if (urb->status < 0) | 157 | if (urb->status < 0) | 
| 159 | printk(KERN_DEBUG "ax8817x_async_cmd_callback() failed with %d", | 158 | printk(KERN_DEBUG "asix_async_cmd_callback() failed with %d", | 
| 160 | urb->status); | 159 | urb->status); | 
| 161 | 160 | ||
| 162 | kfree(req); | 161 | kfree(req); | 
| 163 | usb_free_urb(urb); | 162 | usb_free_urb(urb); | 
| 164 | } | 163 | } | 
| 165 | 164 | ||
| 166 | static void ax8817x_status(struct usbnet *dev, struct urb *urb) | 165 | static inline int asix_set_sw_mii(struct usbnet *dev) | 
| 166 | { | ||
| 167 | int ret; | ||
| 168 | ret = asix_write_cmd(dev, AX_CMD_SET_SW_MII, 0x0000, 0, 0, NULL); | ||
| 169 | if (ret < 0) | ||
| 170 | devdbg(dev, "Failed to enable software MII access"); | ||
| 171 | return ret; | ||
| 172 | } | ||
| 173 | |||
| 174 | static inline int asix_set_hw_mii(struct usbnet *dev) | ||
| 175 | { | ||
| 176 | int ret; | ||
| 177 | ret = asix_write_cmd(dev, AX_CMD_SET_HW_MII, 0x0000, 0, 0, NULL); | ||
| 178 | if (ret < 0) | ||
| 179 | devdbg(dev, "Failed to enable hardware MII access"); | ||
| 180 | return ret; | ||
| 181 | } | ||
| 182 | |||
| 183 | static inline int asix_get_phyid(struct usbnet *dev) | ||
| 184 | { | ||
| 185 | int ret = 0; | ||
| 186 | void *buf; | ||
| 187 | |||
| 188 | buf = kmalloc(2, GFP_KERNEL); | ||
| 189 | if (!buf) | ||
| 190 | goto out1; | ||
| 191 | |||
| 192 | if ((ret = asix_read_cmd(dev, AX_CMD_READ_PHY_ID, | ||
| 193 | 0, 0, 2, buf)) < 2) { | ||
| 194 | devdbg(dev, "Error reading PHYID register: %02x", ret); | ||
| 195 | goto out2; | ||
| 196 | } | ||
| 197 | ret = *((u8 *)buf + 1); | ||
| 198 | out2: | ||
| 199 | kfree(buf); | ||
| 200 | out1: | ||
| 201 | return ret; | ||
| 202 | } | ||
| 203 | |||
| 204 | static int asix_sw_reset(struct usbnet *dev, u8 flags) | ||
| 205 | { | ||
| 206 | int ret; | ||
| 207 | |||
| 208 | ret = asix_write_cmd(dev, AX_CMD_SW_RESET, flags, 0, 0, NULL); | ||
| 209 | if (ret < 0) | ||
| 210 | devdbg(dev,"Failed to send software reset: %02x", ret); | ||
| 211 | |||
| 212 | return ret; | ||
| 213 | } | ||
| 214 | |||
| 215 | static int asix_write_rx_ctl(struct usbnet *dev, u16 mode) | ||
| 216 | { | ||
| 217 | int ret; | ||
| 218 | |||
| 219 | ret = asix_write_cmd(dev, AX_CMD_WRITE_RX_CTL, mode, 0, 0, NULL); | ||
| 220 | if (ret < 0) | ||
| 221 | devdbg(dev, "Failed to write RX_CTL mode: %02x", ret); | ||
| 222 | |||
| 223 | return ret; | ||
| 224 | } | ||
| 225 | |||
| 226 | static void asix_status(struct usbnet *dev, struct urb *urb) | ||
| 167 | { | 227 | { | 
| 168 | struct ax88172_int_data *event; | 228 | struct ax88172_int_data *event; | 
| 169 | int link; | 229 | int link; | 
| @@ -179,12 +239,12 @@ static void ax8817x_status(struct usbnet *dev, struct urb *urb) | |||
| 179 | usbnet_defer_kevent (dev, EVENT_LINK_RESET ); | 239 | usbnet_defer_kevent (dev, EVENT_LINK_RESET ); | 
| 180 | } else | 240 | } else | 
| 181 | netif_carrier_off(dev->net); | 241 | netif_carrier_off(dev->net); | 
| 182 | devdbg(dev, "ax8817x - Link Status is: %d", link); | 242 | devdbg(dev, "Link Status is: %d", link); | 
| 183 | } | 243 | } | 
| 184 | } | 244 | } | 
| 185 | 245 | ||
| 186 | static void | 246 | static void | 
| 187 | ax8817x_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, u16 index, | 247 | asix_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, u16 index, | 
| 188 | u16 size, void *data) | 248 | u16 size, void *data) | 
| 189 | { | 249 | { | 
| 190 | struct usb_ctrlrequest *req; | 250 | struct usb_ctrlrequest *req; | 
| @@ -211,7 +271,7 @@ ax8817x_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, u16 index, | |||
| 211 | usb_fill_control_urb(urb, dev->udev, | 271 | usb_fill_control_urb(urb, dev->udev, | 
| 212 | usb_sndctrlpipe(dev->udev, 0), | 272 | usb_sndctrlpipe(dev->udev, 0), | 
| 213 | (void *)req, data, size, | 273 | (void *)req, data, size, | 
| 214 | ax8817x_async_cmd_callback, req); | 274 | asix_async_cmd_callback, req); | 
| 215 | 275 | ||
| 216 | if((status = usb_submit_urb(urb, GFP_ATOMIC)) < 0) { | 276 | if((status = usb_submit_urb(urb, GFP_ATOMIC)) < 0) { | 
| 217 | deverr(dev, "Error submitting the control message: status=%d", | 277 | deverr(dev, "Error submitting the control message: status=%d", | 
| @@ -221,10 +281,10 @@ ax8817x_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, u16 index, | |||
| 221 | } | 281 | } | 
| 222 | } | 282 | } | 
| 223 | 283 | ||
| 224 | static void ax8817x_set_multicast(struct net_device *net) | 284 | static void asix_set_multicast(struct net_device *net) | 
| 225 | { | 285 | { | 
| 226 | struct usbnet *dev = netdev_priv(net); | 286 | struct usbnet *dev = netdev_priv(net); | 
| 227 | struct ax8817x_data *data = (struct ax8817x_data *)&dev->data; | 287 | struct asix_data *data = (struct asix_data *)&dev->data; | 
| 228 | u8 rx_ctl = 0x8c; | 288 | u8 rx_ctl = 0x8c; | 
| 229 | 289 | ||
| 230 | if (net->flags & IFF_PROMISC) { | 290 | if (net->flags & IFF_PROMISC) { | 
| @@ -255,53 +315,51 @@ static void ax8817x_set_multicast(struct net_device *net) | |||
| 255 | mc_list = mc_list->next; | 315 | mc_list = mc_list->next; | 
| 256 | } | 316 | } | 
| 257 | 317 | ||
| 258 | ax8817x_write_cmd_async(dev, AX_CMD_WRITE_MULTI_FILTER, 0, 0, | 318 | asix_write_cmd_async(dev, AX_CMD_WRITE_MULTI_FILTER, 0, 0, | 
| 259 | AX_MCAST_FILTER_SIZE, data->multi_filter); | 319 | AX_MCAST_FILTER_SIZE, data->multi_filter); | 
| 260 | 320 | ||
| 261 | rx_ctl |= 0x10; | 321 | rx_ctl |= 0x10; | 
| 262 | } | 322 | } | 
| 263 | 323 | ||
| 264 | ax8817x_write_cmd_async(dev, AX_CMD_WRITE_RX_CTL, rx_ctl, 0, 0, NULL); | 324 | asix_write_cmd_async(dev, AX_CMD_WRITE_RX_CTL, rx_ctl, 0, 0, NULL); | 
| 265 | } | 325 | } | 
| 266 | 326 | ||
| 267 | static int ax8817x_mdio_read(struct net_device *netdev, int phy_id, int loc) | 327 | static int asix_mdio_read(struct net_device *netdev, int phy_id, int loc) | 
| 268 | { | 328 | { | 
| 269 | struct usbnet *dev = netdev_priv(netdev); | 329 | struct usbnet *dev = netdev_priv(netdev); | 
| 270 | u16 res; | 330 | u16 res; | 
| 271 | u8 buf[1]; | ||
| 272 | 331 | ||
| 273 | ax8817x_write_cmd(dev, AX_CMD_SET_SW_MII, 0, 0, 0, &buf); | 332 | asix_set_sw_mii(dev); | 
| 274 | ax8817x_read_cmd(dev, AX_CMD_READ_MII_REG, phy_id, | 333 | asix_read_cmd(dev, AX_CMD_READ_MII_REG, phy_id, | 
| 275 | (__u16)loc, 2, (u16 *)&res); | 334 | (__u16)loc, 2, (u16 *)&res); | 
| 276 | ax8817x_write_cmd(dev, AX_CMD_SET_HW_MII, 0, 0, 0, &buf); | 335 | asix_set_hw_mii(dev); | 
| 277 | 336 | ||
| 278 | return res & 0xffff; | 337 | return res & 0xffff; | 
| 279 | } | 338 | } | 
| 280 | 339 | ||
| 281 | /* same as above, but converts resulting value to cpu byte order */ | 340 | /* same as above, but converts resulting value to cpu byte order */ | 
| 282 | static int ax8817x_mdio_read_le(struct net_device *netdev, int phy_id, int loc) | 341 | static int asix_mdio_read_le(struct net_device *netdev, int phy_id, int loc) | 
| 283 | { | 342 | { | 
| 284 | return le16_to_cpu(ax8817x_mdio_read(netdev,phy_id, loc)); | 343 | return le16_to_cpu(asix_mdio_read(netdev,phy_id, loc)); | 
| 285 | } | 344 | } | 
| 286 | 345 | ||
| 287 | static void | 346 | static void | 
| 288 | ax8817x_mdio_write(struct net_device *netdev, int phy_id, int loc, int val) | 347 | asix_mdio_write(struct net_device *netdev, int phy_id, int loc, int val) | 
| 289 | { | 348 | { | 
| 290 | struct usbnet *dev = netdev_priv(netdev); | 349 | struct usbnet *dev = netdev_priv(netdev); | 
| 291 | u16 res = val; | 350 | u16 res = val; | 
| 292 | u8 buf[1]; | ||
| 293 | 351 | ||
| 294 | ax8817x_write_cmd(dev, AX_CMD_SET_SW_MII, 0, 0, 0, &buf); | 352 | asix_set_sw_mii(dev); | 
| 295 | ax8817x_write_cmd(dev, AX_CMD_WRITE_MII_REG, phy_id, | 353 | asix_write_cmd(dev, AX_CMD_WRITE_MII_REG, phy_id, | 
| 296 | (__u16)loc, 2, (u16 *)&res); | 354 | (__u16)loc, 2, (u16 *)&res); | 
| 297 | ax8817x_write_cmd(dev, AX_CMD_SET_HW_MII, 0, 0, 0, &buf); | 355 | asix_set_hw_mii(dev); | 
| 298 | } | 356 | } | 
| 299 | 357 | ||
| 300 | /* same as above, but converts new value to le16 byte order before writing */ | 358 | /* same as above, but converts new value to le16 byte order before writing */ | 
| 301 | static void | 359 | static void | 
| 302 | ax8817x_mdio_write_le(struct net_device *netdev, int phy_id, int loc, int val) | 360 | asix_mdio_write_le(struct net_device *netdev, int phy_id, int loc, int val) | 
| 303 | { | 361 | { | 
| 304 | ax8817x_mdio_write( netdev, phy_id, loc, cpu_to_le16(val) ); | 362 | asix_mdio_write( netdev, phy_id, loc, cpu_to_le16(val) ); | 
| 305 | } | 363 | } | 
| 306 | 364 | ||
| 307 | static int ax88172_link_reset(struct usbnet *dev) | 365 | static int ax88172_link_reset(struct usbnet *dev) | 
| @@ -312,23 +370,23 @@ static int ax88172_link_reset(struct usbnet *dev) | |||
| 312 | u8 mode; | 370 | u8 mode; | 
| 313 | 371 | ||
| 314 | mode = AX_MEDIUM_TX_ABORT_ALLOW | AX_MEDIUM_FLOW_CONTROL_EN; | 372 | mode = AX_MEDIUM_TX_ABORT_ALLOW | AX_MEDIUM_FLOW_CONTROL_EN; | 
| 315 | lpa = ax8817x_mdio_read_le(dev->net, dev->mii.phy_id, MII_LPA); | 373 | lpa = asix_mdio_read_le(dev->net, dev->mii.phy_id, MII_LPA); | 
| 316 | adv = ax8817x_mdio_read_le(dev->net, dev->mii.phy_id, MII_ADVERTISE); | 374 | adv = asix_mdio_read_le(dev->net, dev->mii.phy_id, MII_ADVERTISE); | 
| 317 | res = mii_nway_result(lpa|adv); | 375 | res = mii_nway_result(lpa|adv); | 
| 318 | if (res & LPA_DUPLEX) | 376 | if (res & LPA_DUPLEX) | 
| 319 | mode |= AX_MEDIUM_FULL_DUPLEX; | 377 | mode |= AX_MEDIUM_FULL_DUPLEX; | 
| 320 | ax8817x_write_cmd(dev, AX_CMD_WRITE_MEDIUM_MODE, mode, 0, 0, NULL); | 378 | asix_write_cmd(dev, AX_CMD_WRITE_MEDIUM_MODE, mode, 0, 0, NULL); | 
| 321 | 379 | ||
| 322 | return 0; | 380 | return 0; | 
| 323 | } | 381 | } | 
| 324 | 382 | ||
| 325 | static void | 383 | static void | 
| 326 | ax8817x_get_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo) | 384 | asix_get_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo) | 
| 327 | { | 385 | { | 
| 328 | struct usbnet *dev = netdev_priv(net); | 386 | struct usbnet *dev = netdev_priv(net); | 
| 329 | u8 opt; | 387 | u8 opt; | 
| 330 | 388 | ||
| 331 | if (ax8817x_read_cmd(dev, AX_CMD_READ_MONITOR_MODE, 0, 0, 1, &opt) < 0) { | 389 | if (asix_read_cmd(dev, AX_CMD_READ_MONITOR_MODE, 0, 0, 1, &opt) < 0) { | 
| 332 | wolinfo->supported = 0; | 390 | wolinfo->supported = 0; | 
| 333 | wolinfo->wolopts = 0; | 391 | wolinfo->wolopts = 0; | 
| 334 | return; | 392 | return; | 
| @@ -344,7 +402,7 @@ ax8817x_get_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo) | |||
| 344 | } | 402 | } | 
| 345 | 403 | ||
| 346 | static int | 404 | static int | 
| 347 | ax8817x_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo) | 405 | asix_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo) | 
| 348 | { | 406 | { | 
| 349 | struct usbnet *dev = netdev_priv(net); | 407 | struct usbnet *dev = netdev_priv(net); | 
| 350 | u8 opt = 0; | 408 | u8 opt = 0; | 
| @@ -357,19 +415,19 @@ ax8817x_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo) | |||
| 357 | if (opt != 0) | 415 | if (opt != 0) | 
| 358 | opt |= AX_MONITOR_MODE; | 416 | opt |= AX_MONITOR_MODE; | 
| 359 | 417 | ||
| 360 | if (ax8817x_write_cmd(dev, AX_CMD_WRITE_MONITOR_MODE, | 418 | if (asix_write_cmd(dev, AX_CMD_WRITE_MONITOR_MODE, | 
| 361 | opt, 0, 0, &buf) < 0) | 419 | opt, 0, 0, &buf) < 0) | 
| 362 | return -EINVAL; | 420 | return -EINVAL; | 
| 363 | 421 | ||
| 364 | return 0; | 422 | return 0; | 
| 365 | } | 423 | } | 
| 366 | 424 | ||
| 367 | static int ax8817x_get_eeprom_len(struct net_device *net) | 425 | static int asix_get_eeprom_len(struct net_device *net) | 
| 368 | { | 426 | { | 
| 369 | return AX_EEPROM_LEN; | 427 | return AX_EEPROM_LEN; | 
| 370 | } | 428 | } | 
| 371 | 429 | ||
| 372 | static int ax8817x_get_eeprom(struct net_device *net, | 430 | static int asix_get_eeprom(struct net_device *net, | 
| 373 | struct ethtool_eeprom *eeprom, u8 *data) | 431 | struct ethtool_eeprom *eeprom, u8 *data) | 
| 374 | { | 432 | { | 
| 375 | struct usbnet *dev = netdev_priv(net); | 433 | struct usbnet *dev = netdev_priv(net); | 
| @@ -386,14 +444,14 @@ static int ax8817x_get_eeprom(struct net_device *net, | |||
| 386 | 444 | ||
| 387 | /* ax8817x returns 2 bytes from eeprom on read */ | 445 | /* ax8817x returns 2 bytes from eeprom on read */ | 
| 388 | for (i=0; i < eeprom->len / 2; i++) { | 446 | for (i=0; i < eeprom->len / 2; i++) { | 
| 389 | if (ax8817x_read_cmd(dev, AX_CMD_READ_EEPROM, | 447 | if (asix_read_cmd(dev, AX_CMD_READ_EEPROM, | 
| 390 | eeprom->offset + i, 0, 2, &ebuf[i]) < 0) | 448 | eeprom->offset + i, 0, 2, &ebuf[i]) < 0) | 
| 391 | return -EINVAL; | 449 | return -EINVAL; | 
| 392 | } | 450 | } | 
| 393 | return 0; | 451 | return 0; | 
| 394 | } | 452 | } | 
| 395 | 453 | ||
| 396 | static void ax8817x_get_drvinfo (struct net_device *net, | 454 | static void asix_get_drvinfo (struct net_device *net, | 
| 397 | struct ethtool_drvinfo *info) | 455 | struct ethtool_drvinfo *info) | 
| 398 | { | 456 | { | 
| 399 | /* Inherit standard device info */ | 457 | /* Inherit standard device info */ | 
| @@ -401,14 +459,14 @@ static void ax8817x_get_drvinfo (struct net_device *net, | |||
| 401 | info->eedump_len = 0x3e; | 459 | info->eedump_len = 0x3e; | 
| 402 | } | 460 | } | 
| 403 | 461 | ||
| 404 | static int ax8817x_get_settings(struct net_device *net, struct ethtool_cmd *cmd) | 462 | static int asix_get_settings(struct net_device *net, struct ethtool_cmd *cmd) | 
| 405 | { | 463 | { | 
| 406 | struct usbnet *dev = netdev_priv(net); | 464 | struct usbnet *dev = netdev_priv(net); | 
| 407 | 465 | ||
| 408 | return mii_ethtool_gset(&dev->mii,cmd); | 466 | return mii_ethtool_gset(&dev->mii,cmd); | 
| 409 | } | 467 | } | 
| 410 | 468 | ||
| 411 | static int ax8817x_set_settings(struct net_device *net, struct ethtool_cmd *cmd) | 469 | static int asix_set_settings(struct net_device *net, struct ethtool_cmd *cmd) | 
| 412 | { | 470 | { | 
| 413 | struct usbnet *dev = netdev_priv(net); | 471 | struct usbnet *dev = netdev_priv(net); | 
| 414 | 472 | ||
| @@ -418,27 +476,27 @@ static int ax8817x_set_settings(struct net_device *net, struct ethtool_cmd *cmd) | |||
| 418 | /* We need to override some ethtool_ops so we require our | 476 | /* We need to override some ethtool_ops so we require our | 
| 419 | own structure so we don't interfere with other usbnet | 477 | own structure so we don't interfere with other usbnet | 
| 420 | devices that may be connected at the same time. */ | 478 | devices that may be connected at the same time. */ | 
| 421 | static struct ethtool_ops ax8817x_ethtool_ops = { | 479 | static struct ethtool_ops ax88172_ethtool_ops = { | 
| 422 | .get_drvinfo = ax8817x_get_drvinfo, | 480 | .get_drvinfo = asix_get_drvinfo, | 
| 423 | .get_link = ethtool_op_get_link, | 481 | .get_link = ethtool_op_get_link, | 
| 424 | .get_msglevel = usbnet_get_msglevel, | 482 | .get_msglevel = usbnet_get_msglevel, | 
| 425 | .set_msglevel = usbnet_set_msglevel, | 483 | .set_msglevel = usbnet_set_msglevel, | 
| 426 | .get_wol = ax8817x_get_wol, | 484 | .get_wol = asix_get_wol, | 
| 427 | .set_wol = ax8817x_set_wol, | 485 | .set_wol = asix_set_wol, | 
| 428 | .get_eeprom_len = ax8817x_get_eeprom_len, | 486 | .get_eeprom_len = asix_get_eeprom_len, | 
| 429 | .get_eeprom = ax8817x_get_eeprom, | 487 | .get_eeprom = asix_get_eeprom, | 
| 430 | .get_settings = ax8817x_get_settings, | 488 | .get_settings = asix_get_settings, | 
| 431 | .set_settings = ax8817x_set_settings, | 489 | .set_settings = asix_set_settings, | 
| 432 | }; | 490 | }; | 
| 433 | 491 | ||
| 434 | static int ax8817x_ioctl (struct net_device *net, struct ifreq *rq, int cmd) | 492 | static int asix_ioctl (struct net_device *net, struct ifreq *rq, int cmd) | 
| 435 | { | 493 | { | 
| 436 | struct usbnet *dev = netdev_priv(net); | 494 | struct usbnet *dev = netdev_priv(net); | 
| 437 | 495 | ||
| 438 | return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL); | 496 | return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL); | 
| 439 | } | 497 | } | 
| 440 | 498 | ||
| 441 | static int ax8817x_bind(struct usbnet *dev, struct usb_interface *intf) | 499 | static int ax88172_bind(struct usbnet *dev, struct usb_interface *intf) | 
| 442 | { | 500 | { | 
| 443 | int ret = 0; | 501 | int ret = 0; | 
| 444 | void *buf; | 502 | void *buf; | 
| @@ -455,55 +513,39 @@ static int ax8817x_bind(struct usbnet *dev, struct usb_interface *intf) | |||
| 455 | 513 | ||
| 456 | /* Toggle the GPIOs in a manufacturer/model specific way */ | 514 | /* Toggle the GPIOs in a manufacturer/model specific way */ | 
| 457 | for (i = 2; i >= 0; i--) { | 515 | for (i = 2; i >= 0; i--) { | 
| 458 | if ((ret = ax8817x_write_cmd(dev, AX_CMD_WRITE_GPIOS, | 516 | if ((ret = asix_write_cmd(dev, AX_CMD_WRITE_GPIOS, | 
| 459 | (gpio_bits >> (i * 8)) & 0xff, 0, 0, | 517 | (gpio_bits >> (i * 8)) & 0xff, 0, 0, | 
| 460 | buf)) < 0) | 518 | buf)) < 0) | 
| 461 | goto out2; | 519 | goto out2; | 
| 462 | msleep(5); | 520 | msleep(5); | 
| 463 | } | 521 | } | 
| 464 | 522 | ||
| 465 | if ((ret = ax8817x_write_cmd(dev, AX_CMD_WRITE_RX_CTL, | 523 | if ((ret = asix_write_rx_ctl(dev,0x80)) < 0) | 
| 466 | 0x80, 0, 0, buf)) < 0) { | ||
| 467 | dbg("send AX_CMD_WRITE_RX_CTL failed: %d", ret); | ||
| 468 | goto out2; | 524 | goto out2; | 
| 469 | } | ||
| 470 | 525 | ||
| 471 | /* Get the MAC address */ | 526 | /* Get the MAC address */ | 
| 472 | memset(buf, 0, ETH_ALEN); | 527 | memset(buf, 0, ETH_ALEN); | 
| 473 | if ((ret = ax8817x_read_cmd(dev, AX_CMD_READ_NODE_ID, | 528 | if ((ret = asix_read_cmd(dev, AX_CMD_READ_NODE_ID, | 
| 474 | 0, 0, 6, buf)) < 0) { | 529 | 0, 0, 6, buf)) < 0) { | 
| 475 | dbg("read AX_CMD_READ_NODE_ID failed: %d", ret); | 530 | dbg("read AX_CMD_READ_NODE_ID failed: %d", ret); | 
| 476 | goto out2; | 531 | goto out2; | 
| 477 | } | 532 | } | 
| 478 | memcpy(dev->net->dev_addr, buf, ETH_ALEN); | 533 | memcpy(dev->net->dev_addr, buf, ETH_ALEN); | 
| 479 | 534 | ||
| 480 | /* Get the PHY id */ | ||
| 481 | if ((ret = ax8817x_read_cmd(dev, AX_CMD_READ_PHY_ID, | ||
| 482 | 0, 0, 2, buf)) < 0) { | ||
| 483 | dbg("error on read AX_CMD_READ_PHY_ID: %02x", ret); | ||
| 484 | goto out2; | ||
| 485 | } else if (ret < 2) { | ||
| 486 | /* this should always return 2 bytes */ | ||
| 487 | dbg("AX_CMD_READ_PHY_ID returned less than 2 bytes: ret=%02x", | ||
| 488 | ret); | ||
| 489 | ret = -EIO; | ||
| 490 | goto out2; | ||
| 491 | } | ||
| 492 | |||
| 493 | /* Initialize MII structure */ | 535 | /* Initialize MII structure */ | 
| 494 | dev->mii.dev = dev->net; | 536 | dev->mii.dev = dev->net; | 
| 495 | dev->mii.mdio_read = ax8817x_mdio_read; | 537 | dev->mii.mdio_read = asix_mdio_read; | 
| 496 | dev->mii.mdio_write = ax8817x_mdio_write; | 538 | dev->mii.mdio_write = asix_mdio_write; | 
| 497 | dev->mii.phy_id_mask = 0x3f; | 539 | dev->mii.phy_id_mask = 0x3f; | 
| 498 | dev->mii.reg_num_mask = 0x1f; | 540 | dev->mii.reg_num_mask = 0x1f; | 
| 499 | dev->mii.phy_id = *((u8 *)buf + 1); | 541 | dev->mii.phy_id = asix_get_phyid(dev); | 
| 500 | dev->net->do_ioctl = ax8817x_ioctl; | 542 | dev->net->do_ioctl = asix_ioctl; | 
| 501 | 543 | ||
| 502 | dev->net->set_multicast_list = ax8817x_set_multicast; | 544 | dev->net->set_multicast_list = asix_set_multicast; | 
| 503 | dev->net->ethtool_ops = &ax8817x_ethtool_ops; | 545 | dev->net->ethtool_ops = &ax88172_ethtool_ops; | 
| 504 | 546 | ||
| 505 | ax8817x_mdio_write_le(dev->net, dev->mii.phy_id, MII_BMCR, BMCR_RESET); | 547 | asix_mdio_write_le(dev->net, dev->mii.phy_id, MII_BMCR, BMCR_RESET); | 
| 506 | ax8817x_mdio_write_le(dev->net, dev->mii.phy_id, MII_ADVERTISE, | 548 | asix_mdio_write_le(dev->net, dev->mii.phy_id, MII_ADVERTISE, | 
| 507 | ADVERTISE_ALL | ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP); | 549 | ADVERTISE_ALL | ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP); | 
| 508 | mii_nway_restart(&dev->mii); | 550 | mii_nway_restart(&dev->mii); | 
| 509 | 551 | ||
| @@ -515,16 +557,16 @@ out1: | |||
| 515 | } | 557 | } | 
| 516 | 558 | ||
| 517 | static struct ethtool_ops ax88772_ethtool_ops = { | 559 | static struct ethtool_ops ax88772_ethtool_ops = { | 
| 518 | .get_drvinfo = ax8817x_get_drvinfo, | 560 | .get_drvinfo = asix_get_drvinfo, | 
| 519 | .get_link = ethtool_op_get_link, | 561 | .get_link = ethtool_op_get_link, | 
| 520 | .get_msglevel = usbnet_get_msglevel, | 562 | .get_msglevel = usbnet_get_msglevel, | 
| 521 | .set_msglevel = usbnet_set_msglevel, | 563 | .set_msglevel = usbnet_set_msglevel, | 
| 522 | .get_wol = ax8817x_get_wol, | 564 | .get_wol = asix_get_wol, | 
| 523 | .set_wol = ax8817x_set_wol, | 565 | .set_wol = asix_set_wol, | 
| 524 | .get_eeprom_len = ax8817x_get_eeprom_len, | 566 | .get_eeprom_len = asix_get_eeprom_len, | 
| 525 | .get_eeprom = ax8817x_get_eeprom, | 567 | .get_eeprom = asix_get_eeprom, | 
| 526 | .get_settings = ax8817x_get_settings, | 568 | .get_settings = asix_get_settings, | 
| 527 | .set_settings = ax8817x_set_settings, | 569 | .set_settings = asix_set_settings, | 
| 528 | }; | 570 | }; | 
| 529 | 571 | ||
| 530 | static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf) | 572 | static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf) | 
| @@ -541,62 +583,45 @@ static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf) | |||
| 541 | goto out1; | 583 | goto out1; | 
| 542 | } | 584 | } | 
| 543 | 585 | ||
| 544 | if ((ret = ax8817x_write_cmd(dev, AX_CMD_WRITE_GPIOS, | 586 | if ((ret = asix_write_cmd(dev, AX_CMD_WRITE_GPIOS, | 
| 545 | 0x00B0, 0, 0, buf)) < 0) | 587 | 0x00B0, 0, 0, buf)) < 0) | 
| 546 | goto out2; | 588 | goto out2; | 
| 547 | 589 | ||
| 548 | msleep(5); | 590 | msleep(5); | 
| 549 | if ((ret = ax8817x_write_cmd(dev, AX_CMD_SW_PHY_SELECT, | 591 | if ((ret = asix_write_cmd(dev, AX_CMD_SW_PHY_SELECT, | 
| 550 | 0x0001, 0, 0, buf)) < 0) { | 592 | 0x0001, 0, 0, buf)) < 0) { | 
| 551 | dbg("Select PHY #1 failed: %d", ret); | 593 | dbg("Select PHY #1 failed: %d", ret); | 
| 552 | goto out2; | 594 | goto out2; | 
| 553 | } | 595 | } | 
| 554 | 596 | ||
| 555 | if ((ret = ax8817x_write_cmd(dev, AX_CMD_SW_RESET, AX_SWRESET_IPPD, | 597 | if ((ret = asix_sw_reset(dev, AX_SWRESET_IPPD)) < 0) | 
| 556 | 0, 0, buf)) < 0) { | ||
| 557 | dbg("Failed to power down internal PHY: %d", ret); | ||
| 558 | goto out2; | 598 | goto out2; | 
| 559 | } | ||
| 560 | 599 | ||
| 561 | msleep(150); | 600 | msleep(150); | 
| 562 | if ((ret = ax8817x_write_cmd(dev, AX_CMD_SW_RESET, AX_SWRESET_CLEAR, | 601 | if ((ret = asix_sw_reset(dev, AX_SWRESET_CLEAR)) < 0) | 
| 563 | 0, 0, buf)) < 0) { | ||
| 564 | dbg("Failed to perform software reset: %d", ret); | ||
| 565 | goto out2; | 602 | goto out2; | 
| 566 | } | ||
| 567 | 603 | ||
| 568 | msleep(150); | 604 | msleep(150); | 
| 569 | if ((ret = ax8817x_write_cmd(dev, AX_CMD_SW_RESET, | 605 | if ((ret = asix_sw_reset(dev, AX_SWRESET_IPRL | AX_SWRESET_PRL)) < 0) | 
| 570 | AX_SWRESET_IPRL | AX_SWRESET_PRL, | ||
| 571 | 0, 0, buf)) < 0) { | ||
| 572 | dbg("Failed to set Internal/External PHY reset control: %d", | ||
| 573 | ret); | ||
| 574 | goto out2; | 606 | goto out2; | 
| 575 | } | ||
| 576 | 607 | ||
| 577 | msleep(150); | 608 | msleep(150); | 
| 578 | if ((ret = ax8817x_write_cmd(dev, AX_CMD_WRITE_RX_CTL, | 609 | if ((ret = asix_write_rx_ctl(dev, 0x00)) < 0) | 
| 579 | 0x0000, 0, 0, buf)) < 0) { | ||
| 580 | dbg("Failed to reset RX_CTL: %d", ret); | ||
| 581 | goto out2; | 610 | goto out2; | 
| 582 | } | ||
| 583 | 611 | ||
| 584 | /* Get the MAC address */ | 612 | /* Get the MAC address */ | 
| 585 | memset(buf, 0, ETH_ALEN); | 613 | memset(buf, 0, ETH_ALEN); | 
| 586 | if ((ret = ax8817x_read_cmd(dev, AX88772_CMD_READ_NODE_ID, | 614 | if ((ret = asix_read_cmd(dev, AX88772_CMD_READ_NODE_ID, | 
| 587 | 0, 0, ETH_ALEN, buf)) < 0) { | 615 | 0, 0, ETH_ALEN, buf)) < 0) { | 
| 588 | dbg("Failed to read MAC address: %d", ret); | 616 | dbg("Failed to read MAC address: %d", ret); | 
| 589 | goto out2; | 617 | goto out2; | 
| 590 | } | 618 | } | 
| 591 | memcpy(dev->net->dev_addr, buf, ETH_ALEN); | 619 | memcpy(dev->net->dev_addr, buf, ETH_ALEN); | 
| 592 | 620 | ||
| 593 | if ((ret = ax8817x_write_cmd(dev, AX_CMD_SET_SW_MII, | 621 | if ((ret = asix_set_sw_mii(dev)) < 0) | 
| 594 | 0, 0, 0, buf)) < 0) { | ||
| 595 | dbg("Enabling software MII failed: %d", ret); | ||
| 596 | goto out2; | 622 | goto out2; | 
| 597 | } | ||
| 598 | 623 | ||
| 599 | if (((ret = ax8817x_read_cmd(dev, AX_CMD_READ_MII_REG, | 624 | if (((ret = asix_read_cmd(dev, AX_CMD_READ_MII_REG, | 
| 600 | 0x0010, 2, 2, buf)) < 0) | 625 | 0x0010, 2, 2, buf)) < 0) | 
| 601 | || (*((u16 *)buf) != 0x003b)) { | 626 | || (*((u16 *)buf) != 0x003b)) { | 
| 602 | dbg("Read PHY register 2 must be 0x3b00: %d", ret); | 627 | dbg("Read PHY register 2 must be 0x3b00: %d", ret); | 
| @@ -605,74 +630,49 @@ static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf) | |||
| 605 | 630 | ||
| 606 | /* Initialize MII structure */ | 631 | /* Initialize MII structure */ | 
| 607 | dev->mii.dev = dev->net; | 632 | dev->mii.dev = dev->net; | 
| 608 | dev->mii.mdio_read = ax8817x_mdio_read; | 633 | dev->mii.mdio_read = asix_mdio_read; | 
| 609 | dev->mii.mdio_write = ax8817x_mdio_write; | 634 | dev->mii.mdio_write = asix_mdio_write; | 
| 610 | dev->mii.phy_id_mask = 0xff; | 635 | dev->mii.phy_id_mask = 0xff; | 
| 611 | dev->mii.reg_num_mask = 0xff; | 636 | dev->mii.reg_num_mask = 0xff; | 
| 612 | dev->net->do_ioctl = ax8817x_ioctl; | 637 | dev->net->do_ioctl = asix_ioctl; | 
| 638 | dev->mii.phy_id = asix_get_phyid(dev); | ||
| 613 | 639 | ||
| 614 | /* Get the PHY id */ | 640 | if ((ret = asix_sw_reset(dev, AX_SWRESET_PRL)) < 0) | 
| 615 | if ((ret = ax8817x_read_cmd(dev, AX_CMD_READ_PHY_ID, | ||
| 616 | 0, 0, 2, buf)) < 0) { | ||
| 617 | dbg("Error reading PHY ID: %02x", ret); | ||
| 618 | goto out2; | 641 | goto out2; | 
| 619 | } else if (ret < 2) { | ||
| 620 | /* this should always return 2 bytes */ | ||
| 621 | dbg("AX_CMD_READ_PHY_ID returned less than 2 bytes: ret=%02x", | ||
| 622 | ret); | ||
| 623 | ret = -EIO; | ||
| 624 | goto out2; | ||
| 625 | } | ||
| 626 | dev->mii.phy_id = *((u8 *)buf + 1); | ||
| 627 | 642 | ||
| 628 | if ((ret = ax8817x_write_cmd(dev, AX_CMD_SW_RESET, AX_SWRESET_PRL, | ||
| 629 | 0, 0, buf)) < 0) { | ||
| 630 | dbg("Set external PHY reset pin level: %d", ret); | ||
| 631 | goto out2; | ||
| 632 | } | ||
| 633 | msleep(150); | 643 | msleep(150); | 
| 634 | if ((ret = ax8817x_write_cmd(dev, AX_CMD_SW_RESET, | 644 | |
| 635 | AX_SWRESET_IPRL | AX_SWRESET_PRL, | 645 | if ((ret = asix_sw_reset(dev, AX_SWRESET_IPRL | AX_SWRESET_PRL)) < 0) | 
| 636 | 0, 0, buf)) < 0) { | ||
| 637 | dbg("Set Internal/External PHY reset control: %d", ret); | ||
| 638 | goto out2; | 646 | goto out2; | 
| 639 | } | ||
| 640 | msleep(150); | ||
| 641 | 647 | ||
| 648 | msleep(150); | ||
| 642 | 649 | ||
| 643 | dev->net->set_multicast_list = ax8817x_set_multicast; | 650 | dev->net->set_multicast_list = asix_set_multicast; | 
| 644 | dev->net->ethtool_ops = &ax88772_ethtool_ops; | 651 | dev->net->ethtool_ops = &ax88772_ethtool_ops; | 
| 645 | 652 | ||
| 646 | ax8817x_mdio_write_le(dev->net, dev->mii.phy_id, MII_BMCR, BMCR_RESET); | 653 | asix_mdio_write_le(dev->net, dev->mii.phy_id, MII_BMCR, BMCR_RESET); | 
| 647 | ax8817x_mdio_write_le(dev->net, dev->mii.phy_id, MII_ADVERTISE, | 654 | asix_mdio_write_le(dev->net, dev->mii.phy_id, MII_ADVERTISE, | 
| 648 | ADVERTISE_ALL | ADVERTISE_CSMA); | 655 | ADVERTISE_ALL | ADVERTISE_CSMA); | 
| 649 | mii_nway_restart(&dev->mii); | 656 | mii_nway_restart(&dev->mii); | 
| 650 | 657 | ||
| 651 | if ((ret = ax8817x_write_cmd(dev, AX_CMD_WRITE_MEDIUM_MODE, | 658 | if ((ret = asix_write_cmd(dev, AX_CMD_WRITE_MEDIUM_MODE, | 
| 652 | AX88772_MEDIUM_DEFAULT, 0, 0, buf)) < 0) { | 659 | AX88772_MEDIUM_DEFAULT, 0, 0, buf)) < 0) { | 
| 653 | dbg("Write medium mode register: %d", ret); | 660 | dbg("Write medium mode register: %d", ret); | 
| 654 | goto out2; | 661 | goto out2; | 
| 655 | } | 662 | } | 
| 656 | 663 | ||
| 657 | if ((ret = ax8817x_write_cmd(dev, AX_CMD_WRITE_IPG0, | 664 | if ((ret = asix_write_cmd(dev, AX_CMD_WRITE_IPG0, | 
| 658 | AX88772_IPG0_DEFAULT | AX88772_IPG1_DEFAULT, | 665 | AX88772_IPG0_DEFAULT | AX88772_IPG1_DEFAULT, | 
| 659 | AX88772_IPG2_DEFAULT, 0, buf)) < 0) { | 666 | AX88772_IPG2_DEFAULT, 0, buf)) < 0) { | 
| 660 | dbg("Write IPG,IPG1,IPG2 failed: %d", ret); | 667 | dbg("Write IPG,IPG1,IPG2 failed: %d", ret); | 
| 661 | goto out2; | 668 | goto out2; | 
| 662 | } | 669 | } | 
| 663 | if ((ret = | 670 | if ((ret = asix_set_hw_mii(dev)) < 0) | 
| 664 | ax8817x_write_cmd(dev, AX_CMD_SET_HW_MII, 0, 0, 0, &buf)) < 0) { | ||
| 665 | dbg("Failed to set hardware MII: %02x", ret); | ||
| 666 | goto out2; | 671 | goto out2; | 
| 667 | } | ||
| 668 | 672 | ||
| 669 | /* Set RX_CTL to default values with 2k buffer, and enable cactus */ | 673 | /* Set RX_CTL to default values with 2k buffer, and enable cactus */ | 
| 670 | if ((ret = | 674 | if ((ret = asix_write_rx_ctl(dev, 0x0088)) < 0) | 
| 671 | ax8817x_write_cmd(dev, AX_CMD_WRITE_RX_CTL, 0x0088, 0, 0, | ||
| 672 | buf)) < 0) { | ||
| 673 | dbg("Reset RX_CTL failed: %d", ret); | ||
| 674 | goto out2; | 675 | goto out2; | 
| 675 | } | ||
| 676 | 676 | ||
| 677 | kfree(buf); | 677 | kfree(buf); | 
| 678 | 678 | ||
| @@ -794,23 +794,23 @@ static int ax88772_link_reset(struct usbnet *dev) | |||
| 794 | u16 mode; | 794 | u16 mode; | 
| 795 | 795 | ||
| 796 | mode = AX88772_MEDIUM_DEFAULT; | 796 | mode = AX88772_MEDIUM_DEFAULT; | 
| 797 | lpa = ax8817x_mdio_read_le(dev->net, dev->mii.phy_id, MII_LPA); | 797 | lpa = asix_mdio_read_le(dev->net, dev->mii.phy_id, MII_LPA); | 
| 798 | adv = ax8817x_mdio_read_le(dev->net, dev->mii.phy_id, MII_ADVERTISE); | 798 | adv = asix_mdio_read_le(dev->net, dev->mii.phy_id, MII_ADVERTISE); | 
| 799 | res = mii_nway_result(lpa|adv); | 799 | res = mii_nway_result(lpa|adv); | 
| 800 | 800 | ||
| 801 | if ((res & LPA_DUPLEX) == 0) | 801 | if ((res & LPA_DUPLEX) == 0) | 
| 802 | mode &= ~AX88772_MEDIUM_FULL_DUPLEX; | 802 | mode &= ~AX88772_MEDIUM_FULL_DUPLEX; | 
| 803 | if ((res & LPA_100) == 0) | 803 | if ((res & LPA_100) == 0) | 
| 804 | mode &= ~AX88772_MEDIUM_100MB; | 804 | mode &= ~AX88772_MEDIUM_100MB; | 
| 805 | ax8817x_write_cmd(dev, AX_CMD_WRITE_MEDIUM_MODE, mode, 0, 0, NULL); | 805 | asix_write_cmd(dev, AX_CMD_WRITE_MEDIUM_MODE, mode, 0, 0, NULL); | 
| 806 | 806 | ||
| 807 | return 0; | 807 | return 0; | 
| 808 | } | 808 | } | 
| 809 | 809 | ||
| 810 | static const struct driver_info ax8817x_info = { | 810 | static const struct driver_info ax8817x_info = { | 
| 811 | .description = "ASIX AX8817x USB 2.0 Ethernet", | 811 | .description = "ASIX AX8817x USB 2.0 Ethernet", | 
| 812 | .bind = ax8817x_bind, | 812 | .bind = ax88172_bind, | 
| 813 | .status = ax8817x_status, | 813 | .status = asix_status, | 
| 814 | .link_reset = ax88172_link_reset, | 814 | .link_reset = ax88172_link_reset, | 
| 815 | .reset = ax88172_link_reset, | 815 | .reset = ax88172_link_reset, | 
| 816 | .flags = FLAG_ETHER, | 816 | .flags = FLAG_ETHER, | 
| @@ -819,8 +819,8 @@ static const struct driver_info ax8817x_info = { | |||
| 819 | 819 | ||
| 820 | static const struct driver_info dlink_dub_e100_info = { | 820 | static const struct driver_info dlink_dub_e100_info = { | 
| 821 | .description = "DLink DUB-E100 USB Ethernet", | 821 | .description = "DLink DUB-E100 USB Ethernet", | 
| 822 | .bind = ax8817x_bind, | 822 | .bind = ax88172_bind, | 
| 823 | .status = ax8817x_status, | 823 | .status = asix_status, | 
| 824 | .link_reset = ax88172_link_reset, | 824 | .link_reset = ax88172_link_reset, | 
| 825 | .reset = ax88172_link_reset, | 825 | .reset = ax88172_link_reset, | 
| 826 | .flags = FLAG_ETHER, | 826 | .flags = FLAG_ETHER, | 
| @@ -829,8 +829,8 @@ static const struct driver_info dlink_dub_e100_info = { | |||
| 829 | 829 | ||
| 830 | static const struct driver_info netgear_fa120_info = { | 830 | static const struct driver_info netgear_fa120_info = { | 
| 831 | .description = "Netgear FA-120 USB Ethernet", | 831 | .description = "Netgear FA-120 USB Ethernet", | 
| 832 | .bind = ax8817x_bind, | 832 | .bind = ax88172_bind, | 
| 833 | .status = ax8817x_status, | 833 | .status = asix_status, | 
| 834 | .link_reset = ax88172_link_reset, | 834 | .link_reset = ax88172_link_reset, | 
| 835 | .reset = ax88172_link_reset, | 835 | .reset = ax88172_link_reset, | 
| 836 | .flags = FLAG_ETHER, | 836 | .flags = FLAG_ETHER, | 
| @@ -839,8 +839,8 @@ static const struct driver_info netgear_fa120_info = { | |||
| 839 | 839 | ||
| 840 | static const struct driver_info hawking_uf200_info = { | 840 | static const struct driver_info hawking_uf200_info = { | 
| 841 | .description = "Hawking UF200 USB Ethernet", | 841 | .description = "Hawking UF200 USB Ethernet", | 
| 842 | .bind = ax8817x_bind, | 842 | .bind = ax88172_bind, | 
| 843 | .status = ax8817x_status, | 843 | .status = asix_status, | 
| 844 | .link_reset = ax88172_link_reset, | 844 | .link_reset = ax88172_link_reset, | 
| 845 | .reset = ax88172_link_reset, | 845 | .reset = ax88172_link_reset, | 
| 846 | .flags = FLAG_ETHER, | 846 | .flags = FLAG_ETHER, | 
| @@ -850,13 +850,12 @@ static const struct driver_info hawking_uf200_info = { | |||
| 850 | static const struct driver_info ax88772_info = { | 850 | static const struct driver_info ax88772_info = { | 
| 851 | .description = "ASIX AX88772 USB 2.0 Ethernet", | 851 | .description = "ASIX AX88772 USB 2.0 Ethernet", | 
| 852 | .bind = ax88772_bind, | 852 | .bind = ax88772_bind, | 
| 853 | .status = ax8817x_status, | 853 | .status = asix_status, | 
| 854 | .link_reset = ax88772_link_reset, | 854 | .link_reset = ax88772_link_reset, | 
| 855 | .reset = ax88772_link_reset, | 855 | .reset = ax88772_link_reset, | 
| 856 | .flags = FLAG_ETHER | FLAG_FRAMING_AX, | 856 | .flags = FLAG_ETHER | FLAG_FRAMING_AX, | 
| 857 | .rx_fixup = ax88772_rx_fixup, | 857 | .rx_fixup = ax88772_rx_fixup, | 
| 858 | .tx_fixup = ax88772_tx_fixup, | 858 | .tx_fixup = ax88772_tx_fixup, | 
| 859 | .data = 0x00130103, | ||
| 860 | }; | 859 | }; | 
| 861 | 860 | ||
| 862 | static const struct usb_device_id products [] = { | 861 | static const struct usb_device_id products [] = { | 
