[PATCH] sk98lin: basic suspend/resume support fixes

An early version of the sk98lin patch was merged via Len's tree. But there
were subsequent updates as a result of review from Jeff. THis fixes things
up.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Cc: Jeff Garzik <jgarzik@pobox.com>
Cc: "Brown, Len" <len.brown@intel.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by Rafael J. Wysocki and committed by Linus Torvalds 035a4a4f 6a1caa21

+26 -12
+26 -12
drivers/net/sk98lin/skge.c
··· 5141 5141 SK_AC *pAC = pNet->pAC; 5142 5142 struct net_device *otherdev = pAC->dev[1]; 5143 5143 5144 - if (pNet->Up) { 5145 - pAC->WasIfUp[0] = SK_TRUE; 5144 + if (netif_running(dev)) { 5145 + netif_carrier_off(dev); 5146 5146 DoPrintInterfaceChange = SK_FALSE; 5147 5147 SkDrvDeInitAdapter(pAC, 0); /* performs SkGeClose */ 5148 + netif_device_detach(dev); 5148 5149 } 5149 5150 if (otherdev != dev) { 5150 - pNet = netdev_priv(otherdev); 5151 - if (pNet->Up) { 5152 - pAC->WasIfUp[1] = SK_TRUE; 5151 + if (netif_running(otherdev)) { 5152 + netif_carrier_off(otherdev); 5153 5153 DoPrintInterfaceChange = SK_FALSE; 5154 5154 SkDrvDeInitAdapter(pAC, 1); /* performs SkGeClose */ 5155 + netif_device_detach(otherdev); 5155 5156 } 5156 5157 } 5157 5158 ··· 5172 5171 struct net_device *dev = pci_get_drvdata(pdev); 5173 5172 DEV_NET *pNet = netdev_priv(dev); 5174 5173 SK_AC *pAC = pNet->pAC; 5174 + struct net_device *otherdev = pAC->dev[1]; 5175 + int ret; 5175 5176 5176 5177 pci_set_power_state(pdev, PCI_D0); 5177 5178 pci_restore_state(pdev); 5178 5179 pci_enable_device(pdev); 5179 5180 pci_set_master(pdev); 5180 5181 if (pAC->GIni.GIMacsFound == 2) 5181 - request_irq(dev->irq, SkGeIsr, SA_SHIRQ, pAC->Name, dev); 5182 + ret = request_irq(dev->irq, SkGeIsr, SA_SHIRQ, pAC->Name, dev); 5182 5183 else 5183 - request_irq(dev->irq, SkGeIsrOnePort, SA_SHIRQ, pAC->Name, dev); 5184 + ret = request_irq(dev->irq, SkGeIsrOnePort, SA_SHIRQ, pAC->Name, dev); 5185 + if (ret) { 5186 + printk(KERN_WARNING "sk98lin: unable to acquire IRQ %d\n", dev->irq); 5187 + pAC->AllocFlag &= ~SK_ALLOC_IRQ; 5188 + dev->irq = 0; 5189 + pci_disable_device(pdev); 5190 + return -EBUSY; 5191 + } 5184 5192 5185 - if (pAC->WasIfUp[0] == SK_TRUE) { 5193 + netif_device_attach(dev); 5194 + if (netif_running(dev)) { 5186 5195 DoPrintInterfaceChange = SK_FALSE; 5187 5196 SkDrvInitAdapter(pAC, 0); /* first device */ 5188 - } 5189 - if (pAC->dev[1] != dev && pAC->WasIfUp[1] == SK_TRUE) { 5190 - DoPrintInterfaceChange = SK_FALSE; 5191 - SkDrvInitAdapter(pAC, 1); /* first device */ 5197 + } 5198 + if (otherdev != dev) { 5199 + netif_device_attach(otherdev); 5200 + if (netif_running(otherdev)) { 5201 + DoPrintInterfaceChange = SK_FALSE; 5202 + SkDrvInitAdapter(pAC, 1); /* second device */ 5203 + } 5192 5204 } 5193 5205 5194 5206 return 0;