From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= Subject: Re: [PATCH v2] drm/tinydrm: Move backlight helpers to a separate file Date: Tue, 26 Sep 2017 15:53:33 +0200 Message-ID: <015cae83-661d-5732-3f42-ba6fc1bb9264@tronnes.org> References: <20170922150935.GA15912@meghana-HP-Pavilion-Notebook> <3dd313c8-daa7-a395-183c-c2dfac4dd4b4@tronnes.org> <20170926111650.GA7624@meghana-HP-Pavilion-Notebook> <20170926113214.ahxqmqspsd3olu73@phenom.ffwll.local> <938e964a-9b4e-b9fe-fdcc-a04d24f3a330@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from smtp.domeneshop.no (smtp.domeneshop.no [IPv6:2a01:5b40:0:3005::1]) by gabe.freedesktop.org (Postfix) with ESMTPS id DB3866E210 for ; Tue, 26 Sep 2017 13:53:38 +0000 (UTC) In-Reply-To: <938e964a-9b4e-b9fe-fdcc-a04d24f3a330@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter , Meghana Madhyastha Cc: outreachy-kernel , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org CkRlbiAyNi4wOS4yMDE3IDE1LjA2LCBza3JldiBOb3JhbGYgVHLDuG5uZXM6Cj4KPiBEZW4gMjYu MDkuMjAxNyAxMy4zMiwgc2tyZXYgRGFuaWVsIFZldHRlcjoKPj4gT24gVHVlLCBTZXAgMjYsIDIw MTcgYXQgMDQ6NDY6NTNQTSArMDUzMCwgTWVnaGFuYSBNYWRoeWFzdGhhIHdyb3RlOgo+Pj4gT24g TW9uLCBTZXAgMjUsIDIwMTcgYXQgMDY6MzE6NThQTSArMDIwMCwgTm9yYWxmIFRyw7hubmVzIHdy b3RlOgo+Pj4+IERlbiAyNS4wOS4yMDE3IDE2LjU2LCBza3JldiBOb3JhbGYgVHLDuG5uZXM6Cj4+ Pj4+IEhpIE1lZ2hhbmEsCj4+Pj4+Cj4+Pj4+Cj4+Pj4+IERlbiAyMi4wOS4yMDE3IDE3LjA5LCBz a3JldiBNZWdoYW5hIE1hZGh5YXN0aGE6Cj4+Pj4+PiBNb3ZlIGJhY2tsaWdodCBoZWxwZXJzIGZy b20gdGlueWRybS1oZWxwZXJzLmMgdG8KPj4+Pj4+IHRpbnlkcm0tYmFja2xpZ2h0LmMuIFRoaXMg aXMgYmVjYXVzZSBpdCBpcyBvcmdhbml6YXRpb25hbGx5Cj4+Pj4+PiBzaW1wbGVyIHRvIHVuZGVy c3RhbmQgYW5kIGFkdmFudGFnZW91cyB0byBncm91cCBmdW5jdGlvbnMKPj4+Pj4+IHBlcmZvcm1p bmcgYSBzaW1pbGFyIGZ1bmN0aW9uIHRvIGEgc2VwYXJhdGUgZmlsZSBhcyBvcHBvc2VkIHRvCj4+ Pj4+PiBoYXZpbmcgb25lIGhlbHBlciBmaWxlIHdpdGggaGV0ZXJlZ2Vub3VzIGhlbHBlciBmdW5j dGlvbnMuCj4+Pj4+Pgo+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogTWVnaGFuYSBNYWRoeWFzdGhhIDxt ZWdoYW5hLm1hZGh5YXN0aGFAZ21haWwuY29tPgo+Pj4+Pj4gLS0tCj4+Pj4+IEkgZG9uJ3QgdGhp bmsgdGhlcmUgaXMgbXVjaCBnYWluIGluIGp1c3QgbW92aW5nIHRoZSBjb2RlIGxpa2UgdGhpcy4K Pj4+Pj4KPj4+Pj4gVGhlIGlkZWEgaXMgdG8gYWRkIGEgZHJtX2JhY2tsaWdodCBoZWxwZXIgdGhh dCBjYW4gYmUgdXNlZnVsIGZvciBhbGwKPj4+Pj4gRFJNIGRyaXZlcnMgdGhhdCB1c2UgdGhlIGJh Y2tsaWdodCBzdWJzeXN0ZW0uCj4+PiBZZXMgSSBhZ3JlZS4gVGhhdCBkZWZpbml0ZWx5IG1ha2Vz IG1vcmUgc2Vuc2UuCj4+Pj4gVGhlIGZ1bGwgcGF0aCB0byB0aGF0IGhlbHBlciB3b3VsZCBiZToK Pj4+PiBkcml2ZXJzL2dwdS9kcm0vZHJtX2JhY2tsaWdodC5jCj4+Pj4KPj4+Pj4gVGhpcyBpcyB3 aGF0IHRoZSBUT0RPIHNheXM6Cj4+Pj4+IGh0dHBzOi8vZHJpLmZyZWVkZXNrdG9wLm9yZy9kb2Nz L2RybS9ncHUvdG9kby5odG1sI3Rpbnlkcm0KPj4+Pj4KPj4+Pj4gLSBiYWNrbGlnaHQgaGVscGVy cywgcHJvYmFibHkgYmVzdCB0byBwdXQgdGhlbSBpbnRvIGEgbmV3IAo+Pj4+PiBkcm1fYmFja2xp Z2h0LmMuCj4+Pj4+IMKgwqAgVGhpcyBpcyBiZWNhdXNlIGRyaXZlcnMvdmlkZW8gaXMgZGUtZmFj dG8gdW5tYWludGFpbmVkLiBXZSAKPj4+Pj4gY291bGQgYWxzbwo+Pj4+PiDCoMKgIG1vdmUgZHJp dmVycy92aWRlby9iYWNrbGlnaHQgdG8gZHJpdmVycy9ncHUvYmFja2xpZ2h0IGFuZCB0YWtlIAo+ Pj4+PiBpdCBhbGwKPj4+Pj4gwqDCoCBvdmVyIHdpdGhpbiBkcm0tbWlzYywgYnV0IHRoYXTigJlz IG1vcmUgd29yay4KPj4+Pj4KPj4+Pj4gVGhlcmUgaXMgYWxzbyB0aGlzIGRpc2N1c3Npb24gdG8g dGFrZSBpbnRvIGFjY291bnQ6Cj4+Pj4+IEtNUyBiYWNrbGlnaHQgQUJJIHByb3Bvc2l0aW9uCj4+ Pj4+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL2FyY2hpdmVzL2RyaS1kZXZlbC8yMDE3 LUZlYnJ1YXJ5LzEzMzIwNi5odG1sIAo+Pj4+Pgo+Pj4+Pgo+Pj4+Pgo+Pj4+PiBJIGRvbid0IHJl bWVtYmVyIHdoYXQgY2FtZSBvdXQgb2YgdGhhdCBkaXNjdXNzaW9uLgo+Pj4+Pgo+Pj4+PiBOb3Jh bGYuCj4+PiBBZnRlciBoYXZpbmcgZGlzY3Vzc2VkIHRoaXMgd2l0aCBEYW5pZWwgb24gdGhlICNk cmktZGV2ZWwgaXJjIGNoYW5uZWwsCj4+PiBoZXJlIGFyZSBzb21lIG9mIHRoZSBwb2ludHMgc3Vn Z2VzdGVkLgo+Pj4KPj4+IERhbmllbCBzdWdnZXN0ZWQgdGhhdCBJIGZpcnN0IGxvb2sgaW50byB0 aGUgdXNhZ2Ugb2Ygc2hhcmVkIGJhY2tsaWdodAo+Pj4gaGVscGVycyBpbiBkcm0gKHNwZWNpZmlj YWxseSBiYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyB0byBiZWdpbiB3aXRoKS4gCj4+PiBUaGUgaWRl YQo+Pj4gd2FzIHRvIHNlZSB3aGV0aGVyIHRoZXJlIGlzIGFueSBwYXR0ZXJuIGluIHVzYWdlIGFu ZC9vciBjb2RlIAo+Pj4gZHVwaWNhdGlvbi4KPj4+IElmIHRoZXJlIGlzLCB0aGVuIHRoZSBuZXh0 IHN0ZXAgd291bGQgYmUgdG8gd3JpdGUgaGVscGVyIGZ1bmN0aW9ucyAKPj4+IHdoaWNoCj4+PiBj YW4gYmUgdXNlZCBieSBvdGhlciBkcml2ZXJzIChhbmQgbm90IGp1c3QgdGlueWRybSkuCj4+Pgo+ Pj4gVG8gc3RhcnQgd2l0aCwgSSB3ZW50IHRocm91Z2ggdGhlIGluc3RhbmNlcyBvZiBiYWNrbGln aHRfdXBkYXRlX3N0YXR1cwo+Pj4gaW4gdGhlIGRybSBjb2RlLCBhbmQgbWFkZSB0aGUgZm9sbG93 aW5nIG9ic2VydmF0aW9ucyhtb3N0IG9mIHRoZW0gYXJlCj4+PiB2ZXJ5IHNpbXBsZS9uYWl2ZSBv YnNlcnZhdGlvbnMpLgo+Pj4KPj4+IC0gYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMgaXMgdXN1YWxs eSBjYWxsZWQgaW4gYmFja2xpZ2h0IGluaXQgKGFuZAo+Pj4gwqDCoCBzb21ldGltZXMgZXhpdCkg ZnVuY3Rpb25zIG9mIHRoZSBkcml2ZXJzIGp1c3QgYWZ0ZXIgdGhlIGRldmljZSBpcyAKPj4+IHJl Z2lzdGVyZWQuCj4+PiDCoMKgIFNvIGJhY2tsaWdodF91cGRhdGVfc3RhdHVzIGlzIGNhbGxlZCB3 aXRoIHRoZSByZWdpc3RlcmVkIGRldmljZSAKPj4+IGFzIHRoZQo+Pj4gwqDCoCBwYXJhbWV0ZXIu Cj4+Pgo+Pj4gSGVyZSBhcmUgdGhlIGZvbGxvd2luZyBjYXNlcyBvZiBwcm9wZXJ0aWVzIGNoYW5n ZWQvc2V0IGJlZm9yZQo+Pj4gYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMgaXMgY2FsbGVkLgo+Pj4K Pj4+IC0gQ0FTRSAxOiBCcmlnaHRuZXNzIGlzIGNoYW5nZWQgKGVpdGhlciBhIG1hY3JvIEJSSUdI VE5FU1NfTUFYX0xFVkVMIAo+Pj4gMTAwCj4+PiDCoMKgIGlzIGRlZmluZWQgb3IgaXQgaXMgbWFu dWFsbHkgc2V0KSBUaGlzIGhhcHBlbnMgaW4gdGhlIGZvbGxvd2luZyAKPj4+IGZpbGVzOgo+Pj4K Pj4+IMKgwqAgZ21hNTAwL2Nkdl9kZXZpY2UuYywgZ21hNTAwL21kZmxkX2RldmljZS5jLCAKPj4+ IGdtYTUwMC9vYWt0cmFpbF9kZXZpY2UuYywKPj4+IMKgwqAgZ21hNTAwL3BzYl9kZXZpY2UuYywg bm92ZWF1L25vdmVhdV9iYWNrbGlnaHQuYyhoZXJlIGJyaWdodG5lc3MgaXMgCj4+PiBkZXRlcm1p bmVkIGJ5IGZ1Y3Rpb24KPj4+IMKgwqAgc3RhdGljIGludCBudjUwX2dldF9pbnRlbnNpdHkpCj4+ Pgo+Pj4gLSBDQVNFIDI6IFBvd2VyIHByb3BlcnR5IGlzIHNldCAodG8gRkJfQkxBTktfVU5CTEFO SyBtb3N0bHkpCj4+PiDCoMKgIFRoaXMgaGFwcGVucyBpbiB0aGUgZm9sbG93aW5nIGZpbGVzOgo+ Pj4KPj4+IMKgwqAgb21hcGRybS9kaXNwbGF5cy9wYW5lbC1kcGkuYywgcGFuZWwvcGFuZWwtaW5u b2x1eC1wMDc5emNhLmMsCj4+PiDCoMKgIHBhbmVsL3BhbmVsLWpkaS1sdDA3MG1lMDUwMDAuYywg cGFuZWwvcGFuZWwtc2hhcnAtbHExMDFyMXN4MDEuYywKPj4+IMKgwqAgcGFuZWwvcGFuZWwtc2hh cnAtbHMwNDN0MWxlMDEuYywgdGlsY2RjL3RpbGNkY19wYW5lbC5jCj4+PiDCoMKgIC0gQ0FTRSAz OiBTdGF0ZSBpcyBzZXQKPj4+IMKgwqAgVGhpcyBoYXBwZW5zIGluIHRoZSBmb2xsb3dpbmcgZmls ZXM6Cj4+Pgo+Pj4gwqDCoCB0aW55ZHJtL3Rpbnlkcm0taGVscGVycy5jCj4+Pgo+Pj4gLSBDQVNF IDQ6IFBvd2VyIGFuZCBicmlnaHRuZXNzIHByb3BlcnRpZXMgYXJlIHNldAo+Pj4gwqDCoCBUaGlz IGhhcHBlbnMgaW4gdGhlIGZvbGxvd2luZyBmaWxlczoKPj4+Cj4+PiDCoMKgIGF0b21iaW9zX2Vu Y29kZXJzLmMsIHJhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMsCj4+PiDCoMKgIHNobW9i aWxlL3NobW9iX2RybV9iYWNrbGlnaHQuYwo+Pj4KPj4+IC0gQ0FTRSA1OiBQb3dlciBhbmQgdGhl IHN0YXRlIHByb3BlcnRpZXMgYXJlIHNldAo+Pj4gwqDCoCBUaGlzIGhhcHBlbnMgaW4gdGhlIGZv bGxvd2luZyBmaWxlczoKPj4+Cj4+PiDCoMKgIHBhbmVsL3BhbmVsLWx2ZHMuYywgcGFuZWwvcGFu ZWwtcGFuYXNvbmljLXZ2eDEwZjAzNG4wMC5jLAo+Pj4gwqDCoCBwYW5lbC9wYW5lbC1zaW1wbGUu YywgcGFuZWwvcGFuZWwtc2l0cm9uaXgtc3Q3Nzg5di5jCj4+Pgo+Pj4gUGxlYXNlIGxldCBtZSBr bm93IGlmIEkgYW0gd3JvbmcgLyBtaXNzZWQgc29tZXRoaW5nLiBBcyBmb3IgbmV4dCBzdGVwcywK Pj4+IHdvdWxkbid0IGl0IGJlIGFuIG92ZXJraWxsIHRvIGhhdmUgYSBzZXBhcmF0ZSBoZWxwZXIg ZnVuY3Rpb24gZm9yIGVhY2gKPj4+IG9mIHRoZXNlIGNhc2VzID8gUGVyaGFwcyBhIGdlbmVyaWMg aGVscGVyIGZ1bmN0aW9uIHdoaWNoIHdvdWxkIHNvbWVob3cKPj4+IGFkZHJlc3MgdGhlc2UgY2Fz ZXMgd291bGQgYmUgbW9yZSBhcHByb3ByaWF0ZSA/IFRoYW5rIHlvdSBmb3IgeW91cgo+Pj4gdGlt ZS9wYXRpZW5jZS4KPj4gSSBzdXNwZWN0IHRoYXQgYSBsb3Qgb2YgdGhlc2UgY29tYmluYXRpb25z IGFyZSBqdXN0IHBsYWluIHdyb25nLCBidXQKPj4gaGFwcGVuIHRvIGtpbmRhIHdvcmsgd2l0aCB0 aGUgY29tYmluYXRpb24gb2YgZ3B1IGRyaXZlciBhbmQgYmFja2xpZ2h0Cj4+IGRyaXZlciB0aGV5 J3JlIHVzZWQgb24uIHRiaCBJIGhhdmUgbm8gaWRlYSB3aGljaCBvbmUgaXMgdGhlIGNvcnJlY3QK Pj4gdmVyc2lvbiBmb3IgZW5hYmxpbmcgYSBiYWNrbGlnaHQgY29ycmVjdGx5IC4uLgo+Pgo+PiBT byBkZWZpbml0ZWx5IGEgZ29vZCB0YXNrIHRvIHJlZmFjdG9yIHRoaXMgaW50byBhIHByb3BlciBo ZWxwZXIsIGJ1dCAKPj4gbG9va3MKPj4gYSBsb3QgbW9yZSBpbnZvbHZlZCB0aGFuIGF0IGZpcnN0 IHNpZ2h0Lgo+Cj4gQmFja2xpZ2h0IGlzIHRyaWNreS4KPgo+IE9uZSBhbm5veWluZyB0aGluZyBm cm9tIGEgRFJNIHBvaW50IG9mIHZpZXcgaXMgdGhhdCBpdCdzIHRpZWQgdG8gZmJkZXYKPiB3aXRo IGEgbm90aWZpZXIgZmJfbm90aWZpZXJfY2FsbGJhY2soKSB0aGF0IHR1cm5zIGl0IG9mZiBvbgo+ IEZCX0VWRU5UX0JMQU5LIGFuZCBGQl9FVkVOVF9DT05CTEFOSy4gQW5kIHRoZSBsb2dpYyBpbiB0 aGF0IGZ1bmN0aW9uIGlzCj4gdmVyeSBjb252b2x1dGVkLgo+Cj4gQW5kIGlmIHdlIGxvb2sgYXQg dGhlIGdwaW8gYmFja2xpZ2h0IGRyaXZlciwgd2Ugc2VlIHRoYXQgdGhlcmUgYXJlCj4gMyBwcm9w ZXJ0aWVzIHRoYXQgdHVybiBvZmYgdGhlIGJhY2tsaWdodDoKPgo+IHN0YXRpYyBpbnQgZ3Bpb19i YWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCj4gewo+ IMKgwqDCoCBzdHJ1Y3QgZ3Bpb19iYWNrbGlnaHQgKmdibCA9IGJsX2dldF9kYXRhKGJsKTsKPiDC oMKgwqAgaW50IGJyaWdodG5lc3MgPSBibC0+cHJvcHMuYnJpZ2h0bmVzczsKPgo+IMKgwqDCoCBp ZiAoYmwtPnByb3BzLnBvd2VyICE9IEZCX0JMQU5LX1VOQkxBTksgfHwKPiDCoMKgwqAgwqDCoMKg IGJsLT5wcm9wcy5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LIHx8Cj4gwqDCoMKgIMKgwqDC oCBibC0+cHJvcHMuc3RhdGUgJiAoQkxfQ09SRV9TVVNQRU5ERUQgfCBCTF9DT1JFX0ZCQkxBTksp KQo+IMKgwqDCoCDCoMKgwqAgYnJpZ2h0bmVzcyA9IDA7Cj4KPiDCoMKgwqAgZ3Bpb2Rfc2V0X3Zh bHVlX2NhbnNsZWVwKGdibC0+Z3Bpb2QsIGJyaWdodG5lc3MpOwo+Cj4gwqDCoMKgIHJldHVybiAw Owo+IH0KPgo+IFRoaXMgbWF5IGFjY291bnQgZm9yIHRoZSBkaWZmZXJlbnQgd2F5cyBvZiBjb250 cm9sbGluZyBiYWNrbGlnaHQgaW4gRFJNLgo+Cj4gU29tZSBvdGhlciBhc3BlY3RzOgo+IC0gVGhl IGJhY2tsaWdodCBkZXZpY2UgaGFzIGl0J3Mgb3duIHN1c3BlbmQvcmVzdW1lIGZ1bmN0aW9ucy4K PiAtIHN5c3RlbWQgdHJpZXMgdG8gYmUgc21hcnQgYW5kIHR1cm4gb24vb2ZmIGJhY2tsaWdodCwg YnV0IHRoYXQgaXMganVzdAo+IMKgIGFubm95aW5nIHdpdGggdGlueWRybSBkcml2ZXJzIHRoYXQg YXJlIGxvYWRlZCBsYXRlIHNpbmNlIGl0IHR1cm5zIG9uCj4gwqAgYW4gdW5pbml0aWFsaXplZCBk aXNwbGF5LiBEaXNhYmxpbmcgdGhlIHNlcnZpY2UgZml4ZXMgaXQuCj4KCkFuZCBzb21lIG1vcmU6 ClRoZSBiYWNrbGlnaHQgZHJpdmVyIGlzIHByb2JlZCBiZWZvcmUgdGhlIERSTSBkcml2ZXIgYW5k IGlmIERSTSBzaG91bGQKY29udHJvbCBiYWNrbGlnaHQsIHRoZW4gYmFja2xpZ2h0IHNob3VsZCBi ZSBpbml0aWFsbHkgb2ZmLiBUaGUgcHdtX2JsCmRyaXZlciBoYXMgYSBkZWZhdWx0LWJyaWdodG5l c3MtbGV2ZWwgcHJvcGVydHkgdGhhdCBpcyBzZXQgd2hlbiB0aGUKcHdtX2JsIGRyaXZlciBwcm9i ZXMuIElmIHRoZSBEUk0gZHJpdmVyIHNob3VsZCBjb250cm9sIGJhY2tsaWdodCwgdGhlbgp0aGlz IGhhcyB0byBiZSB6ZXJvL29mZiwgb3IgdGhlIGJhY2tsaWdodCBpcyB0dXJuZWQgb24gYmVmb3Jl IHRoZQpkaXNwbGF5IGlzIGluaXRpYWxpemVkLiBTbyBob3cgY2FuIHdlIG5vdyBjb21tdW5pY2F0 ZSB0aGUgZGVmYXVsdApicmlnaHRuZXNzIGxldmVsIHRvIHRoZSBwd21fYmwgZHJpdmVyPwoKVGhl IGdwaW9fYmFja2xpZ2h0IGRyaXZlciBpcyBvZmYgYnkgZGVmYXVsdC4KCkkgbm90aWNlZCB0aGF0 IGJhY2tsaWdodCBpcyBsaXN0ZWQgdW5kZXIgbGVkcyBpbiBEVCBiaW5kaW5ncyBub3cuCgo+IE5v cmFsZi4KPgo+PiBEbyB5b3UgaGF2ZSBhbnkgb2YgdGhlIGhhcmR3YXJlIHN1cHBvcnRlZCBieSBh bnkgb2YgdGhlc2UgZHJpdmVycz8gbHNtb2QKPj4gYW5kIHRoZW4gY29tcGFyaW5nIHdpdGggdGhl IG1vZHVsZXMgeW91J3JlIGJ1aWxkaW5nIGluIHlvdXIgb3duIHRyZWUKPj4gc2hvdWxkIGhlbHAg eW91IGZpZ3VyZSB0aGlzIG91dC4KPj4gLURhbmllbAo+Pgo+Pj4gLU1lZ2hhbmEKPj4+Cj4+Pj4+ PiBDaGFuZ2VzIGluIHYyOgo+Pj4+Pj4gwqDCoCAtSW1wcm92ZWQgY29tbWl0IG1lc3NhZ2UgYnkg ZXhwbGFpbmluZyB3aHkgdGhlIGNoYW5nZXMgd2VyZSBtYWRlLgo+Pj4+Pj4KPj4+Pj4+IMKgwqAg ZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfCAyICstCj4+Pj4+PiDCoMKgIGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRy bS1iYWNrbGlnaHQuYyB8IDEwMwo+Pj4+Pj4gKysrKysrKysrKysrKysrKysrKysrKysKPj4+Pj4+ IMKgwqAgZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWhlbHBlcnMuY8KgwqAg fCA5NAo+Pj4+Pj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4+Pj4+PiDCoMKgIGRyaXZlcnMvZ3B1 L2RybS90aW55ZHJtL21pMDI4M3F0LmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMSAr Cj4+Pj4+PiDCoMKgIGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL21pcGktZGJpLmPCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHwgMSArCj4+Pj4+PiDCoMKgIGluY2x1ZGUvZHJtL3Rpbnlkcm0v dGlueWRybS1iYWNrbGlnaHQuaMKgwqDCoMKgwqDCoMKgwqDCoCB8IDE4ICsrKysKPj4+Pj4+IMKg wqAgNiBmaWxlcyBjaGFuZ2VkLCAxMjQgaW5zZXJ0aW9ucygrKSwgOTUgZGVsZXRpb25zKC0pCj4+ Pj4+PiDCoMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCAKPj4+Pj4+IGRyaXZlcnMvZ3B1L2RybS90aW55 ZHJtL2NvcmUvdGlueWRybS1iYWNrbGlnaHQuYwo+Pj4+Pj4gwqDCoCBjcmVhdGUgbW9kZSAxMDA2 NDQgaW5jbHVkZS9kcm0vdGlueWRybS90aW55ZHJtLWJhY2tsaWdodC5oCj4+Pj4+Pgo+Pj4+Pj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvTWFrZWZpbGUKPj4+Pj4+ IGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS9NYWtlZmlsZQo+Pj4+Pj4gaW5kZXggZmIy MjFlNi4uMzg5Y2E3YSAxMDA2NDQKPj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJt L2NvcmUvTWFrZWZpbGUKPj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUv TWFrZWZpbGUKPj4+Pj4+IEBAIC0xLDMgKzEsMyBAQAo+Pj4+Pj4gLXRpbnlkcm0teSA6PSB0aW55 ZHJtLWNvcmUubyB0aW55ZHJtLXBpcGUubyB0aW55ZHJtLWhlbHBlcnMubwo+Pj4+Pj4gK3Rpbnlk cm0teSA6PSB0aW55ZHJtLWNvcmUubyB0aW55ZHJtLXBpcGUubyB0aW55ZHJtLWJhY2tsaWdodC5v Cj4+Pj4+PiB0aW55ZHJtLWhlbHBlcnMubwo+Pj4+Pj4gwqDCoCDCoCBvYmotJChDT05GSUdfRFJN X1RJTllEUk0pICs9IHRpbnlkcm0ubwo+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS90aW55ZHJtL2NvcmUvdGlueWRybS1iYWNrbGlnaHQuYwo+Pj4+Pj4gYi9kcml2ZXJzL2dwdS9k cm0vdGlueWRybS9jb3JlL3Rpbnlkcm0tYmFja2xpZ2h0LmMKPj4+Pj4+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4+Pj4+PiBpbmRleCAwMDAwMDAwLi5kYzZmMTdkCj4+Pj4+PiAtLS0gL2Rldi9udWxs Cj4+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0tYmFja2xp Z2h0LmMKPj4+Pj4+IEBAIC0wLDAgKzEsMTAzIEBACj4+Pj4+PiArI2luY2x1ZGUgPGxpbnV4L2Jh Y2tsaWdodC5oPgo+Pj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+Cj4+Pj4+PiArI2lu Y2x1ZGUgPGxpbnV4L3BtLmg+Cj4+Pj4+PiArI2luY2x1ZGUgPGxpbnV4L3N3YWIuaD4KPj4+Pj4+ ICsKPj4+Pj4+ICsjaW5jbHVkZSA8ZHJtL3Rpbnlkcm0vdGlueWRybS5oPgo+Pj4+Pj4gKyNpbmNs dWRlIDxkcm0vdGlueWRybS90aW55ZHJtLWJhY2tsaWdodC5oPgo+Pj4+Pj4gKwo+Pj4+Pj4gKy8q Kgo+Pj4+Pj4gKyAqIHRpbnlkcm1fb2ZfZmluZF9iYWNrbGlnaHQgLSBGaW5kIGJhY2tsaWdodCBk ZXZpY2UgaW4gZGV2aWNlLXRyZWUKPj4+Pj4+ICsgKiBAZGV2OiBEZXZpY2UKPj4+Pj4+ICsgKgo+ Pj4+Pj4gKyAqIFRoaXMgZnVuY3Rpb24gbG9va3MgZm9yIGEgRFQgbm9kZSBwb2ludGVkIHRvIGJ5 IGEgcHJvcGVydHkgbmFtZWQKPj4+Pj4+ICdiYWNrbGlnaHQnCj4+Pj4+PiArICogYW5kIHVzZXMg b2ZfZmluZF9iYWNrbGlnaHRfYnlfbm9kZSgpIHRvIGdldCB0aGUgYmFja2xpZ2h0IAo+Pj4+Pj4g ZGV2aWNlLgo+Pj4+Pj4gKyAqIEFkZGl0aW9uYWxseSBpZiB0aGUgYnJpZ2h0bmVzcyBwcm9wZXJ0 eSBpcyB6ZXJvLCBpdCBpcyBzZXQgdG8KPj4+Pj4+ICsgKiBtYXhfYnJpZ2h0bmVzcy4KPj4+Pj4+ ICsgKgo+Pj4+Pj4gKyAqIFJldHVybnM6Cj4+Pj4+PiArICogTlVMTCBpZiB0aGVyZSdzIG5vIGJh Y2tsaWdodCBwcm9wZXJ0eS4KPj4+Pj4+ICsgKiBFcnJvciBwb2ludGVyIC1FUFJPQkVfREVGRVIg aWYgdGhlIERUIG5vZGUgaXMgZm91bmQsIGJ1dCBubwo+Pj4+Pj4gYmFja2xpZ2h0IGRldmljZQo+ Pj4+Pj4gKyAqIGlzIGZvdW5kLgo+Pj4+Pj4gKyAqIElmIHRoZSBiYWNrbGlnaHQgZGV2aWNlIGlz IGZvdW5kLCBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSBpcwo+Pj4+Pj4gcmV0dXJuZWQuCj4+ Pj4+PiArICovCj4+Pj4+PiArCj4+Pj4+PiArc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKnRpbnlk cm1fb2ZfZmluZF9iYWNrbGlnaHQoc3RydWN0IGRldmljZSAKPj4+Pj4+ICpkZXYpCj4+Pj4+PiAr ewo+Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0Owo+Pj4+ Pj4gK8KgwqDCoCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDC oCBucCA9IG9mX3BhcnNlX3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAiYmFja2xpZ2h0IiwgMCk7Cj4+ Pj4+PiArwqDCoMKgIGlmICghbnApCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7 Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIGJhY2tsaWdodCA9IG9mX2ZpbmRfYmFja2xpZ2h0X2J5 X25vZGUobnApOwo+Pj4+Pj4gK8KgwqDCoCBvZl9ub2RlX3B1dChucCk7Cj4+Pj4+PiArCj4+Pj4+ PiArwqDCoMKgIGlmICghYmFja2xpZ2h0KQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBF UlJfUFRSKC1FUFJPQkVfREVGRVIpOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBpZiAoIWJhY2ts aWdodC0+cHJvcHMuYnJpZ2h0bmVzcykgewo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGJhY2tsaWdo dC0+cHJvcHMuYnJpZ2h0bmVzcyA9IAo+Pj4+Pj4gYmFja2xpZ2h0LT5wcm9wcy5tYXhfYnJpZ2h0 bmVzczsKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBEUk1fREVCVUdfS01TKCJCYWNrbGlnaHQgYnJp Z2h0bmVzcyBzZXQgdG8gJWRcbiIsCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBiYWNrbGlnaHQtPnByb3BzLmJyaWdodG5lc3MpOwo+Pj4+Pj4gK8KgwqDCoCB9Cj4+ Pj4+PiArCj4+Pj4+PiArwqDCoMKgIHJldHVybiBiYWNrbGlnaHQ7Cj4+Pj4+PiArfQo+Pj4+Pj4g K0VYUE9SVF9TWU1CT0wodGlueWRybV9vZl9maW5kX2JhY2tsaWdodCk7Cj4+Pj4+PiArCj4+Pj4+ PiArLyoqCj4+Pj4+PiArICogdGlueWRybV9lbmFibGVfYmFja2xpZ2h0IC0gRW5hYmxlIGJhY2ts aWdodCBoZWxwZXIKPj4+Pj4+ICsgKiBAYmFja2xpZ2h0OiBCYWNrbGlnaHQgZGV2aWNlCj4+Pj4+ PiArICoKPj4+Pj4+ICsgKiBSZXR1cm5zOgo+Pj4+Pj4gKyAqIFplcm8gb24gc3VjY2VzcywgbmVn YXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+Pj4+Pj4gKyAqLwo+Pj4+Pj4gK2ludCB0aW55 ZHJtX2VuYWJsZV9iYWNrbGlnaHQoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodCkK Pj4+Pj4+ICt7Cj4+Pj4+PiArwqDCoMKgIHVuc2lnbmVkIGludCBvbGRfc3RhdGU7Cj4+Pj4+PiAr wqDCoMKgIGludCByZXQ7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIGlmICghYmFja2xpZ2h0KQo+ Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBv bGRfc3RhdGUgPSBiYWNrbGlnaHQtPnByb3BzLnN0YXRlOwo+Pj4+Pj4gK8KgwqDCoCBiYWNrbGln aHQtPnByb3BzLnN0YXRlICY9IH5CTF9DT1JFX0ZCQkxBTks7Cj4+Pj4+PiArwqDCoMKgIERSTV9E RUJVR19LTVMoIkJhY2tsaWdodCBzdGF0ZTogMHgleCAtPiAweCV4XG4iLCBvbGRfc3RhdGUsCj4+ Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmFja2xpZ2h0LT5wcm9wcy5zdGF0ZSk7 Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKgIHJldCA9IGJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGJh Y2tsaWdodCk7Cj4+Pj4+PiArwqDCoMKgIGlmIChyZXQpCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAg RFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIGJhY2tsaWdodCAlZFxuIiwgcmV0KTsKPj4+Pj4+ ICsKPj4+Pj4+ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4+Pj4+ICt9Cj4+Pj4+PiArRVhQT1JUX1NZ TUJPTCh0aW55ZHJtX2VuYWJsZV9iYWNrbGlnaHQpOwo+Pj4+Pj4gKwo+Pj4+Pj4gKy8qKgo+Pj4+ Pj4gKyAqIHRpbnlkcm1fZGlzYWJsZV9iYWNrbGlnaHQgLSBEaXNhYmxlIGJhY2tsaWdodCBoZWxw ZXIKPj4+Pj4+ICsgKiBAYmFja2xpZ2h0OiBCYWNrbGlnaHQgZGV2aWNlCj4+Pj4+PiArICoKPj4+ Pj4+ICsgKiBSZXR1cm5zOgo+Pj4+Pj4gKyAqIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgZXJy b3IgY29kZSBvbiBmYWlsdXJlLgo+Pj4+Pj4gKyAqLwo+Pj4+Pj4gK2ludCB0aW55ZHJtX2Rpc2Fi bGVfYmFja2xpZ2h0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQpCj4+Pj4+PiAr ewo+Pj4+Pj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgb2xkX3N0YXRlOwo+Pj4+Pj4gK8KgwqDCoCBp bnQgcmV0Owo+Pj4+Pj4gKwo+Pj4+Pj4gK8KgwqDCoCBpZiAoIWJhY2tsaWdodCkKPj4+Pj4+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+Pj4+ICsKPj4+Pj4+ICvCoMKgwqAgb2xkX3N0YXRl ID0gYmFja2xpZ2h0LT5wcm9wcy5zdGF0ZTsKPj4+Pj4+ICvCoMKgwqAgYmFja2xpZ2h0LT5wcm9w cy5zdGF0ZSB8PSBCTF9DT1JFX0ZCQkxBTks7Cj4+Pj4+PiArwqDCoMKgIERSTV9ERUJVR19LTVMo IkJhY2tsaWdodCBzdGF0ZTogMHgleCAtPiAweCV4XG4iLCBvbGRfc3RhdGUsCj4+Pj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmFja2xpZ2h0LT5wcm9wcy5zdGF0ZSk7Cj4+Pj4+PiAr wqDCoMKgIHJldCA9IGJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGJhY2tsaWdodCk7Cj4+Pj4+PiAr wqDCoMKgIGlmIChyZXQpCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgRFJNX0VSUk9SKCJGYWlsZWQg dG8gZGlzYWJsZSBiYWNrbGlnaHQgJWRcbiIsIHJldCk7Cj4+Pj4+PiArCj4+Pj4+PiArwqDCoMKg IHJldHVybiByZXQ7Cj4+Pj4+PiArfQo+Pj4+Pj4gK0VYUE9SVF9TWU1CT0wodGlueWRybV9kaXNh YmxlX2JhY2tsaWdodCk7Cj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Rpbnlk cm0vY29yZS90aW55ZHJtLWhlbHBlcnMuYwo+Pj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vdGlueWRy bS9jb3JlL3Rpbnlkcm0taGVscGVycy5jCj4+Pj4+PiBpbmRleCBiZDZjY2UwLi5lZThhZDhjIDEw MDY0NAo+Pj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWhl bHBlcnMuYwo+Pj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJt LWhlbHBlcnMuYwo+Pj4+Pj4gQEAgLTIzNiwxMDAgKzIzNiw2IEBAIHZvaWQgdGlueWRybV94cmdi ODg4OF90b19ncmF5OCh1OCAqZHN0LCB2b2lkCj4+Pj4+PiAqdmFkZHIsIHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiLAo+Pj4+Pj4gwqDCoCB9Cj4+Pj4+PiDCoMKgIEVYUE9SVF9TWU1CT0wodGlu eWRybV94cmdiODg4OF90b19ncmF5OCk7Cj4+Pj4+PiDCoMKgIC0vKioKPj4+Pj4+IC0gKiB0aW55 ZHJtX29mX2ZpbmRfYmFja2xpZ2h0IC0gRmluZCBiYWNrbGlnaHQgZGV2aWNlIGluIGRldmljZS10 cmVlCj4+Pj4+PiAtICogQGRldjogRGV2aWNlCj4+Pj4+PiAtICoKPj4+Pj4+IC0gKiBUaGlzIGZ1 bmN0aW9uIGxvb2tzIGZvciBhIERUIG5vZGUgcG9pbnRlZCB0byBieSBhIHByb3BlcnR5IG5hbWVk Cj4+Pj4+PiAnYmFja2xpZ2h0Jwo+Pj4+Pj4gLSAqIGFuZCB1c2VzIG9mX2ZpbmRfYmFja2xpZ2h0 X2J5X25vZGUoKSB0byBnZXQgdGhlIGJhY2tsaWdodCAKPj4+Pj4+IGRldmljZS4KPj4+Pj4+IC0g KiBBZGRpdGlvbmFsbHkgaWYgdGhlIGJyaWdodG5lc3MgcHJvcGVydHkgaXMgemVybywgaXQgaXMg c2V0IHRvCj4+Pj4+PiAtICogbWF4X2JyaWdodG5lc3MuCj4+Pj4+PiAtICoKPj4+Pj4+IC0gKiBS ZXR1cm5zOgo+Pj4+Pj4gLSAqIE5VTEwgaWYgdGhlcmUncyBubyBiYWNrbGlnaHQgcHJvcGVydHku Cj4+Pj4+PiAtICogRXJyb3IgcG9pbnRlciAtRVBST0JFX0RFRkVSIGlmIHRoZSBEVCBub2RlIGlz IGZvdW5kLCBidXQgbm8KPj4+Pj4+IGJhY2tsaWdodCBkZXZpY2UKPj4+Pj4+IC0gKiBpcyBmb3Vu ZC4KPj4+Pj4+IC0gKiBJZiB0aGUgYmFja2xpZ2h0IGRldmljZSBpcyBmb3VuZCwgYSBwb2ludGVy IHRvIHRoZSBzdHJ1Y3R1cmUgaXMKPj4+Pj4+IHJldHVybmVkLgo+Pj4+Pj4gLSAqLwo+Pj4+Pj4g LXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICp0aW55ZHJtX29mX2ZpbmRfYmFja2xpZ2h0KHN0cnVj dCBkZXZpY2UgCj4+Pj4+PiAqZGV2KQo+Pj4+Pj4gLXsKPj4+Pj4+IC3CoMKgwqAgc3RydWN0IGJh Y2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodDsKPj4+Pj4+IC3CoMKgwqAgc3RydWN0IGRldmljZV9u b2RlICpucDsKPj4+Pj4+IC0KPj4+Pj4+IC3CoMKgwqAgbnAgPSBvZl9wYXJzZV9waGFuZGxlKGRl di0+b2Zfbm9kZSwgImJhY2tsaWdodCIsIDApOwo+Pj4+Pj4gLcKgwqDCoCBpZiAoIW5wKQo+Pj4+ Pj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOwo+Pj4+Pj4gLQo+Pj4+Pj4gLcKgwqDCoCBi YWNrbGlnaHQgPSBvZl9maW5kX2JhY2tsaWdodF9ieV9ub2RlKG5wKTsKPj4+Pj4+IC3CoMKgwqAg b2Zfbm9kZV9wdXQobnApOwo+Pj4+Pj4gLQo+Pj4+Pj4gLcKgwqDCoCBpZiAoIWJhY2tsaWdodCkK Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTsKPj4+ Pj4+IC0KPj4+Pj4+IC3CoMKgwqAgaWYgKCFiYWNrbGlnaHQtPnByb3BzLmJyaWdodG5lc3MpIHsK Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBiYWNrbGlnaHQtPnByb3BzLmJyaWdodG5lc3MgPSAKPj4+ Pj4+IGJhY2tsaWdodC0+cHJvcHMubWF4X2JyaWdodG5lc3M7Cj4+Pj4+PiAtwqDCoMKgwqDCoMKg wqAgRFJNX0RFQlVHX0tNUygiQmFja2xpZ2h0IGJyaWdodG5lc3Mgc2V0IHRvICVkXG4iLAo+Pj4+ Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmFja2xpZ2h0LT5wcm9wcy5i cmlnaHRuZXNzKTsKPj4+Pj4+IC3CoMKgwqAgfQo+Pj4+Pj4gLQo+Pj4+Pj4gLcKgwqDCoCByZXR1 cm4gYmFja2xpZ2h0Owo+Pj4+Pj4gLX0KPj4+Pj4+IC1FWFBPUlRfU1lNQk9MKHRpbnlkcm1fb2Zf ZmluZF9iYWNrbGlnaHQpOwo+Pj4+Pj4gLQo+Pj4+Pj4gLS8qKgo+Pj4+Pj4gLSAqIHRpbnlkcm1f ZW5hYmxlX2JhY2tsaWdodCAtIEVuYWJsZSBiYWNrbGlnaHQgaGVscGVyCj4+Pj4+PiAtICogQGJh Y2tsaWdodDogQmFja2xpZ2h0IGRldmljZQo+Pj4+Pj4gLSAqCj4+Pj4+PiAtICogUmV0dXJuczoK Pj4+Pj4+IC0gKiBaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVy ZS4KPj4+Pj4+IC0gKi8KPj4+Pj4+IC1pbnQgdGlueWRybV9lbmFibGVfYmFja2xpZ2h0KHN0cnVj dCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQpCj4+Pj4+PiAtewo+Pj4+Pj4gLcKgwqDCoCB1 bnNpZ25lZCBpbnQgb2xkX3N0YXRlOwo+Pj4+Pj4gLcKgwqDCoCBpbnQgcmV0Owo+Pj4+Pj4gLQo+ Pj4+Pj4gLcKgwqDCoCBpZiAoIWJhY2tsaWdodCkKPj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1 cm4gMDsKPj4+Pj4+IC0KPj4+Pj4+IC3CoMKgwqAgb2xkX3N0YXRlID0gYmFja2xpZ2h0LT5wcm9w cy5zdGF0ZTsKPj4+Pj4+IC3CoMKgwqAgYmFja2xpZ2h0LT5wcm9wcy5zdGF0ZSAmPSB+QkxfQ09S RV9GQkJMQU5LOwo+Pj4+Pj4gLcKgwqDCoCBEUk1fREVCVUdfS01TKCJCYWNrbGlnaHQgc3RhdGU6 IDB4JXggLT4gMHgleFxuIiwgb2xkX3N0YXRlLAo+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGJhY2tsaWdodC0+cHJvcHMuc3RhdGUpOwo+Pj4+Pj4gLQo+Pj4+Pj4gLcKgwqDCoCBy ZXQgPSBiYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhiYWNrbGlnaHQpOwo+Pj4+Pj4gLcKgwqDCoCBp ZiAocmV0KQo+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgIERSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJs ZSBiYWNrbGlnaHQgJWRcbiIsIHJldCk7Cj4+Pj4+PiAtCj4+Pj4+PiAtwqDCoMKgIHJldHVybiBy ZXQ7Cj4+Pj4+PiAtfQo+Pj4+Pj4gLUVYUE9SVF9TWU1CT0wodGlueWRybV9lbmFibGVfYmFja2xp Z2h0KTsKPj4+Pj4+IC0KPj4+Pj4+IC0vKioKPj4+Pj4+IC0gKiB0aW55ZHJtX2Rpc2FibGVfYmFj a2xpZ2h0IC0gRGlzYWJsZSBiYWNrbGlnaHQgaGVscGVyCj4+Pj4+PiAtICogQGJhY2tsaWdodDog QmFja2xpZ2h0IGRldmljZQo+Pj4+Pj4gLSAqCj4+Pj4+PiAtICogUmV0dXJuczoKPj4+Pj4+IC0g KiBaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPj4+Pj4+ IC0gKi8KPj4+Pj4+IC1pbnQgdGlueWRybV9kaXNhYmxlX2JhY2tsaWdodChzdHJ1Y3QgYmFja2xp Z2h0X2RldmljZSAqYmFja2xpZ2h0KQo+Pj4+Pj4gLXsKPj4+Pj4+IC3CoMKgwqAgdW5zaWduZWQg aW50IG9sZF9zdGF0ZTsKPj4+Pj4+IC3CoMKgwqAgaW50IHJldDsKPj4+Pj4+IC0KPj4+Pj4+IC3C oMKgwqAgaWYgKCFiYWNrbGlnaHQpCj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+ Pj4+PiAtCj4+Pj4+PiAtwqDCoMKgIG9sZF9zdGF0ZSA9IGJhY2tsaWdodC0+cHJvcHMuc3RhdGU7 Cj4+Pj4+PiAtwqDCoMKgIGJhY2tsaWdodC0+cHJvcHMuc3RhdGUgfD0gQkxfQ09SRV9GQkJMQU5L Owo+Pj4+Pj4gLcKgwqDCoCBEUk1fREVCVUdfS01TKCJCYWNrbGlnaHQgc3RhdGU6IDB4JXggLT4g MHgleFxuIiwgb2xkX3N0YXRlLAo+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJh Y2tsaWdodC0+cHJvcHMuc3RhdGUpOwo+Pj4+Pj4gLcKgwqDCoCByZXQgPSBiYWNrbGlnaHRfdXBk YXRlX3N0YXR1cyhiYWNrbGlnaHQpOwo+Pj4+Pj4gLcKgwqDCoCBpZiAocmV0KQo+Pj4+Pj4gLcKg wqDCoMKgwqDCoMKgIERSTV9FUlJPUigiRmFpbGVkIHRvIGRpc2FibGUgYmFja2xpZ2h0ICVkXG4i LCByZXQpOwo+Pj4+Pj4gLQo+Pj4+Pj4gLcKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+Pj4gLX0KPj4+ Pj4+IC1FWFBPUlRfU1lNQk9MKHRpbnlkcm1fZGlzYWJsZV9iYWNrbGlnaHQpOwo+Pj4+Pj4gwqDC oCDCoCAjaWYgSVNfRU5BQkxFRChDT05GSUdfU1BJKQo+Pj4+Pj4gwqDCoCBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vbWkwMjgzcXQuYwo+Pj4+Pj4gYi9kcml2ZXJzL2dwdS9k cm0vdGlueWRybS9taTAyODNxdC5jCj4+Pj4+PiBpbmRleCA3ZTViYjdkLi5jMTYxZDQ1IDEwMDY0 NAo+Pj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vbWkwMjgzcXQuYwo+Pj4+Pj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vbWkwMjgzcXQuYwo+Pj4+Pj4gQEAgLTEyLDYg KzEyLDcgQEAKPj4+Pj4+IMKgwqAgI2luY2x1ZGUgPGRybS90aW55ZHJtL2lsaTkzNDEuaD4KPj4+ Pj4+IMKgwqAgI2luY2x1ZGUgPGRybS90aW55ZHJtL21pcGktZGJpLmg+Cj4+Pj4+PiDCoMKgICNp bmNsdWRlIDxkcm0vdGlueWRybS90aW55ZHJtLWhlbHBlcnMuaD4KPj4+Pj4+ICsjaW5jbHVkZSA8 ZHJtL3Rpbnlkcm0vdGlueWRybS1iYWNrbGlnaHQuaD4KPj4+Pj4+IMKgwqAgI2luY2x1ZGUgPGxp bnV4L2RlbGF5Lmg+Cj4+Pj4+PiDCoMKgICNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+ Cj4+Pj4+PiDCoMKgICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPj4+Pj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9taXBpLWRiaS5jCj4+Pj4+PiBiL2RyaXZlcnMvZ3B1 L2RybS90aW55ZHJtL21pcGktZGJpLmMKPj4+Pj4+IGluZGV4IDJjYWVhYmMuLmRjODRmMjYgMTAw NjQ0Cj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9taXBpLWRiaS5jCj4+Pj4+ PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9taXBpLWRiaS5jCj4+Pj4+PiBAQCAtMTEs NiArMTEsNyBAQAo+Pj4+Pj4gwqDCoCDCoCAjaW5jbHVkZSA8ZHJtL3Rpbnlkcm0vbWlwaS1kYmku aD4KPj4+Pj4+IMKgwqAgI2luY2x1ZGUgPGRybS90aW55ZHJtL3Rpbnlkcm0taGVscGVycy5oPgo+ Pj4+Pj4gKyNpbmNsdWRlIDxkcm0vdGlueWRybS90aW55ZHJtLWJhY2tsaWdodC5oPgo+Pj4+Pj4g wqDCoCAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgo+Pj4+Pj4gwqDCoCAjaW5jbHVkZSA8bGlu dXgvZG1hLWJ1Zi5oPgo+Pj4+Pj4gwqDCoCAjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5o Pgo+Pj4+Pj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3Rpbnlkcm0vdGlueWRybS1iYWNrbGln aHQuaAo+Pj4+Pj4gYi9pbmNsdWRlL2RybS90aW55ZHJtL3Rpbnlkcm0tYmFja2xpZ2h0LmgKPj4+ Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+Pj4+PiBpbmRleCAwMDAwMDAwLi42YTdiNmQ1Cj4+ Pj4+PiAtLS0gL2Rldi9udWxsCj4+Pj4+PiArKysgYi9pbmNsdWRlL2RybS90aW55ZHJtL3Rpbnlk cm0tYmFja2xpZ2h0LmgKPj4+Pj4+IEBAIC0wLDAgKzEsMTggQEAKPj4+Pj4+ICsvKgo+Pj4+Pj4g KyAqIENvcHlyaWdodCAoQykgMjAxNiBOb3JhbGYgVHLDuG5uZXMKPj4+Pj4+ICsgKgo+Pj4+Pj4g KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgCj4+Pj4+PiBtb2RpZnkKPj4+Pj4+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAo+Pj4+Pj4gcHVibGlzaGVkIGJ5Cj4+ Pj4+PiArICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBv ZiB0aGUgCj4+Pj4+PiBMaWNlbnNlLCBvcgo+Pj4+Pj4gKyAqIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCj4+Pj4+PiArICovCj4+Pj4+PiArCj4+Pj4+PiArI2lmbmRlZiBfX0xJ TlVYX1RJTllEUk1fQkFDS0xJR0hUX0gKPj4+Pj4+ICsjZGVmaW5lIF9fTElOVVhfVElOWURSTV9C QUNLTElHSFRfSAo+Pj4+Pj4gKwo+Pj4+Pj4gK3N0cnVjdCBiYWNrbGlnaHRfZGV2aWNlOwo+Pj4+ Pj4gK3N0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICp0aW55ZHJtX29mX2ZpbmRfYmFja2xpZ2h0KHN0 cnVjdCBkZXZpY2UgCj4+Pj4+PiAqZGV2KTsKPj4+Pj4+ICtpbnQgdGlueWRybV9lbmFibGVfYmFj a2xpZ2h0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQpOwo+Pj4+Pj4gK2ludCB0 aW55ZHJtX2Rpc2FibGVfYmFja2xpZ2h0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGln aHQpOwo+Pj4+Pj4gKwo+Pj4+Pj4gKyNlbmRpZiAvKiBfX0xJTlVYX1RJTllEUk1fQkFDS0xJR0hU X0ggKi8KPj4+Pj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KPj4+Pj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+Pj4+PiBkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCj4+Pj4+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCj4+Pj4+Cj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwo+IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKPiBkcmktZGV2ZWxA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwKPgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6468555141619384320 X-Received: by 10.28.17.18 with SMTP id 18mr291407wmr.8.1506434019606; Tue, 26 Sep 2017 06:53:39 -0700 (PDT) X-BeenThere: outreachy-kernel@googlegroups.com Received: by 10.46.2.28 with SMTP id 28ls2806216ljc.5.gmail; Tue, 26 Sep 2017 06:53:37 -0700 (PDT) X-Google-Smtp-Source: AOwi7QB8Cesc31Z9VtQsM+M1tiDWzeyfzt+TY37J2eXgNCm88vo57ZRlI7owPr480/ZX6MlNgCwE X-Received: by 10.25.181.214 with SMTP id g83mr917971lfk.17.1506434017877; Tue, 26 Sep 2017 06:53:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1506434017; cv=none; d=google.com; s=arc-20160816; b=lvuWQR7MTG539rGZEgbJ8aY1PzXPTu135C88Ac8s0lO+0Ejg50Ph+uB0mN1E6iSfUK fLGih4bL9lmWWXdtNFbAYPhixu1ZlPT8HSnJgytIB5mW8Ev2MaPgoJp9Xng6Dj1GC6JE Ooa8jLqYxecsQWHzIpzaGWorfCL9J8SQ9R8tvcLourESDlVu2qt7OhwTa2YH2TuMNNor XAynAi4+9392svmiDP+tTowNvuOWUjj/g3/BUTW1J5/JLqJp7Tz3Lc1tzFRAk5n9vTQy r/vNmKi6VahO+p7rWXdsMVYdiMVjy4JOzvh3xO/lVhyBSNZA1/Qn2mP0gnZQT1jZl3ng qQ7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:references:cc:to:from:subject:arc-authentication-results; bh=3kLN0bsiAxBhHbKLpT8TQJCbv6gEo9jqeD9vx4Ix5nw=; b=Fy2Si5UWXgWFNdNULQ6tABNccPeXh8x+ueWdMDX1t/eQu716APsqzV/LyMmP6DGmdP W+P4DI5h5TYbMR8DWG7dPHrkJ9Vs6nwsfBP2tQ0gfiiTSR7WHGrE1O1PK32QYSfcQR+z 7MGN9mdbGcPazeIsD1KSyfmgdrz4YPv6l67mtuEKwCqaCLmsL2ijA4su7c9McZ1L/mBk SfmmfuYu2IAoG9j1LdlVsSG6dFGMV7JUb9kGyZ7iHz0oynbVP1hqJ/1nu1Ej5RA1HnZh eAV24JUzzWlNcPJfZDuePRgVEmvqA5oxMBI5nZWtTx1Xlb5TnVS+v2AzAcxUMOpl/GRP oh7g== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of noralf@tronnes.org designates 2a01:5b40:0:3005::1 as permitted sender) smtp.mailfrom=noralf@tronnes.org Return-Path: Received: from smtp.domeneshop.no (smtp.domeneshop.no. [2a01:5b40:0:3005::1]) by gmr-mx.google.com with ESMTPS id m13si215385lfj.9.2017.09.26.06.53.37 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Sep 2017 06:53:37 -0700 (PDT) Received-SPF: pass (google.com: domain of noralf@tronnes.org designates 2a01:5b40:0:3005::1 as permitted sender) client-ip=2a01:5b40:0:3005::1; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of noralf@tronnes.org designates 2a01:5b40:0:3005::1 as permitted sender) smtp.mailfrom=noralf@tronnes.org Received: from 211.81-166-168.customer.lyse.net ([81.166.168.211]:61682 helo=[192.168.10.157]) by smtp.domeneshop.no with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1dwqIr-0006vc-0Y; Tue, 26 Sep 2017 15:53:37 +0200 Subject: Re: [PATCH v2] drm/tinydrm: Move backlight helpers to a separate file From: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= To: Daniel Vetter , Meghana Madhyastha Cc: outreachy-kernel , dri-devel@lists.freedesktop.org References: <20170922150935.GA15912@meghana-HP-Pavilion-Notebook> <3dd313c8-daa7-a395-183c-c2dfac4dd4b4@tronnes.org> <20170926111650.GA7624@meghana-HP-Pavilion-Notebook> <20170926113214.ahxqmqspsd3olu73@phenom.ffwll.local> <938e964a-9b4e-b9fe-fdcc-a04d24f3a330@tronnes.org> Message-ID: <015cae83-661d-5732-3f42-ba6fc1bb9264@tronnes.org> Date: Tue, 26 Sep 2017 15:53:33 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 In-Reply-To: <938e964a-9b4e-b9fe-fdcc-a04d24f3a330@tronnes.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Den 26.09.2017 15.06, skrev Noralf Trønnes: > > Den 26.09.2017 13.32, skrev Daniel Vetter: >> 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. > > Backlight is tricky. > > One annoying thing from a DRM point of view is that it's tied to fbdev > with a notifier fb_notifier_callback() that turns it off on > FB_EVENT_BLANK and FB_EVENT_CONBLANK. And the logic in that function is > very convoluted. > > And if we look at the gpio backlight driver, we see that there are > 3 properties that turn off the backlight: > > static int gpio_backlight_update_status(struct backlight_device *bl) > { >     struct gpio_backlight *gbl = bl_get_data(bl); >     int brightness = bl->props.brightness; > >     if (bl->props.power != FB_BLANK_UNBLANK || >         bl->props.fb_blank != FB_BLANK_UNBLANK || >         bl->props.state & (BL_CORE_SUSPENDED | BL_CORE_FBBLANK)) >         brightness = 0; > >     gpiod_set_value_cansleep(gbl->gpiod, brightness); > >     return 0; > } > > This may account for the different ways of controlling backlight in DRM. > > Some other aspects: > - The backlight device has it's own suspend/resume functions. > - systemd tries to be smart and turn on/off backlight, but that is just >   annoying with tinydrm drivers that are loaded late since it turns on >   an uninitialized display. Disabling the service fixes it. > And some more: The backlight driver is probed before the DRM driver and if DRM should control backlight, then backlight should be initially off. The pwm_bl driver has a default-brightness-level property that is set when the pwm_bl driver probes. If the DRM driver should control backlight, then this has to be zero/off, or the backlight is turned on before the display is initialized. So how can we now communicate the default brightness level to the pwm_bl driver? The gpio_backlight driver is off by default. I noticed that backlight is listed under leds in DT bindings now. > Noralf. > >> 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 >>>>> > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel >