/*
 * Copyright (c) 2021, MediaTek Inc. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

/****************************************************************
 * Auto generated by DE, please DO NOT modify this file directly.
 *****************************************************************/
#ifndef MT_SPM_PMIC_WRAP_H
#define MT_SPM_PMIC_WRAP_H

enum pmic_wrap_phase_id {
	PMIC_WRAP_PHASE_ALLINONE,
	NR_PMIC_WRAP_PHASE,
};

/* IDX mapping, PMIC_WRAP_PHASE_ALLINONE */
enum {
	CMD_0,        /* 0x0 */
	CMD_1,        /* 0x1 */
	CMD_2,        /* 0x2 */
	CMD_3,        /* 0x3 */
	CMD_4,        /* 0x4 */
	CMD_5,        /* 0x5 */
	CMD_6,        /* 0x6 */
	CMD_7,        /* 0x7 */
	CMD_8,        /* 0x8 */
	CMD_9,        /* 0x9 */
	CMD_10,        /* 0xA */
	CMD_11,        /* 0xB */
	CMD_12,        /* 0xC */
	CMD_13,        /* 0xD */
	CMD_14,        /* 0xE */
	CMD_15,        /* 0xF */
	NR_IDX_ALL,
};

/* APIs */
extern void mt_spm_pmic_wrap_set_phase(enum pmic_wrap_phase_id phase);
extern void mt_spm_pmic_wrap_set_cmd(enum pmic_wrap_phase_id phase,
				     uint32_t idx, uint32_t cmd_wdata);
extern uint64_t mt_spm_pmic_wrap_get_cmd(enum pmic_wrap_phase_id phase,
					 uint32_t idx);
#endif /* MT_SPM_PMIC_WRAP_H */
