diff options
Diffstat (limited to 'drivers/staging/cw1200/cw1200_sdio.c')
-rw-r--r-- | drivers/staging/cw1200/cw1200_sdio.c | 11 |
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; } |