From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v2] drm/tinydrm: Move backlight helpers to a separate file Date: Tue, 26 Sep 2017 13:32:15 +0200 Message-ID: <20170926113214.ahxqmqspsd3olu73@phenom.ffwll.local> References: <20170922150935.GA15912@meghana-HP-Pavilion-Notebook> <3dd313c8-daa7-a395-183c-c2dfac4dd4b4@tronnes.org> <20170926111650.GA7624@meghana-HP-Pavilion-Notebook> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x22f.google.com (mail-wm0-x22f.google.com [IPv6:2a00:1450:400c:c09::22f]) by gabe.freedesktop.org (Postfix) with ESMTPS id 75AC589993 for ; Tue, 26 Sep 2017 11:32:19 +0000 (UTC) Received: by mail-wm0-x22f.google.com with SMTP id r74so6765846wme.4 for ; Tue, 26 Sep 2017 04:32:19 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20170926111650.GA7624@meghana-HP-Pavilion-Notebook> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Meghana Madhyastha Cc: outreachy-kernel , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBTZXAgMjYsIDIwMTcgYXQgMDQ6NDY6NTNQTSArMDUzMCwgTWVnaGFuYSBNYWRoeWFz dGhhIHdyb3RlOgo+IE9uIE1vbiwgU2VwIDI1LCAyMDE3IGF0IDA2OjMxOjU4UE0gKzAyMDAsIE5v cmFsZiBUcsO4bm5lcyB3cm90ZToKPiA+IAo+ID4gRGVuIDI1LjA5LjIwMTcgMTYuNTYsIHNrcmV2 IE5vcmFsZiBUcsO4bm5lczoKPiA+ID5IaSBNZWdoYW5hLAo+ID4gPgo+ID4gPgo+ID4gPkRlbiAy Mi4wOS4yMDE3IDE3LjA5LCBza3JldiBNZWdoYW5hIE1hZGh5YXN0aGE6Cj4gPiA+Pk1vdmUgYmFj a2xpZ2h0IGhlbHBlcnMgZnJvbSB0aW55ZHJtLWhlbHBlcnMuYyB0bwo+ID4gPj50aW55ZHJtLWJh Y2tsaWdodC5jLiBUaGlzIGlzIGJlY2F1c2UgaXQgaXMgb3JnYW5pemF0aW9uYWxseQo+ID4gPj5z aW1wbGVyIHRvIHVuZGVyc3RhbmQgYW5kIGFkdmFudGFnZW91cyB0byBncm91cCBmdW5jdGlvbnMK PiA+ID4+cGVyZm9ybWluZyBhIHNpbWlsYXIgZnVuY3Rpb24gdG8gYSBzZXBhcmF0ZSBmaWxlIGFz IG9wcG9zZWQgdG8KPiA+ID4+aGF2aW5nIG9uZSBoZWxwZXIgZmlsZSB3aXRoIGhldGVyZWdlbm91 cyBoZWxwZXIgZnVuY3Rpb25zLgo+ID4gPj4KPiA+ID4+U2lnbmVkLW9mZi1ieTogTWVnaGFuYSBN YWRoeWFzdGhhIDxtZWdoYW5hLm1hZGh5YXN0aGFAZ21haWwuY29tPgo+ID4gPj4tLS0KPiA+ID4K PiA+ID5JIGRvbid0IHRoaW5rIHRoZXJlIGlzIG11Y2ggZ2FpbiBpbiBqdXN0IG1vdmluZyB0aGUg Y29kZSBsaWtlIHRoaXMuCj4gPiA+Cj4gPiA+VGhlIGlkZWEgaXMgdG8gYWRkIGEgZHJtX2JhY2ts aWdodCBoZWxwZXIgdGhhdCBjYW4gYmUgdXNlZnVsIGZvciBhbGwKPiA+ID5EUk0gZHJpdmVycyB0 aGF0IHVzZSB0aGUgYmFja2xpZ2h0IHN1YnN5c3RlbS4KPiAKPiBZZXMgSSBhZ3JlZS4gVGhhdCBk ZWZpbml0ZWx5IG1ha2VzIG1vcmUgc2Vuc2UuCj4gPiAKPiA+IFRoZSBmdWxsIHBhdGggdG8gdGhh dCBoZWxwZXIgd291bGQgYmU6Cj4gPiBkcml2ZXJzL2dwdS9kcm0vZHJtX2JhY2tsaWdodC5jCj4g PiAKPiA+ID5UaGlzIGlzIHdoYXQgdGhlIFRPRE8gc2F5czoKPiA+ID5odHRwczovL2RyaS5mcmVl ZGVza3RvcC5vcmcvZG9jcy9kcm0vZ3B1L3RvZG8uaHRtbCN0aW55ZHJtCj4gPiA+Cj4gPiA+LSBi YWNrbGlnaHQgaGVscGVycywgcHJvYmFibHkgYmVzdCB0byBwdXQgdGhlbSBpbnRvIGEgbmV3IGRy bV9iYWNrbGlnaHQuYy4KPiA+ID7CoCBUaGlzIGlzIGJlY2F1c2UgZHJpdmVycy92aWRlbyBpcyBk ZS1mYWN0byB1bm1haW50YWluZWQuIFdlIGNvdWxkIGFsc28KPiA+ID7CoCBtb3ZlIGRyaXZlcnMv dmlkZW8vYmFja2xpZ2h0IHRvIGRyaXZlcnMvZ3B1L2JhY2tsaWdodCBhbmQgdGFrZSBpdCBhbGwK PiA+ID7CoCBvdmVyIHdpdGhpbiBkcm0tbWlzYywgYnV0IHRoYXTigJlzIG1vcmUgd29yay4KPiA+ ID4KPiA+ID5UaGVyZSBpcyBhbHNvIHRoaXMgZGlzY3Vzc2lvbiB0byB0YWtlIGludG8gYWNjb3Vu dDoKPiA+ID5LTVMgYmFja2xpZ2h0IEFCSSBwcm9wb3NpdGlvbgo+ID4gPmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL2FyY2hpdmVzL2RyaS1kZXZlbC8yMDE3LUZlYnJ1YXJ5LzEzMzIwNi5o dG1sCj4gPiA+Cj4gPiA+Cj4gPiA+SSBkb24ndCByZW1lbWJlciB3aGF0IGNhbWUgb3V0IG9mIHRo YXQgZGlzY3Vzc2lvbi4KPiA+ID4KPiA+ID5Ob3JhbGYuCj4gCj4gQWZ0ZXIgaGF2aW5nIGRpc2N1 c3NlZCB0aGlzIHdpdGggRGFuaWVsIG9uIHRoZSAjZHJpLWRldmVsIGlyYyBjaGFubmVsLCAKPiBo ZXJlIGFyZSBzb21lIG9mIHRoZSBwb2ludHMgc3VnZ2VzdGVkLgo+IAo+IERhbmllbCBzdWdnZXN0 ZWQgdGhhdCBJIGZpcnN0IGxvb2sgaW50byB0aGUgdXNhZ2Ugb2Ygc2hhcmVkIGJhY2tsaWdodAo+ IGhlbHBlcnMgaW4gZHJtIChzcGVjaWZpY2FsbHkgYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMgdG8g YmVnaW4gd2l0aCkuIFRoZSBpZGVhCj4gd2FzIHRvIHNlZSB3aGV0aGVyIHRoZXJlIGlzIGFueSBw YXR0ZXJuIGluIHVzYWdlIGFuZC9vciBjb2RlIGR1cGljYXRpb24uCj4gSWYgdGhlcmUgaXMsIHRo ZW4gdGhlIG5leHQgc3RlcCB3b3VsZCBiZSB0byB3cml0ZSBoZWxwZXIgZnVuY3Rpb25zIHdoaWNo Cj4gY2FuIGJlIHVzZWQgYnkgb3RoZXIgZHJpdmVycyAoYW5kIG5vdCBqdXN0IHRpbnlkcm0pLiAK PiAKPiBUbyBzdGFydCB3aXRoLCBJIHdlbnQgdGhyb3VnaCB0aGUgaW5zdGFuY2VzIG9mIGJhY2ts aWdodF91cGRhdGVfc3RhdHVzCj4gaW4gdGhlIGRybSBjb2RlLCBhbmQgbWFkZSB0aGUgZm9sbG93 aW5nIG9ic2VydmF0aW9ucyhtb3N0IG9mIHRoZW0gYXJlCj4gdmVyeSBzaW1wbGUvbmFpdmUgb2Jz ZXJ2YXRpb25zKS4KPiAKPiAtIGJhY2tsaWdodF91cGRhdGVfc3RhdHVzIGlzIHVzdWFsbHkgY2Fs bGVkIGluIGJhY2tsaWdodCBpbml0IChhbmQKPiAgIHNvbWV0aW1lcyBleGl0KSBmdW5jdGlvbnMg b2YgdGhlIGRyaXZlcnMganVzdCBhZnRlciB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQuCj4gICBT byBiYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyBpcyBjYWxsZWQgd2l0aCB0aGUgcmVnaXN0ZXJlZCBk ZXZpY2UgYXMgdGhlCj4gICBwYXJhbWV0ZXIuCj4gCj4gSGVyZSBhcmUgdGhlIGZvbGxvd2luZyBj YXNlcyBvZiBwcm9wZXJ0aWVzIGNoYW5nZWQvc2V0IGJlZm9yZSAKPiBiYWNrbGlnaHRfdXBkYXRl X3N0YXR1cyBpcyBjYWxsZWQuCj4gCj4gLSBDQVNFIDE6IEJyaWdodG5lc3MgaXMgY2hhbmdlZCAo ZWl0aGVyIGEgbWFjcm8gQlJJR0hUTkVTU19NQVhfTEVWRUwgMTAwCj4gICBpcyBkZWZpbmVkIG9y IGl0IGlzIG1hbnVhbGx5IHNldCkgVGhpcyBoYXBwZW5zIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6 Cj4gCj4gICBnbWE1MDAvY2R2X2RldmljZS5jLCBnbWE1MDAvbWRmbGRfZGV2aWNlLmMsIGdtYTUw MC9vYWt0cmFpbF9kZXZpY2UuYywKPiAgIGdtYTUwMC9wc2JfZGV2aWNlLmMsIG5vdmVhdS9ub3Zl YXVfYmFja2xpZ2h0LmMoaGVyZSBicmlnaHRuZXNzIGlzIGRldGVybWluZWQgYnkgZnVjdGlvbgo+ ICAgc3RhdGljIGludCBudjUwX2dldF9pbnRlbnNpdHkpCj4gCj4gLSBDQVNFIDI6IFBvd2VyIHBy b3BlcnR5IGlzIHNldCAodG8gRkJfQkxBTktfVU5CTEFOSyBtb3N0bHkpCj4gICBUaGlzIGhhcHBl bnMgaW4gdGhlIGZvbGxvd2luZyBmaWxlczoKPiAKPiAgIG9tYXBkcm0vZGlzcGxheXMvcGFuZWwt ZHBpLmMsIHBhbmVsL3BhbmVsLWlubm9sdXgtcDA3OXpjYS5jLAo+ICAgcGFuZWwvcGFuZWwtamRp LWx0MDcwbWUwNTAwMC5jLCBwYW5lbC9wYW5lbC1zaGFycC1scTEwMXIxc3gwMS5jLCAKPiAgIHBh bmVsL3BhbmVsLXNoYXJwLWxzMDQzdDFsZTAxLmMsIHRpbGNkYy90aWxjZGNfcGFuZWwuYwo+ICAg Cj4gLSBDQVNFIDM6IFN0YXRlIGlzIHNldAo+ICAgVGhpcyBoYXBwZW5zIGluIHRoZSBmb2xsb3dp bmcgZmlsZXM6Cj4gCj4gICB0aW55ZHJtL3Rpbnlkcm0taGVscGVycy5jCj4gCj4gLSBDQVNFIDQ6 IFBvd2VyIGFuZCBicmlnaHRuZXNzIHByb3BlcnRpZXMgYXJlIHNldAo+ICAgVGhpcyBoYXBwZW5z IGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6Cj4gCj4gICBhdG9tYmlvc19lbmNvZGVycy5jLCByYWRl b24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jLCAKPiAgIHNobW9iaWxlL3NobW9iX2RybV9iYWNr bGlnaHQuYwo+IAo+IC0gQ0FTRSA1OiBQb3dlciBhbmQgdGhlIHN0YXRlIHByb3BlcnRpZXMgYXJl IHNldAo+ICAgVGhpcyBoYXBwZW5zIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6Cj4gCj4gICBwYW5l bC9wYW5lbC1sdmRzLmMsIHBhbmVsL3BhbmVsLXBhbmFzb25pYy12dngxMGYwMzRuMDAuYywKPiAg IHBhbmVsL3BhbmVsLXNpbXBsZS5jLCBwYW5lbC9wYW5lbC1zaXRyb25peC1zdDc3ODl2LmMKPiAK PiBQbGVhc2UgbGV0IG1lIGtub3cgaWYgSSBhbSB3cm9uZyAvIG1pc3NlZCBzb21ldGhpbmcuIEFz IGZvciBuZXh0IHN0ZXBzLAo+IHdvdWxkbid0IGl0IGJlIGFuIG92ZXJraWxsIHRvIGhhdmUgYSBz ZXBhcmF0ZSBoZWxwZXIgZnVuY3Rpb24gZm9yIGVhY2gKPiBvZiB0aGVzZSBjYXNlcyA/IFBlcmhh cHMgYSBnZW5lcmljIGhlbHBlciBmdW5jdGlvbiB3aGljaCB3b3VsZCBzb21laG93Cj4gYWRkcmVz cyB0aGVzZSBjYXNlcyB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlID8gVGhhbmsgeW91IGZvciB5 b3VyCj4gdGltZS9wYXRpZW5jZS4KCkkgc3VzcGVjdCB0aGF0IGEgbG90IG9mIHRoZXNlIGNvbWJp bmF0aW9ucyBhcmUganVzdCBwbGFpbiB3cm9uZywgYnV0CmhhcHBlbiB0byBraW5kYSB3b3JrIHdp dGggdGhlIGNvbWJpbmF0aW9uIG9mIGdwdSBkcml2ZXIgYW5kIGJhY2tsaWdodApkcml2ZXIgdGhl eSdyZSB1c2VkIG9uLiB0YmggSSBoYXZlIG5vIGlkZWEgd2hpY2ggb25lIGlzIHRoZSBjb3JyZWN0 CnZlcnNpb24gZm9yIGVuYWJsaW5nIGEgYmFja2xpZ2h0IGNvcnJlY3RseSAuLi4KClNvIGRlZmlu aXRlbHkgYSBnb29kIHRhc2sgdG8gcmVmYWN0b3IgdGhpcyBpbnRvIGEgcHJvcGVyIGhlbHBlciwg YnV0IGxvb2tzCmEgbG90IG1vcmUgaW52b2x2ZWQgdGhhbiBhdCBmaXJzdCBzaWdodC4KCkRvIHlv dSBoYXZlIGFueSBvZiB0aGUgaGFyZHdhcmUgc3VwcG9ydGVkIGJ5IGFueSBvZiB0aGVzZSBkcml2 ZXJzPyBsc21vZAphbmQgdGhlbiBjb21wYXJpbmcgd2l0aCB0aGUgbW9kdWxlcyB5b3UncmUgYnVp bGRpbmcgaW4geW91ciBvd24gdHJlZQpzaG91bGQgaGVscCB5b3UgZmlndXJlIHRoaXMgb3V0Lgot RGFuaWVsCgo+IAo+IC1NZWdoYW5hCj4gCj4gPiA+PkNoYW5nZXMgaW4gdjI6Cj4gPiA+PsKgIC1J bXByb3ZlZCBjb21taXQgbWVzc2FnZSBieSBleHBsYWluaW5nIHdoeSB0aGUgY2hhbmdlcyB3ZXJl IG1hZGUuCj4gPiA+Pgo+ID4gPj7CoCBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL01ha2Vm aWxlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAyICstCj4gPiA+PsKgIGRyaXZlcnMvZ3B1 L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1iYWNrbGlnaHQuYyB8IDEwMwo+ID4gPj4rKysrKysr KysrKysrKysrKysrKysrKwo+ID4gPj7CoCBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rp bnlkcm0taGVscGVycy5jwqDCoCB8wqAgOTQKPiA+ID4+LS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4g PiA+PsKgIGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL21pMDI4M3F0LmPCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+ID4gPj7CoCBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9t aXBpLWRiaS5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPiA+ID4+wqAg aW5jbHVkZS9kcm0vdGlueWRybS90aW55ZHJtLWJhY2tsaWdodC5owqDCoMKgwqDCoMKgwqDCoMKg IHzCoCAxOCArKysrCj4gPiA+PsKgIDYgZmlsZXMgY2hhbmdlZCwgMTI0IGluc2VydGlvbnMoKyks IDk1IGRlbGV0aW9ucygtKQo+ID4gPj7CoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWJhY2tsaWdodC5jCj4gPiA+PsKgIGNyZWF0ZSBtb2Rl IDEwMDY0NCBpbmNsdWRlL2RybS90aW55ZHJtL3Rpbnlkcm0tYmFja2xpZ2h0LmgKPiA+ID4+Cj4g PiA+PmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL01ha2VmaWxlCj4g PiA+PmIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS9NYWtlZmlsZQo+ID4gPj5pbmRleCBm YjIyMWU2Li4zODljYTdhIDEwMDY0NAo+ID4gPj4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRy bS9jb3JlL01ha2VmaWxlCj4gPiA+PisrKyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUv TWFrZWZpbGUKPiA+ID4+QEAgLTEsMyArMSwzIEBACj4gPiA+Pi10aW55ZHJtLXkgOj0gdGlueWRy bS1jb3JlLm8gdGlueWRybS1waXBlLm8gdGlueWRybS1oZWxwZXJzLm8KPiA+ID4+K3Rpbnlkcm0t eSA6PSB0aW55ZHJtLWNvcmUubyB0aW55ZHJtLXBpcGUubyB0aW55ZHJtLWJhY2tsaWdodC5vCj4g PiA+PnRpbnlkcm0taGVscGVycy5vCj4gPiA+PsKgIMKgIG9iai0kKENPTkZJR19EUk1fVElOWURS TSkgKz0gdGlueWRybS5vCj4gPiA+PmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRy bS9jb3JlL3Rpbnlkcm0tYmFja2xpZ2h0LmMKPiA+ID4+Yi9kcml2ZXJzL2dwdS9kcm0vdGlueWRy bS9jb3JlL3Rpbnlkcm0tYmFja2xpZ2h0LmMKPiA+ID4+bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ ID4+aW5kZXggMDAwMDAwMC4uZGM2ZjE3ZAo+ID4gPj4tLS0gL2Rldi9udWxsCj4gPiA+PisrKyBi L2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1iYWNrbGlnaHQuYwo+ID4gPj5A QCAtMCwwICsxLDEwMyBAQAo+ID4gPj4rI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgo+ID4g Pj4rI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KPiA+ID4+KyNpbmNsdWRlIDxsaW51eC9wbS5o Pgo+ID4gPj4rI2luY2x1ZGUgPGxpbnV4L3N3YWIuaD4KPiA+ID4+Kwo+ID4gPj4rI2luY2x1ZGUg PGRybS90aW55ZHJtL3Rpbnlkcm0uaD4KPiA+ID4+KyNpbmNsdWRlIDxkcm0vdGlueWRybS90aW55 ZHJtLWJhY2tsaWdodC5oPgo+ID4gPj4rCj4gPiA+PisvKioKPiA+ID4+KyAqIHRpbnlkcm1fb2Zf ZmluZF9iYWNrbGlnaHQgLSBGaW5kIGJhY2tsaWdodCBkZXZpY2UgaW4gZGV2aWNlLXRyZWUKPiA+ ID4+KyAqIEBkZXY6IERldmljZQo+ID4gPj4rICoKPiA+ID4+KyAqIFRoaXMgZnVuY3Rpb24gbG9v a3MgZm9yIGEgRFQgbm9kZSBwb2ludGVkIHRvIGJ5IGEgcHJvcGVydHkgbmFtZWQKPiA+ID4+J2Jh Y2tsaWdodCcKPiA+ID4+KyAqIGFuZCB1c2VzIG9mX2ZpbmRfYmFja2xpZ2h0X2J5X25vZGUoKSB0 byBnZXQgdGhlIGJhY2tsaWdodCBkZXZpY2UuCj4gPiA+PisgKiBBZGRpdGlvbmFsbHkgaWYgdGhl IGJyaWdodG5lc3MgcHJvcGVydHkgaXMgemVybywgaXQgaXMgc2V0IHRvCj4gPiA+PisgKiBtYXhf YnJpZ2h0bmVzcy4KPiA+ID4+KyAqCj4gPiA+PisgKiBSZXR1cm5zOgo+ID4gPj4rICogTlVMTCBp ZiB0aGVyZSdzIG5vIGJhY2tsaWdodCBwcm9wZXJ0eS4KPiA+ID4+KyAqIEVycm9yIHBvaW50ZXIg LUVQUk9CRV9ERUZFUiBpZiB0aGUgRFQgbm9kZSBpcyBmb3VuZCwgYnV0IG5vCj4gPiA+PmJhY2ts aWdodCBkZXZpY2UKPiA+ID4+KyAqIGlzIGZvdW5kLgo+ID4gPj4rICogSWYgdGhlIGJhY2tsaWdo dCBkZXZpY2UgaXMgZm91bmQsIGEgcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIGlzCj4gPiA+PnJl dHVybmVkLgo+ID4gPj4rICovCj4gPiA+PisKPiA+ID4+K3N0cnVjdCBiYWNrbGlnaHRfZGV2aWNl ICp0aW55ZHJtX29mX2ZpbmRfYmFja2xpZ2h0KHN0cnVjdCBkZXZpY2UgKmRldikKPiA+ID4+K3sK PiA+ID4+K8KgwqDCoCBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0Owo+ID4gPj4r wqDCoMKgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Cj4gPiA+PisKPiA+ID4+K8KgwqDCoCBucCA9 IG9mX3BhcnNlX3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAiYmFja2xpZ2h0IiwgMCk7Cj4gPiA+PivC oMKgwqAgaWYgKCFucCkKPiA+ID4+K8KgwqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOwo+ID4gPj4r Cj4gPiA+PivCoMKgwqAgYmFja2xpZ2h0ID0gb2ZfZmluZF9iYWNrbGlnaHRfYnlfbm9kZShucCk7 Cj4gPiA+PivCoMKgwqAgb2Zfbm9kZV9wdXQobnApOwo+ID4gPj4rCj4gPiA+PivCoMKgwqAgaWYg KCFiYWNrbGlnaHQpCj4gPiA+PivCoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BUUigtRVBST0JF X0RFRkVSKTsKPiA+ID4+Kwo+ID4gPj4rwqDCoMKgIGlmICghYmFja2xpZ2h0LT5wcm9wcy5icmln aHRuZXNzKSB7Cj4gPiA+PivCoMKgwqDCoMKgwqDCoCBiYWNrbGlnaHQtPnByb3BzLmJyaWdodG5l c3MgPSBiYWNrbGlnaHQtPnByb3BzLm1heF9icmlnaHRuZXNzOwo+ID4gPj4rwqDCoMKgwqDCoMKg wqAgRFJNX0RFQlVHX0tNUygiQmFja2xpZ2h0IGJyaWdodG5lc3Mgc2V0IHRvICVkXG4iLAo+ID4g Pj4rwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYWNrbGlnaHQtPnByb3BzLmJy aWdodG5lc3MpOwo+ID4gPj4rwqDCoMKgIH0KPiA+ID4+Kwo+ID4gPj4rwqDCoMKgIHJldHVybiBi YWNrbGlnaHQ7Cj4gPiA+Pit9Cj4gPiA+PitFWFBPUlRfU1lNQk9MKHRpbnlkcm1fb2ZfZmluZF9i YWNrbGlnaHQpOwo+ID4gPj4rCj4gPiA+PisvKioKPiA+ID4+KyAqIHRpbnlkcm1fZW5hYmxlX2Jh Y2tsaWdodCAtIEVuYWJsZSBiYWNrbGlnaHQgaGVscGVyCj4gPiA+PisgKiBAYmFja2xpZ2h0OiBC YWNrbGlnaHQgZGV2aWNlCj4gPiA+PisgKgo+ID4gPj4rICogUmV0dXJuczoKPiA+ID4+KyAqIFpl cm8gb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ID4gPj4rICov Cj4gPiA+PitpbnQgdGlueWRybV9lbmFibGVfYmFja2xpZ2h0KHN0cnVjdCBiYWNrbGlnaHRfZGV2 aWNlICpiYWNrbGlnaHQpCj4gPiA+Pit7Cj4gPiA+PivCoMKgwqAgdW5zaWduZWQgaW50IG9sZF9z dGF0ZTsKPiA+ID4+K8KgwqDCoCBpbnQgcmV0Owo+ID4gPj4rCj4gPiA+PivCoMKgwqAgaWYgKCFi YWNrbGlnaHQpCj4gPiA+PivCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPiA+ID4+Kwo+ID4gPj4r wqDCoMKgIG9sZF9zdGF0ZSA9IGJhY2tsaWdodC0+cHJvcHMuc3RhdGU7Cj4gPiA+PivCoMKgwqAg YmFja2xpZ2h0LT5wcm9wcy5zdGF0ZSAmPSB+QkxfQ09SRV9GQkJMQU5LOwo+ID4gPj4rwqDCoMKg IERSTV9ERUJVR19LTVMoIkJhY2tsaWdodCBzdGF0ZTogMHgleCAtPiAweCV4XG4iLCBvbGRfc3Rh dGUsCj4gPiA+PivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYWNrbGlnaHQtPnByb3BzLnN0 YXRlKTsKPiA+ID4+Kwo+ID4gPj4rwqDCoMKgIHJldCA9IGJhY2tsaWdodF91cGRhdGVfc3RhdHVz KGJhY2tsaWdodCk7Cj4gPiA+PivCoMKgwqAgaWYgKHJldCkKPiA+ID4+K8KgwqDCoMKgwqDCoMKg IERSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBiYWNrbGlnaHQgJWRcbiIsIHJldCk7Cj4gPiA+ PisKPiA+ID4+K8KgwqDCoCByZXR1cm4gcmV0Owo+ID4gPj4rfQo+ID4gPj4rRVhQT1JUX1NZTUJP TCh0aW55ZHJtX2VuYWJsZV9iYWNrbGlnaHQpOwo+ID4gPj4rCj4gPiA+PisvKioKPiA+ID4+KyAq IHRpbnlkcm1fZGlzYWJsZV9iYWNrbGlnaHQgLSBEaXNhYmxlIGJhY2tsaWdodCBoZWxwZXIKPiA+ ID4+KyAqIEBiYWNrbGlnaHQ6IEJhY2tsaWdodCBkZXZpY2UKPiA+ID4+KyAqCj4gPiA+PisgKiBS ZXR1cm5zOgo+ID4gPj4rICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9u IGZhaWx1cmUuCj4gPiA+PisgKi8KPiA+ID4+K2ludCB0aW55ZHJtX2Rpc2FibGVfYmFja2xpZ2h0 KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQpCj4gPiA+Pit7Cj4gPiA+PivCoMKg wqAgdW5zaWduZWQgaW50IG9sZF9zdGF0ZTsKPiA+ID4+K8KgwqDCoCBpbnQgcmV0Owo+ID4gPj4r Cj4gPiA+PivCoMKgwqAgaWYgKCFiYWNrbGlnaHQpCj4gPiA+PivCoMKgwqDCoMKgwqDCoCByZXR1 cm4gMDsKPiA+ID4+Kwo+ID4gPj4rwqDCoMKgIG9sZF9zdGF0ZSA9IGJhY2tsaWdodC0+cHJvcHMu c3RhdGU7Cj4gPiA+PivCoMKgwqAgYmFja2xpZ2h0LT5wcm9wcy5zdGF0ZSB8PSBCTF9DT1JFX0ZC QkxBTks7Cj4gPiA+PivCoMKgwqAgRFJNX0RFQlVHX0tNUygiQmFja2xpZ2h0IHN0YXRlOiAweCV4 IC0+IDB4JXhcbiIsIG9sZF9zdGF0ZSwKPiA+ID4+K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGJhY2tsaWdodC0+cHJvcHMuc3RhdGUpOwo+ID4gPj4rwqDCoMKgIHJldCA9IGJhY2tsaWdodF91 cGRhdGVfc3RhdHVzKGJhY2tsaWdodCk7Cj4gPiA+PivCoMKgwqAgaWYgKHJldCkKPiA+ID4+K8Kg wqDCoMKgwqDCoMKgIERSTV9FUlJPUigiRmFpbGVkIHRvIGRpc2FibGUgYmFja2xpZ2h0ICVkXG4i LCByZXQpOwo+ID4gPj4rCj4gPiA+PivCoMKgwqAgcmV0dXJuIHJldDsKPiA+ID4+K30KPiA+ID4+ K0VYUE9SVF9TWU1CT0wodGlueWRybV9kaXNhYmxlX2JhY2tsaWdodCk7Cj4gPiA+PmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0taGVscGVycy5jCj4gPiA+ PmIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWhlbHBlcnMuYwo+ID4gPj5p bmRleCBiZDZjY2UwLi5lZThhZDhjIDEwMDY0NAo+ID4gPj4tLS0gYS9kcml2ZXJzL2dwdS9kcm0v dGlueWRybS9jb3JlL3Rpbnlkcm0taGVscGVycy5jCj4gPiA+PisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS90aW55ZHJtL2NvcmUvdGlueWRybS1oZWxwZXJzLmMKPiA+ID4+QEAgLTIzNiwxMDAgKzIzNiw2 IEBAIHZvaWQgdGlueWRybV94cmdiODg4OF90b19ncmF5OCh1OCAqZHN0LCB2b2lkCj4gPiA+Pip2 YWRkciwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gPiA+PsKgIH0KPiA+ID4+wqAgRVhQ T1JUX1NZTUJPTCh0aW55ZHJtX3hyZ2I4ODg4X3RvX2dyYXk4KTsKPiA+ID4+wqAgLS8qKgo+ID4g Pj4tICogdGlueWRybV9vZl9maW5kX2JhY2tsaWdodCAtIEZpbmQgYmFja2xpZ2h0IGRldmljZSBp biBkZXZpY2UtdHJlZQo+ID4gPj4tICogQGRldjogRGV2aWNlCj4gPiA+Pi0gKgo+ID4gPj4tICog VGhpcyBmdW5jdGlvbiBsb29rcyBmb3IgYSBEVCBub2RlIHBvaW50ZWQgdG8gYnkgYSBwcm9wZXJ0 eSBuYW1lZAo+ID4gPj4nYmFja2xpZ2h0Jwo+ID4gPj4tICogYW5kIHVzZXMgb2ZfZmluZF9iYWNr bGlnaHRfYnlfbm9kZSgpIHRvIGdldCB0aGUgYmFja2xpZ2h0IGRldmljZS4KPiA+ID4+LSAqIEFk ZGl0aW9uYWxseSBpZiB0aGUgYnJpZ2h0bmVzcyBwcm9wZXJ0eSBpcyB6ZXJvLCBpdCBpcyBzZXQg dG8KPiA+ID4+LSAqIG1heF9icmlnaHRuZXNzLgo+ID4gPj4tICoKPiA+ID4+LSAqIFJldHVybnM6 Cj4gPiA+Pi0gKiBOVUxMIGlmIHRoZXJlJ3Mgbm8gYmFja2xpZ2h0IHByb3BlcnR5Lgo+ID4gPj4t ICogRXJyb3IgcG9pbnRlciAtRVBST0JFX0RFRkVSIGlmIHRoZSBEVCBub2RlIGlzIGZvdW5kLCBi dXQgbm8KPiA+ID4+YmFja2xpZ2h0IGRldmljZQo+ID4gPj4tICogaXMgZm91bmQuCj4gPiA+Pi0g KiBJZiB0aGUgYmFja2xpZ2h0IGRldmljZSBpcyBmb3VuZCwgYSBwb2ludGVyIHRvIHRoZSBzdHJ1 Y3R1cmUgaXMKPiA+ID4+cmV0dXJuZWQuCj4gPiA+Pi0gKi8KPiA+ID4+LXN0cnVjdCBiYWNrbGln aHRfZGV2aWNlICp0aW55ZHJtX29mX2ZpbmRfYmFja2xpZ2h0KHN0cnVjdCBkZXZpY2UgKmRldikK PiA+ID4+LXsKPiA+ID4+LcKgwqDCoCBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0 Owo+ID4gPj4twqDCoMKgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Cj4gPiA+Pi0KPiA+ID4+LcKg wqDCoCBucCA9IG9mX3BhcnNlX3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAiYmFja2xpZ2h0IiwgMCk7 Cj4gPiA+Pi3CoMKgwqAgaWYgKCFucCkKPiA+ID4+LcKgwqDCoMKgwqDCoMKgIHJldHVybiBOVUxM Owo+ID4gPj4tCj4gPiA+Pi3CoMKgwqAgYmFja2xpZ2h0ID0gb2ZfZmluZF9iYWNrbGlnaHRfYnlf bm9kZShucCk7Cj4gPiA+Pi3CoMKgwqAgb2Zfbm9kZV9wdXQobnApOwo+ID4gPj4tCj4gPiA+Pi3C oMKgwqAgaWYgKCFiYWNrbGlnaHQpCj4gPiA+Pi3CoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BU UigtRVBST0JFX0RFRkVSKTsKPiA+ID4+LQo+ID4gPj4twqDCoMKgIGlmICghYmFja2xpZ2h0LT5w cm9wcy5icmlnaHRuZXNzKSB7Cj4gPiA+Pi3CoMKgwqDCoMKgwqDCoCBiYWNrbGlnaHQtPnByb3Bz LmJyaWdodG5lc3MgPSBiYWNrbGlnaHQtPnByb3BzLm1heF9icmlnaHRuZXNzOwo+ID4gPj4twqDC oMKgwqDCoMKgwqAgRFJNX0RFQlVHX0tNUygiQmFja2xpZ2h0IGJyaWdodG5lc3Mgc2V0IHRvICVk XG4iLAo+ID4gPj4twqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYWNrbGlnaHQt PnByb3BzLmJyaWdodG5lc3MpOwo+ID4gPj4twqDCoMKgIH0KPiA+ID4+LQo+ID4gPj4twqDCoMKg IHJldHVybiBiYWNrbGlnaHQ7Cj4gPiA+Pi19Cj4gPiA+Pi1FWFBPUlRfU1lNQk9MKHRpbnlkcm1f b2ZfZmluZF9iYWNrbGlnaHQpOwo+ID4gPj4tCj4gPiA+Pi0vKioKPiA+ID4+LSAqIHRpbnlkcm1f ZW5hYmxlX2JhY2tsaWdodCAtIEVuYWJsZSBiYWNrbGlnaHQgaGVscGVyCj4gPiA+Pi0gKiBAYmFj a2xpZ2h0OiBCYWNrbGlnaHQgZGV2aWNlCj4gPiA+Pi0gKgo+ID4gPj4tICogUmV0dXJuczoKPiA+ ID4+LSAqIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ ID4gPj4tICovCj4gPiA+Pi1pbnQgdGlueWRybV9lbmFibGVfYmFja2xpZ2h0KHN0cnVjdCBiYWNr bGlnaHRfZGV2aWNlICpiYWNrbGlnaHQpCj4gPiA+Pi17Cj4gPiA+Pi3CoMKgwqAgdW5zaWduZWQg aW50IG9sZF9zdGF0ZTsKPiA+ID4+LcKgwqDCoCBpbnQgcmV0Owo+ID4gPj4tCj4gPiA+Pi3CoMKg wqAgaWYgKCFiYWNrbGlnaHQpCj4gPiA+Pi3CoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPiA+ID4+ LQo+ID4gPj4twqDCoMKgIG9sZF9zdGF0ZSA9IGJhY2tsaWdodC0+cHJvcHMuc3RhdGU7Cj4gPiA+ Pi3CoMKgwqAgYmFja2xpZ2h0LT5wcm9wcy5zdGF0ZSAmPSB+QkxfQ09SRV9GQkJMQU5LOwo+ID4g Pj4twqDCoMKgIERSTV9ERUJVR19LTVMoIkJhY2tsaWdodCBzdGF0ZTogMHgleCAtPiAweCV4XG4i LCBvbGRfc3RhdGUsCj4gPiA+Pi3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYWNrbGlnaHQt PnByb3BzLnN0YXRlKTsKPiA+ID4+LQo+ID4gPj4twqDCoMKgIHJldCA9IGJhY2tsaWdodF91cGRh dGVfc3RhdHVzKGJhY2tsaWdodCk7Cj4gPiA+Pi3CoMKgwqAgaWYgKHJldCkKPiA+ID4+LcKgwqDC oMKgwqDCoMKgIERSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBiYWNrbGlnaHQgJWRcbiIsIHJl dCk7Cj4gPiA+Pi0KPiA+ID4+LcKgwqDCoCByZXR1cm4gcmV0Owo+ID4gPj4tfQo+ID4gPj4tRVhQ T1JUX1NZTUJPTCh0aW55ZHJtX2VuYWJsZV9iYWNrbGlnaHQpOwo+ID4gPj4tCj4gPiA+Pi0vKioK PiA+ID4+LSAqIHRpbnlkcm1fZGlzYWJsZV9iYWNrbGlnaHQgLSBEaXNhYmxlIGJhY2tsaWdodCBo ZWxwZXIKPiA+ID4+LSAqIEBiYWNrbGlnaHQ6IEJhY2tsaWdodCBkZXZpY2UKPiA+ID4+LSAqCj4g PiA+Pi0gKiBSZXR1cm5zOgo+ID4gPj4tICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJv ciBjb2RlIG9uIGZhaWx1cmUuCj4gPiA+Pi0gKi8KPiA+ID4+LWludCB0aW55ZHJtX2Rpc2FibGVf YmFja2xpZ2h0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQpCj4gPiA+Pi17Cj4g PiA+Pi3CoMKgwqAgdW5zaWduZWQgaW50IG9sZF9zdGF0ZTsKPiA+ID4+LcKgwqDCoCBpbnQgcmV0 Owo+ID4gPj4tCj4gPiA+Pi3CoMKgwqAgaWYgKCFiYWNrbGlnaHQpCj4gPiA+Pi3CoMKgwqDCoMKg wqDCoCByZXR1cm4gMDsKPiA+ID4+LQo+ID4gPj4twqDCoMKgIG9sZF9zdGF0ZSA9IGJhY2tsaWdo dC0+cHJvcHMuc3RhdGU7Cj4gPiA+Pi3CoMKgwqAgYmFja2xpZ2h0LT5wcm9wcy5zdGF0ZSB8PSBC TF9DT1JFX0ZCQkxBTks7Cj4gPiA+Pi3CoMKgwqAgRFJNX0RFQlVHX0tNUygiQmFja2xpZ2h0IHN0 YXRlOiAweCV4IC0+IDB4JXhcbiIsIG9sZF9zdGF0ZSwKPiA+ID4+LcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGJhY2tsaWdodC0+cHJvcHMuc3RhdGUpOwo+ID4gPj4twqDCoMKgIHJldCA9IGJh Y2tsaWdodF91cGRhdGVfc3RhdHVzKGJhY2tsaWdodCk7Cj4gPiA+Pi3CoMKgwqAgaWYgKHJldCkK PiA+ID4+LcKgwqDCoMKgwqDCoMKgIERSTV9FUlJPUigiRmFpbGVkIHRvIGRpc2FibGUgYmFja2xp Z2h0ICVkXG4iLCByZXQpOwo+ID4gPj4tCj4gPiA+Pi3CoMKgwqAgcmV0dXJuIHJldDsKPiA+ID4+ LX0KPiA+ID4+LUVYUE9SVF9TWU1CT0wodGlueWRybV9kaXNhYmxlX2JhY2tsaWdodCk7Cj4gPiA+ PsKgIMKgICNpZiBJU19FTkFCTEVEKENPTkZJR19TUEkpCj4gPiA+PsKgIGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vdGlueWRybS9taTAyODNxdC5jCj4gPiA+PmIvZHJpdmVycy9ncHUvZHJt L3Rpbnlkcm0vbWkwMjgzcXQuYwo+ID4gPj5pbmRleCA3ZTViYjdkLi5jMTYxZDQ1IDEwMDY0NAo+ ID4gPj4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9taTAyODNxdC5jCj4gPiA+PisrKyBi L2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL21pMDI4M3F0LmMKPiA+ID4+QEAgLTEyLDYgKzEyLDcg QEAKPiA+ID4+wqAgI2luY2x1ZGUgPGRybS90aW55ZHJtL2lsaTkzNDEuaD4KPiA+ID4+wqAgI2lu Y2x1ZGUgPGRybS90aW55ZHJtL21pcGktZGJpLmg+Cj4gPiA+PsKgICNpbmNsdWRlIDxkcm0vdGlu eWRybS90aW55ZHJtLWhlbHBlcnMuaD4KPiA+ID4+KyNpbmNsdWRlIDxkcm0vdGlueWRybS90aW55 ZHJtLWJhY2tsaWdodC5oPgo+ID4gPj7CoCAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiA+ID4+ wqAgI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KPiA+ID4+wqAgI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPgo+ID4gPj5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0v bWlwaS1kYmkuYwo+ID4gPj5iL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL21pcGktZGJpLmMKPiA+ ID4+aW5kZXggMmNhZWFiYy4uZGM4NGYyNiAxMDA2NDQKPiA+ID4+LS0tIGEvZHJpdmVycy9ncHUv ZHJtL3Rpbnlkcm0vbWlwaS1kYmkuYwo+ID4gPj4rKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlueWRy bS9taXBpLWRiaS5jCj4gPiA+PkBAIC0xMSw2ICsxMSw3IEBACj4gPiA+PsKgIMKgICNpbmNsdWRl IDxkcm0vdGlueWRybS9taXBpLWRiaS5oPgo+ID4gPj7CoCAjaW5jbHVkZSA8ZHJtL3Rpbnlkcm0v dGlueWRybS1oZWxwZXJzLmg+Cj4gPiA+PisjaW5jbHVkZSA8ZHJtL3Rpbnlkcm0vdGlueWRybS1i YWNrbGlnaHQuaD4KPiA+ID4+wqAgI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KPiA+ID4+wqAg I2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KPiA+ID4+wqAgI2luY2x1ZGUgPGxpbnV4L2dwaW8v Y29uc3VtZXIuaD4KPiA+ID4+ZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3Rpbnlkcm0vdGlueWRy bS1iYWNrbGlnaHQuaAo+ID4gPj5iL2luY2x1ZGUvZHJtL3Rpbnlkcm0vdGlueWRybS1iYWNrbGln aHQuaAo+ID4gPj5uZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gPj5pbmRleCAwMDAwMDAwLi42YTdi NmQ1Cj4gPiA+Pi0tLSAvZGV2L251bGwKPiA+ID4+KysrIGIvaW5jbHVkZS9kcm0vdGlueWRybS90 aW55ZHJtLWJhY2tsaWdodC5oCj4gPiA+PkBAIC0wLDAgKzEsMTggQEAKPiA+ID4+Ky8qCj4gPiA+ PisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTm9yYWxmIFRyw7hubmVzCj4gPiA+PisgKgo+ID4gPj4r ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKPiA+ID4+KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gPiA+PisgKiB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+ ID4gPj4rICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiA+ID4+KyAqLwo+ ID4gPj4rCj4gPiA+PisjaWZuZGVmIF9fTElOVVhfVElOWURSTV9CQUNLTElHSFRfSAo+ID4gPj4r I2RlZmluZSBfX0xJTlVYX1RJTllEUk1fQkFDS0xJR0hUX0gKPiA+ID4+Kwo+ID4gPj4rc3RydWN0 IGJhY2tsaWdodF9kZXZpY2U7Cj4gPiA+PitzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqdGlueWRy bV9vZl9maW5kX2JhY2tsaWdodChzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ID4gPj4raW50IHRpbnlk cm1fZW5hYmxlX2JhY2tsaWdodChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0KTsK PiA+ID4+K2ludCB0aW55ZHJtX2Rpc2FibGVfYmFja2xpZ2h0KHN0cnVjdCBiYWNrbGlnaHRfZGV2 aWNlICpiYWNrbGlnaHQpOwo+ID4gPj4rCj4gPiA+PisjZW5kaWYgLyogX19MSU5VWF9USU5ZRFJN X0JBQ0tMSUdIVF9IICovCj4gPiA+Cj4gPiA+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KPiA+ID5kcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4gPiA+ZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gPmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCj4gPiA+Cj4gPiAKCi0tIApEYW5pZWwgVmV0 dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZnds bC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6468555141619384320 X-Received: by 10.28.230.79 with SMTP id d76mr328452wmh.12.1506425540202; Tue, 26 Sep 2017 04:32:20 -0700 (PDT) X-BeenThere: outreachy-kernel@googlegroups.com Received: by 10.25.19.87 with SMTP id j84ls462365lfi.17.gmail; Tue, 26 Sep 2017 04:32:18 -0700 (PDT) X-Received: by 10.25.142.81 with SMTP id q78mr549513lfd.40.1506425538217; Tue, 26 Sep 2017 04:32:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1506425538; cv=none; d=google.com; s=arc-20160816; b=rd0+wEP1iIIL/HmePGy5sTZORLvPCb7iZKWdyLBUOV0Dk1AxsHs3G7d6nMObvYLo/w AVcgaDzXaFfvWgjRRK9uYxGuc5DRXM5Bio//PSmQEwbl6ZUERlAfktamluln3FDQXnCc iEnr8p2jirvMD/MTr0V0w9P2VqehYWVdaZGk1Ex15GX9pZ+jzd2Iq1FN2sDD/NUM1jMc Ti3npS5tdQNJMBRi71UfnlX38g3YhoylhPn/hVkjDlJVTNnXYAICVbexWzoTWDj2SynQ zXDu3EQqMIXIBU6K3TkvzI+TE0TOX8Fa8OxKTUPDxacpXz5N7CzhlIJFRzZm4mLj/DSh fFlw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=user-agent:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:sender:dkim-signature:arc-authentication-results; bh=6fFuFk+WdVCYYs2jd15l02D1at0VmM4UPsgclInKktQ=; b=ON6xXTgrgryBfKY6aLW2hQpaNrzUVwk8i264IEiHaGm3m0fx4u41FJyf7jaGRss48s 8u/oXE2ckTy9sxxhD3UZN/eDAVWLyN0Ui47q/V7Uink1Dy9PUoNinc+WPJrPlBK27+az HD+ARrIZY58KJ7fkIwMf+xxI0KxMZlJ1GRpugGNgoXzMsnKhdHOpjfM4vrtvcwMqpbh+ BRMrlxXcxbybELdCWaugwU5EsWYqx8fdgRZT5oK0D0sBRtGGbQJHsbz0yNV2+dmNV+bF SNuasf0tew/01IE/s8ghGlIx+ZSC3EY2nIHhJXbqHCbNCQMsI0eE68WEPSziurKqr3oZ Iv/A== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@ffwll.ch header.s=google header.b=IeRsfqnX; spf=neutral (google.com: 2a00:1450:400c:c09::22e is neither permitted nor denied by best guess record for domain of daniel@ffwll.ch) smtp.mailfrom=daniel@ffwll.ch Return-Path: Received: from mail-wm0-x22e.google.com (mail-wm0-x22e.google.com. [2a00:1450:400c:c09::22e]) by gmr-mx.google.com with ESMTPS id p70si113161wma.1.2017.09.26.04.32.18 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Sep 2017 04:32:18 -0700 (PDT) Received-SPF: neutral (google.com: 2a00:1450:400c:c09::22e is neither permitted nor denied by best guess record for domain of daniel@ffwll.ch) client-ip=2a00:1450:400c:c09::22e; Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@ffwll.ch header.s=google header.b=IeRsfqnX; spf=neutral (google.com: 2a00:1450:400c:c09::22e is neither permitted nor denied by best guess record for domain of daniel@ffwll.ch) smtp.mailfrom=daniel@ffwll.ch Received: by mail-wm0-x22e.google.com with SMTP id m72so6809174wmc.1 for ; Tue, 26 Sep 2017 04:32:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=6fFuFk+WdVCYYs2jd15l02D1at0VmM4UPsgclInKktQ=; b=IeRsfqnXcv2FVEpDWVLmz46Vt/51U0RNC2dkQ5OBqb9JSftLIf8R7t5ajU/DmOEpUp ywrXikEeG833gsTMbKIQfvdF0jXeGKbepJ1Lld7ROEv7klptcG22/oYRW0KZsFpNkT3E k8m3SmGW2kwwDe8vzZqE2efNVPVuqT1oLhQ+E= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :references:mime-version:content-disposition :content-transfer-encoding:in-reply-to:user-agent; bh=6fFuFk+WdVCYYs2jd15l02D1at0VmM4UPsgclInKktQ=; b=aLvCoru842zJXJdB7odU56Cprid1xxRRDHnrgsBbnHiIz8jAAlHzYZki2U7vUGyki/ v8iuU2r3fKqvpLyIB/E2kDXiKo8wPYi+VN8Z5BB9nngbLobKJK7uxF8AwNm+KCZMt5S+ xRW2IsJQs4nYrw2kt6wALbFDmPqV/5+6GVBD3HWnpFZVi6UgMvUApyVXkQIjzAOfGui6 UdIqhj/qc7SQk8LmIDLBQKOudQEImyQ7QuTftvq6SBXlYigYQ/zRjNzTqbkdch6pJ+9H GNcYXhxQpj2dEHDezEbG5p7JYkNg3RKx0+7hCDGR3dozU6uAnomVo0mMeKdxGBZVFWpE 4VWQ== X-Gm-Message-State: AHPjjUguZcSNRaskUqE7suKN2NNQCFQT53iencGc/FpxJQRB6Lz/Whii AHado+zQfbzQOyQDMgn6pdTJRg== X-Google-Smtp-Source: AOwi7QBTIJdeGFWCEM4tPprGVlhZtFOyQPYmhpQyH9c8DjkVIjyXxmhJUKpCoIGV7mqUbA3p/mBGhA== X-Received: by 10.80.165.81 with SMTP id z17mr17588390edb.8.1506425537778; Tue, 26 Sep 2017 04:32:17 -0700 (PDT) Return-Path: Received: from phenom.ffwll.local ([2a02:168:5635:0:39d2:f87e:2033:9f6]) by smtp.gmail.com with ESMTPSA id f9sm5879401ede.38.2017.09.26.04.32.16 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 26 Sep 2017 04:32:16 -0700 (PDT) Sender: Daniel Vetter Date: Tue, 26 Sep 2017 13:32:15 +0200 From: Daniel Vetter To: Meghana Madhyastha Cc: Noralf =?iso-8859-1?Q?Tr=F8nnes?= , Daniel Vetter , outreachy-kernel , Sean Paul , dri-devel@lists.freedesktop.org Subject: Re: [PATCH v2] drm/tinydrm: Move backlight helpers to a separate file Message-ID: <20170926113214.ahxqmqspsd3olu73@phenom.ffwll.local> References: <20170922150935.GA15912@meghana-HP-Pavilion-Notebook> <3dd313c8-daa7-a395-183c-c2dfac4dd4b4@tronnes.org> <20170926111650.GA7624@meghana-HP-Pavilion-Notebook> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20170926111650.GA7624@meghana-HP-Pavilion-Notebook> X-Operating-System: Linux phenom 4.12.0-1-amd64 User-Agent: NeoMutt/20170609 (1.8.3) On Tue, Sep 26, 2017 at 04:46:53PM +0530, Meghana Madhyastha wrote: > On Mon, Sep 25, 2017 at 06:31:58PM +0200, Noralf Trønnes wrote: > > > > Den 25.09.2017 16.56, skrev Noralf Trønnes: > > >Hi Meghana, > > > > > > > > >Den 22.09.2017 17.09, skrev Meghana Madhyastha: > > >>Move backlight helpers from tinydrm-helpers.c to > > >>tinydrm-backlight.c. This is because it is organizationally > > >>simpler to understand and advantageous to group functions > > >>performing a similar function to a separate file as opposed to > > >>having one helper file with heteregenous helper functions. > > >> > > >>Signed-off-by: Meghana Madhyastha > > >>--- > > > > > >I don't think there is much gain in just moving the code like this. > > > > > >The idea is to add a drm_backlight helper that can be useful for all > > >DRM drivers that use the backlight subsystem. > > Yes I agree. That definitely makes more sense. > > > > The full path to that helper would be: > > drivers/gpu/drm/drm_backlight.c > > > > >This is what the TODO says: > > >https://dri.freedesktop.org/docs/drm/gpu/todo.html#tinydrm > > > > > >- backlight helpers, probably best to put them into a new drm_backlight.c. > > >  This is because drivers/video is de-facto unmaintained. We could also > > >  move drivers/video/backlight to drivers/gpu/backlight and take it all > > >  over within drm-misc, but that’s more work. > > > > > >There is also this discussion to take into account: > > >KMS backlight ABI proposition > > >https://lists.freedesktop.org/archives/dri-devel/2017-February/133206.html > > > > > > > > >I don't remember what came out of that discussion. > > > > > >Noralf. > > After having discussed this with Daniel on the #dri-devel irc channel, > here are some of the points suggested. > > Daniel suggested that I first look into the usage of shared backlight > helpers in drm (specifically backlight_update_status to begin with). The idea > was to see whether there is any pattern in usage and/or code dupication. > If there is, then the next step would be to write helper functions which > can be used by other drivers (and not just tinydrm). > > To start with, I went through the instances of backlight_update_status > in the drm code, and made the following observations(most of them are > very simple/naive observations). > > - backlight_update_status is usually called in backlight init (and > sometimes exit) functions of the drivers just after the device is registered. > So backlight_update_status is called with the registered device as the > parameter. > > Here are the following cases of properties changed/set before > backlight_update_status is called. > > - CASE 1: Brightness is changed (either a macro BRIGHTNESS_MAX_LEVEL 100 > is defined or it is manually set) This happens in the following files: > > gma500/cdv_device.c, gma500/mdfld_device.c, gma500/oaktrail_device.c, > gma500/psb_device.c, noveau/noveau_backlight.c(here brightness is determined by fuction > static int nv50_get_intensity) > > - CASE 2: Power property is set (to FB_BLANK_UNBLANK mostly) > This happens in the following files: > > omapdrm/displays/panel-dpi.c, panel/panel-innolux-p079zca.c, > panel/panel-jdi-lt070me05000.c, panel/panel-sharp-lq101r1sx01.c, > panel/panel-sharp-ls043t1le01.c, tilcdc/tilcdc_panel.c > > - CASE 3: State is set > This happens in the following files: > > tinydrm/tinydrm-helpers.c > > - CASE 4: Power and brightness properties are set > This happens in the following files: > > atombios_encoders.c, radeon/radeon_legacy_encoders.c, > shmobile/shmob_drm_backlight.c > > - CASE 5: Power and the state properties are set > This happens in the following files: > > panel/panel-lvds.c, panel/panel-panasonic-vvx10f034n00.c, > panel/panel-simple.c, panel/panel-sitronix-st7789v.c > > Please let me know if I am wrong / missed something. As for next steps, > wouldn't it be an overkill to have a separate helper function for each > of these cases ? Perhaps a generic helper function which would somehow > address these cases would be more appropriate ? Thank you for your > time/patience. I suspect that a lot of these combinations are just plain wrong, but happen to kinda work with the combination of gpu driver and backlight driver they're used on. tbh I have no idea which one is the correct version for enabling a backlight correctly ... So definitely a good task to refactor this into a proper helper, but looks a lot more involved than at first sight. Do you have any of the hardware supported by any of these drivers? lsmod and then comparing with the modules you're building in your own tree should help you figure this out. -Daniel > > -Meghana > > > >>Changes in v2: > > >>  -Improved commit message by explaining why the changes were made. > > >> > > >>  drivers/gpu/drm/tinydrm/core/Makefile            |   2 +- > > >>  drivers/gpu/drm/tinydrm/core/tinydrm-backlight.c | 103 > > >>+++++++++++++++++++++++ > > >>  drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c   |  94 > > >>--------------------- > > >>  drivers/gpu/drm/tinydrm/mi0283qt.c               |   1 + > > >>  drivers/gpu/drm/tinydrm/mipi-dbi.c               |   1 + > > >>  include/drm/tinydrm/tinydrm-backlight.h          |  18 ++++ > > >>  6 files changed, 124 insertions(+), 95 deletions(-) > > >>  create mode 100644 drivers/gpu/drm/tinydrm/core/tinydrm-backlight.c > > >>  create mode 100644 include/drm/tinydrm/tinydrm-backlight.h > > >> > > >>diff --git a/drivers/gpu/drm/tinydrm/core/Makefile > > >>b/drivers/gpu/drm/tinydrm/core/Makefile > > >>index fb221e6..389ca7a 100644 > > >>--- a/drivers/gpu/drm/tinydrm/core/Makefile > > >>+++ b/drivers/gpu/drm/tinydrm/core/Makefile > > >>@@ -1,3 +1,3 @@ > > >>-tinydrm-y := tinydrm-core.o tinydrm-pipe.o tinydrm-helpers.o > > >>+tinydrm-y := tinydrm-core.o tinydrm-pipe.o tinydrm-backlight.o > > >>tinydrm-helpers.o > > >>    obj-$(CONFIG_DRM_TINYDRM) += tinydrm.o > > >>diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-backlight.c > > >>b/drivers/gpu/drm/tinydrm/core/tinydrm-backlight.c > > >>new file mode 100644 > > >>index 0000000..dc6f17d > > >>--- /dev/null > > >>+++ b/drivers/gpu/drm/tinydrm/core/tinydrm-backlight.c > > >>@@ -0,0 +1,103 @@ > > >>+#include > > >>+#include > > >>+#include > > >>+#include > > >>+ > > >>+#include > > >>+#include > > >>+ > > >>+/** > > >>+ * tinydrm_of_find_backlight - Find backlight device in device-tree > > >>+ * @dev: Device > > >>+ * > > >>+ * This function looks for a DT node pointed to by a property named > > >>'backlight' > > >>+ * and uses of_find_backlight_by_node() to get the backlight device. > > >>+ * Additionally if the brightness property is zero, it is set to > > >>+ * max_brightness. > > >>+ * > > >>+ * Returns: > > >>+ * NULL if there's no backlight property. > > >>+ * Error pointer -EPROBE_DEFER if the DT node is found, but no > > >>backlight device > > >>+ * is found. > > >>+ * If the backlight device is found, a pointer to the structure is > > >>returned. > > >>+ */ > > >>+ > > >>+struct backlight_device *tinydrm_of_find_backlight(struct device *dev) > > >>+{ > > >>+    struct backlight_device *backlight; > > >>+    struct device_node *np; > > >>+ > > >>+    np = of_parse_phandle(dev->of_node, "backlight", 0); > > >>+    if (!np) > > >>+        return NULL; > > >>+ > > >>+    backlight = of_find_backlight_by_node(np); > > >>+    of_node_put(np); > > >>+ > > >>+    if (!backlight) > > >>+        return ERR_PTR(-EPROBE_DEFER); > > >>+ > > >>+    if (!backlight->props.brightness) { > > >>+        backlight->props.brightness = backlight->props.max_brightness; > > >>+        DRM_DEBUG_KMS("Backlight brightness set to %d\n", > > >>+                  backlight->props.brightness); > > >>+    } > > >>+ > > >>+    return backlight; > > >>+} > > >>+EXPORT_SYMBOL(tinydrm_of_find_backlight); > > >>+ > > >>+/** > > >>+ * tinydrm_enable_backlight - Enable backlight helper > > >>+ * @backlight: Backlight device > > >>+ * > > >>+ * Returns: > > >>+ * Zero on success, negative error code on failure. > > >>+ */ > > >>+int tinydrm_enable_backlight(struct backlight_device *backlight) > > >>+{ > > >>+    unsigned int old_state; > > >>+    int ret; > > >>+ > > >>+    if (!backlight) > > >>+        return 0; > > >>+ > > >>+    old_state = backlight->props.state; > > >>+    backlight->props.state &= ~BL_CORE_FBBLANK; > > >>+    DRM_DEBUG_KMS("Backlight state: 0x%x -> 0x%x\n", old_state, > > >>+              backlight->props.state); > > >>+ > > >>+    ret = backlight_update_status(backlight); > > >>+    if (ret) > > >>+        DRM_ERROR("Failed to enable backlight %d\n", ret); > > >>+ > > >>+    return ret; > > >>+} > > >>+EXPORT_SYMBOL(tinydrm_enable_backlight); > > >>+ > > >>+/** > > >>+ * tinydrm_disable_backlight - Disable backlight helper > > >>+ * @backlight: Backlight device > > >>+ * > > >>+ * Returns: > > >>+ * Zero on success, negative error code on failure. > > >>+ */ > > >>+int tinydrm_disable_backlight(struct backlight_device *backlight) > > >>+{ > > >>+    unsigned int old_state; > > >>+    int ret; > > >>+ > > >>+    if (!backlight) > > >>+        return 0; > > >>+ > > >>+    old_state = backlight->props.state; > > >>+    backlight->props.state |= BL_CORE_FBBLANK; > > >>+    DRM_DEBUG_KMS("Backlight state: 0x%x -> 0x%x\n", old_state, > > >>+              backlight->props.state); > > >>+    ret = backlight_update_status(backlight); > > >>+    if (ret) > > >>+        DRM_ERROR("Failed to disable backlight %d\n", ret); > > >>+ > > >>+    return ret; > > >>+} > > >>+EXPORT_SYMBOL(tinydrm_disable_backlight); > > >>diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c > > >>b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c > > >>index bd6cce0..ee8ad8c 100644 > > >>--- a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c > > >>+++ b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c > > >>@@ -236,100 +236,6 @@ void tinydrm_xrgb8888_to_gray8(u8 *dst, void > > >>*vaddr, struct drm_framebuffer *fb, > > >>  } > > >>  EXPORT_SYMBOL(tinydrm_xrgb8888_to_gray8); > > >>  -/** > > >>- * tinydrm_of_find_backlight - Find backlight device in device-tree > > >>- * @dev: Device > > >>- * > > >>- * This function looks for a DT node pointed to by a property named > > >>'backlight' > > >>- * and uses of_find_backlight_by_node() to get the backlight device. > > >>- * Additionally if the brightness property is zero, it is set to > > >>- * max_brightness. > > >>- * > > >>- * Returns: > > >>- * NULL if there's no backlight property. > > >>- * Error pointer -EPROBE_DEFER if the DT node is found, but no > > >>backlight device > > >>- * is found. > > >>- * If the backlight device is found, a pointer to the structure is > > >>returned. > > >>- */ > > >>-struct backlight_device *tinydrm_of_find_backlight(struct device *dev) > > >>-{ > > >>-    struct backlight_device *backlight; > > >>-    struct device_node *np; > > >>- > > >>-    np = of_parse_phandle(dev->of_node, "backlight", 0); > > >>-    if (!np) > > >>-        return NULL; > > >>- > > >>-    backlight = of_find_backlight_by_node(np); > > >>-    of_node_put(np); > > >>- > > >>-    if (!backlight) > > >>-        return ERR_PTR(-EPROBE_DEFER); > > >>- > > >>-    if (!backlight->props.brightness) { > > >>-        backlight->props.brightness = backlight->props.max_brightness; > > >>-        DRM_DEBUG_KMS("Backlight brightness set to %d\n", > > >>-                  backlight->props.brightness); > > >>-    } > > >>- > > >>-    return backlight; > > >>-} > > >>-EXPORT_SYMBOL(tinydrm_of_find_backlight); > > >>- > > >>-/** > > >>- * tinydrm_enable_backlight - Enable backlight helper > > >>- * @backlight: Backlight device > > >>- * > > >>- * Returns: > > >>- * Zero on success, negative error code on failure. > > >>- */ > > >>-int tinydrm_enable_backlight(struct backlight_device *backlight) > > >>-{ > > >>-    unsigned int old_state; > > >>-    int ret; > > >>- > > >>-    if (!backlight) > > >>-        return 0; > > >>- > > >>-    old_state = backlight->props.state; > > >>-    backlight->props.state &= ~BL_CORE_FBBLANK; > > >>-    DRM_DEBUG_KMS("Backlight state: 0x%x -> 0x%x\n", old_state, > > >>-              backlight->props.state); > > >>- > > >>-    ret = backlight_update_status(backlight); > > >>-    if (ret) > > >>-        DRM_ERROR("Failed to enable backlight %d\n", ret); > > >>- > > >>-    return ret; > > >>-} > > >>-EXPORT_SYMBOL(tinydrm_enable_backlight); > > >>- > > >>-/** > > >>- * tinydrm_disable_backlight - Disable backlight helper > > >>- * @backlight: Backlight device > > >>- * > > >>- * Returns: > > >>- * Zero on success, negative error code on failure. > > >>- */ > > >>-int tinydrm_disable_backlight(struct backlight_device *backlight) > > >>-{ > > >>-    unsigned int old_state; > > >>-    int ret; > > >>- > > >>-    if (!backlight) > > >>-        return 0; > > >>- > > >>-    old_state = backlight->props.state; > > >>-    backlight->props.state |= BL_CORE_FBBLANK; > > >>-    DRM_DEBUG_KMS("Backlight state: 0x%x -> 0x%x\n", old_state, > > >>-              backlight->props.state); > > >>-    ret = backlight_update_status(backlight); > > >>-    if (ret) > > >>-        DRM_ERROR("Failed to disable backlight %d\n", ret); > > >>- > > >>-    return ret; > > >>-} > > >>-EXPORT_SYMBOL(tinydrm_disable_backlight); > > >>    #if IS_ENABLED(CONFIG_SPI) > > >>  diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c > > >>b/drivers/gpu/drm/tinydrm/mi0283qt.c > > >>index 7e5bb7d..c161d45 100644 > > >>--- a/drivers/gpu/drm/tinydrm/mi0283qt.c > > >>+++ b/drivers/gpu/drm/tinydrm/mi0283qt.c > > >>@@ -12,6 +12,7 @@ > > >>  #include > > >>  #include > > >>  #include > > >>+#include > > >>  #include > > >>  #include > > >>  #include > > >>diff --git a/drivers/gpu/drm/tinydrm/mipi-dbi.c > > >>b/drivers/gpu/drm/tinydrm/mipi-dbi.c > > >>index 2caeabc..dc84f26 100644 > > >>--- a/drivers/gpu/drm/tinydrm/mipi-dbi.c > > >>+++ b/drivers/gpu/drm/tinydrm/mipi-dbi.c > > >>@@ -11,6 +11,7 @@ > > >>    #include > > >>  #include > > >>+#include > > >>  #include > > >>  #include > > >>  #include > > >>diff --git a/include/drm/tinydrm/tinydrm-backlight.h > > >>b/include/drm/tinydrm/tinydrm-backlight.h > > >>new file mode 100644 > > >>index 0000000..6a7b6d5 > > >>--- /dev/null > > >>+++ b/include/drm/tinydrm/tinydrm-backlight.h > > >>@@ -0,0 +1,18 @@ > > >>+/* > > >>+ * Copyright (C) 2016 Noralf Trønnes > > >>+ * > > >>+ * 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, or > > >>+ * (at your option) any later version. > > >>+ */ > > >>+ > > >>+#ifndef __LINUX_TINYDRM_BACKLIGHT_H > > >>+#define __LINUX_TINYDRM_BACKLIGHT_H > > >>+ > > >>+struct backlight_device; > > >>+struct backlight_device *tinydrm_of_find_backlight(struct device *dev); > > >>+int tinydrm_enable_backlight(struct backlight_device *backlight); > > >>+int tinydrm_disable_backlight(struct backlight_device *backlight); > > >>+ > > >>+#endif /* __LINUX_TINYDRM_BACKLIGHT_H */ > > > > > >_______________________________________________ > > >dri-devel mailing list > > >dri-devel@lists.freedesktop.org > > >https://lists.freedesktop.org/mailman/listinfo/dri-devel > > > > > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch