- patches.arch/x86_mce_intel_decode_physical_address.patch:
[linux-flexiantxendom0-3.2.10.git] / drivers / mtd / nand / omap2.c
index 7545568..ee87325 100644 (file)
@@ -292,11 +292,14 @@ static void omap_read_buf_pref(struct mtd_info *mtd, u_char *buf, int len)
        u32 *p = (u32 *)buf;
 
        /* take care of subpage reads */
-       for (; len % 4 != 0; ) {
-               *buf++ = __raw_readb(info->nand.IO_ADDR_R);
-               len--;
+       if (len % 4) {
+               if (info->nand.options & NAND_BUSWIDTH_16)
+                       omap_read_buf16(mtd, buf, len % 4);
+               else
+                       omap_read_buf8(mtd, buf, len % 4);
+               p = (u32 *) (buf + len % 4);
+               len -= len % 4;
        }
-       p = (u32 *) buf;
 
        /* configure and start prefetch transfer */
        ret = gpmc_prefetch_enable(info->gpmc_cs, 0x0, len, 0x0);
@@ -502,7 +505,7 @@ static void omap_write_buf_dma_pref(struct mtd_info *mtd,
                omap_write_buf_pref(mtd, buf, len);
        else
                /* start transfer in DMA mode */
-               omap_nand_dma_transfer(mtd, buf, len, 0x1);
+               omap_nand_dma_transfer(mtd, (u_char *) buf, len, 0x1);
 }
 
 /**
@@ -1028,7 +1031,8 @@ out_free_info:
 static int omap_nand_remove(struct platform_device *pdev)
 {
        struct mtd_info *mtd = platform_get_drvdata(pdev);
-       struct omap_nand_info *info = mtd->priv;
+       struct omap_nand_info *info = container_of(mtd, struct omap_nand_info,
+                                                       mtd);
 
        platform_set_drvdata(pdev, NULL);
        if (use_dma)