From patchwork Wed Aug 11 01:01:59 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Morton X-Patchwork-Id: 176662 Return-path: X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on void.printf.net X-Spam-Level: X-Spam-Status: No, score=-1.0 required=2.9 tests=RCVD_IN_DNSWL_LOW autolearn=disabled version=3.2.5 Envelope-to: chris@printf.net Delivery-date: Wed, 11 Aug 2010 02:22:21 +0100 Received: from lists.laptop.org ([18.85.2.145] helo=mail.laptop.org) by void.printf.net with esmtp (Exim 4.69) (envelope-from ) id 1Oj01L-0005SU-HH for chris@printf.net; Wed, 11 Aug 2010 02:22:20 +0100 Received: by mail.laptop.org (Postfix) id 94F6E24782; Tue, 10 Aug 2010 21:22:01 -0400 (EDT) Delivered-To: cjb@laptop.org Received: from spam.laptop.org (spam.laptop.org [18.85.46.23]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.laptop.org (Postfix) with ESMTPS id 817022477E for ; Tue, 10 Aug 2010 21:22:01 -0400 (EDT) X-ASG-Debug-ID: 1281489730-0b74531c0003-zHW3sV Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by spam.laptop.org with ESMTP id 2pL9exuyvHWhbYsB for ; Tue, 10 Aug 2010 21:22:17 -0400 (EDT) X-Barracuda-Envelope-From: linux-mmc-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932320Ab0HKBWR (ORCPT ); Tue, 10 Aug 2010 21:22:17 -0400 Received: from smtp1.linux-foundation.org ([140.211.169.13]:46840 "EHLO smtp1.linux-foundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932208Ab0HKBWQ (ORCPT ); Tue, 10 Aug 2010 21:22:16 -0400 Received: from imap1.linux-foundation.org (imap1.linux-foundation.org [140.211.169.55]) by smtp1.linux-foundation.org (8.14.2/8.13.5/Debian-3ubuntu1.1) with ESMTP id o7B1Ej4S015349 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 10 Aug 2010 18:22:10 -0700 Received: from localhost.localdomain (localhost [127.0.0.1]) by imap1.linux-foundation.org (8.13.5.20060308/8.13.5/Debian-3ubuntu1.1) with ESMTP id o7B11xvU027106; Tue, 10 Aug 2010 18:01:59 -0700 Message-Id: <201008110101.o7B11xvU027106@imap1.linux-foundation.org> X-ASG-Orig-Subj: [patch 053/177] sdhci: add regulator support Subject: [patch 053/177] sdhci: add regulator support To: torvalds@linux-foundation.org Cc: akpm@linux-foundation.org, m.szyprowski@samsung.com, broonie@opensource.wolfsonmicro.com, kyungmin.park@samsung.com, linux-mmc@vger.kernel.org From: akpm@linux-foundation.org Date: Tue, 10 Aug 2010 18:01:59 -0700 MIME-Version: 1.0 X-MIMEDefang-Filter: lf$Revision: 1.188 $ X-Scanned-By: MIMEDefang 2.63 on 140.211.169.13 Sender: linux-mmc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mmc@vger.kernel.org X-Barracuda-Connect: vger.kernel.org[209.132.180.67] X-Barracuda-Start-Time: 1281489731 X-Barracuda-URL: http://18.85.46.23:8000/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at laptop.org X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using global scores of TAG_LEVEL=3.5 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=5.5 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.37633 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name diff -puN drivers/mmc/host/sdhci.c~sdhci-add-regulator-support drivers/mmc/host/sdhci.c --- a/drivers/mmc/host/sdhci.c~sdhci-add-regulator-support +++ a/drivers/mmc/host/sdhci.c @@ -19,6 +19,7 @@ #include #include #include +#include #include @@ -1608,7 +1609,10 @@ int sdhci_suspend_host(struct sdhci_host free_irq(host->irq, host); - return 0; + if (host->vmmc) + ret = regulator_disable(host->vmmc); + + return ret; } EXPORT_SYMBOL_GPL(sdhci_suspend_host); @@ -1617,6 +1621,13 @@ int sdhci_resume_host(struct sdhci_host { int ret; + if (host->vmmc) { + int ret = regulator_enable(host->vmmc); + if (ret) + return ret; + } + + if (host->flags & (SDHCI_USE_SDMA | SDHCI_USE_ADMA)) { if (host->ops->enable_dma) host->ops->enable_dma(host); @@ -1889,6 +1900,14 @@ int sdhci_add_host(struct sdhci_host *ho if (ret) goto untasklet; + host->vmmc = regulator_get(mmc_dev(mmc), "vmmc"); + if (IS_ERR(host->vmmc)) { + printk(KERN_INFO "%s: no vmmc regulator found\n", mmc_hostname(mmc)); + host->vmmc = NULL; + } else { + regulator_enable(host->vmmc); + } + sdhci_init(host, 0); #ifdef CONFIG_MMC_DEBUG @@ -1973,6 +1992,11 @@ void sdhci_remove_host(struct sdhci_host tasklet_kill(&host->card_tasklet); tasklet_kill(&host->finish_tasklet); + if (host->vmmc) { + regulator_disable(host->vmmc); + regulator_put(host->vmmc); + } + kfree(host->adma_desc); kfree(host->align_buffer); diff -puN drivers/mmc/host/sdhci.h~sdhci-add-regulator-support drivers/mmc/host/sdhci.h --- a/drivers/mmc/host/sdhci.h~sdhci-add-regulator-support +++ a/drivers/mmc/host/sdhci.h @@ -249,6 +249,8 @@ struct sdhci_host { const struct sdhci_ops *ops; /* Low level hw interface */ + struct regulator *vmmc; /* Power regulator */ + /* Internal data */ struct mmc_host *mmc; /* MMC structure */ u64 dma_mask; /* custom DMA mask */