Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp1318523pxj; Sat, 12 Jun 2021 05:11:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyG6qoiKGBgfY9QROB3j0nESTai1faWS3tvOXEj2tCUhaswIUiypVYKvGevHu+xHT1RO/36 X-Received: by 2002:aa7:c0d3:: with SMTP id j19mr8510580edp.196.1623499866367; Sat, 12 Jun 2021 05:11:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623499866; cv=none; d=google.com; s=arc-20160816; b=cDw3MUpHREgGEyOZNT43SVvJNZkTrQGRy1N/Yz3sNkQ7MIG957cdqLlaH5s1uY41Yf +/tZ0AnxVjDTM/IAyZa4jZp3zfx/p9ssxIBQt7z5i51xSLyVOAYPeUXP790Wly6u4ldl gjfNc5w17iVI8AxwFScdMj1UrWGS7+MArZ1KN9rnPDC1oDxoxph0PyZeY/cfjn1SnS97 0bhOHcJl5bcGHq7njV+yPY0ees50w1KhWkKRp6NnCiTU5C348aRZMFPbFzl8WdaSx5EE gYIQ4Vqkm6CPHO9sNzziYeDL0LD0Q0DQt9TzZNhrJU31GUOtZ2MFjPpHImnh4T8KlNBD 3+4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from; bh=PLXNQHFBl+ZyE+6SnWPns0KKpEpmyf338ihJnpc4WL4=; b=jk6x84exVIhB+uUywF/mivVCgQA8QRUnSabm8kSMFPoStaphP36NxMxBvlTC9klI6Z sohkonBQ8xhQ2AgKoU09s/QSzntSB99ONeUunZOlbAe3+o89a1iosExdw/x+sfhxSGaL XmziZBPR5xZUXeEP/J3DG8AMBpoOzYQxm2We9a8tqqE93g6e5mZsktZunNGrV1luexci lqAWBpmdXDbQArmmYkWcZ42qtwqgQFSiWi3uwdYmCI7naWk98twksVssaNDSXWdTc3KN Z2exepmkaXCZvHdiX3tXsnEtO1kBbXO0xAA7fJrJUBNjKaEsee49e8U+0IFnOl4hgs86 Y2Fw== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a4si7103677ejx.553.2021.06.12.05.10.43; Sat, 12 Jun 2021 05:11:06 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231297AbhFLMLL (ORCPT + 99 others); Sat, 12 Jun 2021 08:11:11 -0400 Received: from alexa-out.qualcomm.com ([129.46.98.28]:29154 "EHLO alexa-out.qualcomm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231256AbhFLMLJ (ORCPT ); Sat, 12 Jun 2021 08:11:09 -0400 Received: from ironmsg-lv-alpha.qualcomm.com ([10.47.202.13]) by alexa-out.qualcomm.com with ESMTP; 12 Jun 2021 05:09:10 -0700 X-QCInternal: smtphost Received: from ironmsg02-blr.qualcomm.com ([10.86.208.131]) by ironmsg-lv-alpha.qualcomm.com with ESMTP/TLS/AES256-SHA; 12 Jun 2021 05:09:08 -0700 X-QCInternal: smtphost Received: from rajeevny-linux.qualcomm.com ([10.204.66.121]) by ironmsg02-blr.qualcomm.com with ESMTP; 12 Jun 2021 17:38:40 +0530 Received: by rajeevny-linux.qualcomm.com (Postfix, from userid 2363605) id 3F25221465; Sat, 12 Jun 2021 17:38:39 +0530 (IST) From: Rajeev Nandan To: dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, devicetree@vger.kernel.org Cc: Rajeev Nandan , linux-kernel@vger.kernel.org, thierry.reding@gmail.com, sam@ravnborg.org, robdclark@gmail.com, dianders@chromium.org, lyude@redhat.com, jani.nikula@intel.com, robh@kernel.org, laurent.pinchart@ideasonboard.com, a.hajda@samsung.com, daniel.thompson@linaro.org, hoegsberg@chromium.org, abhinavk@codeaurora.org, seanpaul@chromium.org, kalyan_t@codeaurora.org, mkrishn@codeaurora.org Subject: [v6 3/5] drm/panel-simple: Support for delays between GPIO & regulator Date: Sat, 12 Jun 2021 17:38:00 +0530 Message-Id: <1623499682-2140-4-git-send-email-rajeevny@codeaurora.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1623499682-2140-1-git-send-email-rajeevny@codeaurora.org> References: <1623499682-2140-1-git-send-email-rajeevny@codeaurora.org> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Some panels datasheets may specify a delay between the enable GPIO and the regulator. Support this in panel-simple. Signed-off-by: Rajeev Nandan Reviewed-by: Douglas Anderson --- Changes in v4: - New Changes in v5: - Update description (Douglas) - Warn if "power_to_enable" or "disable_to_power_off" is non-zero and panel->enable_gpio is NULL (Douglas) Changes in v6: - Update warning message to make it more meaningful. (Douglas) drivers/gpu/drm/panel/panel-simple.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index 26555ec..86e5a45 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -133,6 +133,22 @@ struct panel_desc { unsigned int prepare_to_enable; /** + * @delay.power_to_enable: Time for the power to enable the display on. + * + * The time (in milliseconds) to wait after powering up the display + * before asserting its enable pin. + */ + unsigned int power_to_enable; + + /** + * @delay.disable_to_power_off: Time for the disable to power the display off. + * + * The time (in milliseconds) to wait before powering off the display + * after deasserting its enable pin. + */ + unsigned int disable_to_power_off; + + /** * @delay.enable: Time for the panel to display a valid frame. * * The time (in milliseconds) that it takes for the panel to @@ -347,6 +363,10 @@ static int panel_simple_suspend(struct device *dev) struct panel_simple *p = dev_get_drvdata(dev); gpiod_set_value_cansleep(p->enable_gpio, 0); + + if (p->desc->delay.disable_to_power_off) + msleep(p->desc->delay.disable_to_power_off); + regulator_disable(p->supply); p->unprepared_time = ktime_get(); @@ -407,6 +427,9 @@ static int panel_simple_prepare_once(struct panel_simple *p) return err; } + if (p->desc->delay.power_to_enable) + msleep(p->desc->delay.power_to_enable); + gpiod_set_value_cansleep(p->enable_gpio, 1); delay = p->desc->delay.prepare; @@ -782,6 +805,11 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc, break; } + if (!panel->enable_gpio && desc->delay.disable_to_power_off) + dev_warn(dev, "Need a delay after disabling panel GPIO, but a GPIO wasn't provided\n"); + if (!panel->enable_gpio && desc->delay.power_to_enable) + dev_warn(dev, "Need a delay before enabling panel GPIO, but a GPIO wasn't provided\n"); + dev_set_drvdata(dev, panel); /* -- 2.7.4