Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 75bcc844 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'renesas-sh-drivers-for-v3.16' of...

Merge tag 'renesas-sh-drivers-for-v3.16' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas into next

Pull SH driver update from Simon Horman:

 - PM Runtime enhancements targeted for use with ARM-based Renesas R-Car
   Gen2 SoCs

 - Restrict INTC_USERIMASK to SH4A as it is only used there

* tag 'renesas-sh-drivers-for-v3.16' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas:
  drivers: sh: Enable PM runtime for new R-Car Gen2 SoCs
  drivers: sh: pm_runtime implementation needs to suspend and resume devices
  drivers: sh: Restrict INTC_USERIMASK to SH4A
  drivers: sh: pm_runtime does not need idle callback
parents cc07aabc 2f35fb3c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ comment "Interrupt controller options"

config INTC_USERIMASK
	bool "Userspace interrupt masking support"
	depends on ARCH_SHMOBILE || (SUPERH && CPU_SH4A) || COMPILE_TEST
	depends on (SUPERH && CPU_SH4A) || COMPILE_TEST
	help
	  This enables support for hardware-assisted userspace hardirq
	  masking.
+34 −6
Original line number Diff line number Diff line
@@ -21,18 +21,43 @@
#include <linux/slab.h>

#ifdef CONFIG_PM_RUNTIME

static int default_platform_runtime_idle(struct device *dev)
static int sh_pm_runtime_suspend(struct device *dev)
{
	/* suspend synchronously to disable clocks immediately */
	int ret;

	ret = pm_generic_runtime_suspend(dev);
	if (ret) {
		dev_err(dev, "failed to suspend device\n");
		return ret;
	}

	ret = pm_clk_suspend(dev);
	if (ret) {
		dev_err(dev, "failed to suspend clock\n");
		pm_generic_runtime_resume(dev);
		return ret;
	}

	return 0;
}

static int sh_pm_runtime_resume(struct device *dev)
{
	int ret;

	ret = pm_clk_resume(dev);
	if (ret) {
		dev_err(dev, "failed to resume clock\n");
		return ret;
	}

	return pm_generic_runtime_resume(dev);
}

static struct dev_pm_domain default_pm_domain = {
	.ops = {
		.runtime_suspend = pm_clk_suspend,
		.runtime_resume = pm_clk_resume,
		.runtime_idle = default_platform_runtime_idle,
		.runtime_suspend = sh_pm_runtime_suspend,
		.runtime_resume = sh_pm_runtime_resume,
		USE_PLATFORM_PM_SLEEP_OPS
	},
};
@@ -63,6 +88,9 @@ static int __init sh_pm_runtime_init(void)
		    !of_machine_is_compatible("renesas,r8a7779") &&
		    !of_machine_is_compatible("renesas,r8a7790") &&
		    !of_machine_is_compatible("renesas,r8a7791") &&
		    !of_machine_is_compatible("renesas,r8a7792") &&
		    !of_machine_is_compatible("renesas,r8a7793") &&
		    !of_machine_is_compatible("renesas,r8a7794") &&
		    !of_machine_is_compatible("renesas,sh7372") &&
		    !of_machine_is_compatible("renesas,sh73a0"))
			return 0;