diff options
author | Paul Parsons <lost.distance@yahoo.com> | 2012-03-07 09:12:08 -0500 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2012-03-26 19:52:28 -0400 |
commit | 876fe76d793d03077eb61ba3afab4a383f46c554 (patch) | |
tree | fb7d98bd746ebd1c3c5919f10a998e8f2dbd9e8b /arch/arm/mach-omap1 | |
parent | e7d9377e0440c25805dcc5b0af189a87beb69f5e (diff) |
mtd: maps: physmap: Add reference counter to set_vpp()
This patch is part of a set which fixes unnecessary flash erase and write errors
resulting from the MTD CFI driver turning off vpp while an erase is in progress.
This patch allows physmap_set_vpp() calls to be nested by adding a reference
counter.
omap1_set_vpp() already used a reference counter. Since it is called from
physmap_set_vpp(), omap1_set_vpp() can now be simplified.
simtec_nor_vpp() already disabled hard interrupts. Since it is called from
physmap_set_vpp(), simtec_nor_vpp() can now be simplified.
Signed-off-by: Paul Parsons <lost.distance@yahoo.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'arch/arm/mach-omap1')
-rw-r--r-- | arch/arm/mach-omap1/flash.c | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/arch/arm/mach-omap1/flash.c b/arch/arm/mach-omap1/flash.c index 1749cb37dda0..4665bfcd2ce9 100644 --- a/arch/arm/mach-omap1/flash.c +++ b/arch/arm/mach-omap1/flash.c | |||
@@ -15,20 +15,12 @@ | |||
15 | 15 | ||
16 | void omap1_set_vpp(struct platform_device *pdev, int enable) | 16 | void omap1_set_vpp(struct platform_device *pdev, int enable) |
17 | { | 17 | { |
18 | static int count; | ||
19 | u32 l; | 18 | u32 l; |
20 | 19 | ||
21 | if (enable) { | 20 | l = omap_readl(EMIFS_CONFIG); |
22 | if (count++ == 0) { | 21 | if (enable) |
23 | l = omap_readl(EMIFS_CONFIG); | 22 | l |= OMAP_EMIFS_CONFIG_WP; |
24 | l |= OMAP_EMIFS_CONFIG_WP; | 23 | else |
25 | omap_writel(l, EMIFS_CONFIG); | 24 | l &= ~OMAP_EMIFS_CONFIG_WP; |
26 | } | 25 | omap_writel(l, EMIFS_CONFIG); |
27 | } else { | ||
28 | if (count && (--count == 0)) { | ||
29 | l = omap_readl(EMIFS_CONFIG); | ||
30 | l &= ~OMAP_EMIFS_CONFIG_WP; | ||
31 | omap_writel(l, EMIFS_CONFIG); | ||
32 | } | ||
33 | } | ||
34 | } | 26 | } |