From patchwork Mon Jun 1 10:18:25 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 6520451 Return-Path: X-Original-To: patchwork-linux-mmc@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 15EACC0020 for ; Mon, 1 Jun 2015 10:18:53 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 408CA20591 for ; Mon, 1 Jun 2015 10:18:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 46C8F205E4 for ; Mon, 1 Jun 2015 10:18:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751879AbbFAKSt (ORCPT ); Mon, 1 Jun 2015 06:18:49 -0400 Received: from mail-la0-f43.google.com ([209.85.215.43]:36707 "EHLO mail-la0-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751609AbbFAKSs (ORCPT ); Mon, 1 Jun 2015 06:18:48 -0400 Received: by laei3 with SMTP id i3so9906651lae.3 for ; Mon, 01 Jun 2015 03:18:46 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=Uptc4QEYb1Jx7cRZ4FSbFrcTxyMvtkxVeZ0ds+BChoU=; b=G+Oz+YGTXSvVwdvrTzzj25GC5VpkMiBrYyQC62hVTrJ+X9WnD8B63WmtSom8lLrvXy Wvz9AY6vSZxuVsQWSxfJpkSy/42w6g37+ICLDNo7UfIKXafGX/cywncF1aX8hslH4pGu dhi1SntTMSM+loCgSuJF6Y3kRgAXq3Kt+J9sJEI0/OLxEtCvTgfh4ywcbMoSVRCUUfM1 em+KgIoipV49MyPEJUemPCsxhnJzuuwqbLIburXmXjMiS7skiyN3n183ICbTpvbdoukR Bf4W2+S7rFOXlSqPKcvQXV71t5688IXyHB3NPiTpJohIPYIrw2USizJM+KzXS/ZelHdZ nc+w== X-Gm-Message-State: ALoCoQnxwxhis1owVZyHYN2DjM+gYYDr2FAhgAlODLd4+uUCBMnytrncw5UFsufT+0F5mgzfs+Vx X-Received: by 10.152.5.225 with SMTP id v1mr20056852lav.111.1433153926875; Mon, 01 Jun 2015 03:18:46 -0700 (PDT) Received: from uffe-Latitude-E6430s.lan (90-231-160-185-no158.tbcn.telia.com. [90.231.160.185]) by mx.google.com with ESMTPSA id t15sm4129115lbk.0.2015.06.01.03.18.44 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 01 Jun 2015 03:18:45 -0700 (PDT) From: Ulf Hansson To: linux-mmc@vger.kernel.org, Ulf Hansson Cc: Russell King , Dmitry Torokhov , Kevin Hilman , "Rafael J. Wysocki" , Aaron Lu Subject: [PATCH] mmc: core: Attach PM domain prior probing of SDIO func driver Date: Mon, 1 Jun 2015 12:18:25 +0200 Message-Id: <1433153905-25204-1-git-send-email-ulf.hansson@linaro.org> X-Mailer: git-send-email 1.9.1 Sender: linux-mmc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mmc@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Other subsystem buses attach PM domains during probe, but prior calling the driver's ->probe() method. During the removal phase, detaching the PM domain will be done after invoking the driver's ->remove() callback. Convert the SDIO bus to follow this behavior and add error handling. Signed-off-by: Ulf Hansson --- A similar patch as $subject patch has been posted and discussed earlier. According to Aaron Lu, who added the initial support for the ACPI PM domain to the SDIO bus, this change is safe. http://www.spinics.net/lists/linux-mmc/msg28946.html --- drivers/mmc/core/sdio_bus.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/mmc/core/sdio_bus.c b/drivers/mmc/core/sdio_bus.c index bee02e6..7e327a6 100644 --- a/drivers/mmc/core/sdio_bus.c +++ b/drivers/mmc/core/sdio_bus.c @@ -137,6 +137,10 @@ static int sdio_bus_probe(struct device *dev) if (!id) return -ENODEV; + ret = dev_pm_domain_attach(dev, false); + if (ret == -EPROBE_DEFER) + return ret; + /* Unbound SDIO functions are always suspended. * During probe, the function is set active and the usage count * is incremented. If the driver supports runtime PM, @@ -166,6 +170,7 @@ static int sdio_bus_probe(struct device *dev) disable_runtimepm: if (func->card->host->caps & MMC_CAP_POWER_OFF_CARD) pm_runtime_put_noidle(dev); + dev_pm_domain_detach(dev, false); return ret; } @@ -197,6 +202,8 @@ static int sdio_bus_remove(struct device *dev) if (func->card->host->caps & MMC_CAP_POWER_OFF_CARD) pm_runtime_put_sync(dev); + dev_pm_domain_detach(dev, false); + return ret; } @@ -316,10 +323,8 @@ int sdio_add_func(struct sdio_func *func) sdio_set_of_node(func); sdio_acpi_set_handle(func); ret = device_add(&func->dev); - if (ret == 0) { + if (ret == 0) sdio_func_set_present(func); - dev_pm_domain_attach(&func->dev, false); - } return ret; } @@ -335,7 +340,6 @@ void sdio_remove_func(struct sdio_func *func) if (!sdio_func_present(func)) return; - dev_pm_domain_detach(&func->dev, false); device_del(&func->dev); of_node_put(func->dev.of_node); put_device(&func->dev);