Received: by 10.223.176.5 with SMTP id f5csp2029666wra; Thu, 8 Feb 2018 07:21:54 -0800 (PST) X-Google-Smtp-Source: AH8x226/NeJW/7oBnNt29j22EEYE6+Db5k2tKfSYMl2oWZFDQRe1HFcb6d7HfluPDUIdsWVNGou/ X-Received: by 10.98.242.69 with SMTP id y5mr980042pfl.163.1518103314324; Thu, 08 Feb 2018 07:21:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518103314; cv=none; d=google.com; s=arc-20160816; b=oD+JvEhcJaenGttwXCRw0x/S6qFXqetT4PwZfBlsOmo0pwRHllHV1X8+RYkPfLB8B1 scyAaMQhiWmiTts4vD4yGVD9fVKlQ7iFn0ATPEZaQ6VY7maOc8Dh/yAhkYRdF8jRvjao 1tgY+Rpyh9eJN4jycqAqN1Z+4Imva06Gwc0aLLUFdM9m8srVgv1tnPmx+4uCIUfpBd6+ Deb34SGvLzbsV79gA0xrxrNFEzYDQYKTWSu//ostzsuya0CIY6yHGpnbMDU6VfKd6T/t BTUv24CkHYSO//EDn0sJOffTfQ1RJugI4XR/sCv/YKjsZWYHVpI+S8rkR9Ye4Ixu+QmX JuTA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=pUUMmLXbPje2RdSIjBh0HTBb6m8lMRRXeJPqZXDDYSA=; b=SRXbXpjiPTu9WpBBYTiGkWba7TFxA1Gcq5pb2SeoTfdisoLGkhnkwjKOHVOfLzagsd kO68DP2EVNX1EKHbXBVHUqqH21LowDGtS+sk+puSZiQZiCSRLsE0sZg/U6U3pHPtOGvd F2gacJn21SevWaDhjUQBGaFSLQsahF3PvSNkojzhUGalJspETxsPcCOKCS9GcqAJZuVz fZV6j979QmSJfSfoP4vrTt3Z+r3Aud0+KoS/S3CTSF4VpSl9HOJbEtWYpXOtROGgRFzR 2qLzKkWJ8I/J3MyRbutScve9OkrEhMQHdJVyfOLCU5icLQU7i83w5cKoFepaA4gNklgs 4dCQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r29si117943pfj.102.2018.02.08.07.21.39; Thu, 08 Feb 2018 07:21:54 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752092AbeBHPUx (ORCPT + 99 others); Thu, 8 Feb 2018 10:20:53 -0500 Received: from bhuna.collabora.co.uk ([46.235.227.227]:47478 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751786AbeBHPUu (ORCPT ); Thu, 8 Feb 2018 10:20:50 -0500 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: eballetbo) with ESMTPSA id 6B183276850 From: Enric Balletbo i Serra To: Rob Herring , Kishon Vijay Abraham I , Brian Norris Cc: Heiko Stuebner , dianders@chromium.org, Chris Zhong , William wu , hl@rock-chips.com, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com Subject: [PATCH 3/3] phy: rockchip-typec: force to USB2 if DP at 4 lanes mode Date: Thu, 8 Feb 2018 16:20:28 +0100 Message-Id: <20180208152028.9997-3-enric.balletbo@collabora.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180208152028.9997-1-enric.balletbo@collabora.com> References: <20180208152028.9997-1-enric.balletbo@collabora.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Chris Zhong The usb3tousb2_en BIT will be clear to 0 in probe(), it make USB controller work at USB3 mode, and if the USB phy is turned on with DP only mode(4 lanes DP), the rockchip_usb3_phy_power_on() will return directly, so usb3_host_disable and usb3_host_port these 2 BIT will keep a same value as coreboot. In coreboot, these 3 BITs are set as USB2 mode, but now one of the bits is changed to USB3, it make USB controller work at a unknown status. These 3 BITs should be changed to USB2, if the Type-C works at 4 lanes mode, and then switch it back to USB3 mode, when USB disconnect. Signed-off-by: Chris Zhong Signed-off-by: Enric Balletbo i Serra --- drivers/phy/rockchip/phy-rockchip-typec.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-typec.c b/drivers/phy/rockchip/phy-rockchip-typec.c index cc07f528cc48..087c754caf25 100644 --- a/drivers/phy/rockchip/phy-rockchip-typec.c +++ b/drivers/phy/rockchip/phy-rockchip-typec.c @@ -821,6 +821,18 @@ static int tcphy_get_mode(struct rockchip_typec_phy *tcphy) return mode; } +static int tcphy_cfg_usb3_to_usb2_only(struct rockchip_typec_phy *tcphy, + bool value) +{ + struct rockchip_usb3phy_port_cfg *cfg = &tcphy->port_cfgs; + + property_enable(tcphy, &cfg->usb3tousb2_en, value); + property_enable(tcphy, &cfg->usb3_host_disable, value); + property_enable(tcphy, &cfg->usb3_host_port, !value); + + return 0; +} + static int rockchip_usb3_phy_power_on(struct phy *phy) { struct rockchip_typec_phy *tcphy = phy_get_drvdata(phy); @@ -838,8 +850,10 @@ static int rockchip_usb3_phy_power_on(struct phy *phy) } /* DP-only mode; fall back to USB2 */ - if (!(new_mode & (MODE_DFP_USB | MODE_UFP_USB))) + if (!(new_mode & (MODE_DFP_USB | MODE_UFP_USB))) { + tcphy_cfg_usb3_to_usb2_only(tcphy, true); goto unlock_ret; + } if (tcphy->mode == new_mode) goto unlock_ret; @@ -855,9 +869,9 @@ static int rockchip_usb3_phy_power_on(struct phy *phy) regmap_read(tcphy->grf_regs, reg->offset, &val); if (!(val & BIT(reg->enable_bit))) { tcphy->mode |= new_mode & (MODE_DFP_USB | MODE_UFP_USB); + /* enable usb3 host */ - property_enable(tcphy, &cfg->usb3_host_disable, 0); - property_enable(tcphy, &cfg->usb3_host_port, 1); + tcphy_cfg_usb3_to_usb2_only(tcphy, false); goto unlock_ret; } usleep_range(10, 20); @@ -878,6 +892,7 @@ static int rockchip_usb3_phy_power_off(struct phy *phy) struct rockchip_typec_phy *tcphy = phy_get_drvdata(phy); mutex_lock(&tcphy->lock); + tcphy_cfg_usb3_to_usb2_only(tcphy, false); if (tcphy->mode == MODE_DISCONNECT) goto unlock; -- 2.15.1