Lines Matching +full:reboot +full:- +full:mode
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Generic Syscon Reboot Driver
14 #include <linux/reboot.h>
39 unsigned long mode, void *cmd) in syscon_restart_handle() argument
46 if (ctx->rd) { in syscon_restart_handle()
47 if (mode < ARRAY_SIZE(ctx->rd->mode_bits) && in syscon_restart_handle()
48 ctx->rd->mode_bits[mode].valid) in syscon_restart_handle()
49 mode_bits = &ctx->rd->mode_bits[mode]; in syscon_restart_handle()
51 mode_bits = &ctx->rd->catchall; in syscon_restart_handle()
53 mode_bits = &ctx->catchall; in syscon_restart_handle()
56 /* Issue the reboot */ in syscon_restart_handle()
57 regmap_update_bits(ctx->map, mode_bits->offset, mode_bits->mask, in syscon_restart_handle()
58 mode_bits->value); in syscon_restart_handle()
69 struct device *dev = &pdev->dev; in syscon_reboot_probe()
73 ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL); in syscon_reboot_probe()
75 return -ENOMEM; in syscon_reboot_probe()
77 ctx->map = syscon_regmap_lookup_by_phandle(dev->of_node, "regmap"); in syscon_reboot_probe()
78 if (IS_ERR(ctx->map)) { in syscon_reboot_probe()
79 ctx->map = syscon_node_to_regmap(dev->parent->of_node); in syscon_reboot_probe()
80 if (IS_ERR(ctx->map)) in syscon_reboot_probe()
81 return PTR_ERR(ctx->map); in syscon_reboot_probe()
84 if (of_property_read_s32(pdev->dev.of_node, "priority", &priority)) in syscon_reboot_probe()
87 ctx->rd = of_device_get_match_data(dev); in syscon_reboot_probe()
88 if (!ctx->rd) { in syscon_reboot_probe()
91 if (of_property_read_u32(pdev->dev.of_node, "offset", in syscon_reboot_probe()
92 &ctx->catchall.offset) && in syscon_reboot_probe()
93 of_property_read_u32(pdev->dev.of_node, "reg", in syscon_reboot_probe()
94 &ctx->catchall.offset)) in syscon_reboot_probe()
95 return -EINVAL; in syscon_reboot_probe()
97 value_err = of_property_read_u32(pdev->dev.of_node, "value", in syscon_reboot_probe()
98 &ctx->catchall.value); in syscon_reboot_probe()
99 mask_err = of_property_read_u32(pdev->dev.of_node, "mask", in syscon_reboot_probe()
100 &ctx->catchall.mask); in syscon_reboot_probe()
103 return -EINVAL; in syscon_reboot_probe()
108 ctx->catchall.value = ctx->catchall.mask; in syscon_reboot_probe()
109 ctx->catchall.mask = 0xFFFFFFFF; in syscon_reboot_probe()
112 ctx->catchall.mask = 0xFFFFFFFF; in syscon_reboot_probe()
116 ctx->restart_handler.notifier_call = syscon_restart_handle; in syscon_reboot_probe()
117 ctx->restart_handler.priority = priority; in syscon_reboot_probe()
118 err = register_restart_handler(&ctx->restart_handler); in syscon_reboot_probe()
148 { .compatible = "google,gs101-reboot", .data = &gs101_reboot_data },
149 { .compatible = "syscon-reboot" },
156 .name = "syscon-reboot",