From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754028AbcCUJkZ (ORCPT ); Mon, 21 Mar 2016 05:40:25 -0400 Received: from lucky1.263xmail.com ([211.157.147.132]:44435 "EHLO lucky1.263xmail.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753427AbcCUJkO (ORCPT ); Mon, 21 Mar 2016 05:40:14 -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: airlied@linux.ie X-SENDER-IP: 58.22.7.114 X-LOGIN-NAME: ykk@rock-chips.com X-UNIQUE-TAG: <8d4e2006f09c68b2984b095a0f194631> X-ATTACHMENT-NUM: 0 X-DNS-TYPE: 0 From: Yakir Yang To: David Airlie , Mark Yao , Heiko Stuebner Cc: Joonyoung Shim , Kumar Gala , Ian Campbell , Rob Herring , Pawel Moll , Russell King , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Yakir Yang Subject: [RFC PATCH v1 1/4] drm: rockchip: add a common subdrv interfaces Date: Mon, 21 Mar 2016 17:38:03 +0800 Message-Id: <1458553083-26535-1-git-send-email-ykk@rock-chips.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1458552518-25527-1-git-send-email-ykk@rock-chips.com> References: <1458552518-25527-1-git-send-email-ykk@rock-chips.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Introduce a common subdrv register/unregister interfaces, help external driver to hook the drm open/close event. Signed-off-by: Yakir Yang --- drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 49 +++++++++++++++++++++++++++++ drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 15 +++++++++ 2 files changed, 64 insertions(+) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c index 896da09..4e0feb2 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c @@ -36,6 +36,8 @@ #define DRIVER_MAJOR 1 #define DRIVER_MINOR 0 +static LIST_HEAD(rockchip_drm_subdrv_list); + /* * Attach a (component) device to the shared drm dma mapping from master drm * device. This is used by the VOPs to map GEM buffers to a common DMA @@ -251,6 +253,51 @@ static int rockchip_drm_unload(struct drm_device *drm_dev) return 0; } +int rockchip_register_subdrv(struct drm_rockchip_subdrv *subdrv) +{ + if (!subdrv) + return -EINVAL; + + list_add_tail(&subdrv->list, &rockchip_drm_subdrv_list); + + return 0; +} +EXPORT_SYMBOL_GPL(rockchip_register_subdrv); + +int rockchip_unregister_subdrv(struct drm_rockchip_subdrv *subdrv) +{ + if (!subdrv) + return -EINVAL; + + list_del(&subdrv->list); + + return 0; +} +EXPORT_SYMBOL_GPL(rockchip_unregister_subdrv); + +static int rockchip_drm_open(struct drm_device *dev, struct drm_file *file) +{ + struct drm_rockchip_subdrv *subdrv; + int ret = 0; + + list_for_each_entry(subdrv, &rockchip_drm_subdrv_list, list) { + ret = subdrv->open(dev, subdrv->dev, file); + if (ret) + return ret; + } + + return 0; +} + +static void rockchip_drm_preclose(struct drm_device *dev, + struct drm_file *file) +{ + struct drm_rockchip_subdrv *subdrv; + + list_for_each_entry(subdrv, &rockchip_drm_subdrv_list, list) + subdrv->close(dev, subdrv->dev, file); +} + void rockchip_drm_lastclose(struct drm_device *dev) { struct rockchip_drm_private *priv = dev->dev_private; @@ -281,6 +328,8 @@ static struct drm_driver rockchip_drm_driver = { DRIVER_PRIME | DRIVER_ATOMIC, .load = rockchip_drm_load, .unload = rockchip_drm_unload, + .open = rockchip_drm_open, + .preclose = rockchip_drm_preclose, .lastclose = rockchip_drm_lastclose, .get_vblank_counter = drm_vblank_no_hw_counter, .enable_vblank = rockchip_drm_crtc_enable_vblank, diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h index 3529f69..5ea5fcb 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h @@ -42,6 +42,17 @@ struct rockchip_crtc_funcs { void (*wait_for_update)(struct drm_crtc *crtc); }; +struct drm_rockchip_subdrv { + struct list_head list; + struct device *dev; + struct drm_device *drm_dev; + + int (*open)(struct drm_device *drm_dev, struct device *dev, + struct drm_file *file); + void (*close)(struct drm_device *drm_dev, struct device *dev, + struct drm_file *file); +}; + struct rockchip_atomic_commit { struct work_struct work; struct drm_atomic_state *state; @@ -73,4 +84,8 @@ int rockchip_drm_dma_attach_device(struct drm_device *drm_dev, struct device *dev); void rockchip_drm_dma_detach_device(struct drm_device *drm_dev, struct device *dev); + +int rockchip_register_subdrv(struct drm_rockchip_subdrv *subdrv); +int rockchip_unregister_subdrv(struct drm_rockchip_subdrv *subdrv); + #endif /* _ROCKCHIP_DRM_DRV_H_ */ -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yakir Yang Subject: [RFC PATCH v1 1/4] drm: rockchip: add a common subdrv interfaces Date: Mon, 21 Mar 2016 17:38:03 +0800 Message-ID: <1458553083-26535-1-git-send-email-ykk@rock-chips.com> References: <1458552518-25527-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: <1458552518-25527-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: David Airlie , Mark Yao , Heiko Stuebner Cc: devicetree@vger.kernel.org, Russell King , Pawel Moll , Ian Campbell , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, Rob Herring , Kumar Gala , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org SW50cm9kdWNlIGEgY29tbW9uIHN1YmRydiByZWdpc3Rlci91bnJlZ2lzdGVyIGludGVyZmFjZXMs IGhlbHAKZXh0ZXJuYWwgZHJpdmVyIHRvIGhvb2sgdGhlIGRybSBvcGVuL2Nsb3NlIGV2ZW50LgoK U2lnbmVkLW9mZi1ieTogWWFraXIgWWFuZyA8eWtrQHJvY2stY2hpcHMuY29tPgotLS0KIGRyaXZl cnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZHJ2LmMgfCA0OSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9k cnYuaCB8IDE1ICsrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA2NCBpbnNlcnRpb25zKCspCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYuYyBi L2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZHJ2LmMKaW5kZXggODk2ZGEw OS4uNGUwZmViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlw X2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2Ry di5jCkBAIC0zNiw2ICszNiw4IEBACiAjZGVmaW5lIERSSVZFUl9NQUpPUgkxCiAjZGVmaW5lIERS SVZFUl9NSU5PUgkwCiAKK3N0YXRpYyBMSVNUX0hFQUQocm9ja2NoaXBfZHJtX3N1YmRydl9saXN0 KTsKKwogLyoKICAqIEF0dGFjaCBhIChjb21wb25lbnQpIGRldmljZSB0byB0aGUgc2hhcmVkIGRy bSBkbWEgbWFwcGluZyBmcm9tIG1hc3RlciBkcm0KICAqIGRldmljZS4gIFRoaXMgaXMgdXNlZCBi eSB0aGUgVk9QcyB0byBtYXAgR0VNIGJ1ZmZlcnMgdG8gYSBjb21tb24gRE1BCkBAIC0yNTEsNiAr MjUzLDUxIEBAIHN0YXRpYyBpbnQgcm9ja2NoaXBfZHJtX3VubG9hZChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtX2RldikKIAlyZXR1cm4gMDsKIH0KIAoraW50IHJvY2tjaGlwX3JlZ2lzdGVyX3N1YmRy dihzdHJ1Y3QgZHJtX3JvY2tjaGlwX3N1YmRydiAqc3ViZHJ2KQoreworCWlmICghc3ViZHJ2KQor CQlyZXR1cm4gLUVJTlZBTDsKKworCWxpc3RfYWRkX3RhaWwoJnN1YmRydi0+bGlzdCwgJnJvY2tj aGlwX2RybV9zdWJkcnZfbGlzdCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BM KHJvY2tjaGlwX3JlZ2lzdGVyX3N1YmRydik7CisKK2ludCByb2NrY2hpcF91bnJlZ2lzdGVyX3N1 YmRydihzdHJ1Y3QgZHJtX3JvY2tjaGlwX3N1YmRydiAqc3ViZHJ2KQoreworCWlmICghc3ViZHJ2 KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxpc3RfZGVsKCZzdWJkcnYtPmxpc3QpOworCisJcmV0 dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyb2NrY2hpcF91bnJlZ2lzdGVyX3N1YmRydik7 CisKK3N0YXRpYyBpbnQgcm9ja2NoaXBfZHJtX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwg c3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBkcm1fcm9ja2NoaXBfc3ViZHJ2ICpz dWJkcnY7CisJaW50IHJldCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YmRydiwgJnJv Y2tjaGlwX2RybV9zdWJkcnZfbGlzdCwgbGlzdCkgeworCQlyZXQgPSBzdWJkcnYtPm9wZW4oZGV2 LCBzdWJkcnYtPmRldiwgZmlsZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwor CXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByb2NrY2hpcF9kcm1fcHJlY2xvc2Uoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1 Y3QgZHJtX3JvY2tjaGlwX3N1YmRydiAqc3ViZHJ2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShz dWJkcnYsICZyb2NrY2hpcF9kcm1fc3ViZHJ2X2xpc3QsIGxpc3QpCisJCXN1YmRydi0+Y2xvc2Uo ZGV2LCBzdWJkcnYtPmRldiwgZmlsZSk7Cit9CisKIHZvaWQgcm9ja2NoaXBfZHJtX2xhc3RjbG9z ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCByb2NrY2hpcF9kcm1fcHJpdmF0 ZSAqcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0yODEsNiArMzI4LDggQEAgc3RhdGljIHN0 cnVjdCBkcm1fZHJpdmVyIHJvY2tjaGlwX2RybV9kcml2ZXIgPSB7CiAJCQkJICBEUklWRVJfUFJJ TUUgfCBEUklWRVJfQVRPTUlDLAogCS5sb2FkCQkJPSByb2NrY2hpcF9kcm1fbG9hZCwKIAkudW5s b2FkCQkJPSByb2NrY2hpcF9kcm1fdW5sb2FkLAorCS5vcGVuCQkJPSByb2NrY2hpcF9kcm1fb3Bl biwKKwkucHJlY2xvc2UJCT0gcm9ja2NoaXBfZHJtX3ByZWNsb3NlLAogCS5sYXN0Y2xvc2UJCT0g cm9ja2NoaXBfZHJtX2xhc3RjbG9zZSwKIAkuZ2V0X3ZibGFua19jb3VudGVyCT0gZHJtX3ZibGFu a19ub19od19jb3VudGVyLAogCS5lbmFibGVfdmJsYW5rCQk9IHJvY2tjaGlwX2RybV9jcnRjX2Vu YWJsZV92YmxhbmssCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2No aXBfZHJtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYu aAppbmRleCAzNTI5ZjY5Li41ZWE1ZmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvcm9ja2NoaXBfZHJtX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9y b2NrY2hpcF9kcm1fZHJ2LmgKQEAgLTQyLDYgKzQyLDE3IEBAIHN0cnVjdCByb2NrY2hpcF9jcnRj X2Z1bmNzIHsKIAl2b2lkICgqd2FpdF9mb3JfdXBkYXRlKShzdHJ1Y3QgZHJtX2NydGMgKmNydGMp OwogfTsKIAorc3RydWN0IGRybV9yb2NrY2hpcF9zdWJkcnYgeworCXN0cnVjdCBsaXN0X2hlYWQg bGlzdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXY7 CisKKwlpbnQgKCpvcGVuKShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2Rldiwgc3RydWN0IGRldmlj ZSAqZGV2LAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlKTsKKwl2b2lkICgqY2xvc2UpKHN0 cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2LCBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCSAgICAgIHN0 cnVjdCBkcm1fZmlsZSAqZmlsZSk7Cit9OworCiBzdHJ1Y3Qgcm9ja2NoaXBfYXRvbWljX2NvbW1p dCB7CiAJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CiAJc3RydWN0IGRybV9hdG9taWNfc3RhdGUg KnN0YXRlOwpAQCAtNzMsNCArODQsOCBAQCBpbnQgcm9ja2NoaXBfZHJtX2RtYV9hdHRhY2hfZGV2 aWNlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2LAogCQkJCSAgIHN0cnVjdCBkZXZpY2UgKmRl dik7CiB2b2lkIHJvY2tjaGlwX2RybV9kbWFfZGV0YWNoX2RldmljZShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtX2RldiwKIAkJCQkgICAgc3RydWN0IGRldmljZSAqZGV2KTsKKworaW50IHJvY2tjaGlw X3JlZ2lzdGVyX3N1YmRydihzdHJ1Y3QgZHJtX3JvY2tjaGlwX3N1YmRydiAqc3ViZHJ2KTsKK2lu dCByb2NrY2hpcF91bnJlZ2lzdGVyX3N1YmRydihzdHJ1Y3QgZHJtX3JvY2tjaGlwX3N1YmRydiAq c3ViZHJ2KTsKKwogI2VuZGlmIC8qIF9ST0NLQ0hJUF9EUk1fRFJWX0hfICovCi0tIAoxLjkuMQoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: ykk@rock-chips.com (Yakir Yang) Date: Mon, 21 Mar 2016 17:38:03 +0800 Subject: [RFC PATCH v1 1/4] drm: rockchip: add a common subdrv interfaces In-Reply-To: <1458552518-25527-1-git-send-email-ykk@rock-chips.com> References: <1458552518-25527-1-git-send-email-ykk@rock-chips.com> Message-ID: <1458553083-26535-1-git-send-email-ykk@rock-chips.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Introduce a common subdrv register/unregister interfaces, help external driver to hook the drm open/close event. Signed-off-by: Yakir Yang --- drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 49 +++++++++++++++++++++++++++++ drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 15 +++++++++ 2 files changed, 64 insertions(+) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c index 896da09..4e0feb2 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c @@ -36,6 +36,8 @@ #define DRIVER_MAJOR 1 #define DRIVER_MINOR 0 +static LIST_HEAD(rockchip_drm_subdrv_list); + /* * Attach a (component) device to the shared drm dma mapping from master drm * device. This is used by the VOPs to map GEM buffers to a common DMA @@ -251,6 +253,51 @@ static int rockchip_drm_unload(struct drm_device *drm_dev) return 0; } +int rockchip_register_subdrv(struct drm_rockchip_subdrv *subdrv) +{ + if (!subdrv) + return -EINVAL; + + list_add_tail(&subdrv->list, &rockchip_drm_subdrv_list); + + return 0; +} +EXPORT_SYMBOL_GPL(rockchip_register_subdrv); + +int rockchip_unregister_subdrv(struct drm_rockchip_subdrv *subdrv) +{ + if (!subdrv) + return -EINVAL; + + list_del(&subdrv->list); + + return 0; +} +EXPORT_SYMBOL_GPL(rockchip_unregister_subdrv); + +static int rockchip_drm_open(struct drm_device *dev, struct drm_file *file) +{ + struct drm_rockchip_subdrv *subdrv; + int ret = 0; + + list_for_each_entry(subdrv, &rockchip_drm_subdrv_list, list) { + ret = subdrv->open(dev, subdrv->dev, file); + if (ret) + return ret; + } + + return 0; +} + +static void rockchip_drm_preclose(struct drm_device *dev, + struct drm_file *file) +{ + struct drm_rockchip_subdrv *subdrv; + + list_for_each_entry(subdrv, &rockchip_drm_subdrv_list, list) + subdrv->close(dev, subdrv->dev, file); +} + void rockchip_drm_lastclose(struct drm_device *dev) { struct rockchip_drm_private *priv = dev->dev_private; @@ -281,6 +328,8 @@ static struct drm_driver rockchip_drm_driver = { DRIVER_PRIME | DRIVER_ATOMIC, .load = rockchip_drm_load, .unload = rockchip_drm_unload, + .open = rockchip_drm_open, + .preclose = rockchip_drm_preclose, .lastclose = rockchip_drm_lastclose, .get_vblank_counter = drm_vblank_no_hw_counter, .enable_vblank = rockchip_drm_crtc_enable_vblank, diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h index 3529f69..5ea5fcb 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h @@ -42,6 +42,17 @@ struct rockchip_crtc_funcs { void (*wait_for_update)(struct drm_crtc *crtc); }; +struct drm_rockchip_subdrv { + struct list_head list; + struct device *dev; + struct drm_device *drm_dev; + + int (*open)(struct drm_device *drm_dev, struct device *dev, + struct drm_file *file); + void (*close)(struct drm_device *drm_dev, struct device *dev, + struct drm_file *file); +}; + struct rockchip_atomic_commit { struct work_struct work; struct drm_atomic_state *state; @@ -73,4 +84,8 @@ int rockchip_drm_dma_attach_device(struct drm_device *drm_dev, struct device *dev); void rockchip_drm_dma_detach_device(struct drm_device *drm_dev, struct device *dev); + +int rockchip_register_subdrv(struct drm_rockchip_subdrv *subdrv); +int rockchip_unregister_subdrv(struct drm_rockchip_subdrv *subdrv); + #endif /* _ROCKCHIP_DRM_DRV_H_ */ -- 1.9.1