Skip to content

Commit

Permalink
mtd: atmel_nand: replace cpu_is_at32ap7000() with a nand platform data
Browse files Browse the repository at this point in the history
The nand driver use cpu_is_at32ap7000() macro for a workaround. For the
multi-platform support, we will remove this cpu_is_xxx() macro.

This patch adds a boolean variable need_reset_workaround in structure
atmel_nand_data. Using this variable we can remove cpu_is_at32ap7000() macro.

Hans-Christian: Feel free to push this through the mtd tree, if they won't
accept it I'm working on getting my workflow up on the linux-avr32.git tree.

Signed-off-by: Josh Wu <[email protected]>
Acked-by: Hans-Christian Egtvedt <[email protected]>
Signed-off-by: Artem Bityutskiy <[email protected]>
Signed-off-by: David Woodhouse <[email protected]>
  • Loading branch information
JoshWu authored and David Woodhouse committed Aug 5, 2013
1 parent d1cb556 commit 71b94e2
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 7 deletions.
3 changes: 3 additions & 0 deletions arch/avr32/mach-at32ap/at32ap700x.c
Original file line number Diff line number Diff line change
Expand Up @@ -1983,6 +1983,9 @@ at32_add_device_nand(unsigned int id, struct atmel_nand_data *data)
ARRAY_SIZE(smc_cs3_resource)))
goto fail;

/* For at32ap7000, we use the reset workaround for nand driver */
data->need_reset_workaround = true;

if (platform_device_add_data(pdev, data,
sizeof(struct atmel_nand_data)))
goto fail;
Expand Down
13 changes: 6 additions & 7 deletions drivers/mtd/nand/atmel_nand.c
Original file line number Diff line number Diff line change
Expand Up @@ -1174,10 +1174,9 @@ static int atmel_nand_read_page(struct mtd_info *mtd, struct nand_chip *chip,
* Workaround: Reset the parity registers before reading the
* actual data.
*/
if (cpu_is_at32ap7000()) {
struct atmel_nand_host *host = chip->priv;
struct atmel_nand_host *host = chip->priv;
if (host->board.need_reset_workaround)
ecc_writel(host->ecc, CR, ATMEL_ECC_RST);
}

/* read the page */
chip->read_buf(mtd, p, eccsize);
Expand Down Expand Up @@ -1298,11 +1297,11 @@ static int atmel_nand_correct(struct mtd_info *mtd, u_char *dat,
*/
static void atmel_nand_hwctl(struct mtd_info *mtd, int mode)
{
if (cpu_is_at32ap7000()) {
struct nand_chip *nand_chip = mtd->priv;
struct atmel_nand_host *host = nand_chip->priv;
struct nand_chip *nand_chip = mtd->priv;
struct atmel_nand_host *host = nand_chip->priv;

if (host->board.need_reset_workaround)
ecc_writel(host->ecc, CR, ATMEL_ECC_RST);
}
}

#if defined(CONFIG_OF)
Expand Down
3 changes: 3 additions & 0 deletions include/linux/platform_data/atmel.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@ struct atmel_nand_data {
u8 on_flash_bbt; /* bbt on flash */
struct mtd_partition *parts;
unsigned int num_parts;

/* default is false, only for at32ap7000 chip is true */
bool need_reset_workaround;
};

/* Serial */
Expand Down

0 comments on commit 71b94e2

Please sign in to comment.