From patchwork Mon Mar 21 18:46:41 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Antonio Ospite X-Patchwork-Id: 648601 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 p2LIlHQF021006 for ; Mon, 21 Mar 2011 18:47:17 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753402Ab1CUSrQ (ORCPT ); Mon, 21 Mar 2011 14:47:16 -0400 Received: from smtp208.alice.it ([82.57.200.104]:50741 "EHLO smtp208.alice.it" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751986Ab1CUSrP (ORCPT ); Mon, 21 Mar 2011 14:47:15 -0400 Received: from jcn (79.2.146.74) by smtp208.alice.it (8.5.124.08) id 4C1A271615023892; Mon, 21 Mar 2011 19:46:51 +0100 Received: from ao2 by jcn with local (Exim 4.74) (envelope-from ) id 1Q1k7t-00077H-8X; Mon, 21 Mar 2011 19:46:49 +0100 From: Antonio Ospite To: linux-mmc@vger.kernel.org Cc: Antonio Ospite , Daniel Ribeiro , David Brownell , Chris Ball , Grant Likely , Ernst Schwab , Sonic Zhang , Linus Walleij , openezx-devel@lists.openezx.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/4] mmc_spi.c: factor out a mmc_spi_setpower() function Date: Mon, 21 Mar 2011 19:46:41 +0100 Message-Id: <1300733202-27316-4-git-send-email-ospite@studenti.unina.it> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1300733202-27316-1-git-send-email-ospite@studenti.unina.it> References: <1300733202-27316-1-git-send-email-ospite@studenti.unina.it> X-Face: z*RaLf`X<@C75u6Ig9}{oW$H; 1_\2t5)({*|jhM/Vb; ]yA5\I~93>J<_`<4)A{':UrE 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]); Mon, 21 Mar 2011 18:47:17 +0000 (UTC) diff --git a/drivers/mmc/host/mmc_spi.c b/drivers/mmc/host/mmc_spi.c index fe0fdc4..5e4b2c7 100644 --- a/drivers/mmc/host/mmc_spi.c +++ b/drivers/mmc/host/mmc_spi.c @@ -1221,6 +1221,26 @@ static void mmc_spi_shutdownsequence(struct mmc_spi_host *host) } } +static inline int mmc_spi_setpower(struct mmc_spi_host *host, + unsigned char power_mode, + unsigned int vdd) +{ + /* switch power on/off if possible, accounting for + * max 250msec powerup time if needed. + */ + if (mmc_spi_canpower(host)) { + switch (power_mode) { + case MMC_POWER_OFF: + case MMC_POWER_UP: + host->pdata->setpower(&host->spi->dev, vdd); + if (power_mode == MMC_POWER_UP) + msleep(host->powerup_msecs); + } + } + + return 0; +} + static char *mmc_powerstring(u8 power_mode) { switch (power_mode) { @@ -1236,24 +1256,23 @@ static void mmc_spi_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) struct mmc_spi_host *host = mmc_priv(mmc); if (host->power_mode != ios->power_mode) { + int ret; dev_dbg(&host->spi->dev, "mmc_spi: power %s (%d)%s\n", mmc_powerstring(ios->power_mode), ios->vdd, mmc_spi_canpower(host) ? ", can switch" : ""); - /* switch power on/off if possible, accounting for - * max 250msec powerup time if needed. - */ - if (mmc_spi_canpower(host)) { - switch (ios->power_mode) { - case MMC_POWER_OFF: - case MMC_POWER_UP: - host->pdata->setpower(&host->spi->dev, - ios->vdd); - if (ios->power_mode == MMC_POWER_UP) - msleep(host->powerup_msecs); - } + ret = mmc_spi_setpower(host, ios->power_mode, ios->vdd); + if (ret) { + dev_err(mmc_dev(mmc), "unable to set power\n"); + /* + * The .set_ios() function in the mmc_host_ops + * struct return void, and failing to set the + * power should be rare so we print an error and + * return here. + */ + return; } /* See 6.4.1 in the simplified SD card physical spec 2.0 */