mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-25 16:11:45 +00:00
ATMEL: fix nand ecc support
So we can now choose for the board the ecc mode (ecc soft, soft bch, no ecc and hardware). Set ecc mode in the boards to soft as currently in the driver. Move platform data to a common header include/linux/platform_data/atmel_nand.h Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> Acked-by: Hans-Christian Egtvedt <egtvedt@samfundet.no> Acked-by: David Woodhouse <dwmw2@infradead.org>
This commit is contained in:
parent
f75622f467
commit
bf4289cba0
25 changed files with 55 additions and 45 deletions
|
@ -34,22 +34,10 @@
|
|||
#include <linux/dmaengine.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/platform_data/atmel.h>
|
||||
|
||||
#include <mach/board.h>
|
||||
#include <mach/cpu.h>
|
||||
|
||||
#ifdef CONFIG_MTD_NAND_ATMEL_ECC_HW
|
||||
#define hard_ecc 1
|
||||
#else
|
||||
#define hard_ecc 0
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MTD_NAND_ATMEL_ECC_NONE
|
||||
#define no_ecc 1
|
||||
#else
|
||||
#define no_ecc 0
|
||||
#endif
|
||||
|
||||
static int use_dma = 1;
|
||||
module_param(use_dma, int, 0);
|
||||
|
||||
|
@ -532,23 +520,22 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
|
|||
if (gpio_is_valid(host->board->rdy_pin))
|
||||
nand_chip->dev_ready = atmel_nand_device_ready;
|
||||
|
||||
nand_chip->ecc.mode = host->board->ecc_mode;
|
||||
|
||||
regs = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
if (!regs && hard_ecc) {
|
||||
if (!regs && nand_chip->ecc.mode == NAND_ECC_HW) {
|
||||
printk(KERN_ERR "atmel_nand: can't get I/O resource "
|
||||
"regs\nFalling back on software ECC\n");
|
||||
nand_chip->ecc.mode = NAND_ECC_SOFT;
|
||||
}
|
||||
|
||||
nand_chip->ecc.mode = NAND_ECC_SOFT; /* enable ECC */
|
||||
if (no_ecc)
|
||||
nand_chip->ecc.mode = NAND_ECC_NONE;
|
||||
if (hard_ecc && regs) {
|
||||
if (nand_chip->ecc.mode == NAND_ECC_HW) {
|
||||
host->ecc = ioremap(regs->start, resource_size(regs));
|
||||
if (host->ecc == NULL) {
|
||||
printk(KERN_ERR "atmel_nand: ioremap failed\n");
|
||||
res = -EIO;
|
||||
goto err_ecc_ioremap;
|
||||
}
|
||||
nand_chip->ecc.mode = NAND_ECC_HW;
|
||||
nand_chip->ecc.calculate = atmel_nand_calculate;
|
||||
nand_chip->ecc.correct = atmel_nand_correct;
|
||||
nand_chip->ecc.hwctl = atmel_nand_hwctl;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue