All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ben Dooks <ben-linux@fluff.org>
To: linux-kernel@vger.kernel.org
Cc: drzeus-mmc@drzeus.cx, Ben Dooks <ben-linux@fluff.org>
Subject: [patch v2 07/16] MMC: S3C24XX: Add platform data for MMC/SD driver
Date: Mon, 16 Jun 2008 15:34:52 +0100	[thread overview]
Message-ID: <20080616143513.247445740@fluff.org.uk> (raw)
In-Reply-To: 20080616143445.451023326@fluff.org.uk

[-- Attachment #1: thirdparty/openmoko-mci/s3c_mci_platform.patch --]
[-- Type: text/plain, Size: 4791 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-q2/drivers/mmc/host/s3cmci.c
===================================================================
--- linux-2.6.26-rc5-q2.orig/drivers/mmc/host/s3cmci.c	2008-06-16 15:24:57.000000000 +0100
+++ linux-2.6.26-rc5-q2/drivers/mmc/host/s3cmci.c	2008-06-16 15:24:59.000000000 +0100
@@ -21,6 +21,7 @@
 
 #include <asm/arch/regs-sdi.h>
 #include <asm/arch/regs-gpio.h>
+#include <asm/arch/mci.h>
 
 #include "s3cmci.h"
 
@@ -1005,6 +1006,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;
 
@@ -1018,6 +1022,9 @@ static void s3cmci_set_ios(struct mmc_ho
 		if (host->is2440)
 			mci_con |= S3C2440_SDICON_SDRESET;
 
+		if (host->pdata->set_power)
+			host->pdata->set_power(ios->power_mode, ios->vdd);
+
 		break;
 	}
 
@@ -1066,9 +1073,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)
@@ -1089,6 +1113,12 @@ static int s3cmci_probe(struct platform_
 	host->pdev	= pdev;
 	host->is2440	= is2440;
 
+	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);
 
@@ -1107,7 +1137,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) {
@@ -1149,7 +1180,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)) {
@@ -1159,6 +1190,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;
@@ -1182,7 +1217,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-q2/drivers/mmc/host/s3cmci.h
===================================================================
--- linux-2.6.26-rc5-q2.orig/drivers/mmc/host/s3cmci.h	2008-06-16 15:13:28.000000000 +0100
+++ linux-2.6.26-rc5-q2/drivers/mmc/host/s3cmci.h	2008-06-16 15:24:59.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-q2/include/asm-arm/arch-s3c2410/mci.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.26-rc5-q2/include/asm-arm/arch-s3c2410/mci.h	2008-06-16 15:24:59.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-16 14:36 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-16 14:34 [patch v2 00/16] S3C24XX SD/MMC driver Ben Dooks
2008-06-16 14:34 ` [patch v2 01/16] MMC: S3C24XX MMC/SD driver Ben Dooks
2008-06-16 14:34 ` [patch v2 02/16] MMC: S3C24XX: Fix the checkpatch.pl errors in the s3cmci driver Ben Dooks
2008-06-16 15:07   ` Ben Dooks
2008-06-16 14:34 ` [patch v2 03/16] MMC: S3C24XX MMC/SD driver write fixes Ben Dooks
2008-06-16 14:34 ` [patch v2 04/16] MMC: DMA free fix for S3C24XX SD/MMC driver Ben Dooks
2008-06-16 14:34 ` [patch v2 05/16] MMC: S3C24XX MMC/SD stop fix Ben Dooks
2008-06-16 14:34 ` [patch v2 06/16] MMC: Fix S3C24XX IRQ enable during PIO transfers Ben Dooks
2008-06-16 14:34 ` Ben Dooks [this message]
2008-06-16 14:34 ` [patch v2 08/16] MMC: S3C24XX: Add support to invert write protect line Ben Dooks
2008-06-16 14:34 ` [patch v2 09/16] MMC: S3C24XX: Ensure host->mrq->data is valid Ben Dooks
2008-06-16 14:34 ` [patch v2 10/16] MMC: S3C24XX: Allow card-detect on non-IRQ capable pin Ben Dooks
2008-06-16 14:34 ` [patch v2 11/16] MMC: S3C24XX: Fix s3c2410_dma_request() return code check Ben Dooks
2008-06-16 14:34 ` [patch v2 12/16] MMC: S3C24XX: Fix MMC return codes Ben Dooks
2008-06-16 14:34 ` [patch v2 13/16] MMC: S3C24XX: MMC/SD driver fix use of sg lists Ben Dooks
2008-06-16 14:34 ` [patch v2 14/16] MMC: S3C24XX: Add MODULE_ALIAS() entries for the platform devices Ben Dooks
2008-06-16 14:35 ` [patch v2 15/16] MMC: S3C24XX: Fix use of msecs where jiffies are needed Ben Dooks
2008-06-16 14:35 ` [patch v2 16/16] MMC: S3C24XX: Add media presence test to request handling Ben Dooks
2008-06-18 10:32 ` [patch v2 00/16] S3C24XX SD/MMC driver Pierre Ossman

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=20080616143513.247445740@fluff.org.uk \
    --to=ben-linux@fluff.org \
    --cc=drzeus-mmc@drzeus.cx \
    --cc=linux-kernel@vger.kernel.org \
    /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 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.