Commit 5397cbc2 authored by Glen Lee's avatar Glen Lee Committed by Greg Kroah-Hartman

staging: wilc1000: sdio_init: add resume argument

Part of sdio init codes should not run when sdio init function is called on
sdio resume so skip them.
Signed-off-by: default avatarGlen Lee <glen.lee@atmel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 76855ba7
...@@ -42,7 +42,7 @@ static wilc_sdio_t g_sdio; ...@@ -42,7 +42,7 @@ static wilc_sdio_t g_sdio;
static int sdio_write_reg(struct wilc *wilc, u32 addr, u32 data); static int sdio_write_reg(struct wilc *wilc, u32 addr, u32 data);
static int sdio_read_reg(struct wilc *wilc, u32 addr, u32 *data); static int sdio_read_reg(struct wilc *wilc, u32 addr, u32 *data);
static int sdio_init(struct wilc *wilc); static int sdio_init(struct wilc *wilc, bool resume);
static void wilc_sdio_interrupt(struct sdio_func *func) static void wilc_sdio_interrupt(struct sdio_func *func)
{ {
...@@ -196,7 +196,7 @@ static int wilc_sdio_resume(struct device *dev) ...@@ -196,7 +196,7 @@ static int wilc_sdio_resume(struct device *dev)
dev_info(dev, "sdio resume\n"); dev_info(dev, "sdio resume\n");
sdio_release_host(func); sdio_release_host(func);
chip_wakeup(wilc); chip_wakeup(wilc);
sdio_init(wilc); sdio_init(wilc, true);
if (wilc->suspend_event) if (wilc->suspend_event)
host_wakeup_notify(wilc); host_wakeup_notify(wilc);
...@@ -667,16 +667,17 @@ static int sdio_deinit(struct wilc *wilc) ...@@ -667,16 +667,17 @@ static int sdio_deinit(struct wilc *wilc)
return 1; return 1;
} }
static int sdio_init(struct wilc *wilc) static int sdio_init(struct wilc *wilc, bool resume)
{ {
struct sdio_func *func = dev_to_sdio_func(wilc->dev); struct sdio_func *func = dev_to_sdio_func(wilc->dev);
sdio_cmd52_t cmd; sdio_cmd52_t cmd;
int loop, ret; int loop, ret;
u32 chipid; u32 chipid;
memset(&g_sdio, 0, sizeof(wilc_sdio_t)); if (!resume) {
memset(&g_sdio, 0, sizeof(wilc_sdio_t));
g_sdio.irq_gpio = (wilc->dev_irq_num); g_sdio.irq_gpio = (wilc->dev_irq_num);
}
/** /**
* function 0 csa enable * function 0 csa enable
...@@ -766,16 +767,19 @@ static int sdio_init(struct wilc *wilc) ...@@ -766,16 +767,19 @@ static int sdio_init(struct wilc *wilc)
/** /**
* make sure can read back chip id correctly * make sure can read back chip id correctly
**/ **/
if (!sdio_read_reg(wilc, 0x1000, &chipid)) { if (!resume) {
dev_err(&func->dev, "Fail cmd read chip id...\n"); if (!sdio_read_reg(wilc, 0x1000, &chipid)) {
goto _fail_; dev_err(&func->dev, "Fail cmd read chip id...\n");
goto _fail_;
}
dev_err(&func->dev, "chipid (%08x)\n", chipid);
if ((chipid & 0xfff) > 0x2a0)
g_sdio.has_thrpt_enh3 = 1;
else
g_sdio.has_thrpt_enh3 = 0;
dev_info(&func->dev, "has_thrpt_enh3 = %d...\n",
g_sdio.has_thrpt_enh3);
} }
dev_err(&func->dev, "chipid (%08x)\n", chipid);
if ((chipid & 0xfff) > 0x2a0)
g_sdio.has_thrpt_enh3 = 1;
else
g_sdio.has_thrpt_enh3 = 0;
dev_info(&func->dev, "has_thrpt_enh3 = %d...\n", g_sdio.has_thrpt_enh3);
return 1; return 1;
......
...@@ -850,7 +850,7 @@ static int _wilc_spi_deinit(struct wilc *wilc) ...@@ -850,7 +850,7 @@ static int _wilc_spi_deinit(struct wilc *wilc)
return 1; return 1;
} }
static int wilc_spi_init(struct wilc *wilc) static int wilc_spi_init(struct wilc *wilc, bool resume)
{ {
struct spi_device *spi = to_spi_device(wilc->dev); struct spi_device *spi = to_spi_device(wilc->dev);
u32 reg; u32 reg;
......
...@@ -1530,7 +1530,7 @@ int wilc_wlan_init(struct net_device *dev) ...@@ -1530,7 +1530,7 @@ int wilc_wlan_init(struct net_device *dev)
wilc->quit = 0; wilc->quit = 0;
if (!wilc->hif_func->hif_init(wilc)) { if (!wilc->hif_func->hif_init(wilc, false)) {
ret = -EIO; ret = -EIO;
goto _fail_; goto _fail_;
} }
......
...@@ -227,7 +227,7 @@ struct rxq_entry_t { ...@@ -227,7 +227,7 @@ struct rxq_entry_t {
********************************************/ ********************************************/
struct wilc; struct wilc;
struct wilc_hif_func { struct wilc_hif_func {
int (*hif_init)(struct wilc *); int (*hif_init)(struct wilc *, bool resume);
int (*hif_deinit)(struct wilc *); int (*hif_deinit)(struct wilc *);
int (*hif_read_reg)(struct wilc *, u32, u32 *); int (*hif_read_reg)(struct wilc *, u32, u32 *);
int (*hif_write_reg)(struct wilc *, u32, u32); int (*hif_write_reg)(struct wilc *, u32, u32);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment