Browse Source

Merge tag 'renesas-runtime-pm-for-v3.19' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas into next/soc

Merge "Renesas ARM Based SoC Runtime PM Updates for v3.19"

* 8a7740/armadillo800eva legacy PM domain support

* tag 'renesas-runtime-pm-for-v3.19' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas:
  ARM: shmobile: r8a7740: Add A3SM pm domain support
  ARM: shmobile: r8a7740: Add A4SU pm domain support
  ARM: shmobile: r8a7740/armadillo legacy: Add A4R pm domain support
  ARM: shmobile: r8a7740: Add D4 pm domain support
  ARM: shmobile: r8a7740/armadillo legacy: Add A4MP pm domain support
  ARM: shmobile: r8a7740: Add A3SG pm domain support
  ARM: shmobile: r8a7740: Add A3RV pm domain support
  ARM: shmobile: armadillo800eva legacy: Add missing A4S pm domain devices
  ARM: shmobile: armadillo800eva legacy: Add missing A3SP pm domain devices
  ARM: shmobile: r8a7740: Add missing A4S pm domain devices
  ARM: shmobile: r8a7740: Add missing A3SP pm domain devices

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Arnd Bergmann 10 years ago
parent
commit
15fee17dba

+ 11 - 1
arch/arm/mach-shmobile/board-armadillo800eva.c

@@ -1234,8 +1234,15 @@ static void __init eva_init(void)
 	static struct pm_domain_device domain_devices[] __initdata = {
 	static struct pm_domain_device domain_devices[] __initdata = {
 		{ "A4LC", &lcdc0_device },
 		{ "A4LC", &lcdc0_device },
 		{ "A4LC", &hdmi_lcdc_device },
 		{ "A4LC", &hdmi_lcdc_device },
+		{ "A4MP", &hdmi_device },
+		{ "A4MP", &fsi_device },
+		{ "A4R",  &ceu0_device },
+		{ "A4S",  &sh_eth_device },
+		{ "A3SP", &pwm_device },
+		{ "A3SP", &sdhi0_device },
+		{ "A3SP", &sh_mmcif_device },
 	};
 	};
-	struct platform_device *usb = NULL;
+	struct platform_device *usb = NULL, *sdhi1 = NULL;
 
 
 	regulator_register_always_on(0, "fixed-3.3V", fixed3v3_power_consumers,
 	regulator_register_always_on(0, "fixed-3.3V", fixed3v3_power_consumers,
 				     ARRAY_SIZE(fixed3v3_power_consumers), 3300000);
 				     ARRAY_SIZE(fixed3v3_power_consumers), 3300000);
@@ -1304,6 +1311,7 @@ static void __init eva_init(void)
 
 
 		platform_device_register(&vcc_sdhi1);
 		platform_device_register(&vcc_sdhi1);
 		platform_device_register(&sdhi1_device);
 		platform_device_register(&sdhi1_device);
+		sdhi1 = &sdhi1_device;
 	}
 	}
 
 
 
 
@@ -1324,6 +1332,8 @@ static void __init eva_init(void)
 				       ARRAY_SIZE(domain_devices));
 				       ARRAY_SIZE(domain_devices));
 	if (usb)
 	if (usb)
 		rmobile_add_device_to_domain("A3SP", usb);
 		rmobile_add_device_to_domain("A3SP", usb);
+	if (sdhi1)
+		rmobile_add_device_to_domain("A3SP", sdhi1);
 
 
 	r8a7740_pm_init();
 	r8a7740_pm_init();
 }
 }

+ 40 - 4
arch/arm/mach-shmobile/pm-r8a7740.c

@@ -14,10 +14,10 @@
 #include "pm-rmobile.h"
 #include "pm-rmobile.h"
 
 
 #if defined(CONFIG_PM) && !defined(CONFIG_ARCH_MULTIPLATFORM)
 #if defined(CONFIG_PM) && !defined(CONFIG_ARCH_MULTIPLATFORM)
-static int r8a7740_pd_a4s_suspend(void)
+static int r8a7740_pd_a3sm_suspend(void)
 {
 {
 	/*
 	/*
-	 * The A4S domain contains the CPU core and therefore it should
+	 * The A3SM domain contains the CPU core and therefore it should
 	 * only be turned off if the CPU is not in use.
 	 * only be turned off if the CPU is not in use.
 	 */
 	 */
 	return -EBUSY;
 	return -EBUSY;
@@ -32,29 +32,65 @@ static int r8a7740_pd_a3sp_suspend(void)
 	return console_suspend_enabled ? 0 : -EBUSY;
 	return console_suspend_enabled ? 0 : -EBUSY;
 }
 }
 
 
+static int r8a7740_pd_d4_suspend(void)
+{
+	/*
+	 * The D4 domain contains the Coresight-ETM hardware block and
+	 * therefore it should only be turned off if the debug module is
+	 * not in use.
+	 */
+	return -EBUSY;
+}
+
 static struct rmobile_pm_domain r8a7740_pm_domains[] = {
 static struct rmobile_pm_domain r8a7740_pm_domains[] = {
 	{
 	{
 		.genpd.name	= "A4LC",
 		.genpd.name	= "A4LC",
 		.bit_shift	= 1,
 		.bit_shift	= 1,
+	}, {
+		.genpd.name	= "A4MP",
+		.bit_shift	= 2,
+	}, {
+		.genpd.name	= "D4",
+		.bit_shift	= 3,
+		.gov		= &pm_domain_always_on_gov,
+		.suspend	= r8a7740_pd_d4_suspend,
+	}, {
+		.genpd.name	= "A4R",
+		.bit_shift	= 5,
+	}, {
+		.genpd.name	= "A3RV",
+		.bit_shift	= 6,
 	}, {
 	}, {
 		.genpd.name	= "A4S",
 		.genpd.name	= "A4S",
 		.bit_shift	= 10,
 		.bit_shift	= 10,
-		.gov		= &pm_domain_always_on_gov,
 		.no_debug	= true,
 		.no_debug	= true,
-		.suspend	= r8a7740_pd_a4s_suspend,
 	}, {
 	}, {
 		.genpd.name	= "A3SP",
 		.genpd.name	= "A3SP",
 		.bit_shift	= 11,
 		.bit_shift	= 11,
 		.gov		= &pm_domain_always_on_gov,
 		.gov		= &pm_domain_always_on_gov,
 		.no_debug	= true,
 		.no_debug	= true,
 		.suspend	= r8a7740_pd_a3sp_suspend,
 		.suspend	= r8a7740_pd_a3sp_suspend,
+	}, {
+		.genpd.name	= "A3SM",
+		.bit_shift	= 12,
+		.gov		= &pm_domain_always_on_gov,
+		.suspend	= r8a7740_pd_a3sm_suspend,
+	}, {
+		.genpd.name	= "A3SG",
+		.bit_shift	= 13,
+	}, {
+		.genpd.name	= "A4SU",
+		.bit_shift	= 20,
 	},
 	},
 };
 };
 
 
 void __init r8a7740_init_pm_domains(void)
 void __init r8a7740_init_pm_domains(void)
 {
 {
 	rmobile_init_domains(r8a7740_pm_domains, ARRAY_SIZE(r8a7740_pm_domains));
 	rmobile_init_domains(r8a7740_pm_domains, ARRAY_SIZE(r8a7740_pm_domains));
+	pm_genpd_add_subdomain_names("A4R", "A3RV");
 	pm_genpd_add_subdomain_names("A4S", "A3SP");
 	pm_genpd_add_subdomain_names("A4S", "A3SP");
+	pm_genpd_add_subdomain_names("A4S", "A3SM");
+	pm_genpd_add_subdomain_names("A4S", "A3SG");
 }
 }
 #endif /* CONFIG_PM && !CONFIG_ARCH_MULTIPLATFORM */
 #endif /* CONFIG_PM && !CONFIG_ARCH_MULTIPLATFORM */
 
 

+ 11 - 0
arch/arm/mach-shmobile/setup-r8a7740.c

@@ -746,6 +746,12 @@ static void r8a7740_i2c_workaround(struct platform_device *pdev)
 void __init r8a7740_add_standard_devices(void)
 void __init r8a7740_add_standard_devices(void)
 {
 {
 	static struct pm_domain_device domain_devices[] __initdata = {
 	static struct pm_domain_device domain_devices[] __initdata = {
+		{ "A4R",  &tmu0_device },
+		{ "A4R",  &i2c0_device },
+		{ "A4S",  &irqpin0_device },
+		{ "A4S",  &irqpin1_device },
+		{ "A4S",  &irqpin2_device },
+		{ "A4S",  &irqpin3_device },
 		{ "A3SP", &scif0_device },
 		{ "A3SP", &scif0_device },
 		{ "A3SP", &scif1_device },
 		{ "A3SP", &scif1_device },
 		{ "A3SP", &scif2_device },
 		{ "A3SP", &scif2_device },
@@ -756,6 +762,11 @@ void __init r8a7740_add_standard_devices(void)
 		{ "A3SP", &scif7_device },
 		{ "A3SP", &scif7_device },
 		{ "A3SP", &scif8_device },
 		{ "A3SP", &scif8_device },
 		{ "A3SP", &i2c1_device },
 		{ "A3SP", &i2c1_device },
+		{ "A3SP", &ipmmu_device },
+		{ "A3SP", &dma0_device },
+		{ "A3SP", &dma1_device },
+		{ "A3SP", &dma2_device },
+		{ "A3SP", &usb_dma_device },
 	};
 	};
 
 
 	/* I2C work-around */
 	/* I2C work-around */