Skip to contentSkip to conversation

mmc-omap: Add support for 16-bit and 32-bit registers

PATCH Superseded Cory Maccarrone 2 participants 3 messages Nov 22, 2009

Subsystems (2)

v2 of 5 Superseded Latest is v5 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 mmc-omap: Add support for 16-bit and 32-bit registers

The omap850 and omap730 use 16-bit registers instead of 32-bit, requiring a modification of the register addresses in the mmc-omap driver.

---
 drivers/mmc/host/omap.c |   56 ++++++++++++++++++++++++----------------------
 1 files changed, 29 insertions(+), 27 deletions(-)
drivers/mmc/host/omap.c +29 -27
index 5f970e2..892400b 100644
@@ -2,7 +2,7 @@
  *  linux/drivers/mmc/host/omap.c
  *
  *  Copyright (C) 2004 Nokia Corporation
- *  Written by Tuukka Tikkanen and Juha Yrjölä<[email protected]>
+ *  Written by Tuukka Tikkanen and Juha Yrjᅵlᅵ<[email protected]>
  *  Misc hacks here and there by Tony Lindgren <[email protected]>
  *  Other hacks (DMA, SD, etc) by David Brownell
  *
@@ -37,31 +37,33 @@
 #include <plat/mux.h>
 #include <plat/fpga.h>
 
-#define	OMAP_MMC_REG_CMD	0x00
-#define	OMAP_MMC_REG_ARGL	0x04
-#define	OMAP_MMC_REG_ARGH	0x08
-#define	OMAP_MMC_REG_CON	0x0c
-#define	OMAP_MMC_REG_STAT	0x10
-#define	OMAP_MMC_REG_IE		0x14
-#define	OMAP_MMC_REG_CTO	0x18
-#define	OMAP_MMC_REG_DTO	0x1c
-#define	OMAP_MMC_REG_DATA	0x20
-#define	OMAP_MMC_REG_BLEN	0x24
-#define	OMAP_MMC_REG_NBLK	0x28
-#define	OMAP_MMC_REG_BUF	0x2c
-#define OMAP_MMC_REG_SDIO	0x34
-#define	OMAP_MMC_REG_REV	0x3c
-#define	OMAP_MMC_REG_RSP0	0x40
-#define	OMAP_MMC_REG_RSP1	0x44
-#define	OMAP_MMC_REG_RSP2	0x48
-#define	OMAP_MMC_REG_RSP3	0x4c
-#define	OMAP_MMC_REG_RSP4	0x50
-#define	OMAP_MMC_REG_RSP5	0x54
-#define	OMAP_MMC_REG_RSP6	0x58
-#define	OMAP_MMC_REG_RSP7	0x5c
-#define	OMAP_MMC_REG_IOSR	0x60
-#define	OMAP_MMC_REG_SYSC	0x64
-#define	OMAP_MMC_REG_SYSS	0x68
+#define	OMAP_MMC_REGISTER_SIZE		(cpu_is_omap7xx() ? 2 : 4)
+
+#define	OMAP_MMC_REG_CMD		(0x00*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_ARGL		(0x01*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_ARGH		(0x02*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_CON		(0x03*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_STAT		(0x04*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_IE			(0x05*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_CTO		(0x06*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_DTO		(0x07*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_DATA		(0x08*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_BLEN		(0x09*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_NBLK		(0x0a*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_BUF		(0x0b*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_SDIO		(0x0d*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_REV		(0x0f*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_RSP0		(0x10*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_RSP1		(0x11*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_RSP2		(0x12*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_RSP3		(0x13*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_RSP4		(0x14*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_RSP5		(0x15*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_RSP6		(0x16*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_RSP7		(0x17*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_IOSR		(0x18*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_SYSC		(0x19*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_SYSS		(0x1a*OMAP_MMC_REGISTER_SIZE)
 
 #define	OMAP_MMC_STAT_CARD_ERR		(1 << 14)
 #define	OMAP_MMC_STAT_CARD_IRQ		(1 << 13)
@@ -1619,4 +1621,4 @@ module_exit(mmc_omap_exit);
 MODULE_DESCRIPTION("OMAP Multimedia Card driver");
 MODULE_LICENSE("GPL");
 MODULE_ALIAS("platform:" DRIVER_NAME);
-MODULE_AUTHOR("Juha Yrjölä");
+MODULE_AUTHOR("Juha Yrjᅵlᅵ");
Signature · 1 line
1.6.3.3
#1 lore raw

Hi,

Quoted 43 lines · Cory Maccarrone

The omap850 and omap730 use 16-bit registers instead of 32-bit, requiring a modification of the register addresses in the mmc-omap driver.

---
 drivers/mmc/host/omap.c |   56 ++++++++++++++++++++++++----------------------
 1 files changed, 29 insertions(+), 27 deletions(-)
drivers/mmc/host/omap.c +1 -18
index 5f970e2..892400b 100644
@@ -2,7 +2,7 @@
  *  linux/drivers/mmc/host/omap.c
  *
  *  Copyright (C) 2004 Nokia Corporation
- *  Written by Tuukka Tikkanen and Juha Yrjölä<[email protected]>
+ *  Written by Tuukka Tikkanen and Juha Yrjᅵlᅵ<[email protected]>
  *  Misc hacks here and there by Tony Lindgren <[email protected]>
  *  Other hacks (DMA, SD, etc) by David Brownell
  *
@@ -37,31 +37,33 @@
 #include <plat/mux.h>
 #include <plat/fpga.h>
 
-#define	OMAP_MMC_REG_CMD	0x00
-#define	OMAP_MMC_REG_ARGL	0x04
-#define	OMAP_MMC_REG_ARGH	0x08
-#define	OMAP_MMC_REG_CON	0x0c
-#define	OMAP_MMC_REG_STAT	0x10
-#define	OMAP_MMC_REG_IE		0x14
-#define	OMAP_MMC_REG_CTO	0x18
-#define	OMAP_MMC_REG_DTO	0x1c
-#define	OMAP_MMC_REG_DATA	0x20
-#define	OMAP_MMC_REG_BLEN	0x24
-#define	OMAP_MMC_REG_NBLK	0x28
-#define	OMAP_MMC_REG_BUF	0x2c
-#define OMAP_MMC_REG_SDIO	0x34
-#define	OMAP_MMC_REG_REV	0x3c
-#define	OMAP_MMC_REG_RSP0	0x40
-#define	OMAP_MMC_REG_RSP1	0x44
-#define	OMAP_MMC_REG_RSP2	0x48

drivers/mmc/host/omap.c line 41

Quoted 10 lines
drivers/mmc/host/omap.c +2 -8
-#define	OMAP_MMC_REG_RSP3	0x4c
-#define	OMAP_MMC_REG_RSP4	0x50
-#define	OMAP_MMC_REG_RSP5	0x54
-#define	OMAP_MMC_REG_RSP6	0x58
-#define	OMAP_MMC_REG_RSP7	0x5c
-#define	OMAP_MMC_REG_IOSR	0x60
-#define	OMAP_MMC_REG_SYSC	0x64
-#define	OMAP_MMC_REG_SYSS	0x68
+#define	OMAP_MMC_REGISTER_SIZE		(cpu_is_omap7xx() ? 2 : 4)
+

You need to set the register shift dynamically during init as cpu_is_omap7xx is not static if multiple omaps are compiled in.

Then maybe set functions for omap_mmc_read/write that shift the registers?

Quoted 29 lines
drivers/mmc/host/omap.c +25 -0
+#define	OMAP_MMC_REG_CMD		(0x00*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_ARGL		(0x01*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_ARGH		(0x02*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_CON		(0x03*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_STAT		(0x04*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_IE			(0x05*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_CTO		(0x06*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_DTO		(0x07*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_DATA		(0x08*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_BLEN		(0x09*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_NBLK		(0x0a*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_BUF		(0x0b*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_SDIO		(0x0d*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_REV		(0x0f*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_RSP0		(0x10*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_RSP1		(0x11*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_RSP2		(0x12*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_RSP3		(0x13*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_RSP4		(0x14*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_RSP5		(0x15*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_RSP6		(0x16*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_RSP7		(0x17*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_IOSR		(0x18*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_SYSC		(0x19*OMAP_MMC_REGISTER_SIZE)
+#define	OMAP_MMC_REG_SYSS		(0x1a*OMAP_MMC_REGISTER_SIZE)
 
 #define	OMAP_MMC_STAT_CARD_ERR		(1 << 14)
 #define	OMAP_MMC_STAT_CARD_IRQ		(1 << 13)

drivers/mmc/host/omap.c module_exit(mmc_omap_exit); · line 1624

Quoted 5 lines
drivers/mmc/host/omap.c +1 -1
@@ -1619,4 +1621,4 @@ module_exit(mmc_omap_exit);
 MODULE_DESCRIPTION("OMAP Multimedia Card driver");
 MODULE_LICENSE("GPL");
 MODULE_ALIAS("platform:" DRIVER_NAME);
-MODULE_AUTHOR("Juha Yrjölä");
+MODULE_AUTHOR("Juha Yrjᅵlᅵ");

This change should be left out.

Regards,

Tony
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#2 lore raw
Quoted 7 lines · Tony Lindgren

Hi,

You need to set the register shift dynamically during init as cpu_is_omap7xx is not static if multiple omaps are compiled in.

Then maybe set functions for omap_mmc_read/write that shift the registers?

Ah, right, that got by me. I had something like that in the original patch -- I'll put it back in.

Quoted 3 lines

This change should be left out.

Alright.

I'll make those changes and resubmit.

- Cory