| From 8d126bb8929dba08753fdc1acb217f20a3c4ae43 Mon Sep 17 00:00:00 2001 |
| From: Kay Sievers <kay.sievers@vrfy.org> |
| Date: Wed, 21 Dec 2011 15:09:52 -0800 |
| Subject: sh: intc - convert sysdev_class to a regular subsystem |
| |
| After all sysdev classes are ported to regular driver core entities, the |
| sysdev implementation will be entirely removed from the kernel. |
| |
| Cc: Paul Mundt <lethal@linux-sh.org> |
| Cc: Magnus Damm <magnus.damm@gmail.com> |
| Cc: Paul Gortmaker <paul.gortmaker@windriver.com> |
| Signed-off-by: Kay Sievers <kay.sievers@vrfy.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| (cherry picked from commit f4e73bfcd9cca0b64cc8096175852936fb1d111f) |
| |
| Signed-off-by: Simon Horman <horms@verge.net.au> |
| --- |
| drivers/sh/intc/core.c | 29 +++++++++++++++-------------- |
| drivers/sh/intc/internals.h | 6 +++--- |
| drivers/sh/intc/userimask.c | 16 ++++++++-------- |
| 3 files changed, 26 insertions(+), 25 deletions(-) |
| |
| diff --git a/drivers/sh/intc/core.c b/drivers/sh/intc/core.c |
| index 8b7a141..e85512d 100644 |
| --- a/drivers/sh/intc/core.c |
| +++ b/drivers/sh/intc/core.c |
| @@ -25,7 +25,7 @@ |
| #include <linux/stat.h> |
| #include <linux/interrupt.h> |
| #include <linux/sh_intc.h> |
| -#include <linux/sysdev.h> |
| +#include <linux/device.h> |
| #include <linux/syscore_ops.h> |
| #include <linux/list.h> |
| #include <linux/spinlock.h> |
| @@ -434,46 +434,47 @@ struct syscore_ops intc_syscore_ops = { |
| .resume = intc_resume, |
| }; |
| |
| -struct sysdev_class intc_sysdev_class = { |
| +struct bus_type intc_subsys = { |
| .name = "intc", |
| + .dev_name = "intc", |
| }; |
| |
| static ssize_t |
| -show_intc_name(struct sys_device *dev, struct sysdev_attribute *attr, char *buf) |
| +show_intc_name(struct device *dev, struct device_attribute *attr, char *buf) |
| { |
| struct intc_desc_int *d; |
| |
| - d = container_of(dev, struct intc_desc_int, sysdev); |
| + d = container_of(dev, struct intc_desc_int, dev); |
| |
| return sprintf(buf, "%s\n", d->chip.name); |
| } |
| |
| -static SYSDEV_ATTR(name, S_IRUGO, show_intc_name, NULL); |
| +static DEVICE_ATTR(name, S_IRUGO, show_intc_name, NULL); |
| |
| -static int __init register_intc_sysdevs(void) |
| +static int __init register_intc_devs(void) |
| { |
| struct intc_desc_int *d; |
| int error; |
| |
| register_syscore_ops(&intc_syscore_ops); |
| |
| - error = sysdev_class_register(&intc_sysdev_class); |
| + error = subsys_system_register(&intc_subsys, NULL); |
| if (!error) { |
| list_for_each_entry(d, &intc_list, list) { |
| - d->sysdev.id = d->index; |
| - d->sysdev.cls = &intc_sysdev_class; |
| - error = sysdev_register(&d->sysdev); |
| + d->dev.id = d->index; |
| + d->dev.bus = &intc_subsys; |
| + error = device_register(&d->dev); |
| if (error == 0) |
| - error = sysdev_create_file(&d->sysdev, |
| - &attr_name); |
| + error = device_create_file(&d->dev, |
| + &dev_attr_name); |
| if (error) |
| break; |
| } |
| } |
| |
| if (error) |
| - pr_err("sysdev registration error\n"); |
| + pr_err("device registration error\n"); |
| |
| return error; |
| } |
| -device_initcall(register_intc_sysdevs); |
| +device_initcall(register_intc_devs); |
| diff --git a/drivers/sh/intc/internals.h b/drivers/sh/intc/internals.h |
| index 5b93485..1c2722e 100644 |
| --- a/drivers/sh/intc/internals.h |
| +++ b/drivers/sh/intc/internals.h |
| @@ -4,7 +4,7 @@ |
| #include <linux/kernel.h> |
| #include <linux/types.h> |
| #include <linux/radix-tree.h> |
| -#include <linux/sysdev.h> |
| +#include <linux/device.h> |
| |
| #define _INTC_MK(fn, mode, addr_e, addr_d, width, shift) \ |
| ((shift) | ((width) << 5) | ((fn) << 9) | ((mode) << 13) | \ |
| @@ -51,7 +51,7 @@ struct intc_subgroup_entry { |
| |
| struct intc_desc_int { |
| struct list_head list; |
| - struct sys_device sysdev; |
| + struct device dev; |
| struct radix_tree_root tree; |
| raw_spinlock_t lock; |
| unsigned int index; |
| @@ -157,7 +157,7 @@ void _intc_enable(struct irq_data *data, unsigned long handle); |
| extern struct list_head intc_list; |
| extern raw_spinlock_t intc_big_lock; |
| extern unsigned int nr_intc_controllers; |
| -extern struct sysdev_class intc_sysdev_class; |
| +extern struct bus_type intc_subsys; |
| |
| unsigned int intc_get_dfl_prio_level(void); |
| unsigned int intc_get_prio_level(unsigned int irq); |
| diff --git a/drivers/sh/intc/userimask.c b/drivers/sh/intc/userimask.c |
| index 56bf933..e649cea 100644 |
| --- a/drivers/sh/intc/userimask.c |
| +++ b/drivers/sh/intc/userimask.c |
| @@ -10,7 +10,7 @@ |
| #define pr_fmt(fmt) "intc: " fmt |
| |
| #include <linux/errno.h> |
| -#include <linux/sysdev.h> |
| +#include <linux/device.h> |
| #include <linux/init.h> |
| #include <linux/io.h> |
| #include <linux/stat.h> |
| @@ -20,15 +20,15 @@ |
| static void __iomem *uimask; |
| |
| static ssize_t |
| -show_intc_userimask(struct sysdev_class *cls, |
| - struct sysdev_class_attribute *attr, char *buf) |
| +show_intc_userimask(struct device *dev, |
| + struct device_attribute *attr, char *buf) |
| { |
| return sprintf(buf, "%d\n", (__raw_readl(uimask) >> 4) & 0xf); |
| } |
| |
| static ssize_t |
| -store_intc_userimask(struct sysdev_class *cls, |
| - struct sysdev_class_attribute *attr, |
| +store_intc_userimask(struct device *dev, |
| + struct device_attribute *attr, |
| const char *buf, size_t count) |
| { |
| unsigned long level; |
| @@ -55,8 +55,8 @@ store_intc_userimask(struct sysdev_class *cls, |
| return count; |
| } |
| |
| -static SYSDEV_CLASS_ATTR(userimask, S_IRUSR | S_IWUSR, |
| - show_intc_userimask, store_intc_userimask); |
| +static DEVICE_ATTR(userimask, S_IRUSR | S_IWUSR, |
| + show_intc_userimask, store_intc_userimask); |
| |
| |
| static int __init userimask_sysdev_init(void) |
| @@ -64,7 +64,7 @@ static int __init userimask_sysdev_init(void) |
| if (unlikely(!uimask)) |
| return -ENXIO; |
| |
| - return sysdev_class_create_file(&intc_sysdev_class, &attr_userimask); |
| + return device_create_file(intc_subsys.dev_root, &dev_attr_userimask); |
| } |
| late_initcall(userimask_sysdev_init); |
| |
| -- |
| 1.7.10 |
| |