* [PATCH] S3C: SDHCI: Add platform data parameters for GPIO external interrupts.
@ 2010-03-09 13:37 Thomas Abraham
2010-05-04 7:15 ` Ben Dooks
0 siblings, 1 reply; 2+ messages in thread
From: Thomas Abraham @ 2010-03-09 13:37 UTC (permalink / raw)
To: linux-samsung-soc
This patch adds platform parameters for external GPIO support for card
insertion/removal events. This is used for S3C SDHCI controllers that
does not use the SDCD pin for card detection.
Signed-off-by: Thomas Abraham <thomas.ab@samsung.com>
---
arch/arm/plat-samsung/include/plat/sdhci.h | 7 ++++++
drivers/mmc/host/sdhci-s3c.c | 30 ++++++++++++++++++++++++++++
2 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/arch/arm/plat-samsung/include/plat/sdhci.h b/arch/arm/plat-samsung/include/plat/sdhci.h
index 7d07cd7..b0a0528 100644
--- a/arch/arm/plat-samsung/include/plat/sdhci.h
+++ b/arch/arm/plat-samsung/include/plat/sdhci.h
@@ -29,6 +29,9 @@ struct mmc_ios;
* is necessary the controllers and/or GPIO blocks require the
* changing of driver-strength and other controls dependant on
* the card and speed of operation.
+ * @cfg_ext_cd: Configure external interrupt line.
+ * @is_card_present: Returns status of card availability.
+ * @ext_cd: The external GPIO interrupt number to be used.
*
* Initialisation data specific to either the machine or the platform
* for the device driver to use or call-back when configuring gpio or
@@ -45,6 +48,10 @@ struct s3c_sdhci_platdata {
void __iomem *regbase,
struct mmc_ios *ios,
struct mmc_card *card);
+
+ void (*cfg_ext_cd)(void);
+ unsigned int (*is_card_present)(void);
+ unsigned int ext_cd;
};
/**
diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c
index ebb17ac..073b56f 100644
--- a/drivers/mmc/host/sdhci-s3c.c
+++ b/drivers/mmc/host/sdhci-s3c.c
@@ -212,6 +212,20 @@ static void sdhci_s3c_set_clock(struct sdhci_host *host, unsigned int clock)
}
}
+static irqreturn_t s3c_sdhci_irq_extcd(int irq, void *dev_id)
+{
+ struct sdhci_s3c *sc = dev_id;
+ u32 present = sc->pdata->is_card_present();
+
+ if (present)
+ sc->host->flags &= ~SDHCI_DEVICE_DEAD;
+ else
+ sc->host->flags |= SDHCI_DEVICE_DEAD;
+
+ tasklet_schedule(&sc->host->card_tasklet);
+ return IRQ_HANDLED;
+}
+
static struct sdhci_ops sdhci_s3c_ops = {
.get_max_clock = sdhci_s3c_get_max_clk,
.get_timeout_clock = sdhci_s3c_get_timeout_clk,
@@ -346,14 +360,30 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
host->quirks |= (SDHCI_QUIRK_32BIT_DMA_ADDR |
SDHCI_QUIRK_32BIT_DMA_SIZE);
+ if (pdata->cfg_ext_cd) {
+ pdata->cfg_ext_cd();
+ if (!pdata->is_card_present())
+ host->flags |= SDHCI_DEVICE_DEAD;
+ }
+
ret = sdhci_add_host(host);
if (ret) {
dev_err(dev, "sdhci_add_host() failed\n");
goto err_add_host;
}
+ if (pdata->cfg_ext_cd) {
+ ret = request_irq(pdata->ext_cd, s3c_sdhci_irq_extcd,
+ IRQF_SHARED, mmc_hostname(host->mmc), sc);
+ if (ret)
+ goto err_req_cdirq;
+ }
+
return 0;
+ err_req_cdirq:
+ sdhci_remove_host(host, 0);
+
err_add_host:
release_resource(sc->ioarea);
kfree(sc->ioarea);
--
1.6.6.rc2
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] S3C: SDHCI: Add platform data parameters for GPIO external interrupts.
2010-03-09 13:37 [PATCH] S3C: SDHCI: Add platform data parameters for GPIO external interrupts Thomas Abraham
@ 2010-05-04 7:15 ` Ben Dooks
0 siblings, 0 replies; 2+ messages in thread
From: Ben Dooks @ 2010-05-04 7:15 UTC (permalink / raw)
To: Thomas Abraham; +Cc: linux-samsung-soc
On Tue, Mar 09, 2010 at 07:07:05PM +0530, Thomas Abraham wrote:
> This patch adds platform parameters for external GPIO support for card
> insertion/removal events. This is used for S3C SDHCI controllers that
> does not use the SDCD pin for card detection.
>
> Signed-off-by: Thomas Abraham <thomas.ab@samsung.com>
> ---
> arch/arm/plat-samsung/include/plat/sdhci.h | 7 ++++++
> drivers/mmc/host/sdhci-s3c.c | 30 ++++++++++++++++++++++++++++
> 2 files changed, 37 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/plat-samsung/include/plat/sdhci.h b/arch/arm/plat-samsung/include/plat/sdhci.h
> index 7d07cd7..b0a0528 100644
> --- a/arch/arm/plat-samsung/include/plat/sdhci.h
> +++ b/arch/arm/plat-samsung/include/plat/sdhci.h
> @@ -29,6 +29,9 @@ struct mmc_ios;
> * is necessary the controllers and/or GPIO blocks require the
> * changing of driver-strength and other controls dependant on
> * the card and speed of operation.
> + * @cfg_ext_cd: Configure external interrupt line.
> + * @is_card_present: Returns status of card availability.
> + * @ext_cd: The external GPIO interrupt number to be used.
Do you really need cfg_ext_cd?
> * Initialisation data specific to either the machine or the platform
> * for the device driver to use or call-back when configuring gpio or
> @@ -45,6 +48,10 @@ struct s3c_sdhci_platdata {
> void __iomem *regbase,
> struct mmc_ios *ios,
> struct mmc_card *card);
> +
> + void (*cfg_ext_cd)(void);
> + unsigned int (*is_card_present)(void);
> + unsigned int ext_cd;
> };
>
> /**
> diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c
> index ebb17ac..073b56f 100644
> --- a/drivers/mmc/host/sdhci-s3c.c
> +++ b/drivers/mmc/host/sdhci-s3c.c
> @@ -212,6 +212,20 @@ static void sdhci_s3c_set_clock(struct sdhci_host *host, unsigned int clock)
> }
> }
>
> +static irqreturn_t s3c_sdhci_irq_extcd(int irq, void *dev_id)
> +{
> + struct sdhci_s3c *sc = dev_id;
> + u32 present = sc->pdata->is_card_present();
> +
> + if (present)
> + sc->host->flags &= ~SDHCI_DEVICE_DEAD;
> + else
> + sc->host->flags |= SDHCI_DEVICE_DEAD;
> +
> + tasklet_schedule(&sc->host->card_tasklet);
> + return IRQ_HANDLED;
> +}
> +
> static struct sdhci_ops sdhci_s3c_ops = {
> .get_max_clock = sdhci_s3c_get_max_clk,
> .get_timeout_clock = sdhci_s3c_get_timeout_clk,
> @@ -346,14 +360,30 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
> host->quirks |= (SDHCI_QUIRK_32BIT_DMA_ADDR |
> SDHCI_QUIRK_32BIT_DMA_SIZE);
>
> + if (pdata->cfg_ext_cd) {
> + pdata->cfg_ext_cd();
> + if (!pdata->is_card_present())
> + host->flags |= SDHCI_DEVICE_DEAD;
> + }
> +
> ret = sdhci_add_host(host);
> if (ret) {
> dev_err(dev, "sdhci_add_host() failed\n");
> goto err_add_host;
> }
>
> + if (pdata->cfg_ext_cd) {
> + ret = request_irq(pdata->ext_cd, s3c_sdhci_irq_extcd,
> + IRQF_SHARED, mmc_hostname(host->mmc), sc);
> + if (ret)
> + goto err_req_cdirq;
> + }
> +
> return 0;
>
> + err_req_cdirq:
> + sdhci_remove_host(host, 0);
> +
> err_add_host:
> release_resource(sc->ioarea);
> kfree(sc->ioarea);
> --
> 1.6.6.rc2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
--
Ben
Q: What's a light-year?
A: One-third less calories than a regular year.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-05-04 7:15 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-09 13:37 [PATCH] S3C: SDHCI: Add platform data parameters for GPIO external interrupts Thomas Abraham
2010-05-04 7:15 ` Ben Dooks
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.