summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>2011-06-15 15:00:52 +0200
committerPhilippe LANGLAIS <philippe.langlais@stericsson.com>2011-06-22 11:32:39 +0200
commitac56e423498d427dce581949ef28c46b41cd50b9 (patch)
tree801bf77ddba49c0f6325413df57ba331330bec1b
parentb40bde281a6ef70959f9cf94777e9d4964955196 (diff)
cw1200: Document and optimize device reset sequence.
Some devices have problems with reset if WRESET is active (low) when device is being powered on. Additional WRESET cycle is required for these devices. Change-Id: I117c1776e3819260ec7f4aa4e0d14174eb3f7e82 Signed-off-by: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/25624 Reviewed-by: Philippe LANGLAIS <philippe.langlais@stericsson.com> Reviewed-by: Robert MARKLUND <robert.marklund@stericsson.com>
-rw-r--r--drivers/staging/cw1200/cw1200_sdio.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/staging/cw1200/cw1200_sdio.c b/drivers/staging/cw1200/cw1200_sdio.c
index 235ac67cb75..e106129f4a3 100644
--- a/drivers/staging/cw1200/cw1200_sdio.c
+++ b/drivers/staging/cw1200/cw1200_sdio.c
@@ -259,10 +259,18 @@ 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);
- msleep(100);
+ /* 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_set_value(reset->start, 0);
- msleep(100);
+ /* 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
+ * for the on-chip LDO to stabilize */
+ msleep(30);
cw1200_detect_card(pdata);
return 0;
}