All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <4AC09146.4000608@visionsystems.de>

diff --git a/a/1.txt b/N1/1.txt
index 3fe1e92..c90ad37 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -56,257 +56,3 @@ As to 2.6.30-at91-exp-0033-at91-atmel-mci-inclusion-of-sd-mmc-driver-in-at91sa.p
 DW_DMA_SLAVE_WIDTH_32BIT to AT_DMA_SLAVE_WIDTH_32BIT
 
 I couldn't apply 2.6.30-at91-exp-0032-mmc-atmel-mci-New-MCI2-module-support-in-atmel-mci.patch with quilt at once, so I had to make it manually. Here is applicable version:
-
->From db778d85fe91649735f0fb23fa1088fee745f0ec Mon Sep 17 00:00:00 2001
-From: Nicolas Ferre <nicolas.ferre@atmel.com>
-Date: Fri, 21 Aug 2009 18:23:30 +0200
-Subject: [PATCH 32/47] mmc: atmel-mci: New MCI2 module support in atmel-mci driver
-
-This new revision of the IP adds some improvements to the MCI already present
-in several Atmel SOC.
-Some new registers are added and a particular way of handling DMA interaction
-lead to a new sequence in function call which is backward compatible: On MCI2,
-we must set the DMAEN bit to enable the DMA handshaking interface. This must
-happen before the data transfer command is sent.
-
-A new function is able to differentiate MCI2 code and is based on knowledge of
-processor id (cpu_is_xxx()).
-
-Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
-Signed-off-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com>
----
- drivers/mmc/host/atmel-mci.c |   85 +++++++++++++++++++++++++++++++++++++-----
- 1 files changed, 75 insertions(+), 10 deletions(-)
-
-Index: linus2/drivers/mmc/host/atmel-mci.c
-===================================================================
---- linus2.orig/drivers/mmc/host/atmel-mci.c
-+++ linus2/drivers/mmc/host/atmel-mci.c
-@@ -92,6 +92,7 @@ struct atmel_mci_dma {
-  * @need_clock_update: Update the clock rate before the next request.
-  * @need_reset: Reset controller before next request.
-  * @mode_reg: Value of the MR register.
-+ * @cfg_reg: Value of the CFG register.
-  * @bus_hz: The rate of @mck in Hz. This forms the basis for MMC bus
-  *	rate and timeout calculations.
-  * @mapbase: Physical address of the MMIO registers.
-@@ -155,6 +156,7 @@ struct atmel_mci {
- 	bool			need_clock_update;
- 	bool			need_reset;
- 	u32			mode_reg;
-+	u32			cfg_reg;
- 	unsigned long		bus_hz;
- 	unsigned long		mapbase;
- 	struct clk		*mck;
-@@ -223,6 +225,19 @@ static bool mci_has_rwproof(void)
- }
- 
- /*
-+ * The new MCI2 module isn't 100% compatible with the old MCI module,
-+ * and it has a few nice features which we want to use...
-+ */
-+static inline bool atmci_is_mci2(void)
-+{
-+	if (cpu_is_at91sam9g45())
-+		return true;
-+
-+	return false;
-+}
-+
-+
-+/*
-  * The debugfs stuff below is mostly optimized away when
-  * CONFIG_DEBUG_FS is not set.
-  */
-@@ -357,12 +372,33 @@ static int atmci_regs_show(struct seq_fi
- 			buf[MCI_BLKR / 4],
- 			buf[MCI_BLKR / 4] & 0xffff,
- 			(buf[MCI_BLKR / 4] >> 16) & 0xffff);
-+	if (atmci_is_mci2())
-+		seq_printf(s, "CSTOR:\t0x%08x\n", buf[MCI_CSTOR / 4]);
- 
- 	/* Don't read RSPR and RDR; it will consume the data there */
- 
- 	atmci_show_status_reg(s, "SR", buf[MCI_SR / 4]);
- 	atmci_show_status_reg(s, "IMR", buf[MCI_IMR / 4]);
- 
-+	if (atmci_is_mci2()) {
-+		u32 val;
-+
-+		val = buf[MCI_DMA / 4];
-+		seq_printf(s, "DMA:\t0x%08x OFFSET=%u CHKSIZE=%u%s\n",
-+				val, val & 3,
-+				((val >> 4) & 3) ?
-+					1 << (((val >> 4) & 3) + 1) : 1,
-+				val & MCI_DMAEN ? " DMAEN" : "");
-+
-+		val = buf[MCI_CFG / 4];
-+		seq_printf(s, "CFG:\t0x%08x%s%s%s%s\n",
-+				val,
-+				val & MCI_CFG_FIFOMODE_1DATA ? " FIFOMODE_ONE_DATA" : "",
-+				val & MCI_CFG_FERRCTRL_COR ? " FERRCTRL_CLEAR_ON_READ" : "",
-+				val & MCI_CFG_HSMODE ? " HSMODE" : "",
-+				val & MCI_CFG_LSYNC ? " LSYNC" : "");
-+	}
-+
- 	kfree(buf);
- 
- 	return 0;
-@@ -557,6 +593,10 @@ static void atmci_dma_complete(void *arg
- 
- 	dev_vdbg(&host->pdev->dev, "DMA complete\n");
- 
-+	if (atmci_is_mci2())
-+		/* Disable DMA hardware handshaking on MCI */
-+		mci_writel(host, DMA, mci_readl(host, DMA) & ~MCI_DMAEN);
-+
- 	atmci_dma_cleanup(host);
- 
- 	/*
-@@ -592,7 +632,7 @@ static void atmci_dma_complete(void *arg
- }
- 
- static int
--atmci_submit_data_dma(struct atmel_mci *host, struct mmc_data *data)
-+atmci_prepare_data_dma(struct atmel_mci *host, struct mmc_data *data)
- {
- 	struct dma_chan			*chan;
- 	struct dma_async_tx_descriptor	*desc;
-@@ -624,6 +664,9 @@ atmci_submit_data_dma(struct atmel_mci *
- 	if (!chan)
- 		return -ENODEV;
- 
-+	if (atmci_is_mci2())
-+		mci_writel(host, DMA, MCI_DMA_CHKSIZE(3) | MCI_DMAEN);
-+
- 	if (data->flags & MMC_DATA_READ)
- 		direction = DMA_FROM_DEVICE;
- 	else
-@@ -641,10 +684,6 @@ atmci_submit_data_dma(struct atmel_mci *
- 	host->dma.data_desc = desc;
- 	desc->callback = atmci_dma_complete;
- 	desc->callback_param = host;
--	desc->tx_submit(desc);
--
--	/* Go! */
--	chan->device->device_issue_pending(chan);
- 
- 	return 0;
- unmap_exit:
-@@ -652,13 +691,27 @@ unmap_exit:
- 	return -ENOMEM;
- }
- 
-+static void atmci_submit_data(struct atmel_mci *host)
-+{
-+	struct dma_chan			*chan = host->data_chan;
-+	struct dma_async_tx_descriptor	*desc = host->dma.data_desc;
-+
-+	if (chan) {
-+		desc->tx_submit(desc);
-+		chan->device->device_issue_pending(chan);
-+	}
-+}
-+
- #else /* CONFIG_MMC_ATMELMCI_DMA */
- 
--static int atmci_submit_data_dma(struct atmel_mci *host, struct mmc_data *data)
-+static int atmci_prepare_data_dma(struct atmel_mci *host, struct mmc_data *data)
- {
- 	return -ENOSYS;
- }
- 
-+static void atmci_submit_data(struct atmel_mci *host) {}
-+
-+
- static void atmci_stop_dma(struct atmel_mci *host)
- {
- 	/* Data transfer was stopped by the interrupt handler */
-@@ -672,7 +725,7 @@ static void atmci_stop_dma(struct atmel_
-  * Returns a mask of interrupt flags to be enabled after the whole
-  * request has been prepared.
-  */
--static u32 atmci_submit_data(struct atmel_mci *host, struct mmc_data *data)
-+static u32 atmci_prepare_data(struct atmel_mci *host, struct mmc_data *data)
- {
- 	u32 iflags;
- 
-@@ -683,7 +736,7 @@ static u32 atmci_submit_data(struct atme
- 	host->data = data;
- 
- 	iflags = ATMCI_DATA_ERROR_FLAGS;
--	if (atmci_submit_data_dma(host, data)) {
-+	if (atmci_prepare_data_dma(host, data)) {
- 		host->data_chan = NULL;
- 
- 		/*
-@@ -729,6 +782,8 @@ static void atmci_start_request(struct a
- 		mci_writel(host, CR, MCI_CR_SWRST);
- 		mci_writel(host, CR, MCI_CR_MCIEN);
- 		mci_writel(host, MR, host->mode_reg);
-+		if (atmci_is_mci2())
-+			mci_writel(host, CFG, host->cfg_reg);
- 		host->need_reset = false;
- 	}
- 	mci_writel(host, SDCR, slot->sdc_reg);
-@@ -744,6 +799,7 @@ static void atmci_start_request(struct a
- 		while (!(mci_readl(host, SR) & MCI_CMDRDY))
- 			cpu_relax();
- 	}
-+	iflags = 0;
- 	data = mrq->data;
- 	if (data) {
- 		atmci_set_timeout(host, slot, data);
-@@ -753,15 +809,17 @@ static void atmci_start_request(struct a
- 				| MCI_BLKLEN(data->blksz));
- 		dev_vdbg(&slot->mmc->class_dev, "BLKR=0x%08x\n",
- 			MCI_BCNT(data->blocks) | MCI_BLKLEN(data->blksz));
-+
-+		iflags |= atmci_prepare_data(host, data);
- 	}
- 
--	iflags = MCI_CMDRDY;
-+	iflags |= MCI_CMDRDY;
- 	cmd = mrq->cmd;
- 	cmdflags = atmci_prepare_command(slot->mmc, cmd);
- 	atmci_start_command(host, cmd, cmdflags);
- 
- 	if (data)
--		iflags |= atmci_submit_data(host, data);
-+		atmci_submit_data(host);
- 
- 	if (mrq->stop) {
- 		host->stop_cmdr = atmci_prepare_command(slot->mmc, mrq->stop);
-@@ -857,6 +915,8 @@ static void atmci_set_ios(struct mmc_hos
- 			clk_enable(host->mck);
- 			mci_writel(host, CR, MCI_CR_SWRST);
- 			mci_writel(host, CR, MCI_CR_MCIEN);
-+			if (atmci_is_mci2())
-+				mci_writel(host, CFG, host->cfg_reg);
- 		}
- 
- 		/*
-@@ -1095,6 +1155,8 @@ static void atmci_detect_change(unsigned
- 				mci_writel(host, CR, MCI_CR_SWRST);
- 				mci_writel(host, CR, MCI_CR_MCIEN);
- 				mci_writel(host, MR, host->mode_reg);
-+				if (atmci_is_mci2())
-+					mci_writel(host, CFG, host->cfg_reg);
- 
- 				host->data = NULL;
- 				host->cmd = NULL;
-@@ -1644,6 +1706,10 @@ static void atmci_configure_dma(struct a
- 	}
- 	if (!host->dma.chan)
- 		dev_notice(&host->pdev->dev, "DMA not available, using PIO\n");
-+	else
-+		dev_info(&host->pdev->dev,
-+					"Using %s for DMA transfers\n",
-+					dma_chan_name(host->dma.chan));
- }
- #else
- static void atmci_configure_dma(struct atmel_mci *host) {}
-
-
-Best regards,
-Yegor Yefremov
diff --git a/a/content_digest b/N1/content_digest
index 9317787..3c95053 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,11 +1,9 @@
  "ref\04ABCBD32.7080408@visionsystems.de\0"
  "ref\04ABCE36F.1000205@atmel.com\0"
- "From\0Yegor Yefremov <yegor_sub1@visionsystems.de>\0"
- "Subject\0Re: [at91sam9g45] DMA driver for AC97 and MCI\0"
+ "From\0yegor_sub1@visionsystems.de (Yegor Yefremov)\0"
+ "Subject\0[at91sam9g45] DMA driver for AC97 and MCI\0"
  "Date\0Mon, 28 Sep 2009 12:34:46 +0200\0"
- "To\0Nicolas Ferre <nicolas.ferre@atmel.com>\0"
- "Cc\0linux-mmc@vger.kernel.org"
- " linux-arm-kernel@lists.infradead.org\0"
+ "To\0linux-arm-kernel@lists.infradead.org\0"
  "\00:1\0"
  "b\0"
  ">> I try to get sound and SD card working on at91sam9g45-ekes development\n"
@@ -65,260 +63,6 @@
  "As to 2.6.30-at91-exp-0033-at91-atmel-mci-inclusion-of-sd-mmc-driver-in-at91sa.patch I've only changed\n"
  "DW_DMA_SLAVE_WIDTH_32BIT to AT_DMA_SLAVE_WIDTH_32BIT\n"
  "\n"
- "I couldn't apply 2.6.30-at91-exp-0032-mmc-atmel-mci-New-MCI2-module-support-in-atmel-mci.patch with quilt at once, so I had to make it manually. Here is applicable version:\n"
- "\n"
- ">From db778d85fe91649735f0fb23fa1088fee745f0ec Mon Sep 17 00:00:00 2001\n"
- "From: Nicolas Ferre <nicolas.ferre@atmel.com>\n"
- "Date: Fri, 21 Aug 2009 18:23:30 +0200\n"
- "Subject: [PATCH 32/47] mmc: atmel-mci: New MCI2 module support in atmel-mci driver\n"
- "\n"
- "This new revision of the IP adds some improvements to the MCI already present\n"
- "in several Atmel SOC.\n"
- "Some new registers are added and a particular way of handling DMA interaction\n"
- "lead to a new sequence in function call which is backward compatible: On MCI2,\n"
- "we must set the DMAEN bit to enable the DMA handshaking interface. This must\n"
- "happen before the data transfer command is sent.\n"
- "\n"
- "A new function is able to differentiate MCI2 code and is based on knowledge of\n"
- "processor id (cpu_is_xxx()).\n"
- "\n"
- "Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>\n"
- "Signed-off-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com>\n"
- "---\n"
- " drivers/mmc/host/atmel-mci.c |   85 +++++++++++++++++++++++++++++++++++++-----\n"
- " 1 files changed, 75 insertions(+), 10 deletions(-)\n"
- "\n"
- "Index: linus2/drivers/mmc/host/atmel-mci.c\n"
- "===================================================================\n"
- "--- linus2.orig/drivers/mmc/host/atmel-mci.c\n"
- "+++ linus2/drivers/mmc/host/atmel-mci.c\n"
- "@@ -92,6 +92,7 @@ struct atmel_mci_dma {\n"
- "  * @need_clock_update: Update the clock rate before the next request.\n"
- "  * @need_reset: Reset controller before next request.\n"
- "  * @mode_reg: Value of the MR register.\n"
- "+ * @cfg_reg: Value of the CFG register.\n"
- "  * @bus_hz: The rate of @mck in Hz. This forms the basis for MMC bus\n"
- "  *\trate and timeout calculations.\n"
- "  * @mapbase: Physical address of the MMIO registers.\n"
- "@@ -155,6 +156,7 @@ struct atmel_mci {\n"
- " \tbool\t\t\tneed_clock_update;\n"
- " \tbool\t\t\tneed_reset;\n"
- " \tu32\t\t\tmode_reg;\n"
- "+\tu32\t\t\tcfg_reg;\n"
- " \tunsigned long\t\tbus_hz;\n"
- " \tunsigned long\t\tmapbase;\n"
- " \tstruct clk\t\t*mck;\n"
- "@@ -223,6 +225,19 @@ static bool mci_has_rwproof(void)\n"
- " }\n"
- " \n"
- " /*\n"
- "+ * The new MCI2 module isn't 100% compatible with the old MCI module,\n"
- "+ * and it has a few nice features which we want to use...\n"
- "+ */\n"
- "+static inline bool atmci_is_mci2(void)\n"
- "+{\n"
- "+\tif (cpu_is_at91sam9g45())\n"
- "+\t\treturn true;\n"
- "+\n"
- "+\treturn false;\n"
- "+}\n"
- "+\n"
- "+\n"
- "+/*\n"
- "  * The debugfs stuff below is mostly optimized away when\n"
- "  * CONFIG_DEBUG_FS is not set.\n"
- "  */\n"
- "@@ -357,12 +372,33 @@ static int atmci_regs_show(struct seq_fi\n"
- " \t\t\tbuf[MCI_BLKR / 4],\n"
- " \t\t\tbuf[MCI_BLKR / 4] & 0xffff,\n"
- " \t\t\t(buf[MCI_BLKR / 4] >> 16) & 0xffff);\n"
- "+\tif (atmci_is_mci2())\n"
- "+\t\tseq_printf(s, \"CSTOR:\\t0x%08x\\n\", buf[MCI_CSTOR / 4]);\n"
- " \n"
- " \t/* Don't read RSPR and RDR; it will consume the data there */\n"
- " \n"
- " \tatmci_show_status_reg(s, \"SR\", buf[MCI_SR / 4]);\n"
- " \tatmci_show_status_reg(s, \"IMR\", buf[MCI_IMR / 4]);\n"
- " \n"
- "+\tif (atmci_is_mci2()) {\n"
- "+\t\tu32 val;\n"
- "+\n"
- "+\t\tval = buf[MCI_DMA / 4];\n"
- "+\t\tseq_printf(s, \"DMA:\\t0x%08x OFFSET=%u CHKSIZE=%u%s\\n\",\n"
- "+\t\t\t\tval, val & 3,\n"
- "+\t\t\t\t((val >> 4) & 3) ?\n"
- "+\t\t\t\t\t1 << (((val >> 4) & 3) + 1) : 1,\n"
- "+\t\t\t\tval & MCI_DMAEN ? \" DMAEN\" : \"\");\n"
- "+\n"
- "+\t\tval = buf[MCI_CFG / 4];\n"
- "+\t\tseq_printf(s, \"CFG:\\t0x%08x%s%s%s%s\\n\",\n"
- "+\t\t\t\tval,\n"
- "+\t\t\t\tval & MCI_CFG_FIFOMODE_1DATA ? \" FIFOMODE_ONE_DATA\" : \"\",\n"
- "+\t\t\t\tval & MCI_CFG_FERRCTRL_COR ? \" FERRCTRL_CLEAR_ON_READ\" : \"\",\n"
- "+\t\t\t\tval & MCI_CFG_HSMODE ? \" HSMODE\" : \"\",\n"
- "+\t\t\t\tval & MCI_CFG_LSYNC ? \" LSYNC\" : \"\");\n"
- "+\t}\n"
- "+\n"
- " \tkfree(buf);\n"
- " \n"
- " \treturn 0;\n"
- "@@ -557,6 +593,10 @@ static void atmci_dma_complete(void *arg\n"
- " \n"
- " \tdev_vdbg(&host->pdev->dev, \"DMA complete\\n\");\n"
- " \n"
- "+\tif (atmci_is_mci2())\n"
- "+\t\t/* Disable DMA hardware handshaking on MCI */\n"
- "+\t\tmci_writel(host, DMA, mci_readl(host, DMA) & ~MCI_DMAEN);\n"
- "+\n"
- " \tatmci_dma_cleanup(host);\n"
- " \n"
- " \t/*\n"
- "@@ -592,7 +632,7 @@ static void atmci_dma_complete(void *arg\n"
- " }\n"
- " \n"
- " static int\n"
- "-atmci_submit_data_dma(struct atmel_mci *host, struct mmc_data *data)\n"
- "+atmci_prepare_data_dma(struct atmel_mci *host, struct mmc_data *data)\n"
- " {\n"
- " \tstruct dma_chan\t\t\t*chan;\n"
- " \tstruct dma_async_tx_descriptor\t*desc;\n"
- "@@ -624,6 +664,9 @@ atmci_submit_data_dma(struct atmel_mci *\n"
- " \tif (!chan)\n"
- " \t\treturn -ENODEV;\n"
- " \n"
- "+\tif (atmci_is_mci2())\n"
- "+\t\tmci_writel(host, DMA, MCI_DMA_CHKSIZE(3) | MCI_DMAEN);\n"
- "+\n"
- " \tif (data->flags & MMC_DATA_READ)\n"
- " \t\tdirection = DMA_FROM_DEVICE;\n"
- " \telse\n"
- "@@ -641,10 +684,6 @@ atmci_submit_data_dma(struct atmel_mci *\n"
- " \thost->dma.data_desc = desc;\n"
- " \tdesc->callback = atmci_dma_complete;\n"
- " \tdesc->callback_param = host;\n"
- "-\tdesc->tx_submit(desc);\n"
- "-\n"
- "-\t/* Go! */\n"
- "-\tchan->device->device_issue_pending(chan);\n"
- " \n"
- " \treturn 0;\n"
- " unmap_exit:\n"
- "@@ -652,13 +691,27 @@ unmap_exit:\n"
- " \treturn -ENOMEM;\n"
- " }\n"
- " \n"
- "+static void atmci_submit_data(struct atmel_mci *host)\n"
- "+{\n"
- "+\tstruct dma_chan\t\t\t*chan = host->data_chan;\n"
- "+\tstruct dma_async_tx_descriptor\t*desc = host->dma.data_desc;\n"
- "+\n"
- "+\tif (chan) {\n"
- "+\t\tdesc->tx_submit(desc);\n"
- "+\t\tchan->device->device_issue_pending(chan);\n"
- "+\t}\n"
- "+}\n"
- "+\n"
- " #else /* CONFIG_MMC_ATMELMCI_DMA */\n"
- " \n"
- "-static int atmci_submit_data_dma(struct atmel_mci *host, struct mmc_data *data)\n"
- "+static int atmci_prepare_data_dma(struct atmel_mci *host, struct mmc_data *data)\n"
- " {\n"
- " \treturn -ENOSYS;\n"
- " }\n"
- " \n"
- "+static void atmci_submit_data(struct atmel_mci *host) {}\n"
- "+\n"
- "+\n"
- " static void atmci_stop_dma(struct atmel_mci *host)\n"
- " {\n"
- " \t/* Data transfer was stopped by the interrupt handler */\n"
- "@@ -672,7 +725,7 @@ static void atmci_stop_dma(struct atmel_\n"
- "  * Returns a mask of interrupt flags to be enabled after the whole\n"
- "  * request has been prepared.\n"
- "  */\n"
- "-static u32 atmci_submit_data(struct atmel_mci *host, struct mmc_data *data)\n"
- "+static u32 atmci_prepare_data(struct atmel_mci *host, struct mmc_data *data)\n"
- " {\n"
- " \tu32 iflags;\n"
- " \n"
- "@@ -683,7 +736,7 @@ static u32 atmci_submit_data(struct atme\n"
- " \thost->data = data;\n"
- " \n"
- " \tiflags = ATMCI_DATA_ERROR_FLAGS;\n"
- "-\tif (atmci_submit_data_dma(host, data)) {\n"
- "+\tif (atmci_prepare_data_dma(host, data)) {\n"
- " \t\thost->data_chan = NULL;\n"
- " \n"
- " \t\t/*\n"
- "@@ -729,6 +782,8 @@ static void atmci_start_request(struct a\n"
- " \t\tmci_writel(host, CR, MCI_CR_SWRST);\n"
- " \t\tmci_writel(host, CR, MCI_CR_MCIEN);\n"
- " \t\tmci_writel(host, MR, host->mode_reg);\n"
- "+\t\tif (atmci_is_mci2())\n"
- "+\t\t\tmci_writel(host, CFG, host->cfg_reg);\n"
- " \t\thost->need_reset = false;\n"
- " \t}\n"
- " \tmci_writel(host, SDCR, slot->sdc_reg);\n"
- "@@ -744,6 +799,7 @@ static void atmci_start_request(struct a\n"
- " \t\twhile (!(mci_readl(host, SR) & MCI_CMDRDY))\n"
- " \t\t\tcpu_relax();\n"
- " \t}\n"
- "+\tiflags = 0;\n"
- " \tdata = mrq->data;\n"
- " \tif (data) {\n"
- " \t\tatmci_set_timeout(host, slot, data);\n"
- "@@ -753,15 +809,17 @@ static void atmci_start_request(struct a\n"
- " \t\t\t\t| MCI_BLKLEN(data->blksz));\n"
- " \t\tdev_vdbg(&slot->mmc->class_dev, \"BLKR=0x%08x\\n\",\n"
- " \t\t\tMCI_BCNT(data->blocks) | MCI_BLKLEN(data->blksz));\n"
- "+\n"
- "+\t\tiflags |= atmci_prepare_data(host, data);\n"
- " \t}\n"
- " \n"
- "-\tiflags = MCI_CMDRDY;\n"
- "+\tiflags |= MCI_CMDRDY;\n"
- " \tcmd = mrq->cmd;\n"
- " \tcmdflags = atmci_prepare_command(slot->mmc, cmd);\n"
- " \tatmci_start_command(host, cmd, cmdflags);\n"
- " \n"
- " \tif (data)\n"
- "-\t\tiflags |= atmci_submit_data(host, data);\n"
- "+\t\tatmci_submit_data(host);\n"
- " \n"
- " \tif (mrq->stop) {\n"
- " \t\thost->stop_cmdr = atmci_prepare_command(slot->mmc, mrq->stop);\n"
- "@@ -857,6 +915,8 @@ static void atmci_set_ios(struct mmc_hos\n"
- " \t\t\tclk_enable(host->mck);\n"
- " \t\t\tmci_writel(host, CR, MCI_CR_SWRST);\n"
- " \t\t\tmci_writel(host, CR, MCI_CR_MCIEN);\n"
- "+\t\t\tif (atmci_is_mci2())\n"
- "+\t\t\t\tmci_writel(host, CFG, host->cfg_reg);\n"
- " \t\t}\n"
- " \n"
- " \t\t/*\n"
- "@@ -1095,6 +1155,8 @@ static void atmci_detect_change(unsigned\n"
- " \t\t\t\tmci_writel(host, CR, MCI_CR_SWRST);\n"
- " \t\t\t\tmci_writel(host, CR, MCI_CR_MCIEN);\n"
- " \t\t\t\tmci_writel(host, MR, host->mode_reg);\n"
- "+\t\t\t\tif (atmci_is_mci2())\n"
- "+\t\t\t\t\tmci_writel(host, CFG, host->cfg_reg);\n"
- " \n"
- " \t\t\t\thost->data = NULL;\n"
- " \t\t\t\thost->cmd = NULL;\n"
- "@@ -1644,6 +1706,10 @@ static void atmci_configure_dma(struct a\n"
- " \t}\n"
- " \tif (!host->dma.chan)\n"
- " \t\tdev_notice(&host->pdev->dev, \"DMA not available, using PIO\\n\");\n"
- "+\telse\n"
- "+\t\tdev_info(&host->pdev->dev,\n"
- "+\t\t\t\t\t\"Using %s for DMA transfers\\n\",\n"
- "+\t\t\t\t\tdma_chan_name(host->dma.chan));\n"
- " }\n"
- " #else\n"
- " static void atmci_configure_dma(struct atmel_mci *host) {}\n"
- "\n"
- "\n"
- "Best regards,\n"
- Yegor Yefremov
+ I couldn't apply 2.6.30-at91-exp-0032-mmc-atmel-mci-New-MCI2-module-support-in-atmel-mci.patch with quilt at once, so I had to make it manually. Here is applicable version:
 
-8b4ab2df677a16587d0ed4cfabb9ca05040a20af6e48aedf58cb77c58495d1b1
+292e6f287dbf9c2ca8e0b817218910515fc9b217b3bc744e82f10456277a0f58

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.