110 lines
3.6 KiB
C
110 lines
3.6 KiB
C
/* Copyright 2016 The Chromium OS Authors. All rights reserved.
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
/* USB Power delivery port management */
|
|
#ifndef __CROS_EC_DRIVER_TCPM_IT83XX_H
|
|
#define __CROS_EC_DRIVER_TCPM_IT83XX_H
|
|
|
|
/*
|
|
* Dedicated setting for CC pin.
|
|
* This setting will connect CC pin to internal PD module directly without
|
|
* applying any GPIO/ALT configuration.
|
|
*/
|
|
#define IT83XX_USBPD_CC_PIN_CONFIG 0x86
|
|
|
|
#define TASK_EVENT_PHY_TX_DONE TASK_EVENT_CUSTOM_BIT(PD_EVENT_FIRST_FREE_BIT)
|
|
|
|
#define SET_MASK(reg, bit_mask) ((reg) |= (bit_mask))
|
|
#define CLEAR_MASK(reg, bit_mask) ((reg) &= (~(bit_mask)))
|
|
#define IS_MASK_SET(reg, bit_mask) (((reg) & (bit_mask)) != 0)
|
|
#define IS_MASK_CLEAR(reg, bit_mask) (((reg) & (bit_mask)) == 0)
|
|
|
|
/* macros for set */
|
|
#define USBPD_KICK_TX_START(port) \
|
|
SET_MASK(IT83XX_USBPD_MTCR(port), \
|
|
USBPD_REG_MASK_TX_START)
|
|
#define USBPD_SEND_HARD_RESET(port) \
|
|
SET_MASK(IT83XX_USBPD_MTSR0(port), \
|
|
USBPD_REG_MASK_SEND_HW_RESET)
|
|
#define USBPD_SW_RESET(port) \
|
|
SET_MASK(IT83XX_USBPD_GCR(port), \
|
|
USBPD_REG_MASK_SW_RESET_BIT)
|
|
#define USBPD_ENABLE_BMC_PHY(port) \
|
|
SET_MASK(IT83XX_USBPD_GCR(port), \
|
|
USBPD_REG_MASK_BMC_PHY)
|
|
#define USBPD_DISABLE_BMC_PHY(port) \
|
|
CLEAR_MASK(IT83XX_USBPD_GCR(port), \
|
|
USBPD_REG_MASK_BMC_PHY)
|
|
#define USBPD_START(port) \
|
|
CLEAR_MASK(IT83XX_USBPD_CCGCR(port), \
|
|
USBPD_REG_MASK_DISABLE_CC)
|
|
#define USBPD_ENABLE_SEND_BIST_MODE_2(port) \
|
|
SET_MASK(IT83XX_USBPD_MTSR0(port), \
|
|
USBPD_REG_MASK_SEND_BIST_MODE_2)
|
|
#define USBPD_DISABLE_SEND_BIST_MODE_2(port) \
|
|
CLEAR_MASK(IT83XX_USBPD_MTSR0(port), \
|
|
USBPD_REG_MASK_SEND_BIST_MODE_2)
|
|
|
|
/* macros for get */
|
|
#define USBPD_GET_POWER_ROLE(port) \
|
|
(IT83XX_USBPD_PDMSR(port) & 1)
|
|
#define USBPD_GET_CC1_PULL_REGISTER_SELECTION(port) \
|
|
(IT83XX_USBPD_CCGCR(port) & BIT(1))
|
|
#define USBPD_GET_CC2_PULL_REGISTER_SELECTION(port) \
|
|
(IT83XX_USBPD_BMCSR(port) & BIT(3))
|
|
#define USBPD_GET_PULL_CC_SELECTION(port) \
|
|
(IT83XX_USBPD_CCGCR(port) & 1)
|
|
|
|
/* macros for check */
|
|
#define USBPD_IS_TX_ERR(port) \
|
|
IS_MASK_SET(IT83XX_USBPD_MTCR(port), USBPD_REG_MASK_TX_ERR_STAT)
|
|
#define USBPD_IS_TX_DISCARD(port) \
|
|
IS_MASK_SET(IT83XX_USBPD_MTCR(port), USBPD_REG_MASK_TX_DISCARD_STAT)
|
|
|
|
/* macros for PD ISR */
|
|
#define USBPD_IS_HARD_RESET_DETECT(port) \
|
|
IS_MASK_SET(IT83XX_USBPD_ISR(port), USBPD_REG_MASK_HARD_RESET_DETECT)
|
|
#define USBPD_IS_TX_DONE(port) \
|
|
IS_MASK_SET(IT83XX_USBPD_ISR(port), USBPD_REG_MASK_MSG_TX_DONE)
|
|
#define USBPD_IS_RX_DONE(port) \
|
|
IS_MASK_SET(IT83XX_USBPD_ISR(port), USBPD_REG_MASK_MSG_RX_DONE)
|
|
#ifdef IT83XX_INTC_PLUG_IN_SUPPORT
|
|
#define USBPD_IS_PLUG_IN_OUT_DETECT(port)\
|
|
IS_MASK_SET(IT83XX_USBPD_TCDCR(port), USBPD_REG_PLUG_IN_OUT_DETECT_STAT)
|
|
#endif //IT83XX_INTC_PLUG_IN_SUPPORT
|
|
|
|
enum usbpd_ufp_volt_status {
|
|
USBPD_UFP_STATE_SNK_OPEN = 0,
|
|
USBPD_UFP_STATE_SNK_DEF = 1,
|
|
USBPD_UFP_STATE_SNK_1_5 = 3,
|
|
USBPD_UFP_STATE_SNK_3_0 = 7,
|
|
};
|
|
|
|
enum usbpd_dfp_volt_status {
|
|
USBPD_DFP_STATE_SRC_RA = 0,
|
|
USBPD_DFP_STATE_SRC_RD = 1,
|
|
USBPD_DFP_STATE_SRC_OPEN = 3,
|
|
};
|
|
|
|
enum usbpd_power_role {
|
|
USBPD_POWER_ROLE_CONSUMER,
|
|
USBPD_POWER_ROLE_PROVIDER,
|
|
USBPD_POWER_ROLE_CONSUMER_PROVIDER,
|
|
USBPD_POWER_ROLE_PROVIDER_CONSUMER,
|
|
};
|
|
|
|
struct usbpd_ctrl_t {
|
|
volatile uint8_t *cc1;
|
|
volatile uint8_t *cc2;
|
|
uint8_t irq;
|
|
};
|
|
|
|
extern const struct usbpd_ctrl_t usbpd_ctrl_regs[];
|
|
extern const struct tcpm_drv it83xx_tcpm_drv;
|
|
/* Disable integrated pd module */
|
|
void it83xx_disable_pd_module(int port);
|
|
|
|
#endif /* __CROS_EC_DRIVER_TCPM_IT83XX_H */
|