From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: [PATCH v3 1/5] drm/dsi: Refactor device creation Date: Mon, 30 Nov 2015 17:31:28 +0530 Message-ID: <1448884892-7731-2-git-send-email-architt@codeaurora.org> References: <1444123482-25579-1-git-send-email-architt@codeaurora.org> <1448884892-7731-1-git-send-email-architt@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1448884892-7731-1-git-send-email-architt@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, a.hajda@samsung.com Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, treding@nvidia.com List-Id: linux-arm-msm@vger.kernel.org U2ltcGxpZnkgdGhlIG1pcGkgZHNpIGRldmljZSBjcmVhdGlvbiBwcm9jZXNzLiBkZXZpY2VfaW5p dGlhbGl6ZSBhbmQKZGV2aWNlX2FkZCBkb24ndCBuZWVkIHRvIGJlIGNhbGxlZCBzZXBhcmF0ZWx5 IHdoZW4gY3JlYXRpbmcKbWlwaV9kc2lfZGV2aWNlJ3MuIFVzZSBkZXZpY2VfcmVnaXN0ZXIgaW5z dGVhZCB0byBzaW1wbGlmeSB0aGluZ3MuCgpDcmVhdGUgYSBoZWxwZXIgZnVuY3Rpb24gbWlwaV9k c2lfZGV2aWNlX25ldyB3aGljaCB0YWtlcyBpbiBzdHJ1Y3QKbWlwaV9kc2lfZGV2aWNlX2luZm8g YW5kIG1pcGlfZHNpX2hvc3QuIEl0IGNsdWJzIHRoZSBmdW5jdGlvbnMKbWlwaV9kc2lfZGV2aWNl X2FsbG9jIGFuZCBtaXBpX2RzaV9kZXZpY2VfYWRkIGludG8gb25lLgoKbWlwaV9kc2lfZGV2aWNl X2luZm8gYWN0cyBhcyBhIHRlbXBsYXRlIHRvIHBvcHVsYXRlIHRoZSBkc2kgZGV2aWNlCmluZm9y bWF0aW9uLiBUaGlzIGlzIHBvcHVsYXRlZCBieSBvZl9taXBpX2RzaV9kZXZpY2VfYWRkIGFuZCBw YXNzZWQgdG8KbWlwaV9kc2lfZGV2aWNlX25ldy4KCkxhdGVyIG9uLCB3ZSdsbCBwcm92aWRlIG1p cGlfZHNpX2RldmljZV9uZXcgYXMgYSBzdGFuZGFsb25lIHdheSB0byBjcmVhdGUKYSBkc2kgZGV2 aWNlIG5vdCBhdmFpbGFibGUgdmlhIERULgoKVGhlIG5ldyBkZXZpY2UgY3JlYXRpb24gcHJvY2Vz cyB0cmllcyB0byBjbG9zZWx5IGZvbGxvdyB3aGF0J3MgYmVlbiBkb25lCmluIGkyY19uZXdfZGV2 aWNlIGluIGkyYy1jb3JlLgoKUmV2aWV3ZWQtYnk6IEFuZHJ6ZWogSGFqZGEgPGEuaGFqZGFAc2Ft c3VuZy5jb20+ClNpZ25lZC1vZmYtYnk6IEFyY2hpdCBUYW5lamEgPGFyY2hpdHRAY29kZWF1cm9y YS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2RybV9taXBpX2RzaS5jIHwgNjEgKysrKysrKysr KysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBpbmNsdWRlL2RybS9kcm1fbWlwaV9k c2kuaCAgICAgfCAxNSArKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA0MCBpbnNlcnRpb25z KCspLCAzNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21p cGlfZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21pcGlfZHNpLmMKaW5kZXggMmQ1Y2E4ZWUu LjgyYmNkY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWlwaV9kc2kuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX21pcGlfZHNpLmMKQEAgLTEwMiw5ICsxMDIsMTggQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSBtaXBpX2RzaV9kZXZpY2VfdHlwZSA9IHsKIAku cmVsZWFzZSA9IG1pcGlfZHNpX2Rldl9yZWxlYXNlLAogfTsKIAotc3RhdGljIHN0cnVjdCBtaXBp X2RzaV9kZXZpY2UgKm1pcGlfZHNpX2RldmljZV9hbGxvYyhzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAq aG9zdCkKK3N0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKm1pcGlfZHNpX2RldmljZV9uZXcoc3RydWN0 IG1pcGlfZHNpX2hvc3QgKmhvc3QsCisJCQkJCSAgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlX2lu Zm8gKmluZm8pCiB7CiAJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOworCXN0cnVjdCBkZXZp Y2UgKmRldiA9IGhvc3QtPmRldjsKKwlpbnQgcmV0OworCisJaWYgKGluZm8tPnJlZyA+IDMpIHsK KwkJZGV2X2VycihkZXYsICJkZXZpY2Ugbm9kZSBoYXMgaW52YWxpZCByZWcgcHJvcGVydHk6ICV1 XG4iLAorCQkJaW5mby0+cmVnKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQogCiAJ ZHNpID0ga3phbGxvYyhzaXplb2YoKmRzaSksIEdGUF9LRVJORUwpOwogCWlmICghZHNpKQpAQCAt MTE0LDI2ICsxMjMsMjcgQEAgc3RhdGljIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKm1pcGlfZHNp X2RldmljZV9hbGxvYyhzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCkKIAlkc2ktPmRldi5idXMg PSAmbWlwaV9kc2lfYnVzX3R5cGU7CiAJZHNpLT5kZXYucGFyZW50ID0gaG9zdC0+ZGV2OwogCWRz aS0+ZGV2LnR5cGUgPSAmbWlwaV9kc2lfZGV2aWNlX3R5cGU7CisJZHNpLT5kZXYub2Zfbm9kZSA9 IGluZm8tPm5vZGU7CisJZHNpLT5jaGFubmVsID0gaW5mby0+cmVnOwogCi0JZGV2aWNlX2luaXRp YWxpemUoJmRzaS0+ZGV2KTsKLQotCXJldHVybiBkc2k7Ci19Ci0KLXN0YXRpYyBpbnQgbWlwaV9k c2lfZGV2aWNlX2FkZChzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kpCi17Ci0Jc3RydWN0IG1p cGlfZHNpX2hvc3QgKmhvc3QgPSBkc2ktPmhvc3Q7CisJZGV2X3NldF9uYW1lKCZkc2ktPmRldiwg IiVzLiVkIiwgZGV2X25hbWUoaG9zdC0+ZGV2KSwgaW5mby0+cmVnKTsKIAotCWRldl9zZXRfbmFt ZSgmZHNpLT5kZXYsICIlcy4lZCIsIGRldl9uYW1lKGhvc3QtPmRldiksICBkc2ktPmNoYW5uZWwp OworCXJldCA9IGRldmljZV9yZWdpc3RlcigmZHNpLT5kZXYpOworCWlmIChyZXQpIHsKKwkJZGV2 X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgZGV2aWNlOiAlZFxuIiwgcmV0KTsKKwkJa2Zy ZWUoZHNpKTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CiAKLQlyZXR1cm4gZGV2aWNlX2Fk ZCgmZHNpLT5kZXYpOworCXJldHVybiBkc2k7CiB9CitFWFBPUlRfU1lNQk9MKG1pcGlfZHNpX2Rl dmljZV9uZXcpOwogCiBzdGF0aWMgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqCiBvZl9taXBpX2Rz aV9kZXZpY2VfYWRkKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LCBzdHJ1Y3QgZGV2aWNlX25v ZGUgKm5vZGUpCiB7Ci0Jc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOwogCXN0cnVjdCBkZXZp Y2UgKmRldiA9IGhvc3QtPmRldjsKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlX2luZm8gaW5mbyA9 IHsgfTsKIAlpbnQgcmV0OwogCXUzMiByZWc7CiAKQEAgLTE0NCwzMSArMTU0LDEwIEBAIG9mX21p cGlfZHNpX2RldmljZV9hZGQoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsIHN0cnVjdCBkZXZp Y2Vfbm9kZSAqbm9kZSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCi0JaWYgKHJl ZyA+IDMpIHsKLQkJZGV2X2VycihkZXYsICJkZXZpY2Ugbm9kZSAlcyBoYXMgaW52YWxpZCByZWcg cHJvcGVydHk6ICV1XG4iLAotCQkJbm9kZS0+ZnVsbF9uYW1lLCByZWcpOwotCQlyZXR1cm4gRVJS X1BUUigtRUlOVkFMKTsKLQl9Ci0KLQlkc2kgPSBtaXBpX2RzaV9kZXZpY2VfYWxsb2MoaG9zdCk7 Ci0JaWYgKElTX0VSUihkc2kpKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRl IERTSSBkZXZpY2UgJXM6ICVsZFxuIiwKLQkJCW5vZGUtPmZ1bGxfbmFtZSwgUFRSX0VSUihkc2kp KTsKLQkJcmV0dXJuIGRzaTsKLQl9Ci0KLQlkc2ktPmRldi5vZl9ub2RlID0gb2Zfbm9kZV9nZXQo bm9kZSk7Ci0JZHNpLT5jaGFubmVsID0gcmVnOworCWluZm8ucmVnID0gcmVnOworCWluZm8ubm9k ZSA9IG9mX25vZGVfZ2V0KG5vZGUpOwogCi0JcmV0ID0gbWlwaV9kc2lfZGV2aWNlX2FkZChkc2kp OwotCWlmIChyZXQpIHsKLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWRkIERTSSBkZXZpY2Ug JXM6ICVkXG4iLAotCQkJbm9kZS0+ZnVsbF9uYW1lLCByZXQpOwotCQlrZnJlZShkc2kpOwotCQly ZXR1cm4gRVJSX1BUUihyZXQpOwotCX0KLQotCXJldHVybiBkc2k7CisJcmV0dXJuIG1pcGlfZHNp X2RldmljZV9uZXcoaG9zdCwgJmluZm8pOwogfQogCiBpbnQgbWlwaV9kc2lfaG9zdF9yZWdpc3Rl cihzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2Ry bV9taXBpX2RzaS5oIGIvaW5jbHVkZS9kcm0vZHJtX21pcGlfZHNpLmgKaW5kZXggZjFkOGQwZC4u OTBmNGYzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX21pcGlfZHNpLmgKKysrIGIvaW5j bHVkZS9kcm0vZHJtX21pcGlfZHNpLmgKQEAgLTE0MCw2ICsxNDAsMTkgQEAgZW51bSBtaXBpX2Rz aV9waXhlbF9mb3JtYXQgewogfTsKIAogLyoqCisgKiBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlX2lu Zm8gLSB0ZW1wbGF0ZSBmb3IgY3JlYXRpbmcgYSBtaXBpX2RzaV9kZXZpY2UKKyAqIEByZWc6IERT SSB2aXJ0dWFsIGNoYW5uZWwgYXNzaWduZWQgdG8gcGVyaXBoZXJhbAorICogQG5vZGU6IHBvaW50 ZXIgdG8gT0YgZGV2aWNlIG5vZGUKKyAqCisgKiBUaGlzIGlzIHBvcHVsYXRlZCBhbmQgcGFzc2Vk IHRvIG1pcGlfZHNpX2RldmljZV9uZXcgdG8gY3JlYXRlIGEgbmV3CisgKiBEU0kgZGV2aWNlCisg Ki8KK3N0cnVjdCBtaXBpX2RzaV9kZXZpY2VfaW5mbyB7CisJdTMyIHJlZzsKKwlzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5vZGU7Cit9OworCisvKioKICAqIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgLSBE U0kgcGVyaXBoZXJhbCBkZXZpY2UKICAqIEBob3N0OiBEU0kgaG9zdCBmb3IgdGhpcyBwZXJpcGhl cmFsCiAgKiBAZGV2OiBkcml2ZXIgbW9kZWwgZGV2aWNlIG5vZGUgZm9yIHRoaXMgcGVyaXBoZXJh bApAQCAtMTc0LDYgKzE4Nyw4IEBAIHNzaXplX3QgbWlwaV9kc2lfZ2VuZXJpY193cml0ZShzdHJ1 Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2ksIGNvbnN0IHZvaWQgKnBheWxvYWQsCiBzc2l6ZV90IG1p cGlfZHNpX2dlbmVyaWNfcmVhZChzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2ksIGNvbnN0IHZv aWQgKnBhcmFtcywKIAkJCSAgICAgIHNpemVfdCBudW1fcGFyYW1zLCB2b2lkICpkYXRhLCBzaXpl X3Qgc2l6ZSk7CiAKK3N0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKm1pcGlfZHNpX2RldmljZV9uZXco c3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCisJCQkJCSAgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2 aWNlX2luZm8gKmluZm8pOwogLyoqCiAgKiBlbnVtIG1pcGlfZHNpX2Rjc190ZWFyX21vZGUgLSBU ZWFyaW5nIEVmZmVjdCBPdXRwdXQgTGluZSBtb2RlCiAgKiBATUlQSV9EU0lfRENTX1RFQVJfTU9E RV9WQkxBTks6IHRoZSBURSBvdXRwdXQgbGluZSBjb25zaXN0cyBvZiBWLUJsYW5raW5nCi0tIApU aGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENv ZGUgQXVyb3JhIEZvcnVtLApob3N0ZWQgYnkgVGhlIExpbnV4IEZvdW5kYXRpb24KCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753880AbbK3MBr (ORCPT ); Mon, 30 Nov 2015 07:01:47 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:60154 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753512AbbK3MBo (ORCPT ); Mon, 30 Nov 2015 07:01:44 -0500 From: Archit Taneja To: dri-devel@lists.freedesktop.org, a.hajda@samsung.com Cc: linux-kernel@vger.kernel.org, airlied@linux.ie, daniel@ffwll.ch, treding@nvidia.com, l.stach@pengutronix.de, robh@kernel.org, linux-arm-msm@vger.kernel.org, jani.nikula@linux.intel.com, Archit Taneja Subject: [PATCH v3 1/5] drm/dsi: Refactor device creation Date: Mon, 30 Nov 2015 17:31:28 +0530 Message-Id: <1448884892-7731-2-git-send-email-architt@codeaurora.org> X-Mailer: git-send-email 1.8.2.1 In-Reply-To: <1448884892-7731-1-git-send-email-architt@codeaurora.org> References: <1444123482-25579-1-git-send-email-architt@codeaurora.org> <1448884892-7731-1-git-send-email-architt@codeaurora.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Simplify the mipi dsi device creation process. device_initialize and device_add don't need to be called separately when creating mipi_dsi_device's. Use device_register instead to simplify things. Create a helper function mipi_dsi_device_new which takes in struct mipi_dsi_device_info and mipi_dsi_host. It clubs the functions mipi_dsi_device_alloc and mipi_dsi_device_add into one. mipi_dsi_device_info acts as a template to populate the dsi device information. This is populated by of_mipi_dsi_device_add and passed to mipi_dsi_device_new. Later on, we'll provide mipi_dsi_device_new as a standalone way to create a dsi device not available via DT. The new device creation process tries to closely follow what's been done in i2c_new_device in i2c-core. Reviewed-by: Andrzej Hajda Signed-off-by: Archit Taneja --- drivers/gpu/drm/drm_mipi_dsi.c | 61 +++++++++++++++++------------------------- include/drm/drm_mipi_dsi.h | 15 +++++++++++ 2 files changed, 40 insertions(+), 36 deletions(-) diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c index 2d5ca8ee..82bcdcd 100644 --- a/drivers/gpu/drm/drm_mipi_dsi.c +++ b/drivers/gpu/drm/drm_mipi_dsi.c @@ -102,9 +102,18 @@ static const struct device_type mipi_dsi_device_type = { .release = mipi_dsi_dev_release, }; -static struct mipi_dsi_device *mipi_dsi_device_alloc(struct mipi_dsi_host *host) +struct mipi_dsi_device *mipi_dsi_device_new(struct mipi_dsi_host *host, + struct mipi_dsi_device_info *info) { struct mipi_dsi_device *dsi; + struct device *dev = host->dev; + int ret; + + if (info->reg > 3) { + dev_err(dev, "device node has invalid reg property: %u\n", + info->reg); + return ERR_PTR(-EINVAL); + } dsi = kzalloc(sizeof(*dsi), GFP_KERNEL); if (!dsi) @@ -114,26 +123,27 @@ static struct mipi_dsi_device *mipi_dsi_device_alloc(struct mipi_dsi_host *host) dsi->dev.bus = &mipi_dsi_bus_type; dsi->dev.parent = host->dev; dsi->dev.type = &mipi_dsi_device_type; + dsi->dev.of_node = info->node; + dsi->channel = info->reg; - device_initialize(&dsi->dev); - - return dsi; -} - -static int mipi_dsi_device_add(struct mipi_dsi_device *dsi) -{ - struct mipi_dsi_host *host = dsi->host; + dev_set_name(&dsi->dev, "%s.%d", dev_name(host->dev), info->reg); - dev_set_name(&dsi->dev, "%s.%d", dev_name(host->dev), dsi->channel); + ret = device_register(&dsi->dev); + if (ret) { + dev_err(dev, "failed to register device: %d\n", ret); + kfree(dsi); + return ERR_PTR(ret); + } - return device_add(&dsi->dev); + return dsi; } +EXPORT_SYMBOL(mipi_dsi_device_new); static struct mipi_dsi_device * of_mipi_dsi_device_add(struct mipi_dsi_host *host, struct device_node *node) { - struct mipi_dsi_device *dsi; struct device *dev = host->dev; + struct mipi_dsi_device_info info = { }; int ret; u32 reg; @@ -144,31 +154,10 @@ of_mipi_dsi_device_add(struct mipi_dsi_host *host, struct device_node *node) return ERR_PTR(-EINVAL); } - if (reg > 3) { - dev_err(dev, "device node %s has invalid reg property: %u\n", - node->full_name, reg); - return ERR_PTR(-EINVAL); - } - - dsi = mipi_dsi_device_alloc(host); - if (IS_ERR(dsi)) { - dev_err(dev, "failed to allocate DSI device %s: %ld\n", - node->full_name, PTR_ERR(dsi)); - return dsi; - } - - dsi->dev.of_node = of_node_get(node); - dsi->channel = reg; + info.reg = reg; + info.node = of_node_get(node); - ret = mipi_dsi_device_add(dsi); - if (ret) { - dev_err(dev, "failed to add DSI device %s: %d\n", - node->full_name, ret); - kfree(dsi); - return ERR_PTR(ret); - } - - return dsi; + return mipi_dsi_device_new(host, &info); } int mipi_dsi_host_register(struct mipi_dsi_host *host) diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h index f1d8d0d..90f4f3c 100644 --- a/include/drm/drm_mipi_dsi.h +++ b/include/drm/drm_mipi_dsi.h @@ -140,6 +140,19 @@ enum mipi_dsi_pixel_format { }; /** + * struct mipi_dsi_device_info - template for creating a mipi_dsi_device + * @reg: DSI virtual channel assigned to peripheral + * @node: pointer to OF device node + * + * This is populated and passed to mipi_dsi_device_new to create a new + * DSI device + */ +struct mipi_dsi_device_info { + u32 reg; + struct device_node *node; +}; + +/** * struct mipi_dsi_device - DSI peripheral device * @host: DSI host for this peripheral * @dev: driver model device node for this peripheral @@ -174,6 +187,8 @@ ssize_t mipi_dsi_generic_write(struct mipi_dsi_device *dsi, const void *payload, ssize_t mipi_dsi_generic_read(struct mipi_dsi_device *dsi, const void *params, size_t num_params, void *data, size_t size); +struct mipi_dsi_device *mipi_dsi_device_new(struct mipi_dsi_host *host, + struct mipi_dsi_device_info *info); /** * enum mipi_dsi_dcs_tear_mode - Tearing Effect Output Line mode * @MIPI_DSI_DCS_TEAR_MODE_VBLANK: the TE output line consists of V-Blanking -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation