From mboxrd@z Thu Jan 1 00:00:00 1970 From: Meghana Madhyastha Subject: Re: [PATCH v2] drm/tinydrm: Move backlight helpers to a separate file Date: Wed, 27 Sep 2017 16:39:12 +0530 Message-ID: <20170927110909.GB30441@meghana-HP-Pavilion-Notebook> 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> <015cae83-661d-5732-3f42-ba6fc1bb9264@tronnes.org> <20170927084915.po4xokepe2pboebk@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pg0-x243.google.com (mail-pg0-x243.google.com [IPv6:2607:f8b0:400e:c05::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 258D26E6D1 for ; Wed, 27 Sep 2017 11:09:21 +0000 (UTC) Received: by mail-pg0-x243.google.com with SMTP id i130so8863686pgc.0 for ; Wed, 27 Sep 2017 04:09:20 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20170927084915.po4xokepe2pboebk@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter , dri-devel@lists.freedesktop.org, outreachy-kernel@googlegroups.com, Noralf =?iso-8859-1?Q?Tr=F8nnes?= List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBTZXAgMjcsIDIwMTcgYXQgMTA6NDk6MTVBTSArMDIwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBUdWUsIFNlcCAyNiwgMjAxNyBhdCAwMzo1MzozM1BNICswMjAwLCBOb3JhbGYg VHLDuG5uZXMgd3JvdGU6Cj4gPiAKPiA+IERlbiAyNi4wOS4yMDE3IDE1LjA2LCBza3JldiBOb3Jh bGYgVHLDuG5uZXM6Cj4gPiA+IAo+ID4gPiBEZW4gMjYuMDkuMjAxNyAxMy4zMiwgc2tyZXYgRGFu aWVsIFZldHRlcjoKPiA+ID4gPiBPbiBUdWUsIFNlcCAyNiwgMjAxNyBhdCAwNDo0Njo1M1BNICsw NTMwLCBNZWdoYW5hIE1hZGh5YXN0aGEgd3JvdGU6Cj4gPiA+ID4gPiBPbiBNb24sIFNlcCAyNSwg MjAxNyBhdCAwNjozMTo1OFBNICswMjAwLCBOb3JhbGYgVHLDuG5uZXMgd3JvdGU6Cj4gPiA+ID4g PiA+IERlbiAyNS4wOS4yMDE3IDE2LjU2LCBza3JldiBOb3JhbGYgVHLDuG5uZXM6Cj4gPiA+ID4g PiA+ID4gSGkgTWVnaGFuYSwKPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ ID4gPiBEZW4gMjIuMDkuMjAxNyAxNy4wOSwgc2tyZXYgTWVnaGFuYSBNYWRoeWFzdGhhOgo+ID4g PiA+ID4gPiA+ID4gTW92ZSBiYWNrbGlnaHQgaGVscGVycyBmcm9tIHRpbnlkcm0taGVscGVycy5j IHRvCj4gPiA+ID4gPiA+ID4gPiB0aW55ZHJtLWJhY2tsaWdodC5jLiBUaGlzIGlzIGJlY2F1c2Ug aXQgaXMgb3JnYW5pemF0aW9uYWxseQo+ID4gPiA+ID4gPiA+ID4gc2ltcGxlciB0byB1bmRlcnN0 YW5kIGFuZCBhZHZhbnRhZ2VvdXMgdG8gZ3JvdXAgZnVuY3Rpb25zCj4gPiA+ID4gPiA+ID4gPiBw ZXJmb3JtaW5nIGEgc2ltaWxhciBmdW5jdGlvbiB0byBhIHNlcGFyYXRlIGZpbGUgYXMgb3Bwb3Nl ZCB0bwo+ID4gPiA+ID4gPiA+ID4gaGF2aW5nIG9uZSBoZWxwZXIgZmlsZSB3aXRoIGhldGVyZWdl bm91cyBoZWxwZXIgZnVuY3Rpb25zLgo+ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiBT aWduZWQtb2ZmLWJ5OiBNZWdoYW5hIE1hZGh5YXN0aGEgPG1lZ2hhbmEubWFkaHlhc3RoYUBnbWFp bC5jb20+Cj4gPiA+ID4gPiA+ID4gPiAtLS0KPiA+ID4gPiA+ID4gPiBJIGRvbid0IHRoaW5rIHRo ZXJlIGlzIG11Y2ggZ2FpbiBpbiBqdXN0IG1vdmluZyB0aGUgY29kZSBsaWtlIHRoaXMuCj4gPiA+ ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gVGhlIGlkZWEgaXMgdG8gYWRkIGEgZHJtX2JhY2tsaWdo dCBoZWxwZXIgdGhhdCBjYW4gYmUgdXNlZnVsIGZvciBhbGwKPiA+ID4gPiA+ID4gPiBEUk0gZHJp dmVycyB0aGF0IHVzZSB0aGUgYmFja2xpZ2h0IHN1YnN5c3RlbS4KPiA+ID4gPiA+IFllcyBJIGFn cmVlLiBUaGF0IGRlZmluaXRlbHkgbWFrZXMgbW9yZSBzZW5zZS4KPiA+ID4gPiA+ID4gVGhlIGZ1 bGwgcGF0aCB0byB0aGF0IGhlbHBlciB3b3VsZCBiZToKPiA+ID4gPiA+ID4gZHJpdmVycy9ncHUv ZHJtL2RybV9iYWNrbGlnaHQuYwo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiBUaGlzIGlzIHdo YXQgdGhlIFRPRE8gc2F5czoKPiA+ID4gPiA+ID4gPiBodHRwczovL2RyaS5mcmVlZGVza3RvcC5v cmcvZG9jcy9kcm0vZ3B1L3RvZG8uaHRtbCN0aW55ZHJtCj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4g PiA+ID4gLSBiYWNrbGlnaHQgaGVscGVycywgcHJvYmFibHkgYmVzdCB0byBwdXQgdGhlbSBpbnRv IGEKPiA+ID4gPiA+ID4gPiBuZXcgZHJtX2JhY2tsaWdodC5jLgo+ID4gPiA+ID4gPiA+IMKgwqAg VGhpcyBpcyBiZWNhdXNlIGRyaXZlcnMvdmlkZW8gaXMgZGUtZmFjdG8KPiA+ID4gPiA+ID4gPiB1 bm1haW50YWluZWQuIFdlIGNvdWxkIGFsc28KPiA+ID4gPiA+ID4gPiDCoMKgIG1vdmUgZHJpdmVy cy92aWRlby9iYWNrbGlnaHQgdG8gZHJpdmVycy9ncHUvYmFja2xpZ2h0Cj4gPiA+ID4gPiA+ID4g YW5kIHRha2UgaXQgYWxsCj4gPiA+ID4gPiA+ID4gwqDCoCBvdmVyIHdpdGhpbiBkcm0tbWlzYywg YnV0IHRoYXTigJlzIG1vcmUgd29yay4KPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiBUaGVy ZSBpcyBhbHNvIHRoaXMgZGlzY3Vzc2lvbiB0byB0YWtlIGludG8gYWNjb3VudDoKPiA+ID4gPiA+ ID4gPiBLTVMgYmFja2xpZ2h0IEFCSSBwcm9wb3NpdGlvbgo+ID4gPiA+ID4gPiA+IGh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL2FyY2hpdmVzL2RyaS1kZXZlbC8yMDE3LUZlYnJ1YXJ5LzEz MzIwNi5odG1sCj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gCj4g PiA+ID4gPiA+ID4gSSBkb24ndCByZW1lbWJlciB3aGF0IGNhbWUgb3V0IG9mIHRoYXQgZGlzY3Vz c2lvbi4KPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiBOb3JhbGYuCj4gPiA+ID4gPiBBZnRl ciBoYXZpbmcgZGlzY3Vzc2VkIHRoaXMgd2l0aCBEYW5pZWwgb24gdGhlICNkcmktZGV2ZWwgaXJj IGNoYW5uZWwsCj4gPiA+ID4gPiBoZXJlIGFyZSBzb21lIG9mIHRoZSBwb2ludHMgc3VnZ2VzdGVk Lgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBEYW5pZWwgc3VnZ2VzdGVkIHRoYXQgSSBmaXJzdCBsb29r IGludG8gdGhlIHVzYWdlIG9mIHNoYXJlZCBiYWNrbGlnaHQKPiA+ID4gPiA+IGhlbHBlcnMgaW4g ZHJtIChzcGVjaWZpY2FsbHkgYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMgdG8gYmVnaW4KPiA+ID4g PiA+IHdpdGgpLiBUaGUgaWRlYQo+ID4gPiA+ID4gd2FzIHRvIHNlZSB3aGV0aGVyIHRoZXJlIGlz IGFueSBwYXR0ZXJuIGluIHVzYWdlIGFuZC9vciBjb2RlCj4gPiA+ID4gPiBkdXBpY2F0aW9uLgo+ ID4gPiA+ID4gSWYgdGhlcmUgaXMsIHRoZW4gdGhlIG5leHQgc3RlcCB3b3VsZCBiZSB0byB3cml0 ZSBoZWxwZXIKPiA+ID4gPiA+IGZ1bmN0aW9ucyB3aGljaAo+ID4gPiA+ID4gY2FuIGJlIHVzZWQg Ynkgb3RoZXIgZHJpdmVycyAoYW5kIG5vdCBqdXN0IHRpbnlkcm0pLgo+ID4gPiA+ID4gCj4gPiA+ ID4gPiBUbyBzdGFydCB3aXRoLCBJIHdlbnQgdGhyb3VnaCB0aGUgaW5zdGFuY2VzIG9mIGJhY2ts aWdodF91cGRhdGVfc3RhdHVzCj4gPiA+ID4gPiBpbiB0aGUgZHJtIGNvZGUsIGFuZCBtYWRlIHRo ZSBmb2xsb3dpbmcgb2JzZXJ2YXRpb25zKG1vc3Qgb2YgdGhlbSBhcmUKPiA+ID4gPiA+IHZlcnkg c2ltcGxlL25haXZlIG9ic2VydmF0aW9ucykuCj4gPiA+ID4gPiAKPiA+ID4gPiA+IC0gYmFja2xp Z2h0X3VwZGF0ZV9zdGF0dXMgaXMgdXN1YWxseSBjYWxsZWQgaW4gYmFja2xpZ2h0IGluaXQgKGFu ZAo+ID4gPiA+ID4gwqDCoCBzb21ldGltZXMgZXhpdCkgZnVuY3Rpb25zIG9mIHRoZSBkcml2ZXJz IGp1c3QgYWZ0ZXIgdGhlCj4gPiA+ID4gPiBkZXZpY2UgaXMgcmVnaXN0ZXJlZC4KPiA+ID4gPiA+ IMKgwqAgU28gYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMgaXMgY2FsbGVkIHdpdGggdGhlIHJlZ2lz dGVyZWQKPiA+ID4gPiA+IGRldmljZSBhcyB0aGUKPiA+ID4gPiA+IMKgwqAgcGFyYW1ldGVyLgo+ ID4gPiA+ID4gCj4gPiA+ID4gPiBIZXJlIGFyZSB0aGUgZm9sbG93aW5nIGNhc2VzIG9mIHByb3Bl cnRpZXMgY2hhbmdlZC9zZXQgYmVmb3JlCj4gPiA+ID4gPiBiYWNrbGlnaHRfdXBkYXRlX3N0YXR1 cyBpcyBjYWxsZWQuCj4gPiA+ID4gPiAKPiA+ID4gPiA+IC0gQ0FTRSAxOiBCcmlnaHRuZXNzIGlz IGNoYW5nZWQgKGVpdGhlciBhIG1hY3JvCj4gPiA+ID4gPiBCUklHSFRORVNTX01BWF9MRVZFTCAx MDAKPiA+ID4gPiA+IMKgwqAgaXMgZGVmaW5lZCBvciBpdCBpcyBtYW51YWxseSBzZXQpIFRoaXMg aGFwcGVucyBpbiB0aGUKPiA+ID4gPiA+IGZvbGxvd2luZyBmaWxlczoKPiA+ID4gPiA+IAo+ID4g PiA+ID4gwqDCoCBnbWE1MDAvY2R2X2RldmljZS5jLCBnbWE1MDAvbWRmbGRfZGV2aWNlLmMsCj4g PiA+ID4gPiBnbWE1MDAvb2FrdHJhaWxfZGV2aWNlLmMsCj4gPiA+ID4gPiDCoMKgIGdtYTUwMC9w c2JfZGV2aWNlLmMsIG5vdmVhdS9ub3ZlYXVfYmFja2xpZ2h0LmMoaGVyZQo+ID4gPiA+ID4gYnJp Z2h0bmVzcyBpcyBkZXRlcm1pbmVkIGJ5IGZ1Y3Rpb24KPiA+ID4gPiA+IMKgwqAgc3RhdGljIGlu dCBudjUwX2dldF9pbnRlbnNpdHkpCj4gPiA+ID4gPiAKPiA+ID4gPiA+IC0gQ0FTRSAyOiBQb3dl ciBwcm9wZXJ0eSBpcyBzZXQgKHRvIEZCX0JMQU5LX1VOQkxBTksgbW9zdGx5KQo+ID4gPiA+ID4g wqDCoCBUaGlzIGhhcHBlbnMgaW4gdGhlIGZvbGxvd2luZyBmaWxlczoKPiA+ID4gPiA+IAo+ID4g PiA+ID4gwqDCoCBvbWFwZHJtL2Rpc3BsYXlzL3BhbmVsLWRwaS5jLCBwYW5lbC9wYW5lbC1pbm5v bHV4LXAwNzl6Y2EuYywKPiA+ID4gPiA+IMKgwqAgcGFuZWwvcGFuZWwtamRpLWx0MDcwbWUwNTAw MC5jLCBwYW5lbC9wYW5lbC1zaGFycC1scTEwMXIxc3gwMS5jLAo+ID4gPiA+ID4gwqDCoCBwYW5l bC9wYW5lbC1zaGFycC1sczA0M3QxbGUwMS5jLCB0aWxjZGMvdGlsY2RjX3BhbmVsLmMKPiA+ID4g PiA+IMKgwqAgLSBDQVNFIDM6IFN0YXRlIGlzIHNldAo+ID4gPiA+ID4gwqDCoCBUaGlzIGhhcHBl bnMgaW4gdGhlIGZvbGxvd2luZyBmaWxlczoKPiA+ID4gPiA+IAo+ID4gPiA+ID4gwqDCoCB0aW55 ZHJtL3Rpbnlkcm0taGVscGVycy5jCj4gPiA+ID4gPiAKPiA+ID4gPiA+IC0gQ0FTRSA0OiBQb3dl ciBhbmQgYnJpZ2h0bmVzcyBwcm9wZXJ0aWVzIGFyZSBzZXQKPiA+ID4gPiA+IMKgwqAgVGhpcyBo YXBwZW5zIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6Cj4gPiA+ID4gPiAKPiA+ID4gPiA+IMKgwqAg YXRvbWJpb3NfZW5jb2RlcnMuYywgcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYywKPiA+ ID4gPiA+IMKgwqAgc2htb2JpbGUvc2htb2JfZHJtX2JhY2tsaWdodC5jCj4gPiA+ID4gPiAKPiA+ ID4gPiA+IC0gQ0FTRSA1OiBQb3dlciBhbmQgdGhlIHN0YXRlIHByb3BlcnRpZXMgYXJlIHNldAo+ ID4gPiA+ID4gwqDCoCBUaGlzIGhhcHBlbnMgaW4gdGhlIGZvbGxvd2luZyBmaWxlczoKPiA+ID4g PiA+IAo+ID4gPiA+ID4gwqDCoCBwYW5lbC9wYW5lbC1sdmRzLmMsIHBhbmVsL3BhbmVsLXBhbmFz b25pYy12dngxMGYwMzRuMDAuYywKPiA+ID4gPiA+IMKgwqAgcGFuZWwvcGFuZWwtc2ltcGxlLmMs IHBhbmVsL3BhbmVsLXNpdHJvbml4LXN0Nzc4OXYuYwo+ID4gPiA+ID4gCj4gPiA+ID4gPiBQbGVh c2UgbGV0IG1lIGtub3cgaWYgSSBhbSB3cm9uZyAvIG1pc3NlZCBzb21ldGhpbmcuIEFzIGZvciBu ZXh0IHN0ZXBzLAo+ID4gPiA+ID4gd291bGRuJ3QgaXQgYmUgYW4gb3ZlcmtpbGwgdG8gaGF2ZSBh IHNlcGFyYXRlIGhlbHBlciBmdW5jdGlvbiBmb3IgZWFjaAo+ID4gPiA+ID4gb2YgdGhlc2UgY2Fz ZXMgPyBQZXJoYXBzIGEgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb24gd2hpY2ggd291bGQgc29tZWhv dwo+ID4gPiA+ID4gYWRkcmVzcyB0aGVzZSBjYXNlcyB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRl ID8gVGhhbmsgeW91IGZvciB5b3VyCj4gPiA+ID4gPiB0aW1lL3BhdGllbmNlLgo+ID4gPiA+IEkg c3VzcGVjdCB0aGF0IGEgbG90IG9mIHRoZXNlIGNvbWJpbmF0aW9ucyBhcmUganVzdCBwbGFpbiB3 cm9uZywgYnV0Cj4gPiA+ID4gaGFwcGVuIHRvIGtpbmRhIHdvcmsgd2l0aCB0aGUgY29tYmluYXRp b24gb2YgZ3B1IGRyaXZlciBhbmQgYmFja2xpZ2h0Cj4gPiA+ID4gZHJpdmVyIHRoZXkncmUgdXNl ZCBvbi4gdGJoIEkgaGF2ZSBubyBpZGVhIHdoaWNoIG9uZSBpcyB0aGUgY29ycmVjdAo+ID4gPiA+ IHZlcnNpb24gZm9yIGVuYWJsaW5nIGEgYmFja2xpZ2h0IGNvcnJlY3RseSAuLi4KPiA+ID4gPiAK PiA+ID4gPiBTbyBkZWZpbml0ZWx5IGEgZ29vZCB0YXNrIHRvIHJlZmFjdG9yIHRoaXMgaW50byBh IHByb3BlciBoZWxwZXIsIGJ1dAo+ID4gPiA+IGxvb2tzCj4gPiA+ID4gYSBsb3QgbW9yZSBpbnZv bHZlZCB0aGFuIGF0IGZpcnN0IHNpZ2h0Lgo+ID4gPiAKPiA+ID4gQmFja2xpZ2h0IGlzIHRyaWNr eS4KPiA+ID4gCj4gPiA+IE9uZSBhbm5veWluZyB0aGluZyBmcm9tIGEgRFJNIHBvaW50IG9mIHZp ZXcgaXMgdGhhdCBpdCdzIHRpZWQgdG8gZmJkZXYKPiA+ID4gd2l0aCBhIG5vdGlmaWVyIGZiX25v dGlmaWVyX2NhbGxiYWNrKCkgdGhhdCB0dXJucyBpdCBvZmYgb24KPiA+ID4gRkJfRVZFTlRfQkxB TksgYW5kIEZCX0VWRU5UX0NPTkJMQU5LLiBBbmQgdGhlIGxvZ2ljIGluIHRoYXQgZnVuY3Rpb24g aXMKPiA+ID4gdmVyeSBjb252b2x1dGVkLgo+ID4gPiAKPiA+ID4gQW5kIGlmIHdlIGxvb2sgYXQg dGhlIGdwaW8gYmFja2xpZ2h0IGRyaXZlciwgd2Ugc2VlIHRoYXQgdGhlcmUgYXJlCj4gPiA+IDMg cHJvcGVydGllcyB0aGF0IHR1cm4gb2ZmIHRoZSBiYWNrbGlnaHQ6Cj4gPiA+IAo+ID4gPiBzdGF0 aWMgaW50IGdwaW9fYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZp Y2UgKmJsKQo+ID4gPiB7Cj4gPiA+IMKgwqDCoCBzdHJ1Y3QgZ3Bpb19iYWNrbGlnaHQgKmdibCA9 IGJsX2dldF9kYXRhKGJsKTsKPiA+ID4gwqDCoMKgIGludCBicmlnaHRuZXNzID0gYmwtPnByb3Bz LmJyaWdodG5lc3M7Cj4gPiA+IAo+ID4gPiDCoMKgwqAgaWYgKGJsLT5wcm9wcy5wb3dlciAhPSBG Ql9CTEFOS19VTkJMQU5LIHx8Cj4gPiA+IMKgwqDCoCDCoMKgwqAgYmwtPnByb3BzLmZiX2JsYW5r ICE9IEZCX0JMQU5LX1VOQkxBTksgfHwKPiA+ID4gwqDCoMKgIMKgwqDCoCBibC0+cHJvcHMuc3Rh dGUgJiAoQkxfQ09SRV9TVVNQRU5ERUQgfCBCTF9DT1JFX0ZCQkxBTkspKQo+ID4gPiDCoMKgwqAg wqDCoMKgIGJyaWdodG5lc3MgPSAwOwo+ID4gPiAKPiA+ID4gwqDCoMKgIGdwaW9kX3NldF92YWx1 ZV9jYW5zbGVlcChnYmwtPmdwaW9kLCBicmlnaHRuZXNzKTsKPiA+ID4gCj4gPiA+IMKgwqDCoCBy ZXR1cm4gMDsKPiA+ID4gfQo+ID4gPiAKPiA+ID4gVGhpcyBtYXkgYWNjb3VudCBmb3IgdGhlIGRp ZmZlcmVudCB3YXlzIG9mIGNvbnRyb2xsaW5nIGJhY2tsaWdodCBpbiBEUk0uCj4gPiA+IAo+ID4g PiBTb21lIG90aGVyIGFzcGVjdHM6Cj4gPiA+IC0gVGhlIGJhY2tsaWdodCBkZXZpY2UgaGFzIGl0 J3Mgb3duIHN1c3BlbmQvcmVzdW1lIGZ1bmN0aW9ucy4KPiA+ID4gLSBzeXN0ZW1kIHRyaWVzIHRv IGJlIHNtYXJ0IGFuZCB0dXJuIG9uL29mZiBiYWNrbGlnaHQsIGJ1dCB0aGF0IGlzIGp1c3QKPiA+ ID4gwqAgYW5ub3lpbmcgd2l0aCB0aW55ZHJtIGRyaXZlcnMgdGhhdCBhcmUgbG9hZGVkIGxhdGUg c2luY2UgaXQgdHVybnMgb24KPiA+ID4gwqAgYW4gdW5pbml0aWFsaXplZCBkaXNwbGF5LiBEaXNh YmxpbmcgdGhlIHNlcnZpY2UgZml4ZXMgaXQuCj4gPiA+IAo+ID4gCj4gPiBBbmQgc29tZSBtb3Jl Ogo+ID4gVGhlIGJhY2tsaWdodCBkcml2ZXIgaXMgcHJvYmVkIGJlZm9yZSB0aGUgRFJNIGRyaXZl ciBhbmQgaWYgRFJNIHNob3VsZAo+ID4gY29udHJvbCBiYWNrbGlnaHQsIHRoZW4gYmFja2xpZ2h0 IHNob3VsZCBiZSBpbml0aWFsbHkgb2ZmLiBUaGUgcHdtX2JsCj4gPiBkcml2ZXIgaGFzIGEgZGVm YXVsdC1icmlnaHRuZXNzLWxldmVsIHByb3BlcnR5IHRoYXQgaXMgc2V0IHdoZW4gdGhlCj4gPiBw d21fYmwgZHJpdmVyIHByb2Jlcy4gSWYgdGhlIERSTSBkcml2ZXIgc2hvdWxkIGNvbnRyb2wgYmFj a2xpZ2h0LCB0aGVuCj4gPiB0aGlzIGhhcyB0byBiZSB6ZXJvL29mZiwgb3IgdGhlIGJhY2tsaWdo dCBpcyB0dXJuZWQgb24gYmVmb3JlIHRoZQo+ID4gZGlzcGxheSBpcyBpbml0aWFsaXplZC4gU28g aG93IGNhbiB3ZSBub3cgY29tbXVuaWNhdGUgdGhlIGRlZmF1bHQKPiA+IGJyaWdodG5lc3MgbGV2 ZWwgdG8gdGhlIHB3bV9ibCBkcml2ZXI/Cj4gPiAKPiA+IFRoZSBncGlvX2JhY2tsaWdodCBkcml2 ZXIgaXMgb2ZmIGJ5IGRlZmF1bHQuCj4gPiAKPiA+IEkgbm90aWNlZCB0aGF0IGJhY2tsaWdodCBp cyBsaXN0ZWQgdW5kZXIgbGVkcyBpbiBEVCBiaW5kaW5ncyBub3cuCj4gCj4gT2ggZGVhciwgc291 bmRzIGxpa2Ugd2UgaGF2ZSBhbiBhbGwgYXJvdW5kIG1lc3MsIGFuZCB0aGUgcmVhbCBqb2IgaXMg YSBsb3QKPiBiaWdnZXIgdGhhbiB0aGUgdG9kby4KPiAKPiBNZWdoYW5hLCBJIHRoaW5rIHRoaXMg aXNuJ3QgcmVhbGx5IGEgZ29vZCBpZGVhIGZvciBhbiBhcHBsaWNhdGlvbiBwZXJpb2QKPiB0YXNr LCBidXQgaXQgbWlnaHQgYmUgc29tZXRoaW5nIHdlIGNvdWxkIG1ha2UgaW50byBhbiBlbnRpcmUg aW50ZXJuc2hpcAo+IGV2ZW4uCgpPa2F5LCB0aGF0IG1ha2VzIHNlbnNlIGFuZCBJIGFncmVlLgoK PiBCdXQgc2luY2UgdGhlcmUncyBzb21lIGdvb2QgZGlzY3Vzc2lvbnMgYW5kIGZpbmRpbmdzIGhl cmUgYWxyZWFkeSwgY2FuIHlvdQo+IHBscyBkbyBhIHBhdGNoIHRvIHRvZG8ucnN0LCB3aXRoIGEg bGluayB0byB0aGlzIGRpc2N1c3Npb24gZnJvbSB0aGUgd2ViCj4gYXJjaGl2ZSBhbmQgYSBzaG9y dCBzdW1tYXJ5PyBQbGVhc2UgbWFrZSBzdXJlIGl0IHJlbmRlcnMgY29ycmVjdGx5IHdoZW4KPiBi dWlsZGluZyB0aGUgZG9jcyB3aXRoCgpTdXJlLCBJIGhhdmUgc2VudCBhIHBhdGNoLiBUaGFua3Mg Zm9yIGFsbCB0aGUgc3VnZ2VzdGlvbnMuCgo+ICQgbWFrZSBodG1sZG9jcwo+IAo+IFRoYW5rcywg RGFuaWVsCiAKPiA+ID4gTm9yYWxmLgo+ID4gPiAKPiA+ID4gPiBEbyB5b3UgaGF2ZSBhbnkgb2Yg dGhlIGhhcmR3YXJlIHN1cHBvcnRlZCBieSBhbnkgb2YgdGhlc2UgZHJpdmVycz8gbHNtb2QKPiA+ ID4gPiBhbmQgdGhlbiBjb21wYXJpbmcgd2l0aCB0aGUgbW9kdWxlcyB5b3UncmUgYnVpbGRpbmcg aW4geW91ciBvd24gdHJlZQo+ID4gPiA+IHNob3VsZCBoZWxwIHlvdSBmaWd1cmUgdGhpcyBvdXQu Cj4gPiA+ID4gLURhbmllbAo+ID4gPiA+IAo+ID4gPiA+ID4gLU1lZ2hhbmEKPiA+ID4gPiA+IAo+ ID4gPiA+ID4gPiA+ID4gQ2hhbmdlcyBpbiB2MjoKPiA+ID4gPiA+ID4gPiA+IMKgwqAgLUltcHJv dmVkIGNvbW1pdCBtZXNzYWdlIGJ5IGV4cGxhaW5pbmcgd2h5IHRoZSBjaGFuZ2VzIHdlcmUgbWFk ZS4KPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gwqDCoCBkcml2ZXJzL2dwdS9kcm0v dGlueWRybS9jb3JlL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDIgKy0KPiA+ID4g PiA+ID4gPiA+IMKgwqAgZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWJhY2ts aWdodC5jIHwgMTAzCj4gPiA+ID4gPiA+ID4gPiArKysrKysrKysrKysrKysrKysrKysrKwo+ID4g PiA+ID4gPiA+ID4gwqDCoCBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0taGVs cGVycy5jwqDCoCB8IDk0Cj4gPiA+ID4gPiA+ID4gPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ ID4gPiA+ID4gPiA+IMKgwqAgZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vbWkwMjgzcXQuY8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCAxICsKPiA+ID4gPiA+ID4gPiA+IMKgwqAgZHJpdmVy cy9ncHUvZHJtL3Rpbnlkcm0vbWlwaS1kYmkuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fCAxICsKPiA+ID4gPiA+ID4gPiA+IMKgwqAgaW5jbHVkZS9kcm0vdGlueWRybS90aW55ZHJtLWJh Y2tsaWdodC5owqDCoMKgwqDCoMKgwqDCoMKgIHwgMTggKysrKwo+ID4gPiA+ID4gPiA+ID4gwqDC oCA2IGZpbGVzIGNoYW5nZWQsIDEyNCBpbnNlcnRpb25zKCspLCA5NSBkZWxldGlvbnMoLSkKPiA+ ID4gPiA+ID4gPiA+IMKgwqAgY3JlYXRlIG1vZGUgMTAwNjQ0Cj4gPiA+ID4gPiA+ID4gPiBkcml2 ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0tYmFja2xpZ2h0LmMKPiA+ID4gPiA+ID4g PiA+IMKgwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvZHJtL3Rpbnlkcm0vdGlueWRybS1i YWNrbGlnaHQuaAo+ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS9NYWtlZmlsZQo+ID4gPiA+ID4gPiA+ID4gYi9k cml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL01ha2VmaWxlCj4gPiA+ID4gPiA+ID4gPiBpbmRl eCBmYjIyMWU2Li4zODljYTdhIDEwMDY0NAo+ID4gPiA+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL3Rpbnlkcm0vY29yZS9NYWtlZmlsZQo+ID4gPiA+ID4gPiA+ID4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL3Rpbnlkcm0vY29yZS9NYWtlZmlsZQo+ID4gPiA+ID4gPiA+ID4gQEAgLTEsMyAr MSwzIEBACj4gPiA+ID4gPiA+ID4gPiAtdGlueWRybS15IDo9IHRpbnlkcm0tY29yZS5vIHRpbnlk cm0tcGlwZS5vIHRpbnlkcm0taGVscGVycy5vCj4gPiA+ID4gPiA+ID4gPiArdGlueWRybS15IDo9 IHRpbnlkcm0tY29yZS5vIHRpbnlkcm0tcGlwZS5vIHRpbnlkcm0tYmFja2xpZ2h0Lm8KPiA+ID4g PiA+ID4gPiA+IHRpbnlkcm0taGVscGVycy5vCj4gPiA+ID4gPiA+ID4gPiDCoMKgIMKgIG9iai0k KENPTkZJR19EUk1fVElOWURSTSkgKz0gdGlueWRybS5vCj4gPiA+ID4gPiA+ID4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWJhY2tsaWdodC5jCj4g PiA+ID4gPiA+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1iYWNr bGlnaHQuYwo+ID4gPiA+ID4gPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gPiA+ID4g PiA+IGluZGV4IDAwMDAwMDAuLmRjNmYxN2QKPiA+ID4gPiA+ID4gPiA+IC0tLSAvZGV2L251bGwK PiA+ID4gPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRy bS1iYWNrbGlnaHQuYwo+ID4gPiA+ID4gPiA+ID4gQEAgLTAsMCArMSwxMDMgQEAKPiA+ID4gPiA+ ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+Cj4gPiA+ID4gPiA+ID4gPiArI2lu Y2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KPiA+ID4gPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgv cG0uaD4KPiA+ID4gPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvc3dhYi5oPgo+ID4gPiA+ID4g PiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gKyNpbmNsdWRlIDxkcm0vdGlueWRybS90aW55ZHJtLmg+ Cj4gPiA+ID4gPiA+ID4gPiArI2luY2x1ZGUgPGRybS90aW55ZHJtL3Rpbnlkcm0tYmFja2xpZ2h0 Lmg+Cj4gPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gPiArLyoqCj4gPiA+ID4gPiA+ID4g PiArICogdGlueWRybV9vZl9maW5kX2JhY2tsaWdodCAtIEZpbmQgYmFja2xpZ2h0IGRldmljZSBp biBkZXZpY2UtdHJlZQo+ID4gPiA+ID4gPiA+ID4gKyAqIEBkZXY6IERldmljZQo+ID4gPiA+ID4g PiA+ID4gKyAqCj4gPiA+ID4gPiA+ID4gPiArICogVGhpcyBmdW5jdGlvbiBsb29rcyBmb3IgYSBE VCBub2RlIHBvaW50ZWQgdG8gYnkgYSBwcm9wZXJ0eSBuYW1lZAo+ID4gPiA+ID4gPiA+ID4gJ2Jh Y2tsaWdodCcKPiA+ID4gPiA+ID4gPiA+ICsgKiBhbmQgdXNlcyBvZl9maW5kX2JhY2tsaWdodF9i eV9ub2RlKCkgdG8gZ2V0IHRoZQo+ID4gPiA+ID4gPiA+ID4gYmFja2xpZ2h0IGRldmljZS4KPiA+ ID4gPiA+ID4gPiA+ICsgKiBBZGRpdGlvbmFsbHkgaWYgdGhlIGJyaWdodG5lc3MgcHJvcGVydHkg aXMgemVybywgaXQgaXMgc2V0IHRvCj4gPiA+ID4gPiA+ID4gPiArICogbWF4X2JyaWdodG5lc3Mu Cj4gPiA+ID4gPiA+ID4gPiArICoKPiA+ID4gPiA+ID4gPiA+ICsgKiBSZXR1cm5zOgo+ID4gPiA+ ID4gPiA+ID4gKyAqIE5VTEwgaWYgdGhlcmUncyBubyBiYWNrbGlnaHQgcHJvcGVydHkuCj4gPiA+ ID4gPiA+ID4gPiArICogRXJyb3IgcG9pbnRlciAtRVBST0JFX0RFRkVSIGlmIHRoZSBEVCBub2Rl IGlzIGZvdW5kLCBidXQgbm8KPiA+ID4gPiA+ID4gPiA+IGJhY2tsaWdodCBkZXZpY2UKPiA+ID4g PiA+ID4gPiA+ICsgKiBpcyBmb3VuZC4KPiA+ID4gPiA+ID4gPiA+ICsgKiBJZiB0aGUgYmFja2xp Z2h0IGRldmljZSBpcyBmb3VuZCwgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgaXMKPiA+ID4g PiA+ID4gPiA+IHJldHVybmVkLgo+ID4gPiA+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gPiA+ID4gK3N0cnVjdCBiYWNrbGlnaHRfZGV2aWNlCj4gPiA+ID4gPiA+ID4g PiAqdGlueWRybV9vZl9maW5kX2JhY2tsaWdodChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPiA+ID4g PiA+ID4gPiArewo+ID4gPiA+ID4gPiA+ID4gK8KgwqDCoCBzdHJ1Y3QgYmFja2xpZ2h0X2Rldmlj ZSAqYmFja2xpZ2h0Owo+ID4gPiA+ID4gPiA+ID4gK8KgwqDCoCBzdHJ1Y3QgZGV2aWNlX25vZGUg Km5wOwo+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gK8KgwqDCoCBucCA9IG9mX3Bh cnNlX3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAiYmFja2xpZ2h0IiwgMCk7Cj4gPiA+ID4gPiA+ID4g PiArwqDCoMKgIGlmICghbnApCj4gPiA+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IE5VTEw7Cj4gPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gPiArwqDCoMKgIGJhY2tsaWdo dCA9IG9mX2ZpbmRfYmFja2xpZ2h0X2J5X25vZGUobnApOwo+ID4gPiA+ID4gPiA+ID4gK8KgwqDC oCBvZl9ub2RlX3B1dChucCk7Cj4gPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gPiArwqDC oMKgIGlmICghYmFja2xpZ2h0KQo+ID4gPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOwo+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ ID4gK8KgwqDCoCBpZiAoIWJhY2tsaWdodC0+cHJvcHMuYnJpZ2h0bmVzcykgewo+ID4gPiA+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgIGJhY2tsaWdodC0+cHJvcHMuYnJpZ2h0bmVzcyA9Cj4gPiA+ ID4gPiA+ID4gPiBiYWNrbGlnaHQtPnByb3BzLm1heF9icmlnaHRuZXNzOwo+ID4gPiA+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgIERSTV9ERUJVR19LTVMoIkJhY2tsaWdodCBicmlnaHRuZXNzIHNl dCB0byAlZFxuIiwKPiA+ID4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGJhY2tsaWdodC0+cHJvcHMuYnJpZ2h0bmVzcyk7Cj4gPiA+ID4gPiA+ID4gPiArwqDC oMKgIH0KPiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiA+ICvCoMKgwqAgcmV0dXJuIGJh Y2tsaWdodDsKPiA+ID4gPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiA+ID4gPiArRVhQT1JUX1NZTUJP TCh0aW55ZHJtX29mX2ZpbmRfYmFja2xpZ2h0KTsKPiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ID4gPiA+ICsvKioKPiA+ID4gPiA+ID4gPiA+ICsgKiB0aW55ZHJtX2VuYWJsZV9iYWNrbGlnaHQg LSBFbmFibGUgYmFja2xpZ2h0IGhlbHBlcgo+ID4gPiA+ID4gPiA+ID4gKyAqIEBiYWNrbGlnaHQ6 IEJhY2tsaWdodCBkZXZpY2UKPiA+ID4gPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gPiA+ID4gKyAq IFJldHVybnM6Cj4gPiA+ID4gPiA+ID4gPiArICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBl cnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gPiA+ID4gPiA+ID4gPiArICovCj4gPiA+ID4gPiA+ID4g PiAraW50IHRpbnlkcm1fZW5hYmxlX2JhY2tsaWdodChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAq YmFja2xpZ2h0KQo+ID4gPiA+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ID4gPiA+ICvCoMKgwqAgdW5z aWduZWQgaW50IG9sZF9zdGF0ZTsKPiA+ID4gPiA+ID4gPiA+ICvCoMKgwqAgaW50IHJldDsKPiA+ ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiA+ICvCoMKgwqAgaWYgKCFiYWNrbGlnaHQpCj4g PiA+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4gPiA+ID4gPiA+ID4gPiAr Cj4gPiA+ID4gPiA+ID4gPiArwqDCoMKgIG9sZF9zdGF0ZSA9IGJhY2tsaWdodC0+cHJvcHMuc3Rh dGU7Cj4gPiA+ID4gPiA+ID4gPiArwqDCoMKgIGJhY2tsaWdodC0+cHJvcHMuc3RhdGUgJj0gfkJM X0NPUkVfRkJCTEFOSzsKPiA+ID4gPiA+ID4gPiA+ICvCoMKgwqAgRFJNX0RFQlVHX0tNUygiQmFj a2xpZ2h0IHN0YXRlOiAweCV4IC0+IDB4JXhcbiIsIG9sZF9zdGF0ZSwKPiA+ID4gPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYWNrbGlnaHQtPnByb3BzLnN0YXRlKTsKPiA+ ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiA+ICvCoMKgwqAgcmV0ID0gYmFja2xpZ2h0X3Vw ZGF0ZV9zdGF0dXMoYmFja2xpZ2h0KTsKPiA+ID4gPiA+ID4gPiA+ICvCoMKgwqAgaWYgKHJldCkK PiA+ID4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoIkZhaWxlZCB0byBlbmFi bGUgYmFja2xpZ2h0ICVkXG4iLCByZXQpOwo+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ ID4gK8KgwqDCoCByZXR1cm4gcmV0Owo+ID4gPiA+ID4gPiA+ID4gK30KPiA+ID4gPiA+ID4gPiA+ ICtFWFBPUlRfU1lNQk9MKHRpbnlkcm1fZW5hYmxlX2JhY2tsaWdodCk7Cj4gPiA+ID4gPiA+ID4g PiArCj4gPiA+ID4gPiA+ID4gPiArLyoqCj4gPiA+ID4gPiA+ID4gPiArICogdGlueWRybV9kaXNh YmxlX2JhY2tsaWdodCAtIERpc2FibGUgYmFja2xpZ2h0IGhlbHBlcgo+ID4gPiA+ID4gPiA+ID4g KyAqIEBiYWNrbGlnaHQ6IEJhY2tsaWdodCBkZXZpY2UKPiA+ID4gPiA+ID4gPiA+ICsgKgo+ID4g PiA+ID4gPiA+ID4gKyAqIFJldHVybnM6Cj4gPiA+ID4gPiA+ID4gPiArICogWmVybyBvbiBzdWNj ZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gPiA+ID4gPiA+ID4gPiArICov Cj4gPiA+ID4gPiA+ID4gPiAraW50IHRpbnlkcm1fZGlzYWJsZV9iYWNrbGlnaHQoc3RydWN0IGJh Y2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodCkKPiA+ID4gPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiA+ ID4gPiArwqDCoMKgIHVuc2lnbmVkIGludCBvbGRfc3RhdGU7Cj4gPiA+ID4gPiA+ID4gPiArwqDC oMKgIGludCByZXQ7Cj4gPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gPiArwqDCoMKgIGlm ICghYmFja2xpZ2h0KQo+ID4gPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+ ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gK8KgwqDCoCBvbGRfc3RhdGUgPSBiYWNr bGlnaHQtPnByb3BzLnN0YXRlOwo+ID4gPiA+ID4gPiA+ID4gK8KgwqDCoCBiYWNrbGlnaHQtPnBy b3BzLnN0YXRlIHw9IEJMX0NPUkVfRkJCTEFOSzsKPiA+ID4gPiA+ID4gPiA+ICvCoMKgwqAgRFJN X0RFQlVHX0tNUygiQmFja2xpZ2h0IHN0YXRlOiAweCV4IC0+IDB4JXhcbiIsIG9sZF9zdGF0ZSwK PiA+ID4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYWNrbGlnaHQtPnBy b3BzLnN0YXRlKTsKPiA+ID4gPiA+ID4gPiA+ICvCoMKgwqAgcmV0ID0gYmFja2xpZ2h0X3VwZGF0 ZV9zdGF0dXMoYmFja2xpZ2h0KTsKPiA+ID4gPiA+ID4gPiA+ICvCoMKgwqAgaWYgKHJldCkKPiA+ ID4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoIkZhaWxlZCB0byBkaXNhYmxl IGJhY2tsaWdodCAlZFxuIiwgcmV0KTsKPiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiA+ ICvCoMKgwqAgcmV0dXJuIHJldDsKPiA+ID4gPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiA+ID4gPiAr RVhQT1JUX1NZTUJPTCh0aW55ZHJtX2Rpc2FibGVfYmFja2xpZ2h0KTsKPiA+ID4gPiA+ID4gPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0taGVscGVy cy5jCj4gPiA+ID4gPiA+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRy bS1oZWxwZXJzLmMKPiA+ID4gPiA+ID4gPiA+IGluZGV4IGJkNmNjZTAuLmVlOGFkOGMgMTAwNjQ0 Cj4gPiA+ID4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlk cm0taGVscGVycy5jCj4gPiA+ID4gPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlueWRy bS9jb3JlL3Rpbnlkcm0taGVscGVycy5jCj4gPiA+ID4gPiA+ID4gPiBAQCAtMjM2LDEwMCArMjM2 LDYgQEAgdm9pZCB0aW55ZHJtX3hyZ2I4ODg4X3RvX2dyYXk4KHU4ICpkc3QsIHZvaWQKPiA+ID4g PiA+ID4gPiA+ICp2YWRkciwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gPiA+ID4gPiA+ ID4gPiDCoMKgIH0KPiA+ID4gPiA+ID4gPiA+IMKgwqAgRVhQT1JUX1NZTUJPTCh0aW55ZHJtX3hy Z2I4ODg4X3RvX2dyYXk4KTsKPiA+ID4gPiA+ID4gPiA+IMKgwqAgLS8qKgo+ID4gPiA+ID4gPiA+ ID4gLSAqIHRpbnlkcm1fb2ZfZmluZF9iYWNrbGlnaHQgLSBGaW5kIGJhY2tsaWdodCBkZXZpY2Ug aW4gZGV2aWNlLXRyZWUKPiA+ID4gPiA+ID4gPiA+IC0gKiBAZGV2OiBEZXZpY2UKPiA+ID4gPiA+ ID4gPiA+IC0gKgo+ID4gPiA+ID4gPiA+ID4gLSAqIFRoaXMgZnVuY3Rpb24gbG9va3MgZm9yIGEg RFQgbm9kZSBwb2ludGVkIHRvIGJ5IGEgcHJvcGVydHkgbmFtZWQKPiA+ID4gPiA+ID4gPiA+ICdi YWNrbGlnaHQnCj4gPiA+ID4gPiA+ID4gPiAtICogYW5kIHVzZXMgb2ZfZmluZF9iYWNrbGlnaHRf Ynlfbm9kZSgpIHRvIGdldCB0aGUKPiA+ID4gPiA+ID4gPiA+IGJhY2tsaWdodCBkZXZpY2UuCj4g PiA+ID4gPiA+ID4gPiAtICogQWRkaXRpb25hbGx5IGlmIHRoZSBicmlnaHRuZXNzIHByb3BlcnR5 IGlzIHplcm8sIGl0IGlzIHNldCB0bwo+ID4gPiA+ID4gPiA+ID4gLSAqIG1heF9icmlnaHRuZXNz Lgo+ID4gPiA+ID4gPiA+ID4gLSAqCj4gPiA+ID4gPiA+ID4gPiAtICogUmV0dXJuczoKPiA+ID4g PiA+ID4gPiA+IC0gKiBOVUxMIGlmIHRoZXJlJ3Mgbm8gYmFja2xpZ2h0IHByb3BlcnR5Lgo+ID4g PiA+ID4gPiA+ID4gLSAqIEVycm9yIHBvaW50ZXIgLUVQUk9CRV9ERUZFUiBpZiB0aGUgRFQgbm9k ZSBpcyBmb3VuZCwgYnV0IG5vCj4gPiA+ID4gPiA+ID4gPiBiYWNrbGlnaHQgZGV2aWNlCj4gPiA+ ID4gPiA+ID4gPiAtICogaXMgZm91bmQuCj4gPiA+ID4gPiA+ID4gPiAtICogSWYgdGhlIGJhY2ts aWdodCBkZXZpY2UgaXMgZm91bmQsIGEgcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIGlzCj4gPiA+ ID4gPiA+ID4gPiByZXR1cm5lZC4KPiA+ID4gPiA+ID4gPiA+IC0gKi8KPiA+ID4gPiA+ID4gPiA+ IC1zdHJ1Y3QgYmFja2xpZ2h0X2RldmljZQo+ID4gPiA+ID4gPiA+ID4gKnRpbnlkcm1fb2ZfZmlu ZF9iYWNrbGlnaHQoc3RydWN0IGRldmljZSAqZGV2KQo+ID4gPiA+ID4gPiA+ID4gLXsKPiA+ID4g PiA+ID4gPiA+IC3CoMKgwqAgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodDsKPiA+ ID4gPiA+ID4gPiA+IC3CoMKgwqAgc3RydWN0IGRldmljZV9ub2RlICpucDsKPiA+ID4gPiA+ID4g PiA+IC0KPiA+ID4gPiA+ID4gPiA+IC3CoMKgwqAgbnAgPSBvZl9wYXJzZV9waGFuZGxlKGRldi0+ b2Zfbm9kZSwgImJhY2tsaWdodCIsIDApOwo+ID4gPiA+ID4gPiA+ID4gLcKgwqDCoCBpZiAoIW5w KQo+ID4gPiA+ID4gPiA+ID4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOwo+ID4gPiA+ID4g PiA+ID4gLQo+ID4gPiA+ID4gPiA+ID4gLcKgwqDCoCBiYWNrbGlnaHQgPSBvZl9maW5kX2JhY2ts aWdodF9ieV9ub2RlKG5wKTsKPiA+ID4gPiA+ID4gPiA+IC3CoMKgwqAgb2Zfbm9kZV9wdXQobnAp Owo+ID4gPiA+ID4gPiA+ID4gLQo+ID4gPiA+ID4gPiA+ID4gLcKgwqDCoCBpZiAoIWJhY2tsaWdo dCkKPiA+ID4gPiA+ID4gPiA+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BUUigtRVBST0JF X0RFRkVSKTsKPiA+ID4gPiA+ID4gPiA+IC0KPiA+ID4gPiA+ID4gPiA+IC3CoMKgwqAgaWYgKCFi YWNrbGlnaHQtPnByb3BzLmJyaWdodG5lc3MpIHsKPiA+ID4gPiA+ID4gPiA+IC3CoMKgwqDCoMKg wqDCoCBiYWNrbGlnaHQtPnByb3BzLmJyaWdodG5lc3MgPQo+ID4gPiA+ID4gPiA+ID4gYmFja2xp Z2h0LT5wcm9wcy5tYXhfYnJpZ2h0bmVzczsKPiA+ID4gPiA+ID4gPiA+IC3CoMKgwqDCoMKgwqDC oCBEUk1fREVCVUdfS01TKCJCYWNrbGlnaHQgYnJpZ2h0bmVzcyBzZXQgdG8gJWRcbiIsCj4gPiA+ ID4gPiA+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYWNrbGlnaHQt PnByb3BzLmJyaWdodG5lc3MpOwo+ID4gPiA+ID4gPiA+ID4gLcKgwqDCoCB9Cj4gPiA+ID4gPiA+ ID4gPiAtCj4gPiA+ID4gPiA+ID4gPiAtwqDCoMKgIHJldHVybiBiYWNrbGlnaHQ7Cj4gPiA+ID4g PiA+ID4gPiAtfQo+ID4gPiA+ID4gPiA+ID4gLUVYUE9SVF9TWU1CT0wodGlueWRybV9vZl9maW5k X2JhY2tsaWdodCk7Cj4gPiA+ID4gPiA+ID4gPiAtCj4gPiA+ID4gPiA+ID4gPiAtLyoqCj4gPiA+ ID4gPiA+ID4gPiAtICogdGlueWRybV9lbmFibGVfYmFja2xpZ2h0IC0gRW5hYmxlIGJhY2tsaWdo dCBoZWxwZXIKPiA+ID4gPiA+ID4gPiA+IC0gKiBAYmFja2xpZ2h0OiBCYWNrbGlnaHQgZGV2aWNl Cj4gPiA+ID4gPiA+ID4gPiAtICoKPiA+ID4gPiA+ID4gPiA+IC0gKiBSZXR1cm5zOgo+ID4gPiA+ ID4gPiA+ID4gLSAqIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWls dXJlLgo+ID4gPiA+ID4gPiA+ID4gLSAqLwo+ID4gPiA+ID4gPiA+ID4gLWludCB0aW55ZHJtX2Vu YWJsZV9iYWNrbGlnaHQoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodCkKPiA+ID4g PiA+ID4gPiA+IC17Cj4gPiA+ID4gPiA+ID4gPiAtwqDCoMKgIHVuc2lnbmVkIGludCBvbGRfc3Rh dGU7Cj4gPiA+ID4gPiA+ID4gPiAtwqDCoMKgIGludCByZXQ7Cj4gPiA+ID4gPiA+ID4gPiAtCj4g PiA+ID4gPiA+ID4gPiAtwqDCoMKgIGlmICghYmFja2xpZ2h0KQo+ID4gPiA+ID4gPiA+ID4gLcKg wqDCoMKgwqDCoMKgIHJldHVybiAwOwo+ID4gPiA+ID4gPiA+ID4gLQo+ID4gPiA+ID4gPiA+ID4g LcKgwqDCoCBvbGRfc3RhdGUgPSBiYWNrbGlnaHQtPnByb3BzLnN0YXRlOwo+ID4gPiA+ID4gPiA+ ID4gLcKgwqDCoCBiYWNrbGlnaHQtPnByb3BzLnN0YXRlICY9IH5CTF9DT1JFX0ZCQkxBTks7Cj4g PiA+ID4gPiA+ID4gPiAtwqDCoMKgIERSTV9ERUJVR19LTVMoIkJhY2tsaWdodCBzdGF0ZTogMHgl eCAtPiAweCV4XG4iLCBvbGRfc3RhdGUsCj4gPiA+ID4gPiA+ID4gPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYmFja2xpZ2h0LT5wcm9wcy5zdGF0ZSk7Cj4gPiA+ID4gPiA+ID4gPiAtCj4g PiA+ID4gPiA+ID4gPiAtwqDCoMKgIHJldCA9IGJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGJhY2ts aWdodCk7Cj4gPiA+ID4gPiA+ID4gPiAtwqDCoMKgIGlmIChyZXQpCj4gPiA+ID4gPiA+ID4gPiAt wqDCoMKgwqDCoMKgwqAgRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIGJhY2tsaWdodCAlZFxu IiwgcmV0KTsKPiA+ID4gPiA+ID4gPiA+IC0KPiA+ID4gPiA+ID4gPiA+IC3CoMKgwqAgcmV0dXJu IHJldDsKPiA+ID4gPiA+ID4gPiA+IC19Cj4gPiA+ID4gPiA+ID4gPiAtRVhQT1JUX1NZTUJPTCh0 aW55ZHJtX2VuYWJsZV9iYWNrbGlnaHQpOwo+ID4gPiA+ID4gPiA+ID4gLQo+ID4gPiA+ID4gPiA+ ID4gLS8qKgo+ID4gPiA+ID4gPiA+ID4gLSAqIHRpbnlkcm1fZGlzYWJsZV9iYWNrbGlnaHQgLSBE aXNhYmxlIGJhY2tsaWdodCBoZWxwZXIKPiA+ID4gPiA+ID4gPiA+IC0gKiBAYmFja2xpZ2h0OiBC YWNrbGlnaHQgZGV2aWNlCj4gPiA+ID4gPiA+ID4gPiAtICoKPiA+ID4gPiA+ID4gPiA+IC0gKiBS ZXR1cm5zOgo+ID4gPiA+ID4gPiA+ID4gLSAqIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgZXJy b3IgY29kZSBvbiBmYWlsdXJlLgo+ID4gPiA+ID4gPiA+ID4gLSAqLwo+ID4gPiA+ID4gPiA+ID4g LWludCB0aW55ZHJtX2Rpc2FibGVfYmFja2xpZ2h0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpi YWNrbGlnaHQpCj4gPiA+ID4gPiA+ID4gPiAtewo+ID4gPiA+ID4gPiA+ID4gLcKgwqDCoCB1bnNp Z25lZCBpbnQgb2xkX3N0YXRlOwo+ID4gPiA+ID4gPiA+ID4gLcKgwqDCoCBpbnQgcmV0Owo+ID4g PiA+ID4gPiA+ID4gLQo+ID4gPiA+ID4gPiA+ID4gLcKgwqDCoCBpZiAoIWJhY2tsaWdodCkKPiA+ ID4gPiA+ID4gPiA+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPiA+ID4gPiA+ID4gPiA+IC0K PiA+ID4gPiA+ID4gPiA+IC3CoMKgwqAgb2xkX3N0YXRlID0gYmFja2xpZ2h0LT5wcm9wcy5zdGF0 ZTsKPiA+ID4gPiA+ID4gPiA+IC3CoMKgwqAgYmFja2xpZ2h0LT5wcm9wcy5zdGF0ZSB8PSBCTF9D T1JFX0ZCQkxBTks7Cj4gPiA+ID4gPiA+ID4gPiAtwqDCoMKgIERSTV9ERUJVR19LTVMoIkJhY2ts aWdodCBzdGF0ZTogMHgleCAtPiAweCV4XG4iLCBvbGRfc3RhdGUsCj4gPiA+ID4gPiA+ID4gPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmFja2xpZ2h0LT5wcm9wcy5zdGF0ZSk7Cj4gPiA+ ID4gPiA+ID4gPiAtwqDCoMKgIHJldCA9IGJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGJhY2tsaWdo dCk7Cj4gPiA+ID4gPiA+ID4gPiAtwqDCoMKgIGlmIChyZXQpCj4gPiA+ID4gPiA+ID4gPiAtwqDC oMKgwqDCoMKgwqAgRFJNX0VSUk9SKCJGYWlsZWQgdG8gZGlzYWJsZSBiYWNrbGlnaHQgJWRcbiIs IHJldCk7Cj4gPiA+ID4gPiA+ID4gPiAtCj4gPiA+ID4gPiA+ID4gPiAtwqDCoMKgIHJldHVybiBy ZXQ7Cj4gPiA+ID4gPiA+ID4gPiAtfQo+ID4gPiA+ID4gPiA+ID4gLUVYUE9SVF9TWU1CT0wodGlu eWRybV9kaXNhYmxlX2JhY2tsaWdodCk7Cj4gPiA+ID4gPiA+ID4gPiDCoMKgIMKgICNpZiBJU19F TkFCTEVEKENPTkZJR19TUEkpCj4gPiA+ID4gPiA+ID4gPiDCoMKgIGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vdGlueWRybS9taTAyODNxdC5jCj4gPiA+ID4gPiA+ID4gPiBiL2RyaXZlcnMv Z3B1L2RybS90aW55ZHJtL21pMDI4M3F0LmMKPiA+ID4gPiA+ID4gPiA+IGluZGV4IDdlNWJiN2Qu LmMxNjFkNDUgMTAwNjQ0Cj4gPiA+ID4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGlu eWRybS9taTAyODNxdC5jCj4gPiA+ID4gPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlu eWRybS9taTAyODNxdC5jCj4gPiA+ID4gPiA+ID4gPiBAQCAtMTIsNiArMTIsNyBAQAo+ID4gPiA+ ID4gPiA+ID4gwqDCoCAjaW5jbHVkZSA8ZHJtL3Rpbnlkcm0vaWxpOTM0MS5oPgo+ID4gPiA+ID4g PiA+ID4gwqDCoCAjaW5jbHVkZSA8ZHJtL3Rpbnlkcm0vbWlwaS1kYmkuaD4KPiA+ID4gPiA+ID4g PiA+IMKgwqAgI2luY2x1ZGUgPGRybS90aW55ZHJtL3Rpbnlkcm0taGVscGVycy5oPgo+ID4gPiA+ ID4gPiA+ID4gKyNpbmNsdWRlIDxkcm0vdGlueWRybS90aW55ZHJtLWJhY2tsaWdodC5oPgo+ID4g PiA+ID4gPiA+ID4gwqDCoCAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiA+ID4gPiA+ID4gPiA+ IMKgwqAgI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KPiA+ID4gPiA+ID4gPiA+IMKg wqAgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4gPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL21pcGktZGJpLmMKPiA+ID4gPiA+ID4gPiA+IGIvZHJp dmVycy9ncHUvZHJtL3Rpbnlkcm0vbWlwaS1kYmkuYwo+ID4gPiA+ID4gPiA+ID4gaW5kZXggMmNh ZWFiYy4uZGM4NGYyNiAxMDA2NDQKPiA+ID4gPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS90aW55ZHJtL21pcGktZGJpLmMKPiA+ID4gPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS90aW55ZHJtL21pcGktZGJpLmMKPiA+ID4gPiA+ID4gPiA+IEBAIC0xMSw2ICsxMSw3IEBACj4g PiA+ID4gPiA+ID4gPiDCoMKgIMKgICNpbmNsdWRlIDxkcm0vdGlueWRybS9taXBpLWRiaS5oPgo+ ID4gPiA+ID4gPiA+ID4gwqDCoCAjaW5jbHVkZSA8ZHJtL3Rpbnlkcm0vdGlueWRybS1oZWxwZXJz Lmg+Cj4gPiA+ID4gPiA+ID4gPiArI2luY2x1ZGUgPGRybS90aW55ZHJtL3Rpbnlkcm0tYmFja2xp Z2h0Lmg+Cj4gPiA+ID4gPiA+ID4gPiDCoMKgICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Cj4g PiA+ID4gPiA+ID4gPiDCoMKgICNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+Cj4gPiA+ID4gPiA+ ID4gPiDCoMKgICNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+Cj4gPiA+ID4gPiA+ID4g PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vdGlueWRybS90aW55ZHJtLWJhY2tsaWdodC5oCj4g PiA+ID4gPiA+ID4gPiBiL2luY2x1ZGUvZHJtL3Rpbnlkcm0vdGlueWRybS1iYWNrbGlnaHQuaAo+ ID4gPiA+ID4gPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gPiA+ID4gPiA+IGluZGV4 IDAwMDAwMDAuLjZhN2I2ZDUKPiA+ID4gPiA+ID4gPiA+IC0tLSAvZGV2L251bGwKPiA+ID4gPiA+ ID4gPiA+ICsrKyBiL2luY2x1ZGUvZHJtL3Rpbnlkcm0vdGlueWRybS1iYWNrbGlnaHQuaAo+ID4g PiA+ID4gPiA+ID4gQEAgLTAsMCArMSwxOCBAQAo+ID4gPiA+ID4gPiA+ID4gKy8qCj4gPiA+ID4g PiA+ID4gPiArICogQ29weXJpZ2h0IChDKSAyMDE2IE5vcmFsZiBUcsO4bm5lcwo+ID4gPiA+ID4g PiA+ID4gKyAqCj4gPiA+ID4gPiA+ID4gPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4KPiA+ID4gPiA+ID4gPiA+IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 Cj4gPiA+ID4gPiA+ID4gPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMKPiA+ID4gPiA+ID4gPiA+IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gPiA+ID4g PiA+ID4gPiArICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g Mgo+ID4gPiA+ID4gPiA+ID4gb2YgdGhlIExpY2Vuc2UsIG9yCj4gPiA+ID4gPiA+ID4gPiArICog KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiA+ID4gPiA+ID4gPiA+ICsgKi8K PiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiA+ICsjaWZuZGVmIF9fTElOVVhfVElOWURS TV9CQUNLTElHSFRfSAo+ID4gPiA+ID4gPiA+ID4gKyNkZWZpbmUgX19MSU5VWF9USU5ZRFJNX0JB Q0tMSUdIVF9ICj4gPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gPiArc3RydWN0IGJhY2ts aWdodF9kZXZpY2U7Cj4gPiA+ID4gPiA+ID4gPiArc3RydWN0IGJhY2tsaWdodF9kZXZpY2UKPiA+ ID4gPiA+ID4gPiA+ICp0aW55ZHJtX29mX2ZpbmRfYmFja2xpZ2h0KHN0cnVjdCBkZXZpY2UgKmRl dik7Cj4gPiA+ID4gPiA+ID4gPiAraW50IHRpbnlkcm1fZW5hYmxlX2JhY2tsaWdodChzdHJ1Y3Qg YmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0KTsKPiA+ID4gPiA+ID4gPiA+ICtpbnQgdGlueWRy bV9kaXNhYmxlX2JhY2tsaWdodChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0KTsK PiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiA+ICsjZW5kaWYgLyogX19MSU5VWF9USU5Z RFJNX0JBQ0tMSUdIVF9IICovCj4gPiA+ID4gPiA+ID4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiA+ID4gPiA+ID4gPiBkcmktZGV2ZWwgbWFpbGluZyBs aXN0Cj4gPiA+ID4gPiA+ID4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gPiA+ ID4gPiA+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJp LWRldmVsCj4gPiA+ID4gPiA+ID4gCj4gPiA+IAo+ID4gPiBfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4gPiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4g PiA+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiA+ID4gaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKPiA+ID4gCj4gPiAKPiAK PiAtLSAKPiBEYW5pZWwgVmV0dGVyCj4gU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0 aW9uCj4gaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6468555141619384320 X-Received: by 10.99.126.23 with SMTP id z23mr336459pgc.74.1506510561843; Wed, 27 Sep 2017 04:09:21 -0700 (PDT) X-BeenThere: outreachy-kernel@googlegroups.com Received: by 10.99.98.3 with SMTP id w3ls405949pgb.8.gmail; Wed, 27 Sep 2017 04:09:20 -0700 (PDT) X-Received: by 10.101.83.9 with SMTP id m9mr324345pgq.52.1506510560883; Wed, 27 Sep 2017 04:09:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1506510560; cv=none; d=google.com; s=arc-20160816; b=JmubONaRaIK0Sm+sm4XogTYLObQli9C+kvWZAwQsOfOUyu8yHwFta61/ip7k1XebiH 0HamI6/GvoaIH2ZjatWhNqAaOAmsU/z9bZHqVOY8ulDRTx6LldS47B2ZVhtxn4EMAjYf TXt3z1sZjtliB9lYgpXqozg640mok4l0UQKlToiyq7xWq+IIqgMVFHLLgyUQrgrZXlmr MW3W1s5Yeb4HPi59ORmBFJGY7gL1jrQFo6k01/KXOxa/R7Pdzd7U5uETFtO8gsEDKANN CjRsII7ulzP56W39F2MZAjDij+3OBHTTsplj5Vxur/xf3LW/gSo9rkZPf+W6VoeOWF9H zVhA== 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:to :from:date:dkim-signature:arc-authentication-results; bh=yu8W9PCwOnmiLOLPJNr00/j5nmIwR36xQPgH1sP9S/Y=; b=b/i6tLQm54w7S1ryRXJxamRH0J7LaGrBjPA6k5ZtYlzp+Ej0/mocmnV8dhI57Y/Nh8 /nqBLCP5kglt8WsAJZcty+BEXEJPAR6xVDY8/Ewdb4iXBDIrLhe+12U8y4hGfxLxCEom VlT1FqYlj+rOxs7OXnR6oQDvPWDS1AzDngu2TzGg4f6l017C4aPx58icvbqNKLbQ78Zs 7RQsRbYIZjsqP/wQbzkYMZA9R96DKbEJN7xYg3OBoXNFfZkqQdzkLP8Lsr3mXOkMnChJ rKCZcf94gQuRnm8nQn2VSdMIbiH4tPzYbl1bWm1uiG5i0Fm2nKSg9ccFIyQztUPgRxeB 53Yg== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=XukeWtLB; spf=pass (google.com: domain of meghana.madhyastha@gmail.com designates 2607:f8b0:400e:c05::243 as permitted sender) smtp.mailfrom=meghana.madhyastha@gmail.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from mail-pg0-x243.google.com (mail-pg0-x243.google.com. [2607:f8b0:400e:c05::243]) by gmr-mx.google.com with ESMTPS id e2si912316pfm.12.2017.09.27.04.09.20 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 27 Sep 2017 04:09:20 -0700 (PDT) Received-SPF: pass (google.com: domain of meghana.madhyastha@gmail.com designates 2607:f8b0:400e:c05::243 as permitted sender) client-ip=2607:f8b0:400e:c05::243; Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=XukeWtLB; spf=pass (google.com: domain of meghana.madhyastha@gmail.com designates 2607:f8b0:400e:c05::243 as permitted sender) smtp.mailfrom=meghana.madhyastha@gmail.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: by mail-pg0-x243.google.com with SMTP id d8so8862170pgt.3 for ; Wed, 27 Sep 2017 04:09:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=yu8W9PCwOnmiLOLPJNr00/j5nmIwR36xQPgH1sP9S/Y=; b=XukeWtLBHNBQ/plihxZuh9SArEFlnZrXBtRjwkd5n3wAUJu7MqD8KuPS/yg85zOSHu J/5N8HfSVjgO+ukLL6k6pdRmYahz7m0SgUT7644HMOzkusjQtG920Nkqx5HHhRkgU7PJ S+BlGfBQOj4HspHqKjHlQzoKBzs0eNT4dBLpJhtLeOpmCiga4vSPnkO4P4CGaJQIYUdi 3Ohv8TYqjU5fZXVdXw/CMvQ76d0CTEX17tKxpnt2Qm19iRrYFq30kuG4fc/mIZUgA6+B NdP8KSd8xfvLG5Mj83sxMBiPgFZBz9VjXf3j0WJ58RkVvmdDZgXX+icmXykCyFpBQxoF S2eA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=yu8W9PCwOnmiLOLPJNr00/j5nmIwR36xQPgH1sP9S/Y=; b=hJ7exEqRjlPWf6V/51UKOn3fX/MqVhU8wFVMeYiWkPPZ/JzmySybxcddtohZOf3EXJ pqiX56GOKXhSsR/u4aTNsz6HsFfdp/xzjQ5ASSW9fUUDRZ+b7O2NQtXX7sPz4MGY5oBy ZYY2UrqrHvTtob5mBr0xIXSOaFGmGiwaLgzsz/ika7hJBC76MayA3frnU47SKjdoE3aI AZ5LYU0Y/HGMR1uvakjFzMZOKb/xOwRozbbCE/dBfOMloWXfzgsmJ86CtzPws8eHgH1q yoUacjDnNfaB7Eerb0jWZUrEngIixtPuC5lVGSdl/ekI5/GW0fXNjoPtcxgMqjV9h70w HJHw== X-Gm-Message-State: AHPjjUgMokKj1RI6DLgP7Qy+7fudqsSIasvyTJqB3+WRs+5/3HkCNYWp 3njxltzwQqUhwn+dX/gYHoE= X-Google-Smtp-Source: AOwi7QBtQiBbKXv4ig5x7ChtQxGTKz6WsnbA1ycIAqUw1ivklO4NzNNbZ7SdJWViFYv44n/7roBuDA== X-Received: by 10.99.126.23 with SMTP id z23mr997949pgc.156.1506510560300; Wed, 27 Sep 2017 04:09:20 -0700 (PDT) Return-Path: Received: from meghana-HP-Pavilion-Notebook ([122.171.83.22]) by smtp.gmail.com with ESMTPSA id d69sm19710180pfl.50.2017.09.27.04.09.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 27 Sep 2017 04:09:19 -0700 (PDT) Date: Wed, 27 Sep 2017 16:39:12 +0530 From: Meghana Madhyastha To: Daniel Vetter , dri-devel@lists.freedesktop.org, outreachy-kernel@googlegroups.com, Noralf =?iso-8859-1?Q?Tr=F8nnes?= Subject: Re: [PATCH v2] drm/tinydrm: Move backlight helpers to a separate file Message-ID: <20170927110909.GB30441@meghana-HP-Pavilion-Notebook> 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> <015cae83-661d-5732-3f42-ba6fc1bb9264@tronnes.org> <20170927084915.po4xokepe2pboebk@phenom.ffwll.local> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20170927084915.po4xokepe2pboebk@phenom.ffwll.local> User-Agent: Mutt/1.5.24 (2015-08-30) On Wed, Sep 27, 2017 at 10:49:15AM +0200, Daniel Vetter wrote: > On Tue, Sep 26, 2017 at 03:53:33PM +0200, Noralf Trønnes wrote: > > > > 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. > > Oh dear, sounds like we have an all around mess, and the real job is a lot > bigger than the todo. > > Meghana, I think this isn't really a good idea for an application period > task, but it might be something we could make into an entire internship > even. Okay, that makes sense and I agree. > But since there's some good discussions and findings here already, can you > pls do a patch to todo.rst, with a link to this discussion from the web > archive and a short summary? Please make sure it renders correctly when > building the docs with Sure, I have sent a patch. Thanks for all the suggestions. > $ make htmldocs > > Thanks, Daniel > > > 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 > > > > > > > -- > Daniel Vetter > Software Engineer, Intel Corporation > http://blog.ffwll.ch