From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: [PATCH v5 2/5] drm/dsi: Use mipi_dsi_device_register_full for DSI device creation Date: Fri, 12 Feb 2016 14:48:31 +0530 Message-ID: <1455268714-28755-3-git-send-email-architt@codeaurora.org> References: <1449751300-2841-1-git-send-email-architt@codeaurora.org> <1455268714-28755-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: <1455268714-28755-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, treding@nvidia.com Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, a.hajda@samsung.com List-Id: linux-arm-msm@vger.kernel.org VXNlIG1pcGlfZHNpX2RldmljZV9yZWdpc3Rlcl9mdWxsIGZvciBkZXZpY2UgY3JlYXRpb24uIFRo aXMgdGFrZXMgaW4KbWlwaV9kc2lfZGV2aWNlX2luZm8gYXMgYSB0ZW1wbGF0ZSB0byBwb3B1bGF0 ZSB0aGUgRFNJIGRldmljZSBpbmZvcm1hdGlvbi4KClRoZSByZWFzb24gdG8gaW50cm9kdWNlIHRo aXMgaXMgdG8gaGF2ZSBhIHdheSB0byBjcmVhdGUgRFNJIGRldmljZXMgbm90CmF2YWlsYWJsZSB2 aWEgRFQuIERyaXZlcnMgdGhhdCB3YW50IHRvIGNyZWF0ZSBhIERTSSBkZXZpY2UgY2FuIHBvcHVs YXRlCm1pcGlfZHNpX2RldmljZV9pbmZvIGFuZCBjYWxsIHRoaXMgZnVuY3Rpb24uIEZvciBEU0kg ZGV2aWNlcyBhdmFpbGFibGUKdmlhIERULCBvZl9taXBpX2RzaV9kZXZpY2VfYWRkIGlzIHVzZWQg YXMgYmVmb3JlLCBidXQgdGhpcyBub3cgY2FsbHMKbWlwaV9kc2lfZGV2aWNlX3JlZ2lzdGVyX2Z1 bGwgaW50ZXJuYWxseS4KClNpZ25lZC1vZmYtYnk6IEFyY2hpdCBUYW5lamEgPGFyY2hpdHRAY29k ZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2RybV9taXBpX2RzaS5jIHwgNjQgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCiBpbmNsdWRlL2RybS9kcm1f bWlwaV9kc2kuaCAgICAgfCAxNiArKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA2MyBpbnNl cnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v ZHJtX21pcGlfZHNpLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21pcGlfZHNpLmMKaW5kZXggNGYy YTcwNC4uNWQ3MjQzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9taXBpX2RzaS5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWlwaV9kc2kuYwpAQCAtMTMzLDggKzEzMyw4IEBA IHN0YXRpYyBpbnQgbWlwaV9kc2lfZGV2aWNlX2FkZChzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpk c2kpCiBzdGF0aWMgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqCiBvZl9taXBpX2RzaV9kZXZpY2Vf YWRkKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUp CiB7Ci0Jc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9 IGhvc3QtPmRldjsKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlX2luZm8gaW5mbyA9IHsgfTsKIAlp bnQgcmV0OwogCXUzMiByZWc7CiAKQEAgLTE0NSwzOSArMTQ1LDY5IEBAIG9mX21pcGlfZHNpX2Rl dmljZV9hZGQoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsIHN0cnVjdCBkZXZpY2Vfbm9kZSAq bm9kZSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCi0JaWYgKHJlZyA+IDMpIHsK LQkJZGV2X2VycihkZXYsICJkZXZpY2Ugbm9kZSAlcyBoYXMgaW52YWxpZCByZWcgcHJvcGVydHk6 ICV1XG4iLAotCQkJbm9kZS0+ZnVsbF9uYW1lLCByZWcpOworCWluZm8uY2hhbm5lbCA9IHJlZzsK KwlpbmZvLm5vZGUgPSBvZl9ub2RlX2dldChub2RlKTsKKworCXJldHVybiBtaXBpX2RzaV9kZXZp Y2VfcmVnaXN0ZXJfZnVsbChob3N0LCAmaW5mbyk7Cit9CisjZWxzZQorc3RhdGljIHN0cnVjdCBt aXBpX2RzaV9kZXZpY2UgKgorb2ZfbWlwaV9kc2lfZGV2aWNlX2FkZChzdHJ1Y3QgbWlwaV9kc2lf aG9zdCAqaG9zdCwgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQoreworCXJldHVybiBFUlJfUFRS KC1FTk9ERVYpOworfQorI2VuZGlmCisKKy8qKgorICogbWlwaV9kc2lfZGV2aWNlX3JlZ2lzdGVy X2Z1bGwgLSBjcmVhdGUgYSBNSVBJIERTSSBkZXZpY2UKKyAqIEBob3N0OiBEU0kgaG9zdCB0byB3 aGljaCB0aGlzIGRldmljZSBpcyBjb25uZWN0ZWQKKyAqIEBpbmZvOiBwb2ludGVyIHRvIHRlbXBs YXRlIGNvbnRhaW5pbmcgRFNJIGRldmljZSBpbmZvcm1hdGlvbgorICoKKyAqIENyZWF0ZSBhIE1J UEkgRFNJIGRldmljZSBieSB1c2luZyB0aGUgZGV2aWNlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5 CisgKiBtaXBpX2RzaV9kZXZpY2VfaW5mbyB0ZW1wbGF0ZQorICoKKyAqIFJldHVybnM6CisgKiBB IHBvaW50ZXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgTUlQSSBEU0kgZGV2aWNlLCBvciwgYSBwb2lu dGVyIGVuY29kZWQKKyAqIHdpdGggYW4gZXJyb3IKKyAqLworc3RydWN0IG1pcGlfZHNpX2Rldmlj ZSAqCittaXBpX2RzaV9kZXZpY2VfcmVnaXN0ZXJfZnVsbChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAq aG9zdCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9kZXZpY2VfaW5mbyAqaW5mbykK K3sKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2k7CisJc3RydWN0IGRldmljZSAqZGV2ID0g aG9zdC0+ZGV2OworCWludCByZXQ7CisKKwlpZiAoIWluZm8pIHsKKwkJZGV2X2VycihkZXYsICJp bnZhbGlkIG1pcGlfZHNpX2RldmljZV9pbmZvIHBvaW50ZXJcbiIpOworCQlyZXR1cm4gRVJSX1BU UigtRUlOVkFMKTsKKwl9CisKKwlpZiAoaW5mby0+Y2hhbm5lbCA+IDMpIHsKKwkJZGV2X2Vycihk ZXYsICJpbnZhbGlkIHZpcnR1YWwgY2hhbm5lbDogJXVcbiIsIGluZm8tPmNoYW5uZWwpOwogCQly ZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAKIAlkc2kgPSBtaXBpX2RzaV9kZXZpY2VfYWxs b2MoaG9zdCk7CiAJaWYgKElTX0VSUihkc2kpKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRv IGFsbG9jYXRlIERTSSBkZXZpY2UgJXM6ICVsZFxuIiwKLQkJCW5vZGUtPmZ1bGxfbmFtZSwgUFRS X0VSUihkc2kpKTsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgRFNJIGRldmlj ZSAlbGRcbiIsCisJCQlQVFJfRVJSKGRzaSkpOwogCQlyZXR1cm4gZHNpOwogCX0KIAotCWRzaS0+ ZGV2Lm9mX25vZGUgPSBvZl9ub2RlX2dldChub2RlKTsKLQlkc2ktPmNoYW5uZWwgPSByZWc7CisJ ZHNpLT5kZXYub2Zfbm9kZSA9IGluZm8tPm5vZGU7CisJZHNpLT5jaGFubmVsID0gaW5mby0+Y2hh bm5lbDsKIAogCXJldCA9IG1pcGlfZHNpX2RldmljZV9hZGQoZHNpKTsKIAlpZiAocmV0KSB7Ci0J CWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCBEU0kgZGV2aWNlICVzOiAlZFxuIiwKLQkJCW5v ZGUtPmZ1bGxfbmFtZSwgcmV0KTsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWRkIERTSSBk ZXZpY2UgJWRcbiIsIHJldCk7CiAJCWtmcmVlKGRzaSk7CiAJCXJldHVybiBFUlJfUFRSKHJldCk7 CiAJfQogCiAJcmV0dXJuIGRzaTsKIH0KLSNlbHNlCi1zdGF0aWMgc3RydWN0IG1pcGlfZHNpX2Rl dmljZSAqCi1vZl9taXBpX2RzaV9kZXZpY2VfYWRkKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0 LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCi17Ci0JcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7 Ci19Ci0jZW5kaWYKK0VYUE9SVF9TWU1CT0wobWlwaV9kc2lfZGV2aWNlX3JlZ2lzdGVyX2Z1bGwp OwogCiBpbnQgbWlwaV9kc2lfaG9zdF9yZWdpc3RlcihzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9z dCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9taXBpX2RzaS5oIGIvaW5jbHVkZS9k cm0vZHJtX21pcGlfZHNpLmgKaW5kZXggMWIzYjFmOC4uY2U1ZWFlNDMgMTAwNjQ0Ci0tLSBhL2lu Y2x1ZGUvZHJtL2RybV9taXBpX2RzaS5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9taXBpX2RzaS5o CkBAIC0xMzksNiArMTM5LDE5IEBAIGVudW0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0IHsKIAlNSVBJ X0RTSV9GTVRfUkdCNTY1LAogfTsKIAorIC8qKgorICogc3RydWN0IG1pcGlfZHNpX2RldmljZV9p bmZvIC0gdGVtcGxhdGUgZm9yIGNyZWF0aW5nIGEgbWlwaV9kc2lfZGV2aWNlCisgKiBAY2hhbm5l bDogRFNJIHZpcnR1YWwgY2hhbm5lbCBhc3NpZ25lZCB0byBwZXJpcGhlcmFsCisgKiBAbm9kZTog cG9pbnRlciB0byBPRiBkZXZpY2Ugbm9kZQorICoKKyAqIFRoaXMgaXMgcG9wdWxhdGVkIGFuZCBw YXNzZWQgdG8gbWlwaV9kc2lfZGV2aWNlX25ldyB0byBjcmVhdGUgYSBuZXcKKyAqIERTSSBkZXZp Y2UKKyAqLworc3RydWN0IG1pcGlfZHNpX2RldmljZV9pbmZvIHsKKwl1MzIgY2hhbm5lbDsKKwlz dHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7Cit9OworCiAvKioKICAqIHN0cnVjdCBtaXBpX2RzaV9k ZXZpY2UgLSBEU0kgcGVyaXBoZXJhbCBkZXZpY2UKICAqIEBob3N0OiBEU0kgaG9zdCBmb3IgdGhp cyBwZXJpcGhlcmFsCkBAIC0xODgsNiArMjAxLDkgQEAgc3RhdGljIGlubGluZSBpbnQgbWlwaV9k c2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChlbnVtIG1pcGlfZHNpX3BpeGVsX2Zvcm1hdCBmbXQpCiAJ cmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKgorbWlwaV9kc2lf ZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCisJCQkgICAg ICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlX2luZm8gKmluZm8pOwogc3RydWN0IG1pcGlf ZHNpX2RldmljZSAqb2ZfZmluZF9taXBpX2RzaV9kZXZpY2VfYnlfbm9kZShzdHJ1Y3QgZGV2aWNl X25vZGUgKm5wKTsKIGludCBtaXBpX2RzaV9hdHRhY2goc3RydWN0IG1pcGlfZHNpX2RldmljZSAq ZHNpKTsKIGludCBtaXBpX2RzaV9kZXRhY2goc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKTsK LS0gClRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0 aGUgQ29kZSBBdXJvcmEgRm9ydW0sCmhvc3RlZCBieSBUaGUgTGludXggRm91bmRhdGlvbgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1h aWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751595AbcBLJSy (ORCPT ); Fri, 12 Feb 2016 04:18:54 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:58288 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750981AbcBLJSu (ORCPT ); Fri, 12 Feb 2016 04:18:50 -0500 From: Archit Taneja To: dri-devel@lists.freedesktop.org, treding@nvidia.com Cc: linux-kernel@vger.kernel.org, a.hajda@samsung.com, airlied@linux.ie, daniel@ffwll.ch, l.stach@pengutronix.de, robh@kernel.org, linux-arm-msm@vger.kernel.org, jani.nikula@linux.intel.com, Archit Taneja Subject: [PATCH v5 2/5] drm/dsi: Use mipi_dsi_device_register_full for DSI device creation Date: Fri, 12 Feb 2016 14:48:31 +0530 Message-Id: <1455268714-28755-3-git-send-email-architt@codeaurora.org> X-Mailer: git-send-email 1.8.2.1 In-Reply-To: <1455268714-28755-1-git-send-email-architt@codeaurora.org> References: <1449751300-2841-1-git-send-email-architt@codeaurora.org> <1455268714-28755-1-git-send-email-architt@codeaurora.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Use mipi_dsi_device_register_full for device creation. This takes in mipi_dsi_device_info as a template to populate the DSI device information. The reason to introduce this is to have a way to create DSI devices not available via DT. Drivers that want to create a DSI device can populate mipi_dsi_device_info and call this function. For DSI devices available via DT, of_mipi_dsi_device_add is used as before, but this now calls mipi_dsi_device_register_full internally. Signed-off-by: Archit Taneja --- drivers/gpu/drm/drm_mipi_dsi.c | 64 +++++++++++++++++++++++++++++++----------- include/drm/drm_mipi_dsi.h | 16 +++++++++++ 2 files changed, 63 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c index 4f2a704..5d7243d 100644 --- a/drivers/gpu/drm/drm_mipi_dsi.c +++ b/drivers/gpu/drm/drm_mipi_dsi.c @@ -133,8 +133,8 @@ static int mipi_dsi_device_add(struct mipi_dsi_device *dsi) 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; @@ -145,39 +145,69 @@ 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); + info.channel = reg; + info.node = of_node_get(node); + + return mipi_dsi_device_register_full(host, &info); +} +#else +static struct mipi_dsi_device * +of_mipi_dsi_device_add(struct mipi_dsi_host *host, struct device_node *node) +{ + return ERR_PTR(-ENODEV); +} +#endif + +/** + * mipi_dsi_device_register_full - create a MIPI DSI device + * @host: DSI host to which this device is connected + * @info: pointer to template containing DSI device information + * + * Create a MIPI DSI device by using the device information provided by + * mipi_dsi_device_info template + * + * Returns: + * A pointer to the newly created MIPI DSI device, or, a pointer encoded + * with an error + */ +struct mipi_dsi_device * +mipi_dsi_device_register_full(struct mipi_dsi_host *host, + const struct mipi_dsi_device_info *info) +{ + struct mipi_dsi_device *dsi; + struct device *dev = host->dev; + int ret; + + if (!info) { + dev_err(dev, "invalid mipi_dsi_device_info pointer\n"); + return ERR_PTR(-EINVAL); + } + + if (info->channel > 3) { + dev_err(dev, "invalid virtual channel: %u\n", info->channel); 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)); + dev_err(dev, "failed to allocate DSI device %ld\n", + PTR_ERR(dsi)); return dsi; } - dsi->dev.of_node = of_node_get(node); - dsi->channel = reg; + dsi->dev.of_node = info->node; + dsi->channel = info->channel; ret = mipi_dsi_device_add(dsi); if (ret) { - dev_err(dev, "failed to add DSI device %s: %d\n", - node->full_name, ret); + dev_err(dev, "failed to add DSI device %d\n", ret); kfree(dsi); return ERR_PTR(ret); } return dsi; } -#else -static struct mipi_dsi_device * -of_mipi_dsi_device_add(struct mipi_dsi_host *host, struct device_node *node) -{ - return ERR_PTR(-ENODEV); -} -#endif +EXPORT_SYMBOL(mipi_dsi_device_register_full); 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 1b3b1f8..ce5eae43 100644 --- a/include/drm/drm_mipi_dsi.h +++ b/include/drm/drm_mipi_dsi.h @@ -139,6 +139,19 @@ enum mipi_dsi_pixel_format { MIPI_DSI_FMT_RGB565, }; + /** + * struct mipi_dsi_device_info - template for creating a mipi_dsi_device + * @channel: 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 channel; + struct device_node *node; +}; + /** * struct mipi_dsi_device - DSI peripheral device * @host: DSI host for this peripheral @@ -188,6 +201,9 @@ static inline int mipi_dsi_pixel_format_to_bpp(enum mipi_dsi_pixel_format fmt) return -EINVAL; } +struct mipi_dsi_device * +mipi_dsi_device_register_full(struct mipi_dsi_host *host, + const struct mipi_dsi_device_info *info); struct mipi_dsi_device *of_find_mipi_dsi_device_by_node(struct device_node *np); int mipi_dsi_attach(struct mipi_dsi_device *dsi); int mipi_dsi_detach(struct mipi_dsi_device *dsi); -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation