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

usb: typec: Add partner PD object wrapper

Some port drivers may want to set a Type-C partner as a parent for a
USB Power Delivery object, but the Type-C partner struct isn't exposed
outside of the Type-C class driver. Add a wrapper to
usb_power_delivery_register() which sets the provided Type-C partner
as a parent to the USB PD object. This helps to avoid exposing the
Type-C partner's device struct unnecessarily.

Cc: Benson Leung <bleung@chromium.org>
Suggested-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Prashant Malani <pmalani@chromium.org>
Link: https://lore.kernel.org/r/20221122220538.2991775-2-pmalani@chromium.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Prashant Malani and committed by
Greg Kroah-Hartman
03239981 03a88b0b

+23
+19
drivers/usb/typec/class.c
··· 822 822 EXPORT_SYMBOL_GPL(typec_partner_set_svdm_version); 823 823 824 824 /** 825 + * typec_partner_usb_power_delivery_register - Register Type-C partner USB Power Delivery Support 826 + * @partner: Type-C partner device. 827 + * @desc: Description of the USB PD contract. 828 + * 829 + * This routine is a wrapper around usb_power_delivery_register(). It registers 830 + * USB Power Delivery Capabilities for a Type-C partner device. Specifically, 831 + * it sets the Type-C partner device as a parent for the resulting USB Power Delivery object. 832 + * 833 + * Returns handle to struct usb_power_delivery or ERR_PTR. 834 + */ 835 + struct usb_power_delivery * 836 + typec_partner_usb_power_delivery_register(struct typec_partner *partner, 837 + struct usb_power_delivery_desc *desc) 838 + { 839 + return usb_power_delivery_register(&partner->dev, desc); 840 + } 841 + EXPORT_SYMBOL_GPL(typec_partner_usb_power_delivery_register); 842 + 843 + /** 825 844 * typec_register_partner - Register a USB Type-C Partner 826 845 * @port: The USB Type-C Port the partner is connected to 827 846 * @desc: Description of the partner
+4
include/linux/usb/typec.h
··· 23 23 struct device; 24 24 25 25 struct usb_power_delivery; 26 + struct usb_power_delivery_desc; 26 27 27 28 enum typec_port_type { 28 29 TYPEC_PORT_SRC, ··· 327 326 void typec_partner_set_svdm_version(struct typec_partner *partner, 328 327 enum usb_pd_svdm_ver svdm_version); 329 328 int typec_get_negotiated_svdm_version(struct typec_port *port); 329 + 330 + struct usb_power_delivery *typec_partner_usb_power_delivery_register(struct typec_partner *partner, 331 + struct usb_power_delivery_desc *desc); 330 332 331 333 int typec_port_set_usb_power_delivery(struct typec_port *port, struct usb_power_delivery *pd); 332 334 int typec_partner_set_usb_power_delivery(struct typec_partner *partner,