HiFiPhile 979d790959 Fix CI.
Signed-off-by: HiFiPhile <admin@hifiphile.com>
2025-01-24 17:17:06 +01:00

354 lines
14 KiB
C

/**
******************************************************************************
* @file tcpp0203.h
* @author MCD Application Team
* @brief This file contains all the functions prototypes for the
* tcpp0203.c driver.
******************************************************************************
* @attention
*
* Copyright (c) 2021 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef TCPP0203_H
#define TCPP0203_H
/* Includes ------------------------------------------------------------------*/
#include "tcpp0203_reg.h"
#include <stddef.h>
/** @addtogroup BSP
* @{
*/
/** @addtogroup Component
* @{
*/
/** @addtogroup TCPP0203
* @{
*/
/* Exported types ------------------------------------------------------------*/
/** @defgroup TCPP0203_Exported_Types TCPP0203 Exported Types
* @{
*/
typedef int32_t (*TCPP0203_Init_Func)(void);
typedef int32_t (*TCPP0203_DeInit_Func)(void);
typedef int32_t (*TCPP0203_GetTick_Func)(void);
typedef int32_t (*TCPP0203_WriteReg_Func)(uint16_t, uint16_t, uint8_t *, uint16_t);
typedef int32_t (*TCPP0203_ReadReg_Func)(uint16_t, uint16_t, uint8_t *, uint16_t);
typedef struct
{
TCPP0203_Init_Func Init;
TCPP0203_DeInit_Func DeInit;
uint16_t Address;
TCPP0203_WriteReg_Func WriteReg;
TCPP0203_ReadReg_Func ReadReg;
TCPP0203_GetTick_Func GetTick;
} TCPP0203_IO_t;
typedef struct
{
TCPP0203_IO_t IO;
TCPP0203_ctx_t Ctx;
uint8_t IsInitialized;
} TCPP0203_Object_t;
typedef struct
{
int32_t (*Init)(TCPP0203_Object_t *);
int32_t (*DeInit)(TCPP0203_Object_t *);
int32_t (*Reset)(TCPP0203_Object_t *);
int32_t (*SetVConnSwitch)(TCPP0203_Object_t *, uint8_t);
int32_t (*SetGateDriverProvider)(TCPP0203_Object_t *, uint8_t);
int32_t (*SetGateDriverConsumer)(TCPP0203_Object_t *, uint8_t);
int32_t (*SetPowerMode)(TCPP0203_Object_t *, uint8_t);
int32_t (*SetVBusDischarge)(TCPP0203_Object_t *, uint8_t);
int32_t (*SetVConnDischarge)(TCPP0203_Object_t *, uint8_t);
int32_t (*GetVConnSwitchAck)(TCPP0203_Object_t *, uint8_t *);
int32_t (*GetGateDriverProviderAck)(TCPP0203_Object_t *, uint8_t *);
int32_t (*GetGateDriverConsumerAck)(TCPP0203_Object_t *, uint8_t *);
int32_t (*GetPowerModeAck)(TCPP0203_Object_t *, uint8_t *);
int32_t (*GetVBusDischargeAck)(TCPP0203_Object_t *, uint8_t *);
int32_t (*GetVConnDischargeAck)(TCPP0203_Object_t *, uint8_t *);
int32_t (*GetOCPVConnFlag)(TCPP0203_Object_t *, uint8_t *);
int32_t (*GetOCPVBusFlag)(TCPP0203_Object_t *, uint8_t *);
int32_t (*GetOVPVBusFlag)(TCPP0203_Object_t *, uint8_t *);
int32_t (*GetOVPCCFlag)(TCPP0203_Object_t *, uint8_t *);
int32_t (*GetOTPFlag)(TCPP0203_Object_t *, uint8_t *);
int32_t (*GetVBusOkFlag)(TCPP0203_Object_t *, uint8_t *);
int32_t (*ReadTCPPType)(TCPP0203_Object_t *, uint8_t *);
int32_t (*ReadVCONNPower)(TCPP0203_Object_t *, uint8_t *);
int32_t (*WriteCtrlRegister)(TCPP0203_Object_t *, uint8_t *);
int32_t (*ReadAckRegister)(TCPP0203_Object_t *, uint8_t *);
int32_t (*ReadFlagRegister)(TCPP0203_Object_t *, uint8_t *);
} TCPP0203_Drv_t;
/**
* @}
*/
/** @defgroup TCPP0203_Exported_Constants TCPP0203 Exported Constants
* @{
*/
/**
* @brief TCPP0203 Driver Response codes
*/
#define TCPP0203_OK (0)
#define TCPP0203_ERROR (-1)
/**
* @brief TCPP0203 possible I2C Addresses
*/
#define TCPP0203_I2C_ADDRESS_X68 (0x68U)
#define TCPP0203_I2C_ADDRESS_X6A (0x6AU)
/**
* @brief TCPP0203 Reg0 Reset Value
*/
#define TCPP0203_REG0_RST_VALUE TCPP0203_GD_CONSUMER_SWITCH_CLOSED
/**
* @brief TCPP0203 VCONN Switch
*/
#define TCPP0203_VCONN_SWITCH_POS (0U)
#define TCPP0203_VCONN_SWITCH_MSK (0x03U << TCPP0203_VCONN_SWITCH_POS)
#define TCPP0203_VCONN_SWITCH_OPEN (0x00U)
#define TCPP0203_VCONN_SWITCH_CC1 (0x01U << TCPP0203_VCONN_SWITCH_POS)
#define TCPP0203_VCONN_SWITCH_CC2 (0x02U << TCPP0203_VCONN_SWITCH_POS)
/**
* @brief TCPP0203 Gate Driver Provider values
*/
#define TCPP0203_GD_PROVIDER_SWITCH_POS (2U)
#define TCPP0203_GD_PROVIDER_SWITCH_MSK (0x01U << TCPP0203_GD_PROVIDER_SWITCH_POS)
#define TCPP0203_GD_PROVIDER_SWITCH_OPEN (0x00U)
#define TCPP0203_GD_PROVIDER_SWITCH_CLOSED (TCPP0203_GD_PROVIDER_SWITCH_MSK)
/**
* @brief TCPP0203 Gate Driver Consumer values
*/
#define TCPP0203_GD_CONSUMER_SWITCH_POS (3U)
#define TCPP0203_GD_CONSUMER_SWITCH_MSK (0x01U << TCPP0203_GD_CONSUMER_SWITCH_POS)
#define TCPP0203_GD_CONSUMER_SWITCH_CLOSED (0x00U)
#define TCPP0203_GD_CONSUMER_SWITCH_OPEN (TCPP0203_GD_CONSUMER_SWITCH_MSK)
/**
* @brief TCPP0203 Power Mode values
*/
#define TCPP0203_POWER_MODE_POS (4U)
#define TCPP0203_POWER_MODE_MSK (0x03U << TCPP0203_POWER_MODE_POS)
#define TCPP0203_POWER_MODE_HIBERNATE (0x00U)
#define TCPP0203_POWER_MODE_LOWPOWER (0x02U << TCPP0203_POWER_MODE_POS)
#define TCPP0203_POWER_MODE_NORMAL (0x01U << TCPP0203_POWER_MODE_POS)
/**
* @brief TCPP0203 VBUS Discharge management
*/
#define TCPP0203_VBUS_DISCHARGE_POS (6U)
#define TCPP0203_VBUS_DISCHARGE_MSK (0x01U << TCPP0203_VBUS_DISCHARGE_POS)
#define TCPP0203_VBUS_DISCHARGE_OFF (0x00U)
#define TCPP0203_VBUS_DISCHARGE_ON (TCPP0203_VBUS_DISCHARGE_MSK)
/**
* @brief TCPP0203 VConn Discharge management
*/
#define TCPP0203_VCONN_DISCHARGE_POS (7U)
#define TCPP0203_VCONN_DISCHARGE_MSK (0x01U << TCPP0203_VCONN_DISCHARGE_POS)
#define TCPP0203_VCONN_DISCHARGE_OFF (0x00U)
#define TCPP0203_VCONN_DISCHARGE_ON (TCPP0203_VCONN_DISCHARGE_MSK)
/**
* @brief TCPP0203 VCONN Switch Acknowledge
*/
#define TCPP0203_VCONN_SWITCH_ACK_POS (0U)
#define TCPP0203_VCONN_SWITCH_ACK_MSK (0x03U << TCPP0203_VCONN_SWITCH_ACK_POS)
#define TCPP0203_VCONN_SWITCH_ACK_OPEN (0x00U)
#define TCPP0203_VCONN_SWITCH_ACK_CC1 (0x02U << TCPP0203_VCONN_SWITCH_ACK_POS)
#define TCPP0203_VCONN_SWITCH_ACK_CC2 (0x01U << TCPP0203_VCONN_SWITCH_ACK_POS)
/**
* @brief TCPP0203 Gate Driver Provider Acknowledge
*/
#define TCPP0203_GD_PROVIDER_SWITCH_ACK_POS (2U)
#define TCPP0203_GD_PROVIDER_SWITCH_ACK_MSK (0x01U << TCPP0203_GD_PROVIDER_SWITCH_ACK_POS)
#define TCPP0203_GD_PROVIDER_SWITCH_ACK_OPEN (0x00U)
#define TCPP0203_GD_PROVIDER_SWITCH_ACK_CLOSED (TCPP0203_GD_PROVIDER_SWITCH_ACK_MSK)
/**
* @brief TCPP0203 Gate Driver Consumer Acknowledge
*/
#define TCPP0203_GD_CONSUMER_SWITCH_ACK_POS (3U)
#define TCPP0203_GD_CONSUMER_SWITCH_ACK_MSK (0x01U << TCPP0203_GD_CONSUMER_SWITCH_ACK_POS)
#define TCPP0203_GD_CONSUMER_SWITCH_ACK_CLOSED (0x00U)
#define TCPP0203_GD_CONSUMER_SWITCH_ACK_OPEN (TCPP0203_GD_CONSUMER_SWITCH_ACK_MSK)
/**
* @brief TCPP0203 Power Mode Acknowledge
*/
#define TCPP0203_POWER_MODE_ACK_POS (4U)
#define TCPP0203_POWER_MODE_ACK_MSK (0x03U << TCPP0203_POWER_MODE_ACK_POS)
#define TCPP0203_POWER_MODE_ACK_HIBERNATE (0x00U)
#define TCPP0203_POWER_MODE_ACK_LOWPOWER (0x01U << TCPP0203_POWER_MODE_ACK_POS)
#define TCPP0203_POWER_MODE_ACK_NORMAL (0x02U << TCPP0203_POWER_MODE_ACK_POS)
/**
* @brief TCPP0203 VBUS Discharge Acknowledge
*/
#define TCPP0203_VBUS_DISCHARGE_ACK_POS (6U)
#define TCPP0203_VBUS_DISCHARGE_ACK_MSK (0x01U << TCPP0203_VBUS_DISCHARGE_ACK_POS)
#define TCPP0203_VBUS_DISCHARGE_ACK_OFF (0x00U)
#define TCPP0203_VBUS_DISCHARGE_ACK_ON (TCPP0203_VBUS_DISCHARGE_ACK_MSK)
/**
* @brief TCPP0203 VConn Discharge Acknowledge
*/
#define TCPP0203_VCONN_DISCHARGE_ACK_POS (7U)
#define TCPP0203_VCONN_DISCHARGE_ACK_MSK (0x01U << TCPP0203_VCONN_DISCHARGE_ACK_POS)
#define TCPP0203_VCONN_DISCHARGE_ACK_OFF (0x00U)
#define TCPP0203_VCONN_DISCHARGE_ACK_ON (TCPP0203_VCONN_DISCHARGE_ACK_MSK)
/**
* @brief TCPP0203 OCP Vconn Flag management
*/
#define TCPP0203_FLAG_OCP_VCONN_POS (0U)
#define TCPP0203_FLAG_OCP_VCONN_MSK (0x01U << TCPP0203_FLAG_OCP_VCONN_POS)
#define TCPP0203_FLAG_OCP_VCONN_SET (TCPP0203_FLAG_OCP_VCONN_MSK)
#define TCPP0203_FLAG_OCP_VCONN_RESET (0x00U)
/**
* @brief TCPP0203 OCP VBUS Flag management
*/
#define TCPP0203_FLAG_OCP_VBUS_POS (1U)
#define TCPP0203_FLAG_OCP_VBUS_MSK (0x01U << TCPP0203_FLAG_OCP_VBUS_POS)
#define TCPP0203_FLAG_OCP_VBUS_SET (TCPP0203_FLAG_OCP_VBUS_MSK)
#define TCPP0203_FLAG_OCP_VBUS_RESET (0x00U)
/**
* @brief TCPP0203 OVP VBUS Flag management
*/
#define TCPP0203_FLAG_OVP_VBUS_POS (2U)
#define TCPP0203_FLAG_OVP_VBUS_MSK (0x01U << TCPP0203_FLAG_OVP_VBUS_POS)
#define TCPP0203_FLAG_OVP_VBUS_SET (TCPP0203_FLAG_OVP_VBUS_MSK)
#define TCPP0203_FLAG_OVP_VBUS_RESET (0x00U)
/**
* @brief TCPP0203 OVP CC Flag management
*/
#define TCPP0203_FLAG_OVP_CC_POS (3U)
#define TCPP0203_FLAG_OVP_CC_MSK (0x01U << TCPP0203_FLAG_OVP_CC_POS)
#define TCPP0203_FLAG_OVP_CC_SET (TCPP0203_FLAG_OVP_CC_MSK)
#define TCPP0203_FLAG_OVP_CC_RESET (0x00U)
/**
* @brief TCPP0203 OTP Flag management
*/
#define TCPP0203_FLAG_OTP_POS (4U)
#define TCPP0203_FLAG_OTP_MSK (0x01U << TCPP0203_FLAG_OTP_POS)
#define TCPP0203_FLAG_OTP_SET (TCPP0203_FLAG_OTP_MSK)
#define TCPP0203_FLAG_OTP_RESET (0x00U)
/**
* @brief TCPP0203 VBUS OK Flag management
*/
#define TCPP0203_FLAG_VBUS_OK_POS (5U)
#define TCPP0203_FLAG_VBUS_OK_MSK (0x01U << TCPP0203_FLAG_VBUS_OK_POS)
#define TCPP0203_FLAG_VBUS_OK_SET (TCPP0203_FLAG_VBUS_OK_MSK)
#define TCPP0203_FLAG_VBUS_OK_RESET (0x00U)
/**
* @brief TCPP0203 VConn Power
*/
#define TCPP0203_FLAG_VCONN_PWR_POS (6U)
#define TCPP0203_FLAG_VCONN_PWR_MSK (0x01U << TCPP0203_FLAG_VCONN_PWR_POS)
#define TCPP0203_FLAG_VCONN_PWR_1W (TCPP0203_FLAG_VCONN_PWR_MSK)
#define TCPP0203_FLAG_VCONN_PWR_0_1W (0x00U)
/**
* @brief TCPP0203 Device Type
*/
#define TCPP0203_DEVICE_TYPE_POS (7U)
#define TCPP0203_DEVICE_TYPE_MSK (0x01U << TCPP0203_DEVICE_TYPE_POS)
#define TCPP0203_DEVICE_TYPE_02 (TCPP0203_DEVICE_TYPE_MSK)
#define TCPP0203_DEVICE_TYPE_03 (0x00U)
/**
* @}
*/
/** @defgroup TCPP0203_Exported_Macros TCPP0203 Exported Macros
* @{
*/
/**
* @}
*/
/** @defgroup TCPP0203_Exported_Functions TCPP0203 Exported Functions
* @{
*/
/*------------------------------------------------------------------------------
TCPP02/03 Type-C port protection functions
------------------------------------------------------------------------------*/
/* High Layer codec functions */
int32_t TCPP0203_RegisterBusIO(TCPP0203_Object_t *pObj, TCPP0203_IO_t *pIO);
int32_t TCPP0203_Init(TCPP0203_Object_t *pObj);
int32_t TCPP0203_DeInit(TCPP0203_Object_t *pObj);
int32_t TCPP0203_Reset(TCPP0203_Object_t *pObj);
int32_t TCPP0203_SetVConnSwitch(TCPP0203_Object_t *pObj, uint8_t VConnSwitch);
int32_t TCPP0203_SetGateDriverProvider(TCPP0203_Object_t *pObj, uint8_t GateDriverProvider);
int32_t TCPP0203_SetGateDriverConsumer(TCPP0203_Object_t *pObj, uint8_t GateDriverConsumer);
int32_t TCPP0203_SetPowerMode(TCPP0203_Object_t *pObj, uint8_t PowerMode);
int32_t TCPP0203_SetVBusDischarge(TCPP0203_Object_t *pObj, uint8_t VBusDischarge);
int32_t TCPP0203_SetVConnDischarge(TCPP0203_Object_t *pObj, uint8_t VConnDischarge);
int32_t TCPP0203_GetVConnSwitchAck(TCPP0203_Object_t *pObj, uint8_t *pVConnSwitchAck);
int32_t TCPP0203_GetGateDriverProviderAck(TCPP0203_Object_t *pObj, uint8_t *pGateDriverProviderAck);
int32_t TCPP0203_GetGateDriverConsumerAck(TCPP0203_Object_t *pObj, uint8_t *pGateDriverConsumerAck);
int32_t TCPP0203_GetPowerModeAck(TCPP0203_Object_t *pObj, uint8_t *pPowerModeAck);
int32_t TCPP0203_GetVBusDischargeAck(TCPP0203_Object_t *pObj, uint8_t *pVBusDischargeAck);
int32_t TCPP0203_GetVConnDischargeAck(TCPP0203_Object_t *pObj, uint8_t *pVConnDischargeAck);
int32_t TCPP0203_GetOCPVConnFlag(TCPP0203_Object_t *pObj, uint8_t *pOCPVConnFlag);
int32_t TCPP0203_GetOCPVBusFlag(TCPP0203_Object_t *pObj, uint8_t *pGetOCPVBusFlag);
int32_t TCPP0203_GetOVPVBusFlag(TCPP0203_Object_t *pObj, uint8_t *pOVPVBusFlag);
int32_t TCPP0203_GetOVPCCFlag(TCPP0203_Object_t *pObj, uint8_t *pOVPCCFlag);
int32_t TCPP0203_GetOTPFlag(TCPP0203_Object_t *pObj, uint8_t *pOTPFlag);
int32_t TCPP0203_GetVBusOkFlag(TCPP0203_Object_t *pObj, uint8_t *pVBusOkFlag);
int32_t TCPP0203_ReadTCPPType(TCPP0203_Object_t *pObj, uint8_t *pTCPPType);
int32_t TCPP0203_ReadVCONNPower(TCPP0203_Object_t *pObj, uint8_t *pVCONNPower);
int32_t TCPP0203_WriteCtrlRegister(TCPP0203_Object_t *pObj, uint8_t *pCtrlRegister);
int32_t TCPP0203_ReadAckRegister(TCPP0203_Object_t *pObj, uint8_t *pAckRegister);
int32_t TCPP0203_ReadFlagRegister(TCPP0203_Object_t *pObj, uint8_t *pFlagRegister);
/**
* @}
*/
/* TCPP02/03 Type-C port protection driver structure */
extern TCPP0203_Drv_t TCPP0203_Driver;
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
#endif /* TCPP0203_H */