From patchwork Thu Apr 4 16:41:37 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 15935 Return-Path: X-Original-To: linaro@staging.patches.linaro.org Delivered-To: linaro@staging.patches.linaro.org Received: from mail-qc0-f198.google.com (mail-qc0-f198.google.com [209.85.216.198]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id BCE3F277E2 for ; Thu, 4 Apr 2013 16:42:54 +0000 (UTC) Received: by mail-qc0-f198.google.com with SMTP id v20sf3615083qcm.5 for ; Thu, 04 Apr 2013 09:42:49 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:x-beenthere:x-received:received-spf:x-received :x-forwarded-to:x-forwarded-for:delivered-to:x-received:received-spf :from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references :mime-version:x-gm-message-state:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :x-google-group-id:list-post:list-help:list-archive:list-unsubscribe :content-type; bh=C6IyZHDHepRyMdGRXnAniQG7gnc49OEEsDWHoeNtGQQ=; b=h3UNd7THphPcmwvupZ8oqCctqlRBGaC8nIM5UXa+igYdxZubGlNUdlsDIicr5E9OXI XC9fvzIo2ngq2v18dn7C00sNAb9aOLnnSXzVDs03fsnGx4cWT4zQGy15bkBJNFgh2PVU alWBDusUAjKpGrv95C8bRwOuEvNE/C0onPfW0fZV3izMlAy34py9U/zhQNaw2ay+qYrr 6TaZUoR+4gDazmE/3WfRil/upUnwadXper4eQEM0pAPPqO18gVM40yN6Hd4eu4Key0U0 9fSKCNKe5m7j30hNonubM06kNXAieJLjVFR+OZ9d/RxAdUccK8hrohDujFpNvsV4L3uW eL+w== X-Received: by 10.224.18.132 with SMTP id w4mr3608403qaa.1.1365093769158; Thu, 04 Apr 2013 09:42:49 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.49.119.162 with SMTP id kv2ls1670003qeb.86.gmail; Thu, 04 Apr 2013 09:42:48 -0700 (PDT) X-Received: by 10.52.111.130 with SMTP id ii2mr4553858vdb.111.1365093768951; Thu, 04 Apr 2013 09:42:48 -0700 (PDT) Received: from mail-ve0-f182.google.com (mail-ve0-f182.google.com [209.85.128.182]) by mx.google.com with ESMTPS id jj7si8641707vcb.34.2013.04.04.09.42.48 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 04 Apr 2013 09:42:48 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.128.182 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) client-ip=209.85.128.182; Received: by mail-ve0-f182.google.com with SMTP id m1so2825208ves.13 for ; Thu, 04 Apr 2013 09:42:48 -0700 (PDT) X-Received: by 10.220.153.143 with SMTP id k15mr5446552vcw.13.1365093768710; Thu, 04 Apr 2013 09:42:48 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patches@linaro.org Received: by 10.58.85.136 with SMTP id h8csp223749vez; Thu, 4 Apr 2013 09:42:47 -0700 (PDT) X-Received: by 10.15.23.193 with SMTP id h41mr12339738eeu.17.1365093767352; Thu, 04 Apr 2013 09:42:47 -0700 (PDT) Received: from eu1sys200aog106.obsmtp.com (eu1sys200aog106.obsmtp.com [207.126.144.121]) by mx.google.com with SMTP id f3si12988184eev.215.2013.04.04.09.42.34 (version=TLSv1 cipher=RC4-SHA bits=128/128); Thu, 04 Apr 2013 09:42:47 -0700 (PDT) Received-SPF: neutral (google.com: 207.126.144.121 is neither permitted nor denied by best guess record for domain of ulf.hansson@stericsson.com) client-ip=207.126.144.121; Received: from beta.dmz-us.st.com ([167.4.1.35]) (using TLSv1) by eu1sys200aob106.postini.com ([207.126.147.11]) with SMTP ID DSNKUV2tcvhJTo5dFtm8ijjj126P75PRezfG@postini.com; Thu, 04 Apr 2013 16:42:47 UTC Received: from zeta.dmz-us.st.com (ns4.st.com [167.4.16.71]) by beta.dmz-us.st.com (STMicroelectronics) with ESMTP id 9A3E045; Thu, 4 Apr 2013 16:40:53 +0000 (GMT) Received: from relay2.stm.gmessaging.net (unknown [10.230.100.18]) by zeta.dmz-us.st.com (STMicroelectronics) with ESMTP id D476D4A; Thu, 4 Apr 2013 10:04:01 +0000 (GMT) Received: from exdcvycastm004.EQ1STM.local (alteon-source-exch [10.230.100.61]) (using TLSv1 with cipher RC4-MD5 (128/128 bits)) (Client CN "exdcvycastm004", Issuer "exdcvycastm004" (not verified)) by relay2.stm.gmessaging.net (Postfix) with ESMTPS id 2454CA8095; Thu, 4 Apr 2013 18:41:39 +0200 (CEST) Received: from steludxu1397.stericsson.com (10.230.100.153) by smtp.stericsson.com (10.230.100.2) with Microsoft SMTP Server (TLS) id 8.3.279.5; Thu, 4 Apr 2013 18:41:45 +0200 From: Ulf Hansson To: , Chris Ball Cc: Ulf Hansson Subject: [PATCH V2 1/2] mmc: core: Add bus_ops for runtime pm callbacks Date: Thu, 4 Apr 2013 18:41:37 +0200 Message-ID: <1365093698-6367-2-git-send-email-ulf.hansson@stericsson.com> X-Mailer: git-send-email 1.7.10 In-Reply-To: <1365093698-6367-1-git-send-email-ulf.hansson@stericsson.com> References: <1365093698-6367-1-git-send-email-ulf.hansson@stericsson.com> MIME-Version: 1.0 X-Gm-Message-State: ALoCoQm/fW8mEjjNzIUIKCuaKJmp4jGqQLQX/PDv74LewakQEFhBXjFNq0u+roKQCvc+1ZTAypBM X-Original-Sender: patch@linaro.org X-Original-Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.128.182 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Precedence: list Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org List-ID: X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , From: Ulf Hansson SDIO is the only protocol that uses runtime pm for the card device right now. To provide the option for sd and mmc to use runtime pm as well the bus_ops callback are extended with two new functions. One for runtime_suspend and one for runtime_resume. This patch will also implement the callbacks for SDIO to make sure existing functionallity is maintained. Signed-off-by: Ulf Hansson Acked-by: Maya Erez Acked-by: Arnd Bergmann Acked-by: Kevin Liu --- drivers/mmc/core/bus.c | 14 ++++++++++++-- drivers/mmc/core/core.h | 2 ++ drivers/mmc/core/sdio.c | 20 ++++++++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/drivers/mmc/core/bus.c b/drivers/mmc/core/bus.c index e219c97..d9e8c2b 100644 --- a/drivers/mmc/core/bus.c +++ b/drivers/mmc/core/bus.c @@ -151,15 +151,25 @@ static int mmc_bus_resume(struct device *dev) static int mmc_runtime_suspend(struct device *dev) { struct mmc_card *card = mmc_dev_to_card(dev); + struct mmc_host *host = card->host; + int ret = 0; + + if (host->bus_ops->runtime_suspend) + ret = host->bus_ops->runtime_suspend(host); - return mmc_power_save_host(card->host); + return ret; } static int mmc_runtime_resume(struct device *dev) { struct mmc_card *card = mmc_dev_to_card(dev); + struct mmc_host *host = card->host; + int ret = 0; + + if (host->bus_ops->runtime_resume) + ret = host->bus_ops->runtime_resume(host); - return mmc_power_restore_host(card->host); + return ret; } static int mmc_runtime_idle(struct device *dev) diff --git a/drivers/mmc/core/core.h b/drivers/mmc/core/core.h index b9f18a2..9445519 100644 --- a/drivers/mmc/core/core.h +++ b/drivers/mmc/core/core.h @@ -22,6 +22,8 @@ struct mmc_bus_ops { void (*detect)(struct mmc_host *); int (*suspend)(struct mmc_host *); int (*resume)(struct mmc_host *); + int (*runtime_suspend)(struct mmc_host *); + int (*runtime_resume)(struct mmc_host *); int (*power_save)(struct mmc_host *); int (*power_restore)(struct mmc_host *); int (*alive)(struct mmc_host *); diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c index aa0719a..0e6e8c1 100644 --- a/drivers/mmc/core/sdio.c +++ b/drivers/mmc/core/sdio.c @@ -988,6 +988,24 @@ static int mmc_sdio_resume(struct mmc_host *host) return err; } +static int mmc_sdio_runtime_suspend(struct mmc_host *host) +{ + /* + * Once sdio clients has entirely switched to runtime pm we wrap + * the call to power_save here. + */ + return mmc_power_save_host(host); +} + +static int mmc_sdio_runtime_resume(struct mmc_host *host) +{ + /* + * Once sdio clients has entirely switched to runtime pm we wrap + * the call to power_restore here. + */ + return mmc_power_restore_host(host); +} + static int mmc_sdio_power_restore(struct mmc_host *host) { int ret; @@ -1054,6 +1072,8 @@ static const struct mmc_bus_ops mmc_sdio_ops = { .detect = mmc_sdio_detect, .suspend = mmc_sdio_suspend, .resume = mmc_sdio_resume, + .runtime_suspend = mmc_sdio_runtime_suspend, + .runtime_resume = mmc_sdio_runtime_resume, .power_restore = mmc_sdio_power_restore, .alive = mmc_sdio_alive, };