• Hans de Goede's avatar
    usb: typec: fusb302: Revert "Resolve fixed power role contract setup" · 48242e30
    Hans de Goede authored
    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. But for single-role ports we've so far been
    falling back to just calling tcpm_set_cc(). For some tcpc-s such as the
    fusb302 this is not enough and no TCPM_CC_EVENT will be generated.
    
    Commit ea3b4d55 ("usb: typec: fusb302: Resolve fixed power role
    contract setup") fixed SRPs not working because of this by making the
    fusb302 driver start connection detection on every tcpm_set_cc() call.
    It turns out this breaks src->snk power-role swapping because during the
    swap we first set the Cc pins to Rp, calling set_cc, and then send a PS_RDY
    message. But the fusb302 cannot send PD messages while its toggling engine
    is active, so sending the PS_RDY message fails.
    
    Struct tcpc_dev now has a new start_srp_connection_detect callback and
    fusb302.c now implements this. This callback gets called when we the
    fusb302 needs to start connection detection, fixing fusb302 SRPs not
    seeing connected devices.
    
    This allows us to revert the changes to fusb302's set_cc implementation,
    making it once again purely setup the Cc-s and matching disconnect
    detection, fixing src->snk power-role swapping no longer working.
    
    Note that since the code was refactored in between, codewise this is not a
    straight forward revert. Functionality wise this is a straight revert and
    the original functionality is fully restored.
    
    Fixes: ea3b4d55 ("usb: typec: fusb302: Resolve fixed power role ...")
    Cc: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    Reviewed-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Acked-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
    Tested-by: default avatarAdam Thomson <Adam.Thomson.Opensource@diasemi.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    48242e30
fusb302.c 48.6 KB