Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1376758

[PATCH v8 5/7] mfd: cros_ec: Add more definitions for PD commands

From Tomeu Vizoso <tomeu.vizoso@collabora.com>
Newsgroups linux.kernel
Subject [PATCH v8 5/7] mfd: cros_ec: Add more definitions for PD commands
Date 2016-04-12 14:40 +0200
Message-ID <rn5LQ-7sP-33@gated-at.bofh.it> (permalink)
References <rn5LP-7sP-7@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Copy a few structs and commands from the EC firmware headers so we can
communicate with the EC regarding PD functionality.

Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
---

Changes in v8:
- Don't add stuff to cros_ec_commands.h not needed in this series

Changes in v7: None
Changes in v6: None
Changes in v5: None
Changes in v4: None
Changes in v3: None
Changes in v2: None

 include/linux/mfd/cros_ec_commands.h | 182 +++++++++++++++++++++++++++++++++++
 1 file changed, 182 insertions(+)

diff --git a/include/linux/mfd/cros_ec_commands.h b/include/linux/mfd/cros_ec_commands.h
index 54b0812601f8..2a923a37dccb 100644
--- a/include/linux/mfd/cros_ec_commands.h
+++ b/include/linux/mfd/cros_ec_commands.h
@@ -286,6 +286,9 @@ enum host_event_code {
 	/* Hang detect logic detected a hang and warm rebooted the AP */
 	EC_HOST_EVENT_HANG_REBOOT = 21,
 
+	/* PD MCU triggering host event */
+	EC_HOST_EVENT_PD_MCU = 22,
+
 	/*
 	 * The high bit of the event mask is not used as a host event code.  If
 	 * it reads back as set, then the entire event mask should be
@@ -2576,6 +2579,185 @@ struct ec_params_usb_pd_control {
 	uint8_t mux;
 } __packed;
 
+#define EC_CMD_USB_PD_PORTS 0x102
+
+struct ec_response_usb_pd_ports {
+	uint8_t num_ports;
+} __packed;
+
+#define EC_CMD_USB_PD_POWER_INFO 0x103
+
+#define PD_POWER_CHARGING_PORT 0xff
+struct ec_params_usb_pd_power_info {
+	uint8_t port;
+} __packed;
+
+enum usb_chg_type {
+	USB_CHG_TYPE_NONE,
+	USB_CHG_TYPE_PD,
+	USB_CHG_TYPE_C,
+	USB_CHG_TYPE_PROPRIETARY,
+	USB_CHG_TYPE_BC12_DCP,
+	USB_CHG_TYPE_BC12_CDP,
+	USB_CHG_TYPE_BC12_SDP,
+	USB_CHG_TYPE_OTHER,
+	USB_CHG_TYPE_VBUS,
+	USB_CHG_TYPE_UNKNOWN,
+};
+enum usb_power_roles {
+	USB_PD_PORT_POWER_DISCONNECTED,
+	USB_PD_PORT_POWER_SOURCE,
+	USB_PD_PORT_POWER_SINK,
+	USB_PD_PORT_POWER_SINK_NOT_CHARGING,
+};
+
+struct usb_chg_measures {
+	uint16_t voltage_max;
+	uint16_t voltage_now;
+	uint16_t current_max;
+	uint16_t current_lim;
+} __packed;
+
+struct ec_response_usb_pd_power_info {
+	uint8_t role;
+	uint8_t type;
+	uint8_t dualrole;
+	uint8_t reserved1;
+	struct usb_chg_measures meas;
+	uint32_t max_power;
+} __packed;
+
+/* Read USB-PD Accessory info */
+#define EC_CMD_USB_PD_DEV_INFO 0x112
+
+struct ec_params_usb_pd_info_request {
+	uint8_t port;
+} __packed;
+
+/* Read USB-PD Device discovery info */
+#define EC_CMD_USB_PD_DISCOVERY 0x113
+
+/**
+ * struct ec_params_usb_pd_discovery_entry - Params for EC_CMD_USB_PD_DISCOVERY
+ *
+ * @vid: USB-IF VID
+ * @pid: USB-IF PID
+ * @ptype: product type (hub, periph, cable, ama)
+ */
+struct ec_params_usb_pd_discovery_entry {
+	uint16_t vid;
+	uint16_t pid;
+	uint8_t ptype;
+} __packed;
+
+/* Override default charge behavior */
+#define EC_CMD_PD_CHARGE_PORT_OVERRIDE 0x114
+
+/* Negative port parameters have special meaning */
+enum usb_pd_override_ports {
+	OVERRIDE_DONT_CHARGE = -2,
+	OVERRIDE_OFF = -1,
+	/* [0, CONFIG_USB_PD_PORT_COUNT): Port# */
+};
+
+/**
+ * struct ec_params_charge_port_override - Params for CHARGE_PORT_OVERRIDE cmd
+ *
+ * @override_port: Override port number
+ */
+struct ec_params_charge_port_override {
+	int16_t override_port;
+} __packed;
+
+/* Read (and delete) one entry of PD event log */
+#define EC_CMD_PD_GET_LOG_ENTRY 0x115
+
+/**
+ * struct ec_response_pd_log - Response for EC_CMD_PD_GET_LOG_ENTRY
+ *
+ * @timestamp_ms: relative timestamp
+ * @type: event type, see PD_EVENT_xx below
+ * @size_port: [7:5] port number [4:0] payload size in bytes
+ * @data: type-defined data payload
+ * @payload: optional additional data payload: 0..16 bytes
+ */
+struct ec_response_pd_log {
+	uint32_t timestamp_ms;
+	uint8_t type;
+	uint8_t size_port;
+	uint16_t data;
+	uint8_t payload[0];
+} __packed;
+
+/* The timestamp is the microsecond counter shifted to get about a ms. */
+#define PD_LOG_TIMESTAMP_SHIFT 10 /* 1 LSB = 1024us */
+
+#define PD_LOG_SIZE_MASK  0x1f
+#define PD_LOG_PORT_MASK  0xe0
+#define PD_LOG_PORT_SHIFT    5
+#define PD_LOG_PORT_SIZE(port, size) (((port) << PD_LOG_PORT_SHIFT) | \
+				      ((size) & PD_LOG_SIZE_MASK))
+#define PD_LOG_PORT(size_port) ((size_port) >> PD_LOG_PORT_SHIFT)
+#define PD_LOG_SIZE(size_port) ((size_port) & PD_LOG_SIZE_MASK)
+
+/* PD event log : entry types */
+/* PD MCU events */
+#define PD_EVENT_MCU_BASE       0x00
+#define PD_EVENT_MCU_CHARGE             (PD_EVENT_MCU_BASE+0)
+#define PD_EVENT_MCU_CONNECT            (PD_EVENT_MCU_BASE+1)
+/* Reserved for custom board event */
+#define PD_EVENT_MCU_BOARD_CUSTOM       (PD_EVENT_MCU_BASE+2)
+/* PD generic accessory events */
+#define PD_EVENT_ACC_BASE       0x20
+#define PD_EVENT_ACC_RW_FAIL   (PD_EVENT_ACC_BASE+0)
+#define PD_EVENT_ACC_RW_ERASE  (PD_EVENT_ACC_BASE+1)
+/* PD power supply events */
+#define PD_EVENT_PS_BASE        0x40
+#define PD_EVENT_PS_FAULT      (PD_EVENT_PS_BASE+0)
+/* PD video dongles events */
+#define PD_EVENT_VIDEO_BASE     0x60
+#define PD_EVENT_VIDEO_DP_MODE (PD_EVENT_VIDEO_BASE+0)
+#define PD_EVENT_VIDEO_CODEC   (PD_EVENT_VIDEO_BASE+1)
+/* Returned in the "type" field, when there is no entry available */
+#define PD_EVENT_NO_ENTRY       0xff
+
+/*
+ * PD_EVENT_MCU_CHARGE event definition :
+ * the payload is "struct usb_chg_measures"
+ * the data field contains the port state flags as defined below :
+ */
+/* Port partner is a dual role device */
+#define CHARGE_FLAGS_DUAL_ROLE         (1 << 15)
+/* Port is the pending override port */
+#define CHARGE_FLAGS_DELAYED_OVERRIDE  (1 << 14)
+/* Port is the override port */
+#define CHARGE_FLAGS_OVERRIDE          (1 << 13)
+/* Charger type */
+#define CHARGE_FLAGS_TYPE_SHIFT               3
+#define CHARGE_FLAGS_TYPE_MASK       (0xf << CHARGE_FLAGS_TYPE_SHIFT)
+/* Power delivery role */
+#define CHARGE_FLAGS_ROLE_MASK         (7 <<  0)
+
+struct mcdp_version {
+	uint8_t major;
+	uint8_t minor;
+	uint16_t build;
+} __packed;
+
+/**
+ * struct mcdp_info - payload of PD_EVENT_VIDEO_CODEC
+ */
+struct mcdp_info {
+	uint8_t family[2];
+	uint8_t chipid[2];
+	struct mcdp_version irom;
+	struct mcdp_version fw;
+} __packed;
+
+/* struct mcdp_info field decoding */
+#define MCDP_CHIPID(chipid) ((chipid[0] << 8) | chipid[1])
+#define MCDP_FAMILY(family) ((family[0] << 8) | family[1])
+
 /*****************************************************************************/
 /*
  * Passthru commands
-- 
2.5.5

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v8 0/7] EC-based USB Power Delivery support for Chrome machines Tomeu Vizoso <tomeu.vizoso@collabora.com> - 2016-04-12 14:40 +0200
  [PATCH v8 2/7] Input: cros_ec_keyb - Stop handling interrupts directly Tomeu Vizoso <tomeu.vizoso@collabora.com> - 2016-04-12 14:40 +0200
  [PATCH v8 4/7] mfd: cros_ec: Add cros_ec_get_host_event Tomeu Vizoso <tomeu.vizoso@collabora.com> - 2016-04-12 14:40 +0200
  [PATCH v8 5/7] mfd: cros_ec: Add more definitions for PD commands Tomeu Vizoso <tomeu.vizoso@collabora.com> - 2016-04-12 14:40 +0200
  [PATCH v8 7/7] platform/chrome: Register USB PD charger device Tomeu Vizoso <tomeu.vizoso@collabora.com> - 2016-04-12 14:40 +0200
  [PATCH v8 3/7] mfd: cros_ec: Add cros_ec_cmd_xfer_status helper Tomeu Vizoso <tomeu.vizoso@collabora.com> - 2016-04-12 14:40 +0200
  [PATCH v8 1/7] mfd: cros_ec: Add MKBP event support Tomeu Vizoso <tomeu.vizoso@collabora.com> - 2016-04-12 14:40 +0200

csiph-web