From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751554AbcGNEQe (ORCPT ); Thu, 14 Jul 2016 00:16:34 -0400 Received: from lucky1.263xmail.com ([211.157.147.134]:53003 "EHLO lucky1.263xmail.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751362AbcGNEQI (ORCPT ); Thu, 14 Jul 2016 00:16:08 -0400 X-263anti-spam: KSV:0; X-MAIL-GRAY: 1 X-MAIL-DELIVERY: 0 X-KSVirus-check: 0 X-ABS-CHECKED: 4 X-ADDR-CHECKED: 0 X-RL-SENDER: ykk@rock-chips.com X-FST-TO: yzq@rock-chips.com X-SENDER-IP: 103.29.142.67 X-LOGIN-NAME: ykk@rock-chips.com X-UNIQUE-TAG: <04acbb9208bea0a59a7cdac16c64ef31> X-ATTACHMENT-NUM: 0 X-DNS-TYPE: 0 From: Yakir Yang To: Mark Yao , Inki Dae , Jingoo Han , Heiko Stuebner Cc: Javier Martinez Canillas , =?UTF-8?q?St=C3=A9phane=20Marchesin?= , Sean Paul , Tomasz Figa , David Airlie , daniel.vetter@ffwll.ch, Thierry Reding , dianders@chromium.org, Krzysztof Kozlowski , emil.l.velikov@gmail.com, Dan Carpenter , Yakir Yang , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org Subject: [PATCH v4 4/4] drm/rockchip: analogix_dp: implement PSR function Date: Thu, 14 Jul 2016 12:15:58 +0800 Message-Id: <1468469758-12722-1-git-send-email-ykk@rock-chips.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1468469704-12440-1-git-send-email-ykk@rock-chips.com> References: <1468469704-12440-1-git-send-email-ykk@rock-chips.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Alway enable the PSR function for Rockchip analogix_dp driver. If panel don't support PSR, then the core analogix_dp would ignore this setting. Signed-off-by: Yakir Yang --- Changes in v4: - Return 'void' instead of 'int' in analogix_dp_psr_set(). (Sean) - Pull the 10ms delay time out into a #define. (Sean) - Improved the code of analogix_dp_psr_work(). (Sean) - Indented with spaces for new numbers in rockchip_dp_device struct. (Stéphane, reviewed at Google gerrit) [https://chromium-review.googlesource.com/#/c/349085/33/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c@83] Changes in v3: - split the common psr logic into a seperate driver, make this to a simple sub-psr device driver. Changes in v2: - remove vblank notify out (Daniel) - create a psr_active() callback in vop data struct. drivers/gpu/drm/rockchip/analogix_dp-rockchip.c | 57 +++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c index e81e19a..aa916f4 100644 --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c @@ -32,6 +32,7 @@ #include #include "rockchip_drm_drv.h" +#include "rockchip_drm_psr.h" #include "rockchip_drm_vop.h" #define RK3288_GRF_SOC_CON6 0x25c @@ -41,6 +42,9 @@ #define HIWORD_UPDATE(val, mask) (val | (mask) << 16) +#define PSR_SET_DELAY_TIME msecs_to_jiffies(10) +#define PSR_WAIT_LINE_FLAG_TIMEOUT_MS 100 + #define to_dp(nm) container_of(nm, struct rockchip_dp_device, nm) /** @@ -68,11 +72,55 @@ struct rockchip_dp_device { struct regmap *grf; struct reset_control *rst; + struct delayed_work psr_work; + unsigned int psr_state; + const struct rockchip_dp_chip_data *data; struct analogix_dp_plat_data plat_data; }; +static void analogix_dp_psr_set(struct drm_encoder *encoder, bool enabled) +{ + struct rockchip_dp_device *dp = to_dp(encoder); + + dev_dbg(dp->dev, "%s PSR...\n", enabled ? "Entry" : "Exit"); + + if (enabled) + dp->psr_state = EDP_VSC_PSR_STATE_ACTIVE; + else + dp->psr_state = ~EDP_VSC_PSR_STATE_ACTIVE; + + schedule_delayed_work(&dp->psr_work, PSR_SET_DELAY_TIME); +} + +static void analogix_dp_psr_work(struct work_struct *work) +{ + struct rockchip_dp_device *dp = + container_of(work, typeof(*dp), psr_work.work); + struct drm_crtc *crtc = dp->encoder.crtc; + int psr_state = dp->psr_state; + int vact_end; + int ret; + + if (!crtc) + return; + + vact_end = crtc->mode.vtotal - crtc->mode.vsync_start + crtc->mode.vdisplay; + + ret = rockchip_drm_wait_line_flag(dp->encoder.crtc, vact_end, + PSR_WAIT_LINE_FLAG_TIMEOUT_MS); + if (ret) { + dev_err(dp->dev, "line flag interrupt did not arrive\n"); + return; + } + + if (psr_state == EDP_VSC_PSR_STATE_ACTIVE) + analogix_dp_enable_psr(dp->dev); + else + analogix_dp_disable_psr(dp->dev); +} + static int rockchip_dp_pre_init(struct rockchip_dp_device *dp) { reset_control_assert(dp->rst); @@ -340,12 +388,21 @@ static int rockchip_dp_bind(struct device *dev, struct device *master, dp->plat_data.power_off = rockchip_dp_powerdown; dp->plat_data.get_modes = rockchip_dp_get_modes; + dp->psr_state = ~EDP_VSC_PSR_STATE_ACTIVE; + INIT_DELAYED_WORK(&dp->psr_work, analogix_dp_psr_work); + + rockchip_drm_psr_register(&dp->encoder, analogix_dp_psr_set); + return analogix_dp_bind(dev, dp->drm_dev, &dp->plat_data); } static void rockchip_dp_unbind(struct device *dev, struct device *master, void *data) { + struct rockchip_dp_device *dp = dev_get_drvdata(dev); + + rockchip_drm_psr_unregister(&dp->encoder); + return analogix_dp_unbind(dev, master, data); } -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yakir Yang Subject: [PATCH v4 4/4] drm/rockchip: analogix_dp: implement PSR function Date: Thu, 14 Jul 2016 12:15:58 +0800 Message-ID: <1468469758-12722-1-git-send-email-ykk@rock-chips.com> References: <1468469704-12440-1-git-send-email-ykk@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1468469704-12440-1-git-send-email-ykk@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Mark Yao , Inki Dae , Jingoo Han , Heiko Stuebner Cc: Krzysztof Kozlowski , linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, daniel.vetter@ffwll.ch, emil.l.velikov@gmail.com, dianders@chromium.org, dri-devel@lists.freedesktop.org, Tomasz Figa , Javier Martinez Canillas , =?UTF-8?q?St=C3=A9phane=20Marchesin?= , Thierry Reding , Dan Carpenter List-Id: linux-samsung-soc@vger.kernel.org QWx3YXkgZW5hYmxlIHRoZSBQU1IgZnVuY3Rpb24gZm9yIFJvY2tjaGlwIGFuYWxvZ2l4X2RwIGRy aXZlci4gSWYgcGFuZWwKZG9uJ3Qgc3VwcG9ydCBQU1IsIHRoZW4gdGhlIGNvcmUgYW5hbG9naXhf ZHAgd291bGQgaWdub3JlIHRoaXMgc2V0dGluZy4KClNpZ25lZC1vZmYtYnk6IFlha2lyIFlhbmcg PHlra0Byb2NrLWNoaXBzLmNvbT4KLS0tCkNoYW5nZXMgaW4gdjQ6Ci0gUmV0dXJuICd2b2lkJyBp bnN0ZWFkIG9mICdpbnQnIGluIGFuYWxvZ2l4X2RwX3Bzcl9zZXQoKS4gKFNlYW4pCi0gUHVsbCB0 aGUgMTBtcyBkZWxheSB0aW1lIG91dCBpbnRvIGEgI2RlZmluZS4gKFNlYW4pCi0gSW1wcm92ZWQg dGhlIGNvZGUgb2YgYW5hbG9naXhfZHBfcHNyX3dvcmsoKS4gKFNlYW4pCi0gSW5kZW50ZWQgd2l0 aCBzcGFjZXMgZm9yIG5ldyBudW1iZXJzIGluIHJvY2tjaGlwX2RwX2RldmljZSBzdHJ1Y3QuIChT dMOpcGhhbmUsIHJldmlld2VkIGF0IEdvb2dsZSBnZXJyaXQpCiAgICBbaHR0cHM6Ly9jaHJvbWl1 bS1yZXZpZXcuZ29vZ2xlc291cmNlLmNvbS8jL2MvMzQ5MDg1LzMzL2RyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9hbmFsb2dpeF9kcC1yb2NrY2hpcC5jQDgzXQoKQ2hhbmdlcyBpbiB2MzoKLSBzcGxp dCB0aGUgY29tbW9uIHBzciBsb2dpYyBpbnRvIGEgc2VwZXJhdGUgZHJpdmVyLCBtYWtlIHRoaXMg dG8gYQogIHNpbXBsZSBzdWItcHNyIGRldmljZSBkcml2ZXIuCgpDaGFuZ2VzIGluIHYyOgotIHJl bW92ZSB2Ymxhbmsgbm90aWZ5IG91dCAoRGFuaWVsKQotIGNyZWF0ZSBhIHBzcl9hY3RpdmUoKSBj YWxsYmFjayBpbiB2b3AgZGF0YSBzdHJ1Y3QuCgogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Fu YWxvZ2l4X2RwLXJvY2tjaGlwLmMgfCA1NyArKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZp bGUgY2hhbmdlZCwgNTcgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9hbmFsb2dpeF9kcC1yb2NrY2hpcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL2FuYWxvZ2l4X2RwLXJvY2tjaGlwLmMKaW5kZXggZTgxZTE5YS4uYWE5MTZmNCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2FuYWxvZ2l4X2RwLXJvY2tjaGlwLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2FuYWxvZ2l4X2RwLXJvY2tjaGlwLmMKQEAgLTMy LDYgKzMyLDcgQEAKICNpbmNsdWRlIDxkcm0vYnJpZGdlL2FuYWxvZ2l4X2RwLmg+CiAKICNpbmNs dWRlICJyb2NrY2hpcF9kcm1fZHJ2LmgiCisjaW5jbHVkZSAicm9ja2NoaXBfZHJtX3Bzci5oIgog I2luY2x1ZGUgInJvY2tjaGlwX2RybV92b3AuaCIKIAogI2RlZmluZSBSSzMyODhfR1JGX1NPQ19D T042CQkweDI1YwpAQCAtNDEsNiArNDIsOSBAQAogCiAjZGVmaW5lIEhJV09SRF9VUERBVEUodmFs LCBtYXNrKQkodmFsIHwgKG1hc2spIDw8IDE2KQogCisjZGVmaW5lIFBTUl9TRVRfREVMQVlfVElN RQkJbXNlY3NfdG9famlmZmllcygxMCkKKyNkZWZpbmUgUFNSX1dBSVRfTElORV9GTEFHX1RJTUVP VVRfTVMJMTAwCisKICNkZWZpbmUgdG9fZHAobm0pCWNvbnRhaW5lcl9vZihubSwgc3RydWN0IHJv Y2tjaGlwX2RwX2RldmljZSwgbm0pCiAKIC8qKgpAQCAtNjgsMTEgKzcyLDU1IEBAIHN0cnVjdCBy b2NrY2hpcF9kcF9kZXZpY2UgewogCXN0cnVjdCByZWdtYXAgICAgICAgICAgICAqZ3JmOwogCXN0 cnVjdCByZXNldF9jb250cm9sICAgICAqcnN0OwogCisJc3RydWN0IGRlbGF5ZWRfd29yayAgICAg IHBzcl93b3JrOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICBwc3Jfc3RhdGU7CisKIAljb25z dCBzdHJ1Y3Qgcm9ja2NoaXBfZHBfY2hpcF9kYXRhICpkYXRhOwogCiAJc3RydWN0IGFuYWxvZ2l4 X2RwX3BsYXRfZGF0YSBwbGF0X2RhdGE7CiB9OwogCitzdGF0aWMgdm9pZCBhbmFsb2dpeF9kcF9w c3Jfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgYm9vbCBlbmFibGVkKQoreworCXN0 cnVjdCByb2NrY2hpcF9kcF9kZXZpY2UgKmRwID0gdG9fZHAoZW5jb2Rlcik7CisKKwlkZXZfZGJn KGRwLT5kZXYsICIlcyBQU1IuLi5cbiIsIGVuYWJsZWQgPyAiRW50cnkiIDogIkV4aXQiKTsKKwor CWlmIChlbmFibGVkKQorCQlkcC0+cHNyX3N0YXRlID0gRURQX1ZTQ19QU1JfU1RBVEVfQUNUSVZF OworCWVsc2UKKwkJZHAtPnBzcl9zdGF0ZSA9IH5FRFBfVlNDX1BTUl9TVEFURV9BQ1RJVkU7CisK KwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRwLT5wc3Jfd29yaywgUFNSX1NFVF9ERUxBWV9USU1F KTsKK30KKworc3RhdGljIHZvaWQgYW5hbG9naXhfZHBfcHNyX3dvcmsoc3RydWN0IHdvcmtfc3Ry dWN0ICp3b3JrKQoreworCXN0cnVjdCByb2NrY2hpcF9kcF9kZXZpY2UgKmRwID0KKwkJCQljb250 YWluZXJfb2Yod29yaywgdHlwZW9mKCpkcCksIHBzcl93b3JrLndvcmspOworCXN0cnVjdCBkcm1f Y3J0YyAqY3J0YyA9IGRwLT5lbmNvZGVyLmNydGM7CisJaW50IHBzcl9zdGF0ZSA9IGRwLT5wc3Jf c3RhdGU7CisJaW50IHZhY3RfZW5kOworCWludCByZXQ7CisKKwlpZiAoIWNydGMpCisJCXJldHVy bjsKKworCXZhY3RfZW5kID0gY3J0Yy0+bW9kZS52dG90YWwgLSBjcnRjLT5tb2RlLnZzeW5jX3N0 YXJ0ICsgY3J0Yy0+bW9kZS52ZGlzcGxheTsKKworCXJldCA9IHJvY2tjaGlwX2RybV93YWl0X2xp bmVfZmxhZyhkcC0+ZW5jb2Rlci5jcnRjLCB2YWN0X2VuZCwKKwkJCQkJICBQU1JfV0FJVF9MSU5F X0ZMQUdfVElNRU9VVF9NUyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJsaW5l IGZsYWcgaW50ZXJydXB0IGRpZCBub3QgYXJyaXZlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlm IChwc3Jfc3RhdGUgPT0gRURQX1ZTQ19QU1JfU1RBVEVfQUNUSVZFKQorCQlhbmFsb2dpeF9kcF9l bmFibGVfcHNyKGRwLT5kZXYpOworCWVsc2UKKwkJYW5hbG9naXhfZHBfZGlzYWJsZV9wc3IoZHAt PmRldik7Cit9CisKIHN0YXRpYyBpbnQgcm9ja2NoaXBfZHBfcHJlX2luaXQoc3RydWN0IHJvY2tj aGlwX2RwX2RldmljZSAqZHApCiB7CiAJcmVzZXRfY29udHJvbF9hc3NlcnQoZHAtPnJzdCk7CkBA IC0zNDAsMTIgKzM4OCwyMSBAQCBzdGF0aWMgaW50IHJvY2tjaGlwX2RwX2JpbmQoc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCiAJZHAtPnBsYXRfZGF0YS5wb3dlcl9v ZmYgPSByb2NrY2hpcF9kcF9wb3dlcmRvd247CiAJZHAtPnBsYXRfZGF0YS5nZXRfbW9kZXMgPSBy b2NrY2hpcF9kcF9nZXRfbW9kZXM7CiAKKwlkcC0+cHNyX3N0YXRlID0gfkVEUF9WU0NfUFNSX1NU QVRFX0FDVElWRTsKKwlJTklUX0RFTEFZRURfV09SSygmZHAtPnBzcl93b3JrLCBhbmFsb2dpeF9k cF9wc3Jfd29yayk7CisKKwlyb2NrY2hpcF9kcm1fcHNyX3JlZ2lzdGVyKCZkcC0+ZW5jb2Rlciwg YW5hbG9naXhfZHBfcHNyX3NldCk7CisKIAlyZXR1cm4gYW5hbG9naXhfZHBfYmluZChkZXYsIGRw LT5kcm1fZGV2LCAmZHAtPnBsYXRfZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJvY2tjaGlwX2Rw X3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKIAkJCSAg ICAgICB2b2lkICpkYXRhKQogeworCXN0cnVjdCByb2NrY2hpcF9kcF9kZXZpY2UgKmRwID0gZGV2 X2dldF9kcnZkYXRhKGRldik7CisKKwlyb2NrY2hpcF9kcm1fcHNyX3VucmVnaXN0ZXIoJmRwLT5l bmNvZGVyKTsKKwogCXJldHVybiBhbmFsb2dpeF9kcF91bmJpbmQoZGV2LCBtYXN0ZXIsIGRhdGEp OwogfQogCi0tIAoxLjkuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Ry aS1kZXZlbAo=