]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
USB: add descriptors from USB Power Delivery spec
authorOliver Neukum <oneukum@suse.com>
Thu, 10 Mar 2016 15:09:08 +0000 (16:09 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 18 Apr 2016 19:33:15 +0000 (04:33 +0900)
Adding the descriptors of chapter 9.2 of the Power Delivery spec.

Signed-off-by: Oliver Neukum <oneukum@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
include/uapi/linux/usb/ch9.h

index d5ce71607972e82f37e7a2aaa83d9fd59c87f919..df1beca31bec253909b7b495bf86bdaffa392540 100644 (file)
@@ -913,6 +913,104 @@ struct usb_ssp_cap_descriptor {
 #define USB_SSP_SUBLINK_SPEED_LSM      (0xff << 16)    /* Lanespeed mantissa */
 } __attribute__((packed));
 
+/*
+ * USB Power Delivery Capability Descriptor:
+ * Defines capabilities for PD
+ */
+/* Defines the various PD Capabilities of this device */
+#define USB_PD_POWER_DELIVERY_CAPABILITY       0x06
+/* Provides information on each battery supported by the device */
+#define USB_PD_BATTERY_INFO_CAPABILITY         0x07
+/* The Consumer characteristics of a Port on the device */
+#define USB_PD_PD_CONSUMER_PORT_CAPABILITY     0x08
+/* The provider characteristics of a Port on the device */
+#define USB_PD_PD_PROVIDER_PORT_CAPABILITY     0x09
+
+struct usb_pd_cap_descriptor {
+       __u8  bLength;
+       __u8  bDescriptorType;
+       __u8  bDevCapabilityType; /* set to USB_PD_POWER_DELIVERY_CAPABILITY */
+       __u8  bReserved;
+       __le32 bmAttributes;
+#define USB_PD_CAP_BATTERY_CHARGING    (1 << 1) /* supports Battery Charging specification */
+#define USB_PD_CAP_USB_PD              (1 << 2) /* supports USB Power Delivery specification */
+#define USB_PD_CAP_PROVIDER            (1 << 3) /* can provide power */
+#define USB_PD_CAP_CONSUMER            (1 << 4) /* can consume power */
+#define USB_PD_CAP_CHARGING_POLICY     (1 << 5) /* supports CHARGING_POLICY feature */
+#define USB_PD_CAP_TYPE_C_CURRENT      (1 << 6) /* supports power capabilities defined in the USB Type-C Specification */
+
+#define USB_PD_CAP_PWR_AC              (1 << 8)
+#define USB_PD_CAP_PWR_BAT             (1 << 9)
+#define USB_PD_CAP_PWR_USE_V_BUS       (1 << 14)
+
+       __le16 bmProviderPorts; /* Bit zero refers to the UFP of the device */
+       __le16 bmConsumerPorts;
+       __le16 bcdBCVersion;
+       __le16 bcdPDVersion;
+       __le16 bcdUSBTypeCVersion;
+} __attribute__((packed));
+
+struct usb_pd_cap_battery_info_descriptor {
+       __u8 bLength;
+       __u8 bDescriptorType;
+       __u8 bDevCapabilityType;
+       /* Index of string descriptor shall contain the user friendly name for this battery */
+       __u8 iBattery;
+       /* Index of string descriptor shall contain the Serial Number String for this battery */
+       __u8 iSerial;
+       __u8 iManufacturer;
+       __u8 bBatteryId; /* uniquely identifies this battery in status Messages */
+       __u8 bReserved;
+       /*
+        * Shall contain the Battery Charge value above which this
+        * battery is considered to be fully charged but not necessarily
+        * “topped off.”
+        */
+       __le32 dwChargedThreshold; /* in mWh */
+       /*
+        * Shall contain the minimum charge level of this battery such
+        * that above this threshold, a device can be assured of being
+        * able to power up successfully (see Battery Charging 1.2).
+        */
+       __le32 dwWeakThreshold; /* in mWh */
+       __le32 dwBatteryDesignCapacity; /* in mWh */
+       __le32 dwBatteryLastFullchargeCapacity; /* in mWh */
+} __attribute__((packed));
+
+struct usb_pd_cap_consumer_port_descriptor {
+       __u8 bLength;
+       __u8 bDescriptorType;
+       __u8 bDevCapabilityType;
+       __u8 bReserved;
+       __u8 bmCapabilities;
+/* port will oerate under: */
+#define USB_PD_CAP_CONSUMER_BC         (1 << 0) /* BC */
+#define USB_PD_CAP_CONSUMER_PD         (1 << 1) /* PD */
+#define USB_PD_CAP_CONSUMER_TYPE_C     (1 << 2) /* USB Type-C Current */
+       __le16 wMinVoltage; /* in 50mV units */
+       __le16 wMaxVoltage; /* in 50mV units */
+       __u16 wReserved;
+       __le32 dwMaxOperatingPower; /* in 10 mW - operating at steady state */
+       __le32 dwMaxPeakPower; /* in 10mW units - operating at peak power */
+       __le32 dwMaxPeakPowerTime; /* in 100ms units - duration of peak */
+#define USB_PD_CAP_CONSUMER_UNKNOWN_PEAK_POWER_TIME 0xffff
+} __attribute__((packed));
+
+struct usb_pd_cap_provider_port_descriptor {
+       __u8 bLength;
+       __u8 bDescriptorType;
+       __u8 bDevCapabilityType;
+       __u8 bReserved1;
+       __u8 bmCapabilities;
+/* port will oerate under: */
+#define USB_PD_CAP_PROVIDER_BC         (1 << 0) /* BC */
+#define USB_PD_CAP_PROVIDER_PD         (1 << 1) /* PD */
+#define USB_PD_CAP_PROVIDER_TYPE_C     (1 << 2) /* USB Type-C Current */
+       __u8 bNumOfPDObjects;
+       __u8 bReserved2;
+       __le32 wPowerDataObject[];
+} __attribute__((packed));
+
 /*
  * Precision time measurement capability descriptor: advertised by devices and
  * hubs that support PTM