tcpci.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * Copyright 2015-2017 Google, Inc
  4. *
  5. * USB Type-C Port Controller Interface.
  6. */
  7. #ifndef __LINUX_USB_TCPCI_H
  8. #define __LINUX_USB_TCPCI_H
  9. #define TCPC_VENDOR_ID 0x0
  10. #define TCPC_PRODUCT_ID 0x2
  11. #define TCPC_BCD_DEV 0x4
  12. #define TCPC_TC_REV 0x6
  13. #define TCPC_PD_REV 0x8
  14. #define TCPC_PD_INT_REV 0xa
  15. #define TCPC_ALERT 0x10
  16. #define TCPC_ALERT_VBUS_DISCNCT BIT(11)
  17. #define TCPC_ALERT_RX_BUF_OVF BIT(10)
  18. #define TCPC_ALERT_FAULT BIT(9)
  19. #define TCPC_ALERT_V_ALARM_LO BIT(8)
  20. #define TCPC_ALERT_V_ALARM_HI BIT(7)
  21. #define TCPC_ALERT_TX_SUCCESS BIT(6)
  22. #define TCPC_ALERT_TX_DISCARDED BIT(5)
  23. #define TCPC_ALERT_TX_FAILED BIT(4)
  24. #define TCPC_ALERT_RX_HARD_RST BIT(3)
  25. #define TCPC_ALERT_RX_STATUS BIT(2)
  26. #define TCPC_ALERT_POWER_STATUS BIT(1)
  27. #define TCPC_ALERT_CC_STATUS BIT(0)
  28. #define TCPC_ALERT_MASK 0x12
  29. #define TCPC_POWER_STATUS_MASK 0x14
  30. #define TCPC_FAULT_STATUS_MASK 0x15
  31. #define TCPC_CONFIG_STD_OUTPUT 0x18
  32. #define TCPC_TCPC_CTRL 0x19
  33. #define TCPC_TCPC_CTRL_ORIENTATION BIT(0)
  34. #define TCPC_ROLE_CTRL 0x1a
  35. #define TCPC_ROLE_CTRL_DRP BIT(6)
  36. #define TCPC_ROLE_CTRL_RP_VAL_SHIFT 4
  37. #define TCPC_ROLE_CTRL_RP_VAL_MASK 0x3
  38. #define TCPC_ROLE_CTRL_RP_VAL_DEF 0x0
  39. #define TCPC_ROLE_CTRL_RP_VAL_1_5 0x1
  40. #define TCPC_ROLE_CTRL_RP_VAL_3_0 0x2
  41. #define TCPC_ROLE_CTRL_CC2_SHIFT 2
  42. #define TCPC_ROLE_CTRL_CC2_MASK 0x3
  43. #define TCPC_ROLE_CTRL_CC1_SHIFT 0
  44. #define TCPC_ROLE_CTRL_CC1_MASK 0x3
  45. #define TCPC_ROLE_CTRL_CC_RA 0x0
  46. #define TCPC_ROLE_CTRL_CC_RP 0x1
  47. #define TCPC_ROLE_CTRL_CC_RD 0x2
  48. #define TCPC_ROLE_CTRL_CC_OPEN 0x3
  49. #define TCPC_FAULT_CTRL 0x1b
  50. #define TCPC_POWER_CTRL 0x1c
  51. #define TCPC_POWER_CTRL_VCONN_ENABLE BIT(0)
  52. #define TCPC_CC_STATUS 0x1d
  53. #define TCPC_CC_STATUS_TOGGLING BIT(5)
  54. #define TCPC_CC_STATUS_TERM BIT(4)
  55. #define TCPC_CC_STATUS_CC2_SHIFT 2
  56. #define TCPC_CC_STATUS_CC2_MASK 0x3
  57. #define TCPC_CC_STATUS_CC1_SHIFT 0
  58. #define TCPC_CC_STATUS_CC1_MASK 0x3
  59. #define TCPC_POWER_STATUS 0x1e
  60. #define TCPC_POWER_STATUS_UNINIT BIT(6)
  61. #define TCPC_POWER_STATUS_VBUS_DET BIT(3)
  62. #define TCPC_POWER_STATUS_VBUS_PRES BIT(2)
  63. #define TCPC_FAULT_STATUS 0x1f
  64. #define TCPC_COMMAND 0x23
  65. #define TCPC_CMD_WAKE_I2C 0x11
  66. #define TCPC_CMD_DISABLE_VBUS_DETECT 0x22
  67. #define TCPC_CMD_ENABLE_VBUS_DETECT 0x33
  68. #define TCPC_CMD_DISABLE_SINK_VBUS 0x44
  69. #define TCPC_CMD_SINK_VBUS 0x55
  70. #define TCPC_CMD_DISABLE_SRC_VBUS 0x66
  71. #define TCPC_CMD_SRC_VBUS_DEFAULT 0x77
  72. #define TCPC_CMD_SRC_VBUS_HIGH 0x88
  73. #define TCPC_CMD_LOOK4CONNECTION 0x99
  74. #define TCPC_CMD_RXONEMORE 0xAA
  75. #define TCPC_CMD_I2C_IDLE 0xFF
  76. #define TCPC_DEV_CAP_1 0x24
  77. #define TCPC_DEV_CAP_2 0x26
  78. #define TCPC_STD_INPUT_CAP 0x28
  79. #define TCPC_STD_OUTPUT_CAP 0x29
  80. #define TCPC_MSG_HDR_INFO 0x2e
  81. #define TCPC_MSG_HDR_INFO_DATA_ROLE BIT(3)
  82. #define TCPC_MSG_HDR_INFO_PWR_ROLE BIT(0)
  83. #define TCPC_MSG_HDR_INFO_REV_SHIFT 1
  84. #define TCPC_MSG_HDR_INFO_REV_MASK 0x3
  85. #define TCPC_RX_DETECT 0x2f
  86. #define TCPC_RX_DETECT_HARD_RESET BIT(5)
  87. #define TCPC_RX_DETECT_SOP BIT(0)
  88. #define TCPC_RX_BYTE_CNT 0x30
  89. #define TCPC_RX_BUF_FRAME_TYPE 0x31
  90. #define TCPC_RX_HDR 0x32
  91. #define TCPC_RX_DATA 0x34 /* through 0x4f */
  92. #define TCPC_TRANSMIT 0x50
  93. #define TCPC_TRANSMIT_RETRY_SHIFT 4
  94. #define TCPC_TRANSMIT_RETRY_MASK 0x3
  95. #define TCPC_TRANSMIT_TYPE_SHIFT 0
  96. #define TCPC_TRANSMIT_TYPE_MASK 0x7
  97. #define TCPC_TX_BYTE_CNT 0x51
  98. #define TCPC_TX_HDR 0x52
  99. #define TCPC_TX_DATA 0x54 /* through 0x6f */
  100. #define TCPC_VBUS_VOLTAGE 0x70
  101. #define TCPC_VBUS_SINK_DISCONNECT_THRESH 0x72
  102. #define TCPC_VBUS_STOP_DISCHARGE_THRESH 0x74
  103. #define TCPC_VBUS_VOLTAGE_ALARM_HI_CFG 0x76
  104. #define TCPC_VBUS_VOLTAGE_ALARM_LO_CFG 0x78
  105. struct tcpci;
  106. struct tcpci_data {
  107. struct regmap *regmap;
  108. int (*init)(struct tcpci *tcpci, struct tcpci_data *data);
  109. int (*set_vconn)(struct tcpci *tcpci, struct tcpci_data *data,
  110. bool enable);
  111. int (*start_drp_toggling)(struct tcpci *tcpci, struct tcpci_data *data,
  112. enum typec_cc_status cc);
  113. };
  114. struct tcpci *tcpci_register_port(struct device *dev, struct tcpci_data *data);
  115. void tcpci_unregister_port(struct tcpci *tcpci);
  116. irqreturn_t tcpci_irq(struct tcpci *tcpci);
  117. #endif /* __LINUX_USB_TCPCI_H */