__raw_readl(base + AR71XX_GPIO_REG_OE);
}
-static int rb750_nand_read_verify(u8 *read_buf, unsigned len,
- const u8 *verify_buf)
+static void rb750_nand_read(u8 *read_buf, unsigned len)
{
void __iomem *base = ath79_gpio_base;
unsigned i;
/* deactivate RE line */
__raw_writel(RB750_NAND_NRE, base + AR71XX_GPIO_REG_SET);
- if (read_buf)
- read_buf[i] = data;
- else if (verify_buf && verify_buf[i] != data)
- return -EFAULT;
+ read_buf[i] = data;
}
-
- return 0;
}
static void rb750_nand_select_chip(struct mtd_info *mtd, int chip)
static u8 rb750_nand_read_byte(struct mtd_info *mtd)
{
u8 data = 0;
- rb750_nand_read_verify(&data, 1, NULL);
+ rb750_nand_read(&data, 1);
return data;
}
static void rb750_nand_read_buf(struct mtd_info *mtd, u8 *buf, int len)
{
- rb750_nand_read_verify(buf, len, NULL);
+ rb750_nand_read(buf, len);
}
static void rb750_nand_write_buf(struct mtd_info *mtd, const u8 *buf, int len)
rb750_nand_write(buf, len);
}
-static int rb750_nand_verify_buf(struct mtd_info *mtd, const u8 *buf, int len)
-{
- return rb750_nand_read_verify(NULL, len, buf);
-}
-
static void __init rb750_nand_gpio_init(struct rb750_nand_info *info)
{
void __iomem *base = ath79_gpio_base;
info->chip.read_byte = rb750_nand_read_byte;
info->chip.write_buf = rb750_nand_write_buf;
info->chip.read_buf = rb750_nand_read_buf;
- info->chip.verify_buf = rb750_nand_verify_buf;
info->chip.chip_delay = 25;
info->chip.ecc.mode = NAND_ECC_SOFT;
reverted:
--- a/drivers/mtd/nand/rb750_nand.c
+++ b/drivers/mtd/nand/rb750_nand.c
-@@ -289,6 +289,7 @@ static int __devinit rb750_nand_probe(st
+@@ -277,6 +277,7 @@ static int __devinit rb750_nand_probe(st
info->chip.chip_delay = 25;
info->chip.ecc.mode = NAND_ECC_SOFT;
--- /dev/null
+--- a/drivers/mtd/nand/rb750_nand.c
++++ b/drivers/mtd/nand/rb750_nand.c
+@@ -110,7 +110,8 @@ static void rb750_nand_write(const u8 *b
+ __raw_readl(base + AR71XX_GPIO_REG_OE);
+ }
+
+-static void rb750_nand_read(u8 *read_buf, unsigned len)
++static int rb750_nand_read_verify(u8 *read_buf, unsigned len,
++ const u8 *verify_buf)
+ {
+ void __iomem *base = ath79_gpio_base;
+ unsigned i;
+@@ -130,8 +131,13 @@ static void rb750_nand_read(u8 *read_buf
+ /* deactivate RE line */
+ __raw_writel(RB750_NAND_NRE, base + AR71XX_GPIO_REG_SET);
+
+- read_buf[i] = data;
++ if (read_buf)
++ read_buf[i] = data;
++ else if (verify_buf && verify_buf[i] != data)
++ return -EFAULT;
+ }
++
++ return 0;
+ }
+
+ static void rb750_nand_select_chip(struct mtd_info *mtd, int chip)
+@@ -206,13 +212,13 @@ static void rb750_nand_cmd_ctrl(struct m
+ static u8 rb750_nand_read_byte(struct mtd_info *mtd)
+ {
+ u8 data = 0;
+- rb750_nand_read(&data, 1);
++ rb750_nand_read_verify(&data, 1, NULL);
+ return data;
+ }
+
+ static void rb750_nand_read_buf(struct mtd_info *mtd, u8 *buf, int len)
+ {
+- rb750_nand_read(buf, len);
++ rb750_nand_read_verify(buf, len, NULL);
+ }
+
+ static void rb750_nand_write_buf(struct mtd_info *mtd, const u8 *buf, int len)
+@@ -220,6 +226,11 @@ static void rb750_nand_write_buf(struct
+ rb750_nand_write(buf, len);
+ }
+
++static int rb750_nand_verify_buf(struct mtd_info *mtd, const u8 *buf, int len)
++{
++ return rb750_nand_read_verify(NULL, len, buf);
++}
++
+ static void __init rb750_nand_gpio_init(struct rb750_nand_info *info)
+ {
+ void __iomem *base = ath79_gpio_base;
+@@ -274,6 +285,7 @@ static int __devinit rb750_nand_probe(st
+ info->chip.read_byte = rb750_nand_read_byte;
+ info->chip.write_buf = rb750_nand_write_buf;
+ info->chip.read_buf = rb750_nand_read_buf;
++ info->chip.verify_buf = rb750_nand_verify_buf;
+
+ info->chip.chip_delay = 25;
+ info->chip.ecc.mode = NAND_ECC_SOFT;
--- /dev/null
+--- a/drivers/mtd/nand/rb750_nand.c
++++ b/drivers/mtd/nand/rb750_nand.c
+@@ -110,7 +110,8 @@ static void rb750_nand_write(const u8 *b
+ __raw_readl(base + AR71XX_GPIO_REG_OE);
+ }
+
+-static void rb750_nand_read(u8 *read_buf, unsigned len)
++static int rb750_nand_read_verify(u8 *read_buf, unsigned len,
++ const u8 *verify_buf)
+ {
+ void __iomem *base = ath79_gpio_base;
+ unsigned i;
+@@ -130,8 +131,13 @@ static void rb750_nand_read(u8 *read_buf
+ /* deactivate RE line */
+ __raw_writel(RB750_NAND_NRE, base + AR71XX_GPIO_REG_SET);
+
+- read_buf[i] = data;
++ if (read_buf)
++ read_buf[i] = data;
++ else if (verify_buf && verify_buf[i] != data)
++ return -EFAULT;
+ }
++
++ return 0;
+ }
+
+ static void rb750_nand_select_chip(struct mtd_info *mtd, int chip)
+@@ -206,13 +212,13 @@ static void rb750_nand_cmd_ctrl(struct m
+ static u8 rb750_nand_read_byte(struct mtd_info *mtd)
+ {
+ u8 data = 0;
+- rb750_nand_read(&data, 1);
++ rb750_nand_read_verify(&data, 1, NULL);
+ return data;
+ }
+
+ static void rb750_nand_read_buf(struct mtd_info *mtd, u8 *buf, int len)
+ {
+- rb750_nand_read(buf, len);
++ rb750_nand_read_verify(buf, len, NULL);
+ }
+
+ static void rb750_nand_write_buf(struct mtd_info *mtd, const u8 *buf, int len)
+@@ -220,6 +226,11 @@ static void rb750_nand_write_buf(struct
+ rb750_nand_write(buf, len);
+ }
+
++static int rb750_nand_verify_buf(struct mtd_info *mtd, const u8 *buf, int len)
++{
++ return rb750_nand_read_verify(NULL, len, buf);
++}
++
+ static void __init rb750_nand_gpio_init(struct rb750_nand_info *info)
+ {
+ void __iomem *base = ath79_gpio_base;
+@@ -274,6 +285,7 @@ static int __devinit rb750_nand_probe(st
+ info->chip.read_byte = rb750_nand_read_byte;
+ info->chip.write_buf = rb750_nand_write_buf;
+ info->chip.read_buf = rb750_nand_read_buf;
++ info->chip.verify_buf = rb750_nand_verify_buf;
+
+ info->chip.chip_delay = 25;
+ info->chip.ecc.mode = NAND_ECC_SOFT;