]> git.sur5r.net Git - u-boot/blobdiff - drivers/mtd/spi/atmel.c
mtd: atmel_nand: pmecc: fix bug fail to correct bit error in 1024-bytes sector
[u-boot] / drivers / mtd / spi / atmel.c
index 89ebe9dcdb94c4f8fcd530d470d036f01467d11c..f34df43f58bfa76daee274cd931ff5b649415686 100644 (file)
@@ -252,7 +252,7 @@ static int dataflash_write_p2(struct spi_flash *flash,
        }
 
        debug("SF: AT45: Successfully programmed %zu bytes @ 0x%x\n",
-                       len, offset);
+             len, offset);
        ret = 0;
 
 out:
@@ -325,7 +325,7 @@ static int dataflash_write_at45(struct spi_flash *flash,
        }
 
        debug("SF: AT45: Successfully programmed %zu bytes @ 0x%x\n",
-                       len, offset);
+             len, offset);
        ret = 0;
 
 out:
@@ -387,7 +387,7 @@ static int dataflash_erase_p2(struct spi_flash *flash, u32 offset, size_t len)
        }
 
        debug("SF: AT45: Successfully erased %zu bytes @ 0x%x\n",
-                       len, offset);
+             len, offset);
        ret = 0;
 
 out:
@@ -450,7 +450,7 @@ static int dataflash_erase_at45(struct spi_flash *flash, u32 offset, size_t len)
        }
 
        debug("SF: AT45: Successfully erased %zu bytes @ 0x%x\n",
-                       len, offset);
+             len, offset);
        ret = 0;
 
 out:
@@ -476,19 +476,17 @@ struct spi_flash *spi_flash_probe_atmel(struct spi_slave *spi, u8 *idcode)
 
        if (i == ARRAY_SIZE(atmel_spi_flash_table)) {
                debug("SF: Unsupported DataFlash ID %02x\n",
-                               idcode[1]);
+                     idcode[1]);
                return NULL;
        }
 
-       asf = malloc(sizeof(struct atmel_spi_flash));
+       asf = spi_flash_alloc(struct atmel_spi_flash, spi, params->name);
        if (!asf) {
                debug("SF: Failed to allocate memory\n");
                return NULL;
        }
 
        asf->params = params;
-       asf->flash.spi = spi;
-       asf->flash.name = params->name;
 
        /* Assuming power-of-two page size initially. */
        page_size = 1 << params->l2_page_size;
@@ -513,18 +511,20 @@ struct spi_flash *spi_flash_probe_atmel(struct spi_slave *spi, u8 *idcode)
                        asf->flash.erase = dataflash_erase_at45;
                        page_size += 1 << (params->l2_page_size - 5);
                } else {
-                       asf->flash.read = spi_flash_cmd_read_fast;
                        asf->flash.write = dataflash_write_p2;
                        asf->flash.erase = dataflash_erase_p2;
                }
 
+               asf->flash.page_size = page_size;
+               asf->flash.sector_size = page_size;
                break;
 
        case DF_FAMILY_AT26F:
        case DF_FAMILY_AT26DF:
-               asf->flash.read = spi_flash_cmd_read_fast;
-               asf->flash.write = dataflash_write_p2;
-               asf->flash.erase = dataflash_erase_p2;
+               asf->flash.page_size = page_size;
+               asf->flash.sector_size = 4096;
+               /* clear SPRL# bit for locked flash */
+               spi_flash_cmd_write_status(&asf->flash, 0);
                break;
 
        default:
@@ -532,7 +532,6 @@ struct spi_flash *spi_flash_probe_atmel(struct spi_slave *spi, u8 *idcode)
                goto err;
        }
 
-       asf->flash.sector_size = page_size;
        asf->flash.size = page_size * params->pages_per_block
                                * params->blocks_per_sector
                                * params->nr_sectors;