summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>2011-06-15 15:00:52 +0200
committerRobert Marklund <robert.marklund@stericsson.com>2011-10-05 12:16:19 +0200
commita85d2200bae1f17dfe0b73c42bc4a55e6d44abf0 (patch)
tree1242852c2c56a9dbc26c15e59301d68771e68264
parentcf348b23c42e71ff4a571a6f2861165d09fb9cd7 (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;
}