From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: [RFC v2 1/5] drm/dsi: Refactor device creation Date: Tue, 6 Oct 2015 14:54:38 +0530 Message-ID: <1444123482-25579-2-git-send-email-architt@codeaurora.org> References: <1435641851-27295-1-git-send-email-architt@codeaurora.org> <1444123482-25579-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: <1444123482-25579-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 aWNlIGluIGkyYy1jb3JlLgoKU2lnbmVkLW9mZi1ieTogQXJjaGl0IFRhbmVqYSA8YXJjaGl0dEBj b2RlYXVyb3JhLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vZHJtX21pcGlfZHNpLmMgfCA2MSAr KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGluY2x1ZGUvZHJtL2Ry bV9taXBpX2RzaS5oICAgICB8IDE1ICsrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDQwIGlu c2VydGlvbnMoKyksIDM2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fbWlwaV9kc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWlwaV9kc2kuYwppbmRleCAy ZDVjYThlZS4uMjQ1ZWNmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9taXBpX2Rz aS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWlwaV9kc2kuYwpAQCAtMTAyLDkgKzEwMiwx OCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIG1pcGlfZHNpX2RldmljZV90eXBl ID0gewogCS5yZWxlYXNlID0gbWlwaV9kc2lfZGV2X3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3Ry dWN0IG1pcGlfZHNpX2RldmljZSAqbWlwaV9kc2lfZGV2aWNlX2FsbG9jKHN0cnVjdCBtaXBpX2Rz aV9ob3N0ICpob3N0KQorc3RydWN0IG1pcGlfZHNpX2RldmljZSAqbWlwaV9kc2lfZGV2aWNlX25l dyhzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCQkJICAgIHN0cnVjdCBtaXBpX2RzaV9k ZXZpY2VfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2k7CisJc3Ry dWN0IGRldmljZSAqZGV2ID0gaG9zdC0+ZGV2OworCWludCByOworCisJaWYgKGluZm8tPnJlZyA+ IDMpIHsKKwkJZGV2X2VycihkZXYsICJkZXZpY2Ugbm9kZSBoYXMgaW52YWxpZCByZWcgcHJvcGVy dHk6ICV1XG4iLAorCQkJaW5mby0+cmVnKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJ fQogCiAJZHNpID0ga3phbGxvYyhzaXplb2YoKmRzaSksIEdGUF9LRVJORUwpOwogCWlmICghZHNp KQpAQCAtMTE0LDI2ICsxMjMsMjcgQEAgc3RhdGljIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKm1p cGlfZHNpX2RldmljZV9hbGxvYyhzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCkKIAlkc2ktPmRl di5idXMgPSAmbWlwaV9kc2lfYnVzX3R5cGU7CiAJZHNpLT5kZXYucGFyZW50ID0gaG9zdC0+ZGV2 OwogCWRzaS0+ZGV2LnR5cGUgPSAmbWlwaV9kc2lfZGV2aWNlX3R5cGU7CisJZHNpLT5kZXYub2Zf bm9kZSA9IGluZm8tPm5vZGU7CisJZHNpLT5jaGFubmVsID0gaW5mby0+cmVnOwogCi0JZGV2aWNl X2luaXRpYWxpemUoJmRzaS0+ZGV2KTsKLQotCXJldHVybiBkc2k7Ci19Ci0KLXN0YXRpYyBpbnQg bWlwaV9kc2lfZGV2aWNlX2FkZChzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kpCi17Ci0Jc3Ry dWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QgPSBkc2ktPmhvc3Q7CisJZGV2X3NldF9uYW1lKCZkc2kt PmRldiwgIiVzLiVkIiwgZGV2X25hbWUoaG9zdC0+ZGV2KSwgaW5mby0+cmVnKTsKIAotCWRldl9z ZXRfbmFtZSgmZHNpLT5kZXYsICIlcy4lZCIsIGRldl9uYW1lKGhvc3QtPmRldiksICBkc2ktPmNo YW5uZWwpOworCXIgPSBkZXZpY2VfcmVnaXN0ZXIoJmRzaS0+ZGV2KTsKKwlpZiAocikgeworCQlk ZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBkZXZpY2U6ICVkXG4iLCByKTsKKwkJa2Zy ZWUoZHNpKTsKKwkJcmV0dXJuIEVSUl9QVFIocik7CisJfQogCi0JcmV0dXJuIGRldmljZV9hZGQo JmRzaS0+ZGV2KTsKKwlyZXR1cm4gZHNpOwogfQorRVhQT1JUX1NZTUJPTChtaXBpX2RzaV9kZXZp Y2VfbmV3KTsKIAogc3RhdGljIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKgogb2ZfbWlwaV9kc2lf ZGV2aWNlX2FkZChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwgc3RydWN0IGRldmljZV9ub2Rl ICpub2RlKQogewotCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaTsKIAlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSBob3N0LT5kZXY7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZV9pbmZvIGluZm8gPSB7 IH07CiAJaW50IHJldDsKIAl1MzIgcmVnOwogCkBAIC0xNDQsMzEgKzE1NCwxMCBAQCBvZl9taXBp X2RzaV9kZXZpY2VfYWRkKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LCBzdHJ1Y3QgZGV2aWNl X25vZGUgKm5vZGUpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIAotCWlmIChyZWcg PiAzKSB7Ci0JCWRldl9lcnIoZGV2LCAiZGV2aWNlIG5vZGUgJXMgaGFzIGludmFsaWQgcmVnIHBy b3BlcnR5OiAldVxuIiwKLQkJCW5vZGUtPmZ1bGxfbmFtZSwgcmVnKTsKLQkJcmV0dXJuIEVSUl9Q VFIoLUVJTlZBTCk7Ci0JfQotCi0JZHNpID0gbWlwaV9kc2lfZGV2aWNlX2FsbG9jKGhvc3QpOwot CWlmIChJU19FUlIoZHNpKSkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBE U0kgZGV2aWNlICVzOiAlbGRcbiIsCi0JCQlub2RlLT5mdWxsX25hbWUsIFBUUl9FUlIoZHNpKSk7 Ci0JCXJldHVybiBkc2k7Ci0JfQotCi0JZHNpLT5kZXYub2Zfbm9kZSA9IG9mX25vZGVfZ2V0KG5v ZGUpOwotCWRzaS0+Y2hhbm5lbCA9IHJlZzsKKwlpbmZvLnJlZyA9IHJlZzsKKwlpbmZvLm5vZGUg PSBvZl9ub2RlX2dldChub2RlKTsKIAotCXJldCA9IG1pcGlfZHNpX2RldmljZV9hZGQoZHNpKTsK LQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCBEU0kgZGV2aWNlICVz OiAlZFxuIiwKLQkJCW5vZGUtPmZ1bGxfbmFtZSwgcmV0KTsKLQkJa2ZyZWUoZHNpKTsKLQkJcmV0 dXJuIEVSUl9QVFIocmV0KTsKLQl9Ci0KLQlyZXR1cm4gZHNpOworCXJldHVybiBtaXBpX2RzaV9k ZXZpY2VfbmV3KGhvc3QsICZpbmZvKTsKIH0KIAogaW50IG1pcGlfZHNpX2hvc3RfcmVnaXN0ZXIo c3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1f bWlwaV9kc2kuaCBiL2luY2x1ZGUvZHJtL2RybV9taXBpX2RzaS5oCmluZGV4IGYxZDhkMGQuLjkw ZjRmM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9taXBpX2RzaS5oCisrKyBiL2luY2x1 ZGUvZHJtL2RybV9taXBpX2RzaS5oCkBAIC0xNDAsNiArMTQwLDE5IEBAIGVudW0gbWlwaV9kc2lf cGl4ZWxfZm9ybWF0IHsKIH07CiAKIC8qKgorICogc3RydWN0IG1pcGlfZHNpX2RldmljZV9pbmZv IC0gdGVtcGxhdGUgZm9yIGNyZWF0aW5nIGEgbWlwaV9kc2lfZGV2aWNlCisgKiBAcmVnOiBEU0kg dmlydHVhbCBjaGFubmVsIGFzc2lnbmVkIHRvIHBlcmlwaGVyYWwKKyAqIEBub2RlOiBwb2ludGVy IHRvIE9GIGRldmljZSBub2RlCisgKgorICogVGhpcyBpcyBwb3B1bGF0ZWQgYW5kIHBhc3NlZCB0 byBtaXBpX2RzaV9kZXZpY2VfbmV3IHRvIGNyZWF0ZSBhIG5ldworICogRFNJIGRldmljZQorICov CitzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlX2luZm8geworCXUzMiByZWc7CisJc3RydWN0IGRldmlj ZV9ub2RlICpub2RlOworfTsKKworLyoqCiAgKiBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlIC0gRFNJ IHBlcmlwaGVyYWwgZGV2aWNlCiAgKiBAaG9zdDogRFNJIGhvc3QgZm9yIHRoaXMgcGVyaXBoZXJh bAogICogQGRldjogZHJpdmVyIG1vZGVsIGRldmljZSBub2RlIGZvciB0aGlzIHBlcmlwaGVyYWwK QEAgLTE3NCw2ICsxODcsOCBAQCBzc2l6ZV90IG1pcGlfZHNpX2dlbmVyaWNfd3JpdGUoc3RydWN0 IG1pcGlfZHNpX2RldmljZSAqZHNpLCBjb25zdCB2b2lkICpwYXlsb2FkLAogc3NpemVfdCBtaXBp X2RzaV9nZW5lcmljX3JlYWQoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpLCBjb25zdCB2b2lk ICpwYXJhbXMsCiAJCQkgICAgICBzaXplX3QgbnVtX3BhcmFtcywgdm9pZCAqZGF0YSwgc2l6ZV90 IHNpemUpOwogCitzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICptaXBpX2RzaV9kZXZpY2VfbmV3KHN0 cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJCQkgICAgc3RydWN0IG1pcGlfZHNpX2Rldmlj ZV9pbmZvICppbmZvKTsKIC8qKgogICogZW51bSBtaXBpX2RzaV9kY3NfdGVhcl9tb2RlIC0gVGVh cmluZyBFZmZlY3QgT3V0cHV0IExpbmUgbW9kZQogICogQE1JUElfRFNJX0RDU19URUFSX01PREVf VkJMQU5LOiB0aGUgVEUgb3V0cHV0IGxpbmUgY29uc2lzdHMgb2YgVi1CbGFua2luZwotLSAKVGhl IFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2Rl IEF1cm9yYSBGb3J1bSwKaG9zdGVkIGJ5IFRoZSBMaW51eCBGb3VuZGF0aW9uCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBs aXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752727AbbJFJZB (ORCPT ); Tue, 6 Oct 2015 05:25:01 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:49365 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752599AbbJFJYy (ORCPT ); Tue, 6 Oct 2015 05:24:54 -0400 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: [RFC v2 1/5] drm/dsi: Refactor device creation Date: Tue, 6 Oct 2015 14:54:38 +0530 Message-Id: <1444123482-25579-2-git-send-email-architt@codeaurora.org> X-Mailer: git-send-email 1.8.2.1 In-Reply-To: <1444123482-25579-1-git-send-email-architt@codeaurora.org> References: <1435641851-27295-1-git-send-email-architt@codeaurora.org> <1444123482-25579-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. 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..245ecfe 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 r; + + 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); + r = device_register(&dsi->dev); + if (r) { + dev_err(dev, "failed to register device: %d\n", r); + kfree(dsi); + return ERR_PTR(r); + } - 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