summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@vrfy.org>2011-12-19 18:38:51 +0100
committerKay Sievers <kay.sievers@vrfy.org>2011-12-19 18:38:51 +0100
commit13bb0455e991f4931a17dda081c18f567095acf8 (patch)
tree38e0b72b0ea4ca48fecbfdabd23c397e426c10c0
parent94d3f33796781d7470a86a8cce2b8bd4d792261d (diff)
downloadpatches-13bb0455e991f4931a17dda081c18f567095acf8.tar.gz
half of ARM
-rw-r--r--20-arm.patch894
-rw-r--r--series1
2 files changed, 895 insertions, 0 deletions
diff --git a/20-arm.patch b/20-arm.patch
new file mode 100644
index 0000000..d91cd95
--- /dev/null
+++ b/20-arm.patch
@@ -0,0 +1,894 @@
+---
+ arch/arm/include/asm/mach/time.h | 2 -
+ arch/arm/kernel/leds.c | 21 +++++++++--------
+ arch/arm/mach-exynos/cpu.c | 15 ++++++------
+ arch/arm/mach-exynos/pm.c | 8 ++++--
+ arch/arm/mach-s3c2410/cpu-freq.c | 22 +++++++++---------
+ arch/arm/mach-s3c2410/dma.c | 22 +++++++++++-------
+ arch/arm/mach-s3c2410/include/mach/dma.h | 4 +--
+ arch/arm/mach-s3c2410/pll.c | 16 ++++++++-----
+ arch/arm/mach-s3c2410/pm.c | 28 ++++++++++++++---------
+ arch/arm/mach-s3c2410/s3c2410.c | 24 ++++++++++---------
+ arch/arm/mach-s3c2412/cpu-freq.c | 11 ++++-----
+ arch/arm/mach-s3c2412/dma.c | 10 ++++----
+ arch/arm/mach-s3c2412/irq.c | 10 ++++----
+ arch/arm/mach-s3c2412/pm.c | 10 ++++----
+ arch/arm/mach-s3c2440/dma.c | 10 ++++----
+ arch/arm/mach-s3c2443/dma.c | 10 ++++----
+ arch/arm/mach-s3c64xx/dma.c | 23 +++++++++---------
+ 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 -
+ 20 files changed, 157 insertions(+), 119 deletions(-)
+
+--- a/arch/arm/include/asm/mach/time.h
++++ b/arch/arm/include/asm/mach/time.h
+@@ -10,7 +10,7 @@
+ #ifndef __ASM_ARM_MACH_TIME_H
+ #define __ASM_ARM_MACH_TIME_H
+
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+
+ /*
+ * This is our kernel timer structure.
+--- a/arch/arm/kernel/leds.c
++++ b/arch/arm/kernel/leds.c
+@@ -9,7 +9,7 @@
+ */
+ #include <linux/export.h>
+ #include <linux/init.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/syscore_ops.h>
+ #include <linux/string.h>
+
+@@ -34,8 +34,8 @@ static const struct leds_evt_name evt_na
+ { "red", led_red_on, led_red_off },
+ };
+
+-static ssize_t leds_store(struct sys_device *dev,
+- struct sysdev_attribute *attr,
++static ssize_t leds_store(struct device *dev,
++ struct device_attribute *attr,
+ const char *buf, size_t size)
+ {
+ int ret = -EINVAL, len = strcspn(buf, " ");
+@@ -69,15 +69,16 @@ static ssize_t leds_store(struct sys_dev
+ return ret;
+ }
+
+-static SYSDEV_ATTR(event, 0200, NULL, leds_store);
++static DEVICE_ATTR(event, 0200, NULL, leds_store);
+
+-static struct sysdev_class leds_sysclass = {
++static struct bus_type leds_subsys = {
+ .name = "leds",
++ .dev_name = "leds",
+ };
+
+-static struct sys_device leds_device = {
++static struct device leds_device = {
+ .id = 0,
+- .cls = &leds_sysclass,
++ .bus = &leds_subsys,
+ };
+
+ static int leds_suspend(void)
+@@ -105,11 +106,11 @@ static struct syscore_ops leds_syscore_o
+ static int __init leds_init(void)
+ {
+ int ret;
+- ret = sysdev_class_register(&leds_sysclass);
++ ret = subsys_system_register(&leds_subsys);
+ if (ret == 0)
+- ret = sysdev_register(&leds_device);
++ ret = device_register(&leds_device);
+ if (ret == 0)
+- ret = sysdev_create_file(&leds_device, &attr_event);
++ ret = device_create_file(&leds_device, &dev_attr_event);
+ if (ret == 0)
+ register_syscore_ops(&leds_syscore_ops);
+ return ret;
+--- a/arch/arm/mach-exynos/cpu.c
++++ b/arch/arm/mach-exynos/cpu.c
+@@ -9,7 +9,7 @@
+ */
+
+ #include <linux/sched.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+
+ #include <asm/mach/map.h>
+ #include <asm/mach/irq.h>
+@@ -243,17 +243,18 @@ void __init exynos4_init_irq(void)
+ s5p_init_irq(NULL, 0);
+ }
+
+-struct sysdev_class exynos4_sysclass = {
+- .name = "exynos4-core",
++struct bus_type exynos4_subsys = {
++ .name = "exynos4-core",
++ .dev_name = "exynos4-core",
+ };
+
+-static struct sys_device exynos4_sysdev = {
+- .cls = &exynos4_sysclass,
++static struct device exynos4_dev = {
++ .bus = &exynos4_subsys,
+ };
+
+ static int __init exynos4_core_init(void)
+ {
+- return sysdev_class_register(&exynos4_sysclass);
++ return subsys_system_register(&exynos4_subsys, NULL);
+ }
+ core_initcall(exynos4_core_init);
+
+@@ -294,5 +295,5 @@ int __init exynos_init(void)
+ if (soc_is_exynos4210() || soc_is_exynos4212() || soc_is_exynos4412())
+ s5p_reset_hook = exynos4_sw_reset;
+
+- return sysdev_register(&exynos4_sysdev);
++ return device_register(&exynos4_dev);
+ }
+--- a/arch/arm/mach-exynos/pm.c
++++ b/arch/arm/mach-exynos/pm.c
+@@ -205,7 +205,7 @@ static void exynos4_pm_prepare(void)
+
+ }
+
+-static int exynos4_pm_add(struct sys_device *sysdev)
++static int exynos4_pm_add(struct device *dev)
+ {
+ pm_cpu_prep = exynos4_pm_prepare;
+ pm_cpu_sleep = exynos4_cpu_suspend;
+@@ -301,7 +301,9 @@ static void exynos4_restore_pll(void)
+ } while (epll_wait || vpll_wait);
+ }
+
+-static struct sysdev_driver exynos4_pm_driver = {
++static struct subsys_interface exynos4_pm_interface = {
++ .name = "exynos4_pm",
++ .subsys = &exynos4_subsys,
+ .add = exynos4_pm_add,
+ };
+
+@@ -325,7 +327,7 @@ static __init int exynos4_pm_drvinit(voi
+ clk_put(pll_base);
+ }
+
+- return sysdev_driver_register(&exynos4_sysclass, &exynos4_pm_driver);
++ return subsys_interface_register(&exynos4_pm_interface);
+ }
+ arch_initcall(exynos4_pm_drvinit);
+
+--- a/arch/arm/mach-s3c2410/cpu-freq.c
++++ b/arch/arm/mach-s3c2410/cpu-freq.c
+@@ -16,7 +16,7 @@
+ #include <linux/interrupt.h>
+ #include <linux/ioport.h>
+ #include <linux/cpufreq.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/clk.h>
+ #include <linux/err.h>
+ #include <linux/io.h>
+@@ -115,24 +115,25 @@ static struct s3c_cpufreq_info s3c2410_c
+ .debug_io_show = s3c_cpufreq_debugfs_call(s3c2410_iotiming_debugfs),
+ };
+
+-static int s3c2410_cpufreq_add(struct sys_device *sysdev)
++static int s3c2410_cpufreq_add(struct device *dev)
+ {
+ return s3c_cpufreq_register(&s3c2410_cpufreq_info);
+ }
+
+-static struct sysdev_driver s3c2410_cpufreq_driver = {
++static struct subsys_interface s3c2410_cpufreq_interface = {
++ .name = "s3c2410_cpufreq",
++ .subsys = &s3c2410_subsys,
+ .add = s3c2410_cpufreq_add,
+ };
+
+ static int __init s3c2410_cpufreq_init(void)
+ {
+- return sysdev_driver_register(&s3c2410_sysclass,
+- &s3c2410_cpufreq_driver);
++ return subsys_interface_register(&s3c2410_cpufreq_interface);
+ }
+
+ arch_initcall(s3c2410_cpufreq_init);
+
+-static int s3c2410a_cpufreq_add(struct sys_device *sysdev)
++static int s3c2410a_cpufreq_add(struct device *dev)
+ {
+ /* alter the maximum freq settings for S3C2410A. If a board knows
+ * it only has a maximum of 200, then it should register its own
+@@ -143,17 +144,18 @@ static int s3c2410a_cpufreq_add(struct s
+ s3c2410_cpufreq_info.max.pclk = 66500000;
+ s3c2410_cpufreq_info.name = "s3c2410a";
+
+- return s3c2410_cpufreq_add(sysdev);
++ return s3c2410_cpufreq_add(dev);
+ }
+
+-static struct sysdev_driver s3c2410a_cpufreq_driver = {
++static struct subsys_interface s3c2410a_cpufreq_interface = {
++ .name = "s3c2410a_cpufreq",
++ .subsys = &s3c2410a_subsys,
+ .add = s3c2410a_cpufreq_add,
+ };
+
+ static int __init s3c2410a_cpufreq_init(void)
+ {
+- return sysdev_driver_register(&s3c2410a_sysclass,
+- &s3c2410a_cpufreq_driver);
++ return subsys_interface_register(&s3c2410a_cpufreq_interface);
+ }
+
+ arch_initcall(s3c2410a_cpufreq_init);
+--- a/arch/arm/mach-s3c2410/dma.c
++++ b/arch/arm/mach-s3c2410/dma.c
+@@ -14,7 +14,7 @@
+
+ #include <linux/kernel.h>
+ #include <linux/init.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/serial_core.h>
+
+ #include <mach/map.h>
+@@ -132,7 +132,7 @@ static struct s3c24xx_dma_order __initda
+ },
+ };
+
+-static int __init s3c2410_dma_add(struct sys_device *sysdev)
++static int __init s3c2410_dma_add(struct device *dev)
+ {
+ s3c2410_dma_init();
+ s3c24xx_dma_order_set(&s3c2410_dma_order);
+@@ -140,24 +140,28 @@ static int __init s3c2410_dma_add(struct
+ }
+
+ #if defined(CONFIG_CPU_S3C2410)
+-static struct sysdev_driver s3c2410_dma_driver = {
++static struct subsys_interface s3c2410_dma_interface = {
++ .name = "s3c2410_dma",
++ .subsys = &s3c2410_subsys,
+ .add = s3c2410_dma_add,
+ };
+
+ static int __init s3c2410_dma_drvinit(void)
+ {
+- return sysdev_driver_register(&s3c2410_sysclass, &s3c2410_dma_driver);
++ return subsys_interface_register(&s3c2410_interface);
+ }
+
+ arch_initcall(s3c2410_dma_drvinit);
+
+-static struct sysdev_driver s3c2410a_dma_driver = {
++static struct subsys_interface s3c2410a_dma_interface = {
++ .name = "s3c2410a_dma",
++ .subsys = &s3c2410a_subsys,
+ .add = s3c2410_dma_add,
+ };
+
+ static int __init s3c2410a_dma_drvinit(void)
+ {
+- return sysdev_driver_register(&s3c2410a_sysclass, &s3c2410a_dma_driver);
++ return subsys_interface_register(&s3c2410a_dma_interface);
+ }
+
+ arch_initcall(s3c2410a_dma_drvinit);
+@@ -165,13 +169,15 @@ arch_initcall(s3c2410a_dma_drvinit);
+
+ #if defined(CONFIG_CPU_S3C2442)
+ /* S3C2442 DMA contains the same selection table as the S3C2410 */
+-static struct sysdev_driver s3c2442_dma_driver = {
++static struct subsys_interface s3c2442_dma_interface = {
++ .name = "s3c2442_dma",
++ .subsys = &s3c2442_subsys,
+ .add = s3c2410_dma_add,
+ };
+
+ static int __init s3c2442_dma_drvinit(void)
+ {
+- return sysdev_driver_register(&s3c2442_sysclass, &s3c2442_dma_driver);
++ return subsys_interface_register(&s3c2442_dma_interface);
+ }
+
+ arch_initcall(s3c2442_dma_drvinit);
+--- a/arch/arm/mach-s3c2410/include/mach/dma.h
++++ b/arch/arm/mach-s3c2410/include/mach/dma.h
+@@ -13,7 +13,7 @@
+ #ifndef __ASM_ARCH_DMA_H
+ #define __ASM_ARCH_DMA_H __FILE__
+
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+
+ #define MAX_DMA_TRANSFER_SIZE 0x100000 /* Data Unit is half word */
+
+@@ -202,7 +202,7 @@ struct s3c2410_dma_chan {
+ struct s3c2410_dma_buf *end; /* end of queue */
+
+ /* system device */
+- struct sys_device dev;
++ struct device dev;
+ };
+
+ typedef unsigned long dma_device_t;
+--- a/arch/arm/mach-s3c2410/pll.c
++++ b/arch/arm/mach-s3c2410/pll.c
+@@ -25,7 +25,7 @@
+ #include <linux/types.h>
+ #include <linux/kernel.h>
+ #include <linux/module.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/list.h>
+ #include <linux/clk.h>
+ #include <linux/err.h>
+@@ -66,30 +66,34 @@ static struct cpufreq_frequency_table pl
+ { .frequency = 270000000, .index = PLLVAL(127, 1, 1), },
+ };
+
+-static int s3c2410_plls_add(struct sys_device *dev)
++static int s3c2410_plls_add(struct device *dev)
+ {
+ return s3c_plltab_register(pll_vals_12MHz, ARRAY_SIZE(pll_vals_12MHz));
+ }
+
+-static struct sysdev_driver s3c2410_plls_drv = {
++static struct subsys_interface s3c2410_plls_interface = {
++ .name = "s3c2410_plls",
++ .susbys = &s3c2410_subsys,
+ .add = s3c2410_plls_add,
+ };
+
+ static int __init s3c2410_pll_init(void)
+ {
+- return sysdev_driver_register(&s3c2410_sysclass, &s3c2410_plls_drv);
++ return subsys_interface_register(&s3c2410_plls_interface);
+
+ }
+
+ arch_initcall(s3c2410_pll_init);
+
+-static struct sysdev_driver s3c2410a_plls_drv = {
++static struct subsys_interface s3c2410a_plls_interface = {
++ .name = "s3c2410a_plls",
++ .subsys = &s3c2410a_subsys,
+ .add = s3c2410_plls_add,
+ };
+
+ static int __init s3c2410a_pll_init(void)
+ {
+- return sysdev_driver_register(&s3c2410a_sysclass, &s3c2410a_plls_drv);
++ return subsys_interface_register(&s3c2410a_plls_interface);
+ }
+
+ arch_initcall(s3c2410a_pll_init);
+--- a/arch/arm/mach-s3c2410/pm.c
++++ b/arch/arm/mach-s3c2410/pm.c
+@@ -24,7 +24,7 @@
+ #include <linux/suspend.h>
+ #include <linux/errno.h>
+ #include <linux/time.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/syscore_ops.h>
+ #include <linux/gpio.h>
+ #include <linux/io.h>
+@@ -111,7 +111,7 @@ struct syscore_ops s3c2410_pm_syscore_op
+ .resume = s3c2410_pm_resume,
+ };
+
+-static int s3c2410_pm_add(struct sys_device *dev)
++static int s3c2410_pm_add(struct device *dev)
+ {
+ pm_cpu_prep = s3c2410_pm_prepare;
+ pm_cpu_sleep = s3c2410_cpu_suspend;
+@@ -120,7 +120,9 @@ static int s3c2410_pm_add(struct sys_dev
+ }
+
+ #if defined(CONFIG_CPU_S3C2410)
+-static struct sysdev_driver s3c2410_pm_driver = {
++static struct subsys_interface s3c2410_pm_interface = {
++ .name = "s3c2410_pm",
++ .subsys = &s3c2410_subsys,
+ .add = s3c2410_pm_add,
+ };
+
+@@ -128,44 +130,50 @@ static struct sysdev_driver s3c2410_pm_d
+
+ static int __init s3c2410_pm_drvinit(void)
+ {
+- return sysdev_driver_register(&s3c2410_sysclass, &s3c2410_pm_driver);
++ return subsys_interface_register(&s3c2410_pm_interface);
+ }
+
+ arch_initcall(s3c2410_pm_drvinit);
+
+-static struct sysdev_driver s3c2410a_pm_driver = {
++static struct subsys_interface s3c2410a_pm_interface = {
++ .name = "s3c2410a_pm",
++ subsys = &s3c2410a_subsys,
+ .add = s3c2410_pm_add,
+ };
+
+ static int __init s3c2410a_pm_drvinit(void)
+ {
+- return sysdev_driver_register(&s3c2410a_sysclass, &s3c2410a_pm_driver);
++ return subsys_interface_register(&s3c2410a_pm_interface);
+ }
+
+ arch_initcall(s3c2410a_pm_drvinit);
+ #endif
+
+ #if defined(CONFIG_CPU_S3C2440)
+-static struct sysdev_driver s3c2440_pm_driver = {
++static struct subsys_interface s3c2440_pm_interface = {
++ .name = "s3c2440_pm",
++ .subsys = &s3c2440_subsys,
+ .add = s3c2410_pm_add,
+ };
+
+ static int __init s3c2440_pm_drvinit(void)
+ {
+- return sysdev_driver_register(&s3c2440_sysclass, &s3c2440_pm_driver);
++ return subsys_interface_register(&s3c2440_pm_interface);
+ }
+
+ arch_initcall(s3c2440_pm_drvinit);
+ #endif
+
+ #if defined(CONFIG_CPU_S3C2442)
+-static struct sysdev_driver s3c2442_pm_driver = {
++static struct subsys_interface s3c2442_pm_interface = {
++ .name = "s3c2442_pm",
++ .subsys = &s3c2442_subsys,
+ .add = s3c2410_pm_add,
+ };
+
+ static int __init s3c2442_pm_drvinit(void)
+ {
+- return sysdev_driver_register(&s3c2442_sysclass, &s3c2442_pm_driver);
++ return subsys_interface_register(&s3c2442_pm_interface);
+ }
+
+ arch_initcall(s3c2442_pm_drvinit);
+--- a/arch/arm/mach-s3c2410/s3c2410.c
++++ b/arch/arm/mach-s3c2410/s3c2410.c
+@@ -18,7 +18,7 @@
+ #include <linux/init.h>
+ #include <linux/gpio.h>
+ #include <linux/clk.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/syscore_ops.h>
+ #include <linux/serial_core.h>
+ #include <linux/platform_device.h>
+@@ -131,22 +131,24 @@ void __init s3c2410_init_clocks(int xtal
+ s3c24xx_register_clock(&s3c2410_armclk);
+ }
+
+-struct sysdev_class s3c2410_sysclass = {
++struct bus_type s3c2410_subsys = {
+ .name = "s3c2410-core",
++ .dev_name = "s3c2410-core",
+ };
+
+ /* Note, we would have liked to name this s3c2410-core, but we cannot
+- * register two sysdev_class with the same name.
++ * register two subsystems with the same name.
+ */
+-struct sysdev_class s3c2410a_sysclass = {
++struct bus_type s3c2410a_subsys = {
+ .name = "s3c2410a-core",
++ .dev_name = "s3c2410a-core",
+ };
+
+-static struct sys_device s3c2410_sysdev = {
+- .cls = &s3c2410_sysclass,
++static struct device s3c2410_dev = {
++ .bus = &s3c2410_subsys,
+ };
+
+-/* 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 s3c2410 based system)
+ * as a driver which may support both 2410 and 2440 may try and use it.
+@@ -154,14 +156,14 @@ static struct sys_device s3c2410_sysdev
+
+ static int __init s3c2410_core_init(void)
+ {
+- return sysdev_class_register(&s3c2410_sysclass);
++ return subsys_system_register(&s3c2410_subsys, NULL);
+ }
+
+ core_initcall(s3c2410_core_init);
+
+ static int __init s3c2410a_core_init(void)
+ {
+- return sysdev_class_register(&s3c2410a_sysclass);
++ return subsys_system_register(&s3c2410a_subsys);
+ }
+
+ core_initcall(s3c2410a_core_init);
+@@ -175,11 +177,11 @@ int __init s3c2410_init(void)
+ #endif
+ register_syscore_ops(&s3c24xx_irq_syscore_ops);
+
+- return sysdev_register(&s3c2410_sysdev);
++ return device_register(&s3c2410_dev);
+ }
+
+ int __init s3c2410a_init(void)
+ {
+- s3c2410_sysdev.cls = &s3c2410a_sysclass;
++ s3c2410_dev.bus = &s3c2410a_subsys;
+ return s3c2410_init();
+ }
+--- a/arch/arm/mach-s3c2412/cpu-freq.c
++++ b/arch/arm/mach-s3c2412/cpu-freq.c
+@@ -16,7 +16,7 @@
+ #include <linux/interrupt.h>
+ #include <linux/ioport.h>
+ #include <linux/cpufreq.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/delay.h>
+ #include <linux/clk.h>
+ #include <linux/err.h>
+@@ -194,7 +194,7 @@ static struct s3c_cpufreq_info s3c2412_c
+ .debug_io_show = s3c_cpufreq_debugfs_call(s3c2412_iotiming_debugfs),
+ };
+
+-static int s3c2412_cpufreq_add(struct sys_device *sysdev)
++static int s3c2412_cpufreq_add(struct device *dev)
+ {
+ unsigned long fclk_rate;
+
+@@ -244,14 +244,15 @@ err_fclk:
+ return -ENOENT;
+ }
+
+-static struct sysdev_driver s3c2412_cpufreq_driver = {
++static struct subsys_interface s3c2412_cpufreq_interface = {
++ .name = "s3c2412_cpufreq",
++ .subsys = &s3c2412_subsys,
+ .add = s3c2412_cpufreq_add,
+ };
+
+ static int s3c2412_cpufreq_init(void)
+ {
+- return sysdev_driver_register(&s3c2412_sysclass,
+- &s3c2412_cpufreq_driver);
++ return subsys_interface_register(&s3c2412_cpufreq_interface);
+ }
+
+ arch_initcall(s3c2412_cpufreq_init);
+--- a/arch/arm/mach-s3c2412/dma.c
++++ b/arch/arm/mach-s3c2412/dma.c
+@@ -14,7 +14,7 @@
+
+ #include <linux/kernel.h>
+ #include <linux/init.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/serial_core.h>
+ #include <linux/io.h>
+
+@@ -159,19 +159,21 @@ static struct s3c24xx_dma_selection __in
+ .map_size = ARRAY_SIZE(s3c2412_dma_mappings),
+ };
+
+-static int __init s3c2412_dma_add(struct sys_device *sysdev)
++static int __init s3c2412_dma_add(struct device *dev)
+ {
+ s3c2410_dma_init();
+ return s3c24xx_dma_init_map(&s3c2412_dma_sel);
+ }
+
+-static struct sysdev_driver s3c2412_dma_driver = {
++static struct subsys_interface s3c2412_dma_interface = {
++ .name = "s3c2412_dma",
++ .subsys = &s3c2412_subsys,
+ .add = s3c2412_dma_add,
+ };
+
+ static int __init s3c2412_dma_init(void)
+ {
+- return sysdev_driver_register(&s3c2412_sysclass, &s3c2412_dma_driver);
++ return subsys_interface_register(&s3c2412_dma_interface);
+ }
+
+ arch_initcall(s3c2412_dma_init);
+--- a/arch/arm/mach-s3c2412/irq.c
++++ b/arch/arm/mach-s3c2412/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>
+@@ -170,7 +170,7 @@ static int s3c2412_irq_rtc_wake(struct i
+
+ static struct irq_chip s3c2412_irq_rtc_chip;
+
+-static int s3c2412_irq_add(struct sys_device *sysdev)
++static int s3c2412_irq_add(struct device *dev)
+ {
+ unsigned int irqno;
+
+@@ -200,13 +200,15 @@ static int s3c2412_irq_add(struct sys_de
+ return 0;
+ }
+
+-static struct sysdev_driver s3c2412_irq_driver = {
++static struct subsys_interface s3c2412_irq_interface = {
++ .name = "s3c2412_irq",
++ .subsys = &s3c2412_subsys,
+ .add = s3c2412_irq_add,
+ };
+
+ static int s3c2412_irq_init(void)
+ {
+- return sysdev_driver_register(&s3c2412_sysclass, &s3c2412_irq_driver);
++ return subsys_interface_register(&s3c2412_irq_interface);
+ }
+
+ arch_initcall(s3c2412_irq_init);
+--- a/arch/arm/mach-s3c2412/pm.c
++++ b/arch/arm/mach-s3c2412/pm.c
+@@ -16,7 +16,7 @@
+ #include <linux/list.h>
+ #include <linux/timer.h>
+ #include <linux/init.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/syscore_ops.h>
+ #include <linux/platform_device.h>
+ #include <linux/io.h>
+@@ -56,7 +56,7 @@ static void s3c2412_pm_prepare(void)
+ {
+ }
+
+-static int s3c2412_pm_add(struct sys_device *sysdev)
++static int s3c2412_pm_add(struct device *dev)
+ {
+ pm_cpu_prep = s3c2412_pm_prepare;
+ pm_cpu_sleep = s3c2412_cpu_suspend;
+@@ -87,13 +87,15 @@ static struct sleep_save s3c2412_sleep[]
+ SAVE_ITEM(S3C2413_GPJSLPCON),
+ };
+
+-static struct sysdev_driver s3c2412_pm_driver = {
++static struct subsys_interface s3c2412_pm_interface = {
++ .name = "s3c2412_pm",
++ .subsys = &s3c2412_subsys,
+ .add = s3c2412_pm_add,
+ };
+
+ static __init int s3c2412_pm_init(void)
+ {
+- return sysdev_driver_register(&s3c2412_sysclass, &s3c2412_pm_driver);
++ return subsys_interface_register_register(&s3c2412_pm_interface);
+ }
+
+ arch_initcall(s3c2412_pm_init);
+--- a/arch/arm/mach-s3c2440/dma.c
++++ b/arch/arm/mach-s3c2440/dma.c
+@@ -14,7 +14,7 @@
+
+ #include <linux/kernel.h>
+ #include <linux/init.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/serial_core.h>
+
+ #include <mach/map.h>
+@@ -174,20 +174,22 @@ static struct s3c24xx_dma_order __initda
+ },
+ };
+
+-static int __init s3c2440_dma_add(struct sys_device *sysdev)
++static int __init s3c2440_dma_add(struct device *dev)
+ {
+ s3c2410_dma_init();
+ s3c24xx_dma_order_set(&s3c2440_dma_order);
+ return s3c24xx_dma_init_map(&s3c2440_dma_sel);
+ }
+
+-static struct sysdev_driver s3c2440_dma_driver = {
++static struct subsys_interface s3c2440_dma_interface = {
++ .name = "s3c2440_dma",
++ .subsys = &s3c2440_subsys,
+ .add = s3c2440_dma_add,
+ };
+
+ static int __init s3c2440_dma_init(void)
+ {
+- return sysdev_driver_register(&s3c2440_sysclass, &s3c2440_dma_driver);
++ return subsys_interface_register(&s3c2440_dma_interface);
+ }
+
+ arch_initcall(s3c2440_dma_init);
+--- a/arch/arm/mach-s3c2443/dma.c
++++ b/arch/arm/mach-s3c2443/dma.c
+@@ -14,7 +14,7 @@
+
+ #include <linux/kernel.h>
+ #include <linux/init.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/serial_core.h>
+ #include <linux/io.h>
+
+@@ -135,19 +135,21 @@ static struct s3c24xx_dma_selection __in
+ .map_size = ARRAY_SIZE(s3c2443_dma_mappings),
+ };
+
+-static int __init s3c2443_dma_add(struct sys_device *sysdev)
++static int __init s3c2443_dma_add(struct device *dev)
+ {
+ s3c24xx_dma_init(6, IRQ_S3C2443_DMA0, 0x100);
+ return s3c24xx_dma_init_map(&s3c2443_dma_sel);
+ }
+
+-static struct sysdev_driver s3c2443_dma_driver = {
++static struct subsys_interface s3c2443_dma_interface = {
++ .name = "s3c2443_dma",
++ .subsys = &s3c2443_subsys,
+ .add = s3c2443_dma_add,
+ };
+
+ static int __init s3c2443_dma_init(void)
+ {
+- return sysdev_driver_register(&s3c2443_sysclass, &s3c2443_dma_driver);
++ return subsys_interface_register(&s3c2443_dma_interface);
+ }
+
+ arch_initcall(s3c2443_dma_init);
+--- a/arch/arm/mach-s3c64xx/dma.c
++++ b/arch/arm/mach-s3c64xx/dma.c
+@@ -16,7 +16,7 @@
+ #include <linux/module.h>
+ #include <linux/interrupt.h>
+ #include <linux/dmapool.h>
+-#include <linux/sysdev.h>
++#include <linux/device.h>
+ #include <linux/errno.h>
+ #include <linux/slab.h>
+ #include <linux/delay.h>
+@@ -35,7 +35,7 @@
+ /* dma channel state information */
+
+ struct s3c64xx_dmac {
+- struct sys_device sysdev;
++ struct device dev;
+ struct clk *clk;
+ void __iomem *regs;
+ struct s3c2410_dma_chan *channels;
+@@ -631,8 +631,9 @@ static irqreturn_t s3c64xx_dma_irq(int i
+ return IRQ_HANDLED;
+ }
+
+-static struct sysdev_class dma_sysclass = {
++static struct bus_type dma_subsys = {
+ .name = "s3c64xx-dma",
++ .dev_name = "s3c64xx-dma",
+ };
+
+ static int s3c64xx_dma_init1(int chno, enum dma_ch chbase,
+@@ -651,12 +652,12 @@ static int s3c64xx_dma_init1(int chno, e
+ return -ENOMEM;
+ }
+
+- dmac->sysdev.id = chno / 8;
+- dmac->sysdev.cls = &dma_sysclass;
++ dmac->dev.id = chno / 8;
++ dmac->dev.bus = &dma_subsys;
+
+- err = sysdev_register(&dmac->sysdev);
++ err = device_register(&dmac->dev);
+ if (err) {
+- printk(KERN_ERR "%s: failed to register sysdevice\n", __func__);
++ printk(KERN_ERR "%s: failed to register device\n", __func__);
+ goto err_alloc;
+ }
+
+@@ -667,7 +668,7 @@ static int s3c64xx_dma_init1(int chno, e
+ goto err_dev;
+ }
+
+- snprintf(clkname, sizeof(clkname), "dma%d", dmac->sysdev.id);
++ snprintf(clkname, sizeof(clkname), "dma%d", dmac->dev.id);
+
+ dmac->clk = clk_get(NULL, clkname);
+ if (IS_ERR(dmac->clk)) {
+@@ -715,7 +716,7 @@ err_clk:
+ err_map:
+ iounmap(regs);
+ err_dev:
+- sysdev_unregister(&dmac->sysdev);
++ device_unregister(&dmac->dev);
+ err_alloc:
+ kfree(dmac);
+ return err;
+@@ -733,9 +734,9 @@ static int __init s3c64xx_dma_init(void)
+ return -ENOMEM;
+ }
+
+- ret = sysdev_class_register(&dma_sysclass);
++ ret = subsys_system_register(&dma_subsys, NULL);
+ if (ret) {
+- printk(KERN_ERR "%s: failed to create sysclass\n", __func__);
++ printk(KERN_ERR "%s: failed to create subsys\n", __func__);
+ return -ENOMEM;
+ }
+
+--- 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
+ extern struct syscore_ops s3c244x_pm_syscore_ops;
+ extern struct syscore_ops s3c64xx_irq_syscore_ops;
+
+-/* system device classes */
++/* system device subsystems */
+
+-extern struct sysdev_class s3c2410_sysclass;
+-extern struct sysdev_class s3c2410a_sysclass;
+-extern struct sysdev_class s3c2412_sysclass;
+-extern struct sysdev_class s3c2416_sysclass;
+-extern struct sysdev_class s3c2440_sysclass;
+-extern struct sysdev_class s3c2442_sysclass;
+-extern struct sysdev_class s3c2443_sysclass;
+-extern struct sysdev_class s3c6410_sysclass;
+-extern struct sysdev_class s3c64xx_sysclass;
+-extern struct sysdev_class s5p64x0_sysclass;
+-extern struct sysdev_class s5pv210_sysclass;
+-extern struct sysdev_class exynos4_sysclass;
++extern struct bus_type s3c2410_subsys;
++extern struct bus_type s3c2410a_subsys;
++extern struct bus_type s3c2412_subsys;
++extern struct bus_type s3c2416_subsys;
++extern struct bus_type s3c2440_subsys;
++extern struct bus_type s3c2442_subsys;
++extern struct bus_type s3c2443_subsys;
++extern struct bus_type s3c6410_subsys;
++extern struct bus_type s3c64xx_subsys;
++extern struct bus_type s5p64x0_subsys;
++extern struct bus_type s5pv210_subsys;
++extern struct bus_type exynos4_subsys;
+
+ extern void (*s5pc1xx_idle)(void);
+
+--- a/arch/arm/plat-samsung/include/plat/dma-s3c24xx.h
++++ b/arch/arm/plat-samsung/include/plat/dma-s3c24xx.h
+@@ -12,7 +12,7 @@
+
+ #include <plat/dma-core.h>
+
+-extern struct sysdev_class dma_sysclass;
++extern struct bus_type dma_subsys;
+ extern struct s3c2410_dma_chan s3c2410_chans[S3C_DMA_CHANNELS];
+
+ #define DMA_CH_VALID (1<<31)
+--- a/arch/arm/plat-samsung/include/plat/pm.h
++++ b/arch/arm/plat-samsung/include/plat/pm.h
+@@ -17,7 +17,7 @@
+
+ #include <linux/irq.h>
+
+-struct sys_device;
++struct device;
+
+ #ifdef CONFIG_PM
+
diff --git a/series b/series
index 1ad4524..336f565 100644
--- a/series
+++ b/series
@@ -15,4 +15,5 @@
17-mips-txx9-7segled.patch
18-mips-txx9_sram.patch
19-m68k-gpio.patch
+20-arm.patch
99-core-remove.patch