Commit b9d18dc3 authored by Robert Lee's avatar Robert Lee Committed by Sascha Hauer

ARM: imx: Add imx6q cpuidle driver

Add basic imx6q cpuidle driver.  For now, only basic WFI state is
supported.  Deeper idle states will be added in the future.
Signed-off-by: default avatarRobert Lee <rob.lee@linaro.org>
Signed-off-by: default avatarSascha Hauer <s.hauer@pengutronix.de>
parent ccc12b32
...@@ -12,7 +12,9 @@ ...@@ -12,7 +12,9 @@
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/clkdev.h> #include <linux/clkdev.h>
#include <linux/cpuidle.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/export.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/irq.h> #include <linux/irq.h>
...@@ -24,6 +26,7 @@ ...@@ -24,6 +26,7 @@
#include <linux/pinctrl/machine.h> #include <linux/pinctrl/machine.h>
#include <linux/phy.h> #include <linux/phy.h>
#include <linux/micrel_phy.h> #include <linux/micrel_phy.h>
#include <asm/cpuidle.h>
#include <asm/smp_twd.h> #include <asm/smp_twd.h>
#include <asm/hardware/cache-l2x0.h> #include <asm/hardware/cache-l2x0.h>
#include <asm/hardware/gic.h> #include <asm/hardware/gic.h>
...@@ -31,8 +34,10 @@ ...@@ -31,8 +34,10 @@
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <asm/system_misc.h> #include <asm/system_misc.h>
#include <mach/common.h> #include <mach/common.h>
#include <mach/cpuidle.h>
#include <mach/hardware.h> #include <mach/hardware.h>
void imx6q_restart(char mode, const char *cmd) void imx6q_restart(char mode, const char *cmd)
{ {
struct device_node *np; struct device_node *np;
...@@ -129,6 +134,19 @@ static void __init imx6q_init_machine(void) ...@@ -129,6 +134,19 @@ static void __init imx6q_init_machine(void)
imx6q_pm_init(); imx6q_pm_init();
} }
static struct cpuidle_driver imx6q_cpuidle_driver = {
.name = "imx6q_cpuidle",
.owner = THIS_MODULE,
.en_core_tk_irqen = 1,
.states[0] = ARM_CPUIDLE_WFI_STATE,
.state_count = 1,
};
static void __init imx6q_init_late(void)
{
imx_cpuidle_init(&imx6q_cpuidle_driver);
}
static void __init imx6q_map_io(void) static void __init imx6q_map_io(void)
{ {
imx_lluart_map_io(); imx_lluart_map_io();
...@@ -186,6 +204,7 @@ DT_MACHINE_START(IMX6Q, "Freescale i.MX6 Quad (Device Tree)") ...@@ -186,6 +204,7 @@ DT_MACHINE_START(IMX6Q, "Freescale i.MX6 Quad (Device Tree)")
.handle_irq = imx6q_handle_irq, .handle_irq = imx6q_handle_irq,
.timer = &imx6q_timer, .timer = &imx6q_timer,
.init_machine = imx6q_init_machine, .init_machine = imx6q_init_machine,
.init_late = imx6q_init_late,
.dt_compat = imx6q_dt_compat, .dt_compat = imx6q_dt_compat,
.restart = imx6q_restart, .restart = imx6q_restart,
MACHINE_END MACHINE_END
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment