From: Colin Leroy <colin@colino.net>

This patch enables power management (suspend, resume) support for zd1201. 
It fixes problems after wakeup for me, but these problems did not appear
everytime without this patch.  it's a bit empirical, based on what the
usbnet does, so maybe not correct...  Maybe someone can give it a look
before it's applied.

Signed-off-by: Colin Leroy <colin@colino.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/drivers/usb/net/zd1201.c |   38 ++++++++++++++++++++++++++++++++++++++
 25-akpm/drivers/usb/net/zd1201.h |    1 +
 2 files changed, 39 insertions(+)

diff -puN drivers/usb/net/zd1201.c~pm-support-for-zd1201 drivers/usb/net/zd1201.c
--- 25/drivers/usb/net/zd1201.c~pm-support-for-zd1201	Fri Apr  1 14:20:31 2005
+++ 25-akpm/drivers/usb/net/zd1201.c	Fri Apr  1 14:20:31 2005
@@ -1883,12 +1883,50 @@ void zd1201_disconnect(struct usb_interf
 	kfree(zd);
 }
 
+#ifdef CONFIG_PM
+
+static int zd1201_suspend (struct usb_interface *interface,
+			   pm_message_t message)
+{
+	struct zd1201 *zd = (struct zd1201 *)usb_get_intfdata(interface);
+
+	netif_device_detach(zd->dev);
+
+	zd->was_enabled = zd->mac_enabled;
+
+	if (zd->was_enabled)
+		return zd1201_disable(zd);
+	else
+		return 0;
+}
+
+static int zd1201_resume (struct usb_interface *interface)
+{
+	struct zd1201 *zd = (struct zd1201 *)usb_get_intfdata(interface);
+
+	netif_device_attach(zd->dev);
+
+	if (zd->was_enabled)
+		return zd1201_enable(zd);
+	else
+		return 0;
+}
+
+#else
+
+#define zd1201_suspend NULL
+#define zd1201_resume  NULL
+
+#endif
+
 static struct usb_driver zd1201_usb = {
 	.owner = THIS_MODULE,
 	.name = "zd1201",
 	.probe = zd1201_probe,
 	.disconnect = zd1201_disconnect,
 	.id_table = zd1201_table,
+	.suspend = zd1201_suspend,
+	.resume = zd1201_resume,
 };
 
 static int __init zd1201_init(void)
diff -puN drivers/usb/net/zd1201.h~pm-support-for-zd1201 drivers/usb/net/zd1201.h
--- 25/drivers/usb/net/zd1201.h~pm-support-for-zd1201	Fri Apr  1 14:20:31 2005
+++ 25-akpm/drivers/usb/net/zd1201.h	Fri Apr  1 14:20:31 2005
@@ -46,6 +46,7 @@ struct zd1201 {
 	char			essid[IW_ESSID_MAX_SIZE+1];
 	int			essidlen;
 	int			mac_enabled;
+	int			was_enabled;
 	int			monitor;
 	int			encode_enabled;
 	int			encode_restricted;
_