From 9a4c72bb87de3ca88ac4d5976a98fe7b2e74ca05 Mon Sep 17 00:00:00 2001 From: Tero Salminen Date: Thu, 30 Jan 2025 08:56:20 +0200 Subject: [PATCH] arch/arm64/src/imx9/imx9_pmic: add RESET_CTRL register interface Signed-off-by: Tero Salminen --- arch/arm64/src/imx9/imx9_pmic.c | 32 ++++++++++++++++++++++++++++ arch/arm64/src/imx9/imx9_pmic.h | 37 +++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/arch/arm64/src/imx9/imx9_pmic.c b/arch/arm64/src/imx9/imx9_pmic.c index bd46c651385a6..f510a65c5c63a 100644 --- a/arch/arm64/src/imx9/imx9_pmic.c +++ b/arch/arm64/src/imx9/imx9_pmic.c @@ -48,6 +48,7 @@ #define PCA9451A_I2C_ADDR 0x25 #define REG_SW_RST 0x06 #define REG_POWERON_STAT 0x05 +#define REG_RESET_CTRL 0x08 #define COLD_RESET 0x64 #define WARM_RESET 0x35 @@ -174,3 +175,34 @@ int imx9_pmic_get_reset_reason(uint8_t *value) return imx9_pmic_reg_read(REG_POWERON_STAT, value); } +/**************************************************************************** + * Name: imx9_pmic_get_reset_ctrl + * + * Description: + * Read reset control register value + * + ****************************************************************************/ + +int imx9_pmic_get_reset_ctrl(uint8_t *value) +{ + return imx9_pmic_reg_read(REG_RESET_CTRL, value); +} + +/**************************************************************************** + * Name: imx9_pmic_set_reset_ctrl + * + * Description: + * Set reset control register value + * + * Input Parameters: + * Register value + * + * Returned Value: + * None + * + ****************************************************************************/ + +int imx9_pmic_set_reset_ctrl(uint8_t val) +{ + return imx9_pmic_reg_write(REG_RESET_CTRL, val); +} diff --git a/arch/arm64/src/imx9/imx9_pmic.h b/arch/arm64/src/imx9/imx9_pmic.h index 2a3640a2fb873..2272d8d9b19c3 100644 --- a/arch/arm64/src/imx9/imx9_pmic.h +++ b/arch/arm64/src/imx9/imx9_pmic.h @@ -44,6 +44,11 @@ extern "C" #define EXTERN extern #endif +#define IMX9_PMIC_RESET_CTRL_DEFAULT 0x21 + +/* WDOG_B_CFG [7:6]: 11b (Cold Reset) */ +#define IMX9_PMIC_RESET_CTRL_WDOG_COLD_RESET_MASK 0xC0 + /**************************************************************************** * Name: imx9_pmic_get_reset_reason * @@ -76,6 +81,38 @@ int imx9_pmic_get_reset_reason(uint8_t *value); int imx9_pmic_reset(void); +/**************************************************************************** + * Name: imx9_pmic_get_reset_ctrl + * + * Description: + * Read reset control register value + * + * Input Parameters: + * Pointer to reset reason value + * + * Returned Value: + * Zero on success or error code + * + ****************************************************************************/ + +int imx9_pmic_get_reset_ctrl(uint8_t *value); + +/**************************************************************************** + * Name: imx9_pmic_set_reset_ctrl + * + * Description: + * Set reset control register value + * + * Input Parameters: + * Register value + * + * Returned Value: + * Zero on success or error code + * + ****************************************************************************/ + +int imx9_pmic_set_reset_ctrl(uint8_t val); + #undef EXTERN #if defined(__cplusplus) }