497e7bd6e1
If the system rebooted, there might be i2c transfer at the same time, it will make something unpredictable, because the i2c host was reset, but the slave device wasn't, such as rk808 pmic, so make sure the i2c transfer to be finished before system shutdown at the reset mode. This call chain is expected to be executed before kernel_restart to do something before reset system. such as, i2c restart, boot mode config. Change-Id: I3c09f3acbe86595c295edc191aa38351adb7d5dc Signed-off-by: David Wu <david.wu@rock-chips.com> Signed-off-by: Jianqun Xu <jay.xu@rock-chips.com> Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
111 lines
2.6 KiB
C
111 lines
2.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _LINUX_REBOOT_H
|
|
#define _LINUX_REBOOT_H
|
|
|
|
|
|
#include <linux/notifier.h>
|
|
#include <uapi/linux/reboot.h>
|
|
|
|
struct device;
|
|
|
|
#define SYS_DOWN 0x0001 /* Notify of system down */
|
|
#define SYS_RESTART SYS_DOWN
|
|
#define SYS_HALT 0x0002 /* Notify of system halt */
|
|
#define SYS_POWER_OFF 0x0003 /* Notify of system power off */
|
|
|
|
enum reboot_mode {
|
|
REBOOT_UNDEFINED = -1,
|
|
REBOOT_COLD = 0,
|
|
REBOOT_WARM,
|
|
REBOOT_HARD,
|
|
REBOOT_SOFT,
|
|
REBOOT_GPIO,
|
|
};
|
|
extern enum reboot_mode reboot_mode;
|
|
extern enum reboot_mode panic_reboot_mode;
|
|
|
|
enum reboot_type {
|
|
BOOT_TRIPLE = 't',
|
|
BOOT_KBD = 'k',
|
|
BOOT_BIOS = 'b',
|
|
BOOT_ACPI = 'a',
|
|
BOOT_EFI = 'e',
|
|
BOOT_CF9_FORCE = 'p',
|
|
BOOT_CF9_SAFE = 'q',
|
|
};
|
|
extern enum reboot_type reboot_type;
|
|
|
|
extern int reboot_default;
|
|
extern int reboot_cpu;
|
|
extern int reboot_force;
|
|
|
|
|
|
extern int register_reboot_notifier(struct notifier_block *);
|
|
extern int unregister_reboot_notifier(struct notifier_block *);
|
|
|
|
extern int devm_register_reboot_notifier(struct device *, struct notifier_block *);
|
|
|
|
extern int register_restart_handler(struct notifier_block *);
|
|
extern int unregister_restart_handler(struct notifier_block *);
|
|
extern void do_kernel_restart(char *cmd);
|
|
|
|
#ifdef CONFIG_NO_GKI
|
|
extern int register_pre_restart_handler(struct notifier_block *nb);
|
|
extern int unregister_pre_restart_handler(struct notifier_block *nb);
|
|
extern void do_kernel_pre_restart(char *cmd);
|
|
#else
|
|
static inline int register_pre_restart_handler(struct notifier_block *nb)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int unregister_pre_restart_handler(struct notifier_block *nb)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline void do_kernel_pre_restart(char *cmd)
|
|
{
|
|
}
|
|
#endif
|
|
|
|
/*
|
|
* Architecture-specific implementations of sys_reboot commands.
|
|
*/
|
|
|
|
extern void migrate_to_reboot_cpu(void);
|
|
extern void machine_restart(char *cmd);
|
|
extern void machine_halt(void);
|
|
extern void machine_power_off(void);
|
|
|
|
extern void machine_shutdown(void);
|
|
struct pt_regs;
|
|
extern void machine_crash_shutdown(struct pt_regs *);
|
|
|
|
/*
|
|
* Architecture independent implemenations of sys_reboot commands.
|
|
*/
|
|
|
|
extern void kernel_restart_prepare(char *cmd);
|
|
extern void kernel_restart(char *cmd);
|
|
extern void kernel_halt(void);
|
|
extern void kernel_power_off(void);
|
|
|
|
extern int C_A_D; /* for sysctl */
|
|
void ctrl_alt_del(void);
|
|
|
|
#define POWEROFF_CMD_PATH_LEN 256
|
|
extern char poweroff_cmd[POWEROFF_CMD_PATH_LEN];
|
|
|
|
extern void orderly_poweroff(bool force);
|
|
extern void orderly_reboot(void);
|
|
|
|
/*
|
|
* Emergency restart, callable from an interrupt handler.
|
|
*/
|
|
|
|
extern void emergency_restart(void);
|
|
#include <asm/emergency-restart.h>
|
|
|
|
#endif /* _LINUX_REBOOT_H */
|