diff options
Diffstat (limited to 'drivers/net/usb/smsc95xx.c')
-rw-r--r-- | drivers/net/usb/smsc95xx.c | 184 |
1 files changed, 92 insertions, 92 deletions
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c index bf8854386b88..79d495d15546 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c | |||
@@ -95,8 +95,8 @@ static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index, | |||
95 | | USB_TYPE_VENDOR | USB_RECIP_DEVICE, | 95 | | USB_TYPE_VENDOR | USB_RECIP_DEVICE, |
96 | 0, index, &buf, 4); | 96 | 0, index, &buf, 4); |
97 | if (unlikely(ret < 0)) | 97 | if (unlikely(ret < 0)) |
98 | netdev_warn(dev->net, | 98 | netdev_warn(dev->net, "Failed to read reg index 0x%08x: %d\n", |
99 | "Failed to read reg index 0x%08x: %d", index, ret); | 99 | index, ret); |
100 | 100 | ||
101 | le32_to_cpus(&buf); | 101 | le32_to_cpus(&buf); |
102 | *data = buf; | 102 | *data = buf; |
@@ -125,8 +125,8 @@ static int __must_check __smsc95xx_write_reg(struct usbnet *dev, u32 index, | |||
125 | | USB_TYPE_VENDOR | USB_RECIP_DEVICE, | 125 | | USB_TYPE_VENDOR | USB_RECIP_DEVICE, |
126 | 0, index, &buf, 4); | 126 | 0, index, &buf, 4); |
127 | if (unlikely(ret < 0)) | 127 | if (unlikely(ret < 0)) |
128 | netdev_warn(dev->net, | 128 | netdev_warn(dev->net, "Failed to write reg index 0x%08x: %d\n", |
129 | "Failed to write reg index 0x%08x: %d", index, ret); | 129 | index, ret); |
130 | 130 | ||
131 | return ret; | 131 | return ret; |
132 | } | 132 | } |
@@ -185,7 +185,7 @@ static int __must_check __smsc95xx_phy_wait_not_busy(struct usbnet *dev, | |||
185 | 185 | ||
186 | do { | 186 | do { |
187 | ret = __smsc95xx_read_reg(dev, MII_ADDR, &val, in_pm); | 187 | ret = __smsc95xx_read_reg(dev, MII_ADDR, &val, in_pm); |
188 | check_warn_return(ret, "Error reading MII_ACCESS"); | 188 | check_warn_return(ret, "Error reading MII_ACCESS\n"); |
189 | if (!(val & MII_BUSY_)) | 189 | if (!(val & MII_BUSY_)) |
190 | return 0; | 190 | return 0; |
191 | } while (!time_after(jiffies, start_time + HZ)); | 191 | } while (!time_after(jiffies, start_time + HZ)); |
@@ -204,20 +204,20 @@ static int __smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx, | |||
204 | 204 | ||
205 | /* confirm MII not busy */ | 205 | /* confirm MII not busy */ |
206 | ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); | 206 | ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); |
207 | check_warn_goto_done(ret, "MII is busy in smsc95xx_mdio_read"); | 207 | check_warn_goto_done(ret, "MII is busy in smsc95xx_mdio_read\n"); |
208 | 208 | ||
209 | /* set the address, index & direction (read from PHY) */ | 209 | /* set the address, index & direction (read from PHY) */ |
210 | phy_id &= dev->mii.phy_id_mask; | 210 | phy_id &= dev->mii.phy_id_mask; |
211 | idx &= dev->mii.reg_num_mask; | 211 | idx &= dev->mii.reg_num_mask; |
212 | addr = (phy_id << 11) | (idx << 6) | MII_READ_ | MII_BUSY_; | 212 | addr = (phy_id << 11) | (idx << 6) | MII_READ_ | MII_BUSY_; |
213 | ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm); | 213 | ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm); |
214 | check_warn_goto_done(ret, "Error writing MII_ADDR"); | 214 | check_warn_goto_done(ret, "Error writing MII_ADDR\n"); |
215 | 215 | ||
216 | ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); | 216 | ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); |
217 | check_warn_goto_done(ret, "Timed out reading MII reg %02X", idx); | 217 | check_warn_goto_done(ret, "Timed out reading MII reg %02X\n", idx); |
218 | 218 | ||
219 | ret = __smsc95xx_read_reg(dev, MII_DATA, &val, in_pm); | 219 | ret = __smsc95xx_read_reg(dev, MII_DATA, &val, in_pm); |
220 | check_warn_goto_done(ret, "Error reading MII_DATA"); | 220 | check_warn_goto_done(ret, "Error reading MII_DATA\n"); |
221 | 221 | ||
222 | ret = (u16)(val & 0xFFFF); | 222 | ret = (u16)(val & 0xFFFF); |
223 | 223 | ||
@@ -237,21 +237,21 @@ static void __smsc95xx_mdio_write(struct net_device *netdev, int phy_id, | |||
237 | 237 | ||
238 | /* confirm MII not busy */ | 238 | /* confirm MII not busy */ |
239 | ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); | 239 | ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); |
240 | check_warn_goto_done(ret, "MII is busy in smsc95xx_mdio_write"); | 240 | check_warn_goto_done(ret, "MII is busy in smsc95xx_mdio_write\n"); |
241 | 241 | ||
242 | val = regval; | 242 | val = regval; |
243 | ret = __smsc95xx_write_reg(dev, MII_DATA, val, in_pm); | 243 | ret = __smsc95xx_write_reg(dev, MII_DATA, val, in_pm); |
244 | check_warn_goto_done(ret, "Error writing MII_DATA"); | 244 | check_warn_goto_done(ret, "Error writing MII_DATA\n"); |
245 | 245 | ||
246 | /* set the address, index & direction (write to PHY) */ | 246 | /* set the address, index & direction (write to PHY) */ |
247 | phy_id &= dev->mii.phy_id_mask; | 247 | phy_id &= dev->mii.phy_id_mask; |
248 | idx &= dev->mii.reg_num_mask; | 248 | idx &= dev->mii.reg_num_mask; |
249 | addr = (phy_id << 11) | (idx << 6) | MII_WRITE_ | MII_BUSY_; | 249 | addr = (phy_id << 11) | (idx << 6) | MII_WRITE_ | MII_BUSY_; |
250 | ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm); | 250 | ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm); |
251 | check_warn_goto_done(ret, "Error writing MII_ADDR"); | 251 | check_warn_goto_done(ret, "Error writing MII_ADDR\n"); |
252 | 252 | ||
253 | ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); | 253 | ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); |
254 | check_warn_goto_done(ret, "Timed out writing MII reg %02X", idx); | 254 | check_warn_goto_done(ret, "Timed out writing MII reg %02X\n", idx); |
255 | 255 | ||
256 | done: | 256 | done: |
257 | mutex_unlock(&dev->phy_mutex); | 257 | mutex_unlock(&dev->phy_mutex); |
@@ -288,7 +288,7 @@ static int __must_check smsc95xx_wait_eeprom(struct usbnet *dev) | |||
288 | 288 | ||
289 | do { | 289 | do { |
290 | ret = smsc95xx_read_reg(dev, E2P_CMD, &val); | 290 | ret = smsc95xx_read_reg(dev, E2P_CMD, &val); |
291 | check_warn_return(ret, "Error reading E2P_CMD"); | 291 | check_warn_return(ret, "Error reading E2P_CMD\n"); |
292 | if (!(val & E2P_CMD_BUSY_) || (val & E2P_CMD_TIMEOUT_)) | 292 | if (!(val & E2P_CMD_BUSY_) || (val & E2P_CMD_TIMEOUT_)) |
293 | break; | 293 | break; |
294 | udelay(40); | 294 | udelay(40); |
@@ -310,7 +310,7 @@ static int __must_check smsc95xx_eeprom_confirm_not_busy(struct usbnet *dev) | |||
310 | 310 | ||
311 | do { | 311 | do { |
312 | ret = smsc95xx_read_reg(dev, E2P_CMD, &val); | 312 | ret = smsc95xx_read_reg(dev, E2P_CMD, &val); |
313 | check_warn_return(ret, "Error reading E2P_CMD"); | 313 | check_warn_return(ret, "Error reading E2P_CMD\n"); |
314 | 314 | ||
315 | if (!(val & E2P_CMD_BUSY_)) | 315 | if (!(val & E2P_CMD_BUSY_)) |
316 | return 0; | 316 | return 0; |
@@ -338,14 +338,14 @@ static int smsc95xx_read_eeprom(struct usbnet *dev, u32 offset, u32 length, | |||
338 | for (i = 0; i < length; i++) { | 338 | for (i = 0; i < length; i++) { |
339 | val = E2P_CMD_BUSY_ | E2P_CMD_READ_ | (offset & E2P_CMD_ADDR_); | 339 | val = E2P_CMD_BUSY_ | E2P_CMD_READ_ | (offset & E2P_CMD_ADDR_); |
340 | ret = smsc95xx_write_reg(dev, E2P_CMD, val); | 340 | ret = smsc95xx_write_reg(dev, E2P_CMD, val); |
341 | check_warn_return(ret, "Error writing E2P_CMD"); | 341 | check_warn_return(ret, "Error writing E2P_CMD\n"); |
342 | 342 | ||
343 | ret = smsc95xx_wait_eeprom(dev); | 343 | ret = smsc95xx_wait_eeprom(dev); |
344 | if (ret < 0) | 344 | if (ret < 0) |
345 | return ret; | 345 | return ret; |
346 | 346 | ||
347 | ret = smsc95xx_read_reg(dev, E2P_DATA, &val); | 347 | ret = smsc95xx_read_reg(dev, E2P_DATA, &val); |
348 | check_warn_return(ret, "Error reading E2P_DATA"); | 348 | check_warn_return(ret, "Error reading E2P_DATA\n"); |
349 | 349 | ||
350 | data[i] = val & 0xFF; | 350 | data[i] = val & 0xFF; |
351 | offset++; | 351 | offset++; |
@@ -370,7 +370,7 @@ static int smsc95xx_write_eeprom(struct usbnet *dev, u32 offset, u32 length, | |||
370 | /* Issue write/erase enable command */ | 370 | /* Issue write/erase enable command */ |
371 | val = E2P_CMD_BUSY_ | E2P_CMD_EWEN_; | 371 | val = E2P_CMD_BUSY_ | E2P_CMD_EWEN_; |
372 | ret = smsc95xx_write_reg(dev, E2P_CMD, val); | 372 | ret = smsc95xx_write_reg(dev, E2P_CMD, val); |
373 | check_warn_return(ret, "Error writing E2P_DATA"); | 373 | check_warn_return(ret, "Error writing E2P_DATA\n"); |
374 | 374 | ||
375 | ret = smsc95xx_wait_eeprom(dev); | 375 | ret = smsc95xx_wait_eeprom(dev); |
376 | if (ret < 0) | 376 | if (ret < 0) |
@@ -381,12 +381,12 @@ static int smsc95xx_write_eeprom(struct usbnet *dev, u32 offset, u32 length, | |||
381 | /* Fill data register */ | 381 | /* Fill data register */ |
382 | val = data[i]; | 382 | val = data[i]; |
383 | ret = smsc95xx_write_reg(dev, E2P_DATA, val); | 383 | ret = smsc95xx_write_reg(dev, E2P_DATA, val); |
384 | check_warn_return(ret, "Error writing E2P_DATA"); | 384 | check_warn_return(ret, "Error writing E2P_DATA\n"); |
385 | 385 | ||
386 | /* Send "write" command */ | 386 | /* Send "write" command */ |
387 | val = E2P_CMD_BUSY_ | E2P_CMD_WRITE_ | (offset & E2P_CMD_ADDR_); | 387 | val = E2P_CMD_BUSY_ | E2P_CMD_WRITE_ | (offset & E2P_CMD_ADDR_); |
388 | ret = smsc95xx_write_reg(dev, E2P_CMD, val); | 388 | ret = smsc95xx_write_reg(dev, E2P_CMD, val); |
389 | check_warn_return(ret, "Error writing E2P_CMD"); | 389 | check_warn_return(ret, "Error writing E2P_CMD\n"); |
390 | 390 | ||
391 | ret = smsc95xx_wait_eeprom(dev); | 391 | ret = smsc95xx_wait_eeprom(dev); |
392 | if (ret < 0) | 392 | if (ret < 0) |
@@ -469,13 +469,13 @@ static void smsc95xx_set_multicast(struct net_device *netdev) | |||
469 | 469 | ||
470 | /* Initiate async writes, as we can't wait for completion here */ | 470 | /* Initiate async writes, as we can't wait for completion here */ |
471 | ret = smsc95xx_write_reg_async(dev, HASHH, &pdata->hash_hi); | 471 | ret = smsc95xx_write_reg_async(dev, HASHH, &pdata->hash_hi); |
472 | check_warn(ret, "failed to initiate async write to HASHH"); | 472 | check_warn(ret, "failed to initiate async write to HASHH\n"); |
473 | 473 | ||
474 | ret = smsc95xx_write_reg_async(dev, HASHL, &pdata->hash_lo); | 474 | ret = smsc95xx_write_reg_async(dev, HASHL, &pdata->hash_lo); |
475 | check_warn(ret, "failed to initiate async write to HASHL"); | 475 | check_warn(ret, "failed to initiate async write to HASHL\n"); |
476 | 476 | ||
477 | ret = smsc95xx_write_reg_async(dev, MAC_CR, &pdata->mac_cr); | 477 | ret = smsc95xx_write_reg_async(dev, MAC_CR, &pdata->mac_cr); |
478 | check_warn(ret, "failed to initiate async write to MAC_CR"); | 478 | check_warn(ret, "failed to initiate async write to MAC_CR\n"); |
479 | } | 479 | } |
480 | 480 | ||
481 | static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex, | 481 | static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex, |
@@ -484,7 +484,7 @@ static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex, | |||
484 | u32 flow, afc_cfg = 0; | 484 | u32 flow, afc_cfg = 0; |
485 | 485 | ||
486 | int ret = smsc95xx_read_reg(dev, AFC_CFG, &afc_cfg); | 486 | int ret = smsc95xx_read_reg(dev, AFC_CFG, &afc_cfg); |
487 | check_warn_return(ret, "Error reading AFC_CFG"); | 487 | check_warn_return(ret, "Error reading AFC_CFG\n"); |
488 | 488 | ||
489 | if (duplex == DUPLEX_FULL) { | 489 | if (duplex == DUPLEX_FULL) { |
490 | u8 cap = mii_resolve_flowctrl_fdx(lcladv, rmtadv); | 490 | u8 cap = mii_resolve_flowctrl_fdx(lcladv, rmtadv); |
@@ -509,10 +509,10 @@ static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex, | |||
509 | } | 509 | } |
510 | 510 | ||
511 | ret = smsc95xx_write_reg(dev, FLOW, flow); | 511 | ret = smsc95xx_write_reg(dev, FLOW, flow); |
512 | check_warn_return(ret, "Error writing FLOW"); | 512 | check_warn_return(ret, "Error writing FLOW\n"); |
513 | 513 | ||
514 | ret = smsc95xx_write_reg(dev, AFC_CFG, afc_cfg); | 514 | ret = smsc95xx_write_reg(dev, AFC_CFG, afc_cfg); |
515 | check_warn_return(ret, "Error writing AFC_CFG"); | 515 | check_warn_return(ret, "Error writing AFC_CFG\n"); |
516 | 516 | ||
517 | return 0; | 517 | return 0; |
518 | } | 518 | } |
@@ -528,10 +528,10 @@ static int smsc95xx_link_reset(struct usbnet *dev) | |||
528 | 528 | ||
529 | /* clear interrupt status */ | 529 | /* clear interrupt status */ |
530 | ret = smsc95xx_mdio_read(dev->net, mii->phy_id, PHY_INT_SRC); | 530 | ret = smsc95xx_mdio_read(dev->net, mii->phy_id, PHY_INT_SRC); |
531 | check_warn_return(ret, "Error reading PHY_INT_SRC"); | 531 | check_warn_return(ret, "Error reading PHY_INT_SRC\n"); |
532 | 532 | ||
533 | ret = smsc95xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_); | 533 | ret = smsc95xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_); |
534 | check_warn_return(ret, "Error writing INT_STS"); | 534 | check_warn_return(ret, "Error writing INT_STS\n"); |
535 | 535 | ||
536 | mii_check_media(mii, 1, 1); | 536 | mii_check_media(mii, 1, 1); |
537 | mii_ethtool_gset(&dev->mii, &ecmd); | 537 | mii_ethtool_gset(&dev->mii, &ecmd); |
@@ -553,10 +553,10 @@ static int smsc95xx_link_reset(struct usbnet *dev) | |||
553 | spin_unlock_irqrestore(&pdata->mac_cr_lock, flags); | 553 | spin_unlock_irqrestore(&pdata->mac_cr_lock, flags); |
554 | 554 | ||
555 | ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr); | 555 | ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr); |
556 | check_warn_return(ret, "Error writing MAC_CR"); | 556 | check_warn_return(ret, "Error writing MAC_CR\n"); |
557 | 557 | ||
558 | ret = smsc95xx_phy_update_flowcontrol(dev, ecmd.duplex, lcladv, rmtadv); | 558 | ret = smsc95xx_phy_update_flowcontrol(dev, ecmd.duplex, lcladv, rmtadv); |
559 | check_warn_return(ret, "Error updating PHY flow control"); | 559 | check_warn_return(ret, "Error updating PHY flow control\n"); |
560 | 560 | ||
561 | return 0; | 561 | return 0; |
562 | } | 562 | } |
@@ -821,7 +821,7 @@ static int smsc95xx_phy_initialize(struct usbnet *dev) | |||
821 | 821 | ||
822 | /* read to clear */ | 822 | /* read to clear */ |
823 | ret = smsc95xx_mdio_read(dev->net, dev->mii.phy_id, PHY_INT_SRC); | 823 | ret = smsc95xx_mdio_read(dev->net, dev->mii.phy_id, PHY_INT_SRC); |
824 | check_warn_return(ret, "Failed to read PHY_INT_SRC during init"); | 824 | check_warn_return(ret, "Failed to read PHY_INT_SRC during init\n"); |
825 | 825 | ||
826 | smsc95xx_mdio_write(dev->net, dev->mii.phy_id, PHY_INT_MASK, | 826 | smsc95xx_mdio_write(dev->net, dev->mii.phy_id, PHY_INT_MASK, |
827 | PHY_INT_MASK_DEFAULT_); | 827 | PHY_INT_MASK_DEFAULT_); |
@@ -875,14 +875,14 @@ static int smsc95xx_reset(struct usbnet *dev) | |||
875 | if (ret < 0) | 875 | if (ret < 0) |
876 | return ret; | 876 | return ret; |
877 | 877 | ||
878 | netif_dbg(dev, ifup, dev->net, | 878 | netif_dbg(dev, ifup, dev->net, "MAC Address: %pM\n", |
879 | "MAC Address: %pM\n", dev->net->dev_addr); | 879 | dev->net->dev_addr); |
880 | 880 | ||
881 | ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); | 881 | ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); |
882 | check_warn_return(ret, "Failed to read HW_CFG: %d\n", ret); | 882 | check_warn_return(ret, "Failed to read HW_CFG: %d\n", ret); |
883 | 883 | ||
884 | netif_dbg(dev, ifup, dev->net, | 884 | netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG : 0x%08x\n", |
885 | "Read Value from HW_CFG : 0x%08x\n", read_buf); | 885 | read_buf); |
886 | 886 | ||
887 | read_buf |= HW_CFG_BIR_; | 887 | read_buf |= HW_CFG_BIR_; |
888 | 888 | ||
@@ -906,8 +906,8 @@ static int smsc95xx_reset(struct usbnet *dev) | |||
906 | dev->rx_urb_size = DEFAULT_FS_BURST_CAP_SIZE; | 906 | dev->rx_urb_size = DEFAULT_FS_BURST_CAP_SIZE; |
907 | } | 907 | } |
908 | 908 | ||
909 | netif_dbg(dev, ifup, dev->net, | 909 | netif_dbg(dev, ifup, dev->net, "rx_urb_size=%ld\n", |
910 | "rx_urb_size=%ld\n", (ulong)dev->rx_urb_size); | 910 | (ulong)dev->rx_urb_size); |
911 | 911 | ||
912 | ret = smsc95xx_write_reg(dev, BURST_CAP, burst_cap); | 912 | ret = smsc95xx_write_reg(dev, BURST_CAP, burst_cap); |
913 | check_warn_return(ret, "Failed to write BURST_CAP: %d\n", ret); | 913 | check_warn_return(ret, "Failed to write BURST_CAP: %d\n", ret); |
@@ -932,8 +932,8 @@ static int smsc95xx_reset(struct usbnet *dev) | |||
932 | ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); | 932 | ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); |
933 | check_warn_return(ret, "Failed to read HW_CFG: %d\n", ret); | 933 | check_warn_return(ret, "Failed to read HW_CFG: %d\n", ret); |
934 | 934 | ||
935 | netif_dbg(dev, ifup, dev->net, | 935 | netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG: 0x%08x\n", |
936 | "Read Value from HW_CFG: 0x%08x\n", read_buf); | 936 | read_buf); |
937 | 937 | ||
938 | if (turbo_mode) | 938 | if (turbo_mode) |
939 | read_buf |= (HW_CFG_MEF_ | HW_CFG_BCE_); | 939 | read_buf |= (HW_CFG_MEF_ | HW_CFG_BCE_); |
@@ -983,12 +983,12 @@ static int smsc95xx_reset(struct usbnet *dev) | |||
983 | 983 | ||
984 | /* Enable or disable checksum offload engines */ | 984 | /* Enable or disable checksum offload engines */ |
985 | ret = smsc95xx_set_features(dev->net, dev->net->features); | 985 | ret = smsc95xx_set_features(dev->net, dev->net->features); |
986 | check_warn_return(ret, "Failed to set checksum offload features"); | 986 | check_warn_return(ret, "Failed to set checksum offload features\n"); |
987 | 987 | ||
988 | smsc95xx_set_multicast(dev->net); | 988 | smsc95xx_set_multicast(dev->net); |
989 | 989 | ||
990 | ret = smsc95xx_phy_initialize(dev); | 990 | ret = smsc95xx_phy_initialize(dev); |
991 | check_warn_return(ret, "Failed to init PHY"); | 991 | check_warn_return(ret, "Failed to init PHY\n"); |
992 | 992 | ||
993 | ret = smsc95xx_read_reg(dev, INT_EP_CTL, &read_buf); | 993 | ret = smsc95xx_read_reg(dev, INT_EP_CTL, &read_buf); |
994 | check_warn_return(ret, "Failed to read INT_EP_CTL: %d\n", ret); | 994 | check_warn_return(ret, "Failed to read INT_EP_CTL: %d\n", ret); |
@@ -1000,10 +1000,10 @@ static int smsc95xx_reset(struct usbnet *dev) | |||
1000 | check_warn_return(ret, "Failed to write INT_EP_CTL: %d\n", ret); | 1000 | check_warn_return(ret, "Failed to write INT_EP_CTL: %d\n", ret); |
1001 | 1001 | ||
1002 | ret = smsc95xx_start_tx_path(dev); | 1002 | ret = smsc95xx_start_tx_path(dev); |
1003 | check_warn_return(ret, "Failed to start TX path"); | 1003 | check_warn_return(ret, "Failed to start TX path\n"); |
1004 | 1004 | ||
1005 | ret = smsc95xx_start_rx_path(dev, 0); | 1005 | ret = smsc95xx_start_rx_path(dev, 0); |
1006 | check_warn_return(ret, "Failed to start RX path"); | 1006 | check_warn_return(ret, "Failed to start RX path\n"); |
1007 | 1007 | ||
1008 | netif_dbg(dev, ifup, dev->net, "smsc95xx_reset, return 0\n"); | 1008 | netif_dbg(dev, ifup, dev->net, "smsc95xx_reset, return 0\n"); |
1009 | return 0; | 1009 | return 0; |
@@ -1098,15 +1098,15 @@ static int smsc95xx_enable_phy_wakeup_interrupts(struct usbnet *dev, u16 mask) | |||
1098 | struct mii_if_info *mii = &dev->mii; | 1098 | struct mii_if_info *mii = &dev->mii; |
1099 | int ret; | 1099 | int ret; |
1100 | 1100 | ||
1101 | netdev_dbg(dev->net, "enabling PHY wakeup interrupts"); | 1101 | netdev_dbg(dev->net, "enabling PHY wakeup interrupts\n"); |
1102 | 1102 | ||
1103 | /* read to clear */ | 1103 | /* read to clear */ |
1104 | ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_SRC); | 1104 | ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_SRC); |
1105 | check_warn_return(ret, "Error reading PHY_INT_SRC"); | 1105 | check_warn_return(ret, "Error reading PHY_INT_SRC\n"); |
1106 | 1106 | ||
1107 | /* enable interrupt source */ | 1107 | /* enable interrupt source */ |
1108 | ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_MASK); | 1108 | ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_MASK); |
1109 | check_warn_return(ret, "Error reading PHY_INT_MASK"); | 1109 | check_warn_return(ret, "Error reading PHY_INT_MASK\n"); |
1110 | 1110 | ||
1111 | ret |= mask; | 1111 | ret |= mask; |
1112 | 1112 | ||
@@ -1122,10 +1122,10 @@ static int smsc95xx_link_ok_nopm(struct usbnet *dev) | |||
1122 | 1122 | ||
1123 | /* first, a dummy read, needed to latch some MII phys */ | 1123 | /* first, a dummy read, needed to latch some MII phys */ |
1124 | ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR); | 1124 | ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR); |
1125 | check_warn_return(ret, "Error reading MII_BMSR"); | 1125 | check_warn_return(ret, "Error reading MII_BMSR\n"); |
1126 | 1126 | ||
1127 | ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR); | 1127 | ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR); |
1128 | check_warn_return(ret, "Error reading MII_BMSR"); | 1128 | check_warn_return(ret, "Error reading MII_BMSR\n"); |
1129 | 1129 | ||
1130 | return !!(ret & BMSR_LSTATUS); | 1130 | return !!(ret & BMSR_LSTATUS); |
1131 | } | 1131 | } |
@@ -1137,13 +1137,13 @@ static int smsc95xx_enter_suspend0(struct usbnet *dev) | |||
1137 | int ret; | 1137 | int ret; |
1138 | 1138 | ||
1139 | ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); | 1139 | ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); |
1140 | check_warn_return(ret, "Error reading PM_CTRL"); | 1140 | check_warn_return(ret, "Error reading PM_CTRL\n"); |
1141 | 1141 | ||
1142 | val &= (~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_)); | 1142 | val &= (~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_)); |
1143 | val |= PM_CTL_SUS_MODE_0; | 1143 | val |= PM_CTL_SUS_MODE_0; |
1144 | 1144 | ||
1145 | ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); | 1145 | ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); |
1146 | check_warn_return(ret, "Error writing PM_CTRL"); | 1146 | check_warn_return(ret, "Error writing PM_CTRL\n"); |
1147 | 1147 | ||
1148 | /* clear wol status */ | 1148 | /* clear wol status */ |
1149 | val &= ~PM_CTL_WUPS_; | 1149 | val &= ~PM_CTL_WUPS_; |
@@ -1154,11 +1154,11 @@ static int smsc95xx_enter_suspend0(struct usbnet *dev) | |||
1154 | val |= PM_CTL_WUPS_ED_; | 1154 | val |= PM_CTL_WUPS_ED_; |
1155 | 1155 | ||
1156 | ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); | 1156 | ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); |
1157 | check_warn_return(ret, "Error writing PM_CTRL"); | 1157 | check_warn_return(ret, "Error writing PM_CTRL\n"); |
1158 | 1158 | ||
1159 | /* read back PM_CTRL */ | 1159 | /* read back PM_CTRL */ |
1160 | ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); | 1160 | ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); |
1161 | check_warn_return(ret, "Error reading PM_CTRL"); | 1161 | check_warn_return(ret, "Error reading PM_CTRL\n"); |
1162 | 1162 | ||
1163 | smsc95xx_set_feature(dev, USB_DEVICE_REMOTE_WAKEUP); | 1163 | smsc95xx_set_feature(dev, USB_DEVICE_REMOTE_WAKEUP); |
1164 | 1164 | ||
@@ -1181,7 +1181,7 @@ static int smsc95xx_enter_suspend1(struct usbnet *dev) | |||
1181 | 1181 | ||
1182 | /* enable energy detect power-down mode */ | 1182 | /* enable energy detect power-down mode */ |
1183 | ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_MODE_CTRL_STS); | 1183 | ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_MODE_CTRL_STS); |
1184 | check_warn_return(ret, "Error reading PHY_MODE_CTRL_STS"); | 1184 | check_warn_return(ret, "Error reading PHY_MODE_CTRL_STS\n"); |
1185 | 1185 | ||
1186 | ret |= MODE_CTRL_STS_EDPWRDOWN_; | 1186 | ret |= MODE_CTRL_STS_EDPWRDOWN_; |
1187 | 1187 | ||
@@ -1189,20 +1189,20 @@ static int smsc95xx_enter_suspend1(struct usbnet *dev) | |||
1189 | 1189 | ||
1190 | /* enter SUSPEND1 mode */ | 1190 | /* enter SUSPEND1 mode */ |
1191 | ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); | 1191 | ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); |
1192 | check_warn_return(ret, "Error reading PM_CTRL"); | 1192 | check_warn_return(ret, "Error reading PM_CTRL\n"); |
1193 | 1193 | ||
1194 | val &= ~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_); | 1194 | val &= ~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_); |
1195 | val |= PM_CTL_SUS_MODE_1; | 1195 | val |= PM_CTL_SUS_MODE_1; |
1196 | 1196 | ||
1197 | ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); | 1197 | ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); |
1198 | check_warn_return(ret, "Error writing PM_CTRL"); | 1198 | check_warn_return(ret, "Error writing PM_CTRL\n"); |
1199 | 1199 | ||
1200 | /* clear wol status, enable energy detection */ | 1200 | /* clear wol status, enable energy detection */ |
1201 | val &= ~PM_CTL_WUPS_; | 1201 | val &= ~PM_CTL_WUPS_; |
1202 | val |= (PM_CTL_WUPS_ED_ | PM_CTL_ED_EN_); | 1202 | val |= (PM_CTL_WUPS_ED_ | PM_CTL_ED_EN_); |
1203 | 1203 | ||
1204 | ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); | 1204 | ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); |
1205 | check_warn_return(ret, "Error writing PM_CTRL"); | 1205 | check_warn_return(ret, "Error writing PM_CTRL\n"); |
1206 | 1206 | ||
1207 | smsc95xx_set_feature(dev, USB_DEVICE_REMOTE_WAKEUP); | 1207 | smsc95xx_set_feature(dev, USB_DEVICE_REMOTE_WAKEUP); |
1208 | 1208 | ||
@@ -1215,13 +1215,13 @@ static int smsc95xx_enter_suspend2(struct usbnet *dev) | |||
1215 | int ret; | 1215 | int ret; |
1216 | 1216 | ||
1217 | ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); | 1217 | ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); |
1218 | check_warn_return(ret, "Error reading PM_CTRL"); | 1218 | check_warn_return(ret, "Error reading PM_CTRL\n"); |
1219 | 1219 | ||
1220 | val &= ~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_); | 1220 | val &= ~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_); |
1221 | val |= PM_CTL_SUS_MODE_2; | 1221 | val |= PM_CTL_SUS_MODE_2; |
1222 | 1222 | ||
1223 | ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); | 1223 | ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); |
1224 | check_warn_return(ret, "Error writing PM_CTRL"); | 1224 | check_warn_return(ret, "Error writing PM_CTRL\n"); |
1225 | 1225 | ||
1226 | return 0; | 1226 | return 0; |
1227 | } | 1227 | } |
@@ -1234,7 +1234,7 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message) | |||
1234 | int ret; | 1234 | int ret; |
1235 | 1235 | ||
1236 | ret = usbnet_suspend(intf, message); | 1236 | ret = usbnet_suspend(intf, message); |
1237 | check_warn_return(ret, "usbnet_suspend error"); | 1237 | check_warn_return(ret, "usbnet_suspend error\n"); |
1238 | 1238 | ||
1239 | /* determine if link is up using only _nopm functions */ | 1239 | /* determine if link is up using only _nopm functions */ |
1240 | link_up = smsc95xx_link_ok_nopm(dev); | 1240 | link_up = smsc95xx_link_ok_nopm(dev); |
@@ -1244,24 +1244,24 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message) | |||
1244 | */ | 1244 | */ |
1245 | if (!(pdata->wolopts & SUPPORTED_WAKE) || | 1245 | if (!(pdata->wolopts & SUPPORTED_WAKE) || |
1246 | !(link_up || (pdata->wolopts & WAKE_PHY))) { | 1246 | !(link_up || (pdata->wolopts & WAKE_PHY))) { |
1247 | netdev_info(dev->net, "entering SUSPEND2 mode"); | 1247 | netdev_info(dev->net, "entering SUSPEND2 mode\n"); |
1248 | 1248 | ||
1249 | /* disable energy detect (link up) & wake up events */ | 1249 | /* disable energy detect (link up) & wake up events */ |
1250 | ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); | 1250 | ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); |
1251 | check_warn_return(ret, "Error reading WUCSR"); | 1251 | check_warn_return(ret, "Error reading WUCSR\n"); |
1252 | 1252 | ||
1253 | val &= ~(WUCSR_MPEN_ | WUCSR_WAKE_EN_); | 1253 | val &= ~(WUCSR_MPEN_ | WUCSR_WAKE_EN_); |
1254 | 1254 | ||
1255 | ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); | 1255 | ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); |
1256 | check_warn_return(ret, "Error writing WUCSR"); | 1256 | check_warn_return(ret, "Error writing WUCSR\n"); |
1257 | 1257 | ||
1258 | ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); | 1258 | ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); |
1259 | check_warn_return(ret, "Error reading PM_CTRL"); | 1259 | check_warn_return(ret, "Error reading PM_CTRL\n"); |
1260 | 1260 | ||
1261 | val &= ~(PM_CTL_ED_EN_ | PM_CTL_WOL_EN_); | 1261 | val &= ~(PM_CTL_ED_EN_ | PM_CTL_WOL_EN_); |
1262 | 1262 | ||
1263 | ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); | 1263 | ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); |
1264 | check_warn_return(ret, "Error writing PM_CTRL"); | 1264 | check_warn_return(ret, "Error writing PM_CTRL\n"); |
1265 | 1265 | ||
1266 | return smsc95xx_enter_suspend2(dev); | 1266 | return smsc95xx_enter_suspend2(dev); |
1267 | } | 1267 | } |
@@ -1269,13 +1269,13 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message) | |||
1269 | if (pdata->wolopts & WAKE_PHY) { | 1269 | if (pdata->wolopts & WAKE_PHY) { |
1270 | ret = smsc95xx_enable_phy_wakeup_interrupts(dev, | 1270 | ret = smsc95xx_enable_phy_wakeup_interrupts(dev, |
1271 | (PHY_INT_MASK_ANEG_COMP_ | PHY_INT_MASK_LINK_DOWN_)); | 1271 | (PHY_INT_MASK_ANEG_COMP_ | PHY_INT_MASK_LINK_DOWN_)); |
1272 | check_warn_return(ret, "error enabling PHY wakeup ints"); | 1272 | check_warn_return(ret, "error enabling PHY wakeup ints\n"); |
1273 | 1273 | ||
1274 | /* if link is down then configure EDPD and enter SUSPEND1, | 1274 | /* if link is down then configure EDPD and enter SUSPEND1, |
1275 | * otherwise enter SUSPEND0 below | 1275 | * otherwise enter SUSPEND0 below |
1276 | */ | 1276 | */ |
1277 | if (!link_up) { | 1277 | if (!link_up) { |
1278 | netdev_info(dev->net, "entering SUSPEND1 mode"); | 1278 | netdev_info(dev->net, "entering SUSPEND1 mode\n"); |
1279 | return smsc95xx_enter_suspend1(dev); | 1279 | return smsc95xx_enter_suspend1(dev); |
1280 | } | 1280 | } |
1281 | } | 1281 | } |
@@ -1296,7 +1296,7 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message) | |||
1296 | 1296 | ||
1297 | if (pdata->wolopts & WAKE_BCAST) { | 1297 | if (pdata->wolopts & WAKE_BCAST) { |
1298 | const u8 bcast[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; | 1298 | const u8 bcast[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; |
1299 | netdev_info(dev->net, "enabling broadcast detection"); | 1299 | netdev_info(dev->net, "enabling broadcast detection\n"); |
1300 | filter_mask[filter * 4] = 0x003F; | 1300 | filter_mask[filter * 4] = 0x003F; |
1301 | filter_mask[filter * 4 + 1] = 0x00; | 1301 | filter_mask[filter * 4 + 1] = 0x00; |
1302 | filter_mask[filter * 4 + 2] = 0x00; | 1302 | filter_mask[filter * 4 + 2] = 0x00; |
@@ -1309,7 +1309,7 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message) | |||
1309 | 1309 | ||
1310 | if (pdata->wolopts & WAKE_MCAST) { | 1310 | if (pdata->wolopts & WAKE_MCAST) { |
1311 | const u8 mcast[] = {0x01, 0x00, 0x5E}; | 1311 | const u8 mcast[] = {0x01, 0x00, 0x5E}; |
1312 | netdev_info(dev->net, "enabling multicast detection"); | 1312 | netdev_info(dev->net, "enabling multicast detection\n"); |
1313 | filter_mask[filter * 4] = 0x0007; | 1313 | filter_mask[filter * 4] = 0x0007; |
1314 | filter_mask[filter * 4 + 1] = 0x00; | 1314 | filter_mask[filter * 4 + 1] = 0x00; |
1315 | filter_mask[filter * 4 + 2] = 0x00; | 1315 | filter_mask[filter * 4 + 2] = 0x00; |
@@ -1322,7 +1322,7 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message) | |||
1322 | 1322 | ||
1323 | if (pdata->wolopts & WAKE_ARP) { | 1323 | if (pdata->wolopts & WAKE_ARP) { |
1324 | const u8 arp[] = {0x08, 0x06}; | 1324 | const u8 arp[] = {0x08, 0x06}; |
1325 | netdev_info(dev->net, "enabling ARP detection"); | 1325 | netdev_info(dev->net, "enabling ARP detection\n"); |
1326 | filter_mask[filter * 4] = 0x0003; | 1326 | filter_mask[filter * 4] = 0x0003; |
1327 | filter_mask[filter * 4 + 1] = 0x00; | 1327 | filter_mask[filter * 4 + 1] = 0x00; |
1328 | filter_mask[filter * 4 + 2] = 0x00; | 1328 | filter_mask[filter * 4 + 2] = 0x00; |
@@ -1334,7 +1334,7 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message) | |||
1334 | } | 1334 | } |
1335 | 1335 | ||
1336 | if (pdata->wolopts & WAKE_UCAST) { | 1336 | if (pdata->wolopts & WAKE_UCAST) { |
1337 | netdev_info(dev->net, "enabling unicast detection"); | 1337 | netdev_info(dev->net, "enabling unicast detection\n"); |
1338 | filter_mask[filter * 4] = 0x003F; | 1338 | filter_mask[filter * 4] = 0x003F; |
1339 | filter_mask[filter * 4 + 1] = 0x00; | 1339 | filter_mask[filter * 4 + 1] = 0x00; |
1340 | filter_mask[filter * 4 + 2] = 0x00; | 1340 | filter_mask[filter * 4 + 2] = 0x00; |
@@ -1349,72 +1349,72 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message) | |||
1349 | ret = smsc95xx_write_reg_nopm(dev, WUFF, filter_mask[i]); | 1349 | ret = smsc95xx_write_reg_nopm(dev, WUFF, filter_mask[i]); |
1350 | if (ret < 0) | 1350 | if (ret < 0) |
1351 | kfree(filter_mask); | 1351 | kfree(filter_mask); |
1352 | check_warn_return(ret, "Error writing WUFF"); | 1352 | check_warn_return(ret, "Error writing WUFF\n"); |
1353 | } | 1353 | } |
1354 | kfree(filter_mask); | 1354 | kfree(filter_mask); |
1355 | 1355 | ||
1356 | for (i = 0; i < (wuff_filter_count / 4); i++) { | 1356 | for (i = 0; i < (wuff_filter_count / 4); i++) { |
1357 | ret = smsc95xx_write_reg_nopm(dev, WUFF, command[i]); | 1357 | ret = smsc95xx_write_reg_nopm(dev, WUFF, command[i]); |
1358 | check_warn_return(ret, "Error writing WUFF"); | 1358 | check_warn_return(ret, "Error writing WUFF\n"); |
1359 | } | 1359 | } |
1360 | 1360 | ||
1361 | for (i = 0; i < (wuff_filter_count / 4); i++) { | 1361 | for (i = 0; i < (wuff_filter_count / 4); i++) { |
1362 | ret = smsc95xx_write_reg_nopm(dev, WUFF, offset[i]); | 1362 | ret = smsc95xx_write_reg_nopm(dev, WUFF, offset[i]); |
1363 | check_warn_return(ret, "Error writing WUFF"); | 1363 | check_warn_return(ret, "Error writing WUFF\n"); |
1364 | } | 1364 | } |
1365 | 1365 | ||
1366 | for (i = 0; i < (wuff_filter_count / 2); i++) { | 1366 | for (i = 0; i < (wuff_filter_count / 2); i++) { |
1367 | ret = smsc95xx_write_reg_nopm(dev, WUFF, crc[i]); | 1367 | ret = smsc95xx_write_reg_nopm(dev, WUFF, crc[i]); |
1368 | check_warn_return(ret, "Error writing WUFF"); | 1368 | check_warn_return(ret, "Error writing WUFF\n"); |
1369 | } | 1369 | } |
1370 | 1370 | ||
1371 | /* clear any pending pattern match packet status */ | 1371 | /* clear any pending pattern match packet status */ |
1372 | ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); | 1372 | ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); |
1373 | check_warn_return(ret, "Error reading WUCSR"); | 1373 | check_warn_return(ret, "Error reading WUCSR\n"); |
1374 | 1374 | ||
1375 | val |= WUCSR_WUFR_; | 1375 | val |= WUCSR_WUFR_; |
1376 | 1376 | ||
1377 | ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); | 1377 | ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); |
1378 | check_warn_return(ret, "Error writing WUCSR"); | 1378 | check_warn_return(ret, "Error writing WUCSR\n"); |
1379 | } | 1379 | } |
1380 | 1380 | ||
1381 | if (pdata->wolopts & WAKE_MAGIC) { | 1381 | if (pdata->wolopts & WAKE_MAGIC) { |
1382 | /* clear any pending magic packet status */ | 1382 | /* clear any pending magic packet status */ |
1383 | ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); | 1383 | ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); |
1384 | check_warn_return(ret, "Error reading WUCSR"); | 1384 | check_warn_return(ret, "Error reading WUCSR\n"); |
1385 | 1385 | ||
1386 | val |= WUCSR_MPR_; | 1386 | val |= WUCSR_MPR_; |
1387 | 1387 | ||
1388 | ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); | 1388 | ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); |
1389 | check_warn_return(ret, "Error writing WUCSR"); | 1389 | check_warn_return(ret, "Error writing WUCSR\n"); |
1390 | } | 1390 | } |
1391 | 1391 | ||
1392 | /* enable/disable wakeup sources */ | 1392 | /* enable/disable wakeup sources */ |
1393 | ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); | 1393 | ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); |
1394 | check_warn_return(ret, "Error reading WUCSR"); | 1394 | check_warn_return(ret, "Error reading WUCSR\n"); |
1395 | 1395 | ||
1396 | if (pdata->wolopts & (WAKE_BCAST | WAKE_MCAST | WAKE_ARP | WAKE_UCAST)) { | 1396 | if (pdata->wolopts & (WAKE_BCAST | WAKE_MCAST | WAKE_ARP | WAKE_UCAST)) { |
1397 | netdev_info(dev->net, "enabling pattern match wakeup"); | 1397 | netdev_info(dev->net, "enabling pattern match wakeup\n"); |
1398 | val |= WUCSR_WAKE_EN_; | 1398 | val |= WUCSR_WAKE_EN_; |
1399 | } else { | 1399 | } else { |
1400 | netdev_info(dev->net, "disabling pattern match wakeup"); | 1400 | netdev_info(dev->net, "disabling pattern match wakeup\n"); |
1401 | val &= ~WUCSR_WAKE_EN_; | 1401 | val &= ~WUCSR_WAKE_EN_; |
1402 | } | 1402 | } |
1403 | 1403 | ||
1404 | if (pdata->wolopts & WAKE_MAGIC) { | 1404 | if (pdata->wolopts & WAKE_MAGIC) { |
1405 | netdev_info(dev->net, "enabling magic packet wakeup"); | 1405 | netdev_info(dev->net, "enabling magic packet wakeup\n"); |
1406 | val |= WUCSR_MPEN_; | 1406 | val |= WUCSR_MPEN_; |
1407 | } else { | 1407 | } else { |
1408 | netdev_info(dev->net, "disabling magic packet wakeup"); | 1408 | netdev_info(dev->net, "disabling magic packet wakeup\n"); |
1409 | val &= ~WUCSR_MPEN_; | 1409 | val &= ~WUCSR_MPEN_; |
1410 | } | 1410 | } |
1411 | 1411 | ||
1412 | ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); | 1412 | ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); |
1413 | check_warn_return(ret, "Error writing WUCSR"); | 1413 | check_warn_return(ret, "Error writing WUCSR\n"); |
1414 | 1414 | ||
1415 | /* enable wol wakeup source */ | 1415 | /* enable wol wakeup source */ |
1416 | ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); | 1416 | ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); |
1417 | check_warn_return(ret, "Error reading PM_CTRL"); | 1417 | check_warn_return(ret, "Error reading PM_CTRL\n"); |
1418 | 1418 | ||
1419 | val |= PM_CTL_WOL_EN_; | 1419 | val |= PM_CTL_WOL_EN_; |
1420 | 1420 | ||
@@ -1423,13 +1423,13 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message) | |||
1423 | val |= PM_CTL_ED_EN_; | 1423 | val |= PM_CTL_ED_EN_; |
1424 | 1424 | ||
1425 | ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); | 1425 | ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); |
1426 | check_warn_return(ret, "Error writing PM_CTRL"); | 1426 | check_warn_return(ret, "Error writing PM_CTRL\n"); |
1427 | 1427 | ||
1428 | /* enable receiver to enable frame reception */ | 1428 | /* enable receiver to enable frame reception */ |
1429 | smsc95xx_start_rx_path(dev, 1); | 1429 | smsc95xx_start_rx_path(dev, 1); |
1430 | 1430 | ||
1431 | /* some wol options are enabled, so enter SUSPEND0 */ | 1431 | /* some wol options are enabled, so enter SUSPEND0 */ |
1432 | netdev_info(dev->net, "entering SUSPEND0 mode"); | 1432 | netdev_info(dev->net, "entering SUSPEND0 mode\n"); |
1433 | return smsc95xx_enter_suspend0(dev); | 1433 | return smsc95xx_enter_suspend0(dev); |
1434 | } | 1434 | } |
1435 | 1435 | ||
@@ -1447,26 +1447,26 @@ static int smsc95xx_resume(struct usb_interface *intf) | |||
1447 | 1447 | ||
1448 | /* clear wake-up sources */ | 1448 | /* clear wake-up sources */ |
1449 | ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); | 1449 | ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); |
1450 | check_warn_return(ret, "Error reading WUCSR"); | 1450 | check_warn_return(ret, "Error reading WUCSR\n"); |
1451 | 1451 | ||
1452 | val &= ~(WUCSR_WAKE_EN_ | WUCSR_MPEN_); | 1452 | val &= ~(WUCSR_WAKE_EN_ | WUCSR_MPEN_); |
1453 | 1453 | ||
1454 | ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); | 1454 | ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); |
1455 | check_warn_return(ret, "Error writing WUCSR"); | 1455 | check_warn_return(ret, "Error writing WUCSR\n"); |
1456 | 1456 | ||
1457 | /* clear wake-up status */ | 1457 | /* clear wake-up status */ |
1458 | ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); | 1458 | ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); |
1459 | check_warn_return(ret, "Error reading PM_CTRL"); | 1459 | check_warn_return(ret, "Error reading PM_CTRL\n"); |
1460 | 1460 | ||
1461 | val &= ~PM_CTL_WOL_EN_; | 1461 | val &= ~PM_CTL_WOL_EN_; |
1462 | val |= PM_CTL_WUPS_; | 1462 | val |= PM_CTL_WUPS_; |
1463 | 1463 | ||
1464 | ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); | 1464 | ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); |
1465 | check_warn_return(ret, "Error writing PM_CTRL"); | 1465 | check_warn_return(ret, "Error writing PM_CTRL\n"); |
1466 | } | 1466 | } |
1467 | 1467 | ||
1468 | ret = usbnet_resume(intf); | 1468 | ret = usbnet_resume(intf); |
1469 | check_warn_return(ret, "usbnet_resume error"); | 1469 | check_warn_return(ret, "usbnet_resume error\n"); |
1470 | 1470 | ||
1471 | return 0; | 1471 | return 0; |
1472 | } | 1472 | } |