Lines Matching +full:mode +full:- +full:normal

1 // SPDX-License-Identifier: GPL-2.0-or-later
12 #include <linux/reboot-mode.h>
14 #define PREFIX "mode-"
17 const char *mode; member
25 const char *normal = "normal"; in get_reboot_mode_magic() local
30 cmd = normal; in get_reboot_mode_magic()
32 list_for_each_entry(info, &reboot->head, list) { in get_reboot_mode_magic()
33 if (!strcmp(info->mode, cmd)) { in get_reboot_mode_magic()
34 magic = info->magic; in get_reboot_mode_magic()
43 unsigned long mode, void *cmd) in reboot_mode_notify() argument
51 reboot->write(reboot, magic); in reboot_mode_notify()
57 * reboot_mode_register - register a reboot mode driver
58 * @reboot: reboot mode driver
66 struct device_node *np = reboot->dev->of_node; in reboot_mode_register()
70 INIT_LIST_HEAD(&reboot->head); in reboot_mode_register()
73 if (strncmp(prop->name, PREFIX, len)) in reboot_mode_register()
76 info = devm_kzalloc(reboot->dev, sizeof(*info), GFP_KERNEL); in reboot_mode_register()
78 ret = -ENOMEM; in reboot_mode_register()
82 if (of_property_read_u32(np, prop->name, &info->magic)) { in reboot_mode_register()
83 dev_err(reboot->dev, "reboot mode %s without magic number\n", in reboot_mode_register()
84 info->mode); in reboot_mode_register()
85 devm_kfree(reboot->dev, info); in reboot_mode_register()
89 info->mode = kstrdup_const(prop->name + len, GFP_KERNEL); in reboot_mode_register()
90 if (!info->mode) { in reboot_mode_register()
91 ret = -ENOMEM; in reboot_mode_register()
93 } else if (info->mode[0] == '\0') { in reboot_mode_register()
94 kfree_const(info->mode); in reboot_mode_register()
95 ret = -EINVAL; in reboot_mode_register()
96 dev_err(reboot->dev, "invalid mode name(%s): too short!\n", in reboot_mode_register()
97 prop->name); in reboot_mode_register()
101 list_add_tail(&info->list, &reboot->head); in reboot_mode_register()
104 reboot->reboot_notifier.notifier_call = reboot_mode_notify; in reboot_mode_register()
105 register_reboot_notifier(&reboot->reboot_notifier); in reboot_mode_register()
110 list_for_each_entry(info, &reboot->head, list) in reboot_mode_register()
111 kfree_const(info->mode); in reboot_mode_register()
118 * reboot_mode_unregister - unregister a reboot mode driver
119 * @reboot: reboot mode driver
125 unregister_reboot_notifier(&reboot->reboot_notifier); in reboot_mode_unregister()
127 list_for_each_entry(info, &reboot->head, list) in reboot_mode_unregister()
128 kfree_const(info->mode); in reboot_mode_unregister()
140 * devm_reboot_mode_register() - resource managed reboot_mode_register()
142 * @reboot: reboot mode driver
154 return -ENOMEM; in devm_reboot_mode_register()
180 * devm_reboot_mode_unregister() - resource managed reboot_mode_unregister()
182 * @reboot: reboot mode driver
193 MODULE_AUTHOR("Andy Yan <andy.yan@rock-chips.com>");
194 MODULE_DESCRIPTION("System reboot mode core library");