From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: [RFC 1/2] drm/dsi: Create dummy DSI devices Date: Tue, 30 Jun 2015 10:54:10 +0530 Message-ID: <1435641851-27295-2-git-send-email-architt@codeaurora.org> References: <1435641851-27295-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: <1435641851-27295-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 Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, a.hajda@samsung.com, treding@nvidia.com List-Id: linux-arm-msm@vger.kernel.org V2UgY2FuIGhhdmUgZGV2aWNlcyB3aGVyZSB0aGUgZGF0YSBidXMgaXMgTUlQSSBEU0ksIGJ1dCB0 aGUgY29udHJvbCBidXMKaXMgc29tZXRoaW5nIGVsc2UgKGkyYywgc3BpIGV0YykuIEEgdHlwaWNh bCBleGFtcGxlIGlzIGkyYyBjb250cm9sbGVkCmVuY29kZXIgYnJpZGdlIGNoaXBzLgoKU3VjaCBk ZXZpY2VzIHRvbyByZXF1aXJlIHBhc3NpbmcgRFNJIHNwZWNpZmljIHBhcmFtZXRlcnMgKG51bWJl ciBvZiBkYXRhCmxhbmVzLCBEU0kgbW9kZSBmbGFncywgY29sb3IgZm9ybWF0IGV0YykgdG8gdGhl aXIgRFNJIGhvc3QuIEZvciBhIGRldmljZQp0aGF0IGlzbid0ICdtaXBpX2RzaV9kZXZpY2UnLCB0 aGVyZSBpcyBubyB3YXkgb2YgcGFzc2luZyBzdWNoIHBhcmFtZXRlcnMuCgpQcm92aWRlIHRoZSBv cHRpb24gb2YgY3JlYXRpbmcgYSBkdW1teSBEU0kgZGV2aWNlLiBUaGUgbWFpbiBwdXJwb3NlIG9m CnRoaXMgd291bGQgYmUgdG8gYXR0YWNoIHRvIGEgRFNJIGhvc3QgYnkgY2FsbGluZyBtaXBpX2Rz aV9hdHRhY2gsIGFuZApwYXNzIERTSSBwYXJhbXMuCgpDcmVhdGUgbWlwaV9kc2lfbmV3X2R1bW15 IGZvciBjcmVhdGluZyBhIGR1bW15IGRzaSBkZXZpY2UuIFRoZSBkcml2ZXIKY2FsbGluZyB0aGlz IG5lZWRzIHRvIGJlIGF3YXJlIG9mIHRoZSBtaXBpX2RzaV9ob3N0IGl0IHdhbnRzIHRvIGF0dGFj aAp0bywgYW5kIGFsc28gdGhlIERTSSB2aXJ0dWFsIGNoYW5uZWwgdGhlIERTSSBkZXZpY2UgaW50 ZW5kcyB0byB1c2UuCgpTaWduZWQtb2ZmLWJ5OiBBcmNoaXQgVGFuZWphIDxhcmNoaXR0QGNvZGVh dXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9kcm1fbWlwaV9kc2kuYyB8IDc4ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQogaW5jbHVkZS9kcm0vZHJtX21p cGlfZHNpLmggICAgIHwgIDIgKysKIDIgZmlsZXMgY2hhbmdlZCwgNzggaW5zZXJ0aW9ucygrKSwg MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21pcGlfZHNp LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21pcGlfZHNpLmMKaW5kZXggMmQ1Y2E4ZWUuLjliZmUy MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWlwaV9kc2kuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vZHJtX21pcGlfZHNpLmMKQEAgLTQ3LDcgKzQ3LDE0IEBACiAKIHN0YXRpYyBp bnQgbWlwaV9kc2lfZGV2aWNlX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmlj ZV9kcml2ZXIgKmRydikKIHsKLQlyZXR1cm4gb2ZfZHJpdmVyX21hdGNoX2RldmljZShkZXYsIGRy dik7CisJaWYgKG9mX2RyaXZlcl9tYXRjaF9kZXZpY2UoZGV2LCBkcnYpKQorCQlyZXR1cm4gMTsK KworCWlmICghc3RyY21wKGRydi0+bmFtZSwgIm1pcGlfZHNpX2R1bW15IikgJiYKKwkJCXN0cnN0 cihkZXZfbmFtZShkZXYpLCAiZHVtbXlfZGV2IikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7 CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBtaXBpX2RzaV9kZXZpY2VfcG1f b3BzID0gewpAQCAtMTcxLDYgKzE3OCw2NyBAQCBvZl9taXBpX2RzaV9kZXZpY2VfYWRkKHN0cnVj dCBtaXBpX2RzaV9ob3N0ICpob3N0LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiAJcmV0dXJu IGRzaTsKIH0KIAorc3RhdGljIGludCBkdW1teV9wcm9iZShzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNl ICpkc2kpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHVtbXlfcmVtb3ZlKHN0cnVj dCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQg ZHVtbXlfc2h1dGRvd24oc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQoreworfQorCitzdGF0 aWMgc3RydWN0IG1pcGlfZHNpX2RyaXZlciBkdW1teV9kc2lfZHJpdmVyID0geworCS5wcm9iZSA9 IGR1bW15X3Byb2JlLAorCS5yZW1vdmUgPSBkdW1teV9yZW1vdmUsCisJLnNodXRkb3duID0gZHVt bXlfc2h1dGRvd24sCisJLmRyaXZlci5uYW1lID0gIm1pcGlfZHNpX2R1bW15IiwKK307CisKK3N0 YXRpYyBpbnQgbWlwaV9kc2lfZGV2aWNlX2FkZF9kdW1teShzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNl ICpkc2kpCit7CisJc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QgPSBkc2ktPmhvc3Q7CisKKwlk ZXZfc2V0X25hbWUoJmRzaS0+ZGV2LCAiJXMuZHVtbXlfZGV2LiVkIiwgZGV2X25hbWUoaG9zdC0+ ZGV2KSwKKwkJCWRzaS0+Y2hhbm5lbCk7CisKKwlyZXR1cm4gZGV2aWNlX2FkZCgmZHNpLT5kZXYp OworfQorCitzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICptaXBpX2RzaV9uZXdfZHVtbXkoc3RydWN0 IG1pcGlfZHNpX2hvc3QgKmhvc3QsIHUzMiByZWcpCit7CisJc3RydWN0IG1pcGlfZHNpX2Rldmlj ZSAqZHNpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGhvc3QtPmRldjsKKwlpbnQgcmV0OworCisJ aWYgKHJlZyA+IDMpIHsKKwkJZGV2X2VycihkZXYsICJpbnZhbGlkIHJlZyBwcm9wZXJ0eSAldVxu IiwgcmVnKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJZHNpID0gbWlwaV9k c2lfZGV2aWNlX2FsbG9jKGhvc3QpOworCWlmIChJU19FUlIoZHNpKSkgeworCQlkZXZfZXJyKGRl diwgImZhaWxlZCB0byBhbGxvY2F0ZSBkdW1teSBEU0kgZGV2aWNlICVsZFxuIiwKKwkJCVBUUl9F UlIoZHNpKSk7CisJCXJldHVybiBkc2k7CisJfQorCisJZHNpLT5jaGFubmVsID0gcmVnOworCisJ cmV0ID0gbWlwaV9kc2lfZGV2aWNlX2FkZF9kdW1teShkc2kpOworCWlmIChyZXQpIHsKKwkJZGV2 X2VycihkZXYsICJmYWlsZWQgdG8gYWRkIGR1bW15IERTSSBkZXZpY2UgJWRcbiIsIHJldCk7CisJ CWtmcmVlKGRzaSk7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJcmV0dXJuIGRzaTsK K30KKwogaW50IG1pcGlfZHNpX2hvc3RfcmVnaXN0ZXIoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhv c3QpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpub2RlOwpAQCAtOTI0LDcgKzk5MiwxMyBAQCBF WFBPUlRfU1lNQk9MKG1pcGlfZHNpX2RyaXZlcl91bnJlZ2lzdGVyKTsKIAogc3RhdGljIGludCBf X2luaXQgbWlwaV9kc2lfYnVzX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gYnVzX3JlZ2lzdGVyKCZt aXBpX2RzaV9idXNfdHlwZSk7CisJaW50IHJldDsKKworCXJldCA9IGJ1c19yZWdpc3RlcigmbWlw aV9kc2lfYnVzX3R5cGUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJu IG1pcGlfZHNpX2RyaXZlcl9yZWdpc3RlcigmZHVtbXlfZHNpX2RyaXZlcik7CiB9CiBwb3N0Y29y ZV9pbml0Y2FsbChtaXBpX2RzaV9idXNfaW5pdCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJt L2RybV9taXBpX2RzaS5oIGIvaW5jbHVkZS9kcm0vZHJtX21pcGlfZHNpLmgKaW5kZXggZjFkOGQw ZC4uZDA2YmE5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX21pcGlfZHNpLmgKKysrIGIv aW5jbHVkZS9kcm0vZHJtX21pcGlfZHNpLmgKQEAgLTE3NCw2ICsxNzQsOCBAQCBzc2l6ZV90IG1p cGlfZHNpX2dlbmVyaWNfd3JpdGUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpLCBjb25zdCB2 b2lkICpwYXlsb2FkLAogc3NpemVfdCBtaXBpX2RzaV9nZW5lcmljX3JlYWQoc3RydWN0IG1pcGlf ZHNpX2RldmljZSAqZHNpLCBjb25zdCB2b2lkICpwYXJhbXMsCiAJCQkgICAgICBzaXplX3QgbnVt X3BhcmFtcywgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpOwogCitzdHJ1Y3QgbWlwaV9kc2lfZGV2 aWNlICptaXBpX2RzaV9uZXdfZHVtbXkoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsIHUzMiBy ZWcpOworCiAvKioKICAqIGVudW0gbWlwaV9kc2lfZGNzX3RlYXJfbW9kZSAtIFRlYXJpbmcgRWZm ZWN0IE91dHB1dCBMaW5lIG1vZGUKICAqIEBNSVBJX0RTSV9EQ1NfVEVBUl9NT0RFX1ZCTEFOSzog dGhlIFRFIG91dHB1dCBsaW5lIGNvbnNpc3RzIG9mIFYtQmxhbmtpbmcKLS0gClRoZSBRdWFsY29t bSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEg Rm9ydW0sCmhvc3RlZCBieSBUaGUgTGludXggRm91bmRhdGlvbgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753919AbbF3FYp (ORCPT ); Tue, 30 Jun 2015 01:24:45 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:43650 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753721AbbF3FYX (ORCPT ); Tue, 30 Jun 2015 01:24:23 -0400 From: Archit Taneja To: dri-devel@lists.freedesktop.org Cc: linux-arm-msm@vger.kernel.org, treding@nvidia.com, inki.dae@samsung.com, a.hajda@samsung.com, linux-kernel@vger.kernel.org, airlied@linux.ie, daniel@ffwll.ch, jani.nikula@linux.intel.com, Archit Taneja Subject: [RFC 1/2] drm/dsi: Create dummy DSI devices Date: Tue, 30 Jun 2015 10:54:10 +0530 Message-Id: <1435641851-27295-2-git-send-email-architt@codeaurora.org> X-Mailer: git-send-email 1.8.2.1 In-Reply-To: <1435641851-27295-1-git-send-email-architt@codeaurora.org> References: <1435641851-27295-1-git-send-email-architt@codeaurora.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We can have devices where the data bus is MIPI DSI, but the control bus is something else (i2c, spi etc). A typical example is i2c controlled encoder bridge chips. Such devices too require passing DSI specific parameters (number of data lanes, DSI mode flags, color format etc) to their DSI host. For a device that isn't 'mipi_dsi_device', there is no way of passing such parameters. Provide the option of creating a dummy DSI device. The main purpose of this would be to attach to a DSI host by calling mipi_dsi_attach, and pass DSI params. Create mipi_dsi_new_dummy for creating a dummy dsi device. The driver calling this needs to be aware of the mipi_dsi_host it wants to attach to, and also the DSI virtual channel the DSI device intends to use. Signed-off-by: Archit Taneja --- drivers/gpu/drm/drm_mipi_dsi.c | 78 ++++++++++++++++++++++++++++++++++++++++-- include/drm/drm_mipi_dsi.h | 2 ++ 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c index 2d5ca8ee..9bfe215 100644 --- a/drivers/gpu/drm/drm_mipi_dsi.c +++ b/drivers/gpu/drm/drm_mipi_dsi.c @@ -47,7 +47,14 @@ static int mipi_dsi_device_match(struct device *dev, struct device_driver *drv) { - return of_driver_match_device(dev, drv); + if (of_driver_match_device(dev, drv)) + return 1; + + if (!strcmp(drv->name, "mipi_dsi_dummy") && + strstr(dev_name(dev), "dummy_dev")) + return 1; + + return 0; } static const struct dev_pm_ops mipi_dsi_device_pm_ops = { @@ -171,6 +178,67 @@ of_mipi_dsi_device_add(struct mipi_dsi_host *host, struct device_node *node) return dsi; } +static int dummy_probe(struct mipi_dsi_device *dsi) +{ + return 0; +} + +static int dummy_remove(struct mipi_dsi_device *dsi) +{ + return 0; +} + +static void dummy_shutdown(struct mipi_dsi_device *dsi) +{ +} + +static struct mipi_dsi_driver dummy_dsi_driver = { + .probe = dummy_probe, + .remove = dummy_remove, + .shutdown = dummy_shutdown, + .driver.name = "mipi_dsi_dummy", +}; + +static int mipi_dsi_device_add_dummy(struct mipi_dsi_device *dsi) +{ + struct mipi_dsi_host *host = dsi->host; + + dev_set_name(&dsi->dev, "%s.dummy_dev.%d", dev_name(host->dev), + dsi->channel); + + return device_add(&dsi->dev); +} + +struct mipi_dsi_device *mipi_dsi_new_dummy(struct mipi_dsi_host *host, u32 reg) +{ + struct mipi_dsi_device *dsi; + struct device *dev = host->dev; + int ret; + + if (reg > 3) { + dev_err(dev, "invalid reg property %u\n", reg); + return ERR_PTR(-EINVAL); + } + + dsi = mipi_dsi_device_alloc(host); + if (IS_ERR(dsi)) { + dev_err(dev, "failed to allocate dummy DSI device %ld\n", + PTR_ERR(dsi)); + return dsi; + } + + dsi->channel = reg; + + ret = mipi_dsi_device_add_dummy(dsi); + if (ret) { + dev_err(dev, "failed to add dummy DSI device %d\n", ret); + kfree(dsi); + return ERR_PTR(ret); + } + + return dsi; +} + int mipi_dsi_host_register(struct mipi_dsi_host *host) { struct device_node *node; @@ -924,7 +992,13 @@ EXPORT_SYMBOL(mipi_dsi_driver_unregister); static int __init mipi_dsi_bus_init(void) { - return bus_register(&mipi_dsi_bus_type); + int ret; + + ret = bus_register(&mipi_dsi_bus_type); + if (ret < 0) + return ret; + + return mipi_dsi_driver_register(&dummy_dsi_driver); } postcore_initcall(mipi_dsi_bus_init); diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h index f1d8d0d..d06ba99 100644 --- a/include/drm/drm_mipi_dsi.h +++ b/include/drm/drm_mipi_dsi.h @@ -174,6 +174,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_new_dummy(struct mipi_dsi_host *host, u32 reg); + /** * 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