diff options
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.patch | 111 |
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); + } |