diff options
author | Huang Shijie | 2012-09-13 08:58:00 +0200 |
---|---|---|
committer | David Woodhouse | 2012-09-29 16:56:45 +0200 |
commit | 9c95f11b9e743aa6134134a6dcf866a9d5661972 (patch) | |
tree | 2dcaf4c49693f03d6855136c77b8234072cb024c /drivers/mtd/nand/gpmi-nand/gpmi-lib.c | |
parent | mtd: gpmi: add EDO feature for imx6q (diff) | |
download | kernel-qcow2-linux-9c95f11b9e743aa6134134a6dcf866a9d5661972.tar.gz kernel-qcow2-linux-9c95f11b9e743aa6134134a6dcf866a9d5661972.tar.xz kernel-qcow2-linux-9c95f11b9e743aa6134134a6dcf866a9d5661972.zip |
mtd: gpmi: initialize the timing registers only one time
The current code initializes the timing registers at very time
we call the gpmi_begin(). This really wastes the cpu cycles.
Add a new flag to let the gpmi driver initializes the timing registers
only one time.
Signed-off-by: Huang Shijie <b32955@freescale.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'drivers/mtd/nand/gpmi-nand/gpmi-lib.c')
-rw-r--r-- | drivers/mtd/nand/gpmi-nand/gpmi-lib.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-lib.c b/drivers/mtd/nand/gpmi-nand/gpmi-lib.c index c036e51f3200..3502accd4bc3 100644 --- a/drivers/mtd/nand/gpmi-nand/gpmi-lib.c +++ b/drivers/mtd/nand/gpmi-nand/gpmi-lib.c @@ -914,6 +914,9 @@ static int enable_edo_mode(struct gpmi_nand_data *this, int mode) rate = (mode == 5) ? 100000000 : 80000000; clk_set_rate(r->clock[0], rate); + /* Let the gpmi_begin() re-compute the timing again. */ + this->flags &= ~GPMI_TIMING_INIT_OK; + this->flags |= GPMI_ASYNC_EDO_ENABLED; this->timing_mode = mode; dev_info(this->dev, "enable the asynchronous EDO mode %d\n", mode); @@ -964,6 +967,11 @@ void gpmi_begin(struct gpmi_nand_data *this) goto err_out; } + /* Only initialize the timing once */ + if (this->flags & GPMI_TIMING_INIT_OK) + return; + this->flags |= GPMI_TIMING_INIT_OK; + if (this->flags & GPMI_ASYNC_EDO_ENABLED) gpmi_compute_edo_timing(this, &hw); else |