From patchwork Mon Oct 22 20:46:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Anderson X-Patchwork-Id: 10652517 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4B8C613A4 for ; Mon, 22 Oct 2018 20:48:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 908E528CA4 for ; Mon, 22 Oct 2018 20:48:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 846A228CB4; Mon, 22 Oct 2018 20:48:44 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2412228CA4 for ; Mon, 22 Oct 2018 20:48:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729248AbeJWFIr (ORCPT ); Tue, 23 Oct 2018 01:08:47 -0400 Received: from mail-pf1-f196.google.com ([209.85.210.196]:38534 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729232AbeJWFIr (ORCPT ); Tue, 23 Oct 2018 01:08:47 -0400 Received: by mail-pf1-f196.google.com with SMTP id f29-v6so20504781pff.5 for ; Mon, 22 Oct 2018 13:48:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=f4oR4ZDStg+E8v2cNbJRHjDjC6miXn++j6pN4qN/OJI=; b=nqXfSozcAlJrz1vA+akqt+4QjA8aOz/5RxsauYp28eURs/+12vol0mT8/oWCjXuEKF R5fyotPtUyZgAikNitKS/QGtlX2Ia1PmQF5HQWajN4zcPEekkwJb4N/Ghz2kC7axxTPq H21xkrnPG2bkX0BylaE7Q3h38kpErbrrTGrW0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=f4oR4ZDStg+E8v2cNbJRHjDjC6miXn++j6pN4qN/OJI=; b=Ux7j8Bcw4Na31ZeKa+dB9dTLIeOm9KgBG+uJbWYO8HF+gio7IFq+85wBvftZ28SgCQ quVQ3ef/jPiotox15y6hlIYZ3pmswxLDcE5au1hO380EHcOl/OT8NvX9LwF1RLLPnI9Q n5b2zF7IgVmsHF4p83ID24xKJdlVRDbj10iu5+AwcixQ1EvMwZv7qfsujtnfuzplqP7H 1m7i2upitaj3KJoMnc8G/L8qOIjeVM7XTYRqn2PB/8H6mN5KigpdRslmQptrfwYzO9A2 EgPrWI8BvS0YjH9BR4LDJMUXUdOyFn2SPe/PCKksrRMyjzOtntgFo3Vov5/HFr1As/bP Emdg== X-Gm-Message-State: ABuFfogK0gNKK2SxqLwkvV28OMrGGvXTr88potpAbIFN69FgQWzYQdcI t37jricRPjxVNPH5XpRQw44YA45KJfk= X-Google-Smtp-Source: ACcGV63u11X6gLB9SFur48dm4ZHAR463bY0tjVxvEDCR4idABHAPtyeTVUOGrN34Y4N7CbIYt2JyAA== X-Received: by 2002:a62:8685:: with SMTP id x127-v6mr24358904pfd.252.1540241321478; Mon, 22 Oct 2018 13:48:41 -0700 (PDT) Received: from tictac2.mtv.corp.google.com ([2620:15c:202:1:c8e0:70d7:4be7:a36]) by smtp.gmail.com with ESMTPSA id y144-v6sm47483001pfb.81.2018.10.22.13.48.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 22 Oct 2018 13:48:40 -0700 (PDT) From: Douglas Anderson To: Sean Paul , Thierry Reding , Sandeep Panda Cc: linux-arm-msm@vger.kernel.org, Laurent Pinchart , jsanka@codeaurora.org, ryandcase@chromium.org, Douglas Anderson , David Airlie , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/6] drm/panel: simple: Support panels with HPD where HPD isn't connected Date: Mon, 22 Oct 2018 13:46:35 -0700 Message-Id: <20181022204639.8558-2-dianders@chromium.org> X-Mailer: git-send-email 2.19.1.568.g152ad8e336-goog In-Reply-To: <20181022204639.8558-1-dianders@chromium.org> References: <20181022204639.8558-1-dianders@chromium.org> MIME-Version: 1.0 Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Some eDP panels that are designed to be always connected to a board use their HPD signal to signal that they've finished powering on and they're ready to be talked to. However, for various reasons it's possible that the HPD signal from the panel isn't actually hooked up. In the case where the HPD isn't hooked up you can look at the timing diagram on the panel datasheet and insert a delay for the maximum amount of time that the HPD might take to come up. Let's add support in simple-panel for this concept. At the moment we will co-opt the existing "prepare" delay to keep track of the delay and we'll use a boolean to specify that a given panel should only apply the delay if the "no-hpd" property was specified. Signed-off-by: Douglas Anderson --- drivers/gpu/drm/panel/panel-simple.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index 97964f7f2ace..38c646fb55fd 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -63,12 +63,15 @@ struct panel_desc { * turn the display off (no content is visible) * @unprepare: the time (in milliseconds) that it takes for the panel * to power itself down completely + * @prepare_delay_only_if_no_hpd: The prepare delay should only be done + * if we know Hot Plug Detect isn't used. */ struct { unsigned int prepare; unsigned int enable; unsigned int disable; unsigned int unprepare; + bool prepare_delay_only_if_no_hpd; } delay; u32 bus_format; @@ -79,6 +82,7 @@ struct panel_simple { struct drm_panel base; bool prepared; bool enabled; + bool no_hpd; const struct panel_desc *desc; @@ -215,7 +219,8 @@ static int panel_simple_prepare(struct drm_panel *panel) gpiod_set_value_cansleep(p->enable_gpio, 1); - if (p->desc->delay.prepare) + if (p->desc->delay.prepare && + (!p->desc->delay.prepare_delay_only_if_no_hpd || p->no_hpd)) msleep(p->desc->delay.prepare); p->prepared = true; @@ -305,6 +310,8 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc) panel->prepared = false; panel->desc = desc; + panel->no_hpd = of_property_read_bool(dev->of_node, "no-hpd"); + panel->supply = devm_regulator_get(dev, "power"); if (IS_ERR(panel->supply)) return PTR_ERR(panel->supply);