From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrzej Hajda Subject: Re: [RFC 1/2] drm/dsi: Create dummy DSI devices Date: Wed, 19 Aug 2015 10:10:14 +0200 Message-ID: <55D439E6.3080604@samsung.com> References: <1435641851-27295-1-git-send-email-architt@codeaurora.org> <1435641851-27295-2-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-2-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: Archit Taneja , dri-devel@lists.freedesktop.org Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, treding@nvidia.com List-Id: linux-arm-msm@vger.kernel.org T24gMDYvMzAvMjAxNSAwNzoyNCBBTSwgQXJjaGl0IFRhbmVqYSB3cm90ZToKPiBXZSBjYW4gaGF2 ZSBkZXZpY2VzIHdoZXJlIHRoZSBkYXRhIGJ1cyBpcyBNSVBJIERTSSwgYnV0IHRoZSBjb250cm9s IGJ1cwo+IGlzIHNvbWV0aGluZyBlbHNlIChpMmMsIHNwaSBldGMpLiBBIHR5cGljYWwgZXhhbXBs ZSBpcyBpMmMgY29udHJvbGxlZAo+IGVuY29kZXIgYnJpZGdlIGNoaXBzLgo+Cj4gU3VjaCBkZXZp Y2VzIHRvbyByZXF1aXJlIHBhc3NpbmcgRFNJIHNwZWNpZmljIHBhcmFtZXRlcnMgKG51bWJlciBv ZiBkYXRhCj4gbGFuZXMsIERTSSBtb2RlIGZsYWdzLCBjb2xvciBmb3JtYXQgZXRjKSB0byB0aGVp ciBEU0kgaG9zdC4gRm9yIGEgZGV2aWNlCj4gdGhhdCBpc24ndCAnbWlwaV9kc2lfZGV2aWNlJywg dGhlcmUgaXMgbm8gd2F5IG9mIHBhc3Npbmcgc3VjaCBwYXJhbWV0ZXJzLgo+Cj4gUHJvdmlkZSB0 aGUgb3B0aW9uIG9mIGNyZWF0aW5nIGEgZHVtbXkgRFNJIGRldmljZS4gVGhlIG1haW4gcHVycG9z ZSBvZgo+IHRoaXMgd291bGQgYmUgdG8gYXR0YWNoIHRvIGEgRFNJIGhvc3QgYnkgY2FsbGluZyBt aXBpX2RzaV9hdHRhY2gsIGFuZAo+IHBhc3MgRFNJIHBhcmFtcy4KPgo+IENyZWF0ZSBtaXBpX2Rz aV9uZXdfZHVtbXkgZm9yIGNyZWF0aW5nIGEgZHVtbXkgZHNpIGRldmljZS4gVGhlIGRyaXZlcgo+ IGNhbGxpbmcgdGhpcyBuZWVkcyB0byBiZSBhd2FyZSBvZiB0aGUgbWlwaV9kc2lfaG9zdCBpdCB3 YW50cyB0byBhdHRhY2gKPiB0bywgYW5kIGFsc28gdGhlIERTSSB2aXJ0dWFsIGNoYW5uZWwgdGhl IERTSSBkZXZpY2UgaW50ZW5kcyB0byB1c2UuCj4KPiBTaWduZWQtb2ZmLWJ5OiBBcmNoaXQgVGFu ZWphIDxhcmNoaXR0QGNvZGVhdXJvcmEub3JnPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vZHJt X21pcGlfZHNpLmMgfCA3OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr LS0KPiAgaW5jbHVkZS9kcm0vZHJtX21pcGlfZHNpLmggICAgIHwgIDIgKysKPiAgMiBmaWxlcyBj aGFuZ2VkLCA3OCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9kcm1fbWlwaV9kc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWlw aV9kc2kuYwo+IGluZGV4IDJkNWNhOGVlLi45YmZlMjE1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9kcm1fbWlwaV9kc2kuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWlwaV9k c2kuYwo+IEBAIC00Nyw3ICs0NywxNCBAQAo+ICAKPiAgc3RhdGljIGludCBtaXBpX2RzaV9kZXZp Y2VfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQo+ ICB7Cj4gLQlyZXR1cm4gb2ZfZHJpdmVyX21hdGNoX2RldmljZShkZXYsIGRydik7Cj4gKwlpZiAo b2ZfZHJpdmVyX21hdGNoX2RldmljZShkZXYsIGRydikpCj4gKwkJcmV0dXJuIDE7Cj4gKwo+ICsJ aWYgKCFzdHJjbXAoZHJ2LT5uYW1lLCAibWlwaV9kc2lfZHVtbXkiKSAmJgo+ICsJCQlzdHJzdHIo ZGV2X25hbWUoZGV2KSwgImR1bW15X2RldiIpKQo+ICsJCXJldHVybiAxOwoKSXMgdGhpcyBraW5k IG9mIGZ1enp5IG1hdGNoaW5nIHVzZWQgaW4gb3RoZXIgZHVtbXkgZGV2cz8gSXQgbG9va3MgbGl0 dGxlIGJpdApzY2FyeS4gWW91CmNhbiBhdCBsZWFzdCByZXBsYWNlCgpzdHJzdHIoZGV2X25hbWUo ZGV2KSwgImR1bW15X2RldiIpKQoKd2l0aAoKc3Ryc3RyKGRldl9uYW1lKGRldiksICIuZHVtbXlf ZGV2LiIpKQoKQW55d2F5LCBjdXJyZW50bHkgaXQgc2hvdWxkIG5vdCBicmVhayBhbnl0aGluZywg YW0gSSByaWdodD8KCj4gKwo+ICsJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gIHN0YXRpYyBjb25zdCBz dHJ1Y3QgZGV2X3BtX29wcyBtaXBpX2RzaV9kZXZpY2VfcG1fb3BzID0gewo+IEBAIC0xNzEsNiAr MTc4LDY3IEBAIG9mX21pcGlfZHNpX2RldmljZV9hZGQoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhv c3QsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKPiAgCXJldHVybiBkc2k7Cj4gIH0KPiAgCj4g K3N0YXRpYyBpbnQgZHVtbXlfcHJvYmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQo+ICt7 Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkdW1teV9yZW1vdmUoc3RydWN0 IG1pcGlfZHNpX2RldmljZSAqZHNpKQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgZHVtbXlfc2h1dGRvd24oc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQo+ICt7 Cj4gK30KCkkgc3VwcG9zZSB0aGVzZSBjYWxsYmFja3MgYXJlIG9wdGlvbmFsLCBzbyB5b3UgY2Fu IG9taXQgdGhlbS4KCj4gKwo+ICtzdGF0aWMgc3RydWN0IG1pcGlfZHNpX2RyaXZlciBkdW1teV9k c2lfZHJpdmVyID0gewo+ICsJLnByb2JlID0gZHVtbXlfcHJvYmUsCj4gKwkucmVtb3ZlID0gZHVt bXlfcmVtb3ZlLAo+ICsJLnNodXRkb3duID0gZHVtbXlfc2h1dGRvd24sCj4gKwkuZHJpdmVyLm5h bWUgPSAibWlwaV9kc2lfZHVtbXkiLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBtaXBpX2RzaV9k ZXZpY2VfYWRkX2R1bW15KHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKPiArewo+ICsJc3Ry dWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QgPSBkc2ktPmhvc3Q7Cj4gKwo+ICsJZGV2X3NldF9uYW1l KCZkc2ktPmRldiwgIiVzLmR1bW15X2Rldi4lZCIsIGRldl9uYW1lKGhvc3QtPmRldiksCj4gKwkJ CWRzaS0+Y2hhbm5lbCk7Cj4gKwo+ICsJcmV0dXJuIGRldmljZV9hZGQoJmRzaS0+ZGV2KTsKPiAr fQo+ICsKPiArc3RydWN0IG1pcGlfZHNpX2RldmljZSAqbWlwaV9kc2lfbmV3X2R1bW15KHN0cnVj dCBtaXBpX2RzaV9ob3N0ICpob3N0LCB1MzIgcmVnKQo+ICt7Cj4gKwlzdHJ1Y3QgbWlwaV9kc2lf ZGV2aWNlICpkc2k7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBob3N0LT5kZXY7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCWlmIChyZWcgPiAzKSB7Cj4gKwkJZGV2X2VycihkZXYsICJpbnZhbGlkIHJl ZyBwcm9wZXJ0eSAldVxuIiwgcmVnKTsKPiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiAr CX0KPiArCj4gKwlkc2kgPSBtaXBpX2RzaV9kZXZpY2VfYWxsb2MoaG9zdCk7Cj4gKwlpZiAoSVNf RVJSKGRzaSkpIHsKPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBkdW1teSBE U0kgZGV2aWNlICVsZFxuIiwKPiArCQkJUFRSX0VSUihkc2kpKTsKPiArCQlyZXR1cm4gZHNpOwo+ ICsJfQo+ICsKPiArCWRzaS0+Y2hhbm5lbCA9IHJlZzsKPiArCj4gKwlyZXQgPSBtaXBpX2RzaV9k ZXZpY2VfYWRkX2R1bW15KGRzaSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJm YWlsZWQgdG8gYWRkIGR1bW15IERTSSBkZXZpY2UgJWRcbiIsIHJldCk7Cj4gKwkJa2ZyZWUoZHNp KTsKPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJfQo+ICsKPiArCXJldHVybiBkc2k7Cj4g K30KPiArCj4gIGludCBtaXBpX2RzaV9ob3N0X3JlZ2lzdGVyKHN0cnVjdCBtaXBpX2RzaV9ob3N0 ICpob3N0KQo+ICB7Cj4gIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7Cj4gQEAgLTkyNCw3ICs5 OTIsMTMgQEAgRVhQT1JUX1NZTUJPTChtaXBpX2RzaV9kcml2ZXJfdW5yZWdpc3Rlcik7Cj4gIAo+ ICBzdGF0aWMgaW50IF9faW5pdCBtaXBpX2RzaV9idXNfaW5pdCh2b2lkKQo+ICB7Cj4gLQlyZXR1 cm4gYnVzX3JlZ2lzdGVyKCZtaXBpX2RzaV9idXNfdHlwZSk7Cj4gKwlpbnQgcmV0Owo+ICsKPiAr CXJldCA9IGJ1c19yZWdpc3RlcigmbWlwaV9kc2lfYnVzX3R5cGUpOwo+ICsJaWYgKHJldCA8IDAp Cj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXR1cm4gbWlwaV9kc2lfZHJpdmVyX3JlZ2lzdGVy KCZkdW1teV9kc2lfZHJpdmVyKTsKPiAgfQo+ICBwb3N0Y29yZV9pbml0Y2FsbChtaXBpX2RzaV9i dXNfaW5pdCk7Cj4gIAo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fbWlwaV9kc2kuaCBi L2luY2x1ZGUvZHJtL2RybV9taXBpX2RzaS5oCj4gaW5kZXggZjFkOGQwZC4uZDA2YmE5OSAxMDA2 NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fbWlwaV9kc2kuaAo+ICsrKyBiL2luY2x1ZGUvZHJt L2RybV9taXBpX2RzaS5oCj4gQEAgLTE3NCw2ICsxNzQsOCBAQCBzc2l6ZV90IG1pcGlfZHNpX2dl bmVyaWNfd3JpdGUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpLCBjb25zdCB2b2lkICpwYXls b2FkLAo+ICBzc2l6ZV90IG1pcGlfZHNpX2dlbmVyaWNfcmVhZChzdHJ1Y3QgbWlwaV9kc2lfZGV2 aWNlICpkc2ksIGNvbnN0IHZvaWQgKnBhcmFtcywKPiAgCQkJICAgICAgc2l6ZV90IG51bV9wYXJh bXMsIHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKTsKPiAgCj4gK3N0cnVjdCBtaXBpX2RzaV9kZXZp Y2UgKm1pcGlfZHNpX25ld19kdW1teShzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwgdTMyIHJl Zyk7Cj4gKwo+ICAvKioKPiAgICogZW51bSBtaXBpX2RzaV9kY3NfdGVhcl9tb2RlIC0gVGVhcmlu ZyBFZmZlY3QgT3V0cHV0IExpbmUgbW9kZQo+ICAgKiBATUlQSV9EU0lfRENTX1RFQVJfTU9ERV9W QkxBTks6IHRoZSBURSBvdXRwdXQgbGluZSBjb25zaXN0cyBvZiBWLUJsYW5raW5nCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGlu ZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753133AbbHSIK1 (ORCPT ); Wed, 19 Aug 2015 04:10:27 -0400 Received: from mailout4.w1.samsung.com ([210.118.77.14]:24015 "EHLO mailout4.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752764AbbHSIKV (ORCPT ); Wed, 19 Aug 2015 04:10:21 -0400 X-AuditID: cbfec7f4-f79c56d0000012ee-cf-55d439eafabf Message-id: <55D439E6.3080604@samsung.com> Date: Wed, 19 Aug 2015 10:10:14 +0200 From: Andrzej Hajda User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 MIME-version: 1.0 To: Archit Taneja , dri-devel@lists.freedesktop.org Cc: linux-arm-msm@vger.kernel.org, treding@nvidia.com, inki.dae@samsung.com, linux-kernel@vger.kernel.org, airlied@linux.ie, daniel@ffwll.ch, jani.nikula@linux.intel.com Subject: Re: [RFC 1/2] drm/dsi: Create dummy DSI devices References: <1435641851-27295-1-git-send-email-architt@codeaurora.org> <1435641851-27295-2-git-send-email-architt@codeaurora.org> In-reply-to: <1435641851-27295-2-git-send-email-architt@codeaurora.org> Content-type: text/plain; charset=windows-1252 Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrELMWRmVeSWpSXmKPExsVy+t/xK7qvLK+EGjz6KW/Re+4kk0VTx1tW i//bJjJbXPn6ns1i0v0JLBbLL69ntJi4/yy7xeVdc9gsbv/mc+D0uNzXy+Sx99sCFo/t3x6w esw7Gehxv/s4k0dv8zs2j74tqxg9Pm+SC+CI4rJJSc3JLEst0rdL4MpYu/IUa8E81YpZL3Yx NjD+lO1i5OSQEDCRaGg8wAZhi0lcuLceyObiEBJYyijxcMMndgjnOaPEndmbWEGqeAW0JLYv mg5mswioSqzYeoERxGYT0JT4u/km2CRRgQiJ5atPMkLUC0r8mHyPBcQWEfCWmLO6DyzOLLCW UeLVfm0QW1jAQmLa7DuMEMuaGSV2bv/FBJLgFHCXOH/tLpDNAdSgJ3H/ohZEr7zE5jVvmScw CsxCsmIWQtUsJFULGJlXMYqmliYXFCel5xrqFSfmFpfmpesl5+duYoTExJcdjIuPWR1iFOBg VOLhnbHtcqgQa2JZcWXuIUYJDmYlEV5e8yuhQrwpiZVVqUX58UWlOanFhxilOViUxHnn7nof IiSQnliSmp2aWpBaBJNl4uCUamDkrj+YF9+x7aSBwG9PufLDrC+YvS+a3b65J3Fx9JPrDOsr X19Jf+B9qv5KfndZNauIZJ2Uw90j/3due/fzS2D3JqVPdf0HOoSernycV+S/7OxNp6tZTj4z z8atjjRWORh9ppJ1g6xaf2Wk6cTXTotXCs/Weaj2OqqCy1eRp/2xzsJNFWf2LZyrxFKckWio xVxUnAgAYyqE74UCAAA= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 06/30/2015 07:24 AM, Archit Taneja wrote: > 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; Is this kind of fuzzy matching used in other dummy devs? It looks little bit scary. You can at least replace strstr(dev_name(dev), "dummy_dev")) with strstr(dev_name(dev), ".dummy_dev.")) Anyway, currently it should not break anything, am I right? > + > + 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) > +{ > +} I suppose these callbacks are optional, so you can omit them. > + > +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