123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515 |
- /**
- ******************************************************************************
- * @file stm32mp15xx_eval_stpmic1.h
- * @author MCD Application Team
- * @brief stpmu driver functions used for ST internal validation
- ******************************************************************************
- * @attention
- *
- * <h2><center>© Copyright (c) 2019 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under BSD 3-Clause license,
- * the "License"; You may not use this file except in compliance with the
- * License. You may obtain a copy of the License at:
- * opensource.org/licenses/BSD-3-Clause
- *
- *
- ******************************************************************************
- */
- #ifndef __STPMIC_H__
- #define __STPMIC_H__
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include "stm32mp1xx_hal.h"
- /* Exported types ------------------------------------------------------------*/
- typedef enum
- {
- STPMU1_BUCK1=1,
- STPMU1_BUCK2,
- STPMU1_BUCK3,
- STPMU1_BUCK4,
- STPMU1_LDO1,
- STPMU1_LDO2,
- STPMU1_LDO3,
- STPMU1_LDO4,
- STPMU1_LDO5,
- STPMU1_LDO6,
- STPMU1_VREFDDR,
- }PMIC_RegulId_TypeDef;
- /* IRQ definitions */
- typedef enum {
- /* Interrupt Register 1 (0x50 for latch) */
- IT_SWOUT_R,
- IT_SWOUT_F,
- IT_VBUS_OTG_R,
- IT_VBUS_OTG_F,
- IT_WAKEUP_R,
- IT_WAKEUP_F,
- IT_PONKEY_R,
- IT_PONKEY_F,
- /* Interrupt Register 2 (0x51 for latch) */
- IT_OVP_BOOST,
- IT_OCP_BOOST,
- IT_OCP_SWOUT,
- IT_OCP_OTG,
- IT_CURLIM_BUCK4,
- IT_CURLIM_BUCK3,
- IT_CURLIM_BUCK2,
- IT_CURLIM_BUCK1,
- /* Interrupt Register 3 (0x52 for latch) */
- IT_SHORT_SWOUT,
- IT_SHORT_SWOTG,
- IT_CURLIM_LDO6,
- IT_CURLIM_LDO5,
- IT_CURLIM_LDO4,
- IT_CURLIM_LDO3,
- IT_CURLIM_LDO2,
- IT_CURLIM_LDO1,
- /* Interrupt Register 3 (0x52 for latch) */
- IT_SWIN_R,
- IT_SWIN_F,
- IT_RESERVED_1,
- IT_RESERVED_2,
- IT_VINLOW_R,
- IT_VINLOW_F,
- IT_TWARN_R,
- IT_TWARN_F,
- IRQ_NR,
- } PMIC_IRQn;
- /* Private typedef -----------------------------------------------------------*/
- typedef struct {
- PMIC_RegulId_TypeDef id;
- uint16_t *voltage_table;
- uint8_t voltage_table_size;
- uint8_t control_reg;
- uint8_t low_power_reg;
- uint8_t rank ;
- uint8_t nvm_info ;
- } regul_struct;
- /* Those define should reflect NVM_USER section
- * For ES Eval Configuration this is specified as
- * 0xF7,
- 0x92,
- 0xC0,
- 0x02,
- 0xFA,
- 0x30,
- 0x00,
- 0x33,
- * */
- #define NVM_SECTOR3_REGISTER_0 0xF7
- #define NVM_SECTOR3_REGISTER_1 0x92
- #define NVM_SECTOR3_REGISTER_2 0xC0
- #define NVM_SECTOR3_REGISTER_3 0x02
- #define NVM_SECTOR3_REGISTER_4 0xFA
- #define NVM_SECTOR3_REGISTER_5 0x30
- #define NVM_SECTOR3_REGISTER_6 0x00
- #define NVM_SECTOR3_REGISTER_7 0x33
- /* nvm_vinok_hyst: VINOK hysteresis voltage
- 00: 200mV
- 01: 300mV
- 10: 400mV
- 11: 500mV
- *
- * nvm_vinok: VINOK threshold voltage
- 00: 3.1v
- 01: 3.3v
- 10: 3.5v
- 11: 4.5v
- Otp_ldo4_forced :
- 0: LDO4 ranks following OTP_RANK_LDO4<1:0>
- if VBUS_OTG or SWOUT is turn ON condition
- 1: LDO4 follows normal ranking procedure
- nvm_longkeypress:
- 0: Turn OFF on long key press inactive
- 1: Turn OFF on long key press active
- nvm_autoturnon:
- 0: PMIC does not start automatically on VIN rising
- 1: PMIC starts automatically on VIN rising
- nvm_cc_keepoff :
- 0: short circuit does not turn OFF PMIC
- 1: short circuit turn OFF PMIC and keep it OFF till CC_flag is reset
- *
- */
- #define OTP_VINOK_HYST ((NVM_SECTOR3_REGISTER_0 & 0xC0) >> 6) // nvm_vinok_hyst
- #define OTP_VINOK ((NVM_SECTOR3_REGISTER_0 & 0x30) >> 4) // nvm_vinok
- #define OTP_LDO4_FORCED ((NVM_SECTOR3_REGISTER_0 & 0x08) >> 3) // Otp_ldo4_forced
- #define OTP_LONGKEYPRESSED ((NVM_SECTOR3_REGISTER_0 & 0x04) >> 2) // nvm_longkeypress
- #define OTP_AUTOTURNON ((NVM_SECTOR3_REGISTER_0 & 0x02) >> 1) // nvm_autoturnon
- #define OTP_CC_KEEPOFF ((NVM_SECTOR3_REGISTER_0 & 0x01)) // nvm_cc_keepoff
- /*
- * nvm_rank_buck4:
- 00: rank0
- 01: rank1
- 10: rank2
- 11: rank3
- nvm_rank_buck3:
- 00: rank0
- 01: rank1
- 10: rank2
- 11: rank3
- nvm_rank_buck2:
- 00: rank0
- 01: rank1
- 10: rank2
- 11: rank3
- nvm_rank_buck1:
- 00: rank0
- 01: rank1
- 10: rank2
- 11: rank3
- *
- */
- #define OTP_RANK_BUCK4 ((NVM_SECTOR3_REGISTER_1 & 0xC0) >> 6) // nvm_rank_buck4
- #define OTP_RANK_BUCK3 ((NVM_SECTOR3_REGISTER_1 & 0x30) >> 4) // nvm_rank_buck3
- #define OTP_RANK_BUCK2 ((NVM_SECTOR3_REGISTER_1 & 0x0C) >> 2) // nvm_rank_buck2
- #define OTP_RANK_BUCK1 ((NVM_SECTOR3_REGISTER_1 & 0x03)) // nvm_rank_buck1
- /*
- * nvm_rank_ldo4:
- 00: rank0
- 01: rank1
- 10: rank2
- 11: rank3
- nvm_rank_ldo3:
- 00: rank0
- 01: rank1
- 10: rank2
- 11: rank3
- nvm_rank_ldo2:
- 00: rank0
- 01: rank1
- 10: rank2
- 11: rank3
- nvm_rank_ldo1:
- 00: rank0
- 01: rank1
- 10: rank2
- 11: rank3
- *
- */
- #define OTP_RANK_LDO4 ((NVM_SECTOR3_REGISTER_2 & 0xC0) >> 6) // nvm_rank_ldo4
- #define OTP_RANK_LDO3 ((NVM_SECTOR3_REGISTER_2 & 0x30) >> 4) // nvm_rank_ldo3
- #define OTP_RANK_LDO2 ((NVM_SECTOR3_REGISTER_2 & 0x0C) >> 2) // nvm_rank_ldo2
- #define OTP_RANK_LDO1 ((NVM_SECTOR3_REGISTER_2 & 0x03)) // nvm_rank_ldo1
- /*
- * nvm_clamp_output_buck: Clamp output value to 1.3V max
- 0: output_buck4<5:0> not clamped
- 1: output_buck4<5:0> to b011100(1.3V)
- nvm_bypass_mode_ldo3: LDO3 forced bypass mode
- 0: LDO3 not in bypass mode
- 1: LDO3 in bypass mode
- nvm_rank_vrefddr:
- 00: rank0
- 01: rank1
- 10: rank2
- 11: rank3
- nvm_rank_ldo6:
- 00: rank0
- 01: rank1
- 10: rank2
- 11: rank3
- nvm_rank_ldo5:
- 00: rank0
- 01: rank1
- 10: rank2
- 11: rank3
- *
- */
- #define OTP_CLAMP_OUTPUT_BUCK4 ((NVM_SECTOR3_REGISTER_3 & 0x80) >> 7) // nvm_clamp_output_buck4
- #define OTP_BYPASS_MODE_LDO3 ((NVM_SECTOR3_REGISTER_3 & 0x40) >> 6) // nvm_bypass_mode_ldo3
- #define OTP_RANK_VREFDDR ((NVM_SECTOR3_REGISTER_3 & 0x30) >> 4) // nvm_rank_vrefddr
- #define OTP_RANK_LDO6 ((NVM_SECTOR3_REGISTER_3 & 0x0C) >> 2) // nvm_rank_ldo6
- #define OTP_RANK_LDO5 ((NVM_SECTOR3_REGISTER_3 & 0x03)) // nvm_rank_ldo5
- /*
- * nvm_output_buck4: Buck4 default output selection
- 00: 1.15V
- 01: 1.2V
- 10: 1.8V
- 11: 3.3V
- nvm_output_buck3: Buck3 default output selection
- 00: 1.2V
- 01: 1.8V
- 10: 3.0V
- 11: 3.3V
- nvm_output_buck2: Buck2 default output selection
- 00: 1.1V
- 01: 1.2V
- 10: 1.35V
- 11: 1.5V
- nvm_output_buck1: Buck1 default output selection
- 00: 1.1V
- 01: 1.15V
- 10: 1.2V
- 11: 1.25V
- *
- */
- #define OTP_OUTPUT_BUCK4 ((NVM_SECTOR3_REGISTER_4 & 0xC0) >> 6) // nvm_output_buck4
- #define OTP_OUTPUT_BUCK3 ((NVM_SECTOR3_REGISTER_4 & 0x30) >> 4) // nvm_output_buck3
- #define OTP_OUTPUT_BUCK2 ((NVM_SECTOR3_REGISTER_4 & 0x0C) >> 2) // nvm_output_buck2
- #define OTP_OUTPUT_BUCK1 ((NVM_SECTOR3_REGISTER_4 & 0x03)) // nvm_output_buck1
- /*
- * [7] OTP_SWOFF_BY_BOOST_OVP:
- 0 -> SWOUT will not turnoff bu boost OVP
- 1 -> SWOUT will be turnoff by BOOST OVP
- [6] reserved
- [5:4] nvm_output_ldo3: LDO3 default output selection
- 00: 1.8V
- 01: 2.5V
- 10: 3.3V
- 11: output_buck2<4:0>/2 (VTT termination for DDR3 x32, Analog divider implemented in Analog)
- [3:2] nvm_output_ldo2: LDO2 default output selection
- 00: 1.8V
- 01: 2.5V
- 10: 2.9V
- 11: 3.3V
- [1:0] nvm_output_ldo1: LDO1 default output selection
- 00: 1.8V
- 01: 2.5V
- 10: 2.9V
- 11: 3.3V
- *
- */
- #define OTP_SWOFF_BY_BOOST_OVP ((NVM_SECTOR3_REGISTER_5 & 0x80) >> 7) // OTP_SWOFF_BY_BOOST_OVP
- #define OTP_OUTPUT_LDO3 ((NVM_SECTOR3_REGISTER_5 & 0x30) >> 4) // nvm_output_ldo3
- #define OTP_OUTPUT_LDO2 ((NVM_SECTOR3_REGISTER_5 & 0x0C) >> 2) // nvm_output_ldo2
- #define OTP_OUTPUT_LDO1 ((NVM_SECTOR3_REGISTER_5 & 0x03)) // nvm_output_ldo1
- /*
- * [7:4] reserved
- *
- [3:2] nvm_output_ldo6: LDO6 default output selection
- 00: 1.0V
- 01: 1.2V
- 10: 1.8V
- 11: 3.3V
- [1:0] nvm_output_ldo5: LDO5 default output selection
- 00: 1.8V
- 01: 2.5V
- 10: 2.9V
- 11 : 3.3V
- *
- */
- #define OTP_OUTPUT_LDO6 ((NVM_SECTOR3_REGISTER_6 & 0x0C) >> 2) // nvm_output_ldo6
- #define OTP_OUTPUT_LDO5 ((NVM_SECTOR3_REGISTER_6 & 0x03)) // nvm_output_ldo5
- #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
- #define BIT(_x) (1<<(_x))
- #define STM32_PMIC_NUM_IRQ_REGS 4
- #define TURN_ON_REG 0x1
- #define TURN_OFF_REG 0x2
- #define ICC_LDO_TURN_OFF_REG 0x3
- #define ICC_BUCK_TURN_OFF_REG 0x4
- #define RESET_STATUS_REG 0x5
- #define VERSION_STATUS_REG 0x6
- #define MAIN_CONTROL_REG 0x10
- #define PADS_PULL_REG 0x11
- #define BUCK_PULL_DOWN_REG 0x12
- #define LDO14_PULL_DOWN_REG 0x13
- #define LDO56_PULL_DOWN_REG 0x14
- #define VIN_CONTROL_REG 0x15
- #define PONKEY_TIMER_REG 0x16
- #define MASK_RANK_BUCK_REG 0x17
- #define MASK_RESET_BUCK_REG 0x18
- #define MASK_RANK_LDO_REG 0x19
- #define MASK_RESET_LDO_REG 0x1A
- #define WATCHDOG_CONTROL_REG 0x1B
- #define WATCHDOG_TIMER_REG 0x1C
- #define BUCK_ICC_TURNOFF_REG 0x1D
- #define LDO_ICC_TURNOFF_REG 0x1E
- #define BUCK_APM_CONTROL_REG 0x1F
- #define BUCK1_CONTROL_REG 0x20
- #define BUCK2_CONTROL_REG 0x21
- #define BUCK3_CONTROL_REG 0x22
- #define BUCK4_CONTROL_REG 0x23
- #define VREF_DDR_CONTROL_REG 0x24
- #define LDO1_CONTROL_REG 0x25
- #define LDO2_CONTROL_REG 0x26
- #define LDO3_CONTROL_REG 0x27
- #define LDO4_CONTROL_REG 0x28
- #define LDO5_CONTROL_REG 0x29
- #define LDO6_CONTROL_REG 0x2A
- #define BUCK1_PWRCTRL_REG 0x30
- #define BUCK2_PWRCTRL_REG 0x31
- #define BUCK3_PWRCTRL_REG 0x32
- #define BUCK4_PWRCTRL_REG 0x33
- #define VREF_DDR_PWRCTRL_REG 0x34
- #define LDO1_PWRCTRL_REG 0x35
- #define LDO2_PWRCTRL_REG 0x36
- #define LDO3_PWRCTRL_REG 0x37
- #define LDO4_PWRCTRL_REG 0x38
- #define LDO5_PWRCTRL_REG 0x39
- #define LDO6_PWRCTRL_REG 0x3A
- #define FREQUENCY_SPREADING_REG 0x3B
- #define USB_CONTROL_REG 0x40
- #define ITLATCH1_REG 0x50
- #define ITLATCH2_REG 0x51
- #define ITLATCH3_REG 0x52
- #define ITLATCH4_REG 0x53
- #define ITSETLATCH1_REG 0x60
- #define ITSETLATCH2_REG 0x61
- #define ITSETLATCH3_REG 0x62
- #define ITSETLATCH4_REG 0x63
- #define ITCLEARLATCH1_REG 0x70
- #define ITCLEARLATCH2_REG 0x71
- #define ITCLEARLATCH3_REG 0x72
- #define ITCLEARLATCH4_REG 0x73
- #define ITMASK1_REG 0x80
- #define ITMASK2_REG 0x81
- #define ITMASK3_REG 0x82
- #define ITMASK4_REG 0x83
- #define ITSETMASK1_REG 0x90
- #define ITSETMASK2_REG 0x91
- #define ITSETMASK3_REG 0x92
- #define ITSETMASK4_REG 0x93
- #define ITCLEARMASK1_REG 0xA0
- #define ITCLEARMASK2_REG 0xA1
- #define ITCLEARMASK3_REG 0xA2
- #define ITCLEARMASK4_REG 0xA3
- #define ITSOURCE1_REG 0xB0
- #define ITSOURCE2_REG 0xB1
- #define ITSOURCE3_REG 0xB2
- #define ITSOURCE4_REG 0xB3
- #define LDO_VOLTAGE_MASK 0x7C
- #define BUCK_VOLTAGE_MASK 0xFC
- #define LDO_BUCK_VOLTAGE_SHIFT 2
- #define LDO_ENABLE_MASK 0x01
- #define BUCK_ENABLE_MASK 0x01
- #define BUCK_HPLP_ENABLE_MASK 0x02
- #define LDO_HPLP_ENABLE_MASK 0x02
- #define LDO_BUCK_HPLP_SHIFT 1
- #define LDO_BUCK_RANK_MASK 0x01
- #define LDO_BUCK_RESET_MASK 0x01
- #define LDO_BUCK_PULL_DOWN_MASK 0x03
- /* Main PMIC Control Register
- * MAIN_CONTROL_REG
- * Address : 0x10
- * */
- #define ICC_EVENT_ENABLED BIT(4)
- #define PWRCTRL_POLARITY_HIGH BIT(3)
- #define PWRCTRL_PIN_VALID BIT(2)
- #define RESTART_REQUEST_ENABLED BIT(1)
- #define SOFTWARE_SWITCH_OFF_ENABLED BIT(0)
- /* Main PMIC PADS Control Register
- * PADS_PULL_REG
- * Address : 0x11
- * */
- #define WAKEUP_DETECTOR_DISABLED BIT(4)
- #define PWRCTRL_PD_ACTIVE BIT(3)
- #define PWRCTRL_PU_ACTIVE BIT(2)
- #define WAKEUP_PD_ACTIVE BIT(1)
- #define PONKEY_PU_ACTIVE BIT(0)
- /* Main PMIC VINLOW Control Register
- * VIN_CONTROL_REGC DMSC
- * Address : 0x15
- * */
- #define SWIN_DETECTOR_ENABLED BIT(7)
- #define SWOUT_DETECTOR_ENABLED BIT(6)
- #define VINLOW_HYST_MASK 0x3
- #define VINLOW_HYST_SHIFT 4
- #define VINLOW_THRESHOLD_MASK 0x7
- #define VINLOW_THRESHOLD_SHIFT 1
- #define VINLOW_ENABLED 0x01
- #define VINLOW_CTRL_REG_MASK 0xFF
- /* USB Control Register
- * Address : 0x40
- * */
- #define BOOST_OVP_DISABLED BIT(7)
- #define VBUS_OTG_DETECTION_DISABLED BIT(6)
- // Discharge not implemented
- #define OCP_LIMIT_HIGH BIT(3)
- #define SWIN_SWOUT_ENABLED BIT(2)
- #define USBSW_OTG_SWITCH_ENABLED BIT(1)
- /* IRQ masks */
- /* Interrupt Mask for Register 1 (0x50 for latch) */
- #define IT_SWOUT_R_MASK BIT(7)
- #define IT_SWOUT_F_MASK BIT(6)
- #define IT_VBUS_OTG_R_MASK BIT(5)
- #define IT_VBUS_OTG_F_MASK BIT(4)
- #define IT_WAKEUP_R_MASK BIT(3)
- #define IT_WAKEUP_F_MASK BIT(2)
- #define IT_PONKEY_R_MASK BIT(1)
- #define IT_PONKEY_F_MASK BIT(0)
- /* Interrupt Mask for Register 2 (0x51 for latch) */
- #define IT_OVP_BOOST_MASK BIT(7)
- #define IT_OCP_BOOST_MASK BIT(6)
- #define IT_OCP_SWOUT_MASK BIT(5)
- #define IT_OCP_OTG_MASK BIT(4)
- #define IT_CURLIM_BUCK4_MASK BIT(3)
- #define IT_CURLIM_BUCK3_MASK BIT(2)
- #define IT_CURLIM_BUCK2_MASK BIT(1)
- #define IT_CURLIM_BUCK1_MASK BIT(0)
- /* Interrupt Mask for Register 3 (0x52 for latch) */
- #define IT_SHORT_SWOUT_MASK BIT(7)
- #define IT_SHORT_SWOTG_MASK BIT(6)
- #define IT_CURLIM_LDO6_MASK BIT(5)
- #define IT_CURLIM_LDO5_MASK BIT(4)
- #define IT_CURLIM_LDO4_MASK BIT(3)
- #define IT_CURLIM_LDO3_MASK BIT(2)
- #define IT_CURLIM_LDO2_MASK BIT(1)
- #define IT_CURLIM_LDO1_MASK BIT(0)
- /* Interrupt Mask for Register 4 (0x53 for latch) */
- #define IT_SWIN_R_MASK BIT(7)
- #define IT_SWIN_F_MASK BIT(6)
- /* Reserved 1 */
- /* Reserved 2 */
- #define IT_VINLOW_R_MASK BIT(3)
- #define IT_VINLOW_F_MASK BIT(2)
- #define IT_TWARN_R_MASK BIT(1)
- #define IT_TWARN_F_MASK BIT(0)
- #define PMIC_VERSION_ID 0x10
- #define STPMU1_I2C_ADDRESS (NVM_SECTOR3_REGISTER_7 & 0x7F)
- #ifdef __cplusplus
- }
- #endif
- #endif
|