From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jingoo Han" Subject: Re: [PATCH v11 09/19] phy: Add driver for rockchip Display Port PHY Date: Tue, 22 Dec 2015 21:20:39 +0900 Message-ID: <000901d13cb3$341b6c40$9c5244c0$@com> References: <1450236018-1118-1-git-send-email-ykk@rock-chips.com> <1450237257-2208-1-git-send-email-ykk@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1450237257-2208-1-git-send-email-ykk@rock-chips.com> Content-Language: ko List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: 'Yakir Yang' , 'Inki Dae' , 'Mark Yao' , 'Heiko Stuebner' Cc: devicetree@vger.kernel.org, 'Krzysztof Kozlowski' , linux-samsung-soc@vger.kernel.org, 'Russell King' , linux-rockchip@lists.infradead.org, 'Jingoo Han' , emil.l.velikov@gmail.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, 'Kishon Vijay Abraham I' , javier@osg.samsung.com, 'Rob Herring' , 'Andy Yan' , 'Thierry Reding' , 'Gustavo Padovan' , linux-arm-kernel@lists.infradead.org List-Id: linux-rockchip.vger.kernel.org T24gV2VkbmVzZGF5LCBEZWNlbWJlciAxNiwgMjAxNSAxMjo0MSBQTSwgWWFraXIgWWFuZyB3cm90 ZToKPiAKPiBBZGQgcGh5IGRyaXZlciBmb3IgdGhlIFJvY2tjaGlwIERpc3BsYXlQb3J0IFBIWSBt b2R1bGUuIFRoaXMKPiBpcyByZXF1aXJlZCB0byBnZXQgRGlzcGxheVBvcnQgd29ya2luZyBpbiBS b2NrY2hpcCBTb0NzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFlha2lyIFlhbmcgPHlra0Byb2NrLWNo aXBzLmNvbT4KPiBSZXZpZXdlZC1ieTogSGVpa28gU3R1ZWJuZXIgPGhlaWtvQHNudGVjaC5kZT4K PiAtLS0KPiBDaGFuZ2VzIGluIHYxMTogTm9uZQo+IENoYW5nZXMgaW4gdjEwOgo+IC0gRml4IHRo ZSB3cm9uZyBtYWNybyB2YWx1ZSBvZiBHUkZfRURQX1JFRl9DTEtfU0VMX0lOVEVSX0hJV09SRF9N QVNLCj4gICAgIEJJVCg0KSAtPiBCSVQoMjApCj4gCj4gQ2hhbmdlcyBpbiB2OToKPiAtIFJlbW92 ZWQgdGhlIHVudXNlZCB0aGUgdmFyaWFibGUgInJlcyIgaW4gcHJvYmUgZnVuY3Rpb24uIChIZWlr bykKPiAtIFJlbW92ZWQgdGhlIHVudXNlZCBoZWFkIGZpbGUuCj4gCj4gQ2hhbmdlcyBpbiB2ODoK PiAtIEZpeCB0aGUgbWl4ZWQgc3BhY2VycyBvbiBtYWNybyBkZWZpbml0aW9ucy4gKEhlaWtvKQo+ IC0gUmVtb3ZlIHRoZSB1bm5lY2Vzc2FyeSBlbXB0eSBsaW5lIGFmdGVyIGNsa19wcmVwYXJlX2Vu YWJsZS4gKEhlaWtvKQo+IAo+IENoYW5nZXMgaW4gdjc6Cj4gLSBTaW1wbHkgdGhlIGNvbW1pdCBt ZXNzYWdlLiAoS2lzaG9uKQo+IC0gU3ltbWV0cmljYWwgZW5hYmxlL2Rpc2JhbGUgdGhlIHBoeSBj bG9jayBhbmQgcG93ZXIuIChLaXNob24pCj4gCj4gQ2hhbmdlcyBpbiB2NjogTm9uZQo+IENoYW5n ZXMgaW4gdjU6Cj4gLSBSZW1vdmUgInJlZyIgRFQgcHJvcGVydHksIGNhdXNlIGRyaXZlciBjb3Vs ZCBwb3dlcm9uL3Bvd2Vyb2ZmIHBoeSB2aWEKPiAgIHRoZSBleGlzdCAiZ3JmIiBzeXNjb24gYWxy ZWFkeS4gQW5kIHJlbmFtZSB0aGUgZXhhbXBsZSBEVCBub2RlIGZyb20KPiAgICJlZHBfcGh5OiBw aHlAZmY3NzAyNzQiIHRvICJlZHBfcGh5OiBlZHAtcGh5IiBkaXJlY3RseS4gKEhlaWtvKQo+IC0g QWRkIGRlaXZjZV9ub2RlIGF0IHRoZSBmcm9udCBvZiBkcml2ZXIsIHVwZGF0ZSBwaHlfb3BzIHR5 cGUgZnJvbSAic3RhdGljCj4gICBzdHJ1Y3QiIHRvICJzdGF0aWMgY29uc3Qgc3RydWN0Ii4gQW5k IGNvcnJlY3QgdGhlIGlucHV0IHBhcmFtdGVycyBvZgo+ICAgZGV2bV9waHlfY3JlYXRlKCkgaW50 ZXJmYWNlcy4gKEhlaWtvKQo+IAo+IENoYW5nZXMgaW4gdjQ6Cj4gLSBBZGQgY29tbWl0IG1lc3Nh Z2UsIGFuZCByZW1vdmUgdGhlIHJlZHVuZGFudCByb2NrY2hpcF9kcF9waHlfaW5pdCgpCj4gICBm dW5jdGlvbiwgbW92ZSB0aG9zZSBjb2RlIHRvIHByb2JlKCkgbWV0aG9kLiBBbmQgcmVtb3ZlIGRy aXZlciAub3duZXIKPiAgIG51bWJlci4gKEtpc2hvbikKPiAKPiBDaGFuZ2VzIGluIHYzOgo+IC0g U3VnZ2VzdCwgYWRkIHJvY2tjaGlwIGRwIHBoeSBkcml2ZXIsIGNvbGxlY3QgdGhlIHBoeSBjbG9j a3MgYW5kCj4gICBwb3dlciBjb250cm9sLiAoSGVpa28pCj4gCj4gQ2hhbmdlcyBpbiB2MjogTm9u ZQo+IAo+ICBkcml2ZXJzL3BoeS9LY29uZmlnICAgICAgICAgICB8ICAgNyArKwo+ICBkcml2ZXJz L3BoeS9NYWtlZmlsZSAgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvcGh5L3BoeS1yb2NrY2hp cC1kcC5jIHwgMTUxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ ICAzIGZpbGVzIGNoYW5nZWQsIDE1OSBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL3BoeS9waHktcm9ja2NoaXAtZHAuYwo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3BoeS9LY29uZmlnIGIvZHJpdmVycy9waHkvS2NvbmZpZwo+IGluZGV4IDdlYjU4NTlkLi43MzU1 ODE5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvcGh5L0tjb25maWcKPiArKysgYi9kcml2ZXJzL3Bo eS9LY29uZmlnCj4gQEAgLTMxOSw2ICszMTksMTMgQEAgY29uZmlnIFBIWV9ST0NLQ0hJUF9VU0IK PiAgCWhlbHAKPiAgCSAgRW5hYmxlIHRoaXMgdG8gc3VwcG9ydCB0aGUgUm9ja2NoaXAgVVNCIDIu MCBQSFkuCj4gCj4gK2NvbmZpZyBQSFlfUk9DS0NISVBfRFAKPiArCXRyaXN0YXRlICJSb2NrY2hp cCBEaXNwbGF5IFBvcnQgUEhZIERyaXZlciIKPiArCWRlcGVuZHMgb24gQVJDSF9ST0NLQ0hJUCAm JiBPRgo+ICsJc2VsZWN0IEdFTkVSSUNfUEhZCj4gKwloZWxwCj4gKwkgIEVuYWJsZSB0aGlzIHRv IHN1cHBvcnQgdGhlIFJvY2tjaGlwIERpc3BsYXkgUG9ydCBQSFkuCj4gKwo+ICBjb25maWcgUEhZ X1NUX1NQRUFSMTMxMF9NSVBIWQo+ICAJdHJpc3RhdGUgIlNUIFNQRUFSMTMxMC1NSVBIWSBkcml2 ZXIiCj4gIAlzZWxlY3QgR0VORVJJQ19QSFkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvTWFr ZWZpbGUgYi9kcml2ZXJzL3BoeS9NYWtlZmlsZQo+IGluZGV4IDA3NWRiMWEuLmIxNzAwY2QgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9waHkvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL3BoeS9NYWtl ZmlsZQo+IEBAIC0zNSw2ICszNSw3IEBAIHBoeS1leHlub3MtdXNiMi0kKENPTkZJR19QSFlfUzVQ VjIxMF9VU0IyKQkrPSBwaHktczVwdjIxMC11c2IyLm8KPiAgb2JqLSQoQ09ORklHX1BIWV9FWFlO T1M1X1VTQkRSRCkJKz0gcGh5LWV4eW5vczUtdXNiZHJkLm8KPiAgb2JqLSQoQ09ORklHX1BIWV9R Q09NX0FQUTgwNjRfU0FUQSkJKz0gcGh5LXFjb20tYXBxODA2NC1zYXRhLm8KPiAgb2JqLSQoQ09O RklHX1BIWV9ST0NLQ0hJUF9VU0IpICs9IHBoeS1yb2NrY2hpcC11c2Iubwo+ICtvYmotJChDT05G SUdfUEhZX1JPQ0tDSElQX0RQKQkJKz0gcGh5LXJvY2tjaGlwLWRwLm8KPiAgb2JqLSQoQ09ORklH X1BIWV9RQ09NX0lQUTgwNlhfU0FUQSkJKz0gcGh5LXFjb20taXBxODA2eC1zYXRhLm8KPiAgb2Jq LSQoQ09ORklHX1BIWV9TVF9TUEVBUjEzMTBfTUlQSFkpCSs9IHBoeS1zcGVhcjEzMTAtbWlwaHku bwo+ICBvYmotJChDT05GSUdfUEhZX1NUX1NQRUFSMTM0MF9NSVBIWSkJKz0gcGh5LXNwZWFyMTM0 MC1taXBoeS5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3BoeS1yb2NrY2hpcC1kcC5jIGIv ZHJpdmVycy9waHkvcGh5LXJvY2tjaGlwLWRwLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAuLjNjYjNiZjgKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9waHkv cGh5LXJvY2tjaGlwLWRwLmMKPiBAQCAtMCwwICsxLDE1MSBAQAo+ICsvKgo+ICsgKiBSb2NrY2hp cCBEUCBQSFkgZHJpdmVyCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNSBGdVpob3UgUm9j a2NoaXAgQ28uLCBMdGQuCj4gKyAqIEF1dGhvcjogWWFraXIgWWFuZyA8eWtrQEByb2NrLWNoaXBz LmNvbT4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPiArICogdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z ZS4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9vZi5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9w aHkvcGh5Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L21mZC9zeXNjb24uaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgoKUGxl YXNlIG9yZGVyIHRoZXNlIGhlYWRlcnMgYWxwaGFiZXRpY2FsbHkuCkl0IHdpbGwgZW5oYW5jZSB0 aGUgcmVhZGFiaWxpdHkuCgpCZXN0IHJlZ2FyZHMsCkppbmdvbyBIYW4KCj4gKwo+ICsjZGVmaW5l IEdSRl9TT0NfQ09OMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyNzQKPiArCj4gKyNk ZWZpbmUgR1JGX0VEUF9SRUZfQ0xLX1NFTF9JTlRFUl9ISVdPUkRfTUFTSyAgIEJJVCgyMCkKPiAr I2RlZmluZSBHUkZfRURQX1JFRl9DTEtfU0VMX0lOVEVSICAgICAgICAgICAgICAgQklUKDQpCj4g Kwo+ICsjZGVmaW5lIEdSRl9FRFBfUEhZX1NJRERRX0hJV09SRF9NQVNLICAgICAgICAgICBCSVQo MjEpCj4gKyNkZWZpbmUgR1JGX0VEUF9QSFlfU0lERFFfT04gICAgICAgICAgICAgICAgICAgIDAK PiArI2RlZmluZSBHUkZfRURQX1BIWV9TSUREUV9PRkYgICAgICAgICAgICAgICAgICAgQklUKDUp Cj4gKwo+ICtzdHJ1Y3Qgcm9ja2NoaXBfZHBfcGh5IHsKPiArCXN0cnVjdCBkZXZpY2UgICpkZXY7 Cj4gKwlzdHJ1Y3QgcmVnbWFwICAqZ3JmOwo+ICsJc3RydWN0IGNsayAgICAgKnBoeV8yNG07Cj4g K307Cj4gKwo+ICtzdGF0aWMgaW50IHJvY2tjaGlwX3NldF9waHlfc3RhdGUoc3RydWN0IHBoeSAq cGh5LCBib29sIGVuYWJsZSkKPiArewo+ICsJc3RydWN0IHJvY2tjaGlwX2RwX3BoeSAqZHAgPSBw aHlfZ2V0X2RydmRhdGEocGh5KTsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKGVuYWJsZSkgewo+ ICsJCXJldCA9IHJlZ21hcF93cml0ZShkcC0+Z3JmLCBHUkZfU09DX0NPTjEyLAo+ICsJCQkJICAg R1JGX0VEUF9QSFlfU0lERFFfSElXT1JEX01BU0sgfAo+ICsJCQkJICAgR1JGX0VEUF9QSFlfU0lE RFFfT04pOwo+ICsJCWlmIChyZXQgPCAwKSB7Cj4gKwkJCWRldl9lcnIoZHAtPmRldiwgIkNhbid0 IGVuYWJsZSBQSFkgcG93ZXIgJWRcbiIsIHJldCk7Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ ICsKPiArCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHAtPnBoeV8yNG0pOwo+ICsJfSBlbHNl IHsKPiArCQljbGtfZGlzYWJsZV91bnByZXBhcmUoZHAtPnBoeV8yNG0pOwo+ICsKPiArCQlyZXQg PSByZWdtYXBfd3JpdGUoZHAtPmdyZiwgR1JGX1NPQ19DT04xMiwKPiArCQkJCSAgIEdSRl9FRFBf UEhZX1NJRERRX0hJV09SRF9NQVNLIHwKPiArCQkJCSAgIEdSRl9FRFBfUEhZX1NJRERRX09GRik7 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCByb2NrY2hp cF9kcF9waHlfcG93ZXJfb24oc3RydWN0IHBoeSAqcGh5KQo+ICt7Cj4gKwlyZXR1cm4gcm9ja2No aXBfc2V0X3BoeV9zdGF0ZShwaHksIHRydWUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJvY2tj aGlwX2RwX3BoeV9wb3dlcl9vZmYoc3RydWN0IHBoeSAqcGh5KQo+ICt7Cj4gKwlyZXR1cm4gcm9j a2NoaXBfc2V0X3BoeV9zdGF0ZShwaHksIGZhbHNlKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBwaHlfb3BzIHJvY2tjaGlwX2RwX3BoeV9vcHMgPSB7Cj4gKwkucG93ZXJfb24JPSBy b2NrY2hpcF9kcF9waHlfcG93ZXJfb24sCj4gKwkucG93ZXJfb2ZmCT0gcm9ja2NoaXBfZHBfcGh5 X3Bvd2VyX29mZiwKPiArCS5vd25lcgkJPSBUSElTX01PRFVMRSwKPiArfTsKPiArCj4gK3N0YXRp YyBpbnQgcm9ja2NoaXBfZHBfcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gKwlzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOwo+ICsJc3RydWN0IHBoeV9wcm92aWRlciAqcGh5 X3Byb3ZpZGVyOwo+ICsJc3RydWN0IHJvY2tjaGlwX2RwX3BoeSAqZHA7Cj4gKwlzdHJ1Y3QgcGh5 ICpwaHk7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmICghbnApCj4gKwkJcmV0dXJuIC1FTk9ERVY7 Cj4gKwo+ICsJZHAgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRwKSwgR0ZQX0tFUk5FTCk7 Cj4gKwlpZiAoSVNfRVJSKGRwKSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlkcC0+ZGV2 ID0gZGV2Owo+ICsKPiArCWRwLT5waHlfMjRtID0gZGV2bV9jbGtfZ2V0KGRldiwgIjI0bSIpOwo+ ICsJaWYgKElTX0VSUihkcC0+cGh5XzI0bSkpIHsKPiArCQlkZXZfZXJyKGRldiwgImNhbm5vdCBn ZXQgY2xvY2sgMjRtXG4iKTsKPiArCQlyZXR1cm4gUFRSX0VSUihkcC0+cGh5XzI0bSk7Cj4gKwl9 Cj4gKwo+ICsJcmV0ID0gY2xrX3NldF9yYXRlKGRwLT5waHlfMjRtLCAyNDAwMDAwMCk7Cj4gKwlp ZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIoZHAtPmRldiwgImNhbm5vdCBzZXQgY2xvY2sgcGh5 XzI0bSAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWRwLT5ncmYg PSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAicm9ja2NoaXAsZ3JmIik7Cj4g KwlpZiAoSVNfRVJSKGRwLT5ncmYpKSB7Cj4gKwkJZGV2X2VycihkZXYsICJyazMyODgtZHAgbmVl ZHMgcm9ja2NoaXAsZ3JmIHByb3BlcnR5XG4iKTsKPiArCQlyZXR1cm4gUFRSX0VSUihkcC0+Z3Jm KTsKPiArCX0KPiArCj4gKwlyZXQgPSByZWdtYXBfd3JpdGUoZHAtPmdyZiwgR1JGX1NPQ19DT04x MiwgR1JGX0VEUF9SRUZfQ0xLX1NFTF9JTlRFUiB8Cj4gKwkJCSAgIEdSRl9FRFBfUkVGX0NMS19T RUxfSU5URVJfSElXT1JEX01BU0spOwo+ICsJaWYgKHJldCAhPSAwKSB7Cj4gKwkJZGV2X2Vycihk cC0+ZGV2LCAiQ291bGQgbm90IGNvbmZpZyBHUkYgZWRwIHJlZiBjbGs6ICVkXG4iLCByZXQpOwo+ ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcGh5ID0gZGV2bV9waHlfY3JlYXRlKGRldiwg bnAsICZyb2NrY2hpcF9kcF9waHlfb3BzKTsKPiArCWlmIChJU19FUlIocGh5KSkgewo+ICsJCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwaHlcbiIpOwo+ICsJCXJldHVybiBQVFJfRVJS KHBoeSk7Cj4gKwl9Cj4gKwlwaHlfc2V0X2RydmRhdGEocGh5LCBkcCk7Cj4gKwo+ICsJcGh5X3By b3ZpZGVyID0gZGV2bV9vZl9waHlfcHJvdmlkZXJfcmVnaXN0ZXIoZGV2LCBvZl9waHlfc2ltcGxl X3hsYXRlKTsKPiArCj4gKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKHBoeV9wcm92aWRlcik7Cj4g K30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJvY2tjaGlwX2RwX3Bo eV9kdF9pZHNbXSA9IHsKPiArCXsgLmNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMjg4LWRwLXBo eSIgfSwKPiArCXt9Cj4gK307Cj4gKwo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCByb2NrY2hp cF9kcF9waHlfZHRfaWRzKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJv Y2tjaGlwX2RwX3BoeV9kcml2ZXIgPSB7Cj4gKwkucHJvYmUJCT0gcm9ja2NoaXBfZHBfcGh5X3By b2JlLAo+ICsJLmRyaXZlcgkJPSB7Cj4gKwkJLm5hbWUJPSAicm9ja2NoaXAtZHAtcGh5IiwKPiAr CQkub2ZfbWF0Y2hfdGFibGUgPSByb2NrY2hpcF9kcF9waHlfZHRfaWRzLAo+ICsJfSwKPiArfTsK PiArCj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIocm9ja2NoaXBfZHBfcGh5X2RyaXZlcik7Cj4g Kwo+ICtNT0RVTEVfQVVUSE9SKCJZYWtpciBZYW5nIDx5a2tAcm9jay1jaGlwcy5jb20+Iik7Cj4g K01PRFVMRV9ERVNDUklQVElPTigiUm9ja2NoaXAgRFAgUEhZIGRyaXZlciIpOwo+ICtNT0RVTEVf TElDRU5TRSgiR1BMIHYyIik7Cj4gLS0KPiAxLjkuMQo+IAoKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: jingoohan1@gmail.com (Jingoo Han) Date: Tue, 22 Dec 2015 21:20:39 +0900 Subject: [PATCH v11 09/19] phy: Add driver for rockchip Display Port PHY In-Reply-To: <1450237257-2208-1-git-send-email-ykk@rock-chips.com> References: <1450236018-1118-1-git-send-email-ykk@rock-chips.com> <1450237257-2208-1-git-send-email-ykk@rock-chips.com> Message-ID: <000901d13cb3$341b6c40$9c5244c0$@com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Wednesday, December 16, 2015 12:41 PM, Yakir Yang wrote: > > Add phy driver for the Rockchip DisplayPort PHY module. This > is required to get DisplayPort working in Rockchip SoCs. > > Signed-off-by: Yakir Yang > Reviewed-by: Heiko Stuebner > --- > Changes in v11: None > Changes in v10: > - Fix the wrong macro value of GRF_EDP_REF_CLK_SEL_INTER_HIWORD_MASK > BIT(4) -> BIT(20) > > Changes in v9: > - Removed the unused the variable "res" in probe function. (Heiko) > - Removed the unused head file. > > Changes in v8: > - Fix the mixed spacers on macro definitions. (Heiko) > - Remove the unnecessary empty line after clk_prepare_enable. (Heiko) > > Changes in v7: > - Simply the commit message. (Kishon) > - Symmetrical enable/disbale the phy clock and power. (Kishon) > > Changes in v6: None > Changes in v5: > - Remove "reg" DT property, cause driver could poweron/poweroff phy via > the exist "grf" syscon already. And rename the example DT node from > "edp_phy: phy at ff770274" to "edp_phy: edp-phy" directly. (Heiko) > - Add deivce_node at the front of driver, update phy_ops type from "static > struct" to "static const struct". And correct the input paramters of > devm_phy_create() interfaces. (Heiko) > > Changes in v4: > - Add commit message, and remove the redundant rockchip_dp_phy_init() > function, move those code to probe() method. And remove driver .owner > number. (Kishon) > > Changes in v3: > - Suggest, add rockchip dp phy driver, collect the phy clocks and > power control. (Heiko) > > Changes in v2: None > > drivers/phy/Kconfig | 7 ++ > drivers/phy/Makefile | 1 + > drivers/phy/phy-rockchip-dp.c | 151 ++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 159 insertions(+) > create mode 100644 drivers/phy/phy-rockchip-dp.c > > diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig > index 7eb5859d..7355819 100644 > --- a/drivers/phy/Kconfig > +++ b/drivers/phy/Kconfig > @@ -319,6 +319,13 @@ config PHY_ROCKCHIP_USB > help > Enable this to support the Rockchip USB 2.0 PHY. > > +config PHY_ROCKCHIP_DP > + tristate "Rockchip Display Port PHY Driver" > + depends on ARCH_ROCKCHIP && OF > + select GENERIC_PHY > + help > + Enable this to support the Rockchip Display Port PHY. > + > config PHY_ST_SPEAR1310_MIPHY > tristate "ST SPEAR1310-MIPHY driver" > select GENERIC_PHY > diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile > index 075db1a..b1700cd 100644 > --- a/drivers/phy/Makefile > +++ b/drivers/phy/Makefile > @@ -35,6 +35,7 @@ phy-exynos-usb2-$(CONFIG_PHY_S5PV210_USB2) += phy-s5pv210-usb2.o > obj-$(CONFIG_PHY_EXYNOS5_USBDRD) += phy-exynos5-usbdrd.o > obj-$(CONFIG_PHY_QCOM_APQ8064_SATA) += phy-qcom-apq8064-sata.o > obj-$(CONFIG_PHY_ROCKCHIP_USB) += phy-rockchip-usb.o > +obj-$(CONFIG_PHY_ROCKCHIP_DP) += phy-rockchip-dp.o > obj-$(CONFIG_PHY_QCOM_IPQ806X_SATA) += phy-qcom-ipq806x-sata.o > obj-$(CONFIG_PHY_ST_SPEAR1310_MIPHY) += phy-spear1310-miphy.o > obj-$(CONFIG_PHY_ST_SPEAR1340_MIPHY) += phy-spear1340-miphy.o > diff --git a/drivers/phy/phy-rockchip-dp.c b/drivers/phy/phy-rockchip-dp.c > new file mode 100644 > index 0000000..3cb3bf8 > --- /dev/null > +++ b/drivers/phy/phy-rockchip-dp.c > @@ -0,0 +1,151 @@ > +/* > + * Rockchip DP PHY driver > + * > + * Copyright (C) 2015 FuZhou Rockchip Co., Ltd. > + * Author: Yakir Yang > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation; either version 2 of the License. > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include Please order these headers alphabetically. It will enhance the readability. Best regards, Jingoo Han > + > +#define GRF_SOC_CON12 0x0274 > + > +#define GRF_EDP_REF_CLK_SEL_INTER_HIWORD_MASK BIT(20) > +#define GRF_EDP_REF_CLK_SEL_INTER BIT(4) > + > +#define GRF_EDP_PHY_SIDDQ_HIWORD_MASK BIT(21) > +#define GRF_EDP_PHY_SIDDQ_ON 0 > +#define GRF_EDP_PHY_SIDDQ_OFF BIT(5) > + > +struct rockchip_dp_phy { > + struct device *dev; > + struct regmap *grf; > + struct clk *phy_24m; > +}; > + > +static int rockchip_set_phy_state(struct phy *phy, bool enable) > +{ > + struct rockchip_dp_phy *dp = phy_get_drvdata(phy); > + int ret; > + > + if (enable) { > + ret = regmap_write(dp->grf, GRF_SOC_CON12, > + GRF_EDP_PHY_SIDDQ_HIWORD_MASK | > + GRF_EDP_PHY_SIDDQ_ON); > + if (ret < 0) { > + dev_err(dp->dev, "Can't enable PHY power %d\n", ret); > + return ret; > + } > + > + ret = clk_prepare_enable(dp->phy_24m); > + } else { > + clk_disable_unprepare(dp->phy_24m); > + > + ret = regmap_write(dp->grf, GRF_SOC_CON12, > + GRF_EDP_PHY_SIDDQ_HIWORD_MASK | > + GRF_EDP_PHY_SIDDQ_OFF); > + } > + > + return ret; > +} > + > +static int rockchip_dp_phy_power_on(struct phy *phy) > +{ > + return rockchip_set_phy_state(phy, true); > +} > + > +static int rockchip_dp_phy_power_off(struct phy *phy) > +{ > + return rockchip_set_phy_state(phy, false); > +} > + > +static const struct phy_ops rockchip_dp_phy_ops = { > + .power_on = rockchip_dp_phy_power_on, > + .power_off = rockchip_dp_phy_power_off, > + .owner = THIS_MODULE, > +}; > + > +static int rockchip_dp_phy_probe(struct platform_device *pdev) > +{ > + struct device *dev = &pdev->dev; > + struct device_node *np = dev->of_node; > + struct phy_provider *phy_provider; > + struct rockchip_dp_phy *dp; > + struct phy *phy; > + int ret; > + > + if (!np) > + return -ENODEV; > + > + dp = devm_kzalloc(dev, sizeof(*dp), GFP_KERNEL); > + if (IS_ERR(dp)) > + return -ENOMEM; > + > + dp->dev = dev; > + > + dp->phy_24m = devm_clk_get(dev, "24m"); > + if (IS_ERR(dp->phy_24m)) { > + dev_err(dev, "cannot get clock 24m\n"); > + return PTR_ERR(dp->phy_24m); > + } > + > + ret = clk_set_rate(dp->phy_24m, 24000000); > + if (ret < 0) { > + dev_err(dp->dev, "cannot set clock phy_24m %d\n", ret); > + return ret; > + } > + > + dp->grf = syscon_regmap_lookup_by_phandle(np, "rockchip,grf"); > + if (IS_ERR(dp->grf)) { > + dev_err(dev, "rk3288-dp needs rockchip,grf property\n"); > + return PTR_ERR(dp->grf); > + } > + > + ret = regmap_write(dp->grf, GRF_SOC_CON12, GRF_EDP_REF_CLK_SEL_INTER | > + GRF_EDP_REF_CLK_SEL_INTER_HIWORD_MASK); > + if (ret != 0) { > + dev_err(dp->dev, "Could not config GRF edp ref clk: %d\n", ret); > + return ret; > + } > + > + phy = devm_phy_create(dev, np, &rockchip_dp_phy_ops); > + if (IS_ERR(phy)) { > + dev_err(dev, "failed to create phy\n"); > + return PTR_ERR(phy); > + } > + phy_set_drvdata(phy, dp); > + > + phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate); > + > + return PTR_ERR_OR_ZERO(phy_provider); > +} > + > +static const struct of_device_id rockchip_dp_phy_dt_ids[] = { > + { .compatible = "rockchip,rk3288-dp-phy" }, > + {} > +}; > + > +MODULE_DEVICE_TABLE(of, rockchip_dp_phy_dt_ids); > + > +static struct platform_driver rockchip_dp_phy_driver = { > + .probe = rockchip_dp_phy_probe, > + .driver = { > + .name = "rockchip-dp-phy", > + .of_match_table = rockchip_dp_phy_dt_ids, > + }, > +}; > + > +module_platform_driver(rockchip_dp_phy_driver); > + > +MODULE_AUTHOR("Yakir Yang "); > +MODULE_DESCRIPTION("Rockchip DP PHY driver"); > +MODULE_LICENSE("GPL v2"); > -- > 1.9.1 > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754061AbbLVMUz (ORCPT ); Tue, 22 Dec 2015 07:20:55 -0500 Received: from mail-pa0-f46.google.com ([209.85.220.46]:34435 "EHLO mail-pa0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752515AbbLVMUx (ORCPT ); Tue, 22 Dec 2015 07:20:53 -0500 From: "Jingoo Han" To: "'Yakir Yang'" , "'Inki Dae'" , "'Mark Yao'" , "'Heiko Stuebner'" Cc: "'Thierry Reding'" , "'Krzysztof Kozlowski'" , "'Rob Herring'" , "'Russell King'" , , "'Gustavo Padovan'" , "'Kishon Vijay Abraham I'" , , "'Andy Yan'" , , , , , , , "'Jingoo Han'" References: <1450236018-1118-1-git-send-email-ykk@rock-chips.com> <1450237257-2208-1-git-send-email-ykk@rock-chips.com> In-Reply-To: <1450237257-2208-1-git-send-email-ykk@rock-chips.com> Subject: Re: [PATCH v11 09/19] phy: Add driver for rockchip Display Port PHY Date: Tue, 22 Dec 2015 21:20:39 +0900 Message-ID: <000901d13cb3$341b6c40$9c5244c0$@com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Office Outlook 12.0 Thread-Index: AdE3s9+R5mwv1cYTQjacCqMHasCQoAE/wCdQ Content-Language: ko Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wednesday, December 16, 2015 12:41 PM, Yakir Yang wrote: > > Add phy driver for the Rockchip DisplayPort PHY module. This > is required to get DisplayPort working in Rockchip SoCs. > > Signed-off-by: Yakir Yang > Reviewed-by: Heiko Stuebner > --- > Changes in v11: None > Changes in v10: > - Fix the wrong macro value of GRF_EDP_REF_CLK_SEL_INTER_HIWORD_MASK > BIT(4) -> BIT(20) > > Changes in v9: > - Removed the unused the variable "res" in probe function. (Heiko) > - Removed the unused head file. > > Changes in v8: > - Fix the mixed spacers on macro definitions. (Heiko) > - Remove the unnecessary empty line after clk_prepare_enable. (Heiko) > > Changes in v7: > - Simply the commit message. (Kishon) > - Symmetrical enable/disbale the phy clock and power. (Kishon) > > Changes in v6: None > Changes in v5: > - Remove "reg" DT property, cause driver could poweron/poweroff phy via > the exist "grf" syscon already. And rename the example DT node from > "edp_phy: phy@ff770274" to "edp_phy: edp-phy" directly. (Heiko) > - Add deivce_node at the front of driver, update phy_ops type from "static > struct" to "static const struct". And correct the input paramters of > devm_phy_create() interfaces. (Heiko) > > Changes in v4: > - Add commit message, and remove the redundant rockchip_dp_phy_init() > function, move those code to probe() method. And remove driver .owner > number. (Kishon) > > Changes in v3: > - Suggest, add rockchip dp phy driver, collect the phy clocks and > power control. (Heiko) > > Changes in v2: None > > drivers/phy/Kconfig | 7 ++ > drivers/phy/Makefile | 1 + > drivers/phy/phy-rockchip-dp.c | 151 ++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 159 insertions(+) > create mode 100644 drivers/phy/phy-rockchip-dp.c > > diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig > index 7eb5859d..7355819 100644 > --- a/drivers/phy/Kconfig > +++ b/drivers/phy/Kconfig > @@ -319,6 +319,13 @@ config PHY_ROCKCHIP_USB > help > Enable this to support the Rockchip USB 2.0 PHY. > > +config PHY_ROCKCHIP_DP > + tristate "Rockchip Display Port PHY Driver" > + depends on ARCH_ROCKCHIP && OF > + select GENERIC_PHY > + help > + Enable this to support the Rockchip Display Port PHY. > + > config PHY_ST_SPEAR1310_MIPHY > tristate "ST SPEAR1310-MIPHY driver" > select GENERIC_PHY > diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile > index 075db1a..b1700cd 100644 > --- a/drivers/phy/Makefile > +++ b/drivers/phy/Makefile > @@ -35,6 +35,7 @@ phy-exynos-usb2-$(CONFIG_PHY_S5PV210_USB2) += phy-s5pv210-usb2.o > obj-$(CONFIG_PHY_EXYNOS5_USBDRD) += phy-exynos5-usbdrd.o > obj-$(CONFIG_PHY_QCOM_APQ8064_SATA) += phy-qcom-apq8064-sata.o > obj-$(CONFIG_PHY_ROCKCHIP_USB) += phy-rockchip-usb.o > +obj-$(CONFIG_PHY_ROCKCHIP_DP) += phy-rockchip-dp.o > obj-$(CONFIG_PHY_QCOM_IPQ806X_SATA) += phy-qcom-ipq806x-sata.o > obj-$(CONFIG_PHY_ST_SPEAR1310_MIPHY) += phy-spear1310-miphy.o > obj-$(CONFIG_PHY_ST_SPEAR1340_MIPHY) += phy-spear1340-miphy.o > diff --git a/drivers/phy/phy-rockchip-dp.c b/drivers/phy/phy-rockchip-dp.c > new file mode 100644 > index 0000000..3cb3bf8 > --- /dev/null > +++ b/drivers/phy/phy-rockchip-dp.c > @@ -0,0 +1,151 @@ > +/* > + * Rockchip DP PHY driver > + * > + * Copyright (C) 2015 FuZhou Rockchip Co., Ltd. > + * Author: Yakir Yang > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation; either version 2 of the License. > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include Please order these headers alphabetically. It will enhance the readability. Best regards, Jingoo Han > + > +#define GRF_SOC_CON12 0x0274 > + > +#define GRF_EDP_REF_CLK_SEL_INTER_HIWORD_MASK BIT(20) > +#define GRF_EDP_REF_CLK_SEL_INTER BIT(4) > + > +#define GRF_EDP_PHY_SIDDQ_HIWORD_MASK BIT(21) > +#define GRF_EDP_PHY_SIDDQ_ON 0 > +#define GRF_EDP_PHY_SIDDQ_OFF BIT(5) > + > +struct rockchip_dp_phy { > + struct device *dev; > + struct regmap *grf; > + struct clk *phy_24m; > +}; > + > +static int rockchip_set_phy_state(struct phy *phy, bool enable) > +{ > + struct rockchip_dp_phy *dp = phy_get_drvdata(phy); > + int ret; > + > + if (enable) { > + ret = regmap_write(dp->grf, GRF_SOC_CON12, > + GRF_EDP_PHY_SIDDQ_HIWORD_MASK | > + GRF_EDP_PHY_SIDDQ_ON); > + if (ret < 0) { > + dev_err(dp->dev, "Can't enable PHY power %d\n", ret); > + return ret; > + } > + > + ret = clk_prepare_enable(dp->phy_24m); > + } else { > + clk_disable_unprepare(dp->phy_24m); > + > + ret = regmap_write(dp->grf, GRF_SOC_CON12, > + GRF_EDP_PHY_SIDDQ_HIWORD_MASK | > + GRF_EDP_PHY_SIDDQ_OFF); > + } > + > + return ret; > +} > + > +static int rockchip_dp_phy_power_on(struct phy *phy) > +{ > + return rockchip_set_phy_state(phy, true); > +} > + > +static int rockchip_dp_phy_power_off(struct phy *phy) > +{ > + return rockchip_set_phy_state(phy, false); > +} > + > +static const struct phy_ops rockchip_dp_phy_ops = { > + .power_on = rockchip_dp_phy_power_on, > + .power_off = rockchip_dp_phy_power_off, > + .owner = THIS_MODULE, > +}; > + > +static int rockchip_dp_phy_probe(struct platform_device *pdev) > +{ > + struct device *dev = &pdev->dev; > + struct device_node *np = dev->of_node; > + struct phy_provider *phy_provider; > + struct rockchip_dp_phy *dp; > + struct phy *phy; > + int ret; > + > + if (!np) > + return -ENODEV; > + > + dp = devm_kzalloc(dev, sizeof(*dp), GFP_KERNEL); > + if (IS_ERR(dp)) > + return -ENOMEM; > + > + dp->dev = dev; > + > + dp->phy_24m = devm_clk_get(dev, "24m"); > + if (IS_ERR(dp->phy_24m)) { > + dev_err(dev, "cannot get clock 24m\n"); > + return PTR_ERR(dp->phy_24m); > + } > + > + ret = clk_set_rate(dp->phy_24m, 24000000); > + if (ret < 0) { > + dev_err(dp->dev, "cannot set clock phy_24m %d\n", ret); > + return ret; > + } > + > + dp->grf = syscon_regmap_lookup_by_phandle(np, "rockchip,grf"); > + if (IS_ERR(dp->grf)) { > + dev_err(dev, "rk3288-dp needs rockchip,grf property\n"); > + return PTR_ERR(dp->grf); > + } > + > + ret = regmap_write(dp->grf, GRF_SOC_CON12, GRF_EDP_REF_CLK_SEL_INTER | > + GRF_EDP_REF_CLK_SEL_INTER_HIWORD_MASK); > + if (ret != 0) { > + dev_err(dp->dev, "Could not config GRF edp ref clk: %d\n", ret); > + return ret; > + } > + > + phy = devm_phy_create(dev, np, &rockchip_dp_phy_ops); > + if (IS_ERR(phy)) { > + dev_err(dev, "failed to create phy\n"); > + return PTR_ERR(phy); > + } > + phy_set_drvdata(phy, dp); > + > + phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate); > + > + return PTR_ERR_OR_ZERO(phy_provider); > +} > + > +static const struct of_device_id rockchip_dp_phy_dt_ids[] = { > + { .compatible = "rockchip,rk3288-dp-phy" }, > + {} > +}; > + > +MODULE_DEVICE_TABLE(of, rockchip_dp_phy_dt_ids); > + > +static struct platform_driver rockchip_dp_phy_driver = { > + .probe = rockchip_dp_phy_probe, > + .driver = { > + .name = "rockchip-dp-phy", > + .of_match_table = rockchip_dp_phy_dt_ids, > + }, > +}; > + > +module_platform_driver(rockchip_dp_phy_driver); > + > +MODULE_AUTHOR("Yakir Yang "); > +MODULE_DESCRIPTION("Rockchip DP PHY driver"); > +MODULE_LICENSE("GPL v2"); > -- > 1.9.1 >