• Guenter Roeck's avatar
    staging: typec: tcpm: Report role swap complete after entering READY state · 3113bf1a
    Guenter Roeck authored
    Role swap requests fail unless the current role is either SRC_READY or
    SNK_READY. This works fine for VCONN and data role swaps, where we
    immediately enter READY state after reporting a successful role swap
    to user space. However, on power role changes, the role swap is currently
    reported as successful while power negotiation is still in process.
    User space does not know this, and may request another role swap
    immediately after a power role swap is reported to be complete.
    This second role swap will fail with -EAGAIN.
    
    To fix the problem, report role swap completion after power negotiation
    is complete and the state machine enters SRC_READY or SNK_READY state.
    This is better anyway since it captures errors due to failed power
    negotiations. It also simplifies the code since the number of calls
    needed to report successful role swaps is reduced.
    Reported-by: default avatarHoward Yen <howard_yen@htc.com>
    Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    3113bf1a
tcpm.c 86.5 KB