summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorNarendra Damahe <ndamahe@nvidia.com>2010-03-26 11:29:15 -0700
committerGary King <gking@nvidia.com>2010-03-30 15:14:19 -0800
commit940b19bdd16c37ccf8d24c02e58aa08963fb1c3b (patch)
tree51573f83502a8815003648ff46c4fb23b35243b0 /drivers
parent68f7bc2e1198fc0f40a947efedb8d3120e5098ed (diff)
tegra: SMSC LAN V4 driver integration to reduce power during OS idle
Change-Id: I5dacba846a7c979cf556470699c4b1e036c72ede Reviewed-on: http://git-master/r/970 Reviewed-by: Narendra Damahe <ndamahe@nvidia.com> Tested-by: Narendra Damahe <ndamahe@nvidia.com> Reviewed-by: Gary King <gking@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/usb/smsc9500.c12
-rw-r--r--drivers/net/usb/version.h2
2 files changed, 11 insertions, 3 deletions
diff --git a/drivers/net/usb/smsc9500.c b/drivers/net/usb/smsc9500.c
index a41cf4477d40..2e2e2f5e70e5 100644
--- a/drivers/net/usb/smsc9500.c
+++ b/drivers/net/usb/smsc9500.c
@@ -983,6 +983,9 @@ static int smsc9500_rx_setmulticastlist(struct usbnet *dev)
PADAPTER_DATA adapterData=(PADAPTER_DATA)(dev->data[0]);
+ if (dev->suspendFlag) {
+ return 0;
+ }
if(down_interruptible(&adapterData->RxFilterLock)){
return -EINTR;
}
@@ -1092,6 +1095,7 @@ static int Phy_GetLinkMode(struct usbnet *dev)
PADAPTER_DATA adapterData=(PADAPTER_DATA)(dev->data[0]);
SMSC_TRACE(DBG_LINK, "---------->in Phy_GetLinkMode");
CHECK_RETURN_STATUS(smsc9500_read_phy(dev,PHY_BSR,&dwTemp));
+ CHECK_RETURN_STATUS(smsc9500_read_phy(dev,PHY_BSR,&dwTemp));
wRegBSR=LOWORD(dwTemp);
@@ -4106,6 +4110,7 @@ static int SetWakeupEvents(struct net_device *netdev)
// If there's currently no link we can use Suspend1
CHECK_RETURN_STATUS(smsc9500_read_phy(dev, PHY_BSR, &Value32));
+ CHECK_RETURN_STATUS(smsc9500_read_phy(dev, PHY_BSR, &Value32));
wValue=(u16)Value32;
if (!(wValue & PHY_BSR_LINK_STATUS_))
{
@@ -4690,6 +4695,7 @@ static int Smsc9500AutoSuspend (struct usb_interface *intf, pm_message_t state)
{
adapterData->wakeupOptsBackup = adapterData->WolWakeupOpts;
+ smsc9500_read_phy(dev, PHY_BSR, &Value32);
if(smsc9500_read_phy(dev, PHY_BSR, &Value32) < 0){
return SMSC9500_FAIL;
}
@@ -4746,16 +4752,18 @@ static int Smsc9500AutoSuspend (struct usb_interface *intf, pm_message_t state)
adapterData->dynamicSuspendPHYEvent = PHY_INT_MASK_LINK_DOWN_;
ret = EnablePHYWakeupInterrupt(dev, adapterData->dynamicSuspendPHYEvent);
}
- }else{// if(suspendFlag & AUTOSUSPEND_LINKDOWN){//Resume immediately
+ }else{
ret = SMSC9500_FAIL;
}
}
if(ret != SMSC9500_SUCCESS){
- SMSC_WARNING("Failed to suspend device\n");
+ //SMSC_WARNING("Failed to suspend device\n");
dev->suspendFlag = 0;
if(!dev->pmLock){//Resume immediately
smscusbnet_defer_myevent(dev, EVENT_IDLE_RESUME);
+ Tx_WakeQueue(dev,0x04UL);
+ tasklet_schedule (&dev->bh);
}
goto _SUSPEND_EXIT;
}else{
diff --git a/drivers/net/usb/version.h b/drivers/net/usb/version.h
index 6851385fb7a0..f085e4759ce1 100644
--- a/drivers/net/usb/version.h
+++ b/drivers/net/usb/version.h
@@ -1,6 +1,6 @@
#ifndef SMSC9500_VERSION_H_
#define SMSC9500_VERSION_H_
-#define DRIVER_VERSION (0x01010603UL)
+#define DRIVER_VERSION (0x01010604UL)
#endif /*SMSC9500_VERSION_H_*/