Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751795AbdIURr7 (ORCPT ); Thu, 21 Sep 2017 13:47:59 -0400 Received: from mx0a-00010702.pphosted.com ([148.163.156.75]:41848 "EHLO mx0b-00010702.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751679AbdIURr5 (ORCPT ); Thu, 21 Sep 2017 13:47:57 -0400 From: Kyle Roeschley To: CC: , Subject: [PATCH] mmc: core: Wait for Vdd to settle on card power off Date: Thu, 21 Sep 2017 12:47:54 -0500 Message-ID: <20170921174754.13648-1-kyle.roeschley@ni.com> X-Mailer: git-send-email 2.14.1 MIME-Version: 1.0 Content-Type: text/plain X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-09-21_04:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_policy_notspam policy=outbound_policy score=30 priorityscore=1501 malwarescore=0 suspectscore=4 phishscore=0 bulkscore=0 spamscore=0 clxscore=1011 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=30 reason=mlx scancount=1 engine=8.0.1-1707230000 definitions=main-1709210240 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1249 Lines: 39 The SD spec version 6.0 section 6.4.1.5 requires that Vdd must be lowered to less than 0.5V for a minimum of 1 ms when powering off a card. Increase our wait to 10 ms so that voltage has time to drain down to 0.5V and cards can power off correctly. Signed-off-by: Kyle Roeschley --- drivers/mmc/core/core.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index 66c9cf49ad2f..38630246de26 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -1679,18 +1679,16 @@ void mmc_power_off(struct mmc_host *host) mmc_set_initial_state(host); /* - * Some configurations, such as the 802.11 SDIO card in the OLPC - * XO-1.5, require a short delay after poweroff before the card - * can be successfully turned on again. + * The SD spec requires at least 1 ms with Vdd at less than 0.5 V + * before a card can be re-powered, but we need to wait longer so that + * the voltage has time to drain. */ - mmc_delay(1); + mmc_delay(10); } void mmc_power_cycle(struct mmc_host *host, u32 ocr) { mmc_power_off(host); - /* Wait at least 1 ms according to SD spec */ - mmc_delay(1); mmc_power_up(host, ocr); } -- 2.14.1