From akpm@osdl.org Sun Apr 24 16:40:58 2005 Subject: [patch 1/1] USB: PM support for zd1201 To: greg@kroah.com From: akpm@osdl.org Date: Sun, 24 Apr 2005 16:37:15 -0700 From: Colin Leroy 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 Signed-off-by: Andrew Morton Signed-off-by: Greg Kroah-Hartman --- drivers/usb/net/zd1201.c | 38 ++++++++++++++++++++++++++++++++++++++ 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 2005-04-24 16:35:16.762649880 -0700 +++ 25-akpm/drivers/usb/net/zd1201.c 2005-04-24 16:36:37.568365544 -0700 @@ -1884,12 +1884,50 @@ static void zd1201_disconnect(struct usb kfree(zd); } +#ifdef CONFIG_PM + +static int zd1201_suspend(struct usb_interface *interface, + pm_message_t message) +{ + struct zd1201 *zd = 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 = 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 2005-04-24 16:35:16.763649728 -0700 +++ 25-akpm/drivers/usb/net/zd1201.h 2005-04-24 16:35:16.769648816 -0700 @@ -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; _