aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/amba/bus.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-12-12 18:26:48 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2014-12-12 18:26:48 -0500
commit26ceb127f7bcf473db926c6a026b18ddd6f274e8 (patch)
treea8944a9c0730c409b0cfb17c541085face068556 /drivers/amba/bus.c
parent8d14066755592a2906b4f2378aeb5471b602d3cb (diff)
parente9f2d6d66037cdf97487491e04053f411abc5d16 (diff)
Merge branch 'for-linus' of git://ftp.arm.linux.org.uk/~rmk/linux-arm
Pull ARM updates from Russell King: "The major updates included in this update are: - Clang compatible stack pointer accesses by Behan Webster. - SA11x0 updates from Dmitry Eremin-Solenikov. - kgdb handling of breakpoints with read-only text/modules - Support for Privileged-no-execute feature on ARMv7 to prevent userspace code execution by the kernel. - AMBA primecell bus handling of irq-safe runtime PM - Unwinding support for memset/memzero/memmove/memcpy functions - VFP fixes for Krait CPUs and improvements in detecting the VFP architecture - A number of code cleanups (using pr_*, removing or reducing the severity of a couple of kernel messages, splitting ftrace asm code out to a separate file, etc.) - Add machine name to stack dump output" * 'for-linus' of git://ftp.arm.linux.org.uk/~rmk/linux-arm: (62 commits) ARM: 8247/2: pcmcia: sa1100: make use of device clock ARM: 8246/2: pcmcia: sa1111: provide device clock ARM: 8245/1: pcmcia: soc-common: enable/disable socket clocks ARM: 8244/1: fbdev: sa1100fb: make use of device clock ARM: 8243/1: sa1100: add a clock alias for sa1111 pcmcia device ARM: 8242/1: sa1100: add cpu clock ARM: 8221/1: PJ4: allow building in Thumb-2 mode ARM: 8234/1: sa1100: reorder IRQ handling code ARM: 8233/1: sa1100: switch to hwirq usage ARM: 8232/1: sa1100: merge GPIO multiplexer IRQ to "normal" irq domain ARM: 8231/1: sa1100: introduce irqdomains support ARM: 8230/1: sa1100: shift IRQs by one ARM: 8229/1: sa1100: replace irq numbers with names in irq driver ARM: 8228/1: sa1100: drop entry-macro.S ARM: 8227/1: sa1100: switch to MULTI_IRQ_HANDLER ARM: 8241/1: Update processor_modes for hyp and monitor mode ARM: 8240/1: MCPM: document mcpm_sync_init() ARM: 8239/1: Introduce {set,clear}_pte_bit ARM: 8238/1: mm: Refine set_memory_* functions ARM: 8237/1: fix flush_pfn_alias ...
Diffstat (limited to 'drivers/amba/bus.c')
-rw-r--r--drivers/amba/bus.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
index 973a3332a85f..80f4de729a86 100644
--- a/drivers/amba/bus.c
+++ b/drivers/amba/bus.c
@@ -95,8 +95,12 @@ static int amba_pm_runtime_suspend(struct device *dev)
95 struct amba_device *pcdev = to_amba_device(dev); 95 struct amba_device *pcdev = to_amba_device(dev);
96 int ret = pm_generic_runtime_suspend(dev); 96 int ret = pm_generic_runtime_suspend(dev);
97 97
98 if (ret == 0 && dev->driver) 98 if (ret == 0 && dev->driver) {
99 clk_disable_unprepare(pcdev->pclk); 99 if (pm_runtime_is_irq_safe(dev))
100 clk_disable(pcdev->pclk);
101 else
102 clk_disable_unprepare(pcdev->pclk);
103 }
100 104
101 return ret; 105 return ret;
102} 106}
@@ -107,7 +111,10 @@ static int amba_pm_runtime_resume(struct device *dev)
107 int ret; 111 int ret;
108 112
109 if (dev->driver) { 113 if (dev->driver) {
110 ret = clk_prepare_enable(pcdev->pclk); 114 if (pm_runtime_is_irq_safe(dev))
115 ret = clk_enable(pcdev->pclk);
116 else
117 ret = clk_prepare_enable(pcdev->pclk);
111 /* Failure is probably fatal to the system, but... */ 118 /* Failure is probably fatal to the system, but... */
112 if (ret) 119 if (ret)
113 return ret; 120 return ret;
@@ -115,7 +122,7 @@ static int amba_pm_runtime_resume(struct device *dev)
115 122
116 return pm_generic_runtime_resume(dev); 123 return pm_generic_runtime_resume(dev);
117} 124}
118#endif 125#endif /* CONFIG_PM */
119 126
120static const struct dev_pm_ops amba_pm = { 127static const struct dev_pm_ops amba_pm = {
121 .suspend = pm_generic_suspend, 128 .suspend = pm_generic_suspend,