From patchwork Mon Apr 28 07:40:59 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Fenkart X-Patchwork-Id: 4075621 Return-Path: X-Original-To: patchwork-linux-omap@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 162B4BFF02 for ; Mon, 28 Apr 2014 07:42:43 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 2FCAA2026D for ; Mon, 28 Apr 2014 07:42:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3E3D420295 for ; Mon, 28 Apr 2014 07:42:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752539AbaD1Hmj (ORCPT ); Mon, 28 Apr 2014 03:42:39 -0400 Received: from mail-ee0-f49.google.com ([74.125.83.49]:52610 "EHLO mail-ee0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753485AbaD1Hmg (ORCPT ); Mon, 28 Apr 2014 03:42:36 -0400 Received: by mail-ee0-f49.google.com with SMTP id c41so4542896eek.36 for ; Mon, 28 Apr 2014 00:42:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=6wzcR3AnTABrRonGq2Mhn+9dbeOzQpzbf3oSSplLcKc=; b=QjJ9oMB+JosXHrZ9eYJHCXF4hZjVdNEEAtAQuT5zyVYuYtzsvzbUBqy4V3sgW+8JAe WVeszDbMtsA4ACWXmdnYAXoLHYBtVeSJwReV1Osu13hGPdnhq6hihPbPA2XfqOe9nfG6 OQchKmQkc3MtVRluXmthexiWxzgoKjFq3Vx3e759GK+TGvEIhiWYwHocA1wXs69S6dgm isROLXnf21y0+89Ymw822ZDGEZt0vSVn4cVzT3jqJQQyGYDwFBi7Hnkpfs+QoDz8FF7s PUzs4O5TovFxLgM2SvC+rW0Mx4Z/wm3f6EAspEuPoahqvwLGUYbMi3pIQyeqlrqHcMPZ lYRg== X-Received: by 10.15.31.70 with SMTP id x46mr31086232eeu.26.1398670955187; Mon, 28 Apr 2014 00:42:35 -0700 (PDT) Received: from localhost (ip-89-176-190-91.net.upcbroadband.cz. [89.176.190.91]) by mx.google.com with ESMTPSA id cb5sm48060041eeb.18.2014.04.28.00.42.33 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Mon, 28 Apr 2014 00:42:34 -0700 (PDT) From: Andreas Fenkart To: Tony Lindgren Cc: Chris Ball , Grant Likely , Felipe Balbi , Balaji T K , zonque@gmail.com, galak@codeaurora.org, linux-doc@vger.kernel.org, linux-mmc@vger.kernel.org, linux-omap@vger.kernel.org, Andreas Fenkart Subject: [PATCH v10 4/5] mmc: omap_hsmmc: switch default/idle pinctrl states in runtime hooks Date: Mon, 28 Apr 2014 09:40:59 +0200 Message-Id: <1398670860-30695-5-git-send-email-afenkart@gmail.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1398670860-30695-1-git-send-email-afenkart@gmail.com> References: <1398670860-30695-1-git-send-email-afenkart@gmail.com> Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_DKIM_INVALID, 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 These are predefined states of the driver model. When not present, as if not set in the device tree, they simple become no-ops. So it is always safe to call them. This is not the simplest implementation, on AM335x at least, we could witch to idle at any point in the suspend hook, only the default state needs to be set before writing to the irq registers or an IRQ might get lost. Signed-off-by: Andreas Fenkart diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c index 76fe3bd..9cc0d21 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c @@ -1992,7 +1992,6 @@ static int omap_hsmmc_probe(struct platform_device *pdev) const struct of_device_id *match; dma_cap_mask_t mask; unsigned tx_req, rx_req; - struct pinctrl *pinctrl; const struct omap_mmc_of_data *data; match = of_match_device(of_match_ptr(omap_mmc_of_match), &pdev->dev); @@ -2215,11 +2214,7 @@ static int omap_hsmmc_probe(struct platform_device *pdev) } omap_hsmmc_disable_irq(host); - - pinctrl = devm_pinctrl_get_select_default(&pdev->dev); - if (IS_ERR(pinctrl)) - dev_warn(&pdev->dev, - "pins are not configured from the driver\n"); + pinctrl_pm_select_default_state(host->dev); /* * For now, only support SDIO interrupt if we have a separate @@ -2443,9 +2438,13 @@ static int omap_hsmmc_runtime_suspend(struct device *dev) goto abort; } + pinctrl_pm_select_idle_state(dev); + WARN_ON(host->flags & HSMMC_WAKE_IRQ_ENABLED); enable_irq(host->wake_irq); host->flags |= HSMMC_WAKE_IRQ_ENABLED; + } else { + pinctrl_pm_select_idle_state(dev); } abort: spin_unlock_irqrestore(&host->irq_lock, flags); @@ -2470,9 +2469,14 @@ static int omap_hsmmc_runtime_resume(struct device *dev) host->flags &= ~HSMMC_WAKE_IRQ_ENABLED; } + pinctrl_pm_select_default_state(host->dev); + + /* irq lost, if pinmux incorrect */ OMAP_HSMMC_WRITE(host->base, STAT, STAT_CLEAR); OMAP_HSMMC_WRITE(host->base, ISE, CIRQ_EN); OMAP_HSMMC_WRITE(host->base, IE, CIRQ_EN); + } else { + pinctrl_pm_select_default_state(host->dev); } spin_unlock_irqrestore(&host->irq_lock, flags); return 0;