From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: Re: [PATCH v6 2/2] drm/bridge: Add I2C based driver for ps8640 bridge Date: Tue, 15 Dec 2015 12:47:25 +0530 Message-ID: <566FBE85.4060708@codeaurora.org> References: <1450150210-21951-1-git-send-email-jitao.shi@mediatek.com> <1450150210-21951-2-git-send-email-jitao.shi@mediatek.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1450150210-21951-2-git-send-email-jitao.shi@mediatek.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Jitao Shi , Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell , Kumar Gala , David Airlie , Matthias Brugger Cc: devicetree@vger.kernel.org, eddie.huang@mediatek.com, Vincent Palatin , Sascha Hauer , srv_heupstream@mediatek.com, bibby.hsieh@mediatek.com, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, cawa.cheng@mediatek.com, yingjoe.chen@mediatek.com, Russell King , Andy Yan , Thierry Reding , Ajay Kumar , linux-arm-kernel@lists.infradead.org, Rahul Sharma List-Id: linux-mediatek@lists.infradead.org SGksCgpPbiAxMi8xNS8yMDE1IDA5OjAwIEFNLCBKaXRhbyBTaGkgd3JvdGU6Cj4gVGhpcyBwYXRj aCBhZGRzIGRybV9icmlkZ2UgZHJpdmVyIGZvciBwYXJhZGUgRFNJIHRvIGVEUCBicmlkZ2UgY2hp cC4KPgo+IFNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4K PiAtLS0KPiBDaGFuZ2VzIHNpbmNlIHY1Cj4gLWZpeCBjb21waWxlIGVycm9ycyB3aGVuIENPTkZJ R19HUElPTElCPW4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyAgICAg ICAgIHwgICAxMCArCj4gICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlICAgICAgICB8 ICAgIDEgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjQwLmMgfCAgNDcy ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICAzIGZpbGVzIGNoYW5nZWQsIDQ4 MyBpbnNlcnRpb25zKCspCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9wYXJhZGUtcHM4NjQwLmMKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKPiBpbmRleCA2ZGRk ZDM5Li5kY2ZkYmM5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZp Zwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwo+IEBAIC00MSw0ICs0MSwx NCBAQCBjb25maWcgRFJNX1BBUkFERV9QUzg2MjIKPiAgIAktLS1oZWxwLS0tCj4gICAJICBQYXJh ZGUgZURQLUxWRFMgYnJpZGdlIGNoaXAgZHJpdmVyLgo+Cj4gK2NvbmZpZyBEUk1fUEFSQURFX1BT ODY0MAo+ICsJdHJpc3RhdGUgIlBhcmFkZSBQUzg2NDAgTUlQSSBEU0kgdG8gZURQIENvbnZlcnRl ciIKPiArCWRlcGVuZHMgb24gT0YKPiArCXNlbGVjdCBEUk1fS01TX0hFTFBFUgo+ICsJc2VsZWN0 IERSTV9QQU5FTAo+ICsJLS0taGVscC0tLQo+ICsJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91 IGhhdmUgUFM4NjQwIGZvciBkaXNwbGF5Cj4gKwkgIFRoZSBQUzg2NDAgaXMgYSBoaWdoLXBlcmZv cm1hbmNlIGFuZCBsb3ctcG93ZXIKPiArCSAgTUlQSSBEU0kgdG8gZURQIGNvbnZlcnRlcgo+ICsK PiAgIGVuZG1lbnUKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKPiBpbmRleCBkNGUyOGJlLi4yNzJl M2MwMSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQo+IEBAIC00LDMgKzQsNCBAQCBvYmot JChDT05GSUdfRFJNX0RXX0hETUkpICs9IGR3X2hkbWkubwo+ICAgb2JqLSQoQ09ORklHX0RSTV9E V19IRE1JX0FIQl9BVURJTykgKz0gZHdfaGRtaS1haGItYXVkaW8ubwo+ICAgb2JqLSQoQ09ORklH X0RSTV9OWFBfUFROMzQ2MCkgKz0gbnhwLXB0bjM0NjAubwo+ICAgb2JqLSQoQ09ORklHX0RSTV9Q QVJBREVfUFM4NjIyKSArPSBwYXJhZGUtcHM4NjIyLm8KPiArb2JqLSQoQ09ORklHX0RSTV9QQVJB REVfUFM4NjQwKSArPSBwYXJhZGUtcHM4NjQwLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjQwLmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFk ZS1wczg2NDAuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYmYwYzNj MzcKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUt cHM4NjQwLmMKPiBAQCAtMCwwICsxLDQ3MiBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIw MTQgTWVkaWFUZWsgSW5jLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwo+ ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiAr ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgv ZGVsYXkuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+ICsjaW5jbHVkZSA8bGludXgvZ3Bp by5oPgo+ICsjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvaTJjLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L29mLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9v Zl9ncmFwaC5oPgo+ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Cj4gKwo+ ICsjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgo+ICsKPiArI2luY2x1ZGUgPGRybVAuaD4KPiAr I2luY2x1ZGUgPGRybV9jcnRjX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtX2NydGMuaD4KPiAr I2luY2x1ZGUgPGRybV9taXBpX2RzaS5oPgoKVGhpcyBkb2Vzbid0IHNlZW0gdG8gYmUgdXNlZCBh dCB0aGUgbW9tZW50LgoKPHNuaXA+Cgo+ICsKPiArc3RhdGljIGludCBwczg2NDBfcHJvYmUoc3Ry dWN0IGkyY19jbGllbnQgKmNsaWVudCwKPiArCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQg KmlkKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7Cj4gKwlzdHJ1 Y3QgcHM4NjQwICpwc19icmlkZ2U7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5v Zl9ub2RlOwo+ICsJc3RydWN0IGRldmljZV9ub2RlICpwb3J0LCAqb3V0X2VwOwo+ICsJc3RydWN0 IGRldmljZV9ub2RlICpwYW5lbF9ub2RlID0gTlVMTDsKPiArCWludCBpLCByZXQ7Cj4gKwo+ICsJ cHNfYnJpZGdlID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwc19icmlkZ2UpLCBHRlBfS0VS TkVMKTsKPiArCWlmICghcHNfYnJpZGdlKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCS8q IHBvcnRAMSBpcyBwczg2NDAgb3V0cHV0IHBvcnQgKi8KPiArCXBvcnQgPSBvZl9ncmFwaF9nZXRf cG9ydF9ieV9pZChucCwgMSk7Cj4gKwlpZiAocG9ydCkgewo+ICsJCW91dF9lcCA9IG9mX2dldF9j aGlsZF9ieV9uYW1lKHBvcnQsICJlbmRwb2ludCIpOwo+ICsJCW9mX25vZGVfcHV0KHBvcnQpOwo+ ICsJCWlmIChvdXRfZXApIHsKPiArCQkJcGFuZWxfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVf cG9ydF9wYXJlbnQob3V0X2VwKTsKPiArCQkJb2Zfbm9kZV9wdXQob3V0X2VwKTsKPiArCQl9Cj4g Kwl9Cj4gKwlpZiAocGFuZWxfbm9kZSkgewo+ICsJCXBzX2JyaWRnZS0+cGFuZWwgPSBvZl9kcm1f ZmluZF9wYW5lbChwYW5lbF9ub2RlKTsKPiArCQlvZl9ub2RlX3B1dChwYW5lbF9ub2RlKTsKPiAr CQlpZiAoIXBzX2JyaWRnZS0+cGFuZWwpCj4gKwkJCXJldHVybiAtRVBST0JFX0RFRkVSOwo+ICsJ fQoKVGhlIGRyaXZlciByZXRyaWV2ZXMgdGhlIHBhbmVsIGZyb20gdGhlIG91dHB1dCBwb3J0IHZp YSBEVCwgYnV0IGRvZXNuJ3QKcmV0cmlldmUgdGhlIERTSSBob3N0IGZyb20gdGhlIGlucHV0IHBv cnQ/CgpXb3VsZG4ndCB0aGlzIGRyaXZlciBuZWVkIHRvIGNhbGwgYSAibWlwaV9kc2lfYXR0YWNo IiBhdCBzb21lIHBvaW50IHRvCmxpbmsgd2l0aCB0aGUgRFNJIGhvc3QgKGFuZCBwYXNzIHBhcmFt ZXRlcnMgbGlrZSBudW1iZXIgb2YgbGFuZXMsIGNvbG9yCmZvcm1hdCBldGMpPwoKSSd2ZSBiZWVu IHdvcmtpbmcgb24gYSBwYXRjaHNldFsxXSB3aGljaCBsZXRzIGkyYyBkcml2ZXJzIGNyZWF0ZSBt aXBpCmRzaSBkZXZpY2VzLiBJIHRoaW5rIHRoaXMgd291bGQgYmUgbmVlZGVkIGZvciB0aGUgcHM4 NjQwIGRyaXZlciB0b28uCgpbMV0gaHR0cHM6Ly9sa21sLm9yZy9sa21sLzIwMTUvMTIvMTAvMjgz CgpBcmNoaXQKCj4gKwo+ICsJcHNfYnJpZGdlLT5wYWdlWzBdID0gY2xpZW50Owo+ICsJZm9yIChp ID0gMTsgaSA8IDY7IGkrKykKPiArCQlwc19icmlkZ2UtPnBhZ2VbaV0gPSBpMmNfbmV3X2R1bW15 KGNsaWVudC0+YWRhcHRlciwKPiArCQkJCQkJICAgY2xpZW50LT5hZGRyICsgaSk7Cj4gKwo+ICsJ cHNfYnJpZGdlLT5wd3JfM3YzX3N1cHBseSA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJ2ZGQz MyIpOwo+ICsJaWYgKElTX0VSUihwc19icmlkZ2UtPnB3cl8zdjNfc3VwcGx5KSkgewo+ICsJCXJl dCA9IFBUUl9FUlIocHNfYnJpZGdlLT5wd3JfM3YzX3N1cHBseSk7Cj4gKwkJZGV2X2VycihkZXYs ICJjYW5ub3QgZ2V0IHZkZDMzIHN1cHBseTogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsK PiArCX0KPiArCj4gKwlwc19icmlkZ2UtPnB3cl8xdjJfc3VwcGx5ID0gZGV2bV9yZWd1bGF0b3Jf Z2V0KGRldiwgInZkZDEyIik7Cj4gKwlpZiAoSVNfRVJSKHBzX2JyaWRnZS0+cHdyXzF2Ml9zdXBw bHkpKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihwc19icmlkZ2UtPnB3cl8xdjJfc3VwcGx5KTsKPiAr CQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgdmRkMTIgc3VwcGx5OiAlZFxuIiwgcmV0KTsKPiAr CQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXBzX2JyaWRnZS0+Z3Bpb19tb2RlX3NlbF9uID0g ZGV2bV9ncGlvZF9nZXQoJmNsaWVudC0+ZGV2LCAibW9kZS1zZWwiLAo+ICsJCQkJCQkgICAgR1BJ T0RfT1VUX0hJR0gpOwo+ICsJaWYgKElTX0VSUihwc19icmlkZ2UtPmdwaW9fbW9kZV9zZWxfbikp IHsKPiArCQlyZXQgPSBQVFJfRVJSKHBzX2JyaWRnZS0+Z3Bpb19tb2RlX3NlbF9uKTsKPiArCQlk ZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgZ3Bpb19tb2RlX3NlbF9uICVkXG4iLCByZXQpOwo+ICsJ CXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcHNfYnJpZGdlLT5ncGlvX3NscF9uID0gZGV2bV9n cGlvZF9nZXQoJmNsaWVudC0+ZGV2LCAic2xlZXAiLAo+ICsJCQkJCSAgICAgICBHUElPRF9PVVRf SElHSCk7Cj4gKwlpZiAoSVNfRVJSKHBzX2JyaWRnZS0+Z3Bpb19zbHBfbikpIHsKPiArCQlyZXQg PSBQVFJfRVJSKHBzX2JyaWRnZS0+Z3Bpb19zbHBfbik7Cj4gKwkJZGV2X2VycihkZXYsICJjYW5u b3QgZ2V0IGdwaW9fc2xwX246ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4g Kwo+ICsJcHNfYnJpZGdlLT5ncGlvX3JzdF9uID0gZGV2bV9ncGlvZF9nZXQoJmNsaWVudC0+ZGV2 LCAicmVzZXQiLAo+ICsJCQkJCSAgICAgICBHUElPRF9PVVRfSElHSCk7Cj4gKwlpZiAoSVNfRVJS KHBzX2JyaWRnZS0+Z3Bpb19yc3RfbikpIHsKPiArCQlyZXQgPSBQVFJfRVJSKHBzX2JyaWRnZS0+ Z3Bpb19yc3Rfbik7Cj4gKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IGdwaW9fcnN0X246ICVk XG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcHNfYnJpZGdlLT5icmlk Z2UuZnVuY3MgPSAmcHM4NjQwX2JyaWRnZV9mdW5jczsKPiArCXBzX2JyaWRnZS0+YnJpZGdlLm9m X25vZGUgPSBkZXYtPm9mX25vZGU7Cj4gKwlyZXQgPSBkcm1fYnJpZGdlX2FkZCgmcHNfYnJpZGdl LT5icmlkZ2UpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFk ZCBicmlkZ2U6ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJaTJj X3NldF9jbGllbnRkYXRhKGNsaWVudCwgcHNfYnJpZGdlKTsKPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIGludCBwczg2NDBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGll bnQpCj4gK3sKPiArCXN0cnVjdCBwczg2NDAgKnBzX2JyaWRnZSA9IGkyY19nZXRfY2xpZW50ZGF0 YShjbGllbnQpOwo+ICsKPiArCWRybV9icmlkZ2VfcmVtb3ZlKCZwc19icmlkZ2UtPmJyaWRnZSk7 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2Rl dmljZV9pZCBwczg2NDBfaTJjX3RhYmxlW10gPSB7Cj4gKwl7InBhcmFkZSxwczg2NDAiLCAwfSwK PiArCXt9LAo+ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgcHM4NjQwX2kyY190YWJs ZSk7Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBwczg2NDBfbWF0Y2hb XSA9IHsKPiArCXsgLmNvbXBhdGlibGUgPSAicGFyYWRlLHBzODY0MCIgfSwKPiArCXt9LAo+ICt9 Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBwczg2NDBfbWF0Y2gpOwo+ICsKPiArc3RhdGlj IHN0cnVjdCBpMmNfZHJpdmVyIHBzODY0MF9kcml2ZXIgPSB7Cj4gKwkuaWRfdGFibGUgPSBwczg2 NDBfaTJjX3RhYmxlLAo+ICsJLnByb2JlID0gcHM4NjQwX3Byb2JlLAo+ICsJLnJlbW92ZSA9IHBz ODY0MF9yZW1vdmUsCj4gKwkuZHJpdmVyID0gewo+ICsJCS5uYW1lID0gInBhcmFkZSxwczg2NDAi LAo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IHBzODY0MF9tYXRjaCwKPiArCX0sCj4gK307Cj4gK21v ZHVsZV9pMmNfZHJpdmVyKHBzODY0MF9kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0FVVEhPUigiSml0 YW8gU2hpIDxqaXRhby5zaGlAbWVkaWF0ZWsuY29tPiIpOwo+ICtNT0RVTEVfQVVUSE9SKCJDSyBI dSA8Y2suaHVAbWVkaWF0ZWsuY29tPiIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlBBUkFERSBw czg2NDAgRFNJLWVEUCBjb252ZXJ0ZXIgZHJpdmVyIik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwg djIiKTsKPgoKLS0gClRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1l bWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgCkZvcnVtLCBob3N0ZWQgYnkgVGhlIExpbnV4IEZvdW5k YXRpb24KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 From: architt@codeaurora.org (Archit Taneja) Date: Tue, 15 Dec 2015 12:47:25 +0530 Subject: [PATCH v6 2/2] drm/bridge: Add I2C based driver for ps8640 bridge In-Reply-To: <1450150210-21951-2-git-send-email-jitao.shi@mediatek.com> References: <1450150210-21951-1-git-send-email-jitao.shi@mediatek.com> <1450150210-21951-2-git-send-email-jitao.shi@mediatek.com> Message-ID: <566FBE85.4060708@codeaurora.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi, On 12/15/2015 09:00 AM, Jitao Shi wrote: > This patch adds drm_bridge driver for parade DSI to eDP bridge chip. > > Signed-off-by: Jitao Shi > --- > Changes since v5 > -fix compile errors when CONFIG_GPIOLIB=n > --- > drivers/gpu/drm/bridge/Kconfig | 10 + > drivers/gpu/drm/bridge/Makefile | 1 + > drivers/gpu/drm/bridge/parade-ps8640.c | 472 ++++++++++++++++++++++++++++++++ > 3 files changed, 483 insertions(+) > create mode 100644 drivers/gpu/drm/bridge/parade-ps8640.c > > diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig > index 6dddd39..dcfdbc9 100644 > --- a/drivers/gpu/drm/bridge/Kconfig > +++ b/drivers/gpu/drm/bridge/Kconfig > @@ -41,4 +41,14 @@ config DRM_PARADE_PS8622 > ---help--- > Parade eDP-LVDS bridge chip driver. > > +config DRM_PARADE_PS8640 > + tristate "Parade PS8640 MIPI DSI to eDP Converter" > + depends on OF > + select DRM_KMS_HELPER > + select DRM_PANEL > + ---help--- > + Choose this option if you have PS8640 for display > + The PS8640 is a high-performance and low-power > + MIPI DSI to eDP converter > + > endmenu > diff --git a/drivers/gpu/drm/bridge/Makefile b/drivers/gpu/drm/bridge/Makefile > index d4e28be..272e3c01 100644 > --- a/drivers/gpu/drm/bridge/Makefile > +++ b/drivers/gpu/drm/bridge/Makefile > @@ -4,3 +4,4 @@ obj-$(CONFIG_DRM_DW_HDMI) += dw_hdmi.o > obj-$(CONFIG_DRM_DW_HDMI_AHB_AUDIO) += dw_hdmi-ahb-audio.o > obj-$(CONFIG_DRM_NXP_PTN3460) += nxp-ptn3460.o > obj-$(CONFIG_DRM_PARADE_PS8622) += parade-ps8622.o > +obj-$(CONFIG_DRM_PARADE_PS8640) += parade-ps8640.o > diff --git a/drivers/gpu/drm/bridge/parade-ps8640.c b/drivers/gpu/drm/bridge/parade-ps8640.c > new file mode 100644 > index 0000000..bf0c3c37 > --- /dev/null > +++ b/drivers/gpu/drm/bridge/parade-ps8640.c > @@ -0,0 +1,472 @@ > +/* > + * Copyright (c) 2014 MediaTek Inc. > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include > + > +#include > +#include > +#include > +#include This doesn't seem to be used at the moment. > + > +static int ps8640_probe(struct i2c_client *client, > + const struct i2c_device_id *id) > +{ > + struct device *dev = &client->dev; > + struct ps8640 *ps_bridge; > + struct device_node *np = dev->of_node; > + struct device_node *port, *out_ep; > + struct device_node *panel_node = NULL; > + int i, ret; > + > + ps_bridge = devm_kzalloc(dev, sizeof(*ps_bridge), GFP_KERNEL); > + if (!ps_bridge) > + return -ENOMEM; > + > + /* port at 1 is ps8640 output port */ > + port = of_graph_get_port_by_id(np, 1); > + if (port) { > + out_ep = of_get_child_by_name(port, "endpoint"); > + of_node_put(port); > + if (out_ep) { > + panel_node = of_graph_get_remote_port_parent(out_ep); > + of_node_put(out_ep); > + } > + } > + if (panel_node) { > + ps_bridge->panel = of_drm_find_panel(panel_node); > + of_node_put(panel_node); > + if (!ps_bridge->panel) > + return -EPROBE_DEFER; > + } The driver retrieves the panel from the output port via DT, but doesn't retrieve the DSI host from the input port? Wouldn't this driver need to call a "mipi_dsi_attach" at some point to link with the DSI host (and pass parameters like number of lanes, color format etc)? I've been working on a patchset[1] which lets i2c drivers create mipi dsi devices. I think this would be needed for the ps8640 driver too. [1] https://lkml.org/lkml/2015/12/10/283 Archit > + > + ps_bridge->page[0] = client; > + for (i = 1; i < 6; i++) > + ps_bridge->page[i] = i2c_new_dummy(client->adapter, > + client->addr + i); > + > + ps_bridge->pwr_3v3_supply = devm_regulator_get(dev, "vdd33"); > + if (IS_ERR(ps_bridge->pwr_3v3_supply)) { > + ret = PTR_ERR(ps_bridge->pwr_3v3_supply); > + dev_err(dev, "cannot get vdd33 supply: %d\n", ret); > + return ret; > + } > + > + ps_bridge->pwr_1v2_supply = devm_regulator_get(dev, "vdd12"); > + if (IS_ERR(ps_bridge->pwr_1v2_supply)) { > + ret = PTR_ERR(ps_bridge->pwr_1v2_supply); > + dev_err(dev, "cannot get vdd12 supply: %d\n", ret); > + return ret; > + } > + > + ps_bridge->gpio_mode_sel_n = devm_gpiod_get(&client->dev, "mode-sel", > + GPIOD_OUT_HIGH); > + if (IS_ERR(ps_bridge->gpio_mode_sel_n)) { > + ret = PTR_ERR(ps_bridge->gpio_mode_sel_n); > + dev_err(dev, "cannot get gpio_mode_sel_n %d\n", ret); > + return ret; > + } > + > + ps_bridge->gpio_slp_n = devm_gpiod_get(&client->dev, "sleep", > + GPIOD_OUT_HIGH); > + if (IS_ERR(ps_bridge->gpio_slp_n)) { > + ret = PTR_ERR(ps_bridge->gpio_slp_n); > + dev_err(dev, "cannot get gpio_slp_n: %d\n", ret); > + return ret; > + } > + > + ps_bridge->gpio_rst_n = devm_gpiod_get(&client->dev, "reset", > + GPIOD_OUT_HIGH); > + if (IS_ERR(ps_bridge->gpio_rst_n)) { > + ret = PTR_ERR(ps_bridge->gpio_rst_n); > + dev_err(dev, "cannot get gpio_rst_n: %d\n", ret); > + return ret; > + } > + > + ps_bridge->bridge.funcs = &ps8640_bridge_funcs; > + ps_bridge->bridge.of_node = dev->of_node; > + ret = drm_bridge_add(&ps_bridge->bridge); > + if (ret) { > + dev_err(dev, "Failed to add bridge: %d\n", ret); > + return ret; > + } > + > + i2c_set_clientdata(client, ps_bridge); > + > + return 0; > +} > + > +static int ps8640_remove(struct i2c_client *client) > +{ > + struct ps8640 *ps_bridge = i2c_get_clientdata(client); > + > + drm_bridge_remove(&ps_bridge->bridge); > + > + return 0; > +} > + > +static const struct i2c_device_id ps8640_i2c_table[] = { > + {"parade,ps8640", 0}, > + {}, > +}; > +MODULE_DEVICE_TABLE(i2c, ps8640_i2c_table); > + > +static const struct of_device_id ps8640_match[] = { > + { .compatible = "parade,ps8640" }, > + {}, > +}; > +MODULE_DEVICE_TABLE(of, ps8640_match); > + > +static struct i2c_driver ps8640_driver = { > + .id_table = ps8640_i2c_table, > + .probe = ps8640_probe, > + .remove = ps8640_remove, > + .driver = { > + .name = "parade,ps8640", > + .of_match_table = ps8640_match, > + }, > +}; > +module_i2c_driver(ps8640_driver); > + > +MODULE_AUTHOR("Jitao Shi "); > +MODULE_AUTHOR("CK Hu "); > +MODULE_DESCRIPTION("PARADE ps8640 DSI-eDP converter driver"); > +MODULE_LICENSE("GPL v2"); > -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932119AbbLOHRw (ORCPT ); Tue, 15 Dec 2015 02:17:52 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:52386 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752801AbbLOHRu (ORCPT ); Tue, 15 Dec 2015 02:17:50 -0500 Subject: Re: [PATCH v6 2/2] drm/bridge: Add I2C based driver for ps8640 bridge To: Jitao Shi , Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell , Kumar Gala , David Airlie , Matthias Brugger References: <1450150210-21951-1-git-send-email-jitao.shi@mediatek.com> <1450150210-21951-2-git-send-email-jitao.shi@mediatek.com> Cc: Thierry Reding , Ajay Kumar , Inki Dae , Rahul Sharma , Sean Paul , Vincent Palatin , Andy Yan , Philipp Zabel , Russell King , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, srv_heupstream@mediatek.com, Sascha Hauer , yingjoe.chen@mediatek.com, eddie.huang@mediatek.com, cawa.cheng@mediatek.com, bibby.hsieh@mediatek.com, ck.hu@mediatek.com From: Archit Taneja Message-ID: <566FBE85.4060708@codeaurora.org> Date: Tue, 15 Dec 2015 12:47:25 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: <1450150210-21951-2-git-send-email-jitao.shi@mediatek.com> Content-Type: text/plain; charset=windows-1252; 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 12/15/2015 09:00 AM, Jitao Shi wrote: > This patch adds drm_bridge driver for parade DSI to eDP bridge chip. > > Signed-off-by: Jitao Shi > --- > Changes since v5 > -fix compile errors when CONFIG_GPIOLIB=n > --- > drivers/gpu/drm/bridge/Kconfig | 10 + > drivers/gpu/drm/bridge/Makefile | 1 + > drivers/gpu/drm/bridge/parade-ps8640.c | 472 ++++++++++++++++++++++++++++++++ > 3 files changed, 483 insertions(+) > create mode 100644 drivers/gpu/drm/bridge/parade-ps8640.c > > diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig > index 6dddd39..dcfdbc9 100644 > --- a/drivers/gpu/drm/bridge/Kconfig > +++ b/drivers/gpu/drm/bridge/Kconfig > @@ -41,4 +41,14 @@ config DRM_PARADE_PS8622 > ---help--- > Parade eDP-LVDS bridge chip driver. > > +config DRM_PARADE_PS8640 > + tristate "Parade PS8640 MIPI DSI to eDP Converter" > + depends on OF > + select DRM_KMS_HELPER > + select DRM_PANEL > + ---help--- > + Choose this option if you have PS8640 for display > + The PS8640 is a high-performance and low-power > + MIPI DSI to eDP converter > + > endmenu > diff --git a/drivers/gpu/drm/bridge/Makefile b/drivers/gpu/drm/bridge/Makefile > index d4e28be..272e3c01 100644 > --- a/drivers/gpu/drm/bridge/Makefile > +++ b/drivers/gpu/drm/bridge/Makefile > @@ -4,3 +4,4 @@ obj-$(CONFIG_DRM_DW_HDMI) += dw_hdmi.o > obj-$(CONFIG_DRM_DW_HDMI_AHB_AUDIO) += dw_hdmi-ahb-audio.o > obj-$(CONFIG_DRM_NXP_PTN3460) += nxp-ptn3460.o > obj-$(CONFIG_DRM_PARADE_PS8622) += parade-ps8622.o > +obj-$(CONFIG_DRM_PARADE_PS8640) += parade-ps8640.o > diff --git a/drivers/gpu/drm/bridge/parade-ps8640.c b/drivers/gpu/drm/bridge/parade-ps8640.c > new file mode 100644 > index 0000000..bf0c3c37 > --- /dev/null > +++ b/drivers/gpu/drm/bridge/parade-ps8640.c > @@ -0,0 +1,472 @@ > +/* > + * Copyright (c) 2014 MediaTek Inc. > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include > + > +#include > +#include > +#include > +#include This doesn't seem to be used at the moment. > + > +static int ps8640_probe(struct i2c_client *client, > + const struct i2c_device_id *id) > +{ > + struct device *dev = &client->dev; > + struct ps8640 *ps_bridge; > + struct device_node *np = dev->of_node; > + struct device_node *port, *out_ep; > + struct device_node *panel_node = NULL; > + int i, ret; > + > + ps_bridge = devm_kzalloc(dev, sizeof(*ps_bridge), GFP_KERNEL); > + if (!ps_bridge) > + return -ENOMEM; > + > + /* port@1 is ps8640 output port */ > + port = of_graph_get_port_by_id(np, 1); > + if (port) { > + out_ep = of_get_child_by_name(port, "endpoint"); > + of_node_put(port); > + if (out_ep) { > + panel_node = of_graph_get_remote_port_parent(out_ep); > + of_node_put(out_ep); > + } > + } > + if (panel_node) { > + ps_bridge->panel = of_drm_find_panel(panel_node); > + of_node_put(panel_node); > + if (!ps_bridge->panel) > + return -EPROBE_DEFER; > + } The driver retrieves the panel from the output port via DT, but doesn't retrieve the DSI host from the input port? Wouldn't this driver need to call a "mipi_dsi_attach" at some point to link with the DSI host (and pass parameters like number of lanes, color format etc)? I've been working on a patchset[1] which lets i2c drivers create mipi dsi devices. I think this would be needed for the ps8640 driver too. [1] https://lkml.org/lkml/2015/12/10/283 Archit > + > + ps_bridge->page[0] = client; > + for (i = 1; i < 6; i++) > + ps_bridge->page[i] = i2c_new_dummy(client->adapter, > + client->addr + i); > + > + ps_bridge->pwr_3v3_supply = devm_regulator_get(dev, "vdd33"); > + if (IS_ERR(ps_bridge->pwr_3v3_supply)) { > + ret = PTR_ERR(ps_bridge->pwr_3v3_supply); > + dev_err(dev, "cannot get vdd33 supply: %d\n", ret); > + return ret; > + } > + > + ps_bridge->pwr_1v2_supply = devm_regulator_get(dev, "vdd12"); > + if (IS_ERR(ps_bridge->pwr_1v2_supply)) { > + ret = PTR_ERR(ps_bridge->pwr_1v2_supply); > + dev_err(dev, "cannot get vdd12 supply: %d\n", ret); > + return ret; > + } > + > + ps_bridge->gpio_mode_sel_n = devm_gpiod_get(&client->dev, "mode-sel", > + GPIOD_OUT_HIGH); > + if (IS_ERR(ps_bridge->gpio_mode_sel_n)) { > + ret = PTR_ERR(ps_bridge->gpio_mode_sel_n); > + dev_err(dev, "cannot get gpio_mode_sel_n %d\n", ret); > + return ret; > + } > + > + ps_bridge->gpio_slp_n = devm_gpiod_get(&client->dev, "sleep", > + GPIOD_OUT_HIGH); > + if (IS_ERR(ps_bridge->gpio_slp_n)) { > + ret = PTR_ERR(ps_bridge->gpio_slp_n); > + dev_err(dev, "cannot get gpio_slp_n: %d\n", ret); > + return ret; > + } > + > + ps_bridge->gpio_rst_n = devm_gpiod_get(&client->dev, "reset", > + GPIOD_OUT_HIGH); > + if (IS_ERR(ps_bridge->gpio_rst_n)) { > + ret = PTR_ERR(ps_bridge->gpio_rst_n); > + dev_err(dev, "cannot get gpio_rst_n: %d\n", ret); > + return ret; > + } > + > + ps_bridge->bridge.funcs = &ps8640_bridge_funcs; > + ps_bridge->bridge.of_node = dev->of_node; > + ret = drm_bridge_add(&ps_bridge->bridge); > + if (ret) { > + dev_err(dev, "Failed to add bridge: %d\n", ret); > + return ret; > + } > + > + i2c_set_clientdata(client, ps_bridge); > + > + return 0; > +} > + > +static int ps8640_remove(struct i2c_client *client) > +{ > + struct ps8640 *ps_bridge = i2c_get_clientdata(client); > + > + drm_bridge_remove(&ps_bridge->bridge); > + > + return 0; > +} > + > +static const struct i2c_device_id ps8640_i2c_table[] = { > + {"parade,ps8640", 0}, > + {}, > +}; > +MODULE_DEVICE_TABLE(i2c, ps8640_i2c_table); > + > +static const struct of_device_id ps8640_match[] = { > + { .compatible = "parade,ps8640" }, > + {}, > +}; > +MODULE_DEVICE_TABLE(of, ps8640_match); > + > +static struct i2c_driver ps8640_driver = { > + .id_table = ps8640_i2c_table, > + .probe = ps8640_probe, > + .remove = ps8640_remove, > + .driver = { > + .name = "parade,ps8640", > + .of_match_table = ps8640_match, > + }, > +}; > +module_i2c_driver(ps8640_driver); > + > +MODULE_AUTHOR("Jitao Shi "); > +MODULE_AUTHOR("CK Hu "); > +MODULE_DESCRIPTION("PARADE ps8640 DSI-eDP converter driver"); > +MODULE_LICENSE("GPL v2"); > -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation