From 7ea432359defa0a802474d406bf109f5628c1827 Mon Sep 17 00:00:00 2001 From: Ben Dooks Date: Tue, 5 Feb 2008 00:02:08 +0000 Subject: [PATCH] --- yaml --- r: 85603 b: refs/heads/master c: 321f69a4c3bb807abdf1fd6329403ec0449a3d78 h: refs/heads/master i: 85601: 671844d45125a1d7480b73be4d5a112036671aa2 85599: c93adf336c03ab0d6f3a76b8b65ef6e97908a81e v: v3 --- [refs] | 2 +- trunk/drivers/net/dm9000.c | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 1a989e2fd789..ec90afa7b246 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 89c8b0e6cd3859a6445398c5aa94ebd21d0e64ce +refs/heads/master: 321f69a4c3bb807abdf1fd6329403ec0449a3d78 diff --git a/trunk/drivers/net/dm9000.c b/trunk/drivers/net/dm9000.c index 071aad1af577..2e0add074889 100644 --- a/trunk/drivers/net/dm9000.c +++ b/trunk/drivers/net/dm9000.c @@ -116,6 +116,7 @@ typedef struct board_info { u8 io_mode; /* 0:word, 2:byte */ u8 phy_addr; unsigned int flags; + unsigned int in_suspend :1; int debug_level; @@ -1107,6 +1108,18 @@ dm9000_hash_table(struct net_device *dev) } +/* + * Sleep, either by using msleep() or if we are suspending, then + * use mdelay() to sleep. + */ +static void dm9000_msleep(board_info_t *db, unsigned int ms) +{ + if (db->in_suspend) + mdelay(ms); + else + msleep(ms); +} + /* * Read a word from phyxcer */ @@ -1131,7 +1144,7 @@ dm9000_phy_read(struct net_device *dev, int phy_reg_unused, int reg) writeb(reg_save, db->io_addr); spin_unlock_irqrestore(&db->lock,flags); - udelay(100); /* Wait read complete */ + dm9000_msleep(db, 1); /* Wait read complete */ spin_lock_irqsave(&db->lock,flags); reg_save = readb(db->io_addr); @@ -1175,7 +1188,7 @@ dm9000_phy_write(struct net_device *dev, int phyaddr_unused, int reg, int value) writeb(reg_save, db->io_addr); spin_unlock_irqrestore(&db->lock,flags); - udelay(500); /* Wait write complete */ + dm9000_msleep(db, 1); /* Wait write complete */ spin_lock_irqsave(&db->lock,flags); reg_save = readb(db->io_addr); @@ -1192,8 +1205,12 @@ static int dm9000_drv_suspend(struct platform_device *dev, pm_message_t state) { struct net_device *ndev = platform_get_drvdata(dev); + board_info_t *db; if (ndev) { + db = (board_info_t *) ndev->priv; + db->in_suspend = 1; + if (netif_running(ndev)) { netif_device_detach(ndev); dm9000_shutdown(ndev); @@ -1216,6 +1233,8 @@ dm9000_drv_resume(struct platform_device *dev) netif_device_attach(ndev); } + + db->in_suspend = 0; } return 0; }