[MTD] [NAND] Blackfin NFC Driver: do not clobber DMAC1_PERIMUX
authorMike Frysinger <vapier.adi@gmail.com>
Wed, 4 Mar 2009 20:01:29 +0000 (12:01 -0800)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Fri, 20 Mar 2009 12:16:24 +0000 (12:16 +0000)
Only set DMAC1_PERIMUX once we have requested and been granted the dma
channel to prevent breaking other peripherals in the error case

Signed-off-by: Mike Frysinger <vapier.adi@gmail.com>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
drivers/mtd/nand/bf5xx_nand.c

index 9af2a2cc1153adf36c51da04ea6b5ce7f765753c..5c6056e024261175f23fc98b686d4daba6305946 100644 (file)
@@ -552,7 +552,6 @@ static void bf5xx_nand_dma_write_buf(struct mtd_info *mtd,
 static int bf5xx_nand_dma_init(struct bf5xx_nand_info *info)
 {
        int ret;
-       unsigned short val;
 
        /* Do not use dma */
        if (!hardware_ecc)
@@ -560,13 +559,6 @@ static int bf5xx_nand_dma_init(struct bf5xx_nand_info *info)
 
        init_completion(&info->dma_completion);
 
-#ifdef CONFIG_BF54x
-       /* Setup DMAC1 channel mux for NFC which shared with SDH */
-       val = bfin_read_DMAC1_PERIMUX();
-       val &= 0xFFFE;
-       bfin_write_DMAC1_PERIMUX(val);
-       SSYNC();
-#endif
        /* Request NFC DMA channel */
        ret = request_dma(CH_NFC, "BF5XX NFC driver");
        if (ret < 0) {
@@ -574,6 +566,12 @@ static int bf5xx_nand_dma_init(struct bf5xx_nand_info *info)
                return ret;
        }
 
+#ifdef CONFIG_BF54x
+       /* Setup DMAC1 channel mux for NFC which shared with SDH */
+       bfin_write_DMAC1_PERIMUX(bfin_read_DMAC1_PERIMUX() & ~1);
+       SSYNC();
+#endif
+
        set_dma_callback(CH_NFC, (void *) bf5xx_nand_dma_irq, (void *) info);
 
        /* Turn off the DMA channel first */