ARM: EXYNOS: convert cpuidle driver to be a platform driver
Subsystems (3)
PATCH 1/2 ARM: EXYNOS: convert cpuidle driver to be a platform driver
ARM EXYNOS cpuidle driver is currently not multiplatform support ready (as it uses device_initcall() for initialization and doesn't check on what platform it is running). Fix it by converting the driver to be a platform driver and registering exynos_cpuidle platform device from exynos[4,5]_dt_machine_init().
--- arch/arm/mach-exynos/common.c | 11 +++++++++++ arch/arm/mach-exynos/common.h | 1 + arch/arm/mach-exynos/cpuidle.c | 14 ++++++++++++-- arch/arm/mach-exynos/mach-exynos4-dt.c | 2 ++ arch/arm/mach-exynos/mach-exynos5-dt.c | 2 ++ 5 files changed, 28 insertions(+), 2 deletions(-)
arch/arm/mach-exynos/common.c +11 -0
@@ -30,6 +30,7 @@#include <linux/clk-provider.h> #include <linux/irqchip/arm-gic.h> #include <linux/irqchip/chained_irq.h> +#include <linux/platform_device.h> #include <asm/proc-fns.h> #include <asm/exception.h>
@@ -294,6 +295,16 @@ void exynos5_restart(enum reboot_mode mode, const char *cmd)__raw_writel (val, addr); } +static struct platform_device exynos_cpuidle = { + .name ="exynos_cpuidle" , + .id =-1 , +}; + +void __init exynos_cpuidle_init (void ) +{ +platform_device_register (&exynos_cpuidle); +} +void __init exynos_init_late (void ) {if (of_machine_is_compatible ("samsung,exynos5440" ))
arch/arm/mach-exynos/common.h +1 -0
@@ -22,6 +22,7 @@ struct map_desc;void exynos_init_io (void );void exynos4_restart (enum reboot_mode mode,const char *cmd);void exynos5_restart (enum reboot_mode mode,const char *cmd); +void exynos_cpuidle_init (void );void exynos_init_late (void );void exynos_firmware_init (void );
arch/arm/mach-exynos/cpuidle.c +12 -2
@@ -15,6 +15,7 @@#include <linux/io.h> #include <linux/export.h> #include <linux/time.h> +#include <linux/platform_device.h> #include <asm/proc-fns.h> #include <asm/smp_scu.h>
@@ -192,7 +193,7 @@ static void __init exynos5_core_down_clk(void)__raw_writel (tmp,EXYNOS5_PWR_CTRL2 ); } -static int __init exynos4_init_cpuidle (void ) +static int __init exynos_cpuidle_probe (struct platform_device *pdev) {int cpu_id, ret;struct cpuidle_device *device;
@@ -223,4 +224,13 @@ static int __init exynos4_init_cpuidle(void)return 0 ; } -device_initcall (exynos4_init_cpuidle); + +static struct platform_driver exynos_cpuidle_driver = { + .probe = exynos_cpuidle_probe, + .driver = { + .name ="exynos_cpuidle" , + .owner =THIS_MODULE , + }, +}; + +module_platform_driver (exynos_cpuidle_driver);
arch/arm/mach-exynos/mach-exynos4-dt.c +2 -0
@@ -25,6 +25,8 @@static void __init exynos4_dt_machine_init (void ) { +exynos_cpuidle_init (); +of_platform_populate (NULL , of_default_bus_match_table,NULL ,NULL ); }
arch/arm/mach-exynos/mach-exynos5-dt.c +2 -0
@@ -47,6 +47,8 @@ static void __init exynos5_dt_machine_init(void) } } +exynos_cpuidle_init (); +of_platform_populate (NULL , of_default_bus_match_table,NULL ,NULL ); }
Signature · 1 line
1.8.2.3
PATCH 1/2 ARM: EXYNOS: convert cpuidle driver to be a platform driver
Quoted 11 lines · Bartlomiej Zolnierkiewicz
ARM EXYNOS cpuidle driver is currently not multiplatform support ready (as it uses
device_initcall()for initialization and doesn't check on what platform it is running). Fix it by converting the driver to be a platform driver and registeringexynos_cpuidleplatform device from exynos[4,5]_dt_machine_init().Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>Signed-off-by Kyungmin Park <[email protected]>Cc Tomasz Figa <[email protected]>Cc Amit Daniel Kachhap <[email protected]>---
Signature · 5 lines
<http://www.linaro.org/> Linaro.org ? Open source software for ARM SoCs Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook | <http://twitter.com/#!/linaroorg> Twitter | <http://www.linaro.org/linaro-blog/> Blog
Rafael J. Wysocki
AppliedPATCH 1/2 ARM: EXYNOS: convert cpuidle driver to be a platform driver
Quoted 7 lines · Daniel Lezcano
Quoted 6 lines · Bartlomiej Zolnierkiewicz
ARM EXYNOS cpuidle driver is currently not multiplatform support ready (as it uses
device_initcall()for initialization and doesn't check on what platform it is running). Fix it by converting the driver to be a platform driver and registeringexynos_cpuidleplatform device from exynos[4,5]_dt_machine_init().
Quoted 7 lines
Quoted 5 lines
Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>Signed-off-by Kyungmin Park <[email protected]>Cc Tomasz Figa <[email protected]>Cc Amit Daniel Kachhap <[email protected]>---
Acked-by Daniel Lezcano <[email protected]>
Queued up for 3.13, thanks!
Signature · 2 lines
I speak only for myself. Rafael J. Wysocki, Intel Open Source Technology Center.