usb: typec: tcpm: Notify the tcpc to start connection-detection for SRPs
Some tcpc device-drivers need to explicitly be told to watch for connection events, otherwise the tcpc will not generate any TCPM_CC_EVENTs and devices being plugged into the Type-C port will not be noticed. For dual-role ports tcpm_start_drp_toggling() is used to tell the tcpc to watch for connection events. Sofar we lack a similar callback to the tcpc for single-role ports. With some tcpc-s such as the fusb302 this means no TCPM_CC_EVENTs will be generated when the port is configured as a single-role port. This commit renames start_drp_toggling to start_toggling and since the device-properties are parsed by the tcpm-core, adds a port_type parameter to the start_toggling callback so that the tcpc_dev driver knows the port-type and can act accordingly when it starts toggling. The new start_toggling callback now always gets called if defined, instead of only being called for DRP ports. To avoid this causing undesirable functional changes all existing start_drp_toggling implementations are not only renamed to start_toggling, but also get a port_type check added and return -EOPNOTSUPP when port_type is not DRP. Fixes: ea3b4d5523bc("usb: typec: fusb302: Resolve fixed power role ...") Cc: Adam Thomson <Adam.Thomson.Opensource@diasemi.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Guenter Roeck <linux@roeck-us.net> Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Tested-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
9bcb762ce0
commit
7893f9e1c2
@@ -121,10 +121,10 @@ struct tcpc_config {
|
||||
* with partner.
|
||||
* @set_pd_rx: Called to enable or disable reception of PD messages
|
||||
* @set_roles: Called to set power and data roles
|
||||
* @start_drp_toggling:
|
||||
* Optional; if supported by hardware, called to start DRP
|
||||
* toggling. DRP toggling is stopped automatically if
|
||||
* a connection is established.
|
||||
* @start_toggling:
|
||||
* Optional; if supported by hardware, called to start dual-role
|
||||
* toggling or single-role connection detection. Toggling stops
|
||||
* automatically if a connection is established.
|
||||
* @try_role: Optional; called to set a preferred role
|
||||
* @pd_transmit:Called to transmit PD message
|
||||
* @mux: Pointer to multiplexer data
|
||||
@@ -147,8 +147,9 @@ struct tcpc_dev {
|
||||
int (*set_pd_rx)(struct tcpc_dev *dev, bool on);
|
||||
int (*set_roles)(struct tcpc_dev *dev, bool attached,
|
||||
enum typec_role role, enum typec_data_role data);
|
||||
int (*start_drp_toggling)(struct tcpc_dev *dev,
|
||||
enum typec_cc_status cc);
|
||||
int (*start_toggling)(struct tcpc_dev *dev,
|
||||
enum typec_port_type port_type,
|
||||
enum typec_cc_status cc);
|
||||
int (*try_role)(struct tcpc_dev *dev, int role);
|
||||
int (*pd_transmit)(struct tcpc_dev *dev, enum tcpm_transmit_type type,
|
||||
const struct pd_message *msg);
|
||||
|
Reference in New Issue
Block a user