Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp3152374pxa; Tue, 25 Aug 2020 12:56:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxoxjinGia8tv8QwwNpWblQThsdSnxwDXCnXJRSpbULycDYcYuNOReE9f0w9cClFFTraEcL X-Received: by 2002:a17:906:393:: with SMTP id b19mr12094542eja.268.1598385362180; Tue, 25 Aug 2020 12:56:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1598385362; cv=none; d=google.com; s=arc-20160816; b=CYCE2gVmhxDxXoQyaOMWmU0XCbleSK5uz0LPLb94+3Mrto/8ronbJVU6iH+c8qTL2E vMuEDTB+CV82kW+yBq/XaeiY9ZhTDTNwpXprI1NUxsN+LO7uf3WxW1rBib8JfmMrKFDB RQxxg+srboldu6oBPECWsl1mvTcJ8A0xnEd5/hu2Ms9b1rx77zCNiEcpNLS0tgoTigQK v3Geh0JCGpvJkMCh1Ia1OoE8BUzJSUOf8flotBnafZ5EOssTXM/iTy9PAse2v83Rivis V+7jzFQcG/K0Ai5PQbETTj4PVtveRObApcOnbrR/kTvW92m+dRmskYQ2Y4TkDcB4WMbS VK3g== 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=LI7MeCR/d9B3rebts7XCX9cGQMTRQt7Fy4cwAHJQI/A=; b=ZjHW5kwpeCVymPqbM1CrUk+YpzLgSecpOokYT1YyTY3s6PBbOeHwc77qOItgBJ8izz JsQo4s9OIzHPGSBuI0czmBUqow4a5BeKmDYVHUMNcZhU4DaBYCiTSB7JofQNoBXE2DWo suCYk8Igbqn92o3w+xHvNnz+TGioCXyG13trr04LTV9Yce+wnfyyv+cyrWljMJ4hwi1K BiXdLhYMecLlv8mWDIBqPG9nwbe+GU76PldKgCo4EHq6o5hypOStwdxunrlr6ETQU4DI vbLvqqsuaUKAMO4J0UgjHHlA6Qu4LAqdR0rKGGrMuQm5elSX0lnvG0qcR+WxngOGOWMp 6wvw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=G0gydynf; 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=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d13si15759ejd.721.2020.08.25.12.55.37; Tue, 25 Aug 2020 12:56:02 -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=@redhat.com header.s=mimecast20190719 header.b=G0gydynf; 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=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726993AbgHYTvs (ORCPT + 99 others); Tue, 25 Aug 2020 15:51:48 -0400 Received: from us-smtp-2.mimecast.com ([207.211.31.81]:59500 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726923AbgHYTvl (ORCPT ); Tue, 25 Aug 2020 15:51:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1598385099; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=LI7MeCR/d9B3rebts7XCX9cGQMTRQt7Fy4cwAHJQI/A=; b=G0gydynfbPAnolxtUk4EpBwA9uqM6kLzAI3XQA0Pawbpr5xWezv6uA7PUMNjjg+0CWAgI8 PfqQhh5JWWaq7JFSuHwvy09Hga1btOEBbTFKER73JmhjLbP5KriQUax0OIuYNCCUkMNalx dH3T1siZJvMoCpEnDLN/iqrP03v/OqQ= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-527-TEFK6d6HOJaSnbJA_8mTCA-1; Tue, 25 Aug 2020 15:51:35 -0400 X-MC-Unique: TEFK6d6HOJaSnbJA_8mTCA-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 14B69185E559; Tue, 25 Aug 2020 19:51:33 +0000 (UTC) Received: from Whitewolf.redhat.com (ovpn-120-227.rdu2.redhat.com [10.10.120.227]) by smtp.corp.redhat.com (Postfix) with ESMTP id 638435D9D3; Tue, 25 Aug 2020 19:51:31 +0000 (UTC) From: Lyude Paul To: dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, nouveau@lists.freedesktop.org Cc: Sean Paul , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= , Manasi Navare , Uma Shankar , Gwan-gyeong Mun , Imre Deak , Wambui Karuga , Lucas De Marchi , linux-kernel@vger.kernel.org (open list) Subject: [RFC v4 16/20] drm/i915/dp: Extract drm_dp_get_sink_count() Date: Tue, 25 Aug 2020 15:50:23 -0400 Message-Id: <20200825195027.74681-17-lyude@redhat.com> In-Reply-To: <20200825195027.74681-1-lyude@redhat.com> References: <20200825195027.74681-1-lyude@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org And of course, we'll also need to read the sink count from other drivers as well if we're checking whether or not it's supported. So, let's extract the code for this into another helper. v2: * Fix drm_dp_dpcd_readb() ret check * Add back comment and move back sink_count assignment in intel_dp_get_dpcd() Signed-off-by: Lyude Paul Reviewed-by: Sean Paul --- drivers/gpu/drm/drm_dp_helper.c | 22 ++++++++++++++++++++++ drivers/gpu/drm/i915/display/intel_dp.c | 11 +++++------ include/drm/drm_dp_helper.h | 1 + 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c index 863e0babc1903..67ad05eb05b7e 100644 --- a/drivers/gpu/drm/drm_dp_helper.c +++ b/drivers/gpu/drm/drm_dp_helper.c @@ -736,6 +736,28 @@ bool drm_dp_has_sink_count(struct drm_connector *connector, } EXPORT_SYMBOL(drm_dp_has_sink_count); +/** + * drm_dp_get_sink_count() - Retrieve the sink count for a given sink + * @aux: The DP AUX channel to use + * + * Returns: The current sink count reported by @aux, or a negative error code + * otherwise. + */ +int drm_dp_get_sink_count(struct drm_dp_aux *aux) +{ + u8 count; + int ret; + + ret = drm_dp_dpcd_readb(aux, DP_SINK_COUNT, &count); + if (ret < 0) + return ret; + if (ret != 1) + return -EIO; + + return DP_GET_SINK_COUNT(count); +} +EXPORT_SYMBOL(drm_dp_get_sink_count); + /* * I2C-over-AUX implementation */ diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c index 35a4779a442e2..4337321a3be4f 100644 --- a/drivers/gpu/drm/i915/display/intel_dp.c +++ b/drivers/gpu/drm/i915/display/intel_dp.c @@ -4648,6 +4648,8 @@ intel_dp_has_sink_count(struct intel_dp *intel_dp) static bool intel_dp_get_dpcd(struct intel_dp *intel_dp) { + int ret; + if (!intel_dp_read_dpcd(intel_dp)) return false; @@ -4664,11 +4666,8 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp) } if (intel_dp_has_sink_count(intel_dp)) { - u8 count; - ssize_t r; - - r = drm_dp_dpcd_readb(&intel_dp->aux, DP_SINK_COUNT, &count); - if (r < 1) + ret = drm_dp_get_sink_count(&intel_dp->aux); + if (ret < 0) return false; /* @@ -4676,7 +4675,7 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp) * a member variable in intel_dp will track any changes * between short pulse interrupts. */ - intel_dp->sink_count = DP_GET_SINK_COUNT(count); + intel_dp->sink_count = ret; /* * SINK_COUNT == 0 and DOWNSTREAM_PORT_PRESENT == 1 implies that diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h index a1413a531eaf4..0c141fc81aaa8 100644 --- a/include/drm/drm_dp_helper.h +++ b/include/drm/drm_dp_helper.h @@ -1635,6 +1635,7 @@ struct drm_dp_desc; bool drm_dp_has_sink_count(struct drm_connector *connector, const u8 dpcd[DP_RECEIVER_CAP_SIZE], const struct drm_dp_desc *desc); +int drm_dp_get_sink_count(struct drm_dp_aux *aux); void drm_dp_remote_aux_init(struct drm_dp_aux *aux); void drm_dp_aux_init(struct drm_dp_aux *aux); -- 2.26.2