diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-21 17:38:35 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-21 17:38:35 -0400 |
commit | da7806f9b0579a1150f01ade3b562e543ddcbf2c (patch) | |
tree | 185b67eb27abfa5ea65f0365b1f95b7f9d3abd9d /arch/arm/mach-msm | |
parent | d515e86e639890b33a09390d062b0831664f04a2 (diff) | |
parent | 1cd2296909e77702c68021ede9d87a1d967a6a99 (diff) |
Merge branch 'msm-mmc_sdcc' of git://codeaurora.org/quic/kernel/dwalker/linux-msm
* 'msm-mmc_sdcc' of git://codeaurora.org/quic/kernel/dwalker/linux-msm:
drivers: mmc: msm_sdcc: Add EMBEDDED_SDIO support
mmc: msm_sdcc: Fix issue where clocks could be disabled mid transaction
mmc: msm_sdcc: Fix the dma exec function to use the proper delays
mmc: msm_sdcc: Don't set host->curr.mrq until after we're sure the busclk timer won't fire
mmc: msm_sdcc: Enable busclk idle timer for power savings
mmc: msm_sdcc: Don't disable interrupts while suspending
mmc: msm_sdcc: Fix issue where we might not end a sucessfull request
mmc: msm_sdcc: Featurize busclock power save and disable it by default
mmc: msm_sdcc: Fix bug where busclk expiry timer was not properly disabled
mmc: msm_sdcc: Reduce command timeouts and improve reliability.
mmc: msm_sdcc: Schedule clock disable after probe
mmc: msm_sdcc: Wrap readl/writel calls with appropriate clk delays
mmc: msm_sdcc: Driver clocking/irq improvements
msm: Add 'execute' datamover callback
mmc: msm_sdcc: Snoop SDIO_CCCR_ABORT register
mmc: msm_sdcc: Clean up clock management and add a 10us delay after enabling clocks
Diffstat (limited to 'arch/arm/mach-msm')
-rw-r--r-- | arch/arm/mach-msm/dma.c | 5 | ||||
-rw-r--r-- | arch/arm/mach-msm/include/mach/dma.h | 2 |
2 files changed, 7 insertions, 0 deletions
diff --git a/arch/arm/mach-msm/dma.c b/arch/arm/mach-msm/dma.c index 3d725ae518e4..d029d1f5f9e2 100644 --- a/arch/arm/mach-msm/dma.c +++ b/arch/arm/mach-msm/dma.c | |||
@@ -69,6 +69,8 @@ void msm_dmov_enqueue_cmd(unsigned id, struct msm_dmov_cmd *cmd) | |||
69 | writel(DMOV_CONFIG_IRQ_EN, DMOV_CONFIG(id)); | 69 | writel(DMOV_CONFIG_IRQ_EN, DMOV_CONFIG(id)); |
70 | } | 70 | } |
71 | #endif | 71 | #endif |
72 | if (cmd->execute_func) | ||
73 | cmd->execute_func(cmd); | ||
72 | PRINT_IO("msm_dmov_enqueue_cmd(%d), start command, status %x\n", id, status); | 74 | PRINT_IO("msm_dmov_enqueue_cmd(%d), start command, status %x\n", id, status); |
73 | list_add_tail(&cmd->list, &active_commands[id]); | 75 | list_add_tail(&cmd->list, &active_commands[id]); |
74 | if (!channel_active) | 76 | if (!channel_active) |
@@ -116,6 +118,7 @@ int msm_dmov_exec_cmd(unsigned id, unsigned int cmdptr) | |||
116 | 118 | ||
117 | cmd.dmov_cmd.cmdptr = cmdptr; | 119 | cmd.dmov_cmd.cmdptr = cmdptr; |
118 | cmd.dmov_cmd.complete_func = dmov_exec_cmdptr_complete_func; | 120 | cmd.dmov_cmd.complete_func = dmov_exec_cmdptr_complete_func; |
121 | cmd.dmov_cmd.execute_func = NULL; | ||
119 | cmd.id = id; | 122 | cmd.id = id; |
120 | init_completion(&cmd.complete); | 123 | init_completion(&cmd.complete); |
121 | 124 | ||
@@ -221,6 +224,8 @@ static irqreturn_t msm_datamover_irq_handler(int irq, void *dev_id) | |||
221 | cmd = list_entry(ready_commands[id].next, typeof(*cmd), list); | 224 | cmd = list_entry(ready_commands[id].next, typeof(*cmd), list); |
222 | list_del(&cmd->list); | 225 | list_del(&cmd->list); |
223 | list_add_tail(&cmd->list, &active_commands[id]); | 226 | list_add_tail(&cmd->list, &active_commands[id]); |
227 | if (cmd->execute_func) | ||
228 | cmd->execute_func(cmd); | ||
224 | PRINT_FLOW("msm_datamover_irq_handler id %d, start command\n", id); | 229 | PRINT_FLOW("msm_datamover_irq_handler id %d, start command\n", id); |
225 | writel(cmd->cmdptr, DMOV_CMD_PTR(id)); | 230 | writel(cmd->cmdptr, DMOV_CMD_PTR(id)); |
226 | } | 231 | } |
diff --git a/arch/arm/mach-msm/include/mach/dma.h b/arch/arm/mach-msm/include/mach/dma.h index 04c51cc04f31..00f9bbfadbe6 100644 --- a/arch/arm/mach-msm/include/mach/dma.h +++ b/arch/arm/mach-msm/include/mach/dma.h | |||
@@ -28,6 +28,8 @@ struct msm_dmov_cmd { | |||
28 | void (*complete_func)(struct msm_dmov_cmd *cmd, | 28 | void (*complete_func)(struct msm_dmov_cmd *cmd, |
29 | unsigned int result, | 29 | unsigned int result, |
30 | struct msm_dmov_errdata *err); | 30 | struct msm_dmov_errdata *err); |
31 | void (*execute_func)(struct msm_dmov_cmd *cmd); | ||
32 | void *data; | ||
31 | }; | 33 | }; |
32 | 34 | ||
33 | void msm_dmov_enqueue_cmd(unsigned id, struct msm_dmov_cmd *cmd); | 35 | void msm_dmov_enqueue_cmd(unsigned id, struct msm_dmov_cmd *cmd); |