usb: typec: tcpm: Support multiple capabilities
authorKyle Tso <kyletso@google.com>
Sat, 16 Dec 2023 10:46:30 +0000 (18:46 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 4 Jan 2024 15:00:23 +0000 (16:00 +0100)
commitcd099cde4ed264403b434d8344994f97ac2a4349
tree328e671f669b2e4973dae394166beb4c5dc9f7b3
parent501b15207138e3cf85c8413fbbb746f6ee21b0a1
usb: typec: tcpm: Support multiple capabilities

Refactor tcpm_fw_get_caps to support the multiple pd capabilities got
from fwnode. For backward compatibility, the original single capability
is still applicable. The fetched data is stored in the newly defined
structure "pd_data" and there is an array "pd_list" to store the
pointers to them. A dedicated array "pds" is used to store the handles
of the registered usb_power_delivery instances.

Also implement the .pd_get and .pd_set ops which are introduced in
commit a7cff92f0635 ("usb: typec: USB Power Delivery helpers for ports
and partners"). Once the .pd_set is called, the current capability will
be updated and state machine will re-negotiate the power contract if
possible.

Signed-off-by: Kyle Tso <kyletso@google.com>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Link: https://lore.kernel.org/r/20231216104630.2720818-3-kyletso@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/typec/tcpm/tcpm.c