On 2023-08-22 09:32, Heikki Krogerus wrote:
Hi Benson, RFC for now. I can't test these properly. If you guys could take over this, I would much appreciated. I hope this is at least close to your proposal. With this (or something like it) you should be able to get notification about USB connections and disconnections to your port driver by implementing the new "attach" and "deattach" callbacks in struct typec_partner_desc. The typec partner devices will also have symlinks to the enumerated USB devices and vise versa. I took a little shortcut and did not implement a proper device list. Instead there is now only a member for the USB2 device and a member for the USB3 device in struct typec_port, so with this only USB is supported. But the API does not deal with struct usb_device, so extending this to support other devices (TBT, Displayport, etc.) by adding the actual device list should be fairly easy.
On a related matter, I wonder why there aren't symlinks between typec ports (under /sys/class/typec ) and/or the corresponding pd objects (under /sys/class/usb_power_delivery ) to the related power_supply objects under /sys/class/power_supply . For example under the latter directory I see: $ ls | more AC BAT0 hidpp_battery_1 ucsi-source-psy-USBC000:001 ucsi-source-psy-USBC000:002 Those last two power supplies are obviously connected to typec port0 and port1 (but offset by 1). Those power_supply objects hold inaccurate data which I hope will improve in time. Significantly power_supply objects don't seem to report the direction of the power. Here is a little utility I have been working on to report the USB Type-C port/pd disposition on my machine: $ lsucpd port0 [pd0] > {5V, 0.9A} port1 [pd1] <<=== partner: [pd8] My laptop (Thinkpad X13 G3) has two type-C ports and port1 is a sink with a PD contract. I would like that second line to have 20V, 3.25A appended to it but there are several issues: - no typec or pd symlink to ucsi-source-psy-USBC000:002 - that power supply_object says it is online (correct) with a voltage_now: 5000000 uV (incorrect) and current_now: 3000000 uA (incorrect). See below. ucsi-source-psy-USBC000:002 $ ls_name_value current_max : 3250000 current_now : 3000000 online : 1 scope : Unknown type : USB uevent : <removed> usb_type : C [PD] PD_PPS voltage_max : 20000000 voltage_min : 5000000 voltage_now : 5000000 Doug Gilbert