usb: typec: intel_pmc_mux: Configure HPD first for HPD+IRQ request
commit 0f041b8592daaaea46e91a8ebb3b47e6e0171fd8 upstream. Warm reboot scenarios some times type C Mux driver gets Mux configuration request as HPD=1,IRQ=1. In that scenario typeC Mux driver need to configure Mux as follows as per IOM requirement: (1). Confgiure Mux HPD = 1, IRQ = 0 (2). Configure Mux with HPD = 1, IRQ = 1 IOM expects TypeC Mux configuration as follows: (1). HPD=1, IRQ=0 (2). HPD=1, IRQ=1 if IOM gets mux config request (2) without configuring (1), it will ignore the request. The impact of this is there is no DP_alt mode display. Fixes: 43d596e32276 ("usb: typec: intel_pmc_mux: Check the port status before connect") Cc: stable@vger.kernel.org Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Signed-off-by: Madhusudanarao Amara <madhusudanarao.amara@intel.com> Link: https://lore.kernel.org/r/20201216140918.49197-1-madhusudanarao.amara@intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
340db7c0a6
commit
5a5ce1e75c
@ -202,10 +202,21 @@ static int
|
||||
pmc_usb_mux_dp_hpd(struct pmc_usb_port *port, struct typec_displayport_data *dp)
|
||||
{
|
||||
u8 msg[2] = { };
|
||||
int ret;
|
||||
|
||||
msg[0] = PMC_USB_DP_HPD;
|
||||
msg[0] |= port->usb3_port << PMC_USB_MSG_USB3_PORT_SHIFT;
|
||||
|
||||
/* Configure HPD first if HPD,IRQ comes together */
|
||||
if (!IOM_PORT_HPD_ASSERTED(port->iom_status) &&
|
||||
dp->status & DP_STATUS_IRQ_HPD &&
|
||||
dp->status & DP_STATUS_HPD_STATE) {
|
||||
msg[1] = PMC_USB_DP_HPD_LVL;
|
||||
ret = pmc_usb_command(port, msg, sizeof(msg));
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (dp->status & DP_STATUS_IRQ_HPD)
|
||||
msg[1] = PMC_USB_DP_HPD_IRQ;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user