Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mfd: cros_ec: Add USBPD charger commands and struct definitions.

The USBPD charger driver gets information from the ChromeOS EC, this
patch adds the USBPD charger definitions needed by this driver.

Signed-off-by: Sameer Nanda <snanda@chromium.org>
Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>

authored by

Sameer Nanda and committed by
Lee Jones
06635894 ce397d21

+128 -4
+128 -4
include/linux/mfd/cros_ec_commands.h
··· 2593 2593 } __packed; 2594 2594 2595 2595 /* 2596 - * Set maximum external power current. 2596 + * Set maximum external voltage / current. 2597 2597 */ 2598 - #define EC_CMD_EXT_POWER_CURRENT_LIMIT 0xa2 2598 + #define EC_CMD_EXTERNAL_POWER_LIMIT 0x00A2 2599 2599 2600 - struct ec_params_ext_power_current_limit { 2601 - uint32_t limit; /* in mA */ 2600 + /* Command v0 is used only on Spring and is obsolete + unsupported */ 2601 + struct ec_params_external_power_limit_v1 { 2602 + uint16_t current_lim; /* in mA, or EC_POWER_LIMIT_NONE to clear limit */ 2603 + uint16_t voltage_lim; /* in mV, or EC_POWER_LIMIT_NONE to clear limit */ 2602 2604 } __packed; 2605 + 2606 + #define EC_POWER_LIMIT_NONE 0xffff 2603 2607 2604 2608 /* Inform the EC when entering a sleep state */ 2605 2609 #define EC_CMD_HOST_SLEEP_EVENT 0xa9 ··· 2978 2974 USB_CHG_TYPE_VBUS, 2979 2975 USB_CHG_TYPE_UNKNOWN, 2980 2976 }; 2977 + enum usb_power_roles { 2978 + USB_PD_PORT_POWER_DISCONNECTED, 2979 + USB_PD_PORT_POWER_SOURCE, 2980 + USB_PD_PORT_POWER_SINK, 2981 + USB_PD_PORT_POWER_SINK_NOT_CHARGING, 2982 + }; 2981 2983 2982 2984 struct usb_chg_measures { 2983 2985 uint16_t voltage_max; ··· 3000 2990 struct usb_chg_measures meas; 3001 2991 uint32_t max_power; 3002 2992 } __packed; 2993 + 2994 + struct ec_params_usb_pd_info_request { 2995 + uint8_t port; 2996 + } __packed; 2997 + 2998 + /* Read USB-PD Device discovery info */ 2999 + #define EC_CMD_USB_PD_DISCOVERY 0x0113 3000 + struct ec_params_usb_pd_discovery_entry { 3001 + uint16_t vid; /* USB-IF VID */ 3002 + uint16_t pid; /* USB-IF PID */ 3003 + uint8_t ptype; /* product type (hub,periph,cable,ama) */ 3004 + } __packed; 3005 + 3006 + /* Override default charge behavior */ 3007 + #define EC_CMD_PD_CHARGE_PORT_OVERRIDE 0x0114 3008 + 3009 + /* Negative port parameters have special meaning */ 3010 + enum usb_pd_override_ports { 3011 + OVERRIDE_DONT_CHARGE = -2, 3012 + OVERRIDE_OFF = -1, 3013 + /* [0, CONFIG_USB_PD_PORT_COUNT): Port# */ 3014 + }; 3015 + 3016 + struct ec_params_charge_port_override { 3017 + int16_t override_port; /* Override port# */ 3018 + } __packed; 3019 + 3020 + /* Read (and delete) one entry of PD event log */ 3021 + #define EC_CMD_PD_GET_LOG_ENTRY 0x0115 3022 + 3023 + struct ec_response_pd_log { 3024 + uint32_t timestamp; /* relative timestamp in milliseconds */ 3025 + uint8_t type; /* event type : see PD_EVENT_xx below */ 3026 + uint8_t size_port; /* [7:5] port number [4:0] payload size in bytes */ 3027 + uint16_t data; /* type-defined data payload */ 3028 + uint8_t payload[0]; /* optional additional data payload: 0..16 bytes */ 3029 + } __packed; 3030 + 3031 + /* The timestamp is the microsecond counter shifted to get about a ms. */ 3032 + #define PD_LOG_TIMESTAMP_SHIFT 10 /* 1 LSB = 1024us */ 3033 + 3034 + #define PD_LOG_SIZE_MASK 0x1f 3035 + #define PD_LOG_PORT_MASK 0xe0 3036 + #define PD_LOG_PORT_SHIFT 5 3037 + #define PD_LOG_PORT_SIZE(port, size) (((port) << PD_LOG_PORT_SHIFT) | \ 3038 + ((size) & PD_LOG_SIZE_MASK)) 3039 + #define PD_LOG_PORT(size_port) ((size_port) >> PD_LOG_PORT_SHIFT) 3040 + #define PD_LOG_SIZE(size_port) ((size_port) & PD_LOG_SIZE_MASK) 3041 + 3042 + /* PD event log : entry types */ 3043 + /* PD MCU events */ 3044 + #define PD_EVENT_MCU_BASE 0x00 3045 + #define PD_EVENT_MCU_CHARGE (PD_EVENT_MCU_BASE+0) 3046 + #define PD_EVENT_MCU_CONNECT (PD_EVENT_MCU_BASE+1) 3047 + /* Reserved for custom board event */ 3048 + #define PD_EVENT_MCU_BOARD_CUSTOM (PD_EVENT_MCU_BASE+2) 3049 + /* PD generic accessory events */ 3050 + #define PD_EVENT_ACC_BASE 0x20 3051 + #define PD_EVENT_ACC_RW_FAIL (PD_EVENT_ACC_BASE+0) 3052 + #define PD_EVENT_ACC_RW_ERASE (PD_EVENT_ACC_BASE+1) 3053 + /* PD power supply events */ 3054 + #define PD_EVENT_PS_BASE 0x40 3055 + #define PD_EVENT_PS_FAULT (PD_EVENT_PS_BASE+0) 3056 + /* PD video dongles events */ 3057 + #define PD_EVENT_VIDEO_BASE 0x60 3058 + #define PD_EVENT_VIDEO_DP_MODE (PD_EVENT_VIDEO_BASE+0) 3059 + #define PD_EVENT_VIDEO_CODEC (PD_EVENT_VIDEO_BASE+1) 3060 + /* Returned in the "type" field, when there is no entry available */ 3061 + #define PD_EVENT_NO_ENTRY 0xff 3062 + 3063 + /* 3064 + * PD_EVENT_MCU_CHARGE event definition : 3065 + * the payload is "struct usb_chg_measures" 3066 + * the data field contains the port state flags as defined below : 3067 + */ 3068 + /* Port partner is a dual role device */ 3069 + #define CHARGE_FLAGS_DUAL_ROLE BIT(15) 3070 + /* Port is the pending override port */ 3071 + #define CHARGE_FLAGS_DELAYED_OVERRIDE BIT(14) 3072 + /* Port is the override port */ 3073 + #define CHARGE_FLAGS_OVERRIDE BIT(13) 3074 + /* Charger type */ 3075 + #define CHARGE_FLAGS_TYPE_SHIFT 3 3076 + #define CHARGE_FLAGS_TYPE_MASK (0xf << CHARGE_FLAGS_TYPE_SHIFT) 3077 + /* Power delivery role */ 3078 + #define CHARGE_FLAGS_ROLE_MASK (7 << 0) 3079 + 3080 + /* 3081 + * PD_EVENT_PS_FAULT data field flags definition : 3082 + */ 3083 + #define PS_FAULT_OCP 1 3084 + #define PS_FAULT_FAST_OCP 2 3085 + #define PS_FAULT_OVP 3 3086 + #define PS_FAULT_DISCH 4 3087 + 3088 + /* 3089 + * PD_EVENT_VIDEO_CODEC payload is "struct mcdp_info". 3090 + */ 3091 + struct mcdp_version { 3092 + uint8_t major; 3093 + uint8_t minor; 3094 + uint16_t build; 3095 + } __packed; 3096 + 3097 + struct mcdp_info { 3098 + uint8_t family[2]; 3099 + uint8_t chipid[2]; 3100 + struct mcdp_version irom; 3101 + struct mcdp_version fw; 3102 + } __packed; 3103 + 3104 + /* struct mcdp_info field decoding */ 3105 + #define MCDP_CHIPID(chipid) ((chipid[0] << 8) | chipid[1]) 3106 + #define MCDP_FAMILY(family) ((family[0] << 8) | family[1]) 3003 3107 3004 3108 /* Get info about USB-C SS muxes */ 3005 3109 #define EC_CMD_USB_PD_MUX_INFO 0x11a