From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko =?ISO-8859-1?Q?St=FCbner?= Subject: Re: [PATCH v8 7/8] drm/bridge/synopsys: dw-hdmi: Do not use device's drvdata Date: Thu, 01 Mar 2018 16:45:57 +0100 Message-ID: <4608895.HSl1MMrfU7@diego> References: <20180110162348.22765-1-thierry.escande@collabora.com> <20180110162348.22765-8-thierry.escande@collabora.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180110162348.22765-8-thierry.escande@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Thierry Escande , Neil Armstrong , Jeffy Chen , linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, Rob Herring , Laurent Pinchart , Daniel Vetter List-Id: linux-rockchip.vger.kernel.org QW0gTWl0dHdvY2gsIDEwLiBKYW51YXIgMjAxOCwgMTc6MjM6NDcgQ0VUIHNjaHJpZWIgVGhpZXJy eSBFc2NhbmRlOgo+IEZyb206IEplZmZ5IENoZW4gPGplZmZ5LmNoZW5Acm9jay1jaGlwcy5jb20+ Cj4gCj4gTGV0IHBsYXQgZHJpdmVycyBvd24gdGhlIGRydmRhdGEsIHNvIHRoYXQgdGhleSBjb3Vs ZCBjbGVhbnVwIHJlc291cmNlcwo+IGluIHRoZWlyIHVuYmluZCgpLgo+IAo+IFNpZ25lZC1vZmYt Ynk6IEplZmZ5IENoZW4gPGplZmZ5LmNoZW5Acm9jay1jaGlwcy5jb20+Cj4gU2lnbmVkLW9mZi1i eTogVGhpZXJyeSBFc2NhbmRlIDx0aGllcnJ5LmVzY2FuZGVAY29sbGFib3JhLmNvbT4KPiBSZXZp ZXdlZC1ieTogTmVpbCBBcm1zdHJvbmcgPG5hcm1zdHJvbmdAYmF5bGlicmUuY29tPgoKVGhpcyBs b29rcyBsaWtlIGl0IGlzIHByb2JhYmx5IHN1cGVyc2VlZGVkIGJ5CiJkcm0vYnJpZGdlL3N5bm9w c3lzOiBkdy1oZG1pOiBkb24ndCBjbG9iYmVyIGRydmRhdGEiIFswXSA/CgpJZiB0aGVyZSBhcmUg c3RpbGwgbmVjZXNzYXJ5IHRoaW5ncyBpbiBpdCwgaXQgd2lsbCBuZWVkIHRvIGJlIGFkYXB0ZWQg Zm9yCnRoZSByZWNlbnQgYWRkaXRpb24gb2YgdGhlIHN1bnhpIGR3LWhkbWkgdmFyaWFudC4KCgpI ZWlrbwoKWzBdIGh0dHBzOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZHJtL2RybS1taXNjL2NvbW1p dC8/aWQ9ZWVhMDM0YWY5MGM2NDgwMmZkNzQ3YTlkYzUzNGMyNmE3ZWJlNzc1NAoKCj4gIGRyaXZl cnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvZHctaGRtaS5jICAgfCA0Mwo+ICsrKysrKysrKyst LS0tLS0tLS0tLS0tLS0tLS0tIGRyaXZlcnMvZ3B1L2RybS9pbXgvZHdfaGRtaS1pbXguYyAgICAg ICAgICAgfAo+IDIyICsrKysrKysrKy0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVz b25fZHdfaGRtaS5jICAgICAgIHwgMjAgKysrKysrKysrKy0tLS0KPiAgZHJpdmVycy9ncHUvZHJt L3JjYXItZHUvcmNhcl9kd19oZG1pLmMgICAgICB8IDE0ICsrKysrKysrLS0KPiAgZHJpdmVycy9n cHUvZHJtL3JvY2tjaGlwL2R3X2hkbWktcm9ja2NoaXAuYyB8IDIyICsrKysrKysrKy0tLS0tLQo+ ICBpbmNsdWRlL2RybS9icmlkZ2UvZHdfaGRtaS5oICAgICAgICAgICAgICAgIHwgMTcgKysrKysr LS0tLS0tCj4gIDYgZmlsZXMgY2hhbmdlZCwgNzcgaW5zZXJ0aW9ucygrKSwgNjEgZGVsZXRpb25z KC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvZHct aGRtaS5jCj4gYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL2R3LWhkbWkuYyBpbmRl eAo+IDFjYzYzYTE4YjdkNS4uZjAzODBiY2FlNTEzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9icmlkZ2Uvc3lub3BzeXMvZHctaGRtaS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9zeW5vcHN5cy9kdy1oZG1pLmMKPiBAQCAtMjA3Myw3ICsyMDczLDcgQEAgc3RhdGljIGly cXJldHVybl90IGR3X2hkbWlfaGFyZGlycShpbnQgaXJxLCB2b2lkCj4gKmRldl9pZCkgcmV0dXJu IHJldDsKPiAgfQo+IAo+IC12b2lkIF9fZHdfaGRtaV9zZXR1cF9yeF9zZW5zZShzdHJ1Y3QgZHdf aGRtaSAqaGRtaSwgYm9vbCBocGQsIGJvb2wKPiByeF9zZW5zZSkgK3ZvaWQgZHdfaGRtaV9zZXR1 cF9yeF9zZW5zZShzdHJ1Y3QgZHdfaGRtaSAqaGRtaSwgYm9vbCBocGQsIGJvb2wKPiByeF9zZW5z ZSkgewo+ICAJbXV0ZXhfbG9jaygmaGRtaS0+bXV0ZXgpOwo+IAo+IEBAIC0yMDk5LDEzICsyMDk5 LDYgQEAgdm9pZCBfX2R3X2hkbWlfc2V0dXBfcnhfc2Vuc2Uoc3RydWN0IGR3X2hkbWkgKmhkbWks Cj4gYm9vbCBocGQsIGJvb2wgcnhfc2Vuc2UpIH0KPiAgCW11dGV4X3VubG9jaygmaGRtaS0+bXV0 ZXgpOwo+ICB9Cj4gLQo+IC12b2lkIGR3X2hkbWlfc2V0dXBfcnhfc2Vuc2Uoc3RydWN0IGRldmlj ZSAqZGV2LCBib29sIGhwZCwgYm9vbCByeF9zZW5zZSkKPiAtewo+IC0Jc3RydWN0IGR3X2hkbWkg KmhkbWkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiAtCj4gLQlfX2R3X2hkbWlfc2V0dXBfcnhf c2Vuc2UoaGRtaSwgaHBkLCByeF9zZW5zZSk7Cj4gLX0KPiAgRVhQT1JUX1NZTUJPTF9HUEwoZHdf aGRtaV9zZXR1cF9yeF9zZW5zZSk7Cj4gCj4gIHN0YXRpYyBpcnFyZXR1cm5fdCBkd19oZG1pX2ly cShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCj4gQEAgLTIxNDEsOSArMjEzNCw4IEBAIHN0YXRpYyBp cnFyZXR1cm5fdCBkd19oZG1pX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCj4gIAkgKi8KPiAg CWlmIChpbnRyX3N0YXQgJgo+ICAJICAgIChIRE1JX0lIX1BIWV9TVEFUMF9SWF9TRU5TRSB8IEhE TUlfSUhfUEhZX1NUQVQwX0hQRCkpIHsKPiAtCQlfX2R3X2hkbWlfc2V0dXBfcnhfc2Vuc2UoaGRt aSwKPiAtCQkJCQkgcGh5X3N0YXQgJiBIRE1JX1BIWV9IUEQsCj4gLQkJCQkJIHBoeV9zdGF0ICYg SERNSV9QSFlfUlhfU0VOU0UpOwo+ICsJCWR3X2hkbWlfc2V0dXBfcnhfc2Vuc2UoaGRtaSwgcGh5 X3N0YXQgJiBIRE1JX1BIWV9IUEQsCj4gKwkJCQkgICAgICAgcGh5X3N0YXQgJiBIRE1JX1BIWV9S WF9TRU5TRSk7Cj4gCj4gIAkJaWYgKChwaHlfc3RhdCAmIChIRE1JX1BIWV9SWF9TRU5TRSB8IEhE TUlfUEhZX0hQRCkpID09IDApCj4gIAkJCWNlY19ub3RpZmllcl9zZXRfcGh5c19hZGRyKGhkbWkt PmNlY19ub3RpZmllciwKPiBAQCAtMjUzMyw4ICsyNTI1LDYgQEAgX19kd19oZG1pX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4gIAlpZiAoaGRtaS0+aTJjKQo+ICAJCWR3X2hk bWlfaTJjX2luaXQoaGRtaSk7Cj4gCj4gLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBoZG1p KTsKPiAtCj4gIAlyZXR1cm4gaGRtaTsKPiAKPiAgZXJyX2lhaGI6Cj4gQEAgLTI1ODQsMjUgKzI1 NzQsMjMgQEAgc3RhdGljIHZvaWQgX19kd19oZG1pX3JlbW92ZShzdHJ1Y3QgZHdfaGRtaSAqaGRt aSkKPiAgLyoKPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAtLSAqIFByb2JlL3JlbW92ZSBBUEksIHVz ZWQgZnJvbSBwbGF0Zm9ybXMgYmFzZWQgb24gdGhlIERSTSBicmlkZ2UgQVBJLiAqLwo+IC1pbnQg ZHdfaGRtaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+IC0JCSAgY29uc3Qg c3RydWN0IGR3X2hkbWlfcGxhdF9kYXRhICpwbGF0X2RhdGEpCj4gK3N0cnVjdCBkd19oZG1pICpk d19oZG1pX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4gKwkJCSAgICAgIGNv bnN0IHN0cnVjdCBkd19oZG1pX3BsYXRfZGF0YSAqcGxhdF9kYXRhKQo+ICB7Cj4gIAlzdHJ1Y3Qg ZHdfaGRtaSAqaGRtaTsKPiAKPiAgCWhkbWkgPSBfX2R3X2hkbWlfcHJvYmUocGRldiwgcGxhdF9k YXRhKTsKPiAgCWlmIChJU19FUlIoaGRtaSkpCj4gLQkJcmV0dXJuIFBUUl9FUlIoaGRtaSk7Cj4g KwkJcmV0dXJuIGhkbWk7Cj4gCj4gIAlkcm1fYnJpZGdlX2FkZCgmaGRtaS0+YnJpZGdlKTsKPiAK PiAtCXJldHVybiAwOwo+ICsJcmV0dXJuIGhkbWk7Cj4gIH0KPiAgRVhQT1JUX1NZTUJPTF9HUEwo ZHdfaGRtaV9wcm9iZSk7Cj4gCj4gLXZvaWQgZHdfaGRtaV9yZW1vdmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKPiArdm9pZCBkd19oZG1pX3JlbW92ZShzdHJ1Y3QgZHdfaGRtaSAqaGRt aSkKPiAgewo+IC0Jc3RydWN0IGR3X2hkbWkgKmhkbWkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShw ZGV2KTsKPiAtCj4gIAlkcm1fYnJpZGdlX3JlbW92ZSgmaGRtaS0+YnJpZGdlKTsKPiAKPiAgCV9f ZHdfaGRtaV9yZW1vdmUoaGRtaSk7Cj4gQEAgLTI2MTIsMzEgKzI2MDAsMzAgQEAgRVhQT1JUX1NZ TUJPTF9HUEwoZHdfaGRtaV9yZW1vdmUpOwo+ICAvKgo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IC0t ICogQmluZC91bmJpbmQgQVBJLCB1c2VkIGZyb20gcGxhdGZvcm1zIGJhc2VkIG9uIHRoZSBjb21w b25lbnQgZnJhbWV3b3JrLgo+ICovCj4gLWludCBkd19oZG1pX2JpbmQoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldiwgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAo+IC0JCSBjb25zdCBz dHJ1Y3QgZHdfaGRtaV9wbGF0X2RhdGEgKnBsYXRfZGF0YSkKPiArc3RydWN0IGR3X2hkbWkgKmR3 X2hkbWlfYmluZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ICsJCQkgICAgIHN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlciwKPiArCQkJICAgICBjb25zdCBzdHJ1Y3QgZHdfaGRtaV9w bGF0X2RhdGEgKnBsYXRfZGF0YSkKPiAgewo+ICAJc3RydWN0IGR3X2hkbWkgKmhkbWk7Cj4gIAlp bnQgcmV0Owo+IAo+ICAJaGRtaSA9IF9fZHdfaGRtaV9wcm9iZShwZGV2LCBwbGF0X2RhdGEpOwo+ ICAJaWYgKElTX0VSUihoZG1pKSkKPiAtCQlyZXR1cm4gUFRSX0VSUihoZG1pKTsKPiArCQlyZXR1 cm4gaGRtaTsKPiAKPiAgCXJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGVuY29kZXIsICZoZG1pLT5i cmlkZ2UsIE5VTEwpOwo+ICAJaWYgKHJldCkgewo+ICAJCV9fZHdfaGRtaV9yZW1vdmUoaGRtaSk7 Cj4gIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBicmlkZ2Ugd2l0aCBkcm1cbiIp Owo+IC0JCXJldHVybiByZXQ7Cj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAgCX0KPiAKPiAt CXJldHVybiAwOwo+ICsJcmV0dXJuIGhkbWk7Cj4gIH0KPiAgRVhQT1JUX1NZTUJPTF9HUEwoZHdf aGRtaV9iaW5kKTsKPiAKPiAtdm9pZCBkd19oZG1pX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYp Cj4gK3ZvaWQgZHdfaGRtaV91bmJpbmQoc3RydWN0IGR3X2hkbWkgKmhkbWkpCj4gIHsKPiAtCXN0 cnVjdCBkd19oZG1pICpoZG1pID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gLQo+ICAJX19kd19o ZG1pX3JlbW92ZShoZG1pKTsKPiAgfQo+ICBFWFBPUlRfU1lNQk9MX0dQTChkd19oZG1pX3VuYmlu ZCk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvZHdfaGRtaS1pbXguYwo+IGIv ZHJpdmVycy9ncHUvZHJtL2lteC9kd19oZG1pLWlteC5jIGluZGV4IGI2Mjc2M2FhODcwNi4uYjAx ZDAzZTAyY2UwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvZHdfaGRtaS1pbXgu Ywo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvZHdfaGRtaS1pbXguYwo+IEBAIC0yNiw2ICsy Niw4IEBAIHN0cnVjdCBpbXhfaGRtaSB7Cj4gIAlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gIAlzdHJ1 Y3QgZHJtX2VuY29kZXIgZW5jb2RlcjsKPiAgCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKPiArCj4g KwlzdHJ1Y3QgZHdfaGRtaSAqaGRtaTsKPiAgfTsKPiAKPiAgc3RhdGljIGlubGluZSBzdHJ1Y3Qg aW14X2hkbWkgKmVuY190b19pbXhfaGRtaShzdHJ1Y3QgZHJtX2VuY29kZXIgKmUpCj4gQEAgLTIz OSwyMiArMjQxLDI0IEBAIHN0YXRpYyBpbnQgZHdfaGRtaV9pbXhfYmluZChzdHJ1Y3QgZGV2aWNl ICpkZXYsIHN0cnVjdAo+IGRldmljZSAqbWFzdGVyLCBkcm1fZW5jb2Rlcl9pbml0KGRybSwgZW5j b2RlciwgJmR3X2hkbWlfaW14X2VuY29kZXJfZnVuY3MsCj4gIAkJCSBEUk1fTU9ERV9FTkNPREVS X1RNRFMsIE5VTEwpOwo+IAo+IC0JcmV0ID0gZHdfaGRtaV9iaW5kKHBkZXYsIGVuY29kZXIsIHBs YXRfZGF0YSk7Cj4gKwloZG1pLT5oZG1pID0gZHdfaGRtaV9iaW5kKHBkZXYsIGVuY29kZXIsIHBs YXRfZGF0YSk7Cj4gKwlpZiAoSVNfRVJSKGhkbWktPmhkbWkpKSB7Cj4gKwkJZW5jb2Rlci0+ZnVu Y3MtPmRlc3Ryb3koZW5jb2Rlcik7Cj4gKwkJcmV0dXJuIFBUUl9FUlIoaGRtaS0+aGRtaSk7Cj4g Kwl9Cj4gCj4gLQkvKgo+IC0JICogSWYgZHdfaGRtaV9iaW5kKCkgZmFpbHMgd2UnbGwgbmV2ZXIg Y2FsbCBkd19oZG1pX3VuYmluZCgpLAo+IC0JICogd2hpY2ggd291bGQgaGF2ZSBjYWxsZWQgdGhl IGVuY29kZXIgY2xlYW51cC4gIERvIGl0IG1hbnVhbGx5Lgo+IC0JICovCj4gLQlpZiAocmV0KQo+ IC0JCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7Cj4gKwlkZXZfc2V0X2RydmRhdGEoZGV2 LCBoZG1pKTsKPiAKPiAtCXJldHVybiByZXQ7Cj4gKwlyZXR1cm4gMDsKPiAgfQo+IAo+ICBzdGF0 aWMgdm9pZCBkd19oZG1pX2lteF91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2 aWNlICptYXN0ZXIsCj4gIAkJCSAgICAgICB2b2lkICpkYXRhKQo+ICB7Cj4gLQlyZXR1cm4gZHdf aGRtaV91bmJpbmQoZGV2KTsKPiArCXN0cnVjdCBpbXhfaGRtaSAqaGRtaSA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOwo+ICsKPiArCWR3X2hkbWlfdW5iaW5kKGhkbWktPmhkbWkpOwo+ICsJaGRtaS0+ ZW5jb2Rlci5mdW5jcy0+ZGVzdHJveSgmaGRtaS0+ZW5jb2Rlcik7Cj4gIH0KPiAKPiAgc3RhdGlj IGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIGR3X2hkbWlfaW14X29wcyA9IHsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21lc29uL21lc29uX2R3X2hkbWkuYwo+IGIvZHJpdmVycy9n cHUvZHJtL21lc29uL21lc29uX2R3X2hkbWkuYyBpbmRleCAxN2RlM2FmZDk4ZjYuLjNmMWVjOWE1 Y2JmYgo+IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9kd19oZG1p LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fZHdfaGRtaS5jCj4gQEAgLTE0 MCw2ICsxNDAsOCBAQCBzdHJ1Y3QgbWVzb25fZHdfaGRtaSB7Cj4gIAlzdHJ1Y3QgY2xrICp2ZW5j aV9jbGs7Cj4gIAlzdHJ1Y3QgcmVndWxhdG9yICpoZG1pX3N1cHBseTsKPiAgCXUzMiBpcnFfc3Rh dDsKPiArCj4gKwlzdHJ1Y3QgZHdfaGRtaSAqaGRtaTsKPiAgfTsKPiAgI2RlZmluZSBlbmNvZGVy X3RvX21lc29uX2R3X2hkbWkoeCkgXAo+ICAJY29udGFpbmVyX29mKHgsIHN0cnVjdCBtZXNvbl9k d19oZG1pLCBlbmNvZGVyKQo+IEBAIC01MjgsNyArNTMwLDcgQEAgc3RhdGljIGlycXJldHVybl90 IGR3X2hkbWlfdG9wX3RocmVhZF9pcnEoaW50IGlycSwgdm9pZAo+ICpkZXZfaWQpIGlmIChzdGF0 ICYgSERNSVRYX1RPUF9JTlRSX0hQRF9SSVNFKQo+ICAJCQlocGRfY29ubmVjdGVkID0gdHJ1ZTsK PiAKPiAtCQlkd19oZG1pX3NldHVwX3J4X3NlbnNlKGR3X2hkbWktPmRldiwgaHBkX2Nvbm5lY3Rl ZCwKPiArCQlkd19oZG1pX3NldHVwX3J4X3NlbnNlKGR3X2hkbWktPmhkbWksIGhwZF9jb25uZWN0 ZWQsCj4gIAkJCQkgICAgICAgaHBkX2Nvbm5lY3RlZCk7Cj4gCj4gIAkJZHJtX2hlbHBlcl9ocGRf aXJxX2V2ZW50KGR3X2hkbWktPmVuY29kZXIuZGV2KTsKPiBAQCAtODc4LDkgKzg4MCwxNCBAQCBz dGF0aWMgaW50IG1lc29uX2R3X2hkbWlfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gc3RydWN0 IGRldmljZSAqbWFzdGVyLCBkd19wbGF0X2RhdGEtPmlucHV0X2J1c19mb3JtYXQgPQo+IE1FRElB X0JVU19GTVRfWVVWOF8xWDI0Owo+ICAJZHdfcGxhdF9kYXRhLT5pbnB1dF9idXNfZW5jb2Rpbmcg PSBWNEwyX1lDQkNSX0VOQ183MDk7Cj4gCj4gLQlyZXQgPSBkd19oZG1pX2JpbmQocGRldiwgZW5j b2RlciwgJm1lc29uX2R3X2hkbWktPmR3X3BsYXRfZGF0YSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJl dHVybiByZXQ7Cj4gKwltZXNvbl9kd19oZG1pLT5oZG1pID0gZHdfaGRtaV9iaW5kKHBkZXYsIGVu Y29kZXIsCj4gKwkJCQkJICAgJm1lc29uX2R3X2hkbWktPmR3X3BsYXRfZGF0YSk7Cj4gKwlpZiAo SVNfRVJSKG1lc29uX2R3X2hkbWktPmhkbWkpKSB7Cj4gKwkJZW5jb2Rlci0+ZnVuY3MtPmRlc3Ry b3koZW5jb2Rlcik7Cj4gKwkJcmV0dXJuIFBUUl9FUlIobWVzb25fZHdfaGRtaS0+aGRtaSk7Cj4g Kwl9Cj4gKwo+ICsJZGV2X3NldF9kcnZkYXRhKGRldiwgbWVzb25fZHdfaGRtaSk7Cj4gCj4gIAlE Uk1fREVCVUdfRFJJVkVSKCJIRE1JIGNvbnRyb2xsZXIgaW5pdGlhbGl6ZWRcbiIpOwo+IAo+IEBA IC04OTAsNyArODk3LDEwIEBAIHN0YXRpYyBpbnQgbWVzb25fZHdfaGRtaV9iaW5kKHN0cnVjdCBk ZXZpY2UgKmRldiwKPiBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHN0YXRpYyB2b2lkIG1lc29uX2R3 X2hkbWlfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKPiBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIs IHZvaWQgKmRhdGEpCj4gIHsKPiAtCWR3X2hkbWlfdW5iaW5kKGRldik7Cj4gKwlzdHJ1Y3QgbWVz b25fZHdfaGRtaSAqbWVzb25fZHdfaGRtaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsKPiAr CWR3X2hkbWlfdW5iaW5kKG1lc29uX2R3X2hkbWktPmhkbWkpOwo+ICsJbWVzb25fZHdfaGRtaS0+ ZW5jb2Rlci5mdW5jcy0+ZGVzdHJveSgmbWVzb25fZHdfaGRtaS0+ZW5jb2Rlcik7Cj4gIH0KPiAK PiAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIG1lc29uX2R3X2hkbWlfb3BzID0g ewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R3X2hkbWkuYwo+ IGIvZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kd19oZG1pLmMgaW5kZXggZGM4NWI1M2Q1 OGVmLi43NjIxMGFlMjUwOTQKPiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmNhci1k dS9yY2FyX2R3X2hkbWkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHdf aGRtaS5jCj4gQEAgLTY4LDEyICs2OCwyMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGR3X2hkbWlf cGxhdF9kYXRhCj4gcmNhcl9kd19oZG1pX3BsYXRfZGF0YSA9IHsKPiAKPiAgc3RhdGljIGludCBy Y2FyX2R3X2hkbWlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAgewo+IC0J cmV0dXJuIGR3X2hkbWlfcHJvYmUocGRldiwgJnJjYXJfZHdfaGRtaV9wbGF0X2RhdGEpOwo+ICsJ c3RydWN0IGR3X2hkbWkgKmhkbWk7Cj4gKwo+ICsJaGRtaSA9IGR3X2hkbWlfcHJvYmUocGRldiwg JnJjYXJfZHdfaGRtaV9wbGF0X2RhdGEpOwo+ICsJaWYgKElTX0VSUihoZG1pKSkKPiArCQlyZXR1 cm4gUFRSX0VSUihoZG1pKTsKPiArCj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBoZG1p KTsKPiArCj4gKwlyZXR1cm4gMDsKPiAgfQo+IAo+ICBzdGF0aWMgaW50IHJjYXJfZHdfaGRtaV9y ZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAgewo+IC0JZHdfaGRtaV9yZW1v dmUocGRldik7Cj4gKwlzdHJ1Y3QgZHdfaGRtaSAqaGRtaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRh KHBkZXYpOwo+ICsKPiArCWR3X2hkbWlfcmVtb3ZlKGhkbWkpOwo+IAo+ICAJcmV0dXJuIDA7Cj4g IH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3X2hkbWktcm9ja2No aXAuYwo+IGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3X2hkbWktcm9ja2NoaXAuYyBpbmRl eAo+IDFlYjAyYTgyZmQ5MS4uZDQwNmQ3Nzc5ZWQ5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9yb2NrY2hpcC9kd19oZG1pLXJvY2tjaGlwLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvZHdfaGRtaS1yb2NrY2hpcC5jCj4gQEAgLTQ4LDYgKzQ4LDggQEAgc3RydWN0IHJv Y2tjaGlwX2hkbWkgewo+ICAJY29uc3Qgc3RydWN0IHJvY2tjaGlwX2hkbWlfY2hpcF9kYXRhICpj aGlwX2RhdGE7Cj4gIAlzdHJ1Y3QgY2xrICp2cGxsX2NsazsKPiAgCXN0cnVjdCBjbGsgKmdyZl9j bGs7Cj4gKwo+ICsJc3RydWN0IGR3X2hkbWkgKmhkbWk7Cj4gIH07Cj4gCj4gICNkZWZpbmUgdG9f cm9ja2NoaXBfaGRtaSh4KQljb250YWluZXJfb2YoeCwgc3RydWN0IHJvY2tjaGlwX2hkbWksIHgp Cj4gQEAgLTM3NywyMiArMzc5LDI0IEBAIHN0YXRpYyBpbnQgZHdfaGRtaV9yb2NrY2hpcF9iaW5k KHN0cnVjdCBkZXZpY2UgKmRldiwKPiBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIGRybV9lbmNvZGVy X2luaXQoZHJtLCBlbmNvZGVyLAo+ICZkd19oZG1pX3JvY2tjaGlwX2VuY29kZXJfZnVuY3MsCj4g IAkJCSBEUk1fTU9ERV9FTkNPREVSX1RNRFMsIE5VTEwpOwo+IAo+IC0JcmV0ID0gZHdfaGRtaV9i aW5kKHBkZXYsIGVuY29kZXIsIHBsYXRfZGF0YSk7Cj4gKwloZG1pLT5oZG1pID0gZHdfaGRtaV9i aW5kKHBkZXYsIGVuY29kZXIsIHBsYXRfZGF0YSk7Cj4gKwlpZiAoSVNfRVJSKGhkbWktPmhkbWkp KSB7Cj4gKwkJZW5jb2Rlci0+ZnVuY3MtPmRlc3Ryb3koZW5jb2Rlcik7Cj4gKwkJcmV0dXJuIFBU Ul9FUlIoaGRtaS0+aGRtaSk7Cj4gKwl9Cj4gCj4gLQkvKgo+IC0JICogSWYgZHdfaGRtaV9iaW5k KCkgZmFpbHMgd2UnbGwgbmV2ZXIgY2FsbCBkd19oZG1pX3VuYmluZCgpLAo+IC0JICogd2hpY2gg d291bGQgaGF2ZSBjYWxsZWQgdGhlIGVuY29kZXIgY2xlYW51cC4gIERvIGl0IG1hbnVhbGx5Lgo+ IC0JICovCj4gLQlpZiAocmV0KQo+IC0JCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7Cj4g KwlkZXZfc2V0X2RydmRhdGEoZGV2LCBoZG1pKTsKPiAKPiAtCXJldHVybiByZXQ7Cj4gKwlyZXR1 cm4gMDsKPiAgfQo+IAo+ICBzdGF0aWMgdm9pZCBkd19oZG1pX3JvY2tjaGlwX3VuYmluZChzdHJ1 Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UKPiAqbWFzdGVyLCB2b2lkICpkYXRhKQo+ICB7 Cj4gLQlyZXR1cm4gZHdfaGRtaV91bmJpbmQoZGV2KTsKPiArCXN0cnVjdCByb2NrY2hpcF9oZG1p ICpoZG1pID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwo+ICsJZHdfaGRtaV91bmJpbmQoaGRt aS0+aGRtaSk7Cj4gKwloZG1pLT5lbmNvZGVyLmZ1bmNzLT5kZXN0cm95KCZoZG1pLT5lbmNvZGVy KTsKPiAgfQo+IAo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgZHdfaGRtaV9y b2NrY2hpcF9vcHMgPSB7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2JyaWRnZS9kd19oZG1p LmggYi9pbmNsdWRlL2RybS9icmlkZ2UvZHdfaGRtaS5oCj4gaW5kZXggMTgyZjgzMjgzZTI0Li4y OWI4OTAwY2FhZjcgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vYnJpZGdlL2R3X2hkbWkuaAo+ ICsrKyBiL2luY2x1ZGUvZHJtL2JyaWRnZS9kd19oZG1pLmgKPiBAQCAtMTQzLDE0ICsxNDMsMTUg QEAgc3RydWN0IGR3X2hkbWlfcGxhdF9kYXRhIHsKPiAgCQkJICAgICB1bnNpZ25lZCBsb25nIG1w aXhlbGNsb2NrKTsKPiAgfTsKPiAKPiAtaW50IGR3X2hkbWlfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldiwKPiAtCQkgIGNvbnN0IHN0cnVjdCBkd19oZG1pX3BsYXRfZGF0YSAqcGxh dF9kYXRhKTsKPiAtdm9pZCBkd19oZG1pX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KTsKPiAtdm9pZCBkd19oZG1pX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+IC1pbnQg ZHdfaGRtaV9iaW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlciwKPiAtCQkgY29uc3Qgc3RydWN0IGR3X2hkbWlfcGxhdF9kYXRhICpwbGF0 X2RhdGEpOwo+IC0KPiAtdm9pZCBkd19oZG1pX3NldHVwX3J4X3NlbnNlKHN0cnVjdCBkZXZpY2Ug KmRldiwgYm9vbCBocGQsIGJvb2wgcnhfc2Vuc2UpOwo+ICtzdHJ1Y3QgZHdfaGRtaSAqZHdfaGRt aV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ICsJCQkgICAgICBjb25zdCBz dHJ1Y3QgZHdfaGRtaV9wbGF0X2RhdGEgKnBsYXRfZGF0YSk7Cj4gK3ZvaWQgZHdfaGRtaV9yZW1v dmUoc3RydWN0IGR3X2hkbWkgKmhkbWkpOwo+ICt2b2lkIGR3X2hkbWlfdW5iaW5kKHN0cnVjdCBk d19oZG1pICpoZG1pKTsKPiArc3RydWN0IGR3X2hkbWkgKmR3X2hkbWlfYmluZChzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2LAo+ICsJCQkgICAgIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl ciwKPiArCQkJICAgICBjb25zdCBzdHJ1Y3QgZHdfaGRtaV9wbGF0X2RhdGEgKnBsYXRfZGF0YSk7 Cj4gKwo+ICt2b2lkIGR3X2hkbWlfc2V0dXBfcnhfc2Vuc2Uoc3RydWN0IGR3X2hkbWkgKmhkbWks IGJvb2wgaHBkLCBib29sIHJ4X3NlbnNlKTsKPiAKPiAgdm9pZCBkd19oZG1pX3NldF9zYW1wbGVf cmF0ZShzdHJ1Y3QgZHdfaGRtaSAqaGRtaSwgdW5zaWduZWQgaW50IHJhdGUpOwo+ICB2b2lkIGR3 X2hkbWlfYXVkaW9fZW5hYmxlKHN0cnVjdCBkd19oZG1pICpoZG1pKTsKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0 CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1032577AbeCAPqK (ORCPT ); Thu, 1 Mar 2018 10:46:10 -0500 Received: from gloria.sntech.de ([95.129.55.99]:49112 "EHLO gloria.sntech.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1031907AbeCAPqJ (ORCPT ); Thu, 1 Mar 2018 10:46:09 -0500 From: Heiko =?ISO-8859-1?Q?St=FCbner?= To: dri-devel@lists.freedesktop.org Cc: Thierry Escande , Rob Herring , Archit Taneja , Daniel Vetter , Neil Armstrong , Laurent Pinchart , Sandy Huang , linux-rockchip@lists.infradead.org, Jeffy Chen , linux-kernel@vger.kernel.org Subject: Re: [PATCH v8 7/8] drm/bridge/synopsys: dw-hdmi: Do not use device's drvdata Date: Thu, 01 Mar 2018 16:45:57 +0100 Message-ID: <4608895.HSl1MMrfU7@diego> In-Reply-To: <20180110162348.22765-8-thierry.escande@collabora.com> References: <20180110162348.22765-1-thierry.escande@collabora.com> <20180110162348.22765-8-thierry.escande@collabora.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Am Mittwoch, 10. Januar 2018, 17:23:47 CET schrieb Thierry Escande: > From: Jeffy Chen > > Let plat drivers own the drvdata, so that they could cleanup resources > in their unbind(). > > Signed-off-by: Jeffy Chen > Signed-off-by: Thierry Escande > Reviewed-by: Neil Armstrong This looks like it is probably superseeded by "drm/bridge/synopsys: dw-hdmi: don't clobber drvdata" [0] ? If there are still necessary things in it, it will need to be adapted for the recent addition of the sunxi dw-hdmi variant. Heiko [0] https://cgit.freedesktop.org/drm/drm-misc/commit/?id=eea034af90c64802fd747a9dc534c26a7ebe7754 > drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 43 > ++++++++++------------------- drivers/gpu/drm/imx/dw_hdmi-imx.c | > 22 +++++++++------ > drivers/gpu/drm/meson/meson_dw_hdmi.c | 20 ++++++++++---- > drivers/gpu/drm/rcar-du/rcar_dw_hdmi.c | 14 ++++++++-- > drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 22 +++++++++------ > include/drm/bridge/dw_hdmi.h | 17 ++++++------ > 6 files changed, 77 insertions(+), 61 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c > b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index > 1cc63a18b7d5..f0380bcae513 100644 > --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c > +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c > @@ -2073,7 +2073,7 @@ static irqreturn_t dw_hdmi_hardirq(int irq, void > *dev_id) return ret; > } > > -void __dw_hdmi_setup_rx_sense(struct dw_hdmi *hdmi, bool hpd, bool > rx_sense) +void dw_hdmi_setup_rx_sense(struct dw_hdmi *hdmi, bool hpd, bool > rx_sense) { > mutex_lock(&hdmi->mutex); > > @@ -2099,13 +2099,6 @@ void __dw_hdmi_setup_rx_sense(struct dw_hdmi *hdmi, > bool hpd, bool rx_sense) } > mutex_unlock(&hdmi->mutex); > } > - > -void dw_hdmi_setup_rx_sense(struct device *dev, bool hpd, bool rx_sense) > -{ > - struct dw_hdmi *hdmi = dev_get_drvdata(dev); > - > - __dw_hdmi_setup_rx_sense(hdmi, hpd, rx_sense); > -} > EXPORT_SYMBOL_GPL(dw_hdmi_setup_rx_sense); > > static irqreturn_t dw_hdmi_irq(int irq, void *dev_id) > @@ -2141,9 +2134,8 @@ static irqreturn_t dw_hdmi_irq(int irq, void *dev_id) > */ > if (intr_stat & > (HDMI_IH_PHY_STAT0_RX_SENSE | HDMI_IH_PHY_STAT0_HPD)) { > - __dw_hdmi_setup_rx_sense(hdmi, > - phy_stat & HDMI_PHY_HPD, > - phy_stat & HDMI_PHY_RX_SENSE); > + dw_hdmi_setup_rx_sense(hdmi, phy_stat & HDMI_PHY_HPD, > + phy_stat & HDMI_PHY_RX_SENSE); > > if ((phy_stat & (HDMI_PHY_RX_SENSE | HDMI_PHY_HPD)) == 0) > cec_notifier_set_phys_addr(hdmi->cec_notifier, > @@ -2533,8 +2525,6 @@ __dw_hdmi_probe(struct platform_device *pdev, > if (hdmi->i2c) > dw_hdmi_i2c_init(hdmi); > > - platform_set_drvdata(pdev, hdmi); > - > return hdmi; > > err_iahb: > @@ -2584,25 +2574,23 @@ static void __dw_hdmi_remove(struct dw_hdmi *hdmi) > /* > --------------------------------------------------------------------------- > -- * Probe/remove API, used from platforms based on the DRM bridge API. */ > -int dw_hdmi_probe(struct platform_device *pdev, > - const struct dw_hdmi_plat_data *plat_data) > +struct dw_hdmi *dw_hdmi_probe(struct platform_device *pdev, > + const struct dw_hdmi_plat_data *plat_data) > { > struct dw_hdmi *hdmi; > > hdmi = __dw_hdmi_probe(pdev, plat_data); > if (IS_ERR(hdmi)) > - return PTR_ERR(hdmi); > + return hdmi; > > drm_bridge_add(&hdmi->bridge); > > - return 0; > + return hdmi; > } > EXPORT_SYMBOL_GPL(dw_hdmi_probe); > > -void dw_hdmi_remove(struct platform_device *pdev) > +void dw_hdmi_remove(struct dw_hdmi *hdmi) > { > - struct dw_hdmi *hdmi = platform_get_drvdata(pdev); > - > drm_bridge_remove(&hdmi->bridge); > > __dw_hdmi_remove(hdmi); > @@ -2612,31 +2600,30 @@ EXPORT_SYMBOL_GPL(dw_hdmi_remove); > /* > --------------------------------------------------------------------------- > -- * Bind/unbind API, used from platforms based on the component framework. > */ > -int dw_hdmi_bind(struct platform_device *pdev, struct drm_encoder *encoder, > - const struct dw_hdmi_plat_data *plat_data) > +struct dw_hdmi *dw_hdmi_bind(struct platform_device *pdev, > + struct drm_encoder *encoder, > + const struct dw_hdmi_plat_data *plat_data) > { > struct dw_hdmi *hdmi; > int ret; > > hdmi = __dw_hdmi_probe(pdev, plat_data); > if (IS_ERR(hdmi)) > - return PTR_ERR(hdmi); > + return hdmi; > > ret = drm_bridge_attach(encoder, &hdmi->bridge, NULL); > if (ret) { > __dw_hdmi_remove(hdmi); > DRM_ERROR("Failed to initialize bridge with drm\n"); > - return ret; > + return ERR_PTR(ret); > } > > - return 0; > + return hdmi; > } > EXPORT_SYMBOL_GPL(dw_hdmi_bind); > > -void dw_hdmi_unbind(struct device *dev) > +void dw_hdmi_unbind(struct dw_hdmi *hdmi) > { > - struct dw_hdmi *hdmi = dev_get_drvdata(dev); > - > __dw_hdmi_remove(hdmi); > } > EXPORT_SYMBOL_GPL(dw_hdmi_unbind); > diff --git a/drivers/gpu/drm/imx/dw_hdmi-imx.c > b/drivers/gpu/drm/imx/dw_hdmi-imx.c index b62763aa8706..b01d03e02ce0 100644 > --- a/drivers/gpu/drm/imx/dw_hdmi-imx.c > +++ b/drivers/gpu/drm/imx/dw_hdmi-imx.c > @@ -26,6 +26,8 @@ struct imx_hdmi { > struct device *dev; > struct drm_encoder encoder; > struct regmap *regmap; > + > + struct dw_hdmi *hdmi; > }; > > static inline struct imx_hdmi *enc_to_imx_hdmi(struct drm_encoder *e) > @@ -239,22 +241,24 @@ static int dw_hdmi_imx_bind(struct device *dev, struct > device *master, drm_encoder_init(drm, encoder, &dw_hdmi_imx_encoder_funcs, > DRM_MODE_ENCODER_TMDS, NULL); > > - ret = dw_hdmi_bind(pdev, encoder, plat_data); > + hdmi->hdmi = dw_hdmi_bind(pdev, encoder, plat_data); > + if (IS_ERR(hdmi->hdmi)) { > + encoder->funcs->destroy(encoder); > + return PTR_ERR(hdmi->hdmi); > + } > > - /* > - * If dw_hdmi_bind() fails we'll never call dw_hdmi_unbind(), > - * which would have called the encoder cleanup. Do it manually. > - */ > - if (ret) > - drm_encoder_cleanup(encoder); > + dev_set_drvdata(dev, hdmi); > > - return ret; > + return 0; > } > > static void dw_hdmi_imx_unbind(struct device *dev, struct device *master, > void *data) > { > - return dw_hdmi_unbind(dev); > + struct imx_hdmi *hdmi = dev_get_drvdata(dev); > + > + dw_hdmi_unbind(hdmi->hdmi); > + hdmi->encoder.funcs->destroy(&hdmi->encoder); > } > > static const struct component_ops dw_hdmi_imx_ops = { > diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c > b/drivers/gpu/drm/meson/meson_dw_hdmi.c index 17de3afd98f6..3f1ec9a5cbfb > 100644 > --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c > +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c > @@ -140,6 +140,8 @@ struct meson_dw_hdmi { > struct clk *venci_clk; > struct regulator *hdmi_supply; > u32 irq_stat; > + > + struct dw_hdmi *hdmi; > }; > #define encoder_to_meson_dw_hdmi(x) \ > container_of(x, struct meson_dw_hdmi, encoder) > @@ -528,7 +530,7 @@ static irqreturn_t dw_hdmi_top_thread_irq(int irq, void > *dev_id) if (stat & HDMITX_TOP_INTR_HPD_RISE) > hpd_connected = true; > > - dw_hdmi_setup_rx_sense(dw_hdmi->dev, hpd_connected, > + dw_hdmi_setup_rx_sense(dw_hdmi->hdmi, hpd_connected, > hpd_connected); > > drm_helper_hpd_irq_event(dw_hdmi->encoder.dev); > @@ -878,9 +880,14 @@ static int meson_dw_hdmi_bind(struct device *dev, > struct device *master, dw_plat_data->input_bus_format = > MEDIA_BUS_FMT_YUV8_1X24; > dw_plat_data->input_bus_encoding = V4L2_YCBCR_ENC_709; > > - ret = dw_hdmi_bind(pdev, encoder, &meson_dw_hdmi->dw_plat_data); > - if (ret) > - return ret; > + meson_dw_hdmi->hdmi = dw_hdmi_bind(pdev, encoder, > + &meson_dw_hdmi->dw_plat_data); > + if (IS_ERR(meson_dw_hdmi->hdmi)) { > + encoder->funcs->destroy(encoder); > + return PTR_ERR(meson_dw_hdmi->hdmi); > + } > + > + dev_set_drvdata(dev, meson_dw_hdmi); > > DRM_DEBUG_DRIVER("HDMI controller initialized\n"); > > @@ -890,7 +897,10 @@ static int meson_dw_hdmi_bind(struct device *dev, > struct device *master, static void meson_dw_hdmi_unbind(struct device *dev, > struct device *master, void *data) > { > - dw_hdmi_unbind(dev); > + struct meson_dw_hdmi *meson_dw_hdmi = dev_get_drvdata(dev); > + > + dw_hdmi_unbind(meson_dw_hdmi->hdmi); > + meson_dw_hdmi->encoder.funcs->destroy(&meson_dw_hdmi->encoder); > } > > static const struct component_ops meson_dw_hdmi_ops = { > diff --git a/drivers/gpu/drm/rcar-du/rcar_dw_hdmi.c > b/drivers/gpu/drm/rcar-du/rcar_dw_hdmi.c index dc85b53d58ef..76210ae25094 > 100644 > --- a/drivers/gpu/drm/rcar-du/rcar_dw_hdmi.c > +++ b/drivers/gpu/drm/rcar-du/rcar_dw_hdmi.c > @@ -68,12 +68,22 @@ static const struct dw_hdmi_plat_data > rcar_dw_hdmi_plat_data = { > > static int rcar_dw_hdmi_probe(struct platform_device *pdev) > { > - return dw_hdmi_probe(pdev, &rcar_dw_hdmi_plat_data); > + struct dw_hdmi *hdmi; > + > + hdmi = dw_hdmi_probe(pdev, &rcar_dw_hdmi_plat_data); > + if (IS_ERR(hdmi)) > + return PTR_ERR(hdmi); > + > + platform_set_drvdata(pdev, hdmi); > + > + return 0; > } > > static int rcar_dw_hdmi_remove(struct platform_device *pdev) > { > - dw_hdmi_remove(pdev); > + struct dw_hdmi *hdmi = platform_get_drvdata(pdev); > + > + dw_hdmi_remove(hdmi); > > return 0; > } > diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c > b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c index > 1eb02a82fd91..d406d7779ed9 100644 > --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c > +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c > @@ -48,6 +48,8 @@ struct rockchip_hdmi { > const struct rockchip_hdmi_chip_data *chip_data; > struct clk *vpll_clk; > struct clk *grf_clk; > + > + struct dw_hdmi *hdmi; > }; > > #define to_rockchip_hdmi(x) container_of(x, struct rockchip_hdmi, x) > @@ -377,22 +379,24 @@ static int dw_hdmi_rockchip_bind(struct device *dev, > struct device *master, drm_encoder_init(drm, encoder, > &dw_hdmi_rockchip_encoder_funcs, > DRM_MODE_ENCODER_TMDS, NULL); > > - ret = dw_hdmi_bind(pdev, encoder, plat_data); > + hdmi->hdmi = dw_hdmi_bind(pdev, encoder, plat_data); > + if (IS_ERR(hdmi->hdmi)) { > + encoder->funcs->destroy(encoder); > + return PTR_ERR(hdmi->hdmi); > + } > > - /* > - * If dw_hdmi_bind() fails we'll never call dw_hdmi_unbind(), > - * which would have called the encoder cleanup. Do it manually. > - */ > - if (ret) > - drm_encoder_cleanup(encoder); > + dev_set_drvdata(dev, hdmi); > > - return ret; > + return 0; > } > > static void dw_hdmi_rockchip_unbind(struct device *dev, struct device > *master, void *data) > { > - return dw_hdmi_unbind(dev); > + struct rockchip_hdmi *hdmi = dev_get_drvdata(dev); > + > + dw_hdmi_unbind(hdmi->hdmi); > + hdmi->encoder.funcs->destroy(&hdmi->encoder); > } > > static const struct component_ops dw_hdmi_rockchip_ops = { > diff --git a/include/drm/bridge/dw_hdmi.h b/include/drm/bridge/dw_hdmi.h > index 182f83283e24..29b8900caaf7 100644 > --- a/include/drm/bridge/dw_hdmi.h > +++ b/include/drm/bridge/dw_hdmi.h > @@ -143,14 +143,15 @@ struct dw_hdmi_plat_data { > unsigned long mpixelclock); > }; > > -int dw_hdmi_probe(struct platform_device *pdev, > - const struct dw_hdmi_plat_data *plat_data); > -void dw_hdmi_remove(struct platform_device *pdev); > -void dw_hdmi_unbind(struct device *dev); > -int dw_hdmi_bind(struct platform_device *pdev, struct drm_encoder *encoder, > - const struct dw_hdmi_plat_data *plat_data); > - > -void dw_hdmi_setup_rx_sense(struct device *dev, bool hpd, bool rx_sense); > +struct dw_hdmi *dw_hdmi_probe(struct platform_device *pdev, > + const struct dw_hdmi_plat_data *plat_data); > +void dw_hdmi_remove(struct dw_hdmi *hdmi); > +void dw_hdmi_unbind(struct dw_hdmi *hdmi); > +struct dw_hdmi *dw_hdmi_bind(struct platform_device *pdev, > + struct drm_encoder *encoder, > + const struct dw_hdmi_plat_data *plat_data); > + > +void dw_hdmi_setup_rx_sense(struct dw_hdmi *hdmi, bool hpd, bool rx_sense); > > void dw_hdmi_set_sample_rate(struct dw_hdmi *hdmi, unsigned int rate); > void dw_hdmi_audio_enable(struct dw_hdmi *hdmi);