Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4644049pxj; Wed, 12 May 2021 09:56:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJweIIQBvLGHzzma8AFzeL+zr6/Ato5W7nm6I06zlfU3pW1PphR+lLDT4gc34/JY7JjP/Ntq X-Received: by 2002:a05:6512:304b:: with SMTP id b11mr25966580lfb.327.1620838584165; Wed, 12 May 2021 09:56:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620838584; cv=none; d=google.com; s=arc-20160816; b=Ycnebvkym49i+cIjGCWGkZV4ORPbyaCKCrUiQCriTeOu4yg/+JSpAzwvFgSGIW+Hdu +tBYDnwBO/uuuohDEibknAnS3Ruu3uNSkR5pC2EBiXKr52DylP+CKI7RrqpSKX3XrTwI TalW6c0KhcG/NguuCs37CEqddWqh/13V9iwOWGNtoOsBV1E1nrXKjUcUMWqYYKZgw4FQ JtYqVOsj6JiiE1Ly/z6Xlex3VdngdaSNwESAq1uEHOtQ09VGypvCOMOF0g6ox4Xnaii4 4219zSDc2VaL43lISOGqf+GOwsUipDJj7zeLzMYVApKyWYBpdJopt0ESPPJ+swoAiLPM UfMA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=+wWuRMEjcPPzbO3txU6r4C6nItYFM52oj73MLcBv9fo=; b=07AiuBdIzL50FJREzMXItlbv3Le2SE1u1GJkbSFX8ksed8O//T1vEUEaqPthCOE8MU ByPuOKBR7Xo4+7XWXzQLXm36wDtahV7DnjdtYq4yWfUJT5cuSU/sLhSMM3F1SRceLt9w wBN3QEV41tAb6WINMo3NUIzSNojsk3wA4x8b55iogzEMHVC+YdfA4jnJOOnKGwaO9N77 FTj0wyPtxHzYCuKYeLboNprhkMNhm5s0naTsuOqyMJMXYdb8gG9fXdOPbAX9WEKn7tqU hZKX3I/CTJQMT7QyFdWgvc90tB5ziZECWW/+CcrhD1Sw4FZYKNVsEFan24M26w4CUxQf n8/w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Qdz3Njdd; 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=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u26si266560lji.483.2021.05.12.09.55.53; Wed, 12 May 2021 09:56:24 -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=@linuxfoundation.org header.s=korg header.b=Qdz3Njdd; 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=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244544AbhELQus (ORCPT + 99 others); Wed, 12 May 2021 12:50:48 -0400 Received: from mail.kernel.org ([198.145.29.99]:52396 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237208AbhELPsz (ORCPT ); Wed, 12 May 2021 11:48:55 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 10FD7619B6; Wed, 12 May 2021 15:24:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620833095; bh=iZm5o5dwrXWHgXaL7yFG8yES/bADeZ234noXAniQ7Hs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Qdz3NjddTksxnqcDPLGmIG6hG341APi373M8zrurAq+/W/sryCz8eQm5f06CV/Xnc E25TJ5shi9FROks8XetO6SoZsVvHdeP0QsfWXcvzx/PVCMOYJ7fnlJL9ngbYU6tdzS 4iBMoPzxQnkU/0amiDSwPi8vs6gqeddOhlU5/Zio= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Badhri Jagan Sridharan , Guenter Roeck , Adam Thomson , Heikki Krogerus Subject: [PATCH 5.11 016/601] usb: typec: tcpm: Address incorrect values of tcpm psy for fixed supply Date: Wed, 12 May 2021 16:41:33 +0200 Message-Id: <20210512144828.356805581@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210512144827.811958675@linuxfoundation.org> References: <20210512144827.811958675@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Badhri Jagan Sridharan commit f3dedafb8263ca4791a92a23f5230068f5bde008 upstream. tcpm_pd_build_request overwrites current_limit and supply_voltage even before port partner accepts the requests. This leaves stale values in current_limit and supply_voltage that get exported by "tcpm-source-psy-". Solving this problem by caching the request values of current limit/supply voltage in req_current_limit and req_supply_voltage. current_limit/supply_voltage gets updated once the port partner accepts the request. Fixes: f2a8aa053c176 ("typec: tcpm: Represent source supply through power_supply") Signed-off-by: Badhri Jagan Sridharan Cc: stable Reviewed-by: Guenter Roeck Reviewed-by: Adam Thomson Reviewed-by: Heikki Krogerus Link: https://lore.kernel.org/r/20210407200723.1914388-1-badhri@google.com Signed-off-by: Greg Kroah-Hartman --- drivers/usb/typec/tcpm/tcpm.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) --- a/drivers/usb/typec/tcpm/tcpm.c +++ b/drivers/usb/typec/tcpm/tcpm.c @@ -338,7 +338,10 @@ struct tcpm_port { unsigned int operating_snk_mw; bool update_sink_caps; - /* Requested current / voltage */ + /* Requested current / voltage to the port partner */ + u32 req_current_limit; + u32 req_supply_voltage; + /* Actual current / voltage limit of the local port */ u32 current_limit; u32 supply_voltage; @@ -1904,8 +1907,8 @@ static void tcpm_pd_ctrl_request(struct case SNK_TRANSITION_SINK: if (port->vbus_present) { tcpm_set_current_limit(port, - port->current_limit, - port->supply_voltage); + port->req_current_limit, + port->req_supply_voltage); port->explicit_contract = true; tcpm_set_auto_vbus_discharge_threshold(port, TYPEC_PWR_MODE_PD, @@ -1991,8 +1994,8 @@ static void tcpm_pd_ctrl_request(struct break; case SNK_NEGOTIATE_PPS_CAPABILITIES: port->pps_data.active = true; - port->supply_voltage = port->pps_data.out_volt; - port->current_limit = port->pps_data.op_curr; + port->req_supply_voltage = port->pps_data.out_volt; + port->req_current_limit = port->pps_data.op_curr; tcpm_set_state(port, SNK_TRANSITION_SINK, 0); break; case SOFT_RESET_SEND: @@ -2609,8 +2612,8 @@ static int tcpm_pd_build_request(struct flags & RDO_CAP_MISMATCH ? " [mismatch]" : ""); } - port->current_limit = ma; - port->supply_voltage = mv; + port->req_current_limit = ma; + port->req_supply_voltage = mv; return 0; }