summaryrefslogtreecommitdiff
path: root/drivers/staging/cw1200/cw1200_sdio.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/cw1200/cw1200_sdio.c')
-rw-r--r--drivers/staging/cw1200/cw1200_sdio.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/staging/cw1200/cw1200_sdio.c b/drivers/staging/cw1200/cw1200_sdio.c
index 0438c5ec7cb..ae07267dc99 100644
--- a/drivers/staging/cw1200/cw1200_sdio.c
+++ b/drivers/staging/cw1200/cw1200_sdio.c
@@ -258,12 +258,19 @@ static int cw1200_sdio_on(const struct cw1200_platform_data *pdata)
{
const struct resource *reset = pdata->reset;
gpio_request(reset->start, reset->name);
+ gpio_direction_output(reset->start, 1);
+ /* It is not stated in the datasheet, but at least some of devices
+ * have problems with reset if this stage is omited. */
+ msleep(50);
gpio_direction_output(reset->start, 0);
+ /* A valid reset shall be obtained by maintaining WRESETN
+ * active (low) for at least two cycles of LP_CLK after VDDIO
+ * is stable within it operating range. */
msleep(1);
gpio_set_value(reset->start, 1);
- /* The host should wait 30 ms after the WRESETN release
+ /* The host should wait 32 ms after the WRESETN release
* for the on-chip LDO to stabilize */
- msleep(30);
+ msleep(32);
cw1200_detect_card(pdata);
return 0;
}