Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp3083521ybt; Mon, 29 Jun 2020 14:55:54 -0700 (PDT) X-Google-Smtp-Source: ABdhPJweZ+Bnuo4EycbRd8MVTLIbsPfyrNTQCOF1GtOZUyFIJgvudlQkEgADso9ezdmT27TY7Oc3 X-Received: by 2002:aa7:c504:: with SMTP id o4mr19332097edq.311.1593467754786; Mon, 29 Jun 2020 14:55:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593467754; cv=none; d=google.com; s=arc-20160816; b=KZCNxDC6MaHdKB/BQPHtaBYj+VNfXTR+KFhgqUBOHasnOhEsrm7QYDq1qdpgkiOeu4 90vCbIFwGUQnbhcZNuhAayHfwx9y5+c5VPOS6ayFfOCTq8wD12p2VGtrQ4x3JKLZJLpW /Wio/NrV5vDvNZ6ZFJmG9ud7q52eGG53XFIF+wXKeCHcNQ2N7Ahk5XtMMyf7tAqcReuP eKnPGkQLyw5C17ZF7qvnQPQXuW5HcAq2RmMRdvGhKlyfu+8wfgF9pU+WCmF+sxCk7Yxv sm7YpnrrZ8BFKNDJTuJx7S1N3/fhN0jgCkky9CFQYlRmzn2yXaIPveYphczYBoJtfyHZ 9gBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=VXJ8YzvM9/RoWgKra8HkBGnaSZSBo6yGgAV5EMdfNJc=; b=jNz+R4Ucena694CYhfqduOSUsTLhnAoQ09IxnIQVWusr+wqB6cyOCZv25JvaDlloAA TJJEQ/DCRBSo+Js3/R6zH6LPR9Z/D8npUEJX+iWsSADFBVl83y2ae2YE38mBH6cN94V2 zz76iWnLQHk3cl5IBsAxbg+iMj+192elpzeuvyx4B85QqeqdT1bZWURa6Zhx45DvhLob TdK171KzWupTajH5BVzeRg7AaLycvwWb9QvIlgydKUxTUNVQ/iT5SMq4s58fHwlZDaXP HkP8VDyYgSS37K+h7mGsL6d3zGSBYAK1+xBKbiV2U23Ozpe5JW92eNW25URX0WooO6WL 2sNg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=CrHu0aNq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id co19si431558edb.605.2020.06.29.14.55.32; Mon, 29 Jun 2020 14:55:54 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=CrHu0aNq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391518AbgF2Vwb (ORCPT + 99 others); Mon, 29 Jun 2020 17:52:31 -0400 Received: from mail.kernel.org ([198.145.29.99]:56904 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726642AbgF2Sfj (ORCPT ); Mon, 29 Jun 2020 14:35:39 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 3814424653; Mon, 29 Jun 2020 15:19:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1593443967; bh=R7EbNfwBfhbKAwJL9cGsCE0UyhurDjirYYrMzZFv7YQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CrHu0aNqrupclbky3ZB66u1e+ZZp81S/AQRnF9fNc5h6et0vM+ZxaIzqawM4GMNor TNw3G0aspFqMhNA7JPSkOxuE7xkh44Cmc6a8tYlclRGnEamB5gGucxAoTNCkqKUv+R aLkN1wmA8zSdLq0VeZBbSeuGR2VybyO52y3Eqxp4= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Heikki Krogerus , Prashant Malani , Greg Kroah-Hartman Subject: [PATCH 5.7 071/265] usb: typec: mux: intel_pmc_mux: Fix DP alternate mode entry Date: Mon, 29 Jun 2020 11:15:04 -0400 Message-Id: <20200629151818.2493727-72-sashal@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200629151818.2493727-1-sashal@kernel.org> References: <20200629151818.2493727-1-sashal@kernel.org> MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.7.7-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.7.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.7.7-rc1 X-KernelTest-Deadline: 2020-07-01T15:14+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Heikki Krogerus commit 130206a88683d859f63ed6d4a56ab5c2b4930c8e upstream. The PMC needs to be notified separately about HPD (hotplug detected) signal being high after mode entry. There is a bit "HPD High" in the Alternate Mode Request that the driver already sets, but that bit is only valid when the DisplayPort Alternate Mode is directly entered from disconnected state. Fixes: 5c4edcdbcd97 ("usb: typec: mux: intel: Fix DP_HPD_LVL bit field") Signed-off-by: Heikki Krogerus Cc: stable Tested-by: Prashant Malani Link: https://lore.kernel.org/r/20200529131753.15587-1-heikki.krogerus@linux.intel.com Signed-off-by: Greg Kroah-Hartman --- drivers/usb/typec/mux/intel_pmc_mux.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/usb/typec/mux/intel_pmc_mux.c b/drivers/usb/typec/mux/intel_pmc_mux.c index c22e5c4bbf1a9..e35508f5e1287 100644 --- a/drivers/usb/typec/mux/intel_pmc_mux.c +++ b/drivers/usb/typec/mux/intel_pmc_mux.c @@ -129,7 +129,8 @@ pmc_usb_mux_dp_hpd(struct pmc_usb_port *port, struct typec_mux_state *state) msg[0] = PMC_USB_DP_HPD; msg[0] |= port->usb3_port << PMC_USB_MSG_USB3_PORT_SHIFT; - msg[1] = PMC_USB_DP_HPD_IRQ; + if (data->status & DP_STATUS_IRQ_HPD) + msg[1] = PMC_USB_DP_HPD_IRQ; if (data->status & DP_STATUS_HPD_STATE) msg[1] |= PMC_USB_DP_HPD_LVL; @@ -142,6 +143,7 @@ pmc_usb_mux_dp(struct pmc_usb_port *port, struct typec_mux_state *state) { struct typec_displayport_data *data = state->data; struct altmode_req req = { }; + int ret; if (data->status & DP_STATUS_IRQ_HPD) return pmc_usb_mux_dp_hpd(port, state); @@ -161,7 +163,14 @@ pmc_usb_mux_dp(struct pmc_usb_port *port, struct typec_mux_state *state) if (data->status & DP_STATUS_HPD_STATE) req.mode_data |= PMC_USB_ALTMODE_HPD_HIGH; - return pmc_usb_command(port, (void *)&req, sizeof(req)); + ret = pmc_usb_command(port, (void *)&req, sizeof(req)); + if (ret) + return ret; + + if (data->status & DP_STATUS_HPD_STATE) + return pmc_usb_mux_dp_hpd(port, state); + + return 0; } static int -- 2.25.1