From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrzej Hajda Subject: Re: [RFC v2 1/5] drm/dsi: Refactor device creation Date: Fri, 30 Oct 2015 12:28:20 +0100 Message-ID: <56335454.5090109@samsung.com> References: <1435641851-27295-1-git-send-email-architt@codeaurora.org> <1444123482-25579-1-git-send-email-architt@codeaurora.org> <1444123482-25579-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: <1444123482-25579-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 T24gMTAvMDYvMjAxNSAxMToyNCBBTSwgQXJjaGl0IFRhbmVqYSB3cm90ZToKPiBTaW1wbGlmeSB0 aGUgbWlwaSBkc2kgZGV2aWNlIGNyZWF0aW9uIHByb2Nlc3MuIGRldmljZV9pbml0aWFsaXplIGFu ZAo+IGRldmljZV9hZGQgZG9uJ3QgbmVlZCB0byBiZSBjYWxsZWQgc2VwYXJhdGVseSB3aGVuIGNy ZWF0aW5nCj4gbWlwaV9kc2lfZGV2aWNlJ3MuIFVzZSBkZXZpY2VfcmVnaXN0ZXIgaW5zdGVhZCB0 byBzaW1wbGlmeSB0aGluZ3MuCj4KPiBDcmVhdGUgYSBoZWxwZXIgZnVuY3Rpb24gbWlwaV9kc2lf ZGV2aWNlX25ldyB3aGljaCB0YWtlcyBpbiBzdHJ1Y3QKPiBtaXBpX2RzaV9kZXZpY2VfaW5mbyBh bmQgbWlwaV9kc2lfaG9zdC4gSXQgY2x1YnMgdGhlIGZ1bmN0aW9ucwo+IG1pcGlfZHNpX2Rldmlj ZV9hbGxvYyBhbmQgbWlwaV9kc2lfZGV2aWNlX2FkZCBpbnRvIG9uZS4KPgo+IG1pcGlfZHNpX2Rl dmljZV9pbmZvIGFjdHMgYXMgYSB0ZW1wbGF0ZSB0byBwb3B1bGF0ZSB0aGUgZHNpIGRldmljZQo+ IGluZm9ybWF0aW9uLiBUaGlzIGlzIHBvcHVsYXRlZCBieSBvZl9taXBpX2RzaV9kZXZpY2VfYWRk IGFuZCBwYXNzZWQgdG8KPiBtaXBpX2RzaV9kZXZpY2VfbmV3Lgo+Cj4gTGF0ZXIgb24sIHdlJ2xs IHByb3ZpZGUgbWlwaV9kc2lfZGV2aWNlX25ldyBhcyBhIHN0YW5kYWxvbmUgd2F5IHRvIGNyZWF0 ZQo+IGEgZHNpIGRldmljZSBub3QgYXZhaWxhYmxlIHZpYSBEVC4KPgo+IFRoZSBuZXcgZGV2aWNl IGNyZWF0aW9uIHByb2Nlc3MgdHJpZXMgdG8gY2xvc2VseSBmb2xsb3cgd2hhdCdzIGJlZW4gZG9u ZQo+IGluIGkyY19uZXdfZGV2aWNlIGluIGkyYy1jb3JlLgo+Cj4gU2lnbmVkLW9mZi1ieTogQXJj aGl0IFRhbmVqYSA8YXJjaGl0dEBjb2RlYXVyb3JhLm9yZz4KClJldmlld2VkLWJ5OiBBbmRyemVq IEhhamRhIDxhLmhhamRhQHNhbXN1bmcuY29tPgoKUmVnYXJkcwpBbmRyemVqCgo+IC0tLQo+ICBk cml2ZXJzL2dwdS9kcm0vZHJtX21pcGlfZHNpLmMgfCA2MSArKysrKysrKysrKysrKysrKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgaW5jbHVkZS9kcm0vZHJtX21pcGlfZHNpLmggICAgIHwg MTUgKysrKysrKysrKysKPiAgMiBmaWxlcyBjaGFuZ2VkLCA0MCBpbnNlcnRpb25zKCspLCAzNiBk ZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21pcGlfZHNp LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21pcGlfZHNpLmMKPiBpbmRleCAyZDVjYThlZS4uMjQ1 ZWNmZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21pcGlfZHNpLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX21pcGlfZHNpLmMKPiBAQCAtMTAyLDkgKzEwMiwxOCBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIG1pcGlfZHNpX2RldmljZV90eXBlID0gewo+ ICAJLnJlbGVhc2UgPSBtaXBpX2RzaV9kZXZfcmVsZWFzZSwKPiAgfTsKPiAgCj4gLXN0YXRpYyBz dHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICptaXBpX2RzaV9kZXZpY2VfYWxsb2Moc3RydWN0IG1pcGlf ZHNpX2hvc3QgKmhvc3QpCj4gK3N0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKm1pcGlfZHNpX2Rldmlj ZV9uZXcoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCj4gKwkJCQkJICAgIHN0cnVjdCBtaXBp X2RzaV9kZXZpY2VfaW5mbyAqaW5mbykKPiAgewo+ICAJc3RydWN0IG1pcGlfZHNpX2RldmljZSAq ZHNpOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gaG9zdC0+ZGV2Owo+ICsJaW50IHI7Cgo+ICsK PiArCWlmIChpbmZvLT5yZWcgPiAzKSB7Cj4gKwkJZGV2X2VycihkZXYsICJkZXZpY2Ugbm9kZSBo YXMgaW52YWxpZCByZWcgcHJvcGVydHk6ICV1XG4iLAo+ICsJCQlpbmZvLT5yZWcpOwo+ICsJCXJl dHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+ICsJfQo+ICAKPiAgCWRzaSA9IGt6YWxsb2Moc2l6ZW9m KCpkc2kpLCBHRlBfS0VSTkVMKTsKPiAgCWlmICghZHNpKQo+IEBAIC0xMTQsMjYgKzEyMywyNyBA QCBzdGF0aWMgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqbWlwaV9kc2lfZGV2aWNlX2FsbG9jKHN0 cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0KQo+ICAJZHNpLT5kZXYuYnVzID0gJm1pcGlfZHNpX2J1 c190eXBlOwo+ICAJZHNpLT5kZXYucGFyZW50ID0gaG9zdC0+ZGV2Owo+ICAJZHNpLT5kZXYudHlw ZSA9ICZtaXBpX2RzaV9kZXZpY2VfdHlwZTsKPiArCWRzaS0+ZGV2Lm9mX25vZGUgPSBpbmZvLT5u b2RlOwo+ICsJZHNpLT5jaGFubmVsID0gaW5mby0+cmVnOwo+ICAKPiAtCWRldmljZV9pbml0aWFs aXplKCZkc2ktPmRldik7Cj4gLQo+IC0JcmV0dXJuIGRzaTsKPiAtfQo+IC0KPiAtc3RhdGljIGlu dCBtaXBpX2RzaV9kZXZpY2VfYWRkKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKPiAtewo+ IC0Jc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QgPSBkc2ktPmhvc3Q7Cj4gKwlkZXZfc2V0X25h bWUoJmRzaS0+ZGV2LCAiJXMuJWQiLCBkZXZfbmFtZShob3N0LT5kZXYpLCBpbmZvLT5yZWcpOwo+ ICAKPiAtCWRldl9zZXRfbmFtZSgmZHNpLT5kZXYsICIlcy4lZCIsIGRldl9uYW1lKGhvc3QtPmRl diksICBkc2ktPmNoYW5uZWwpOwo+ICsJciA9IGRldmljZV9yZWdpc3RlcigmZHNpLT5kZXYpOwo+ ICsJaWYgKHIpIHsKPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBkZXZpY2U6 ICVkXG4iLCByKTsKPiArCQlrZnJlZShkc2kpOwo+ICsJCXJldHVybiBFUlJfUFRSKHIpOwo+ICsJ fQo+ICAKPiAtCXJldHVybiBkZXZpY2VfYWRkKCZkc2ktPmRldik7Cj4gKwlyZXR1cm4gZHNpOwo+ ICB9Cj4gK0VYUE9SVF9TWU1CT0wobWlwaV9kc2lfZGV2aWNlX25ldyk7Cj4gIAo+ICBzdGF0aWMg c3RydWN0IG1pcGlfZHNpX2RldmljZSAqCj4gIG9mX21pcGlfZHNpX2RldmljZV9hZGQoc3RydWN0 IG1pcGlfZHNpX2hvc3QgKmhvc3QsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKPiAgewo+IC0J c3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOwo+ICAJc3RydWN0IGRldmljZSAqZGV2ID0gaG9z dC0+ZGV2Owo+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZV9pbmZvIGluZm8gPSB7IH07Cj4gIAlp bnQgcmV0Owo+ICAJdTMyIHJlZzsKPiAgCj4gQEAgLTE0NCwzMSArMTU0LDEwIEBAIG9mX21pcGlf ZHNpX2RldmljZV9hZGQoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsIHN0cnVjdCBkZXZpY2Vf bm9kZSAqbm9kZSkKPiAgCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiAgCX0KPiAgCj4gLQlp ZiAocmVnID4gMykgewo+IC0JCWRldl9lcnIoZGV2LCAiZGV2aWNlIG5vZGUgJXMgaGFzIGludmFs aWQgcmVnIHByb3BlcnR5OiAldVxuIiwKPiAtCQkJbm9kZS0+ZnVsbF9uYW1lLCByZWcpOwo+IC0J CXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+IC0JfQo+IC0KPiAtCWRzaSA9IG1pcGlfZHNpX2Rl dmljZV9hbGxvYyhob3N0KTsKPiAtCWlmIChJU19FUlIoZHNpKSkgewo+IC0JCWRldl9lcnIoZGV2 LCAiZmFpbGVkIHRvIGFsbG9jYXRlIERTSSBkZXZpY2UgJXM6ICVsZFxuIiwKPiAtCQkJbm9kZS0+ ZnVsbF9uYW1lLCBQVFJfRVJSKGRzaSkpOwo+IC0JCXJldHVybiBkc2k7Cj4gLQl9Cj4gLQo+IC0J ZHNpLT5kZXYub2Zfbm9kZSA9IG9mX25vZGVfZ2V0KG5vZGUpOwo+IC0JZHNpLT5jaGFubmVsID0g cmVnOwo+ICsJaW5mby5yZWcgPSByZWc7Cj4gKwlpbmZvLm5vZGUgPSBvZl9ub2RlX2dldChub2Rl KTsKPiAgCj4gLQlyZXQgPSBtaXBpX2RzaV9kZXZpY2VfYWRkKGRzaSk7Cj4gLQlpZiAocmV0KSB7 Cj4gLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWRkIERTSSBkZXZpY2UgJXM6ICVkXG4iLAo+ IC0JCQlub2RlLT5mdWxsX25hbWUsIHJldCk7Cj4gLQkJa2ZyZWUoZHNpKTsKPiAtCQlyZXR1cm4g RVJSX1BUUihyZXQpOwo+IC0JfQo+IC0KPiAtCXJldHVybiBkc2k7Cj4gKwlyZXR1cm4gbWlwaV9k c2lfZGV2aWNlX25ldyhob3N0LCAmaW5mbyk7Cj4gIH0KPiAgCj4gIGludCBtaXBpX2RzaV9ob3N0 X3JlZ2lzdGVyKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0KQo+IGRpZmYgLS1naXQgYS9pbmNs dWRlL2RybS9kcm1fbWlwaV9kc2kuaCBiL2luY2x1ZGUvZHJtL2RybV9taXBpX2RzaS5oCj4gaW5k ZXggZjFkOGQwZC4uOTBmNGYzYyAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fbWlwaV9k c2kuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9taXBpX2RzaS5oCj4gQEAgLTE0MCw2ICsxNDAs MTkgQEAgZW51bSBtaXBpX2RzaV9waXhlbF9mb3JtYXQgewo+ICB9Owo+ICAKPiAgLyoqCj4gKyAq IHN0cnVjdCBtaXBpX2RzaV9kZXZpY2VfaW5mbyAtIHRlbXBsYXRlIGZvciBjcmVhdGluZyBhIG1p cGlfZHNpX2RldmljZQo+ICsgKiBAcmVnOiBEU0kgdmlydHVhbCBjaGFubmVsIGFzc2lnbmVkIHRv IHBlcmlwaGVyYWwKPiArICogQG5vZGU6IHBvaW50ZXIgdG8gT0YgZGV2aWNlIG5vZGUKPiArICoK PiArICogVGhpcyBpcyBwb3B1bGF0ZWQgYW5kIHBhc3NlZCB0byBtaXBpX2RzaV9kZXZpY2VfbmV3 IHRvIGNyZWF0ZSBhIG5ldwo+ICsgKiBEU0kgZGV2aWNlCj4gKyAqLwo+ICtzdHJ1Y3QgbWlwaV9k c2lfZGV2aWNlX2luZm8gewo+ICsJdTMyIHJlZzsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9k ZTsKPiArfTsKPiArCj4gKy8qKgo+ICAgKiBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlIC0gRFNJIHBl cmlwaGVyYWwgZGV2aWNlCj4gICAqIEBob3N0OiBEU0kgaG9zdCBmb3IgdGhpcyBwZXJpcGhlcmFs Cj4gICAqIEBkZXY6IGRyaXZlciBtb2RlbCBkZXZpY2Ugbm9kZSBmb3IgdGhpcyBwZXJpcGhlcmFs Cj4gQEAgLTE3NCw2ICsxODcsOCBAQCBzc2l6ZV90IG1pcGlfZHNpX2dlbmVyaWNfd3JpdGUoc3Ry dWN0IG1pcGlfZHNpX2RldmljZSAqZHNpLCBjb25zdCB2b2lkICpwYXlsb2FkLAo+ICBzc2l6ZV90 IG1pcGlfZHNpX2dlbmVyaWNfcmVhZChzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2ksIGNvbnN0 IHZvaWQgKnBhcmFtcywKPiAgCQkJICAgICAgc2l6ZV90IG51bV9wYXJhbXMsIHZvaWQgKmRhdGEs IHNpemVfdCBzaXplKTsKPiAgCj4gK3N0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKm1pcGlfZHNpX2Rl dmljZV9uZXcoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCj4gKwkJCQkJICAgIHN0cnVjdCBt aXBpX2RzaV9kZXZpY2VfaW5mbyAqaW5mbyk7Cj4gIC8qKgo+ICAgKiBlbnVtIG1pcGlfZHNpX2Rj c190ZWFyX21vZGUgLSBUZWFyaW5nIEVmZmVjdCBPdXRwdXQgTGluZSBtb2RlCj4gICAqIEBNSVBJ X0RTSV9EQ1NfVEVBUl9NT0RFX1ZCTEFOSzogdGhlIFRFIG91dHB1dCBsaW5lIGNvbnNpc3RzIG9m IFYtQmxhbmtpbmcKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1030846AbbJ3L23 (ORCPT ); Fri, 30 Oct 2015 07:28:29 -0400 Received: from mailout2.w1.samsung.com ([210.118.77.12]:57773 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1030383AbbJ3L21 (ORCPT ); Fri, 30 Oct 2015 07:28:27 -0400 X-AuditID: cbfec7f4-f79c56d0000012ee-bf-563354598313 Subject: Re: [RFC v2 1/5] drm/dsi: Refactor device creation To: Archit Taneja , dri-devel@lists.freedesktop.org References: <1435641851-27295-1-git-send-email-architt@codeaurora.org> <1444123482-25579-1-git-send-email-architt@codeaurora.org> <1444123482-25579-2-git-send-email-architt@codeaurora.org> 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 From: Andrzej Hajda Message-id: <56335454.5090109@samsung.com> Date: Fri, 30 Oct 2015 12:28:20 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-version: 1.0 In-reply-to: <1444123482-25579-2-git-send-email-architt@codeaurora.org> Content-type: text/plain; charset=windows-1252 Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrFLMWRmVeSWpSXmKPExsVy+t/xy7qRIcZhBnsPMFr0njvJZNHU8ZbV 4v+2icwWV76+Z7NYfnk9o8WDuTeZLCbuP8tucXnXHDaL/3t2sFvc/s3nwOVxua+XyWPvtwUs HptWdbJ5bP/2gNVj3slAj/vdx5k8epvfsXn0/zXw+LxJLoAzissmJTUnsyy1SN8ugSvj2mKW gmdaFVcWbGZvYDyk1MXIySEhYCIx+eUBFghbTOLCvfVsXYxcHEICSxklHly5wAThPGeUONf8 gh2kSljAWuLx3uesILaIgLfEnNV9jBBFBxglvj/fyALiMIM4/dNXMYJUsQloSvzdfBNoLgcH r4CWRPeVCJAwi4CqxMu375hBbFGBCImJExrAhvIKCEr8mHwP7CROAXeJLXsmMIO0MgvoSdy/ qAUSZhaQl9i85i3zBEaBWUg6ZiFUzUJStYCReRWjaGppckFxUnquoV5xYm5xaV66XnJ+7iZG SIx82cG4+JjVIUYBDkYlHt4fCUZhQqyJZcWVuYcYJTiYlUR4e5yMw4R4UxIrq1KL8uOLSnNS iw8xSnOwKInzzt31PkRIID2xJDU7NbUgtQgmy8TBKdXAuKSfw3X+lfK5T/+c3vqk70OXsJtZ 5tX+2Ycms3CdOx17Pk945STxtzL34qUEntpunc761fiuUeG31kezPJxmvW1q2XH4Xn6RxpKp W3p3HIid8vx61GGzd9cenr5ouVX5ml+hXaD6odd7FM8+blSSW+zyP3Xf6fmePmG6XsZ8ogsT ppr0MbpPE1ViKc5INNRiLipOBAD7jIDkjQIAAA== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/06/2015 11:24 AM, Archit Taneja wrote: > 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 Reviewed-by: Andrzej Hajda Regards Andrzej > --- > 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