Merge branch 'next' of git://git.denx.de/u-boot-video
[oweals/u-boot.git] / drivers / mtd / nand / arasan_nfc.c
index caa7982d7e081c7a23823b53929fa7ab01cd159d..a8f795d957ffa03f2ab6e29defb5c1915afb684f 100644 (file)
@@ -9,7 +9,7 @@
 #include <common.h>
 #include <malloc.h>
 #include <asm/io.h>
-#include <asm/errno.h>
+#include <linux/errno.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/nand.h>
 #include <linux/mtd/partitions.h>
@@ -230,7 +230,7 @@ static void arasan_nand_enable_ecc(void)
 static u8 arasan_nand_get_addrcycle(struct mtd_info *mtd)
 {
        u8 addrcycles;
-       struct nand_chip *chip = mtd->priv;
+       struct nand_chip *chip = mtd_to_nand(mtd);
 
        switch (curr_cmd->addr_cycles) {
        case NAND_ADDR_CYCL_NONE:
@@ -264,7 +264,7 @@ static u8 arasan_nand_get_addrcycle(struct mtd_info *mtd)
 
 static int arasan_nand_read_page(struct mtd_info *mtd, u8 *buf, u32 size)
 {
-       struct nand_chip *chip = mtd->priv;
+       struct nand_chip *chip = mtd_to_nand(mtd);
        u32 reg_val, i, pktsize, pktnum;
        u32 *bufptr = (u32 *)buf;
        u32 timeout;
@@ -433,7 +433,8 @@ static void arasan_nand_fill_tx(const u8 *buf, int len)
 }
 
 static int arasan_nand_write_page_hwecc(struct mtd_info *mtd,
-               struct nand_chip *chip, const u8 *buf, int oob_required)
+               struct nand_chip *chip, const u8 *buf, int oob_required,
+               int page)
 {
        u32 reg_val, i, pktsize, pktnum;
        const u32 *bufptr = (const u32 *)buf;
@@ -441,7 +442,7 @@ static int arasan_nand_write_page_hwecc(struct mtd_info *mtd,
        u32 size = mtd->writesize;
        u32 rdcount = 0;
        u8 column_addr_cycles;
-       struct arasan_nand_info *nand = chip->priv;
+       struct arasan_nand_info *nand = nand_get_controller_data(chip);
 
        if (chip->ecc_step_ds >= ARASAN_NAND_PKTSIZE_1K)
                pktsize = ARASAN_NAND_PKTSIZE_1K;
@@ -852,6 +853,8 @@ static int arasan_nand_send_rdcmd(struct arasan_nand_command_format *curr_cmd,
                reg_val |= (page_val << ARASAN_NAND_CMD_PG_SIZE_SHIFT);
        }
 
+       reg_val &= ~ARASAN_NAND_CMD_ECC_ON_MASK;
+
        reg_val &= ~ARASAN_NAND_CMD_ADDR_CYCL_MASK;
 
        addr_cycles = arasan_nand_get_addrcycle(mtd);
@@ -944,7 +947,7 @@ static void arasan_nand_read_buf(struct mtd_info *mtd, u8 *buf, int size)
 
 static u8 arasan_nand_read_byte(struct mtd_info *mtd)
 {
-       struct nand_chip *chip = mtd->priv;
+       struct nand_chip *chip = mtd_to_nand(mtd);
        u32 size;
        u8 val;
        struct nand_onfi_params *p;
@@ -976,8 +979,8 @@ static void arasan_nand_cmd_function(struct mtd_info *mtd, unsigned int command,
                                     int column, int page_addr)
 {
        u32 i, ret = 0;
-       struct nand_chip *chip = mtd->priv;
-       struct arasan_nand_info *nand = chip->priv;
+       struct nand_chip *chip = mtd_to_nand(mtd);
+       struct arasan_nand_info *nand = nand_get_controller_data(chip);
 
        curr_cmd = NULL;
        writel(ARASAN_NAND_INT_STS_XFR_CMPLT_MASK,
@@ -1033,7 +1036,7 @@ static int arasan_nand_ecc_init(struct mtd_info *mtd)
 {
        int found = -1;
        u32 regval, eccpos_start, i;
-       struct nand_chip *nand_chip = mtd->priv;
+       struct nand_chip *nand_chip = mtd_to_nand(mtd);
 
        nand_chip->ecc.mode = NAND_ECC_HW;
        nand_chip->ecc.hwctl = NULL;
@@ -1101,9 +1104,8 @@ static int arasan_nand_init(struct nand_chip *nand_chip, int devnum)
        }
 
        nand->nand_base = arasan_nand_base;
-       mtd = &nand_info[0];
-       nand_chip->priv = nand;
-       mtd->priv = nand_chip;
+       mtd = nand_to_mtd(nand_chip);
+       nand_set_controller_data(nand_chip, nand);
 
        /* Set the driver entry points for MTD */
        nand_chip->cmdfunc = arasan_nand_cmd_function;
@@ -1134,7 +1136,7 @@ static int arasan_nand_init(struct nand_chip *nand_chip, int devnum)
                goto fail;
        }
 
-       if (nand_register(devnum)) {
+       if (nand_register(devnum, mtd)) {
                printf("Nand Register Fail\n");
                goto fail;
        }