From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: Re: [PATCH 4/4] drm/msm/mdp5: Make the intf connection in config module Date: Wed, 04 Mar 2015 11:43:45 +0530 Message-ID: <54F6A299.9090201@codeaurora.org> References: <1425407775-7704-1-git-send-email-sviau@codeaurora.org> <1425407775-7704-5-git-send-email-sviau@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1425407775-7704-5-git-send-email-sviau@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Stephane Viau , dri-devel@lists.freedesktop.org Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org List-Id: linux-arm-msm@vger.kernel.org SGksCgpPbiAwMy8wNC8yMDE1IDEyOjA2IEFNLCBTdGVwaGFuZSBWaWF1IHdyb3RlOgo+IFVwIHVu dGlsIG5vdywgd2UgYXNzdW1lIHRoYXQgZURQIGlzIHRpZ2h0IHRvIGludGZfMCBhbmQgSERNSSB0 bwo+IGludGZfMy4gVGhpcyBpbmZvcm1hdGlvbiBzaGFsbCBhY3R1YWxseSBjb21lIGZyb20gdGhl IG1kcDVfY2ZnCj4gbW9kdWxlIHNpbmNlIGl0IGNhbiBjaGFuZ2UgZnJvbSBvbmUgY2hpcCB0byBh bm90aGVyLgo+Cj4gU2lnbmVkLW9mZi1ieTogU3RlcGhhbmUgVmlhdSA8c3ZpYXVAY29kZWF1cm9y YS5vcmc+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfY2ZnLmMg fCAgIDggKysrCj4gICBkcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfY2ZnLmggfCAg IDQgKysKPiAgIGRyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9rbXMuYyB8IDExMSAr KysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQo+ICAgMyBmaWxlcyBjaGFuZ2VkLCA3NCBp bnNlcnRpb25zKCspLCA0OSBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL21kcC9tZHA1L21kcDVfY2ZnLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9t ZHA1L21kcDVfY2ZnLmMKPiBpbmRleCA3MmMwNzVhLi44YmVlMDIzIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9jZmcuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vbWRwL21kcDUvbWRwNV9jZmcuYwo+IEBAIC02Miw2ICs2MiwxMCBAQCBjb25zdCBz dHJ1Y3QgbWRwNV9jZmdfaHcgbXNtOHg3NF9jb25maWcgPSB7Cj4gICAJCS5jb3VudCA9IDQsCj4g ICAJCS5iYXNlID0geyAweDEyNTAwLCAweDEyNzAwLCAweDEyOTAwLCAweDEyYjAwIH0sCj4gICAJ fSwKPiArCS5pbnRmcyA9IHsKPiArCQlbMF0gPSBJTlRGX2VEUCwKPiArCQlbM10gPSBJTlRGX0hE TUksCj4gKwl9LAo+ICAgCS5tYXhfY2xrID0gMjAwMDAwMDAwLAo+ICAgfTsKPgo+IEBAIC0xMTEs NiArMTE1LDEwIEBAIGNvbnN0IHN0cnVjdCBtZHA1X2NmZ19odyBhcHE4MDg0X2NvbmZpZyA9IHsK PiAgIAkJLmNvdW50ID0gNSwKPiAgIAkJLmJhc2UgPSB7IDB4MTI1MDAsIDB4MTI3MDAsIDB4MTI5 MDAsIDB4MTJiMDAsIDB4MTJkMDAgfSwKPiAgIAl9LAo+ICsJLmludGZzID0gewo+ICsJCVswXSA9 IElOVEZfZURQLAo+ICsJCVszXSA9IElOVEZfSERNSSwKPiArCX0sCj4gICAJLm1heF9jbGsgPSAz MjAwMDAwMDAsCj4gICB9Owo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRw L21kcDUvbWRwNV9jZmcuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbWRwL21kcDUvbWRwNV9jZmcu aAo+IGluZGV4IGJlMTQ5YjMuLjRlOTFmMTQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9tZHAvbWRwNS9tZHA1X2NmZy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAv bWRwNS9tZHA1X2NmZy5oCj4gQEAgLTU4LDYgKzU4LDggQEAgc3RydWN0IG1kcDVfc21wX2Jsb2Nr IHsKPiAgIAlpbnQgcmVzZXJ2ZWRbTUFYX0NMSUVOVFNdOwkvKiAjIG9mIE1NQnMgYWxsb2NhdGVk IHBlciBjbGllbnQgKi8KPiAgIH07Cj4KPiArI2RlZmluZSBNRFA1X0lOVEZfTlVNX01BWAk1Cj4g Kwo+ICAgc3RydWN0IG1kcDVfY2ZnX2h3IHsKPiAgIAljaGFyICAqbmFtZTsKPgo+IEBAIC03MSw2 ICs3Myw4IEBAIHN0cnVjdCBtZHA1X2NmZ19odyB7Cj4gICAJc3RydWN0IG1kcDVfc3ViX2Jsb2Nr IGFkOwo+ICAgCXN0cnVjdCBtZHA1X3N1Yl9ibG9jayBpbnRmOwo+Cj4gKwl1MzIgaW50ZnNbTURQ NV9JTlRGX05VTV9NQVhdOyAvKiBhcnJheSBvZiBlbnVtIG1kcDVfaW50Zl90eXBlICovCj4gKwoK VGhlIGFycmF5IHR5cGUgY291bGQgYmUgImVudW0gbWRwNV9pbnRmX3R5cGUiIHJhdGhlciB0aGFu IHUzMi4KCj4gICAJdWludDMyX3QgbWF4X2NsazsKPiAgIH07Cj4KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL21z bS9tZHAvbWRwNS9tZHA1X2ttcy5jCj4gaW5kZXggMzkwZDlkMi4uOGNlYzAwZSAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfa21zLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfa21zLmMKPiBAQCAtMTYxLDYgKzE2MSw0NCBA QCBpbnQgbWRwNV9lbmFibGUoc3RydWN0IG1kcDVfa21zICptZHA1X2ttcykKPiAgIAlyZXR1cm4g MDsKPiAgIH0KPgo+ICtzdGF0aWMgaW50IGNvbnN0cnVjdF9lbmNvZGVyKHN0cnVjdCBtZHA1X2tt cyAqbWRwNV9rbXMsCj4gKwkJZW51bSBtZHA1X2ludGZfdHlwZSBpbnRmX3R5cGUsIGludCBpbnRm X251bSkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1kcDVfa21zLT5kZXY7Cj4g KwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKPiArCXN0cnVjdCBtZHA1X2ludGVyZmFjZSBpbnRm ID0gewo+ICsJCQkubnVtCT0gaW50Zl9udW0sCj4gKwkJCS50eXBlCT0gaW50Zl90eXBlLAo+ICsJ CQkubW9kZQk9IE1EUDVfSU5URl9NT0RFX05PTkUsCj4gKwl9Owo+ICsJaW50IHJldCA9IDA7Cj4g Kwo+ICsJZW5jb2RlciA9IG1kcDVfZW5jb2Rlcl9pbml0KGRldiwgJmludGYpOwo+ICsJaWYgKElT X0VSUihlbmNvZGVyKSkgewo+ICsJCXJldCA9IFBUUl9FUlIoZW5jb2Rlcik7Cj4gKwkJZGV2X2Vy cihkZXYtPmRldiwgImZhaWxlZCB0byBjb25zdHJ1Y3QgZW5jb2RlcjogJWRcbiIsIHJldCk7Cj4g KwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9ICgx IDw8IHByaXYtPm51bV9jcnRjcykgLSAxOwo+ICsJcHJpdi0+ZW5jb2RlcnNbcHJpdi0+bnVtX2Vu Y29kZXJzKytdID0gZW5jb2RlcjsKPiArCj4gKwlpZiAoaW50Zl90eXBlID09IElOVEZfSERNSSkg ewo+ICsJCXJldCA9IGhkbWlfbW9kZXNldF9pbml0KHByaXYtPmhkbWksIGRldiwgZW5jb2Rlcik7 Cj4gKwkJaWYgKHJldCkKPiArCQkJZGV2X2VycihkZXYtPmRldiwgImZhaWxlZCB0byBpbml0IEhE TUk6ICVkXG4iLCByZXQpOwo+ICsKPiArCX0gZWxzZSBpZiAoaW50Zl90eXBlID09IElOVEZfZURQ KSB7Cj4gKwkJLyogQ29uc3RydWN0IGJyaWRnZS9jb25uZWN0b3IgZm9yIGVEUDogKi8KPiArCQly ZXQgPSBtc21fZWRwX21vZGVzZXRfaW5pdChwcml2LT5lZHAsIGRldiwgZW5jb2Rlcik7Cj4gKwkJ aWYgKHJldCkKPiArCQkJZGV2X2VycihkZXYtPmRldiwgImZhaWxlZCB0byBpbml0IGVEUDogJWRc biIsIHJldCk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAgIHN0YXRpYyBp bnQgbW9kZXNldF9pbml0KHN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMpCj4gICB7Cj4gICAJc3Rh dGljIGNvbnN0IGVudW0gbWRwNV9waXBlIGNydGNzW10gPSB7Cj4gQEAgLTE3MSw3ICsyMDksNiBA QCBzdGF0aWMgaW50IG1vZGVzZXRfaW5pdChzdHJ1Y3QgbWRwNV9rbXMgKm1kcDVfa21zKQo+ICAg CX07Cj4gICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1kcDVfa21zLT5kZXY7Cj4gICAJc3Ry dWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXI7Cj4gICAJY29uc3Qgc3RydWN0IG1kcDVfY2ZnX2h3ICpod19j Zmc7Cj4gICAJaW50IGksIHJldDsKPgo+IEBAIC0yMjIsNTYgKzI1OSwyOSBAQCBzdGF0aWMgaW50 IG1vZGVzZXRfaW5pdChzdHJ1Y3QgbWRwNV9rbXMgKm1kcDVfa21zKQo+ICAgCQl9Cj4gICAJfQo+ Cj4gLQlpZiAocHJpdi0+aGRtaSkgewo+IC0JCXN0cnVjdCBtZHA1X2ludGVyZmFjZSBpbnRmID0g ewo+IC0JCQkJLm51bQk9IDMsCj4gLQkJCQkudHlwZQk9IElOVEZfSERNSSwKPiAtCQkJCS5tb2Rl CT0gTURQNV9JTlRGX01PREVfTk9ORSwKPiAtCQl9Owo+IC0KPiAtCQkvKiBDb25zdHJ1Y3QgZW5j b2RlciBmb3IgSERNSTogKi8KPiAtCQllbmNvZGVyID0gbWRwNV9lbmNvZGVyX2luaXQoZGV2LCAm aW50Zik7Cj4gLQkJaWYgKElTX0VSUihlbmNvZGVyKSkgewo+IC0JCQlkZXZfZXJyKGRldi0+ZGV2 LCAiZmFpbGVkIHRvIGNvbnN0cnVjdCBlbmNvZGVyXG4iKTsKPiAtCQkJcmV0ID0gUFRSX0VSUihl bmNvZGVyKTsKPiAtCQkJZ290byBmYWlsOwo+IC0JCX0KPiAtCj4gLQkJZW5jb2Rlci0+cG9zc2li bGVfY3J0Y3MgPSAoMSA8PCBwcml2LT5udW1fY3J0Y3MpIC0gMTs7Cj4gLQkJcHJpdi0+ZW5jb2Rl cnNbcHJpdi0+bnVtX2VuY29kZXJzKytdID0gZW5jb2RlcjsKPiAtCj4gLQkJcmV0ID0gaGRtaV9t b2Rlc2V0X2luaXQocHJpdi0+aGRtaSwgZGV2LCBlbmNvZGVyKTsKPiAtCQlpZiAocmV0KSB7Cj4g LQkJCWRldl9lcnIoZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBIRE1JOiAlZFxuIiwg cmV0KTsKPiAtCQkJZ290byBmYWlsOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlpZiAocHJpdi0+ZWRw KSB7Cj4gLQkJc3RydWN0IG1kcDVfaW50ZXJmYWNlIGludGYgPSB7Cj4gLQkJCQkubnVtCT0gMCwK PiAtCQkJCS50eXBlCT0gSU5URl9lRFAsCj4gLQkJCQkubW9kZQk9IE1EUDVfSU5URl9NT0RFX05P TkUsCj4gLQkJfTsKPiAtCj4gLQkJLyogQ29uc3RydWN0IGVuY29kZXIgZm9yIGVEUDogKi8KPiAt CQllbmNvZGVyID0gbWRwNV9lbmNvZGVyX2luaXQoZGV2LCAmaW50Zik7Cj4gLQkJaWYgKElTX0VS UihlbmNvZGVyKSkgewo+IC0JCQlkZXZfZXJyKGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNvbnN0cnVj dCBlRFAgZW5jb2RlclxuIik7Cj4gLQkJCXJldCA9IFBUUl9FUlIoZW5jb2Rlcik7Cj4gLQkJCWdv dG8gZmFpbDsKPiArCS8qIENvbnN0cnVjdCBleHRlcm5hbCBkaXNwbGF5IGludGVyZmFjZXMnIGVu Y29kZXJzOiAqLwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHdfY2ZnLT5pbnRmcyk7 IGkrKykgewo+ICsJCWVudW0gbWRwNV9pbnRmX3R5cGUgaW50Zl90eXBlID0gaHdfY2ZnLT5pbnRm c1tpXTsKPiArCj4gKwkJc3dpdGNoIChpbnRmX3R5cGUpIHsKPiArCQljYXNlIElOVEZfRElTQUJM RUQ6Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgSU5URl9lRFA6Cj4gKwkJCWlmIChwcml2LT5lZHAp Cj4gKwkJCQlyZXQgPSBjb25zdHJ1Y3RfZW5jb2RlcihtZHA1X2ttcywgSU5URl9lRFAsIGkpOwo+ ICsJCQlicmVhazsKPiArCQljYXNlIElOVEZfSERNSToKPiArCQkJaWYgKHByaXYtPmhkbWkpCj4g KwkJCQlyZXQgPSBjb25zdHJ1Y3RfZW5jb2RlcihtZHA1X2ttcywgSU5URl9IRE1JLCBpKTsKPiAr CQkJYnJlYWs7Cj4gKwkJZGVmYXVsdDoKPiArCQkJZGV2X2VycihkZXYtPmRldiwgInVua25vd24g aW50ZjogJWRcbiIsIGludGZfdHlwZSk7Cj4gKwkJCXJldCA9IC1FSU5WQUw7Cj4gKwkJCWJyZWFr Owo+ICAgCQl9Cj4KPiAtCQllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9ICgxIDw8IHByaXYtPm51 bV9jcnRjcykgLSAxOwo+IC0JCXByaXYtPmVuY29kZXJzW3ByaXYtPm51bV9lbmNvZGVycysrXSA9 IGVuY29kZXI7Cj4gLQo+IC0JCS8qIENvbnN0cnVjdCBicmlkZ2UvY29ubmVjdG9yIGZvciBlRFA6 ICovCj4gLQkJcmV0ID0gbXNtX2VkcF9tb2Rlc2V0X2luaXQocHJpdi0+ZWRwLCBkZXYsIGVuY29k ZXIpOwo+IC0JCWlmIChyZXQpIHsKPiAtCQkJZGV2X2VycihkZXYtPmRldiwgImZhaWxlZCB0byBp bml0aWFsaXplIGVEUDogJWRcbiIsCj4gLQkJCQkJCQkJCXJldCk7Cj4gKwkJaWYgKHJldCkKPiAg IAkJCWdvdG8gZmFpbDsKPiAtCQl9Cj4gICAJfQo+Cj4gICAJcmV0dXJuIDA7Cj4gQEAgLTQxNSw4 ICs0MjUsMTEgQEAgc3RydWN0IG1zbV9rbXMgKm1kcDVfa21zX2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKPiAgIAkgKiB3ZSBkb24ndCBkaXNhYmxlKToKPiAgIAkgKi8KPiAgIAltZHA1X2Vu YWJsZShtZHA1X2ttcyk7Cj4gLQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5ody0+aW50Zi5jb3Vu dDsgaSsrKQo+ICsJZm9yIChpID0gMDsgaSA8IE1EUDVfSU5URl9OVU1fTUFYOyBpKyspIHsKPiAr CQlpZiAoTURQNV9JTlRGX0lTX1ZJUlRVQUxfRElTUExBWShjb25maWctPmh3LT5pbnRmc1tpXSkp Cj4gKwkJCWNvbnRpbnVlOwoKVGhpcyBtYXkgbm90IGJlIHN1ZmZpY2llbnQgdG8gcHJldmVudCBy ZWdpc3RlciB3cml0ZXMgdG8gaW50ZXJmYWNlcyB0aGF0IApkb24ndCBleGlzdC4gV2UnZCBwcm9i YWJseSBuZWVkOgoKCWlmKE1EUDVfSU5URl9JU19WSVJUVUFMX0RJU1BMQVkoY29uZmlnLT5ody0+ aW50ZnNbaV0pIHx8CgkJCWNvbmZpZy0+aHctPmludGZzW2ldID09IElOVEZfRElTQUJMRUQpCgkJ Y29udGludWU7Cgo+ICAgCQltZHA1X3dyaXRlKG1kcDVfa21zLCBSRUdfTURQNV9JTlRGX1RJTUlO R19FTkdJTkVfRU4oaSksIDApOwo+ICsJfQoKV3JpdGluZyB0byByZWdpc3RlcnMgZm9yIGEgbm9u IGV4aXN0ZW50IGludGVyZmFjZSBzaG91bGRuJ3QgZG8gYW55IGhhcm0sIApidXQgaXQncyBiZXN0 IHRvIGJlIHNhZmUgOikKCj4gICAJbWRwNV9kaXNhYmxlKG1kcDVfa21zKTsKPiAgIAltZGVsYXko MTYpOwo+Cj4KClRoYW5rcywKQXJjaGl0CgotLSAKUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIs IEluYy4gaXMgYSBtZW1iZXIgb2YgQ29kZSBBdXJvcmEgRm9ydW0sCmEgTGludXggRm91bmRhdGlv biBDb2xsYWJvcmF0aXZlIFByb2plY3QKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758226AbbCDGNx (ORCPT ); Wed, 4 Mar 2015 01:13:53 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:41929 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757515AbbCDGNv (ORCPT ); Wed, 4 Mar 2015 01:13:51 -0500 Message-ID: <54F6A299.9090201@codeaurora.org> Date: Wed, 04 Mar 2015 11:43:45 +0530 From: Archit Taneja User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.1.2 MIME-Version: 1.0 To: Stephane Viau , dri-devel@lists.freedesktop.org CC: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 4/4] drm/msm/mdp5: Make the intf connection in config module References: <1425407775-7704-1-git-send-email-sviau@codeaurora.org> <1425407775-7704-5-git-send-email-sviau@codeaurora.org> In-Reply-To: <1425407775-7704-5-git-send-email-sviau@codeaurora.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On 03/04/2015 12:06 AM, Stephane Viau wrote: > Up until now, we assume that eDP is tight to intf_0 and HDMI to > intf_3. This information shall actually come from the mdp5_cfg > module since it can change from one chip to another. > > Signed-off-by: Stephane Viau > --- > drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.c | 8 +++ > drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.h | 4 ++ > drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c | 111 ++++++++++++++++++-------------- > 3 files changed, 74 insertions(+), 49 deletions(-) > > diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.c > index 72c075a..8bee023 100644 > --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.c > +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.c > @@ -62,6 +62,10 @@ const struct mdp5_cfg_hw msm8x74_config = { > .count = 4, > .base = { 0x12500, 0x12700, 0x12900, 0x12b00 }, > }, > + .intfs = { > + [0] = INTF_eDP, > + [3] = INTF_HDMI, > + }, > .max_clk = 200000000, > }; > > @@ -111,6 +115,10 @@ const struct mdp5_cfg_hw apq8084_config = { > .count = 5, > .base = { 0x12500, 0x12700, 0x12900, 0x12b00, 0x12d00 }, > }, > + .intfs = { > + [0] = INTF_eDP, > + [3] = INTF_HDMI, > + }, > .max_clk = 320000000, > }; > > diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.h b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.h > index be149b3..4e91f14 100644 > --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.h > +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.h > @@ -58,6 +58,8 @@ struct mdp5_smp_block { > int reserved[MAX_CLIENTS]; /* # of MMBs allocated per client */ > }; > > +#define MDP5_INTF_NUM_MAX 5 > + > struct mdp5_cfg_hw { > char *name; > > @@ -71,6 +73,8 @@ struct mdp5_cfg_hw { > struct mdp5_sub_block ad; > struct mdp5_sub_block intf; > > + u32 intfs[MDP5_INTF_NUM_MAX]; /* array of enum mdp5_intf_type */ > + The array type could be "enum mdp5_intf_type" rather than u32. > uint32_t max_clk; > }; > > diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c > index 390d9d2..8cec00e 100644 > --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c > +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c > @@ -161,6 +161,44 @@ int mdp5_enable(struct mdp5_kms *mdp5_kms) > return 0; > } > > +static int construct_encoder(struct mdp5_kms *mdp5_kms, > + enum mdp5_intf_type intf_type, int intf_num) > +{ > + struct drm_device *dev = mdp5_kms->dev; > + struct msm_drm_private *priv = dev->dev_private; > + struct drm_encoder *encoder; > + struct mdp5_interface intf = { > + .num = intf_num, > + .type = intf_type, > + .mode = MDP5_INTF_MODE_NONE, > + }; > + int ret = 0; > + > + encoder = mdp5_encoder_init(dev, &intf); > + if (IS_ERR(encoder)) { > + ret = PTR_ERR(encoder); > + dev_err(dev->dev, "failed to construct encoder: %d\n", ret); > + return ret; > + } > + > + encoder->possible_crtcs = (1 << priv->num_crtcs) - 1; > + priv->encoders[priv->num_encoders++] = encoder; > + > + if (intf_type == INTF_HDMI) { > + ret = hdmi_modeset_init(priv->hdmi, dev, encoder); > + if (ret) > + dev_err(dev->dev, "failed to init HDMI: %d\n", ret); > + > + } else if (intf_type == INTF_eDP) { > + /* Construct bridge/connector for eDP: */ > + ret = msm_edp_modeset_init(priv->edp, dev, encoder); > + if (ret) > + dev_err(dev->dev, "failed to init eDP: %d\n", ret); > + } > + > + return ret; > +} > + > static int modeset_init(struct mdp5_kms *mdp5_kms) > { > static const enum mdp5_pipe crtcs[] = { > @@ -171,7 +209,6 @@ static int modeset_init(struct mdp5_kms *mdp5_kms) > }; > struct drm_device *dev = mdp5_kms->dev; > struct msm_drm_private *priv = dev->dev_private; > - struct drm_encoder *encoder; > const struct mdp5_cfg_hw *hw_cfg; > int i, ret; > > @@ -222,56 +259,29 @@ static int modeset_init(struct mdp5_kms *mdp5_kms) > } > } > > - if (priv->hdmi) { > - struct mdp5_interface intf = { > - .num = 3, > - .type = INTF_HDMI, > - .mode = MDP5_INTF_MODE_NONE, > - }; > - > - /* Construct encoder for HDMI: */ > - encoder = mdp5_encoder_init(dev, &intf); > - if (IS_ERR(encoder)) { > - dev_err(dev->dev, "failed to construct encoder\n"); > - ret = PTR_ERR(encoder); > - goto fail; > - } > - > - encoder->possible_crtcs = (1 << priv->num_crtcs) - 1;; > - priv->encoders[priv->num_encoders++] = encoder; > - > - ret = hdmi_modeset_init(priv->hdmi, dev, encoder); > - if (ret) { > - dev_err(dev->dev, "failed to initialize HDMI: %d\n", ret); > - goto fail; > - } > - } > - > - if (priv->edp) { > - struct mdp5_interface intf = { > - .num = 0, > - .type = INTF_eDP, > - .mode = MDP5_INTF_MODE_NONE, > - }; > - > - /* Construct encoder for eDP: */ > - encoder = mdp5_encoder_init(dev, &intf); > - if (IS_ERR(encoder)) { > - dev_err(dev->dev, "failed to construct eDP encoder\n"); > - ret = PTR_ERR(encoder); > - goto fail; > + /* Construct external display interfaces' encoders: */ > + for (i = 0; i < ARRAY_SIZE(hw_cfg->intfs); i++) { > + enum mdp5_intf_type intf_type = hw_cfg->intfs[i]; > + > + switch (intf_type) { > + case INTF_DISABLED: > + break; > + case INTF_eDP: > + if (priv->edp) > + ret = construct_encoder(mdp5_kms, INTF_eDP, i); > + break; > + case INTF_HDMI: > + if (priv->hdmi) > + ret = construct_encoder(mdp5_kms, INTF_HDMI, i); > + break; > + default: > + dev_err(dev->dev, "unknown intf: %d\n", intf_type); > + ret = -EINVAL; > + break; > } > > - encoder->possible_crtcs = (1 << priv->num_crtcs) - 1; > - priv->encoders[priv->num_encoders++] = encoder; > - > - /* Construct bridge/connector for eDP: */ > - ret = msm_edp_modeset_init(priv->edp, dev, encoder); > - if (ret) { > - dev_err(dev->dev, "failed to initialize eDP: %d\n", > - ret); > + if (ret) > goto fail; > - } > } > > return 0; > @@ -415,8 +425,11 @@ struct msm_kms *mdp5_kms_init(struct drm_device *dev) > * we don't disable): > */ > mdp5_enable(mdp5_kms); > - for (i = 0; i < config->hw->intf.count; i++) > + for (i = 0; i < MDP5_INTF_NUM_MAX; i++) { > + if (MDP5_INTF_IS_VIRTUAL_DISPLAY(config->hw->intfs[i])) > + continue; This may not be sufficient to prevent register writes to interfaces that don't exist. We'd probably need: if(MDP5_INTF_IS_VIRTUAL_DISPLAY(config->hw->intfs[i]) || config->hw->intfs[i] == INTF_DISABLED) continue; > mdp5_write(mdp5_kms, REG_MDP5_INTF_TIMING_ENGINE_EN(i), 0); > + } Writing to registers for a non existent interface shouldn't do any harm, but it's best to be safe :) > mdp5_disable(mdp5_kms); > mdelay(16); > > Thanks, Archit -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project