OSDN Git Service

usb: typec: tcpm: frs sourcing vbus callback
authorBadhri Jagan Sridharan <badhri@google.com>
Thu, 29 Oct 2020 06:31:32 +0000 (23:31 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 18 Nov 2020 11:56:58 +0000 (12:56 +0100)
During FRS hardware autonomously starts to source vbus. Provide
callback to perform chip specific operations.

Signed-off-by: Badhri Jagan Sridharan <badhri@google.com>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Link: https://lore.kernel.org/r/20201029063138.1429760-5-badhri@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/typec/tcpm/tcpm.c
include/linux/usb/tcpm.h

index a091a63..c196bd4 100644 (file)
@@ -4091,7 +4091,16 @@ static void _tcpm_pd_vbus_on(struct tcpm_port *port)
        case SRC_TRY_DEBOUNCE:
                /* Do nothing, waiting for sink detection */
                break;
+       case FR_SWAP_SEND:
+       case FR_SWAP_SEND_TIMEOUT:
+       case FR_SWAP_SNK_SRC_TRANSITION_TO_OFF:
+       case FR_SWAP_SNK_SRC_SOURCE_VBUS_APPLIED:
+               if (port->tcpc->frs_sourcing_vbus)
+                       port->tcpc->frs_sourcing_vbus(port->tcpc);
+               break;
        case FR_SWAP_SNK_SRC_NEW_SINK_READY:
+               if (port->tcpc->frs_sourcing_vbus)
+                       port->tcpc->frs_sourcing_vbus(port->tcpc);
                tcpm_set_state(port, FR_SWAP_SNK_SRC_SOURCE_VBUS_APPLIED, 0);
                break;
 
index 09762d2..7303f51 100644 (file)
@@ -83,6 +83,9 @@ enum tcpm_transmit_type {
  *             Optional; Called to enable/disable PD 3.0 fast role swap.
  *             Enabling frs is accessory dependent as not all PD3.0
  *             accessories support fast role swap.
+ * @frs_sourcing_vbus:
+ *             Optional; Called to notify that vbus is now being sourced.
+ *             Low level drivers can perform chip specific operations, if any.
  */
 struct tcpc_dev {
        struct fwnode_handle *fwnode;
@@ -109,6 +112,7 @@ struct tcpc_dev {
                           const struct pd_message *msg);
        int (*set_bist_data)(struct tcpc_dev *dev, bool on);
        int (*enable_frs)(struct tcpc_dev *dev, bool enable);
+       void (*frs_sourcing_vbus)(struct tcpc_dev *dev);
 };
 
 struct tcpm_port;