All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH V4 1/1] mmc: sdhci-s3c: Use mmc_gpio_request_cd function
@ 2014-04-30  9:04 Beomho Seo
  0 siblings, 0 replies; only message in thread
From: Beomho Seo @ 2014-04-30  9:04 UTC (permalink / raw)
  To: Chris Ball, ulf.hansson
  Cc: linux-mmc, Myungjoo Ham, Jaehoon Chung, Heiko Stübner,
	beomho.seo

Hi Chris and Ulf,

Thank you for review. I fixed patch for your review.

---
This patch use mmc_gpio_request_cd function.

Signed-off-by: Beomho Seo <beomho.seo@samsung.com>
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Acked-by: Heiko Stuebner <heiko@sntech.de>
Tested-by: Heiko Stuebner <heiko@sntech.de>
---
Changes in v4:
- Remove unused variable "ext_cd_irq".
- Remove mmc_gpio_free_cd function.

Changes in v3:
- Rebased to recent mmc-next branch.

Changes in v2:
- Fix "err_req_cd:".
- Remove mmc_gpio_free_cd() and then, used sdhci_remove_host().
---
 drivers/mmc/host/sdhci-s3c.c |   56 +++++++++---------------------------------
 1 file changed, 12 insertions(+), 44 deletions(-)

diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c
index c12301e..9c76113 100644
--- a/drivers/mmc/host/sdhci-s3c.c
+++ b/drivers/mmc/host/sdhci-s3c.c
@@ -27,6 +27,7 @@
 #include <linux/pm_runtime.h>

 #include <linux/mmc/host.h>
+#include <linux/mmc/slot-gpio.h>

 #include "sdhci-s3c-regs.h"
 #include "sdhci.h"
@@ -49,7 +50,6 @@ struct sdhci_s3c {
 	struct resource		*ioarea;
 	struct s3c_sdhci_platdata *pdata;
 	int			cur_clk;
-	int			ext_cd_irq;
 	int			ext_cd_gpio;

 	struct clk		*clk_io;
@@ -396,44 +396,6 @@ static void sdhci_s3c_notify_change(struct platform_device *dev, int state)
 	}
 }

-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)
@@ -685,8 +647,14 @@ static int sdhci_s3c_probe(struct platform_device *pdev)
 	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);
+	    gpio_is_valid(pdata->ext_cd_gpio)) {
+		ret = mmc_gpio_request_cd(host->mmc, pdata->ext_cd_gpio, 0);
+		if (ret) {
+			dev_err(dev,
+				"failed to reqeust card detect gpio\n");
+			goto err_req_cd;
+		}
+	}

 #ifdef CONFIG_PM_RUNTIME
 	if (pdata->cd_type != S3C_SDHCI_CD_INTERNAL)
@@ -694,6 +662,9 @@ static int sdhci_s3c_probe(struct platform_device *pdev)
 #endif
 	return 0;

+ err_req_cd:
+	sdhci_remove_host(host, 1);
+
  err_req_regs:
  err_no_busclks:
 	clk_disable_unprepare(sc->clk_io);
@@ -713,9 +684,6 @@ static int sdhci_s3c_remove(struct platform_device *pdev)
 	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)
 		clk_prepare_enable(sc->clk_io);
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2014-04-30  9:04 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-04-30  9:04 [PATCH V4 1/1] mmc: sdhci-s3c: Use mmc_gpio_request_cd function Beomho Seo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.