mmc: sdhci-s3c: Use mmc_gpio_request_cd function
Subsystems (3)
PATCH RESEND 1/3 mmc: sdhci-s3c: Use mmc_gpio_request_cd function
Hi all,
Didn't have any other comment for this patch?
If don't have any other comment, I want this patch set is submitted at mmc-next. I have tested this patch set on exynos4 board.
CC'd Heiko
This patch use mmc_gpio_request_cd function.
--- drivers/mmc/host/sdhci-s3c.c | 56 +++++++++++------------------------------- 1 file changed, 14 insertions(+), 42 deletions(-)
drivers/mmc/host/sdhci-s3c.c +14 -42
@@ -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"
@@ -400,44 +401,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)
@@ -699,8 +662,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 )
@@ -708,6 +677,9 @@ static int sdhci_s3c_probe(struct platform_device *pdev)#endif return 0 ; + err_req_cd: +mmc_gpio_free_cd (host->mmc); + err_req_regs:#ifndef CONFIG_PM_RUNTIME clk_disable_unprepare (sc->clk_bus[sc->cur_clk]);
@@ -731,8 +703,8 @@ 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); +if (pdata->ext_cd_gpio) +mmc_gpio_free_cd (host->mmc);#ifdef CONFIG_PM_RUNTIME if (pdata->cd_type !=S3C_SDHCI_CD_INTERNAL )
-- 1.7.9.5
Signature · 4 lines
Best Regards, Beomho Seo, Assistant Engineer System S/W Lab., Software Center, Samsung Electronics
Hi,
Quoted 7 lines · Beomho Seo
Hi all,
Didn't have any other comment for this patch?
If don't have any other comment, I want this patch set is submitted at mmc-next. I have tested this patch set on exynos4 board.CC'd Heiko
Above comments are not suitable for changelog. Please move after the "---" marker line.
Quoted 84 lines
This patch use
mmc_gpio_request_cdfunction.Signed-off-by Beomho Seo <[email protected]>Signed-off-by Jaehoon Chung <[email protected]>--- drivers/mmc/host/sdhci-s3c.c | 56 +++++++++++------------------------------- 1 file changed, 14 insertions(+), 42 deletions(-)drivers/mmc/host/sdhci-s3c.c +9
-40@@ -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" @@ -400,44 +401,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)@@ -699,8 +662,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 )
drivers/mmc/host/sdhci-s3c.c static int sdhci_s3c_probe(struct platform_device *pdev) · line 681
Quoted 5 lines
drivers/mmc/host/sdhci-s3c.c +2
-0@@ -708,6 +677,9 @@ static int sdhci_s3c_probe(struct platform_device *pdev)#endif return 0 ; + err_req_cd: +mmc_gpio_free_cd (host->mmc);
It's wrong to go here when mmc_gpio_request_cd() is failed.
Quoted 6 lines
drivers/mmc/host/sdhci-s3c.c +1
-0+ err_req_regs:#ifndef CONFIG_PM_RUNTIME clk_disable_unprepare (sc->clk_bus[sc->cur_clk]);@@ -731,8 +703,8 @@ static int sdhci_s3c_remove(struct platform_device *pdev)if (pdata->cd_type ==S3C_SDHCI_CD_EXTERNAL && pdata->ext_cd_cleanup)
drivers/mmc/host/sdhci-s3c.c static int sdhci_s3c_remove(struct platform_device *pdev)
Quoted 10 lines
drivers/mmc/host/sdhci-s3c.c +2
-3pdata->ext_cd_cleanup (&sdhci_s3c_notify_change); -if (sc->ext_cd_irq) -free_irq (sc->ext_cd_irq, sc); +if (pdata->ext_cd_gpio) +mmc_gpio_free_cd (host->mmc);#ifdef CONFIG_PM_RUNTIME if (pdata->cd_type !=S3C_SDHCI_CD_INTERNAL ) -- 1.7.9.5
Thanks.