diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-27 22:51:32 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-27 22:51:32 -0400 |
commit | 2a56d2220284b0e4dd8569fa475d7053f1c40a63 (patch) | |
tree | 96f959486a2f31db599e5f97167074bd1ecb3dc6 /drivers/mmc | |
parent | 46f2cc80514e389bacfb642a32a4181fa1f1d20b (diff) | |
parent | 239df0fd5ee25588f8a5ba7f7ee646940cc403f4 (diff) |
Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm
* 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm: (45 commits)
ARM: 6945/1: Add unwinding support for division functions
ARM: kill pmd_off()
ARM: 6944/1: mm: allow ASID 0 to be allocated to tasks
ARM: 6943/1: mm: use TTBR1 instead of reserved context ID
ARM: 6942/1: mm: make TTBR1 always point to swapper_pg_dir on ARMv6/7
ARM: 6941/1: cache: ensure MVA is cacheline aligned in flush_kern_dcache_area
ARM: add sendmmsg syscall
ARM: 6863/1: allow hotplug on msm
ARM: 6832/1: mmci: support for ST-Ericsson db8500v2
ARM: 6830/1: mach-ux500: force PrimeCell revisions
ARM: 6829/1: amba: make hardcoded periphid override hardware
ARM: 6828/1: mach-ux500: delete SSP PrimeCell ID
ARM: 6827/1: mach-netx: delete hardcoded periphid
ARM: 6940/1: fiq: Briefly document driver responsibilities for suspend/resume
ARM: 6938/1: fiq: Refactor {get,set}_fiq_regs() for Thumb-2
ARM: 6914/1: sparsemem: fix highmem detection when using SPARSEMEM
ARM: 6913/1: sparsemem: allow pfn_valid to be overridden when using SPARSEMEM
at91: drop at572d940hf support
at91rm9200: introduce at91rm9200_set_type to specficy cpu package
at91: drop boot_params and PLAT_PHYS_OFFSET
...
Diffstat (limited to 'drivers/mmc')
-rw-r--r-- | drivers/mmc/host/mmci.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c index 4941e06fe2e1..5da5bea0f9f0 100644 --- a/drivers/mmc/host/mmci.c +++ b/drivers/mmc/host/mmci.c | |||
@@ -51,6 +51,7 @@ static unsigned int fmax = 515633; | |||
51 | * is asserted (likewise for RX) | 51 | * is asserted (likewise for RX) |
52 | * @sdio: variant supports SDIO | 52 | * @sdio: variant supports SDIO |
53 | * @st_clkdiv: true if using a ST-specific clock divider algorithm | 53 | * @st_clkdiv: true if using a ST-specific clock divider algorithm |
54 | * @blksz_datactrl16: true if Block size is at b16..b30 position in datactrl register | ||
54 | */ | 55 | */ |
55 | struct variant_data { | 56 | struct variant_data { |
56 | unsigned int clkreg; | 57 | unsigned int clkreg; |
@@ -60,6 +61,7 @@ struct variant_data { | |||
60 | unsigned int fifohalfsize; | 61 | unsigned int fifohalfsize; |
61 | bool sdio; | 62 | bool sdio; |
62 | bool st_clkdiv; | 63 | bool st_clkdiv; |
64 | bool blksz_datactrl16; | ||
63 | }; | 65 | }; |
64 | 66 | ||
65 | static struct variant_data variant_arm = { | 67 | static struct variant_data variant_arm = { |
@@ -92,6 +94,17 @@ static struct variant_data variant_ux500 = { | |||
92 | .st_clkdiv = true, | 94 | .st_clkdiv = true, |
93 | }; | 95 | }; |
94 | 96 | ||
97 | static struct variant_data variant_ux500v2 = { | ||
98 | .fifosize = 30 * 4, | ||
99 | .fifohalfsize = 8 * 4, | ||
100 | .clkreg = MCI_CLK_ENABLE, | ||
101 | .clkreg_enable = MCI_ST_UX500_HWFCEN, | ||
102 | .datalength_bits = 24, | ||
103 | .sdio = true, | ||
104 | .st_clkdiv = true, | ||
105 | .blksz_datactrl16 = true, | ||
106 | }; | ||
107 | |||
95 | /* | 108 | /* |
96 | * This must be called with host->lock held | 109 | * This must be called with host->lock held |
97 | */ | 110 | */ |
@@ -465,7 +478,10 @@ static void mmci_start_data(struct mmci_host *host, struct mmc_data *data) | |||
465 | blksz_bits = ffs(data->blksz) - 1; | 478 | blksz_bits = ffs(data->blksz) - 1; |
466 | BUG_ON(1 << blksz_bits != data->blksz); | 479 | BUG_ON(1 << blksz_bits != data->blksz); |
467 | 480 | ||
468 | datactrl = MCI_DPSM_ENABLE | blksz_bits << 4; | 481 | if (variant->blksz_datactrl16) |
482 | datactrl = MCI_DPSM_ENABLE | (data->blksz << 16); | ||
483 | else | ||
484 | datactrl = MCI_DPSM_ENABLE | blksz_bits << 4; | ||
469 | 485 | ||
470 | if (data->flags & MMC_DATA_READ) | 486 | if (data->flags & MMC_DATA_READ) |
471 | datactrl |= MCI_DPSM_DIRECTION; | 487 | datactrl |= MCI_DPSM_DIRECTION; |
@@ -1311,9 +1327,14 @@ static struct amba_id mmci_ids[] = { | |||
1311 | }, | 1327 | }, |
1312 | { | 1328 | { |
1313 | .id = 0x00480180, | 1329 | .id = 0x00480180, |
1314 | .mask = 0x00ffffff, | 1330 | .mask = 0xf0ffffff, |
1315 | .data = &variant_ux500, | 1331 | .data = &variant_ux500, |
1316 | }, | 1332 | }, |
1333 | { | ||
1334 | .id = 0x10480180, | ||
1335 | .mask = 0xf0ffffff, | ||
1336 | .data = &variant_ux500v2, | ||
1337 | }, | ||
1317 | { 0, 0 }, | 1338 | { 0, 0 }, |
1318 | }; | 1339 | }; |
1319 | 1340 | ||