Skip to content

Add USB-C hubs

Add a couple of USB-C hubs that I’ve tested and that are currently (2023) on the market.

All were tested on a Librem 5 Evergreen with a 0.2.0 firmware.

Test protocol

Prerequisites: Phone booted into PureOS Byzantium, tracing enabled for the tps6598x, high-quality 45W charger, high-quality cabling

  1. Plug hub into phone, connect hub USB-C PD input to 45W charging port, no external display connected

  2. Figure out the USB ID of the hub
    (If the hub has several USB devices, pick the one where the Billboard Capability section shows the Alternate Mode configuration)

  3. Dump the detailed output of sudo lsusb -v for that USB ID

  4. Inspect charging current of the BQ25890 and battery with no external display connected
    (not included in test report)

  5. Connect external display via HDMI, 4K@30 Hz

  6. Confirm DP Alt mode is working

  7. Confirm that even with display connected, charging current is still positive

  8. Take note of charging current of the BQ25890 and battery
    (with display connected and while battery capacity between 0% and 75%)

  9. Dump the tps6598x trace (sudo cat /sys/kernel/debug/tracing/trace)

  10. Unplug phone, turn connector 180 degrees, plug in again

  11. Confirm that DP Alt mode is still working and that charging current is in the same ballpark as in step 7

  12. Dump the tps6598x trace again

Bash functions to inspect the charging current

Requires the bc package to be installed.

print_vcp() {
  local name voltage current status health charge_type
  name="${1?}"
  read voltage < "${2?}"
  read current < "${3?}"
  read status < "${4?}"
  read health < "${5:-/dev/null}" || true
  read charge_type < "${6:-/dev/null}" || true
  LC_NUMERIC=en_US.utf8 printf \
    '%-36s | %5.1f V | %'\''8.0f mA | %5.1f W | %s | %s | %s\n' \
    "${name}" \
    "$(bc <<< "scale=6; ${voltage} / 10^6")" \
    "$(bc <<< "scale=6; ${current} / 10^3")" \
    "$(bc <<< "scale=6; ${voltage} / 10^6 * ${current} / 10^6")" \
    "${status}" "${health:-N/A}" "${charge_type:-N/A}"
}

export -f print_vcp

charge() {
  watch -x -n 1 bash -c 'set -eu; print_vcp "Phone charging controller (BQ25890)" /sys/class/power_supply/bq25890-charger-0/{voltage_now,current_now,status,health,charge_type}; print_vcp "Phone battery (Max170xx)" /sys/class/power_supply/max170xx_battery/{voltage_now,current_now,status,health}'
}

export -f charge

Test reports

Anker A8385 (Anker 563 USB-C PD Hub, 11-in-1, 2021 model)
$ sudo lsusb -v -d 291a:8385
Bus 003 Device 004: ID 291a:8385 Anker Innovations Limited Anker USB-C Hub Device
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.01
  bDeviceClass           17
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x291a
  idProduct          0x8385
  bcdDevice            0.01
  iManufacturer           1 Anker Innovations Limited
  iProduct                2 Anker USB-C Hub Device
  iSerial                 3 0000000000000001
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0012
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          3 0000000000000001
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass        17
      bInterfaceSubClass      0
      bInterfaceProtocol      0
      iInterface              3 0000000000000001
Binary Object Store Descriptor:
  bLength                 5
  bDescriptorType        15
  wTotalLength       0x0049
  bNumDeviceCaps          2
  Billboard Capability:
    bLength                    48
    bDescriptorType            16
    bDevCapabilityType         13
    iAddtionalInfoURL           3 0000000000000001
    bNumberOfAlternateModes     1
    bPreferredAlternateMode     0
    VCONN Power                 0 1W
    bmConfigured                03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    bcdVersion               1.10
    bAdditionalFailureInfo      0
    bReserved                   0
    Alternate Modes supported by Device Container:
    Alternate Mode 0 : Alternate Mode configuration successful
      wSVID[0]                    0xFF01
      bAlternateMode[0]           1
      iAlternateModeString[0]     3 0000000000000001
  Container ID Device Capability:
    bLength                20
    bDescriptorType        16
    bDevCapabilityType      4
    bReserved               0
    ContainerID             {00000000-0000-0000-0000-000000000000}
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x0001
  Self Powered
Phone charging controller (BQ25890)  |   3.8 V |        0 mA |   0.0 W | Charging | Good | Fast
Phone battery (Max170xx)             |   3.8 V |     -710 mA |  -2.7 W | Discharging | Good | N/A

Orientation with Anker logo in back:

   irq/34-0-003f-144     [001] ..... 52854.909496: tps6598x_status:
conn: conn-no-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: off
, pwr-src: vin-3p3, vbus: pd, usb-host: pd-usb, legacy: no, flags: P
LUG_PRESENT
   irq/34-0-003f-144     [001] ..... 52854.910006: tps6598x_power_st
atus: conn: 1, pwr-role: sink, typec: pd, bc: sdp
   irq/34-0-003f-144     [001] ..... 52854.911055: tps6598x_pdo: fix
ed supply, max 100000uA, 5000000uV, details: dr-power|ext-power|usb-
comms|dr-data
   irq/34-0-003f-144     [001] ..... 52855.122394: tps6598x_irq: eve
nt1=DATA_STATUS_UPDATE, event2=
   irq/34-0-003f-144     [001] ..... 52855.122999: tps6598x_status:
conn: conn-no-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: off
, pwr-src: vin-3p3, vbus: pd, usb-host: pd-usb, legacy: no, flags: P
LUG_PRESENT|DATAROLE
   irq/34-0-003f-144     [001] ..... 52855.123577: tps6598x_data_sta
tus: DATA_CONNECTION|USB2_CONNECTION|USB3_CONNECTION|DP_CONNECTION|P
OWER_MISMATCH, DP pinout D
   irq/34-0-003f-144     [001] ..... 52855.123707: tps6598x_data_sta
tus: DATA_CONNECTION|USB2_CONNECTION|USB3_CONNECTION|DP_CONNECTION|P
OWER_MISMATCH, DP pinout D

Orientation with Anker logo in front:

   irq/34-0-003f-144     [001] ..... 52902.152649: tps6598x_irq: eve
nt1=NEW_CONTRACT_AS_CONSUMER|STATUS_UPDATE, event2=STATUS_UPDATE
   irq/34-0-003f-144     [001] ..... 52902.153218: tps6598x_status:
conn: conn-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: out, p
wr-src: vin-3p3, vbus: pd, usb-host: pd-usb, legacy: no, flags: PLUG
_PRESENT|UPSIDE_DOWN|DATAROLE|VCONN
   irq/34-0-003f-144     [001] ..... 52902.153960: tps6598x_pdo: fix
ed supply, max 100000uA, 5000000uV, details: dr-power|ext-power|usb-
comms|dr-data
   irq/34-0-003f-144     [001] ..... 52902.336752: tps6598x_irq: eve
nt1=DATA_STATUS_UPDATE, event2=
   irq/34-0-003f-144     [001] ..... 52902.337337: tps6598x_status:
conn: conn-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: out, p
wr-src: vin-3p3, vbus: pd, usb-host: pd-usb, legacy: no, flags: PLUG
_PRESENT|UPSIDE_DOWN|DATAROLE|VCONN
   irq/34-0-003f-144     [001] ..... 52902.337909: tps6598x_data_sta
tus: DATA_CONNECTION|DATA_UPSIDE_DOWN|USB2_CONNECTION|USB3_CONNECTIO
N|DP_CONNECTION|POWER_MISMATCH, DP pinout D
   irq/34-0-003f-144     [001] ..... 52902.337992: tps6598x_data_sta
tus: DATA_CONNECTION|DATA_UPSIDE_DOWN|USB2_CONNECTION|USB3_CONNECTIO
N|DP_CONNECTION|POWER_MISMATCH, DP pinout D
Anker A8388 (Anker 565 USB-C Hub, 11-in-1, 2023 model)
$ sudo lsusb -v -d 291a:8388

Bus 003 Device 004: ID 291a:8388 Anker Innovations Limited. Anker USB-C Hub Device
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.01
  bDeviceClass           17
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x291a
  idProduct          0x8388
  bcdDevice            0.01
  iManufacturer           1 Anker Innovations Limited.
  iProduct                2 Anker USB-C Hub Device
  iSerial                 3 0000000000000001
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0012
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          3 0000000000000001
    bmAttributes         0xc0
      Self Powered
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass        17
      bInterfaceSubClass      0
      bInterfaceProtocol      0
      iInterface              3 0000000000000001
Binary Object Store Descriptor:
  bLength                 5
  bDescriptorType        15
  wTotalLength       0x0051
  bNumDeviceCaps          3
  Billboard Capability:
    bLength                    48
    bDescriptorType            16
    bDevCapabilityType         13
    iAddtionalInfoURL           3 0000000000000001
    bNumberOfAlternateModes     1
    bPreferredAlternateMode     0
    VCONN Power                 0 1W
    bmConfigured                03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    bcdVersion               1.21
    bAdditionalFailureInfo      0
    bReserved                   0
    Alternate Modes supported by Device Container:
    Alternate Mode 0 : Alternate Mode configuration successful
      wSVID[0]                    0xFF01
      bAlternateMode[0]           0
      iAlternateModeString[0]     3 0000000000000001
  Billboard Alternate Mode Capability:
    bLength                     8
    bDescriptorType            16
    bDevCapabilityType         15
    bIndex                      0
    dwAlternateModeVdo          0x05000000
  Container ID Device Capability:
    bLength                20
    bDescriptorType        16
    bDevCapabilityType      4
    bReserved               0
    ContainerID             {30eef35c-07d5-2549-b001-802d79434c30}
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x0001
  Self Powered
Phone charging controller (BQ25890)  |   3.7 V |        0 mA |   0.0 W | Charging | Good | Fast
Phone battery (Max170xx)             |   3.7 V |     -798 mA |  -3.0 W | Discharging | Good | N/A

Orientation 1:

   irq/34-0-003f-148     [003] .....  1091.646590: tps6598x_irq: event1=PLUG_EVENT|PP_SWITCH_CHANGED|POWER_STATUS_UPDATE|DATA_STATUS_UPDATE, event2=
   irq/34-0-003f-148     [003] .....  1091.651600: tps6598x_status: conn: conn-no-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: off, pwr-src: vin-3p3, vbus: vSafe5V, usb-host: no, legacy: no, flags: PLUG_PRESENT
   irq/34-0-003f-148     [003] .....  1091.653981: tps6598x_power_status: conn: 1, pwr-role: sink, typec: 1.5A, bc: sdp
   irq/34-0-003f-148     [003] .....  1091.654568: tps6598x_data_status: DATA_CONNECTION|USB2_CONNECTION|USB3_CONNECTION
   irq/34-0-003f-148     [003] .....  1091.654674: tps6598x_data_status: DATA_CONNECTION|USB2_CONNECTION|USB3_CONNECTION
   irq/34-0-003f-148     [003] .....  1091.728321: tps6598x_irq: event1=STATUS_UPDATE, event2=STATUS_UPDATE
   irq/34-0-003f-148     [003] .....  1091.729068: tps6598x_status: conn: conn-no-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: off, pwr-src: vin-3p3, vbus: vSafe5V, usb-host: pd-usb, legacy: no, flags: PLUG_PRESENT
   irq/34-0-003f-148     [003] .....  1091.733036: tps6598x_irq: event1=DATA_STATUS_UPDATE, event2=
   irq/34-0-003f-148     [003] .....  1091.733604: tps6598x_status: conn: conn-no-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: off, pwr-src: vin-3p3, vbus: vSafe5V, usb-host: pd-usb, legacy: no, flags: PLUG_PRESENT
   irq/34-0-003f-148     [003] .....  1091.734196: tps6598x_data_status: DATA_CONNECTION|USB2_CONNECTION|USB3_CONNECTION|POWER_MISMATCH
   irq/34-0-003f-148     [003] .....  1091.734293: tps6598x_data_status: DATA_CONNECTION|USB2_CONNECTION|USB3_CONNECTION|POWER_MISMATCH
   irq/34-0-003f-148     [003] .....  1091.737199: tps6598x_irq: event1=, event2=
   irq/34-0-003f-148     [003] .....  1091.823336: tps6598x_irq: event1=NEW_CONTRACT_AS_CONSUMER|POWER_STATUS_UPDATE|STATUS_UPDATE, event2=STATUS_UPDATE
   irq/34-0-003f-148     [003] .....  1091.823923: tps6598x_status: conn: conn-no-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: off, pwr-src: vin-3p3, vbus: pd, usb-host: pd-usb, legacy: no, flags: PLUG_PRESENT
   irq/34-0-003f-148     [003] .....  1091.824434: tps6598x_power_status: conn: 1, pwr-role: sink, typec: pd, bc: sdp
   irq/34-0-003f-148     [003] .....  1091.825517: tps6598x_pdo: fixed supply, max 100000uA, 5000000uV, details: dr-power|ext-power|usb-comms|dr-data
   irq/34-0-003f-148     [003] .....  1092.036666: tps6598x_irq: event1=DATA_STATUS_UPDATE, event2=
   irq/34-0-003f-148     [003] .....  1092.037266: tps6598x_status: conn: conn-no-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: off, pwr-src: vin-3p3, vbus: pd, usb-host: pd-usb, legacy: no, flags: PLUG_PRESENT|DATAROLE
   irq/34-0-003f-148     [003] .....  1092.037841: tps6598x_data_status: DATA_CONNECTION|USB2_CONNECTION|USB3_CONNECTION|DP_CONNECTION|POWER_MISMATCH, DP pinout D
   irq/34-0-003f-148     [003] .....  1092.037982: tps6598x_data_status: DATA_CONNECTION|USB2_CONNECTION|USB3_CONNECTION|DP_CONNECTION|POWER_MISMATCH, DP pinout D

Orientation 2:

   irq/34-0-003f-148     [003] .....  1192.345198: tps6598x_irq: event1=PLUG_EVENT|DATA_STATUS_UPDATE, event2=
   irq/34-0-003f-148     [003] .....  1192.345978: tps6598x_status: conn: conn-Ra, pp_5v0: off, pp_hv: off, pp_ext: off, pp_cable: off, pwr-src: vin-3p3, vbus: pd, usb-host: no, legacy: no, flags: PLUG_PRESENT|UPSIDE_DOWN|PORTROLE|DATAROLE
   irq/34-0-003f-148     [003] .....  1192.349613: tps6598x_data_status: DATA_CONNECTION|DATA_UPSIDE_DOWN|USB2_CONNECTION|USB3_CONNECTION
   irq/34-0-003f-148     [003] .....  1192.349691: tps6598x_data_status: DATA_CONNECTION|DATA_UPSIDE_DOWN|USB2_CONNECTION|USB3_CONNECTION
   irq/34-0-003f-148     [003] .....  1192.386472: tps6598x_irq: event1=PP_SWITCH_CHANGED|STATUS_UPDATE, event2=STATUS_UPDATE
   irq/34-0-003f-148     [003] .....  1192.387059: tps6598x_status: conn: conn-Ra, pp_5v0: out, pp_hv: off, pp_ext: off, pp_cable: out, pwr-src: vin-3p3, vbus: pd, usb-host: no, legacy: no, flags: PLUG_PRESENT|UPSIDE_DOWN|PORTROLE|DATAROLE|VCONN
   irq/34-0-003f-148     [003] .....  1192.387522: tps6598x_power_status: conn: 1, pwr-role: source, typec: usb, bc: sdp
   irq/34-0-003f-148     [003] .....  1192.391229: tps6598x_irq: event1=, event2=
   irq/34-0-003f-148     [003] .....  1192.487863: tps6598x_irq: event1=POWER_STATUS_UPDATE, event2=
   irq/34-0-003f-148     [003] .....  1192.488498: tps6598x_status: conn: conn-Ra, pp_5v0: out, pp_hv: off, pp_ext: off, pp_cable: out, pwr-src: vin-3p3, vbus: pd, usb-host: no, legacy: no, flags: PLUG_PRESENT|UPSIDE_DOWN|PORTROLE|DATAROLE|VCONN
   irq/34-0-003f-148     [003] .....  1192.489023: tps6598x_power_status: conn: 1, pwr-role: source, typec: usb, bc: sdp
   irq/34-0-003f-148     [003] .....  1192.496685: tps6598x_irq: event1=STATUS_UPDATE, event2=STATUS_UPDATE
   irq/34-0-003f-148     [003] .....  1192.497291: tps6598x_status: conn: conn-Ra, pp_5v0: out, pp_hv: off, pp_ext: off, pp_cable: out, pwr-src: vin-3p3, vbus: vSafe5V, usb-host: no, legacy: no, flags: PLUG_PRESENT|UPSIDE_DOWN|PORTROLE|DATAROLE|VCONN
   irq/34-0-003f-148     [003] .....  1192.530197: tps6598x_irq: event1=POWER_STATUS_UPDATE|STATUS_UPDATE, event2=STATUS_UPDATE
   irq/34-0-003f-148     [003] .....  1192.530915: tps6598x_status: conn: conn-Ra, pp_5v0: out, pp_hv: off, pp_ext: off, pp_cable: out, pwr-src: vin-3p3, vbus: pd, usb-host: no, legacy: no, flags: PLUG_PRESENT|UPSIDE_DOWN|PORTROLE|DATAROLE|VCONN
   irq/34-0-003f-148     [003] .....  1192.531414: tps6598x_power_status: conn: 1, pwr-role: source, typec: pd, bc: sdp
   irq/34-0-003f-148     [003] .....  1192.563055: tps6598x_irq: event1=PP_SWITCH_CHANGED|STATUS_UPDATE, event2=STATUS_UPDATE
   irq/34-0-003f-148     [003] .....  1192.563795: tps6598x_status: conn: conn-Ra, pp_5v0: off, pp_hv: off, pp_ext: off, pp_cable: out, pwr-src: vin-3p3, vbus: vSafe0V, usb-host: no, legacy: no, flags: PLUG_PRESENT|UPSIDE_DOWN|DATAROLE|VCONN
   irq/34-0-003f-148     [003] .....  1192.564305: tps6598x_power_status: conn: 1, pwr-role: source, typec: pd, bc: sdp
   irq/34-0-003f-148     [003] .....  1192.678180: tps6598x_irq: event1=PP_SWITCH_CHANGED|POWER_STATUS_UPDATE|STATUS_UPDATE, event2=STATUS_UPDATE
   irq/34-0-003f-148     [003] .....  1192.678783: tps6598x_status: conn: conn-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: out, pwr-src: vin-3p3, vbus: vSafe5V, usb-host: no, legacy: no, flags: PLUG_PRESENT|UPSIDE_DOWN|DATAROLE|VCONN
   irq/34-0-003f-148     [003] .....  1192.679273: tps6598x_power_status: conn: 1, pwr-role: sink, typec: pd, bc: sdp
   irq/34-0-003f-148     [003] .....  1192.682991: tps6598x_irq: event1=, event2=
   irq/34-0-003f-148     [003] .....  1192.697681: tps6598x_irq: event1=STATUS_UPDATE, event2=STATUS_UPDATE
   irq/34-0-003f-148     [003] .....  1192.698417: tps6598x_status: conn: conn-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: out, pwr-src: vin-3p3, vbus: vSafe5V, usb-host: pd-usb, legacy: no, flags: PLUG_PRESENT|UPSIDE_DOWN|DATAROLE|VCONN
   irq/34-0-003f-148     [003] .....  1192.702410: tps6598x_irq: event1=DATA_STATUS_UPDATE, event2=
   irq/34-0-003f-148     [003] .....  1192.702995: tps6598x_status: conn: conn-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: out, pwr-src: vin-3p3, vbus: vSafe5V, usb-host: pd-usb, legacy: no, flags: PLUG_PRESENT|UPSIDE_DOWN|DATAROLE|VCONN
   irq/34-0-003f-148     [003] .....  1192.703591: tps6598x_data_status: DATA_CONNECTION|DATA_UPSIDE_DOWN|USB2_CONNECTION|USB3_CONNECTION|POWER_MISMATCH
   irq/34-0-003f-148     [003] .....  1192.703682: tps6598x_data_status: DATA_CONNECTION|DATA_UPSIDE_DOWN|USB2_CONNECTION|USB3_CONNECTION|POWER_MISMATCH
   irq/34-0-003f-148     [003] .....  1192.792455: tps6598x_irq: event1=NEW_CONTRACT_AS_CONSUMER|STATUS_UPDATE, event2=STATUS_UPDATE
   irq/34-0-003f-148     [003] .....  1192.793042: tps6598x_status: conn: conn-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: out, pwr-src: vin-3p3, vbus: pd, usb-host: pd-usb, legacy: no, flags: PLUG_PRESENT|UPSIDE_DOWN|DATAROLE|VCONN
   irq/34-0-003f-148     [003] .....  1192.793741: tps6598x_pdo: fixed supply, max 100000uA, 5000000uV, details: dr-power|ext-power|usb-comms|dr-data
   irq/34-0-003f-148     [003] .....  1192.977104: tps6598x_irq: event1=DATA_STATUS_UPDATE, event2=
   irq/34-0-003f-148     [003] .....  1192.977683: tps6598x_status: conn: conn-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: out, pwr-src: vin-3p3, vbus: pd, usb-host: pd-usb, legacy: no, flags: PLUG_PRESENT|UPSIDE_DOWN|DATAROLE|VCONN
   irq/34-0-003f-148     [003] .....  1192.978254: tps6598x_data_status: DATA_CONNECTION|DATA_UPSIDE_DOWN|USB2_CONNECTION|USB3_CONNECTION|DP_CONNECTION|POWER_MISMATCH, DP pinout D
   irq/34-0-003f-148     [003] .....  1192.978348: tps6598x_data_status: DATA_CONNECTION|DATA_UPSIDE_DOWN|USB2_CONNECTION|USB3_CONNECTION|DP_CONNECTION|POWER_MISMATCH, DP pinout D
Anker A8355 (Anker 332 USB-C Hub, 5-in-1)
$ sudo lsusb -v -d 05e3:0626
Bus 004 Device 002: ID 05e3:0626 Genesys Logic, Inc. USB3.1 Hub
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               3.20
  bDeviceClass            9 Hub
  bDeviceSubClass         0
  bDeviceProtocol         3
  bMaxPacketSize0         9
  idVendor           0x05e3 Genesys Logic, Inc.
  idProduct          0x0626
  bcdDevice            6.63
  iManufacturer           1 GenesysLogic
  iProduct                2 USB3.1 Hub
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x001f
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 Hub
      bInterfaceSubClass      0
      bInterfaceProtocol      0 Full speed (or root) hub
      iInterface              1 GenesysLogic
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes           19
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Feedback
        wMaxPacketSize     0x0002  1x 2 bytes
        bInterval               8
        bMaxBurst               0
Hub Descriptor:
  bLength              12
  bDescriptorType      42
  nNbrPorts             4
  wHubCharacteristic 0x0000
    Ganged power switching
    Ganged overcurrent protection
  bPwrOn2PwrGood       50 * 2 milli seconds
  bHubContrCurrent    576 milli Ampere
  bHubDecLat          0.4 micro seconds
  wHubDelay          1508 nano seconds
  DeviceRemovable    0x00
 Hub Port Status:
   Port 1: 0000.02a0 lowspeed L1
   Port 2: 0000.02a0 lowspeed L1
   Port 3: 0000.02a0 lowspeed L1
   Port 4: 0000.02a0 lowspeed L1
Binary Object Store Descriptor:
  bLength                 5
  bDescriptorType        15
  wTotalLength       0x002a
  bNumDeviceCaps          3
  USB 2.0 Extension Device Capability:
    bLength                 7
    bDescriptorType        16
    bDevCapabilityType      2
    bmAttributes   0x00000006
      BESL Link Power Management (LPM) Supported
  SuperSpeed USB Device Capability:
    bLength                10
    bDescriptorType        16
    bDevCapabilityType      3
    bmAttributes         0x00
    wSpeedsSupported   0x000e
      Device can operate at Full Speed (12Mbps)
      Device can operate at High Speed (480Mbps)
      Device can operate at SuperSpeed (5Gbps)
    bFunctionalitySupport   1
      Lowest fully-functional device speed is Full Speed (12Mbps)
    bU1DevExitLat           8 micro seconds
    bU2DevExitLat         190 micro seconds
  Container ID Device Capability:
    bLength                20
    bDescriptorType        16
    bDevCapabilityType      4
    bReserved               0
    ContainerID             {9f4b56f0-1df6-11e0-ac64-0800200c9a66}
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x0001
  Self Powered
$ sudo lsusb -v -d 25a4:9311
Bus 003 Device 003: ID 25a4:9311 USB C   USB C Video Adaptor
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.01
  bDeviceClass            0
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x25a4
  idProduct          0x9311
  bcdDevice            2.01
  iManufacturer           1 USB C
  iProduct                2 USB C Video Adaptor
  iSerial                 3 000000000001
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0012
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          3 000000000001
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass        17
      bInterfaceSubClass      0
      bInterfaceProtocol      0
      iInterface              2 USB C Video Adaptor
Binary Object Store Descriptor:
  bLength                 5
  bDescriptorType        15
  wTotalLength       0x0058
  bNumDeviceCaps          4
  Container ID Device Capability:
    bLength                20
    bDescriptorType        16
    bDevCapabilityType      4
    bReserved               0
    ContainerID             {00000000-0000-0000-0000-000000000000}
  Billboard Capability:
    bLength                    48
    bDescriptorType            16
    bDevCapabilityType         13
    iAddtionalInfoURL           4 http://help.vesa.org/dp-usb-type-c/
    bNumberOfAlternateModes     1
    bPreferredAlternateMode     0
    VCONN Power                 0 1W
    bmConfigured                03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    bcdVersion               1.21
    bAdditionalFailureInfo      0
    bReserved                   0
    Alternate Modes supported by Device Container:
    Alternate Mode 0 : Alternate Mode configuration successful
      wSVID[0]                    0xFF01
      bAlternateMode[0]           0
      iAlternateModeString[0]     1 USB C
  Billboard Alternate Mode Capability:
    bLength                     8
    bDescriptorType            16
    bDevCapabilityType         15
    bIndex                      0
    dwAlternateModeVdo          0x00000000
  USB 2.0 Extension Device Capability:
    bLength                 7
    bDescriptorType        16
    bDevCapabilityType      2
    bmAttributes   0x00000000
      (Missing must-be-set LPM bit!)
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x0000
  (Bus Powered)
Phone charging controller (BQ25890)  |   4.1 V |     -650 mA |  -2.6 W | Charging | Good | Fast
Phone battery (Max170xx)             |   4.1 V |      727 mA |   3.0 W | Charging | Good | N/A

Orientation 1:

```plain
   irq/34-0-003f-144     [001] ..... 53254.801328: tps6598x_power_st
atus: conn: 1, pwr-role: sink, typec: pd, bc: sdp
   irq/34-0-003f-144     [001] ..... 53254.802045: tps6598x_pdo: fix
ed supply, max 1500000uA, 5000000uV, details: dr-power|ext-power|usb
-comms|dr-data
   irq/34-0-003f-144     [001] ..... 53254.805862: tps6598x_irq: eve
nt1=, event2=
   irq/34-0-003f-144     [001] ..... 53255.052337: tps6598x_irq: eve
nt1=DATA_STATUS_UPDATE, event2=
   irq/34-0-003f-144     [001] ..... 53255.052940: tps6598x_status:
conn: conn-no-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: off
, pwr-src: vin-3p3, vbus: pd, usb-host: pd-usb, legacy: no, flags: P
LUG_PRESENT|DATAROLE
   irq/34-0-003f-144     [001] ..... 53255.053541: tps6598x_data_sta
tus: DATA_CONNECTION|USB2_CONNECTION|USB3_CONNECTION|DP_CONNECTION,
DP pinout D
   irq/34-0-003f-144     [001] ..... 53255.053647: tps6598x_data_sta
tus: DATA_CONNECTION|USB2_CONNECTION|USB3_CONNECTION|DP_CONNECTION,
DP pinout D

Orientation 2:

   irq/34-0-003f-144     [001] ..... 53865.824074: tps6598x_status:
conn: conn-no-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: off
, pwr-src: vin-3p3, vbus: pd, usb-host: pd-usb, legacy: no, flags: P
LUG_PRESENT|UPSIDE_DOWN|DATAROLE
   irq/34-0-003f-144     [001] ..... 53865.824549: tps6598x_power_st
atus: conn: 1, pwr-role: sink, typec: pd, bc: sdp
   irq/34-0-003f-144     [001] ..... 53865.825242: tps6598x_pdo: fix
ed supply, max 1500000uA, 5000000uV, details: dr-power|ext-power|usb
-comms|dr-data
   irq/34-0-003f-144     [001] ..... 53866.071578: tps6598x_irq: eve
nt1=DATA_STATUS_UPDATE, event2=
   irq/34-0-003f-144     [001] ..... 53866.072175: tps6598x_status:
conn: conn-no-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: off
, pwr-src: vin-3p3, vbus: pd, usb-host: pd-usb, legacy: no, flags: P
LUG_PRESENT|UPSIDE_DOWN|DATAROLE
   irq/34-0-003f-144     [001] ..... 53866.072779: tps6598x_data_sta
tus: DATA_CONNECTION|DATA_UPSIDE_DOWN|USB2_CONNECTION|USB3_CONNECTIO
N|DP_CONNECTION, DP pinout D
   irq/34-0-003f-144     [001] ..... 53866.072901: tps6598x_data_sta
tus: DATA_CONNECTION|DATA_UPSIDE_DOWN|USB2_CONNECTION|USB3_CONNECTIO
N|DP_CONNECTION, DP pinout D
Isy IAD 1024-1 (5-in-1 USB-C Multiport Adapter mit Power Delivery)
$ sudo lsusb -v -d 05e3:0626
Bus 004 Device 002: ID 05e3:0626 Genesys Logic, Inc. USB3.1 Hub
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               3.20
  bDeviceClass            9 Hub
  bDeviceSubClass         0
  bDeviceProtocol         3
  bMaxPacketSize0         9
  idVendor           0x05e3 Genesys Logic, Inc.
  idProduct          0x0626
  bcdDevice            6.56
  iManufacturer           1 GenesysLogic
  iProduct                2 USB3.1 Hub
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x001f
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 Hub
      bInterfaceSubClass      0
      bInterfaceProtocol      0 Full speed (or root) hub
      iInterface              1 GenesysLogic
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes           19
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Feedback
        wMaxPacketSize     0x0002  1x 2 bytes
        bInterval               8
        bMaxBurst               0
Hub Descriptor:
  bLength              12
  bDescriptorType      42
  nNbrPorts             4
  wHubCharacteristic 0x0004
    Ganged power switching
    Compound device
    Ganged overcurrent protection
  bPwrOn2PwrGood       50 * 2 milli seconds
  bHubContrCurrent    576 milli Ampere
  bHubDecLat          0.4 micro seconds
  wHubDelay          1508 nano seconds
  DeviceRemovable    0x10
 Hub Port Status:
   Port 1: 0000.02a0 lowspeed L1
   Port 2: 0000.02a0 lowspeed L1
   Port 3: 0000.02a0 lowspeed L1
   Port 4: 0000.0263 lowspeed L1 enable connect
Binary Object Store Descriptor:
  bLength                 5
  bDescriptorType        15
  wTotalLength       0x002a
  bNumDeviceCaps          3
  USB 2.0 Extension Device Capability:
    bLength                 7
    bDescriptorType        16
    bDevCapabilityType      2
    bmAttributes   0x00000006
      BESL Link Power Management (LPM) Supported
  SuperSpeed USB Device Capability:
    bLength                10
    bDescriptorType        16
    bDevCapabilityType      3
    bmAttributes         0x00
    wSpeedsSupported   0x000e
      Device can operate at Full Speed (12Mbps)
      Device can operate at High Speed (480Mbps)
      Device can operate at SuperSpeed (5Gbps)
    bFunctionalitySupport   1
      Lowest fully-functional device speed is Full Speed (12Mbps)
    bU1DevExitLat           8 micro seconds
    bU2DevExitLat         190 micro seconds
  Container ID Device Capability:
    bLength                20
    bDescriptorType        16
    bDevCapabilityType      4
    bReserved               0
    ContainerID             {9f4b56f0-1df6-11e0-ac64-0800200c9a66}
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x0001
  Self Powered
Phone charging controller (BQ25890)  |   4.1 V |     -650 mA |  -2.6 W | Charging | Good | Fast
Phone battery (Max170xx)             |   4.1 V |      697 mA |   2.8 W | Charging | Good | N/A

Orientation 1:

   irq/34-0-003f-144     [001] ..... 54505.738390: tps6598x_irq: eve
nt1=PP_SWITCH_CHANGED|STATUS_UPDATE, event2=STATUS_UPDATE
   irq/34-0-003f-144     [001] ..... 54505.739139: tps6598x_status:
conn: conn-no-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: in,
 pwr-src: vin-3p3, vbus: pd, usb-host: pd-usb, legacy: no, flags: PL
UG_PRESENT|DATAROLE|VCONN
   irq/34-0-003f-144     [001] ..... 54505.739623: tps6598x_power_st
atus: conn: 1, pwr-role: sink, typec: pd, bc: sdp
   irq/34-0-003f-144     [001] ..... 54505.992647: tps6598x_irq: eve
nt1=DATA_STATUS_UPDATE, event2=
   irq/34-0-003f-144     [001] ..... 54505.993232: tps6598x_status:
conn: conn-no-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: in,
 pwr-src: vin-3p3, vbus: pd, usb-host: pd-usb, legacy: no, flags: PL
UG_PRESENT|DATAROLE|VCONN
   irq/34-0-003f-144     [001] ..... 54505.993802: tps6598x_data_sta
tus: DATA_CONNECTION|USB2_CONNECTION|USB3_CONNECTION|DP_CONNECTION,
DP pinout D
   irq/34-0-003f-144     [001] ..... 54505.993923: tps6598x_data_sta
tus: DATA_CONNECTION|USB2_CONNECTION|USB3_CONNECTION|DP_CONNECTION,
DP pinout D

Orientation 2:

   irq/34-0-003f-144     [001] ..... 54696.113582: tps6598x_status:
conn: conn-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: out, p
wr-src: vin-3p3, vbus: vSafe5V, usb-host: pd-usb, legacy: no, flags:
 PLUG_PRESENT|UPSIDE_DOWN|DATAROLE|VCONN
   irq/34-0-003f-144     [001] ..... 54696.117239: tps6598x_irq: eve
nt1=, event2=
   irq/34-0-003f-144     [001] ..... 54696.282742: tps6598x_irq: eve
nt1=NEW_CONTRACT_AS_CONSUMER|POWER_STATUS_UPDATE|STATUS_UPDATE, even
t2=STATUS_UPDATE
   irq/34-0-003f-144     [001] ..... 54696.283348: tps6598x_status:
conn: conn-Ra, pp_5v0: off, pp_hv: in, pp_ext: off, pp_cable: out, p
wr-src: vin-3p3, vbus: pd, usb-host: pd-usb, legacy: no, flags: PLUG
_PRESENT|UPSIDE_DOWN|DATAROLE|VCONN
   irq/34-0-003f-144     [001] ..... 54696.283832: tps6598x_power_st
atus: conn: 1, pwr-role: sink, typec: pd, bc: sdp
   irq/34-0-003f-144     [001] ..... 54696.284508: tps6598x_pdo: fix
ed supply, max 1500000uA, 5000000uV, details: dr-power|ext-power|usb
-comms|dr-data
   irq/34-0-003f-144     [001] ..... 54696.288257: tps6598x_irq: eve
nt1=, event2=

Notes

Notably, every time the phone was connected to one of the hubs where charging wouldn’t work (Anker 563 and Anker 565), the tps6598x_data_status trace event would consistently show the POWER_MISMATCH flag as set.

Merge request reports