0001
0002 #include <linux/kernel.h>
0003 #include <linux/module.h>
0004 #include <linux/of.h>
0005
0006 #include "notifier-error-inject.h"
0007
0008 static int priority;
0009 module_param(priority, int, 0);
0010 MODULE_PARM_DESC(priority, "specify OF reconfig notifier priority");
0011
0012 static struct notifier_err_inject reconfig_err_inject = {
0013 .actions = {
0014 { NOTIFIER_ERR_INJECT_ACTION(OF_RECONFIG_ATTACH_NODE) },
0015 { NOTIFIER_ERR_INJECT_ACTION(OF_RECONFIG_DETACH_NODE) },
0016 { NOTIFIER_ERR_INJECT_ACTION(OF_RECONFIG_ADD_PROPERTY) },
0017 { NOTIFIER_ERR_INJECT_ACTION(OF_RECONFIG_REMOVE_PROPERTY) },
0018 { NOTIFIER_ERR_INJECT_ACTION(OF_RECONFIG_UPDATE_PROPERTY) },
0019 {}
0020 }
0021 };
0022
0023 static struct dentry *dir;
0024
0025 static int err_inject_init(void)
0026 {
0027 int err;
0028
0029 dir = notifier_err_inject_init("OF-reconfig",
0030 notifier_err_inject_dir, &reconfig_err_inject, priority);
0031 if (IS_ERR(dir))
0032 return PTR_ERR(dir);
0033
0034 err = of_reconfig_notifier_register(&reconfig_err_inject.nb);
0035 if (err)
0036 debugfs_remove_recursive(dir);
0037
0038 return err;
0039 }
0040
0041 static void err_inject_exit(void)
0042 {
0043 of_reconfig_notifier_unregister(&reconfig_err_inject.nb);
0044 debugfs_remove_recursive(dir);
0045 }
0046
0047 module_init(err_inject_init);
0048 module_exit(err_inject_exit);
0049
0050 MODULE_DESCRIPTION("OF reconfig notifier error injection module");
0051 MODULE_LICENSE("GPL");
0052 MODULE_AUTHOR("Akinobu Mita <akinobu.mita@gmail.com>");