summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@vrfy.org>2011-12-19 20:40:28 +0100
committerKay Sievers <kay.sievers@vrfy.org>2011-12-19 20:40:28 +0100
commitf9825889f25e7f987da9c2548fc54467e8b2b7b5 (patch)
tree9d479885e8231e98aa9bb1c76fe5928e82e35996
parent35ca1766193d2a0c41e605b4e74a277c5ba4a709 (diff)
downloadpatches-f9825889f25e7f987da9c2548fc54467e8b2b7b5.tar.gz
more ARM
.pc/
-rw-r--r--20-arm.patch670
1 files changed, 669 insertions, 1 deletions
diff --git a/20-arm.patch b/20-arm.patch
index 126a7f8..22f9686 100644
--- a/20-arm.patch
+++ b/20-arm.patch
@@ -23,12 +23,27 @@
arch/arm/mach-s3c2440/s3c2440-cpufreq.c | 18 ++++++++------
arch/arm/mach-s3c2440/s3c2440-pll-12000000.c | 16 ++++++++-----
arch/arm/mach-s3c2440/s3c2440-pll-16934400.c | 20 ++++++++--------
+ arch/arm/mach-s3c2440/s3c2440.c | 8 +++---
+ arch/arm/mach-s3c2440/s3c2442.c | 16 +++++++------
+ arch/arm/mach-s3c2440/s3c244x-clock.c | 16 ++++++++-----
+ arch/arm/mach-s3c2440/s3c244x-irq.c | 16 ++++++++-----
+ arch/arm/mach-s3c2440/s3c244x.c | 16 +++++++------
arch/arm/mach-s3c2443/dma.c | 10 ++++----
+ arch/arm/mach-s3c2443/irq.c | 10 ++++----
+ arch/arm/mach-s3c2443/s3c2443.c | 15 ++++++------
+ arch/arm/mach-s3c64xx/cpu.c | 19 ++++++++-------
arch/arm/mach-s3c64xx/dma.c | 23 +++++++++---------
+ arch/arm/mach-s3c64xx/s3c6400.c | 15 ++++++------
+ arch/arm/mach-s3c64xx/s3c6410.c | 15 ++++++------
+ arch/arm/mach-s5p64x0/cpu.c | 15 ++++++------
+ arch/arm/mach-s5p64x0/pm.c | 8 ++++--
+ arch/arm/mach-s5pc100/cpu.c | 15 ++++++------
+ arch/arm/mach-s5pv210/cpu.c | 15 ++++++------
+ arch/arm/mach-s5pv210/pm.c | 8 ++++--
arch/arm/plat-samsung/include/plat/cpu.h | 26 ++++++++++-----------
arch/arm/plat-samsung/include/plat/dma-s3c24xx.h | 2 -
arch/arm/plat-samsung/include/plat/pm.h | 2 -
- 29 files changed, 229 insertions(+), 175 deletions(-)
+ 44 files changed, 345 insertions(+), 266 deletions(-)
--- a/arch/arm/include/asm/mach/time.h
+++ b/arch/arm/include/asm/mach/time.h
@@ -1155,6 +1170,252 @@
}
arch_initcall(s3c2442_pll_16934400);
+--- a/arch/arm/mach-s3c2440/s3c2440.c
++++ b/arch/arm/mach-s3c2440/s3c2440.c
+@@ -18,7 +18,7 @@
+ #include <linux/init.h>
+ #include <linux/platform_device.h>
+ #include <linux/serial_core.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/syscore_ops.h>
+ #include <linux/gpio.h>
+ #include <linux/clk.h>
+@@ -40,8 +40,8 @@
+ #include <plat/gpio-cfg.h>
+ #include <plat/gpio-cfg-helpers.h>
+
+-static struct sys_device s3c2440_sysdev = {
+- .cls = &s3c2440_sysclass,
++static struct device s3c2440_dev = {
++ .bus = &s3c2440_subsys,
+ };
+
+ int __init s3c2440_init(void)
+@@ -63,7 +63,7 @@ int __init s3c2440_init(void)
+
+ /* register our system device for everything else */
+
+- return sysdev_register(&s3c2440_sysdev);
++ return device_register(&s3c2440_dev);
+ }
+
+ void __init s3c2440_map_io(void)
+--- a/arch/arm/mach-s3c2440/s3c2442.c
++++ b/arch/arm/mach-s3c2440/s3c2442.c
+@@ -28,7 +28,7 @@
+ #include <linux/errno.h>
+ #include <linux/err.h>
+ #include <linux/device.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/syscore_ops.h>
+ #include <linux/interrupt.h>
+ #include <linux/ioport.h>
+@@ -123,7 +123,7 @@ static struct clk s3c2442_clk_cam_upll =
+ },
+ };
+
+-static int s3c2442_clk_add(struct sys_device *sysdev)
++static int s3c2442_clk_add(struct device *dev)
+ {
+ struct clk *clock_upll;
+ struct clk *clock_h;
+@@ -149,20 +149,22 @@ static int s3c2442_clk_add(struct sys_de
+ return 0;
+ }
+
+-static struct sysdev_driver s3c2442_clk_driver = {
++static struct subsys_interface s3c2442_clk_interface = {
++ .name = "s3c2442_clk",
++ .subsys = &s3c2442_subsys,
+ .add = s3c2442_clk_add,
+ };
+
+ static __init int s3c2442_clk_init(void)
+ {
+- return sysdev_driver_register(&s3c2442_sysclass, &s3c2442_clk_driver);
++ return subsys_interface_register(&s3c2442_clk_interface);
+ }
+
+ arch_initcall(s3c2442_clk_init);
+
+
+-static struct sys_device s3c2442_sysdev = {
+- .cls = &s3c2442_sysclass,
++static struct device s3c2442_dev = {
++ .bus = &s3c2442_subsys,
+ };
+
+ int __init s3c2442_init(void)
+@@ -175,7 +177,7 @@ int __init s3c2442_init(void)
+ register_syscore_ops(&s3c244x_pm_syscore_ops);
+ register_syscore_ops(&s3c24xx_irq_syscore_ops);
+
+- return sysdev_register(&s3c2442_sysdev);
++ return device_register(&s3c2442_dev);
+ }
+
+ void __init s3c2442_map_io(void)
+--- a/arch/arm/mach-s3c2440/s3c244x-clock.c
++++ b/arch/arm/mach-s3c2440/s3c244x-clock.c
+@@ -28,7 +28,7 @@
+ #include <linux/errno.h>
+ #include <linux/err.h>
+ #include <linux/device.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/interrupt.h>
+ #include <linux/ioport.h>
+ #include <linux/clk.h>
+@@ -73,7 +73,7 @@ static struct clk clk_arm = {
+ },
+ };
+
+-static int s3c244x_clk_add(struct sys_device *sysdev)
++static int s3c244x_clk_add(struct device *dev)
+ {
+ unsigned long camdivn = __raw_readl(S3C2440_CAMDIVN);
+ unsigned long clkdivn;
+@@ -115,24 +115,28 @@ static int s3c244x_clk_add(struct sys_de
+ return 0;
+ }
+
+-static struct sysdev_driver s3c2440_clk_driver = {
++static struct subsys_interface s3c2440_clk_interface = {
++ .name = "s3c2440_clk",
++ .subsys = &s3c2440_subsys,
+ .add = s3c244x_clk_add,
+ };
+
+ static int s3c2440_clk_init(void)
+ {
+- return sysdev_driver_register(&s3c2440_sysclass, &s3c2440_clk_driver);
++ return subsys_interface_register(&s3c2440_clk_interface);
+ }
+
+ arch_initcall(s3c2440_clk_init);
+
+-static struct sysdev_driver s3c2442_clk_driver = {
++static struct subsys_interface s3c2442_clk_interface = {
++ .name = "s3c2442_clk",
++ .subsys = &s3c2442_subsys,
+ .add = s3c244x_clk_add,
+ };
+
+ static int s3c2442_clk_init(void)
+ {
+- return sysdev_driver_register(&s3c2442_sysclass, &s3c2442_clk_driver);
++ return subsys_interface_register(&s3c2442_clk_interface);
+ }
+
+ arch_initcall(s3c2442_clk_init);
+--- a/arch/arm/mach-s3c2440/s3c244x-irq.c
++++ b/arch/arm/mach-s3c2440/s3c244x-irq.c
+@@ -23,7 +23,7 @@
+ #include <linux/module.h>
+ #include <linux/interrupt.h>
+ #include <linux/ioport.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/io.h>
+
+ #include <mach/hardware.h>
+@@ -91,7 +91,7 @@ static struct irq_chip s3c_irq_cam = {
+ .irq_ack = s3c_irq_cam_ack,
+ };
+
+-static int s3c244x_irq_add(struct sys_device *sysdev)
++static int s3c244x_irq_add(struct device *dev)
+ {
+ unsigned int irqno;
+
+@@ -114,25 +114,29 @@ static int s3c244x_irq_add(struct sys_de
+ return 0;
+ }
+
+-static struct sysdev_driver s3c2440_irq_driver = {
++static struct subsys_interface s3c2440_irq_interface = {
++ .name = "s3c2440_irq",
++ .subsys = &s3c2440_subsys,
+ .add = s3c244x_irq_add,
+ };
+
+ static int s3c2440_irq_init(void)
+ {
+- return sysdev_driver_register(&s3c2440_sysclass, &s3c2440_irq_driver);
++ return subsys_interface_register(&s3c2440_irq_interface);
+ }
+
+ arch_initcall(s3c2440_irq_init);
+
+-static struct sysdev_driver s3c2442_irq_driver = {
++static struct subsys_interface s3c2442_irq_interface = {
++ .name = "s3c2442_irq",
++ .subsys = &s3c2442_subsys,
+ .add = s3c244x_irq_add,
+ };
+
+
+ static int s3c2442_irq_init(void)
+ {
+- return sysdev_driver_register(&s3c2442_sysclass, &s3c2442_irq_driver);
++ return subsys_interface_register(&s3c2442_irq_interface);
+ }
+
+ arch_initcall(s3c2442_irq_init);
+--- a/arch/arm/mach-s3c2440/s3c244x.c
++++ b/arch/arm/mach-s3c2440/s3c244x.c
+@@ -18,7 +18,7 @@
+ #include <linux/init.h>
+ #include <linux/serial_core.h>
+ #include <linux/platform_device.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/syscore_ops.h>
+ #include <linux/clk.h>
+ #include <linux/io.h>
+@@ -135,17 +135,19 @@ void __init s3c244x_init_clocks(int xtal
+ s3c2410_baseclk_add();
+ }
+
+-/* Since the S3C2442 and S3C2440 share items, put both sysclasses here */
++/* Since the S3C2442 and S3C2440 share items, put both subsystems here */
+
+-struct sysdev_class s3c2440_sysclass = {
++struct bus_type s3c2440_subsys = {
+ .name = "s3c2440-core",
++ .dev_name = "s3c2440-core",
+ };
+
+-struct sysdev_class s3c2442_sysclass = {
++struct bus_type s3c2442_subsys = {
+ .name = "s3c2442-core",
++ .dev_name = "s3c2442-core",
+ };
+
+-/* need to register class before we actually register the device, and
++/* need to register the subsystem before we actually register the device, and
+ * we also need to ensure that it has been initialised before any of the
+ * drivers even try to use it (even if not on an s3c2440 based system)
+ * as a driver which may support both 2410 and 2440 may try and use it.
+@@ -153,14 +155,14 @@ struct sysdev_class s3c2442_sysclass = {
+
+ static int __init s3c2440_core_init(void)
+ {
+- return sysdev_class_register(&s3c2440_sysclass);
++ return subsys_system_register(&s3c2440_subsys);
+ }
+
+ core_initcall(s3c2440_core_init);
+
+ static int __init s3c2442_core_init(void)
+ {
+- return sysdev_class_register(&s3c2442_sysclass);
++ return subsys_system_register(&s3c2442_subsys);
+ }
+
+ core_initcall(s3c2442_core_init);
--- a/arch/arm/mach-s3c2443/dma.c
+++ b/arch/arm/mach-s3c2443/dma.c
@@ -14,7 +14,7 @@
@@ -1191,6 +1452,143 @@
}
arch_initcall(s3c2443_dma_init);
+--- a/arch/arm/mach-s3c2443/irq.c
++++ b/arch/arm/mach-s3c2443/irq.c
+@@ -23,7 +23,7 @@
+ #include <linux/module.h>
+ #include <linux/interrupt.h>
+ #include <linux/ioport.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/io.h>
+
+ #include <mach/hardware.h>
+@@ -241,7 +241,7 @@ static int __init s3c2443_add_sub(unsign
+ return 0;
+ }
+
+-static int __init s3c2443_irq_add(struct sys_device *sysdev)
++static int __init s3c2443_irq_add(struct device *dev)
+ {
+ printk("S3C2443: IRQ Support\n");
+
+@@ -265,13 +265,15 @@ static int __init s3c2443_irq_add(struct
+ return 0;
+ }
+
+-static struct sysdev_driver s3c2443_irq_driver = {
++static struct subsys_interface s3c2443_irq_interface = {
++ .name = "s3c2443_irq",
++ .subsys = &s3c2443_subsys,
+ .add = s3c2443_irq_add,
+ };
+
+ static int __init s3c2443_irq_init(void)
+ {
+- return sysdev_driver_register(&s3c2443_sysclass, &s3c2443_irq_driver);
++ return subsys_interface_register(&s3c2443_irq_interface);
+ }
+
+ arch_initcall(s3c2443_irq_init);
+--- a/arch/arm/mach-s3c2443/s3c2443.c
++++ b/arch/arm/mach-s3c2443/s3c2443.c
+@@ -19,7 +19,7 @@
+ #include <linux/gpio.h>
+ #include <linux/platform_device.h>
+ #include <linux/serial_core.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/clk.h>
+ #include <linux/io.h>
+
+@@ -49,12 +49,13 @@ static struct map_desc s3c2443_iodesc[]
+ IODESC_ENT(TIMER),
+ };
+
+-struct sysdev_class s3c2443_sysclass = {
++struct bus_type s3c2443_subsys = {
+ .name = "s3c2443-core",
++ .dev_name = "s3c2443-core",
+ };
+
+-static struct sys_device s3c2443_sysdev = {
+- .cls = &s3c2443_sysclass,
++static struct device s3c2443_dev = {
++ .bus = &s3c2443_subsys,
+ };
+
+ static void s3c2443_hard_reset(void)
+@@ -77,7 +78,7 @@ int __init s3c2443_init(void)
+ s3c_device_wdt.resource[1].start = IRQ_S3C2443_WDT;
+ s3c_device_wdt.resource[1].end = IRQ_S3C2443_WDT;
+
+- return sysdev_register(&s3c2443_sysdev);
++ return device_register(&s3c2443_dev);
+ }
+
+ void __init s3c2443_init_uarts(struct s3c2410_uartcfg *cfg, int no)
+@@ -99,7 +100,7 @@ void __init s3c2443_map_io(void)
+ iotable_init(s3c2443_iodesc, ARRAY_SIZE(s3c2443_iodesc));
+ }
+
+-/* need to register class before we actually register the device, and
++/* need to register the subsystem before we actually register the device, and
+ * we also need to ensure that it has been initialised before any of the
+ * drivers even try to use it (even if not on an s3c2443 based system)
+ * as a driver which may support both 2443 and 2440 may try and use it.
+@@ -107,7 +108,7 @@ void __init s3c2443_map_io(void)
+
+ static int __init s3c2443_core_init(void)
+ {
+- return sysdev_class_register(&s3c2443_sysclass);
++ return subsys_system_register(&s3c2443_subsys, NULL);
+ }
+
+ core_initcall(s3c2443_core_init);
+--- a/arch/arm/mach-s3c64xx/cpu.c
++++ b/arch/arm/mach-s3c64xx/cpu.c
+@@ -16,7 +16,7 @@
+ #include <linux/module.h>
+ #include <linux/interrupt.h>
+ #include <linux/ioport.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/serial_core.h>
+ #include <linux/platform_device.h>
+ #include <linux/io.h>
+@@ -122,12 +122,13 @@ static struct map_desc s3c_iodesc[] __in
+ };
+
+
+-struct sysdev_class s3c64xx_sysclass = {
+- .name = "s3c64xx-core",
++struct bus_type s3c64xx_subsys = {
++ .name = "s3c64xx-core",
++ .dev_name = "s3c64xx-core",
+ };
+
+-static struct sys_device s3c64xx_sysdev = {
+- .cls = &s3c64xx_sysclass,
++static struct device s3c64xx_dev = {
++ .bus = &s3c64xx_subsys,
+ };
+
+ /* uart registration process */
+@@ -152,10 +153,10 @@ void __init s3c64xx_init_io(struct map_d
+ s3c_init_cpu(samsung_cpu_id, cpu_ids, ARRAY_SIZE(cpu_ids));
+ }
+
+-static __init int s3c64xx_sysdev_init(void)
++static __init int s3c64xx_dev_init(void)
+ {
+- sysdev_class_register(&s3c64xx_sysclass);
+- return sysdev_register(&s3c64xx_sysdev);
++ subsys_system_register(&s3c64xx_subsys);
++ return device_register(&s3c64xx_dev);
+ }
+
+-core_initcall(s3c64xx_sysdev_init);
++core_initcall(s3c64xx_dev_init);
--- a/arch/arm/mach-s3c64xx/dma.c
+++ b/arch/arm/mach-s3c64xx/dma.c
@@ -16,7 +16,7 @@
@@ -1269,6 +1667,276 @@
return -ENOMEM;
}
+--- a/arch/arm/mach-s3c64xx/s3c6400.c
++++ b/arch/arm/mach-s3c64xx/s3c6400.c
+@@ -17,7 +17,7 @@
+ #include <linux/init.h>
+ #include <linux/clk.h>
+ #include <linux/io.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/serial_core.h>
+ #include <linux/platform_device.h>
+
+@@ -70,17 +70,18 @@ void __init s3c6400_init_irq(void)
+ s3c64xx_init_irq(~0 & ~(0xf << 5), ~0);
+ }
+
+-static struct sysdev_class s3c6400_sysclass = {
+- .name = "s3c6400-core",
++static struct bus_type s3c6400_subsys = {
++ .name = "s3c6400-core",
++ .dev_name = "s3c6400-core",
+ };
+
+-static struct sys_device s3c6400_sysdev = {
+- .cls = &s3c6400_sysclass,
++static struct device s3c6400_dev = {
++ .bus = &s3c6400_subsys,
+ };
+
+ static int __init s3c6400_core_init(void)
+ {
+- return sysdev_class_register(&s3c6400_sysclass);
++ return subsys_system_register(&s3c6400_subsys);
+ }
+
+ core_initcall(s3c6400_core_init);
+@@ -89,5 +90,5 @@ int __init s3c6400_init(void)
+ {
+ printk("S3C6400: Initialising architecture\n");
+
+- return sysdev_register(&s3c6400_sysdev);
++ return device_register(&s3c6400_dev);
+ }
+--- a/arch/arm/mach-s3c64xx/s3c6410.c
++++ b/arch/arm/mach-s3c64xx/s3c6410.c
+@@ -18,7 +18,7 @@
+ #include <linux/init.h>
+ #include <linux/clk.h>
+ #include <linux/io.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/serial_core.h>
+ #include <linux/platform_device.h>
+
+@@ -75,17 +75,18 @@ void __init s3c6410_init_irq(void)
+ s3c64xx_init_irq(~0 & ~(1 << 7), ~0);
+ }
+
+-struct sysdev_class s3c6410_sysclass = {
+- .name = "s3c6410-core",
++struct bus_type s3c6410_subsys = {
++ .name = "s3c6410-core",
++ .dev_name = "s3c6410-core",
+ };
+
+-static struct sys_device s3c6410_sysdev = {
+- .cls = &s3c6410_sysclass,
++static struct device s3c6410_dev = {
++ .bus = &s3c6410_subsys,
+ };
+
+ static int __init s3c6410_core_init(void)
+ {
+- return sysdev_class_register(&s3c6410_sysclass);
++ return subsys_system_register(&s3c6410_subsys);
+ }
+
+ core_initcall(s3c6410_core_init);
+@@ -94,5 +95,5 @@ int __init s3c6410_init(void)
+ {
+ printk("S3C6410: Initialising architecture\n");
+
+- return sysdev_register(&s3c6410_sysdev);
++ return device_register(&s3c6410_dev);
+ }
+--- a/arch/arm/mach-s5p64x0/cpu.c
++++ b/arch/arm/mach-s5p64x0/cpu.c
+@@ -16,7 +16,7 @@
+ #include <linux/init.h>
+ #include <linux/clk.h>
+ #include <linux/io.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/serial_core.h>
+ #include <linux/platform_device.h>
+ #include <linux/sched.h>
+@@ -190,17 +190,18 @@ void __init s5p6450_init_irq(void)
+ s5p_init_irq(vic, ARRAY_SIZE(vic));
+ }
+
+-struct sysdev_class s5p64x0_sysclass = {
+- .name = "s5p64x0-core",
++struct bus_type s5p64x0_subsys = {
++ .name = "s5p64x0-core",
++ .dev_name = "s5p64x0-core",
+ };
+
+-static struct sys_device s5p64x0_sysdev = {
+- .cls = &s5p64x0_sysclass,
++static struct device s5p64x0_subsys = {
++ .bus = &s5p64x0_subsys,
+ };
+
+ static int __init s5p64x0_core_init(void)
+ {
+- return sysdev_class_register(&s5p64x0_sysclass);
++ return subsys_system_register(&s5p64x0_subsys);
+ }
+ core_initcall(s5p64x0_core_init);
+
+@@ -211,5 +212,5 @@ int __init s5p64x0_init(void)
+ /* set idle function */
+ pm_idle = s5p64x0_idle;
+
+- return sysdev_register(&s5p64x0_sysdev);
++ return device_register(&s5p64x0_dev);
+ }
+--- a/arch/arm/mach-s5p64x0/pm.c
++++ b/arch/arm/mach-s5p64x0/pm.c
+@@ -160,7 +160,7 @@ static void s5p64x0_pm_prepare(void)
+
+ }
+
+-static int s5p64x0_pm_add(struct sys_device *sysdev)
++static int s5p64x0_pm_add(struct device *dev)
+ {
+ pm_cpu_prep = s5p64x0_pm_prepare;
+ pm_cpu_sleep = s5p64x0_cpu_suspend;
+@@ -169,7 +169,9 @@ static int s5p64x0_pm_add(struct sys_dev
+ return 0;
+ }
+
+-static struct sysdev_driver s5p64x0_pm_driver = {
++static struct subsys_interface s5p64x0_pm_interface = {
++ .name = "s5p64x0_pm",
++ .subsys = &s5p64x0_subsys,
+ .add = s5p64x0_pm_add,
+ };
+
+@@ -177,7 +179,7 @@ static __init int s5p64x0_pm_drvinit(voi
+ {
+ s3c_pm_init();
+
+- return sysdev_driver_register(&s5p64x0_sysclass, &s5p64x0_pm_driver);
++ return subsys_interface_register(&s5p64x0_pm_interface);
+ }
+ arch_initcall(s5p64x0_pm_drvinit);
+
+--- a/arch/arm/mach-s5pc100/cpu.c
++++ b/arch/arm/mach-s5pc100/cpu.c
+@@ -21,7 +21,7 @@
+ #include <linux/init.h>
+ #include <linux/clk.h>
+ #include <linux/io.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/serial_core.h>
+ #include <linux/platform_device.h>
+ #include <linux/sched.h>
+@@ -143,17 +143,18 @@ void __init s5pc100_init_irq(void)
+ s5p_init_irq(vic, ARRAY_SIZE(vic));
+ }
+
+-static struct sysdev_class s5pc100_sysclass = {
+- .name = "s5pc100-core",
++static struct bus_type s5pc100_subsys = {
++ .name = "s5pc100-core",
++ .dev_name = "s5pc100-core",
+ };
+
+-static struct sys_device s5pc100_sysdev = {
+- .cls = &s5pc100_sysclass,
++static struct device s5pc100_dev = {
++ .bus = &s5pc100_subsys,
+ };
+
+ static int __init s5pc100_core_init(void)
+ {
+- return sysdev_class_register(&s5pc100_sysclass);
++ return subsys_system_register(&s5pc100_subsys);
+ }
+
+ core_initcall(s5pc100_core_init);
+@@ -165,5 +166,5 @@ int __init s5pc100_init(void)
+ /* set idle function */
+ pm_idle = s5pc100_idle;
+
+- return sysdev_register(&s5pc100_sysdev);
++ return device_register(&s5pc100_sys);
+ }
+--- a/arch/arm/mach-s5pv210/cpu.c
++++ b/arch/arm/mach-s5pv210/cpu.c
+@@ -17,7 +17,7 @@
+ #include <linux/module.h>
+ #include <linux/clk.h>
+ #include <linux/io.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/platform_device.h>
+ #include <linux/sched.h>
+ #include <linux/dma-mapping.h>
+@@ -174,17 +174,18 @@ void __init s5pv210_init_irq(void)
+ s5p_init_irq(vic, ARRAY_SIZE(vic));
+ }
+
+-struct sysdev_class s5pv210_sysclass = {
+- .name = "s5pv210-core",
++struct bus_type s5pv210_subsys = {
++ .name = "s5pv210-core",
++ .dev_name = "s5pv210-core",
+ };
+
+-static struct sys_device s5pv210_sysdev = {
+- .cls = &s5pv210_sysclass,
++static struct device s5pv210_dev = {
++ .bus = &s5pv210_subsys,
+ };
+
+ static int __init s5pv210_core_init(void)
+ {
+- return sysdev_class_register(&s5pv210_sysclass);
++ return subsys_system_register(&s5pv210_subsys);
+ }
+
+ core_initcall(s5pv210_core_init);
+@@ -199,5 +200,5 @@ int __init s5pv210_init(void)
+ /* set sw_reset function */
+ s5p_reset_hook = s5pv210_sw_reset;
+
+- return sysdev_register(&s5pv210_sysdev);
++ return device_register(&s5pv210_dev);
+ }
+--- a/arch/arm/mach-s5pv210/pm.c
++++ b/arch/arm/mach-s5pv210/pm.c
+@@ -133,7 +133,7 @@ static void s5pv210_pm_prepare(void)
+ s3c_pm_do_save(s5pv210_core_save, ARRAY_SIZE(s5pv210_core_save));
+ }
+
+-static int s5pv210_pm_add(struct sys_device *sysdev)
++static int s5pv210_pm_add(struct device *dev)
+ {
+ pm_cpu_prep = s5pv210_pm_prepare;
+ pm_cpu_sleep = s5pv210_cpu_suspend;
+@@ -141,13 +141,15 @@ static int s5pv210_pm_add(struct sys_dev
+ return 0;
+ }
+
+-static struct sysdev_driver s5pv210_pm_driver = {
++static struct subsys_interface s5pv210_pm_interface = {
++ .name = "s5pv210_pm",
++ .subsys = &s5pv210_subsys,
+ .add = s5pv210_pm_add,
+ };
+
+ static __init int s5pv210_pm_drvinit(void)
+ {
+- return sysdev_driver_register(&s5pv210_sysclass, &s5pv210_pm_driver);
++ return subsys_interface_register(&s5pv210_pm_interface);
+ }
+ arch_initcall(s5pv210_pm_drvinit);
+
--- a/arch/arm/plat-samsung/include/plat/cpu.h
+++ b/arch/arm/plat-samsung/include/plat/cpu.h
@@ -185,20 +185,20 @@ extern struct syscore_ops s3c2416_pm_sys