Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=eb695dbf00d572a770358305dae4de2a0680db8f
Commit:     eb695dbf00d572a770358305dae4de2a0680db8f
Parent:     8cf1a74305688c85fc8d23ab7432a0c447ee6413
Author:     Adrian McMenamin <[EMAIL PROTECTED]>
AuthorDate: Tue Jul 24 13:30:55 2007 +0900
Committer:  Paul Mundt <[EMAIL PROTECTED]>
CommitDate: Tue Jul 24 13:30:55 2007 +0900

    sh: Fix Dreamcast DMA issues.
    
    The current SH DMA API is somewhat broken, not correctly matching
    virtual channel to the correct SH DMAC. This wasn't noticeable when
    using g2 DMA for the sound driver - one channel 0 is as good as any
    other! - but caused the pvr2 driver to fail.
    
    This patch fixes the pvr2 problem and consequently fixes the sound
    driver to ensure it continues to function.
    
    Signed-off by: Adrian McMenamin <[EMAIL PROTECTED]>
    Signed-off-by: Paul Mundt <[EMAIL PROTECTED]>
---
 arch/sh/drivers/dma/dma-api.c |    7 ++++---
 include/asm-sh/dma.h          |    1 +
 sound/sh/aica.h               |    2 +-
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/arch/sh/drivers/dma/dma-api.c b/arch/sh/drivers/dma/dma-api.c
index cf8e119..76ed816 100644
--- a/arch/sh/drivers/dma/dma-api.c
+++ b/arch/sh/drivers/dma/dma-api.c
@@ -31,8 +31,8 @@ struct dma_info *get_dma_info(unsigned int chan)
         * the channel is.
         */
        list_for_each_entry(info, &registered_dmac_list, list) {
-               if ((chan <  info->first_channel_nr) ||
-                   (chan >= info->first_channel_nr + info->nr_channels))
+               if ((chan <  info->first_vchannel_nr) ||
+                   (chan >= info->first_vchannel_nr + info->nr_channels))
                        continue;
 
                return info;
@@ -82,7 +82,7 @@ struct dma_channel *get_dma_channel(unsigned int chan)
 
        for (i = 0; i < info->nr_channels; i++) {
                channel = &info->channels[i];
-               if (channel->chan == chan)
+               if (channel->vchan == chan)
                        return channel;
        }
 
@@ -369,6 +369,7 @@ int register_dmac(struct dma_info *info)
        }
 
        total_channels = get_nr_channels();
+       info->first_vchannel_nr = total_channels;
        for (i = 0; i < info->nr_channels; i++) {
                struct dma_channel *chan = &info->channels[i];
 
diff --git a/include/asm-sh/dma.h b/include/asm-sh/dma.h
index 6034d4a..4c75b70 100644
--- a/include/asm-sh/dma.h
+++ b/include/asm-sh/dma.h
@@ -111,6 +111,7 @@ struct dma_info {
 
        struct list_head list;
        int first_channel_nr;
+       int first_vchannel_nr;
 };
 
 struct dma_chan_caps {
diff --git a/sound/sh/aica.h b/sound/sh/aica.h
index 8c11e3d..d098baa 100644
--- a/sound/sh/aica.h
+++ b/sound/sh/aica.h
@@ -52,7 +52,7 @@
 #define AICA_CHANNEL1_OFFSET 0x21000
 #define CHANNEL_OFFSET 0x10000
 
-#define AICA_DMA_CHANNEL 0
+#define AICA_DMA_CHANNEL 5
 #define AICA_DMA_MODE 5
 
 #define SND_AICA_DRIVER "AICA"
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to