r3923 - developers/sameo/patches/ar6k-atheros-2.0/2.6.24
sameo at sita.openmoko.org
sameo at sita.openmoko.org
Tue Jan 22 17:31:49 CET 2008
Author: sameo
Date: 2008-01-22 17:31:48 +0100 (Tue, 22 Jan 2008)
New Revision: 3923
Modified:
developers/sameo/patches/ar6k-atheros-2.0/2.6.24/atheros_2_0_hcd.patch
Log:
ar6k-atheros-2.0: Forgot the HCD patch.
Modified: developers/sameo/patches/ar6k-atheros-2.0/2.6.24/atheros_2_0_hcd.patch
===================================================================
--- developers/sameo/patches/ar6k-atheros-2.0/2.6.24/atheros_2_0_hcd.patch 2008-01-22 16:30:52 UTC (rev 3922)
+++ developers/sameo/patches/ar6k-atheros-2.0/2.6.24/atheros_2_0_hcd.patch 2008-01-22 16:31:48 UTC (rev 3923)
@@ -2,14 +2,14 @@
drivers/sdio/hcd/Kconfig | 14
drivers/sdio/hcd/Makefile | 1
drivers/sdio/hcd/s3c24xx/Makefile | 2
- drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.c | 1491 +++++++++++++++++++++++++++++++++
- drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.h | 66 +
- 5 files changed, 1574 insertions(+)
+ drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.c | 1510 +++++++++++++++++++++++++++++++++
+ drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.h | 67 +
+ 5 files changed, 1594 insertions(+)
-Index: linux-2.6-openmoko/drivers/sdio/hcd/Kconfig
+Index: linux-2.6.24-rc8-omoko/drivers/sdio/hcd/Kconfig
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6-openmoko/drivers/sdio/hcd/Kconfig 2008-01-14 13:03:12.000000000 +0100
++++ linux-2.6.24-rc8-omoko/drivers/sdio/hcd/Kconfig 2008-01-22 17:29:21.000000000 +0100
@@ -0,0 +1,14 @@
+config SDIO_S3C24XX
+ tristate "Samsung s3c24xx host controller"
@@ -25,24 +25,24 @@
+ help
+ good luck.
+
-Index: linux-2.6-openmoko/drivers/sdio/hcd/Makefile
+Index: linux-2.6.24-rc8-omoko/drivers/sdio/hcd/Makefile
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6-openmoko/drivers/sdio/hcd/Makefile 2008-01-14 13:03:12.000000000 +0100
++++ linux-2.6.24-rc8-omoko/drivers/sdio/hcd/Makefile 2008-01-22 17:29:21.000000000 +0100
@@ -0,0 +1 @@
+obj-$(CONFIG_PLAT_S3C24XX) += s3c24xx/
-Index: linux-2.6-openmoko/drivers/sdio/hcd/s3c24xx/Makefile
+Index: linux-2.6.24-rc8-omoko/drivers/sdio/hcd/s3c24xx/Makefile
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6-openmoko/drivers/sdio/hcd/s3c24xx/Makefile 2008-01-14 13:03:12.000000000 +0100
++++ linux-2.6.24-rc8-omoko/drivers/sdio/hcd/s3c24xx/Makefile 2008-01-22 17:29:21.000000000 +0100
@@ -0,0 +1,2 @@
+obj-$(CONFIG_PLAT_S3C24XX) += sdio_s3c24xx_hcd.o
+sdio_s3c24xx_hcd-objs := s3c24xx_hcd.o
-Index: linux-2.6-openmoko/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.c
+Index: linux-2.6.24-rc8-omoko/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6-openmoko/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.c 2008-01-14 13:03:12.000000000 +0100
-@@ -0,0 +1,1491 @@
++++ linux-2.6.24-rc8-omoko/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.c 2008-01-22 17:29:21.000000000 +0100
+@@ -0,0 +1,1510 @@
+/*
+ * s3c24xx_hcd.c - Samsung S3C MCI driver, Atheros SDIO API compatible.
+ *
@@ -608,14 +608,10 @@
+ PSDREQUEST req;
+ struct s3c24xx_hcd_context * context =
+ container_of(work, struct s3c24xx_hcd_context, io_work);
-+ unsigned long flags;
+
-+// spin_lock_irqsave(&context->lock, flags);
-+
+ req = GET_CURRENT_REQUEST(&context->hcd);
+ if (req == NULL) {
+ DBG_PRINT(SDDBG_ERROR, ("%s(): No current request\n", __FUNCTION__));
-+// enable_irq(context->io_irq);
+ return;
+ }
+
@@ -660,12 +656,12 @@
+ if (context->complete == S3C24XX_HCD_DATA_READ ||
+ context->complete == S3C24XX_HCD_DATA_WRITE) {
+ if (context->dma_en) {
++ dma_sync_single(NULL, context->io_buffer_dma,
++ req->BlockCount * req->BlockLen, DMA_BIDIRECTIONAL);
+
+ s3c2410_dma_ctrl(context->dma_channel, S3C2410_DMAOP_START);
+
-+// spin_unlock_irqrestore(&context->lock, flags);
+ wait_for_completion(&context->dma_complete);
-+// spin_lock_irqsave(&context->lock, flags);
+
+ s3c24xx_hcd_dma_complete(context);
+ } else {
@@ -675,16 +671,12 @@
+ }
+
+ out:
-+// spin_unlock_irqrestore(&context->lock, flags);
-+
+ s3c24xx_hcd_clear_sta(context);
+ s3c24xx_hcd_clear_imask(context);
+
+ writel(0, context->base + S3C2410_SDICMDARG);
+ writel(0, context->base + S3C2410_SDICMDCON);
+
-+// spin_unlock_irqrestore(&context->lock, flags);
-+
+ SDIO_HandleHcdEvent(&context->hcd, EVENT_HCD_TRANSFER_DONE);
+}
+
@@ -792,9 +784,17 @@
+ imask &= ~S3C2410_SDIIMSK_SDIOIRQ;
+ writel(imask, context->base + S3C2440_SDIIMSK);
+ SDIO_HandleHcdEvent(&context->hcd, EVENT_HCD_SDIO_IRQ_PENDING);
++
++ dsta = readl(context->base + S3C2410_SDIDSTA);
++ if (dsta & S3C2410_SDIDSTA_SDIOIRQDETECT) {
++ writel(S3C2410_SDIDSTA_SDIOIRQDETECT, context->base + S3C2410_SDIDSTA);
++ SDIO_HandleHcdEvent(&context->hcd, EVENT_HCD_SDIO_IRQ_PENDING);
++ }
++
++
++ } else {
++ context->int_pending = 1;
+ }
-+
-+ writel(S3C2410_SDIDSTA_SDIOIRQDETECT, context->base + S3C2410_SDIDSTA);
+ }
+
+ req = GET_CURRENT_REQUEST(&context->hcd);
@@ -832,8 +832,8 @@
+ }
+
+ if (cmdsta & S3C2410_SDICMDSTAT_RSPFIN ||
-+ (IS_SDREQ_WRITE_DATA(req->Flags) && (fsta & S3C2410_SDIFSTA_TFDET)) ||
-+ (!IS_SDREQ_WRITE_DATA(req->Flags) && (fsta & S3C2410_SDIFSTA_RFDET))) {
++ (IS_SDREQ_WRITE_DATA(req->Flags) && (fsta & S3C2410_SDIFSTA_TFDET)) ||
++ (!IS_SDREQ_WRITE_DATA(req->Flags) && (fsta & S3C2410_SDIFSTA_RFDET))) {
+
+ writel(S3C2410_SDICMDSTAT_RSPFIN, context->base + S3C2410_SDICMDSTAT);
+
@@ -884,6 +884,16 @@
+ writel(S3C2410_SDIDSTA_SBITERR, context->base + S3C2410_SDIDSTA);
+ }
+
++#if 0
++ dsta = readl(context->base + S3C2410_SDIDSTA);
++ if (dsta & S3C2410_SDIDSTA_SDIOIRQDETECT) {
++ printk("IRQ pending\n");
++ } else {
++ printk("No IRQ pending\n");
++ }
++
++#endif
++
+ spin_unlock_irqrestore(&context->lock, flags);
+ return IRQ_HANDLED;
+}
@@ -949,6 +959,11 @@
+ DBG_PRINT(SDDBG_TRACE, ("config SDIO_REARM_INT\n"));
+ spin_lock_irqsave(&context->lock,flags);
+
++ if (context->int_pending) {
++ context->int_pending = 0;
++ SDIO_HandleHcdEvent(&context->hcd, EVENT_HCD_SDIO_IRQ_PENDING);
++ }
++
+ context->int_sdio = 1;
+ imsk = readl(context->base + S3C2440_SDIIMSK);
+ imsk |= S3C2410_SDIIMSK_SDIOIRQ;
@@ -996,8 +1011,6 @@
+ struct s3c24xx_hcd_context * context =
+ (struct s3c24xx_hcd_context *)hcd->pContext;
+
-+// dump_request(context);
-+
+ req = GET_CURRENT_REQUEST(hcd);
+ DBG_ASSERT(req != NULL);
+
@@ -1013,7 +1026,6 @@
+
+ /* Enabling irqs */
+ imask = S3C2410_SDIIMSK_READWAIT;
-+// imask = S3C2410_SDIIMSK_READWAIT | S3C2410_SDIIMSK_SDIOIRQ;
+
+ cmdcon = readl(context->base + S3C2410_SDICMDCON);
+
@@ -1067,11 +1079,14 @@
+
+ req->DataRemaining = req->BlockCount * req->BlockLen;
+
++
++
+ /* Set data size, and start the transfer */
++ dcon |= S3C2410_SDIDCON_IRQPERIOD;
+ if (!(req->DataRemaining % 4)) {
+ context->data_size = 4;
+ dcon |= S3C2440_SDIDCON_DS_WORD;
-+ dcon |= (1 << 24);
++// dcon |= (1 << 24);
+ } else if (!(req->DataRemaining % 2)) {
+ context->data_size = 2;
+ dcon |= S3C2440_SDIDCON_DS_HALFWORD;
@@ -1081,12 +1096,15 @@
+ }
+
+#ifdef CONFIG_SDIO_S3C24XX_DMA
-+ context->dma_en = 1;
-+#else
-+ context->dma_en = 0;
-+ context->data_size = 1;
-+ dcon |= S3C2440_SDIDCON_DS_BYTE;
++ if (req->DataRemaining > 16) {
++ context->dma_en = 1;
++ } else
+#endif
++ {
++ context->dma_en = 0;
++ context->data_size = 1;
++ dcon |= S3C2440_SDIDCON_DS_BYTE;
++ }
+
+ if (context->dma_en) {
+ dcon |= S3C2410_SDIDCON_DMAEN;
@@ -1369,6 +1387,7 @@
+ hcd_context.dma_en = 0;
+
+ hcd_context.int_sdio = 0;
++ hcd_context.int_pending = 0;
+
+ spin_lock_init(&hcd_context.lock);
+
@@ -1534,11 +1553,11 @@
+
+module_init(s3c24xx_hcd_init);
+module_exit(s3c24xx_hcd_exit);
-Index: linux-2.6-openmoko/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.h
+Index: linux-2.6.24-rc8-omoko/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6-openmoko/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.h 2008-01-14 13:03:12.000000000 +0100
-@@ -0,0 +1,66 @@
++++ linux-2.6.24-rc8-omoko/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.h 2008-01-22 17:29:21.000000000 +0100
+@@ -0,0 +1,67 @@
+#ifndef __SDIO_S3C24XX_HCD_H___
+#define __SDIO_S3C24XX_HCD_H___
+
@@ -1587,6 +1606,7 @@
+
+ UINT32 int_mask;
+ UINT32 int_sdio; /* Do we have SDIO interrupt on ? */
++ UINT32 int_pending;
+
+ UINT32 complete;
+
More information about the commitlog
mailing list