| From 12c6836de664df0456e3d827b605ef1bf4bb323a Mon Sep 17 00:00:00 2001 |
| From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Date: Thu, 5 Jul 2012 01:26:31 -0700 |
| Subject: ARM: shmobile: r8a7740: add A3SP pm domain support |
| |
| This patch adds basic A3SP pm domain support. |
| Now, below devices can be controled by PM |
| |
| DMAC1/2/3, IPMMU, DDM, FLCTL, SYS-HPB, BBIF1, MSIOF1/2, |
| SCIFA,SCIFB, IIC1, IrDA, USBH, USBDMAC, SDHI0/1/2, TPU, |
| DREQPAK (Sys), MMCIF, RSPI, SIM, USBF |
| |
| Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Acked-by: Magnus Damm <damm@opensource.se> |
| Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> |
| (cherry picked from commit 802a5639aa7041b27cb865d3be289cd8afe3387b) |
| |
| Signed-off-by: Simon Horman <horms@verge.net.au> |
| --- |
| arch/arm/mach-shmobile/include/mach/r8a7740.h | 1 + |
| arch/arm/mach-shmobile/pm-r8a7740.c | 19 +++++++++++++++++++ |
| arch/arm/mach-shmobile/setup-r8a7740.c | 16 ++++++++++++++++ |
| 3 files changed, 36 insertions(+) |
| |
| diff --git a/arch/arm/mach-shmobile/include/mach/r8a7740.h b/arch/arm/mach-shmobile/include/mach/r8a7740.h |
| index e8c87e9..a5691cf 100644 |
| --- a/arch/arm/mach-shmobile/include/mach/r8a7740.h |
| +++ b/arch/arm/mach-shmobile/include/mach/r8a7740.h |
| @@ -608,6 +608,7 @@ enum { |
| |
| #ifdef CONFIG_PM |
| extern struct rmobile_pm_domain r8a7740_pd_a4s; |
| +extern struct rmobile_pm_domain r8a7740_pd_a3sp; |
| #endif /* CONFIG_PM */ |
| |
| #endif /* __ASM_R8A7740_H__ */ |
| diff --git a/arch/arm/mach-shmobile/pm-r8a7740.c b/arch/arm/mach-shmobile/pm-r8a7740.c |
| index d2fe815..de7c621 100644 |
| --- a/arch/arm/mach-shmobile/pm-r8a7740.c |
| +++ b/arch/arm/mach-shmobile/pm-r8a7740.c |
| @@ -8,6 +8,7 @@ |
| * License. See the file "COPYING" in the main directory of this archive |
| * for more details. |
| */ |
| +#include <linux/console.h> |
| #include <mach/pm-rmobile.h> |
| |
| #ifdef CONFIG_PM |
| @@ -27,4 +28,22 @@ struct rmobile_pm_domain r8a7740_pd_a4s = { |
| .no_debug = true, |
| .suspend = r8a7740_pd_a4s_suspend, |
| }; |
| + |
| +static int r8a7740_pd_a3sp_suspend(void) |
| +{ |
| + /* |
| + * Serial consoles make use of SCIF hardware located in A3SP, |
| + * keep such power domain on if "no_console_suspend" is set. |
| + */ |
| + return console_suspend_enabled ? 0 : -EBUSY; |
| +} |
| + |
| +struct rmobile_pm_domain r8a7740_pd_a3sp = { |
| + .genpd.name = "A3SP", |
| + .bit_shift = 11, |
| + .gov = &pm_domain_always_on_gov, |
| + .no_debug = true, |
| + .suspend = r8a7740_pd_a3sp_suspend, |
| +}; |
| + |
| #endif /* CONFIG_PM */ |
| diff --git a/arch/arm/mach-shmobile/setup-r8a7740.c b/arch/arm/mach-shmobile/setup-r8a7740.c |
| index c37ad75..59c79412 100644 |
| --- a/arch/arm/mach-shmobile/setup-r8a7740.c |
| +++ b/arch/arm/mach-shmobile/setup-r8a7740.c |
| @@ -674,12 +674,28 @@ void __init r8a7740_add_standard_devices(void) |
| |
| /* PM domain */ |
| rmobile_init_pm_domain(&r8a7740_pd_a4s); |
| + rmobile_init_pm_domain(&r8a7740_pd_a3sp); |
| + |
| + rmobile_pm_add_subdomain(&r8a7740_pd_a4s, &r8a7740_pd_a3sp); |
| |
| /* add devices */ |
| platform_add_devices(r8a7740_early_devices, |
| ARRAY_SIZE(r8a7740_early_devices)); |
| platform_add_devices(r8a7740_late_devices, |
| ARRAY_SIZE(r8a7740_late_devices)); |
| + |
| + /* add devices to PM domain */ |
| + |
| + rmobile_add_device_to_domain(&r8a7740_pd_a3sp, &scif0_device); |
| + rmobile_add_device_to_domain(&r8a7740_pd_a3sp, &scif1_device); |
| + rmobile_add_device_to_domain(&r8a7740_pd_a3sp, &scif2_device); |
| + rmobile_add_device_to_domain(&r8a7740_pd_a3sp, &scif3_device); |
| + rmobile_add_device_to_domain(&r8a7740_pd_a3sp, &scif4_device); |
| + rmobile_add_device_to_domain(&r8a7740_pd_a3sp, &scif5_device); |
| + rmobile_add_device_to_domain(&r8a7740_pd_a3sp, &scif6_device); |
| + rmobile_add_device_to_domain(&r8a7740_pd_a3sp, &scif7_device); |
| + rmobile_add_device_to_domain(&r8a7740_pd_a3sp, &scifb_device); |
| + rmobile_add_device_to_domain(&r8a7740_pd_a3sp, &i2c1_device); |
| } |
| |
| static void __init r8a7740_earlytimer_init(void) |
| -- |
| 1.8.0.197.g5a90748 |
| |