mmc: sdhci-s3c: Use mmc_gpio_request_cd function
Subsystems (3)
PATCH v4 1/1 mmc: sdhci-s3c: Use mmc_gpio_request_cd function
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 <[email protected]>
Signed-off-by Jaehoon Chung <[email protected]>
Acked-by Heiko Stuebner <[email protected]>
Tested-by Heiko Stuebner <[email protected]>
---
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(-)
drivers/mmc/host/sdhci-s3c.c +12 -44
@@ -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);
Signature · 1 line
1.7.9.5