From patchwork Mon May 26 04:58:28 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jaehoon Chung X-Patchwork-Id: 4239541 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.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id D43BFBF90B for ; Mon, 26 May 2014 04:58:39 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id E2F74201CE for ; Mon, 26 May 2014 04:58:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C1A71201C8 for ; Mon, 26 May 2014 04:58:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751422AbaEZE6h (ORCPT ); Mon, 26 May 2014 00:58:37 -0400 Received: from mailout1.samsung.com ([203.254.224.24]:21194 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751224AbaEZE6g (ORCPT ); Mon, 26 May 2014 00:58:36 -0400 MIME-version: 1.0 Content-type: text/plain; charset=UTF-8 Received: from epcpsbgr4.samsung.com (u144.gpu120.samsung.co.kr [203.254.230.144]) by mailout1.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0N66000Z20HMWW80@mailout1.samsung.com> for linux-mmc@vger.kernel.org; Mon, 26 May 2014 13:58:34 +0900 (KST) Received: from epcpsbgm1.samsung.com ( [172.20.52.115]) by epcpsbgr4.samsung.com (EPCPMTA) with SMTP id 44.5A.13369.9F9C2835; Mon, 26 May 2014 13:58:33 +0900 (KST) X-AuditID: cbfee690-b7fb56d000003439-93-5382c9f98373 Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id 1B.85.08203.9F9C2835; Mon, 26 May 2014 13:58:33 +0900 (KST) Content-transfer-encoding: 8BIT Received: from localhost.localdomain ([10.252.81.186]) by mmp2.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0N66005SN0HLG7B0@mmp2.samsung.com>; Mon, 26 May 2014 13:58:33 +0900 (KST) From: Jaehoon Chung To: linux-mmc@vger.kernel.org Cc: Chris Ball , Ulf Hansson , Jaehoon Chung Subject: [PATCH] mmc: sdhci-s3c: use mmc_of_parse and remove the card_tasklet Date: Mon, 26 May 2014 13:58:28 +0900 Message-id: <1401080308-19974-1-git-send-email-jh80.chung@samsung.com> X-Mailer: git-send-email 1.7.9.5 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupjkeLIzCtJLcpLzFFi42JZI2JSrPvzZFOwQc8Kc4sJl7czWtz41cZq ceR/P6PF8bXhDiwed67tYfO48Wohk0ffllWMHp83yQWwRHHZpKTmZJalFunbJXBlXN3Yy1qw Urvi+ZFupgbGVpUuRg4OCQETic6bmV2MnECmmMSFe+vZuhi5OIQEljJKzLjexwqRMJH4MP0+ VGI6o8S/vzfZQRK8AoISPybfYwEZxCwgL3HkUjZImFlAXWLSvEXMEPVtTBLNm76ygCTYBHQk tn87zgRiiwjISvz8c4ENoqFQ4v+UFWDLhAV8Jb7OWAlmswioSvw/8ZURYpebxIMNy9kgjlaQ mDPJBmS+hMB0domnx69A1QtIfJt8iAWiRlZi0wFmiPslJQ6uuMEygVFkFpKrZyFcPQvJ1QsY mVcxiqYWJBcUJ6UXmegVJ+YWl+al6yXn525iBMbF6X/PJuxgvHfA+hBjMtDGicxSosn5wLjK K4k3NDYzsjA1MTU2Mrc0I01YSZxX7VFSkJBAemJJanZqakFqUXxRaU5q8SFGJg5OqQZGXb4l weaKc0M440J+COqHJR/NLd5+5fVp169eN7hv3vziqNYSVsjFZWL7uTnys8gSJcPXlZMigh7q Cd0uE09sDhF50N9+cd/XIInKVW1W2aZ3Twn/8BH+rDTzbHSY8QtLHZmfKlFJL2PZS7Y3z2Vq 3nZiWmJeR/G39QItcbk7HwembNssyK7EUpyRaKjFXFScCAArJw5GoQIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrDIsWRmVeSWpSXmKPExsVy+t9jQd2fJ5uCDVY91rGYcHk7o8WNX22s Fkf+9zNaHF8b7sDicefaHjaPG68WMnn0bVnF6PF5k1wAS1QDo01GamJKapFCal5yfkpmXrqt kndwvHO8qZmBoa6hpYW5kkJeYm6qrZKLT4CuW2YO0EolhbLEnFKgUEBicbGSvh2mCaEhbroW MI0Rur4hQXA9RgZoIGENY8bVjb2sBSu1K54f6WZqYGxV6WLk5JAQMJH4MP0+G4QtJnHh3nog m4tDSGA6o8S/vzfZQRK8AoISPybfY+li5OBgFpCXOHIpGyTMLKAuMWneImaI+jYmieZNX1lA EmwCOhLbvx1nArFFBGQlfv65wAbRUCjxf8oKVhBbWMBX4uuMlWA2i4CqxP8TXxkhdrlJPNiw nA1kl4SAgsScSTYTGPlmIbliFsIVs5BcsYCReRWjaGpBckFxUnquoV5xYm5xaV66XnJ+7iZG cNw9k9rBuLLB4hCjAAejEg/vAe+mYCHWxLLiytxDjBIczEoivBdygUK8KYmVValF+fFFpTmp xYcYk4Hum8gsJZqcD0wJeSXxhsYmZkaWRuaGFkbG5qQJK4nzHmi1DhQSSE8sSc1OTS1ILYLZ wsTBKdXA6FnUc7ypi3X2RNmLl+/8EDux8cNvH3+zB00XGvg4Zm7KeSy66fu7e88+lUcE9b2/ uMlo+VnR03ciAm68uad8S4Dt/0GTW3wvkw/te9LsoD4/X+szT6xnZN7OvnD1SZMTFluxPXN6 fn/Cbs9q77ayM6baZnNWPOUsyjWO2dO48BenO0/lNYeqQCWW4oxEQy3mouJEANsbW8z/AgAA DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-mmc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mmc@vger.kernel.org X-Spam-Status: No, score=-7.5 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, 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 Fix the compile error. (Removed the card_tasklet at "mmc: sdhci: push card_tasklet into treaded irq handler") drivers/mmc/host/sdhci-s3c.c: In function ‘sdhci_s3c_notify_change’: drivers/mmc/host/sdhci-s3c.c:402:25: error: ‘struct sdhci_host’ has no member named ‘card_tasklet’ Signed-off-by: Jaehoon Chung Signed-off-by: Ulf Hansson --- drivers/mmc/host/sdhci-s3c.c | 99 ++---------------------------------------- 1 file changed, 4 insertions(+), 95 deletions(-) diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c index 781b8a9..fa5954a 100644 --- a/drivers/mmc/host/sdhci-s3c.c +++ b/drivers/mmc/host/sdhci-s3c.c @@ -374,82 +374,12 @@ static struct sdhci_ops sdhci_s3c_ops = { .set_uhs_signaling = sdhci_set_uhs_signaling, }; -static void sdhci_s3c_notify_change(struct platform_device *dev, int state) -{ - struct sdhci_host *host = platform_get_drvdata(dev); -#ifdef CONFIG_PM_RUNTIME - struct sdhci_s3c *sc = sdhci_priv(host); -#endif - unsigned long flags; - - if (host) { - spin_lock_irqsave(&host->lock, flags); - if (state) { - dev_dbg(&dev->dev, "card inserted.\n"); -#ifdef CONFIG_PM_RUNTIME - clk_prepare_enable(sc->clk_io); -#endif - host->flags &= ~SDHCI_DEVICE_DEAD; - host->quirks |= SDHCI_QUIRK_BROKEN_CARD_DETECTION; - } else { - dev_dbg(&dev->dev, "card removed.\n"); - host->flags |= SDHCI_DEVICE_DEAD; - host->quirks &= ~SDHCI_QUIRK_BROKEN_CARD_DETECTION; -#ifdef CONFIG_PM_RUNTIME - clk_disable_unprepare(sc->clk_io); -#endif - } - tasklet_schedule(&host->card_tasklet); - spin_unlock_irqrestore(&host->lock, flags); - } -} - -static irqreturn_t sdhci_s3c_gpio_card_detect_thread(int irq, void *dev_id) -{ - struct sdhci_s3c *sc = dev_id; - int status = gpio_get_value(sc->ext_cd_gpio); - if (sc->pdata->ext_cd_gpio_invert) - status = !status; - sdhci_s3c_notify_change(sc->pdev, status); - return IRQ_HANDLED; -} - -static void sdhci_s3c_setup_card_detect_gpio(struct sdhci_s3c *sc) -{ - struct s3c_sdhci_platdata *pdata = sc->pdata; - struct device *dev = &sc->pdev->dev; - - if (devm_gpio_request(dev, pdata->ext_cd_gpio, "SDHCI EXT CD") == 0) { - sc->ext_cd_gpio = pdata->ext_cd_gpio; - sc->ext_cd_irq = gpio_to_irq(pdata->ext_cd_gpio); - if (sc->ext_cd_irq && - request_threaded_irq(sc->ext_cd_irq, NULL, - sdhci_s3c_gpio_card_detect_thread, - IRQF_TRIGGER_RISING | - IRQF_TRIGGER_FALLING | - IRQF_ONESHOT, - dev_name(dev), sc) == 0) { - int status = gpio_get_value(sc->ext_cd_gpio); - if (pdata->ext_cd_gpio_invert) - status = !status; - sdhci_s3c_notify_change(sc->pdev, status); - } else { - dev_warn(dev, "cannot request irq for card detect\n"); - sc->ext_cd_irq = 0; - } - } else { - dev_err(dev, "cannot request gpio for card detect\n"); - } -} - #ifdef CONFIG_OF static int sdhci_s3c_parse_dt(struct device *dev, struct sdhci_host *host, struct s3c_sdhci_platdata *pdata) { struct device_node *node = dev->of_node; - struct sdhci_s3c *ourhost = to_s3c(host); u32 max_width; - int gpio; /* if the bus-width property is not specified, assume width as 1 */ if (of_property_read_u32(node, "bus-width", &max_width)) @@ -467,18 +397,8 @@ static int sdhci_s3c_parse_dt(struct device *dev, return 0; } - gpio = of_get_named_gpio(node, "cd-gpios", 0); - if (gpio_is_valid(gpio)) { - pdata->cd_type = S3C_SDHCI_CD_GPIO; - pdata->ext_cd_gpio = gpio; - ourhost->ext_cd_gpio = -1; - if (of_get_property(node, "cd-inverted", NULL)) - pdata->ext_cd_gpio_invert = 1; + if (of_get_named_gpio(node, "cd-gpios", 0)) return 0; - } else if (gpio != -ENOENT) { - dev_err(dev, "invalid card detect gpio specified\n"); - return -EINVAL; - } /* assuming internal card detect that will be configured by pinctrl */ pdata->cd_type = S3C_SDHCI_CD_INTERNAL; @@ -681,6 +601,8 @@ static int sdhci_s3c_probe(struct platform_device *pdev) pm_runtime_use_autosuspend(&pdev->dev); pm_suspend_ignore_children(&pdev->dev, 1); + mmc_of_parse(host->mmc); + ret = sdhci_add_host(host); if (ret) { dev_err(dev, "sdhci_add_host() failed\n"); @@ -689,15 +611,6 @@ static int sdhci_s3c_probe(struct platform_device *pdev) goto err_req_regs; } - /* The following two methods of card detection might call - sdhci_s3c_notify_change() immediately, so they can be called - only after sdhci_add_host(). Setup errors are ignored. */ - if (pdata->cd_type == S3C_SDHCI_CD_EXTERNAL && pdata->ext_cd_init) - pdata->ext_cd_init(&sdhci_s3c_notify_change); - if (pdata->cd_type == S3C_SDHCI_CD_GPIO && - gpio_is_valid(pdata->ext_cd_gpio)) - sdhci_s3c_setup_card_detect_gpio(sc); - #ifdef CONFIG_PM_RUNTIME if (pdata->cd_type != S3C_SDHCI_CD_INTERNAL) clk_disable_unprepare(sc->clk_io); @@ -718,16 +631,12 @@ static int sdhci_s3c_remove(struct platform_device *pdev) { struct sdhci_host *host = platform_get_drvdata(pdev); struct sdhci_s3c *sc = sdhci_priv(host); - struct s3c_sdhci_platdata *pdata = sc->pdata; - - if (pdata->cd_type == S3C_SDHCI_CD_EXTERNAL && pdata->ext_cd_cleanup) - pdata->ext_cd_cleanup(&sdhci_s3c_notify_change); if (sc->ext_cd_irq) free_irq(sc->ext_cd_irq, sc); #ifdef CONFIG_PM_RUNTIME - if (pdata->cd_type != S3C_SDHCI_CD_INTERNAL) + if (sc->pdata->cd_type != S3C_SDHCI_CD_INTERNAL) clk_prepare_enable(sc->clk_io); #endif sdhci_remove_host(host, 1);