diff options
author | Huang Shijie <b32955@freescale.com> | 2010-11-03 10:01:16 +0800 |
---|---|---|
committer | Huang Shijie <b32955@freescale.com> | 2010-11-05 10:03:37 +0800 |
commit | f0fc38e3786393cddaaa0639ceaf5e3998b57312 (patch) | |
tree | 9795fb8b03a6906b6332759d15a00a2b28e65975 | |
parent | b2347cb5c2555a0a62092e72dc2c973e0da4ab6c (diff) |
ENGR00133178-10 NAND : add ddr_clk for imx50
In imx50, the low power feature is introduced into the system.
We have to enable the ddr_clk explicitly before doing any DMA operations.
So enable the ddr_clk in ->begin(), and disable it in ->end();
Signed-off-by: Huang Shijie <b32955@freescale.com>
-rw-r--r-- | drivers/mtd/nand/gpmi-nfc/gpmi-nfc-hal-v2.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/mtd/nand/gpmi-nfc/gpmi-nfc-hal-v2.c b/drivers/mtd/nand/gpmi-nfc/gpmi-nfc-hal-v2.c index 0ca5a9e9fd4a..0a9c3d62b07b 100644 --- a/drivers/mtd/nand/gpmi-nfc/gpmi-nfc-hal-v2.c +++ b/drivers/mtd/nand/gpmi-nfc/gpmi-nfc-hal-v2.c @@ -32,6 +32,13 @@ */ static int onfi_ddr_mode; +/* + * In low-power mode, the system will shutdown the ddr_clk which is needed + * by the DMA. + */ +static struct clk *ddr_clk; + + static void setup_ddr_timing(struct gpmi_nfc_data *this) { uint32_t value; @@ -193,6 +200,13 @@ static int enable_micron_ddr(struct gpmi_nfc_data *this) /* To check if we need to initialize something else*/ static int extra_init(struct gpmi_nfc_data *this) { + ddr_clk = clk_get(NULL, "ddr_clk"); + if (IS_ERR(ddr_clk)) { + printk(KERN_ERR "The ddr clock is gone!"); + ddr_clk = NULL; + return -ENOENT; + } + if (is_onfi_nand(&this->device_info)) return enable_micron_ddr(this); return 0; @@ -439,6 +453,8 @@ static void begin(struct gpmi_nfc_data *this) /* Enable the clock. */ + if (ddr_clk) + clk_enable(ddr_clk); clk_enable(resources->clock); /* Get the timing information we need. */ @@ -464,6 +480,8 @@ static void end(struct gpmi_nfc_data *this) /* Disable the clock. */ clk_disable(resources->clock); + if (ddr_clk) + clk_disable(ddr_clk); } |