public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Ben Dooks <ben-linux@fluff.org>
To: linux-kernel@vger.kernel.org
Cc: Pierre Ossman <drzeus@drzeus.cx>,
	Harald Welte <laforge@openmoko.org>,
	Thomas Kleffel <tk@maintech.de>,
	Roman Moravcik <roman.moravcik@gmail.com>,
	Ben Dooks <ben-linux@fluff.org>
Subject: [patch 06/15] MMC: Add platform data for S3C24XX MMC/SD driver
Date: Fri, 06 Jun 2008 16:51:23 +0100	[thread overview]
Message-ID: <20080606155525.687756431@fluff.org.uk> (raw)
In-Reply-To: 20080606155117.074799346@fluff.org.uk

[-- Attachment #1: thirdparty/openmoko-mci/s3c_mci_platform.patch --]
[-- Type: text/plain, Size: 4903 bytes --]

This patch adds platform data support to the s3mci driver.  This allows
flexible board-specific configuration of set_power, card detect and read only
pins.

Signed-off-by: Ben Dooks <ben-linux@fluff.org>

Index: linux-2.6.26-rc5-q/drivers/mmc/host/s3cmci.c
===================================================================
--- linux-2.6.26-rc5-q.orig/drivers/mmc/host/s3cmci.c	2008-06-06 15:46:03.000000000 +0100
+++ linux-2.6.26-rc5-q/drivers/mmc/host/s3cmci.c	2008-06-06 15:46:04.000000000 +0100
@@ -22,6 +22,7 @@
 #include <asm/io.h>
 #include <asm/arch/regs-sdi.h>
 #include <asm/arch/regs-gpio.h>
+#include <asm/arch/mci.h>
 
 #include "s3cmci.h"
 
@@ -1009,6 +1010,9 @@ static void s3cmci_set_ios(struct mmc_ho
 			s3c2410_gpio_cfgpin(S3C2410_GPE9, S3C2410_GPE9_SDDAT2);
 			s3c2410_gpio_cfgpin(S3C2410_GPE10, S3C2410_GPE10_SDDAT3);
 
+			if (host->pdata->set_power)
+				host->pdata->set_power(ios->power_mode, ios->vdd);
+
 			if (!host->is2440)
 				mci_con|=S3C2410_SDICON_FIFORESET;
 
@@ -1019,6 +1023,9 @@ static void s3cmci_set_ios(struct mmc_ho
 			s3c2410_gpio_setpin(S3C2410_GPE5, 0);
 			s3c2410_gpio_cfgpin(S3C2410_GPE5, S3C2410_GPE5_OUTP);
 
+			if (host->pdata->set_power)
+				host->pdata->set_power(ios->power_mode, ios->vdd);
+
 			if (host->is2440)
 				mci_con|=S3C2440_SDICON_SDRESET;
 
@@ -1072,9 +1079,26 @@ static void s3cmci_reset(struct s3cmci_h
 	writel(con, host->base + S3C2410_SDICON);
 }
 
+static int s3cmci_get_ro(struct mmc_host *mmc)
+{
+	struct s3cmci_host *host = mmc_priv(mmc);
+
+	if (host->pdata->gpio_wprotect == 0)
+		return 0;
+
+	return s3c2410_gpio_getpin(host->pdata->gpio_wprotect);
+}
+
 static struct mmc_host_ops s3cmci_ops = {
 	.request	= s3cmci_request,
 	.set_ios	= s3cmci_set_ios,
+	.get_ro		= s3cmci_get_ro,
+};
+
+static struct s3c24xx_mci_pdata s3cmci_def_pdata = {
+	.gpio_detect	= 0,
+	.set_power	= NULL,
+	.ocr_avail	= MMC_VDD_32_33,
 };
 
 static int s3cmci_probe(struct platform_device *pdev, int is2440)
@@ -1094,6 +1118,12 @@ static int s3cmci_probe(struct platform_
 	host->mmc 	= mmc;
 	host->pdev	= pdev;
 
+	host->pdata = pdev->dev.platform_data;
+	if (!host->pdata) {
+		pdev->dev.platform_data = &s3cmci_def_pdata;
+		host->pdata = &s3cmci_def_pdata;
+	}
+
 	spin_lock_init(&host->complete_lock);
 	tasklet_init(&host->pio_tasklet, pio_tasklet, (unsigned long) host);
 	if (is2440) {
@@ -1112,7 +1142,8 @@ static int s3cmci_probe(struct platform_
 	host->pio_active 	= XFER_NONE;
 
 	host->dma		= S3CMCI_DMA;
-	host->irq_cd		= IRQ_EINT2;
+	host->irq_cd = s3c2410_gpio_getirq(host->pdata->gpio_detect);
+	s3c2410_gpio_cfgpin(host->pdata->gpio_detect, S3C2410_GPIO_IRQ);
 
 	host->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	if (!host->mem) {
@@ -1154,7 +1185,7 @@ static int s3cmci_probe(struct platform_
 
 	disable_irq(host->irq);
 
-	s3c2410_gpio_cfgpin(S3C2410_GPF2, S3C2410_GPF2_EINT2);
+	s3c2410_gpio_cfgpin(host->pdata->gpio_detect, S3C2410_GPIO_IRQ);
 	set_irq_type(host->irq_cd, IRQT_BOTHEDGE);
 
 	if (request_irq(host->irq_cd, s3cmci_irq_cd, 0, DRIVER_NAME, host)) {
@@ -1165,6 +1196,10 @@ static int s3cmci_probe(struct platform_
 		goto probe_free_irq;
 	}
 
+	if (host->pdata->gpio_wprotect)
+		s3c2410_gpio_cfgpin(host->pdata->gpio_wprotect,
+				    S3C2410_GPIO_INPUT);
+
 	if (s3c2410_dma_request(S3CMCI_DMA, &s3cmci_dma_client, NULL)) {
 		dev_err(&pdev->dev, "unable to get DMA channel.\n");
 		ret = -EBUSY;
@@ -1187,7 +1222,7 @@ static int s3cmci_probe(struct platform_
 	host->clk_rate = clk_get_rate(host->clk);
 
 	mmc->ops 	= &s3cmci_ops;
-	mmc->ocr_avail	= MMC_VDD_32_33;
+	mmc->ocr_avail	= host->pdata->ocr_avail;
 	mmc->caps	= MMC_CAP_4_BIT_DATA;
 	mmc->f_min 	= host->clk_rate / (host->clk_div * 256);
 	mmc->f_max 	= host->clk_rate / host->clk_div;
Index: linux-2.6.26-rc5-q/drivers/mmc/host/s3cmci.h
===================================================================
--- linux-2.6.26-rc5-q.orig/drivers/mmc/host/s3cmci.h	2008-06-06 15:24:37.000000000 +0100
+++ linux-2.6.26-rc5-q/drivers/mmc/host/s3cmci.h	2008-06-06 15:46:04.000000000 +0100
@@ -22,6 +22,7 @@ enum s3cmci_waitfor {
 
 struct s3cmci_host {
 	struct platform_device	*pdev;
+	struct s3c24xx_mci_pdata *pdata;
 	struct mmc_host		*mmc;
 	struct resource		*mem;
 	struct clk		*clk;
Index: linux-2.6.26-rc5-q/include/asm-arm/arch-s3c2410/mci.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.26-rc5-q/include/asm-arm/arch-s3c2410/mci.h	2008-06-06 15:46:04.000000000 +0100
@@ -0,0 +1,12 @@
+#ifndef _ARCH_MCI_H
+#define _ARCH_MCI_H
+
+struct s3c24xx_mci_pdata {
+	unsigned int	gpio_detect;
+	unsigned int	gpio_wprotect;
+	unsigned long	ocr_avail;
+	void		(*set_power)(unsigned char power_mode,
+				     unsigned short vdd);
+};
+
+#endif /* _ARCH_NCI_H */

-- 
Ben (ben@fluff.org, http://www.fluff.org/)

  'a smiley only costs 4 bytes'

  parent reply	other threads:[~2008-06-06 15:57 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-06 15:51 [patch 00/15] S3C24XX SD/MMC driver series Ben Dooks
2008-06-06 15:51 ` [patch 01/15] MMC: S3C24XX MMC/SD driver. From: Thomas Kleffel <tk@maintech.de> Ben Dooks
2008-06-07  5:49   ` Andrew Morton
2008-06-07 12:22     ` Ben Dooks
2008-06-07 19:13       ` Andrew Morton
2008-06-07 19:50         ` Ben Dooks
2008-06-14 16:18   ` Pierre Ossman
2008-06-17 23:02     ` Ben Dooks
2008-06-06 15:51 ` [patch 02/15] MMC: S3C24XX MMC/SD driver write fixes From: Harald Welte <laforge@openmoko.org> Ben Dooks
2008-06-06 15:51 ` [patch 03/15] MMC: DMA free fix for S3C24XX SD/MMC driver From: OpenMoko SVN " Ben Dooks
2008-06-06 15:51 ` [patch 04/15] MMC: S3C24XX MMC/SD stop fix From: Thomas Kleffel <tk@maintech.de> Ben Dooks
2008-06-06 15:51 ` [patch 05/15] MMC: Fix S3C24XX IRQ enable during PIO transfers From: Roman Moracik <roman.moravcik@gmail.com> Ben Dooks
2008-06-14 16:20   ` Pierre Ossman
2008-06-06 15:51 ` Ben Dooks [this message]
2008-06-14 16:22   ` [patch 06/15] MMC: Add platform data for S3C24XX MMC/SD driver Pierre Ossman
2008-06-17 23:20     ` Ben Dooks
2008-06-06 15:51 ` [patch 07/15] MMC: Add support to invert S3C24XX write protect line Ben Dooks
2008-06-06 15:51 ` [patch 08/15] MMC: Ensure host->mrq->data is valid in S3C24XX driver Ben Dooks
2008-06-06 15:51 ` [patch 09/15] MMC: Allow card-detect to be on an non-IRQ capable pin on the S3C24XX Ben Dooks
2008-06-14 16:24   ` Pierre Ossman
2008-06-06 15:51 ` [patch 10/15] MMC: Fix s3c24xx driver s3c2410_dma_request() return code check Ben Dooks
2008-06-06 15:51 ` [patch 11/15] MMC: Fix the retcode in the S3C24XX MMC/SD driver Ben Dooks
2008-06-14 16:25   ` Pierre Ossman
2008-06-17 23:33     ` Ben Dooks
2008-06-06 15:51 ` [patch 12/15] MMC: S3C24XX MMC/SD driver fixes for sg_ access Ben Dooks
2008-06-06 15:51 ` [patch 13/15] MMC: s3cmci: Add MODULE_ALIAS() entries for the platform devices Ben Dooks
2008-06-06 15:51 ` [patch 14/15] MMC: Fix use of msecs where jiffies are needed Ben Dooks
2008-06-06 15:51 ` [patch 15/15] MMC: Add media presence detection to request handling Ben Dooks

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080606155525.687756431@fluff.org.uk \
    --to=ben-linux@fluff.org \
    --cc=drzeus@drzeus.cx \
    --cc=laforge@openmoko.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=roman.moravcik@gmail.com \
    --cc=tk@maintech.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox