KL520_SDK_2.2/mdw/include/kmdw_power_manager.h
2025-12-17 15:55:25 +08:00

65 lines
2.0 KiB
C

/**
* @file kmdw_power_manager.h
* @brief Power Manager driver
*
* @copyright Copyright (C) 2019 Kneron, Inc. All rights reserved.
*
*/
#ifndef __KMDW_POWER_MANAGER_H__
#define __KMDW_POWER_MANAGER_H__
enum kmdw_power_manager_device_id {
KMDW_POWER_MANAGER_DEVICE_NONE = 0,
KMDW_POWER_MANAGER_DEVICE_CAMERA1,
KMDW_POWER_MANAGER_DEVICE_CAMERA2,
KMDW_POWER_MANAGER_DEVICE_DISPLAY1,
KMDW_POWER_MANAGER_DEVICE_DISPLAY2,
KMDW_POWER_MANAGER_DEVICE_HOST_COM,
KMDW_POWER_MANAGER_DEVICE_DFU_UPDATE,
KMDW_POWER_MANAGER_DEVICE_NCPU_INFERENCE,
KMDW_POWER_MANAGER_DEVICE_UNUSED4,
KMDW_POWER_MANAGER_DEVICE_UNUSED5,
KMDW_POWER_MANAGER_DEVICE_UNUSED6,
KMDW_POWER_MANAGER_DEVICE_UNUSED7,
KMDW_POWER_MANAGER_DEVICE_UNUSED8,
KMDW_POWER_MANAGER_DEVICE_MAX,
};
/* Prototypes for callback functions */
typedef int (*kmdw_power_manager_call)(enum kmdw_power_manager_device_id dev_id);
typedef void (*kmdw_power_manager_ptn_handler)(int released);
struct kmdw_power_manager_s {
kmdw_power_manager_call nap;
kmdw_power_manager_call wakeup_nap;
kmdw_power_manager_call deep_nap;
kmdw_power_manager_call wakeup_deep_nap;
kmdw_power_manager_call sleep;
kmdw_power_manager_call wakeup_sleep;
kmdw_power_manager_call deep_sleep;
kmdw_power_manager_call wakeup_deep_sleep;
};
/* PM APIs */
__NO_RETURN void kmdw_power_manager_cpu_idle(void);
void kmdw_power_manager_init(void);
void kmdw_power_manager_error_notify(uint32_t code, void *object_id);
void kmdw_power_manager_reset(void);
void kmdw_power_manager_sleep(void);
void kmdw_power_manager_deep_sleep(void);
void kmdw_power_manager_shutdown(void);
/* Registration APIs */
int kmdw_power_manager_register(
enum kmdw_power_manager_device_id dev_id,
struct kmdw_power_manager_s *pm_p);
void kmdw_power_manager_unregister(
enum kmdw_power_manager_device_id dev_id,
struct kmdw_power_manager_s *pm_p);
void kmdw_power_manager_power_button_register(kmdw_power_manager_ptn_handler button_handler);
#endif