aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ipq806x/patches-4.4/009-3-watchdog-Use-static-struct-class-watchdog_class-instead-of-pointer.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/ipq806x/patches-4.4/009-3-watchdog-Use-static-struct-class-watchdog_class-instead-of-pointer.patch')
-rw-r--r--target/linux/ipq806x/patches-4.4/009-3-watchdog-Use-static-struct-class-watchdog_class-instead-of-pointer.patch111
1 files changed, 111 insertions, 0 deletions
diff --git a/target/linux/ipq806x/patches-4.4/009-3-watchdog-Use-static-struct-class-watchdog_class-instead-of-pointer.patch b/target/linux/ipq806x/patches-4.4/009-3-watchdog-Use-static-struct-class-watchdog_class-instead-of-pointer.patch
new file mode 100644
index 0000000000..1906a1f4e5
--- /dev/null
+++ b/target/linux/ipq806x/patches-4.4/009-3-watchdog-Use-static-struct-class-watchdog_class-instead-of-pointer.patch
@@ -0,0 +1,111 @@
+From 906d7a5cfeda508e7361f021605579a00cd82815 Mon Sep 17 00:00:00 2001
+From: Pratyush Anand <panand@redhat.com>
+Date: Thu, 17 Dec 2015 17:53:58 +0530
+Subject: watchdog: Use static struct class watchdog_class in stead of pointer
+
+We need few sysfs attributes to know different status of a watchdog device.
+To do that, we need to associate .dev_groups with watchdog_class. So
+convert it from pointer to static.
+Putting this static struct in watchdog_dev.c, so that static device
+attributes defined in that file can be attached to it.
+
+Signed-off-by: Pratyush Anand <panand@redhat.com>
+Suggested-by: Guenter Roeck <linux@roeck-us.net>
+Reviewed-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
+---
+ drivers/watchdog/watchdog_core.c | 15 ++-------------
+ drivers/watchdog/watchdog_core.h | 2 +-
+ drivers/watchdog/watchdog_dev.c | 26 ++++++++++++++++++++++----
+ 3 files changed, 25 insertions(+), 18 deletions(-)
+
+--- a/drivers/watchdog/watchdog_core.c
++++ b/drivers/watchdog/watchdog_core.c
+@@ -370,19 +370,9 @@ static int __init watchdog_deferred_regi
+
+ static int __init watchdog_init(void)
+ {
+- int err;
+-
+- watchdog_class = class_create(THIS_MODULE, "watchdog");
+- if (IS_ERR(watchdog_class)) {
+- pr_err("couldn't create class\n");
++ watchdog_class = watchdog_dev_init();
++ if (IS_ERR(watchdog_class))
+ return PTR_ERR(watchdog_class);
+- }
+-
+- err = watchdog_dev_init();
+- if (err < 0) {
+- class_destroy(watchdog_class);
+- return err;
+- }
+
+ watchdog_deferred_registration();
+ return 0;
+@@ -391,7 +381,6 @@ static int __init watchdog_init(void)
+ static void __exit watchdog_exit(void)
+ {
+ watchdog_dev_exit();
+- class_destroy(watchdog_class);
+ ida_destroy(&watchdog_ida);
+ }
+
+--- a/drivers/watchdog/watchdog_core.h
++++ b/drivers/watchdog/watchdog_core.h
+@@ -33,5 +33,5 @@
+ */
+ extern int watchdog_dev_register(struct watchdog_device *);
+ extern int watchdog_dev_unregister(struct watchdog_device *);
+-extern int __init watchdog_dev_init(void);
++extern struct class * __init watchdog_dev_init(void);
+ extern void __exit watchdog_dev_exit(void);
+--- a/drivers/watchdog/watchdog_dev.c
++++ b/drivers/watchdog/watchdog_dev.c
+@@ -581,18 +581,35 @@ int watchdog_dev_unregister(struct watch
+ return 0;
+ }
+
++static struct class watchdog_class = {
++ .name = "watchdog",
++ .owner = THIS_MODULE,
++};
++
+ /*
+ * watchdog_dev_init: init dev part of watchdog core
+ *
+ * Allocate a range of chardev nodes to use for watchdog devices
+ */
+
+-int __init watchdog_dev_init(void)
++struct class * __init watchdog_dev_init(void)
+ {
+- int err = alloc_chrdev_region(&watchdog_devt, 0, MAX_DOGS, "watchdog");
+- if (err < 0)
++ int err;
++
++ err = class_register(&watchdog_class);
++ if (err < 0) {
++ pr_err("couldn't register class\n");
++ return ERR_PTR(err);
++ }
++
++ err = alloc_chrdev_region(&watchdog_devt, 0, MAX_DOGS, "watchdog");
++ if (err < 0) {
+ pr_err("watchdog: unable to allocate char dev region\n");
+- return err;
++ class_unregister(&watchdog_class);
++ return ERR_PTR(err);
++ }
++
++ return &watchdog_class;
+ }
+
+ /*
+@@ -604,4 +621,5 @@ int __init watchdog_dev_init(void)
+ void __exit watchdog_dev_exit(void)
+ {
+ unregister_chrdev_region(watchdog_devt, MAX_DOGS);
++ class_unregister(&watchdog_class);
+ }