diff options
Diffstat (limited to 'arch/arm/mach-imx/mach-imx6sx.c')
-rw-r--r-- | arch/arm/mach-imx/mach-imx6sx.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/arch/arm/mach-imx/mach-imx6sx.c b/arch/arm/mach-imx/mach-imx6sx.c index 96c79a0bb4f5..c92decf51a21 100644 --- a/arch/arm/mach-imx/mach-imx6sx.c +++ b/arch/arm/mach-imx/mach-imx6sx.c @@ -29,6 +29,9 @@ #include "cpuidle.h" #include "hardware.h" +static struct platform_device imx6slx_cpufreq_pdev = { + .name = "imx6-cpufreq", +}; static struct flexcan_platform_data flexcan_pdata[2]; static int flexcan_en_gpio; static int flexcan_stby_gpio; @@ -190,6 +193,25 @@ static void __init imx6sx_init_machine(void) imx6sx_qos_init(); } +static void __init imx6slx_opp_init(struct device *cpu_dev) +{ + struct device_node *np; + + np = of_find_node_by_path("/cpus/cpu@0"); + if (!np) { + pr_warn("failed to find cpu0 node\n"); + return; + } + + cpu_dev->of_node = np; + if (of_init_opp_table(cpu_dev)) { + pr_warn("failed to init OPP table\n"); + goto put_node; + } + +put_node: + of_node_put(np); +} static void __init imx6sx_init_late(void) { struct regmap *gpr; @@ -209,6 +231,11 @@ static void __init imx6sx_init_late(void) if (of_machine_is_compatible("fsl,imx6sx-17x17-arm2") || of_machine_is_compatible("fsl,imx6sx-sdb")) imx6sx_arm2_flexcan_fixup(); + + if (IS_ENABLED(CONFIG_ARM_IMX6_CPUFREQ)) { + imx6slx_opp_init(&imx6slx_cpufreq_pdev.dev); + platform_device_register(&imx6slx_cpufreq_pdev); + } } static void __init imx6sx_map_io(void) |