mmc: sdhci-s3c: Use mmc_gpio_request_cd fuction
Subsystems (3)
PATCH v2 1/1 mmc: sdhci-s3c: Use mmc_gpio_request_cd fuction
Hello all,
I have revised some issues of v1 revision.
This patch used mmc_gpio_request_cd function for detect card from cd-gpio pin. Please give your feedback at that time.
Change from v2 to v1
- Remove "return ret;" from "err_req_cd:".
- Revised sdhci_s3c_remove function.
Subject: [PATCH] mmc: sdhci-s3c: Use mmc_gpio_request_cd function
Include slot-gpio header file.
Use mmc_gpio_request_cd function.
Remove sehci_s3c_setup_card_detect_gpio/card_detect_thread functions.
--- 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 request 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 )
Signature · 8 lines
1.7.9.5 -- Best Regards, Beomho Seo, Assistant Engineer System S/W Lab., S/W Platform Team, Software Center Samsung Electronics
Jaehoon Chung
maintainerHi all,
Didn't have Any other comment for this patch?
If don't have any other comment, i want this patch is submitted at mmc-next.
We had tested this patch with exynos4 series.
CC'd Heiko.
Best Regards,
Jaehoon Chung
Quoted 118 lines · Beomho Seo
Hello all,
I have revised some issues of v1 revision.
This patch usedmmc_gpio_request_cdfunction for detect card from cd-gpio pin. Please give your feedback at that time.Change from v2 to v1
- Remove "return ret;" from "err_req_cd:".
- Revisedsdhci_s3c_removefunction.Subject: [PATCH] mmc: sdhci-s3c: Use
mmc_gpio_request_cdfunctionInclude slot-gpio header file.
Usemmc_gpio_request_cdfunction.
Remove sehci_s3c_setup_card_detect_gpio/card_detect_thread functions.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 +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 request 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 )
Hi Jaehoon,
Am Montag, 18. November 2013, 06:15:03 schrieb Jaehoon Chung:
Quoted 7 lines
Didn't have Any other comment for this patch?
If don't have any other comment, i want this patch is submitted at mmc-next.We had tested this patch with exynos4 series.
CC'd Heiko.
I don't have access to my s3c2416 machine this week, so I'll be able to test this next week at the earliest.
I also found a small spelling mistake below.
Heiko
Quoted 21 lines
Best Regards,
Jaehoon ChungQuoted 16 lines · Beomho Seo
Hello all,
I have revised some issues of v1 revision.
This patch usedmmc_gpio_request_cdfunction for detect card from cd-gpio pin. Please give your feedback at that time.Change from v2 to v1
- Remove "return ret;" from "
err_req_cd:".
- Revisedsdhci_s3c_removefunction.Subject: [PATCH] mmc: sdhci-s3c: Use
mmc_gpio_request_cdfunctionInclude slot-gpio header file.
Usemmc_gpio_request_cdfunction.
Remove sehci_s3c_setup_card_detect_gpio/card_detect_thread functions.
^sdhci
Quoted 31 lines
Quoted 31 lines
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 +1
-0@@ -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"drivers/mmc/host/sdhci-s3c.c +0
-0@@ -400,44 +401,6 @@ static void sdhci_s3c_notify_change(struct platform_device *dev, int state) } }
Quoted 16 lines
Quoted 6 lines
drivers/mmc/host/sdhci-s3c.c +0
-1-static irqreturn_t sdhci_s3c_gpio_card_detect_thread(int irq, void
*dev_id) -{drivers/mmc/host/sdhci-s3c.c +0
-4-struct sdhci_s3c *sc = dev_id; -int status =gpio_get_value (sc->ext_cd_gpio); -if (sc->pdata->ext_cd_gpio_invert) - status = !status;drivers/mmc/host/sdhci-s3c.c static void sdhci_s3c_notify_change(struct platform_device *dev, int state)
Quoted 10 lines
drivers/mmc/host/sdhci-s3c.c +0
-10-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 )
{
Quoted 84 lines
Quoted 69 lines
drivers/mmc/host/sdhci-s3c.c +11
-24- 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 request 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:
#ifndefCONFIG_PM_RUNTIMEdrivers/mmc/host/sdhci-s3c.c +0
-0clk_disable_unprepare (sc->clk_bus[sc->cur_clk]);drivers/mmc/host/sdhci-s3c.c static int sdhci_s3c_remove(struct platform_device · line 705
Quoted 3 lines
drivers/mmc/host/sdhci-s3c.c +0
-0@@ -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)Quoted 11 lines
drivers/mmc/host/sdhci-s3c.c +2
-2pdata->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_RUNTIMEif (
pdata->cd_type!=S3C_SDHCI_CD_INTERNAL)