From patchwork Sun Jan 9 16:26:19 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pierre Tardy X-Patchwork-Id: 466621 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p09GUTD2006971 for ; Sun, 9 Jan 2011 16:30:30 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751848Ab1AIQa2 (ORCPT ); Sun, 9 Jan 2011 11:30:28 -0500 Received: from mail-wy0-f174.google.com ([74.125.82.174]:54866 "EHLO mail-wy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750942Ab1AIQa2 (ORCPT ); Sun, 9 Jan 2011 11:30:28 -0500 Received: by wyb28 with SMTP id 28so18790114wyb.19 for ; Sun, 09 Jan 2011 08:30:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:from:to:cc:subject:date :message-id:x-mailer:in-reply-to:references:in-reply-to:references; bh=ZmbRKhsR0/tMbmW0K5v4lQ8UHhvYL+1q8PairvY0tVM=; b=bgdW+Q9usZrtAUW7EwiJBgUZ6im/5s4xVQkxBOpnr1PrRBV+fwqFP+KZATVfLh9s1p u/beZPyHtHc/0uWwzdvW0AKMbR16YUS47n/acw38ZzplDZDZ+FxdTwpdhhMyMP50flKm YgsRTuo/tpw7WcKFZZIit2Z9hHCPmotMHTLJw= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; b=K9AGwERMTqBEG6WtTQzgeAErp5IhMwGk7kE00tISv5Ie2YqHYObF/C6SwWZaVEolee uKlkETFXyiQEvyv0uU92nBLAXMX8wu1Ido0Wyg1F6tl/NzjfIIK9zyavMHVg6UXKttSM FiED0R4WnYeRIZLPreC75atnE2zKQJQdY6Nys= Received: by 10.216.246.70 with SMTP id p48mr7112865wer.92.1294590490515; Sun, 09 Jan 2011 08:28:10 -0800 (PST) Received: from localhost.localdomain ([82.240.198.215]) by mx.google.com with ESMTPS id n18sm13581608wee.16.2011.01.09.08.28.08 (version=TLSv1/SSLv3 cipher=RC4-MD5); Sun, 09 Jan 2011 08:28:09 -0800 (PST) From: Pierre Tardy To: linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Pierre Tardy Subject: [PATCH 2/3] mmc: add MMC_QUIRK_BROKEN_CLK_GATING Date: Sun, 9 Jan 2011 17:26:19 +0100 Message-Id: <4663ceeebbd267abb11515570ac17702a6a482f4.1294588491.git.tardyp@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: References: In-Reply-To: References: Sender: linux-mmc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mmc@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Sun, 09 Jan 2011 16:30:30 +0000 (UTC) diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c index b3ac6c5..461e6a1 100644 --- a/drivers/mmc/core/host.c +++ b/drivers/mmc/core/host.c @@ -160,10 +160,7 @@ static bool mmc_host_may_gate_card(struct mmc_card *card) * gate the clock, because there is somebody out there that may still * be using it. */ - if (mmc_card_sdio(card)) - return false; - - return true; + return !(card->quirks & MMC_QUIRK_BROKEN_CLK_GATING); } /** diff --git a/drivers/mmc/core/quirks.c b/drivers/mmc/core/quirks.c index d8a5fec..fe467c8 100644 --- a/drivers/mmc/core/quirks.c +++ b/drivers/mmc/core/quirks.c @@ -32,7 +32,18 @@ static void add_quirk(struct mmc_card *card, int data) card->quirks |= data; } +/* + * This hook just adds a quirk for all sdio devices + */ +static void add_quirk_for_sdio_devices(struct mmc_card *card, int data) +{ + if (mmc_card_sdio(card)) + card->quirks |= data; +} + static const struct mmc_fixup mmc_fixup_methods[] = { + { SDIO_ANY_ID, SDIO_ANY_ID, + add_quirk_for_sdio_devices, MMC_QUIRK_BROKEN_CLK_GATING } { 0 } }; diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h index a498d53..3fe9db0 100644 --- a/include/linux/mmc/card.h +++ b/include/linux/mmc/card.h @@ -121,6 +121,7 @@ struct mmc_card { /* for byte mode */ #define MMC_QUIRK_NONSTD_SDIO (1<<2) /* non-standard SDIO card attached */ /* (missing CIA registers) */ +#define MMC_QUIRK_BROKEN_CLK_GATING (1<<3) /* clock gating the sdio bus will make card fail */ unsigned int erase_size; /* erase size in sectors */ unsigned int erase_shift; /* if erase unit is power 2 */