From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH] backlight: Avoid double fbcon backlight handling Date: Thu, 04 Aug 2016 12:02:23 +0300 Message-ID: <87a8gsq540.fsf@intel.com> References: <1467286256-8870-1-git-send-email-chris@chris-wilson.co.uk> <20160712122119.GR23520@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20160712122119.GR23520@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter , Chris Wilson Cc: Milo Kim , Krzysztof Kozlowski , David Airlie , nouveau@lists.freedesktop.org, Jon Nettleton , Nicolas Ferre , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, Thierry Reding , Paul Mackerras , Laurent Pinchart , Daniel Vetter , Lee Jones , Daniel Drake , Jens Frederich , linux-acpi@vger.kernel.org, Bruno =?utf-8?Q?Pr=C3=A9mont?= , Tomi Valkeinen , Ben Skeggs , Zhang Rui , Jean-Christophe Plagniol-Villard , Michael Hennerich , intel-gfx@lists.fre List-Id: linux-acpi@vger.kernel.org T24gVHVlLCAxMiBKdWwgMjAxNiwgRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPiB3cm90 ZToKPiBPbiBUaHUsIEp1biAzMCwgMjAxNiBhdCAxMjozMDo1NlBNICswMTAwLCBDaHJpcyBXaWxz b24gd3JvdGU6Cj4+IEJhY2tsaWdodHMgY29udHJvbGxlZCBieSBpOTE1LmtvIGFuZCBvbmx5IGFz c29jaWF0ZWQgd2l0aCBpdHMgY29ubmVjdG9ycwo+PiBhbmQgYWxzbyBvbmx5IGFzc29jaWF0ZWQg d2l0aCB0aGUgaW50ZWxfZHJtZmIgZmJjb24sIGNvbnRyb2xsZWQgYnkKPj4gaTkxNS5rby4gSW4g dGhpcyBzaXR1YXRpb24sIHdlIGFscmVhZHkgaGFuZGxlIGFkanVzdGluZyB0aGUgYmFja2xpZ2h0 Cj4+IHdoZW4gdGhlIGZiY29uIGlzIGJsYW5rZWQvdW5ibGFua2VkIGFuZCBkbyBub3QgcmVxdWly ZSBiYWNrbGlnaHQgdHJ5aW5nCj4+IHRvIGRvIHRoZSBzYW1lLgo+PiAKPj4gQXR0ZW1wdGluZyB0 byByZWdpc3RlciB3aXRoIHRoZSBmYmRldiBhcyBhIGNsaWVudCBjYXVzZXMgbG9ja2RlcCB0byB3 YXJuCj4+IGFib3V0IGEgZGVwZW5kZW5jeSBjeWNsZToKPgo+IFRoZSBmYmRldiBub3RpZmllciBz dHJpa2VzIGFnYWluIQo+Cj4gTGFzdCB0aW1lIEkgbG9va2VkIGludG8gdGhpcyBJIHRoaW5rIHRo ZSBwcm9wZXIgc29sdXRpb24gd291bGQgYmUgdG8gc3BsaXQKPiB0aGUgYmFja2xpZ2h0IHBhcnQg ZnJvbSB0aGUgb3RoZXIgZmJkZXYgbm90aWZpZXIgKHdoaWNoIGlzIHVzZWQgYnkgZmJjb24KPiBm b3IgcmVhY3RpbmcgdG8gZmJkZXYgZGV2aWNlIHJlZy91bnJlZyBldmVudHMpLgo+Cj4gSSB0aGlu ayB0aGF0IHdvdWxkIGZpeCB0aGlzIHRvbywgd2l0aCB0aGUgYWRkZWQgYm9udXMgb2Ygc2xpZ2h0 bHkKPiB1bnRhbmdsaW5nIHRoZSBmYmNvbiBsb2NraW5nIG1lc3MuIEFuZCBpdCdzIGFsc28gdGhl IG9uZSBwYXJ0IG9mCj4gdW50YW5nbGluZyB0aGlzIG1lc3Mgd2hpY2ggc2hvdWxkIGJlIHBvc3Np YmxlIHdpdGhvdXQgYW55IHRyb3VibGUgLSBJJ3ZlCj4gc2ltcGx5IG5ldmVyIGRvbmUgaXQgc2lu Y2UgZW50aXJlbHkgZ2V0dGluZyByaWQgb2YgdGhlIGZiZGV2IG5vdGlmaWVyIGZvcgo+IGZiY29u IGlzIGEgbG90IG1vcmUgd29yay4KClNvIHdoYXQgZG8gd2UgZG8gd2l0aCB0aGlzPyBJdCBmaXhl cyBhIHByb2JsZW0gdXBzdHJlYW0uIFRoZXJlJ3Mgbm8KRml4ZXM6IHRvIGlkZW50aWZ5IHRoZSBi YWQgY29tbWl0LiBBbnkgaWRlYSBvbiB0aGF0PyBJdCdzIGVpdGhlciB0aGlzIG9yCndlIGRpZyBv dXQgdGhlIGJhZCBjb21taXQgKENocmlzIHByb2JhYmx5IGtub3dzIHdoaWNoIG9uZT8pIGFuZCBy ZXZlcnQuCgpCUiwKSmFuaS4KCgo+IC1EYW5pZWwKPgo+PiAKPj4gWyAgIDE4Ljk4Mzc2M10gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4+IFsg ICAxOC45ODM3NjNdIFsgSU5GTzogcG9zc2libGUgY2lyY3VsYXIgbG9ja2luZyBkZXBlbmRlbmN5 IGRldGVjdGVkIF0KPj4gWyAgIDE4Ljk4Mzc2Nl0gNC43LjAtcmM1KyAjNTI0IFRhaW50ZWQ6IEcg ICAgICAgICAgIE8KPj4gWyAgIDE4Ljk4Mzc2N10gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+PiBbICAgMTguOTgzNzY3XSBrd29ya2VyL3U4 OjAvNiBpcyB0cnlpbmcgdG8gYWNxdWlyZSBsb2NrOgo+PiBbICAgMTguOTgzNzc3XSAgKCZkZXYt Pm1vZGVfY29uZmlnLm11dGV4KXsrLisuKy59LCBhdDogWzxmZmZmZmZmZjgxNWFmZGUwPl0gZHJt X21vZGVzZXRfbG9ja19hbGwrMHg0MC8weDEyMAo+PiBbICAgMTguOTgzNzc3XQo+PiAgICAgICAg ICAgICAgICBidXQgdGFzayBpcyBhbHJlYWR5IGhvbGRpbmcgbG9jazoKPj4gWyAgIDE4Ljk4Mzc4 Ml0gICgoZmJfbm90aWZpZXJfbGlzdCkucndzZW0peysrKysuK30sIGF0OiBbPGZmZmZmZmZmODEw YWMxOTU+XSBfX2Jsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4rMHgzNS8weDcwCj4+IFsgICAx OC45ODM3ODNdCj4+ICAgICAgICAgICAgICAgIHdoaWNoIGxvY2sgYWxyZWFkeSBkZXBlbmRzIG9u IHRoZSBuZXcgbG9jay4KPj4gCj4+IFsgICAxOC45ODM3ODNdCj4+ICAgICAgICAgICAgICAgIHRo ZSBleGlzdGluZyBkZXBlbmRlbmN5IGNoYWluIChpbiByZXZlcnNlIG9yZGVyKSBpczoKPj4gWyAg IDE4Ljk4Mzc4NV0KPj4gICAgICAgICAgICAgICAgLT4gIzEgKChmYl9ub3RpZmllcl9saXN0KS5y d3NlbSl7KysrKy4rfToKPj4gWyAgIDE4Ljk4Mzc4OV0gICAgICAgIFs8ZmZmZmZmZmY4MTBkZjYx MT5dIGxvY2tfYWNxdWlyZSsweGIxLzB4MjAwCj4+IFsgICAxOC45ODM3OTJdICAgICAgICBbPGZm ZmZmZmZmODE5YTU1YjQ+XSBkb3duX3dyaXRlKzB4NDQvMHg4MAo+PiBbICAgMTguOTgzNzk1XSAg ICAgICAgWzxmZmZmZmZmZjgxMGFiZjkxPl0gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0 ZXIrMHgyMS8weGIwCj4+IFsgICAxOC45ODM3OThdICAgICAgICBbPGZmZmZmZmZmODE0Yzc0NDg+ XSBmYl9yZWdpc3Rlcl9jbGllbnQrMHgxOC8weDIwCj4+IFsgICAxOC45ODM4MDBdICAgICAgICBb PGZmZmZmZmZmODE0YzZjODY+XSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKzB4MTM2LzB4MjYw Cj4+IFsgICAxOC45ODM4NTJdICAgICAgICBbPGZmZmZmZmZmYTAxMjdlYjI+XSBpbnRlbF9iYWNr bGlnaHRfZGV2aWNlX3JlZ2lzdGVyKzB4YTIvMHgxNjAgW2k5MTVdCj4+IFsgICAxOC45ODM4OTJd ICAgICAgICBbPGZmZmZmZmZmYTAwZjQ2YmU+XSBpbnRlbF9jb25uZWN0b3JfcmVnaXN0ZXIrMHhl LzB4MTAgW2k5MTVdCj4+IFsgICAxOC45ODM5MzJdICAgICAgICBbPGZmZmZmZmZmYTAxMTJiZmI+ XSBpbnRlbF9kcF9jb25uZWN0b3JfcmVnaXN0ZXIrMHgxYi8weDgwIFtpOTE1XQo+PiBbICAgMTgu OTgzOTM2XSAgICAgICAgWzxmZmZmZmZmZjgxNTlkZmVhPl0gZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rl cisweDRhLzB4ODAKPj4gWyAgIDE4Ljk4MzkzOF0gICAgICAgIFs8ZmZmZmZmZmY4MTU5ZmU0ND5d IGRybV9jb25uZWN0b3JfcmVnaXN0ZXJfYWxsKzB4NjQvMHhmMAo+PiBbICAgMTguOTgzOTQwXSAg ICAgICAgWzxmZmZmZmZmZjgxNWEyYTY0Pl0gZHJtX21vZGVzZXRfcmVnaXN0ZXJfYWxsKzB4MTc0 LzB4MWMwCj4+IFsgICAxOC45ODM5NDJdICAgICAgICBbPGZmZmZmZmZmODE1OTliNzI+XSBkcm1f ZGV2X3JlZ2lzdGVyKzB4YzIvMHhkMAo+PiBbICAgMTguOTgzOTc2XSAgICAgICAgWzxmZmZmZmZm ZmEwMDYyMWQ3Pl0gaTkxNV9kcml2ZXJfbG9hZCsweDE1NDcvMHgyMjAwIFtpOTE1XQo+PiBbICAg MTguOTg0MDEwXSAgICAgICAgWzxmZmZmZmZmZmEwMDZkODBmPl0gaTkxNV9wY2lfcHJvYmUrMHg0 Zi8weDcwIFtpOTE1XQo+PiBbICAgMTguOTg0MDE0XSAgICAgICAgWzxmZmZmZmZmZjgxNGEyMTM1 Pl0gbG9jYWxfcGNpX3Byb2JlKzB4NDUvMHhhMAo+PiBbICAgMTguOTg0MDE1XSAgICAgICAgWzxm ZmZmZmZmZjgxNGEzNDliPl0gcGNpX2RldmljZV9wcm9iZSsweGRiLzB4MTMwCj4+IFsgICAxOC45 ODQwMThdICAgICAgICBbPGZmZmZmZmZmODE1YzA3ZTM+XSBkcml2ZXJfcHJvYmVfZGV2aWNlKzB4 MjIzLzB4NDQwCj4+IFsgICAxOC45ODQwMjBdICAgICAgICBbPGZmZmZmZmZmODE1YzBhZDU+XSBf X2RyaXZlcl9hdHRhY2grMHhkNS8weDEwMAo+PiBbICAgMTguOTg0MDIyXSAgICAgICAgWzxmZmZm ZmZmZjgxNWJlMzg2Pl0gYnVzX2Zvcl9lYWNoX2RldisweDY2LzB4YTAKPj4gWyAgIDE4Ljk4NDAy M10gICAgICAgIFs8ZmZmZmZmZmY4MTVjMDAyZT5dIGRyaXZlcl9hdHRhY2grMHgxZS8weDIwCj4+ IFsgICAxOC45ODQwMjVdICAgICAgICBbPGZmZmZmZmZmODE1YmY5YmU+XSBidXNfYWRkX2RyaXZl cisweDFlZS8weDI4MAo+PiBbICAgMTguOTg0MDI4XSAgICAgICAgWzxmZmZmZmZmZjgxNWMxODEw Pl0gZHJpdmVyX3JlZ2lzdGVyKzB4NjAvMHhlMAo+PiBbICAgMTguOTg0MDMwXSAgICAgICAgWzxm ZmZmZmZmZjgxNGExYTEwPl0gX19wY2lfcmVnaXN0ZXJfZHJpdmVyKzB4NjAvMHg3MAo+PiBbICAg MTguOTg0MDYzXSAgICAgICAgWzxmZmZmZmZmZmEwMWE5MDViPl0gaTkxNV9pbml0KzB4NWIvMHg2 MiBbaTkxNV0KPj4gWyAgIDE4Ljk4NDA2N10gICAgICAgIFs8ZmZmZmZmZmY4MTAwMDQyZD5dIGRv X29uZV9pbml0Y2FsbCsweDNkLzB4MTUwCj4+IFsgICAxOC45ODQwNzBdICAgICAgICBbPGZmZmZm ZmZmODExYTkzNWI+XSBkb19pbml0X21vZHVsZSsweDVmLzB4MWQ5Cj4+IFsgICAxOC45ODQwNzNd ICAgICAgICBbPGZmZmZmZmZmODExMjQ0MTY+XSBsb2FkX21vZHVsZSsweDIwZTYvMHgyN2UwCj4+ IFsgICAxOC45ODQwNzVdICAgICAgICBbPGZmZmZmZmZmODExMjRkNjM+XSBTWVNDX2Zpbml0X21v ZHVsZSsweGMzLzB4ZjAKPj4gWyAgIDE4Ljk4NDA3Nl0gICAgICAgIFs8ZmZmZmZmZmY4MTEyNGRh ZT5dIFN5U19maW5pdF9tb2R1bGUrMHhlLzB4MTAKPj4gWyAgIDE4Ljk4NDA3OV0gICAgICAgIFs8 ZmZmZmZmZmY4MTlhODNhOT5dIGVudHJ5X1NZU0NBTExfNjRfZmFzdHBhdGgrMHgxYy8weGFjCj4+ IFsgICAxOC45ODQwODFdCj4+ICAgICAgICAgICAgICAgIC0+ICMwICgmZGV2LT5tb2RlX2NvbmZp Zy5tdXRleCl7Ky4rLisufToKPj4gWyAgIDE4Ljk4NDA4M10gICAgICAgIFs8ZmZmZmZmZmY4MTBk ZjBhYz5dIF9fbG9ja19hY3F1aXJlKzB4MTBmYy8weDEyNjAKPj4gWyAgIDE4Ljk4NDA4NV0gICAg ICAgIFs8ZmZmZmZmZmY4MTBkZjYxMT5dIGxvY2tfYWNxdWlyZSsweGIxLzB4MjAwCj4+IFsgICAx OC45ODQwODhdICAgICAgICBbPGZmZmZmZmZmODE5YTMwOTc+XSBtdXRleF9sb2NrX25lc3RlZCsw eDY3LzB4M2MwCj4+IFsgICAxOC45ODQwOTBdICAgICAgICBbPGZmZmZmZmZmODE1YWZkZTA+XSBk cm1fbW9kZXNldF9sb2NrX2FsbCsweDQwLzB4MTIwCj4+IFsgICAxOC45ODQwOTNdICAgICAgICBb PGZmZmZmZmZmODE1OGY3OWI+XSBkcm1fZmJfaGVscGVyX3Jlc3RvcmVfZmJkZXZfbW9kZV91bmxv Y2tlZCsweDJiLzB4ODAKPj4gWyAgIDE4Ljk4NDA5NV0gICAgICAgIFs8ZmZmZmZmZmY4MTU4Zjgx ZD5dIGRybV9mYl9oZWxwZXJfc2V0X3BhcisweDJkLzB4NTAKPj4gWyAgIDE4Ljk4NDEzNF0gICAg ICAgIFs8ZmZmZmZmZmZhMDEwNWY3YT5dIGludGVsX2ZiZGV2X3NldF9wYXIrMHgxYS8weDYwIFtp OTE1XQo+PiBbICAgMTguOTg0MTM2XSAgICAgICAgWzxmZmZmZmZmZjgxNGMxM2M2Pl0gZmJjb25f aW5pdCsweDU4Ni8weDYxMAo+PiBbICAgMTguOTg0MTM5XSAgICAgICAgWzxmZmZmZmZmZjgxNTRk MTZhPl0gdmlzdWFsX2luaXQrMHhjYS8weDEzMAo+PiBbICAgMTguOTg0MTQxXSAgICAgICAgWzxm ZmZmZmZmZjgxNTRlNjExPl0gZG9fYmluZF9jb25fZHJpdmVyKzB4MWMxLzB4M2EwCj4+IFsgICAx OC45ODQxNDNdICAgICAgICBbPGZmZmZmZmZmODE1NGVhZjY+XSBkb190YWtlX292ZXJfY29uc29s ZSsweDExNi8weDE4MAo+PiBbICAgMTguOTg0MTQ1XSAgICAgICAgWzxmZmZmZmZmZjgxNGJkM2E3 Pl0gZG9fZmJjb25fdGFrZW92ZXIrMHg1Ny8weGIwCj4+IFsgICAxOC45ODQxNDddICAgICAgICBb PGZmZmZmZmZmODE0YzFlNDg+XSBmYmNvbl9ldmVudF9ub3RpZnkrMHg2NTgvMHg3NTAKPj4gWyAg IDE4Ljk4NDE1MF0gICAgICAgIFs8ZmZmZmZmZmY4MTBhYmNhZT5dIG5vdGlmaWVyX2NhbGxfY2hh aW4rMHgzZS8weGIwCj4+IFsgICAxOC45ODQxNTJdICAgICAgICBbPGZmZmZmZmZmODEwYWMxYWQ+ XSBfX2Jsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4rMHg0ZC8weDcwCj4+IFsgICAxOC45ODQx NTRdICAgICAgICBbPGZmZmZmZmZmODEwYWMxZTY+XSBibG9ja2luZ19ub3RpZmllcl9jYWxsX2No YWluKzB4MTYvMHgyMAo+PiBbICAgMTguOTg0MTU2XSAgICAgICAgWzxmZmZmZmZmZjgxNGM3NDhi Pl0gZmJfbm90aWZpZXJfY2FsbF9jaGFpbisweDFiLzB4MjAKPj4gWyAgIDE4Ljk4NDE1OF0gICAg ICAgIFs8ZmZmZmZmZmY4MTRjODZiMT5dIHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKzB4MjUxLzB4MzMw Cj4+IFsgICAxOC45ODQxNjBdICAgICAgICBbPGZmZmZmZmZmODE1OGZhOWY+XSBkcm1fZmJfaGVs cGVyX2luaXRpYWxfY29uZmlnKzB4MjVmLzB4M2YwCj4+IFsgICAxOC45ODQxOTldICAgICAgICBb PGZmZmZmZmZmYTAxMDZiNDg+XSBpbnRlbF9mYmRldl9pbml0aWFsX2NvbmZpZysweDE4LzB4MzAg W2k5MTVdCj4+IFsgICAxOC45ODQyMDFdICAgICAgICBbPGZmZmZmZmZmODEwYWRmZDg+XSBhc3lu Y19ydW5fZW50cnlfZm4rMHg0OC8weDE1MAo+PiBbICAgMTguOTg0MjAzXSAgICAgICAgWzxmZmZm ZmZmZjgxMGEzOTQ3Pl0gcHJvY2Vzc19vbmVfd29yaysweDFlNy8weDc1MAo+PiBbICAgMTguOTg0 MjA1XSAgICAgICAgWzxmZmZmZmZmZjgxMGEzZWZiPl0gd29ya2VyX3RocmVhZCsweDRiLzB4NGYw Cj4+IFsgICAxOC45ODQyMDddICAgICAgICBbPGZmZmZmZmZmODEwYWFkNGY+XSBrdGhyZWFkKzB4 ZWYvMHgxMTAKPj4gWyAgIDE4Ljk4NDIwOF0gICAgICAgIFs8ZmZmZmZmZmY4MTlhODVlZj5dIHJl dF9mcm9tX2ZvcmsrMHgxZi8weDQwCj4+IFsgICAxOC45ODQyMDldCj4+ICAgICAgICAgICAgICAg IG90aGVyIGluZm8gdGhhdCBtaWdodCBoZWxwIHVzIGRlYnVnIHRoaXM6Cj4+IAo+PiBbICAgMTgu OTg0MjEwXSAgUG9zc2libGUgdW5zYWZlIGxvY2tpbmcgc2NlbmFyaW86Cj4+IAo+PiBbICAgMTgu OTg0MjEwXSAgICAgICAgQ1BVMCAgICAgICAgICAgICAgICAgICAgQ1BVMQo+PiBbICAgMTguOTg0 MjExXSAgICAgICAgLS0tLSAgICAgICAgICAgICAgICAgICAgLS0tLQo+PiBbICAgMTguOTg0MjEy XSAgIGxvY2soKGZiX25vdGlmaWVyX2xpc3QpLnJ3c2VtKTsKPj4gWyAgIDE4Ljk4NDIxM10gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgp Owo+PiBbICAgMTguOTg0MjE1XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jaygo ZmJfbm90aWZpZXJfbGlzdCkucndzZW0pOwo+PiBbICAgMTguOTg0MjE2XSAgIGxvY2soJmRldi0+ bW9kZV9jb25maWcubXV0ZXgpOwo+PiBbICAgMTguOTg0MjE2XQo+PiAgICAgICAgICAgICAgICAg KioqIERFQURMT0NLICoqKgo+PiAKPj4gWyAgIDE4Ljk4NDIxN10gNiBsb2NrcyBoZWxkIGJ5IGt3 b3JrZXIvdTg6MC82Ogo+PiBbICAgMTguOTg0MjIwXSAgIzA6ICAoImV2ZW50c191bmJvdW5kIil7 LisuKy4rfSwgYXQ6IFs8ZmZmZmZmZmY4MTBhMzhjOT5dIHByb2Nlc3Nfb25lX3dvcmsrMHgxNjkv MHg3NTAKPj4gWyAgIDE4Ljk4NDIyM10gICMxOiAgKCgmZW50cnktPndvcmspKXsrLisuKy59LCBh dDogWzxmZmZmZmZmZjgxMGEzOGM5Pl0gcHJvY2Vzc19vbmVfd29yaysweDE2OS8weDc1MAo+PiBb ICAgMTguOTg0MjI3XSAgIzI6ICAocmVnaXN0cmF0aW9uX2xvY2speysuKy4rLn0sIGF0OiBbPGZm ZmZmZmZmODE0Yzg0ODc+XSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcisweDI3LzB4MzMwCj4+IFsgICAx OC45ODQyMzFdICAjMzogIChjb25zb2xlX2xvY2speysuKy4rLn0sIGF0OiBbPGZmZmZmZmZmODE0 Yzg2Y2U+XSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcisweDI2ZS8weDMzMAo+PiBbICAgMTguOTg0MjM0 XSAgIzQ6ICAoJmZiX2luZm8tPmxvY2speysuKy4rLn0sIGF0OiBbPGZmZmZmZmZmODE0Yzc4ZGQ+ XSBsb2NrX2ZiX2luZm8rMHgxZC8weDQwCj4+IFsgICAxOC45ODQyMzhdICAjNTogICgoZmJfbm90 aWZpZXJfbGlzdCkucndzZW0peysrKysuK30sIGF0OiBbPGZmZmZmZmZmODEwYWMxOTU+XSBfX2Js b2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4rMHgzNS8weDcwCj4+IFsgICAxOC45ODQyMzhdCj4+ ICAgICAgICAgICAgICAgIHN0YWNrIGJhY2t0cmFjZToKPj4gWyAgIDE4Ljk4NDI0MV0gQ1BVOiAy IFBJRDogNiBDb21tOiBrd29ya2VyL3U4OjAgVGFpbnRlZDogRyAgICAgICAgICAgTyAgICA0Ljcu MC1yYzUrICM1MjQKPj4gWyAgIDE4Ljk4NDI0Ml0gSGFyZHdhcmUgbmFtZTogSW50ZWwgQ29ycC4g QnJveHRvbiBQL05PVEVCT09LLCBCSU9TIEFQTEtSVlBBLlg2NC4wMTM4LkIzMy4xNjA2MjUwODQy IDA2LzI1LzIwMTYKPj4gWyAgIDE4Ljk4NDI0NF0gV29ya3F1ZXVlOiBldmVudHNfdW5ib3VuZCBh c3luY19ydW5fZW50cnlfZm4KPj4gWyAgIDE4Ljk4NDI0OF0gIDAwMDAwMDAwMDAwMDAwMDAgZmZm Zjg4MDA3NTg1NzdmMCBmZmZmZmZmZjgxNDUwN2E1IGZmZmZmZmZmODI4Yjk5MDAKPj4gWyAgIDE4 Ljk4NDI1MF0gIGZmZmZmZmZmODI4Yjk5MDAgZmZmZjg4MDA3NTg1NzgzMCBmZmZmZmZmZjgxMGRj NmZhIGZmZmY4ODAwNzU4NTc4ODAKPj4gWyAgIDE4Ljk4NDI1Ml0gIGZmZmY4ODAwNzU4NGQ2ODgg MDAwMDAwMDAwMDAwMDAwNSAwMDAwMDAwMDAwMDAwMDA2IGZmZmY4ODAwNzU4NGQ2YjAKPj4gWyAg IDE4Ljk4NDI1M10gQ2FsbCBUcmFjZToKPj4gWyAgIDE4Ljk4NDI1N10gIFs8ZmZmZmZmZmY4MTQ1 MDdhNT5dIGR1bXBfc3RhY2srMHg2Ny8weDkyCj4+IFsgICAxOC45ODQyNTldICBbPGZmZmZmZmZm ODEwZGM2ZmE+XSBwcmludF9jaXJjdWxhcl9idWcrMHgxYWEvMHgyMDAKPj4gWyAgIDE4Ljk4NDI2 MV0gIFs8ZmZmZmZmZmY4MTBkZjBhYz5dIF9fbG9ja19hY3F1aXJlKzB4MTBmYy8weDEyNjAKPj4g WyAgIDE4Ljk4NDI2NF0gIFs8ZmZmZmZmZmY4MTBkZjYxMT5dIGxvY2tfYWNxdWlyZSsweGIxLzB4 MjAwCj4+IFsgICAxOC45ODQyNjZdICBbPGZmZmZmZmZmODE1YWZkZTA+XSA/IGRybV9tb2Rlc2V0 X2xvY2tfYWxsKzB4NDAvMHgxMjAKPj4gWyAgIDE4Ljk4NDI2N10gIFs8ZmZmZmZmZmY4MTVhZmRl MD5dID8gZHJtX21vZGVzZXRfbG9ja19hbGwrMHg0MC8weDEyMAo+PiBbICAgMTguOTg0MjY5XSAg WzxmZmZmZmZmZjgxOWEzMDk3Pl0gbXV0ZXhfbG9ja19uZXN0ZWQrMHg2Ny8weDNjMAo+PiBbICAg MTguOTg0MjcxXSAgWzxmZmZmZmZmZjgxNWFmZGUwPl0gPyBkcm1fbW9kZXNldF9sb2NrX2FsbCsw eDQwLzB4MTIwCj4+IFsgICAxOC45ODQyNzNdICBbPGZmZmZmZmZmODEwZmE4NWY+XSA/IHJjdV9y ZWFkX2xvY2tfc2NoZWRfaGVsZCsweDdmLzB4OTAKPj4gWyAgIDE4Ljk4NDI3Nl0gIFs8ZmZmZmZm ZmY4MTIwODIxOD5dID8ga21lbV9jYWNoZV9hbGxvY190cmFjZSsweDI0OC8weDJiMAo+PiBbICAg MTguOTg0Mjc3XSAgWzxmZmZmZmZmZjgxNWFmZGM1Pl0gPyBkcm1fbW9kZXNldF9sb2NrX2FsbCsw eDI1LzB4MTIwCj4+IFsgICAxOC45ODQyNzldICBbPGZmZmZmZmZmODE1YWZkZTA+XSBkcm1fbW9k ZXNldF9sb2NrX2FsbCsweDQwLzB4MTIwCj4+IFsgICAxOC45ODQyODFdICBbPGZmZmZmZmZmODE1 OGY3OWI+XSBkcm1fZmJfaGVscGVyX3Jlc3RvcmVfZmJkZXZfbW9kZV91bmxvY2tlZCsweDJiLzB4 ODAKPj4gWyAgIDE4Ljk4NDI4M10gIFs8ZmZmZmZmZmY4MTU4ZjgxZD5dIGRybV9mYl9oZWxwZXJf c2V0X3BhcisweDJkLzB4NTAKPj4gWyAgIDE4Ljk4NDMyMl0gIFs8ZmZmZmZmZmZhMDEwNWY3YT5d IGludGVsX2ZiZGV2X3NldF9wYXIrMHgxYS8weDYwIFtpOTE1XQo+PiBbICAgMTguOTg0MzI0XSAg WzxmZmZmZmZmZjgxNGMxM2M2Pl0gZmJjb25faW5pdCsweDU4Ni8weDYxMAo+PiBbICAgMTguOTg0 MzI2XSAgWzxmZmZmZmZmZjgxNTRkMTZhPl0gdmlzdWFsX2luaXQrMHhjYS8weDEzMAo+PiBbICAg MTguOTg0MzI4XSAgWzxmZmZmZmZmZjgxNTRlNjExPl0gZG9fYmluZF9jb25fZHJpdmVyKzB4MWMx LzB4M2EwCj4+IFsgICAxOC45ODQzMzBdICBbPGZmZmZmZmZmODE1NGVhZjY+XSBkb190YWtlX292 ZXJfY29uc29sZSsweDExNi8weDE4MAo+PiBbICAgMTguOTg0MzMyXSAgWzxmZmZmZmZmZjgxNGJk M2E3Pl0gZG9fZmJjb25fdGFrZW92ZXIrMHg1Ny8weGIwCj4+IFsgICAxOC45ODQzMzRdICBbPGZm ZmZmZmZmODE0YzFlNDg+XSBmYmNvbl9ldmVudF9ub3RpZnkrMHg2NTgvMHg3NTAKPj4gWyAgIDE4 Ljk4NDMzNl0gIFs8ZmZmZmZmZmY4MTBhYmNhZT5dIG5vdGlmaWVyX2NhbGxfY2hhaW4rMHgzZS8w eGIwCj4+IFsgICAxOC45ODQzMzhdICBbPGZmZmZmZmZmODEwYWMxYWQ+XSBfX2Jsb2NraW5nX25v dGlmaWVyX2NhbGxfY2hhaW4rMHg0ZC8weDcwCj4+IFsgICAxOC45ODQzNDBdICBbPGZmZmZmZmZm ODEwYWMxZTY+XSBibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKzB4MTYvMHgyMAo+PiBbICAg MTguOTg0MzQyXSAgWzxmZmZmZmZmZjgxNGM3NDhiPl0gZmJfbm90aWZpZXJfY2FsbF9jaGFpbisw eDFiLzB4MjAKPj4gWyAgIDE4Ljk4NDM0NF0gIFs8ZmZmZmZmZmY4MTRjODZiMT5dIHJlZ2lzdGVy X2ZyYW1lYnVmZmVyKzB4MjUxLzB4MzMwCj4+IFsgICAxOC45ODQzNDddICBbPGZmZmZmZmZmODE1 YjdlOGQ+XSA/IHZnYV9zd2l0Y2hlcm9vX2NsaWVudF9mYl9zZXQrMHg1ZC8weDcwCj4+IFsgICAx OC45ODQzNDldICBbPGZmZmZmZmZmODE1OGZhOWY+XSBkcm1fZmJfaGVscGVyX2luaXRpYWxfY29u ZmlnKzB4MjVmLzB4M2YwCj4+IFsgICAxOC45ODQzODhdICBbPGZmZmZmZmZmYTAxMDZiNDg+XSBp bnRlbF9mYmRldl9pbml0aWFsX2NvbmZpZysweDE4LzB4MzAgW2k5MTVdCj4+IFsgICAxOC45ODQz ODldICBbPGZmZmZmZmZmODEwYWRmZDg+XSBhc3luY19ydW5fZW50cnlfZm4rMHg0OC8weDE1MAo+ PiBbICAgMTguOTg0MzkxXSAgWzxmZmZmZmZmZjgxMGEzOTQ3Pl0gcHJvY2Vzc19vbmVfd29yaysw eDFlNy8weDc1MAo+PiBbICAgMTguOTg0MzkyXSAgWzxmZmZmZmZmZjgxMGEzOGM5Pl0gPyBwcm9j ZXNzX29uZV93b3JrKzB4MTY5LzB4NzUwCj4+IFsgICAxOC45ODQzOTRdICBbPGZmZmZmZmZmODEw YTNlZmI+XSB3b3JrZXJfdGhyZWFkKzB4NGIvMHg0ZjAKPj4gWyAgIDE4Ljk4NDM5Nl0gIFs8ZmZm ZmZmZmY4MTBhM2ViMD5dID8gcHJvY2Vzc19vbmVfd29yaysweDc1MC8weDc1MAo+PiBbICAgMTgu OTg0Mzk4XSAgWzxmZmZmZmZmZjgxMGFhZDRmPl0ga3RocmVhZCsweGVmLzB4MTEwCj4+IFsgICAx OC45ODQ0MDFdICBbPGZmZmZmZmZmODE5YTg1ZWY+XSByZXRfZnJvbV9mb3JrKzB4MWYvMHg0MAo+ PiBbICAgMTguOTg0NDAyXSAgWzxmZmZmZmZmZjgxMGFhYzYwPl0gPyBrdGhyZWFkX3N0b3ArMHgy ZTAvMHgyZTAKPj4gCj4+IFJlcG9ydGVkLWJ5OiBJbXJlIERlYWsgPGltcmUuZGVha0BpbnRlbC5j b20+Cj4+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNv LnVrPgo+PiBDYzogSW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPgo+PiBDYzogWmhhbmcg UnVpIDxydWkuemhhbmdAaW50ZWwuY29tPgo+PiBDYzogQWxleCBEZXVjaGVyIDxhbGV4YW5kZXIu ZGV1Y2hlckBhbWQuY29tPgo+PiBDYzogIkNocmlzdGlhbiBLw7ZuaWciIDxjaHJpc3RpYW4ua29l bmlnQGFtZC5jb20+Cj4+IENjOiBEYXZpZCBBaXJsaWUgPGFpcmxpZWRAbGludXguaWU+Cj4+IENj OiBQYXRyaWsgSmFrb2Jzc29uIDxwYXRyaWsuci5qYWtvYnNzb25AZ21haWwuY29tPgo+PiBDYzog RGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBpbnRlbC5jb20+Cj4+IENjOiBKYW5pIE5pa3Vs YSA8amFuaS5uaWt1bGFAbGludXguaW50ZWwuY29tPgo+PiBDYzogQmVuIFNrZWdncyA8YnNrZWdn c0ByZWRoYXQuY29tPgo+PiBDYzogVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQHRpLmNv bT4KPj4gQ2M6IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJk LmNvbT4KPj4gQ2M6ICJCcnVubyBQcsOpbW9udCIgPGJvbmJvbnNAbGludXgtdnNlcnZlci5vcmc+ Cj4+IENjOiBKaXJpIEtvc2luYSA8amlrb3NAa2VybmVsLm9yZz4KPj4gQ2M6IFRob21hcyBQZXRh enpvbmkgPHRob21hcy5wZXRhenpvbmlAZnJlZS1lbGVjdHJvbnMuY29tPgo+PiBDYzogIk5vcmFs ZiBUcsO4bm5lcyIgPG5vcmFsZkB0cm9ubmVzLm9yZz4KPj4gQ2M6IEplbnMgRnJlZGVyaWNoIDxq ZnJlZGVyaWNoQGdtYWlsLmNvbT4KPj4gQ2M6IERhbmllbCBEcmFrZSA8ZHNkQGxhcHRvcC5vcmc+ Cj4+IENjOiBKb24gTmV0dGxldG9uIDxqb24ubmV0dGxldG9uQGdtYWlsLmNvbT4KPj4gQ2M6IEpp bmdvbyBIYW4gPGppbmdvb2hhbjFAZ21haWwuY29tPgo+PiBDYzogTGVlIEpvbmVzIDxsZWUuam9u ZXNAbGluYXJvLm9yZz4KPj4gQ2M6IEplYW4tQ2hyaXN0b3BoZSBQbGFnbmlvbC1WaWxsYXJkIDxw bGFnbmlvakBqY3Jvc29mdC5jb20+Cj4+IENjOiBNaWNoYWVsIEhlbm5lcmljaCA8bWljaGFlbC5o ZW5uZXJpY2hAYW5hbG9nLmNvbT4KPj4gQ2M6IE1pbG8gS2ltIDxtaWxvLmtpbUB0aS5jb20+Cj4+ IENjOiBUaGllcnJ5IFJlZGluZyA8dGhpZXJyeS5yZWRpbmdAZ21haWwuY29tPgo+PiBDYzogTmlj b2xhcyBGZXJyZSA8bmljb2xhcy5mZXJyZUBhdG1lbC5jb20+Cj4+IENjOiBQYXVsIE1hY2tlcnJh cyA8cGF1bHVzQHNhbWJhLm9yZz4KPj4gQ2M6IEt1a2ppbiBLaW0gPGtnZW5lQGtlcm5lbC5vcmc+ Cj4+IENjOiBLcnp5c3p0b2YgS296bG93c2tpIDxrLmtvemxvd3NraUBzYW1zdW5nLmNvbT4KPj4g Q2M6IEFudG9uaW5vIERhcGxhcyA8YWRhcGxhc0BnbWFpbC5jb20+Cj4+IENjOiBsaW51eC1hY3Bp QHZnZXIua2VybmVsLm9yZwo+PiBDYzogZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ PiBDYzogaW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+PiBDYzogbm91dmVhdUBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKPj4gQ2M6IGxpbnV4LXJlbmVzYXMtc29jQHZnZXIua2VybmVsLm9y Zwo+PiBDYzogbGludXgtZmJkZXZAdmdlci5rZXJuZWwub3JnCj4+IENjOiBsaW51eC1vbWFwQHZn ZXIua2VybmVsLm9yZwo+PiAtLS0KPj4gIGRyaXZlcnMvYWNwaS9hY3BpX3ZpZGVvLmMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2F0b21iaW9zX2VuY29kZXJzLmMgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvcGFyYWRlLXBzODYyMi5jICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZl cnMvZ3B1L2RybS9nbWE1MDAvY2R2X2RldmljZS5jICAgICAgICAgICAgICAgICAgfCAgMyArKy0K Pj4gIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvbWRmbGRfZGV2aWNlLmMgICAgICAgICAgICAgICAg fCAgMyArKy0KPj4gIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvb2FrdHJhaWxfZGV2aWNlLmMgICAg ICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2RldmljZS5j ICAgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3BhbmVsLmMgICAgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvZ3B1L2RybS9u b3V2ZWF1L25vdXZlYXVfYmFja2xpZ2h0LmMgICAgICAgICAgfCAgNiArKysrLS0KPj4gIGRyaXZl cnMvZ3B1L2RybS9vbWFwZHJtL2Rpc3BsYXlzL3BhbmVsLWRzaS1jbS5jICAgICAgfCAgMyArKy0K Pj4gIC4uLi9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvcGFuZWwtc29ueS1hY3g1NjVha20uYyAg fCAgMyArKy0KPj4gIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZW5jb2RlcnMuYyAg ICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2Fj eV9lbmNvZGVycy5jICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvZ3B1L2RybS9zaG1vYmlsZS9z aG1vYl9kcm1fYmFja2xpZ2h0LmMgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvaGlkL2hpZC1w aWNvbGNkX2JhY2tsaWdodC5jICAgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMv bWFjaW50b3NoL3ZpYS1wbXUtYmFja2xpZ2h0LmMgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4g IGRyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMgICAgICAgICAgICAgICAgICAgICAgfCAg MyArKy0KPj4gIGRyaXZlcnMvcGxhdGZvcm0veDg2L2FwcGxlLWdtdXguYyAgICAgICAgICAgICAg ICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtbGFwdG9wLmMgICAg ICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtd21p LmMgICAgICAgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvcGxhdGZvcm0veDg2 L2NsYXNzbWF0ZS1sYXB0b3AuYyAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvcGxh dGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYyAgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRy aXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMgICAgICAgICAgICAgICAgICAgfCAgMyAr Ky0KPj4gIGRyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jICAgICAgICAgICAgICAg ICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMgICAg ICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvcGxhdGZvcm0veDg2L2lkZWFwYWQtbGFw dG9wLmMgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvcGxhdGZvcm0veDg2L2lu dGVsX29ha3RyYWlsLmMgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvcGxhdGZv cm0veDg2L21zaS1sYXB0b3AuYyAgICAgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZl cnMvcGxhdGZvcm0veDg2L21zaS13bWkuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgMyArKy0K Pj4gIGRyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYyAgICAgICAgICAgICAg fCAgMyArKy0KPj4gIGRyaXZlcnMvcGxhdGZvcm0veDg2L3NhbXN1bmctbGFwdG9wLmMgICAgICAg ICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvcGxhdGZvcm0veDg2L3NhbXN1bmctcTEwLmMg ICAgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvcGxhdGZvcm0veDg2L3Nvbnkt bGFwdG9wLmMgICAgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvcGxhdGZvcm0v eDg2L3RoaW5rcGFkX2FjcGkuYyAgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMv cGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jICAgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4g IGRyaXZlcnMvc3RhZ2luZy9mYnRmdC9mYl9zc2QxMzUxLmMgICAgICAgICAgICAgICAgICAgfCAg MyArKy0KPj4gIGRyaXZlcnMvc3RhZ2luZy9mYnRmdC9mYl93YXR0ZXJvdHQuYyAgICAgICAgICAg ICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvc3RhZ2luZy9mYnRmdC9mYnRmdC1jb3JlLmMgICAg ICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xw Y19kY29uLmMgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvdXNiL21pc2MvYXBw bGVkaXNwbGF5LmMgICAgICAgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvdmlk ZW8vYmFja2xpZ2h0Lzg4cG04NjB4X2JsLmMgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRy aXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FhdDI4NzBfYmwuYyAgICAgICAgICAgICAgICAgfCAgMyAr Ky0KPj4gIGRyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkcDU1MjBfYmwuYyAgICAgICAgICAgICAg ICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkcDg4NjBfYmwuYyAgICAg ICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkcDg4NzBf YmwuYyAgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvdmlkZW8vYmFja2xpZ2h0 L2FtczM2OWZnMDYuYyAgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZlcnMvdmlkZW8v YmFja2xpZ2h0L2FwcGxlX2JsLmMgICAgICAgICAgICAgICAgICAgfCAgMyArKy0KPj4gIGRyaXZl cnMvdmlkZW8vYmFja2xpZ2h0L2FzMzcxMV9ibC5jICAgICAgICAgICAgICAgICAgfCAgMyArKy0K Pj4gIGRyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jICAgICAgICAgICAgICAgICAg fCAyMCArKysrKysrKysrKysrLS0tLS0tLQo+PiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmQ2 MTA3LmMgICAgICAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9iYWNr bGlnaHQvY29yZ2lfbGNkLmMgICAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92 aWRlby9iYWNrbGlnaHQvY3JfYmxsY2QuYyAgICAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAg ZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZGE5MDN4X2JsLmMgICAgICAgICAgICAgICAgICB8ICAz ICsrLQo+PiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZGE5MDUyX2JsLmMgICAgICAgICAgICAg ICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZXA5M3h4X2JsLmMgICAg ICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZ2VuZXJp Y19ibC5jICAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9iYWNrbGln aHQvZ3Bpb19iYWNrbGlnaHQuYyAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRl by9iYWNrbGlnaHQvaHA2ODBfYmwuYyAgICAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJp dmVycy92aWRlby9iYWNrbGlnaHQvaXBhcV9taWNyb19ibC5jICAgICAgICAgICAgICB8ICAzICsr LQo+PiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQvam9ybmFkYTcyMF9ibC5jICAgICAgICAgICAg ICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQva2IzODg2X2JsLmMgICAgICAg ICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbGQ5MDQwLmMg ICAgICAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQv bG0zNTMzX2JsLmMgICAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9i YWNrbGlnaHQvbG0zNjMwYV9ibC5jICAgICAgICAgICAgICAgICB8ICA2ICsrKystLQo+PiAgZHJp dmVycy92aWRlby9iYWNrbGlnaHQvbG0zNjM5X2JsLmMgICAgICAgICAgICAgICAgICB8ICAzICsr LQo+PiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMgICAgICAgICAgICAgICAg ICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbHA4NTV4X2JsLmMgICAgICAg ICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbHA4Nzg4X2Js LmMgICAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQv bHY1MjA3bHAuYyAgICAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9i YWNrbGlnaHQvbWF4ODkyNV9ibC5jICAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVy cy92aWRlby9iYWNrbGlnaHQvb21hcDFfYmwuYyAgICAgICAgICAgICAgICAgICB8ICAzICsrLQo+ PiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQvb3QyMDBfYmwuYyAgICAgICAgICAgICAgICAgICB8 ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQvcGFuZG9yYV9ibC5jICAgICAgICAg ICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQvcGNmNTA2MzMtYmFj a2xpZ2h0LmMgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQvcG04 OTQxLXdsZWQuYyAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9iYWNr bGlnaHQvcHdtX2JsLmMgICAgICAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92 aWRlby9iYWNrbGlnaHQvczZlNjNtMC5jICAgICAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAg ZHJpdmVycy92aWRlby9iYWNrbGlnaHQvc2t5ODE0NTItYmFja2xpZ2h0LmMgICAgICAgICB8ICAz ICsrLQo+PiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQvdG9zYV9ibC5jICAgICAgICAgICAgICAg ICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQvdHBzNjUyMTdfYmwuYyAg ICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9iYWNrbGlnaHQvd204MzF4 X2JsLmMgICAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9mYmRldi9h dG1lbF9sY2RmYi5jICAgICAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRl by9mYmRldi9hdHkvYXR5MTI4ZmIuYyAgICAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJp dmVycy92aWRlby9mYmRldi9hdHkvYXR5ZmJfYmFzZS5jICAgICAgICAgICAgICAgICB8ICAzICsr LQo+PiAgZHJpdmVycy92aWRlby9mYmRldi9hdHkvcmFkZW9uX2JhY2tsaWdodC5jICAgICAgICAg ICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9mYmRldi9iZjUzNy1scTAzNS5jICAgICAgICAg ICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9mYmRldi9iZjU0eC1scTA0M2Zi LmMgICAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9mYmRldi9iZmlu LXQzNTBtY3FiLWZiLmMgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9m YmRldi9leHlub3MvczZlOGF4MC5jICAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVy cy92aWRlby9mYmRldi9teDNmYi5jICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzICsrLQo+ PiAgZHJpdmVycy92aWRlby9mYmRldi9udmlkaWEvbnZfYmFja2xpZ2h0LmMgICAgICAgICAgICB8 ICAzICsrLQo+PiAgLi4uL3ZpZGVvL2ZiZGV2L29tYXAyL29tYXBmYi9kaXNwbGF5cy9wYW5lbC1k c2ktY20uYyB8ICAzICsrLQo+PiAgLi4uL29tYXAyL29tYXBmYi9kaXNwbGF5cy9wYW5lbC1zb255 LWFjeDU2NWFrbS5jICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9mYmRldi9yaXZhL2Zi ZGV2LmMgICAgICAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92aWRlby9mYmRl di9zaF9tb2JpbGVfbGNkY2ZiLmMgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAgZHJpdmVycy92 aWRlby9mYmRldi9zc2QxMzA3ZmIuYyAgICAgICAgICAgICAgICAgICAgICB8ICAzICsrLQo+PiAg aW5jbHVkZS9saW51eC9iYWNrbGlnaHQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3 ICsrKysrLS0KPj4gIDk3IGZpbGVzIGNoYW5nZWQsIDIxMiBpbnNlcnRpb25zKCspLCAxMDYgZGVs ZXRpb25zKC0pCj4+IAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGlfdmlkZW8uYyBi L2RyaXZlcnMvYWNwaS9hY3BpX3ZpZGVvLmMKPj4gaW5kZXggYzFkMTM4ZTEyOGNiLi40OWUwYWNi NzBjMTcgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpX3ZpZGVvLmMKPj4gKysrIGIv ZHJpdmVycy9hY3BpL2FjcGlfdmlkZW8uYwo+PiBAQCAtMTY5Myw3ICsxNjkzLDggQEAgc3RhdGlj IHZvaWQgYWNwaV92aWRlb19kZXZfcmVnaXN0ZXJfYmFja2xpZ2h0KHN0cnVjdCBhY3BpX3ZpZGVv X2RldmljZSAqZGV2aWNlKQo+PiAgCQkJCQkJICAgICAgcGFyZW50LAo+PiAgCQkJCQkJICAgICAg ZGV2aWNlLAo+PiAgCQkJCQkJICAgICAgJmFjcGlfYmFja2xpZ2h0X29wcywKPj4gLQkJCQkJCSAg ICAgICZwcm9wcyk7Cj4+ICsJCQkJCQkgICAgICAmcHJvcHMsCj4+ICsJCQkJCQkgICAgICBCQUNL TElHSFRfUkVHSVNURVJfRkJfQ0xJRU5UKTsKPj4gIAlrZnJlZShuYW1lKTsKPj4gIAlpZiAoSVNf RVJSKGRldmljZS0+YmFja2xpZ2h0KSkgewo+PiAgCQlkZXZpY2UtPmJhY2tsaWdodCA9IE5VTEw7 Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hdG9tYmlvc19lbmNv ZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYXRvbWJpb3NfZW5jb2RlcnMuYwo+ PiBpbmRleCA0OGI2YmQ2NzFjZGEuLmI2YWU2N2E3NWEyNSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYXRvbWJpb3NfZW5jb2RlcnMuYwo+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hdG9tYmlvc19lbmNvZGVycy5jCj4+IEBAIC0xOTgsNyArMTk4 LDggQEAgdm9pZCBhbWRncHVfYXRvbWJpb3NfZW5jb2Rlcl9pbml0X2JhY2tsaWdodChzdHJ1Y3Qg YW1kZ3B1X2VuY29kZXIgKmFtZGdwdV9lbmNvZGUKPj4gIAlzbnByaW50ZihibF9uYW1lLCBzaXpl b2YoYmxfbmFtZSksCj4+ICAJCSAiYW1kZ3B1X2JsJWQiLCBkZXYtPnByaW1hcnktPmluZGV4KTsK Pj4gIAliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoYmxfbmFtZSwgZHJtX2Nvbm5lY3Rv ci0+a2RldiwKPj4gLQkJCQkgICAgICAgcGRhdGEsICZhbWRncHVfYXRvbWJpb3NfZW5jb2Rlcl9i YWNrbGlnaHRfb3BzLCAmcHJvcHMpOwo+PiArCQkJCSAgICAgICBwZGF0YSwgJmFtZGdwdV9hdG9t Ymlvc19lbmNvZGVyX2JhY2tsaWdodF9vcHMsICZwcm9wcywKPj4gKwkJCQkgICAgICAgQkFDS0xJ R0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VSUihiZCkpIHsKPj4gIAkJRFJN X0VSUk9SKCJCYWNrbGlnaHQgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7Cj4+ICAJCWdvdG8gZXJy b3I7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFkZS1wczg2MjIu YyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvcGFyYWRlLXBzODYyMi5jCj4+IGluZGV4IDVjZDhk ZDdlNTkwNC4uMTRkZWE3MTFiNDc0IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL3BhcmFkZS1wczg2MjIuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFk ZS1wczg2MjIuYwo+PiBAQCAtNjA4LDcgKzYwOCw4IEBAIHN0YXRpYyBpbnQgcHM4NjIyX3Byb2Jl KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCj4+ICAJaWYgKCFvZl9maW5kX3Byb3BlcnR5KGRl di0+b2Zfbm9kZSwgInVzZS1leHRlcm5hbC1wd20iLCBOVUxMKSkgewo+PiAgCQlwczg2MjItPmJs ID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigicHM4NjIyLWJhY2tsaWdodCIsCj4+ICAJCQkJ ZGV2LCBwczg2MjIsICZwczg2MjJfYmFja2xpZ2h0X29wcywKPj4gLQkJCQlOVUxMKTsKPj4gKwkJ CQlOVUxMLAo+PiArCQkJCUJBQ0tMSUdIVF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCQlpZiAo SVNfRVJSKHBzODYyMi0+YmwpKSB7Cj4+ICAJCQlEUk1fRVJST1IoImZhaWxlZCB0byByZWdpc3Rl ciBiYWNrbGlnaHRcbiIpOwo+PiAgCQkJcmV0ID0gUFRSX0VSUihwczg2MjItPmJsKTsKPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvY2R2X2RldmljZS5jIGIvZHJpdmVycy9n cHUvZHJtL2dtYTUwMC9jZHZfZGV2aWNlLmMKPj4gaW5kZXggODc0NTk3MWE3NjgwLi5kMmI0ZDY0 NWI0ZGIgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvY2R2X2RldmljZS5j Cj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvY2R2X2RldmljZS5jCj4+IEBAIC0xNjMs NyArMTYzLDggQEAgc3RhdGljIGludCBjZHZfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKPj4gIAlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1BMQVRGT1JNOwo+PiAgCj4+ICAJ Y2R2X2JhY2tsaWdodF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJwc2ItYmwi LAo+PiAtCQkJCQlOVUxMLCAodm9pZCAqKWRldiwgJmNkdl9vcHMsICZwcm9wcyk7Cj4+ICsJCQkJ CU5VTEwsICh2b2lkICopZGV2LCAmY2R2X29wcywgJnByb3BzLAo+PiArCQkJCQlCQUNLTElHSFRf UkVHSVNURVJfRkJfQ0xJRU5UKTsKPj4gIAlpZiAoSVNfRVJSKGNkdl9iYWNrbGlnaHRfZGV2aWNl KSkKPj4gIAkJcmV0dXJuIFBUUl9FUlIoY2R2X2JhY2tsaWdodF9kZXZpY2UpOwo+PiAgCj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RldmljZS5jIGIvZHJpdmVy cy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9kZXZpY2UuYwo+PiBpbmRleCBlMmFiODU4MTIyZjkuLjJl MjRlY2NjZmQzOSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9tZGZsZF9k ZXZpY2UuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL21kZmxkX2RldmljZS5jCj4+ IEBAIC0xMzAsNyArMTMwLDggQEAgc3RhdGljIGludCBtZGZsZF9iYWNrbGlnaHRfaW5pdChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQo+PiAgCXByb3BzLm1heF9icmlnaHRuZXNzID0gQlJJR0hUTkVT U19NQVhfTEVWRUw7Cj4+ICAJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKPj4gIAlt ZGZsZF9iYWNrbGlnaHRfZGV2aWNlID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigibWRmbGQt YmwiLAo+PiAtCQkJCU5VTEwsICh2b2lkICopZGV2LCAmbWRmbGRfb3BzLCAmcHJvcHMpOwo+PiAr CQkJCU5VTEwsICh2b2lkICopZGV2LCAmbWRmbGRfb3BzLCAmcHJvcHMsCj4+ICsJCQkJQkFDS0xJ R0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCk7Cj4+ICAKPj4gIAlpZiAoSVNfRVJSKG1kZmxkX2JhY2ts aWdodF9kZXZpY2UpKQo+PiAgCQlyZXR1cm4gUFRSX0VSUihtZGZsZF9iYWNrbGlnaHRfZGV2aWNl KTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvb2FrdHJhaWxfZGV2aWNl LmMgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL29ha3RyYWlsX2RldmljZS5jCj4+IGluZGV4IGJh MzBiNDNhMzQxMi4uMDM0NTUzYTUyNGFjIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v Z21hNTAwL29ha3RyYWlsX2RldmljZS5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAv b2FrdHJhaWxfZGV2aWNlLmMKPj4gQEAgLTE1NSw3ICsxNTUsOCBAQCBzdGF0aWMgaW50IG9ha3Ry YWlsX2JhY2tsaWdodF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4+ICAJcHJvcHMudHlw ZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKPj4gIAo+PiAgCW9ha3RyYWlsX2JhY2tsaWdodF9kZXZp Y2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJvYWt0cmFpbC1ibCIsCj4+IC0JCQkJTlVM TCwgKHZvaWQgKilkZXYsICZvYWt0cmFpbF9vcHMsICZwcm9wcyk7Cj4+ICsJCQkJTlVMTCwgKHZv aWQgKilkZXYsICZvYWt0cmFpbF9vcHMsICZwcm9wcywKPj4gKwkJCQlCQUNLTElHSFRfUkVHSVNU RVJfRkJfQ0xJRU5UKTsKPj4gIAo+PiAgCWlmIChJU19FUlIob2FrdHJhaWxfYmFja2xpZ2h0X2Rl dmljZSkpCj4+ICAJCXJldHVybiBQVFJfRVJSKG9ha3RyYWlsX2JhY2tsaWdodF9kZXZpY2UpOwo+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfZGV2aWNlLmMgYi9kcml2 ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9kZXZpY2UuYwo+PiBpbmRleCBkYzBmODUyNzU3MGMuLjBj MTM4NWQ2NDgzOSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfZGV2 aWNlLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfZGV2aWNlLmMKPj4gQEAg LTEzMSw3ICsxMzEsOCBAQCBzdGF0aWMgaW50IHBzYl9iYWNrbGlnaHRfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQo+PiAgCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUExBVEZPUk07Cj4+ICAK Pj4gIAlwc2JfYmFja2xpZ2h0X2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoInBz Yi1ibCIsCj4+IC0JCQkJCU5VTEwsICh2b2lkICopZGV2LCAmcHNiX29wcywgJnByb3BzKTsKPj4g KwkJCQkJTlVMTCwgKHZvaWQgKilkZXYsICZwc2Jfb3BzLCAmcHJvcHMsCj4+ICsJCQkJCUJBQ0tM SUdIVF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCWlmIChJU19FUlIocHNiX2JhY2tsaWdodF9k ZXZpY2UpKQo+PiAgCQlyZXR1cm4gUFRSX0VSUihwc2JfYmFja2xpZ2h0X2RldmljZSk7Cj4+ICAK Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BhbmVsLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5jCj4+IGluZGV4IDNjMGI5N2YwYmZhZS4uYWNm NjM5NWI5ZjMzIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5l bC5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BhbmVsLmMKPj4gQEAgLTEy MDEsNyArMTIwMSw4IEBAIGludCBpbnRlbF9iYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKHN0cnVj dCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcikKPj4gIAkJYmFja2xpZ2h0X2RldmljZV9yZWdp c3RlcigiaW50ZWxfYmFja2xpZ2h0IiwKPj4gIAkJCQkJICBjb25uZWN0b3ItPmJhc2Uua2RldiwK Pj4gIAkJCQkJICBjb25uZWN0b3IsCj4+IC0JCQkJCSAgJmludGVsX2JhY2tsaWdodF9kZXZpY2Vf b3BzLCAmcHJvcHMpOwo+PiArCQkJCQkgICZpbnRlbF9iYWNrbGlnaHRfZGV2aWNlX29wcywgJnBy b3BzLAo+PiArCQkJCQkgIDApOwo+PiAgCj4+ICAJaWYgKElTX0VSUihwYW5lbC0+YmFja2xpZ2h0 LmRldmljZSkpIHsKPj4gIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgYmFja2xpZ2h0 OiAlbGRcbiIsCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1 X2JhY2tsaWdodC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iYWNrbGlnaHQu Ywo+PiBpbmRleCBmNTEwMWJlODA2Y2IuLjVmZDdlNzQ5OGYxMyAxMDA2NDQKPj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iYWNrbGlnaHQuYwo+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JhY2tsaWdodC5jCj4+IEBAIC04Miw3ICs4Miw4IEBA IG52NDBfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPj4g IAlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKPj4gIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9 IDMxOwo+PiAgCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigibnZfYmFja2xpZ2h0Iiwg Y29ubmVjdG9yLT5rZGV2LCBkcm0sCj4+IC0JCQkJICAgICAgICZudjQwX2JsX29wcywgJnByb3Bz KTsKPj4gKwkJCQkgICAgICAgJm52NDBfYmxfb3BzLCAmcHJvcHMsCj4+ICsJCQkJICAgICAgIEJB Q0tMSUdIVF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCWlmIChJU19FUlIoYmQpKQo+PiAgCQly ZXR1cm4gUFRSX0VSUihiZCk7Cj4+ICAJZHJtLT5iYWNrbGlnaHQgPSBiZDsKPj4gQEAgLTIwNCw3 ICsyMDUsOCBAQCBudjUwX2JhY2tsaWdodF9pbml0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IpCj4+ICAJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7Cj4+ICAJcHJvcHMubWF4X2Jy aWdodG5lc3MgPSAxMDA7Cj4+ICAJYmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJudl9i YWNrbGlnaHQiLCBjb25uZWN0b3ItPmtkZXYsCj4+IC0JCQkJICAgICAgIG52X2VuY29kZXIsIG9w cywgJnByb3BzKTsKPj4gKwkJCQkgICAgICAgbnZfZW5jb2Rlciwgb3BzLCAmcHJvcHMsCj4+ICsJ CQkJICAgICAgIEJBQ0tMSUdIVF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCWlmIChJU19FUlIo YmQpKQo+PiAgCQlyZXR1cm4gUFRSX0VSUihiZCk7Cj4+ICAKPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9vbWFwZHJtL2Rpc3BsYXlzL3BhbmVsLWRzaS1jbS5jIGIvZHJpdmVycy9ncHUv ZHJtL29tYXBkcm0vZGlzcGxheXMvcGFuZWwtZHNpLWNtLmMKPj4gaW5kZXggMWIwY2YyZDgyMjRi Li4xMDUxMWJkZDk5MzYgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rp c3BsYXlzL3BhbmVsLWRzaS1jbS5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rp c3BsYXlzL3BhbmVsLWRzaS1jbS5jCj4+IEBAIC0xMjYwLDcgKzEyNjAsOCBAQCBzdGF0aWMgaW50 IGRzaWNtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICAKPj4gIAkJcHJv cHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7Cj4+ICAJCWJsZGV2ID0gYmFja2xpZ2h0X2RldmljZV9y ZWdpc3RlcihkZXZfbmFtZShkZXYpLAo+PiAtCQkJCWRldiwgZGRhdGEsICZkc2ljbV9ibF9vcHMs ICZwcm9wcyk7Cj4+ICsJCQkJZGV2LCBkZGF0YSwgJmRzaWNtX2JsX29wcywgJnByb3BzLAo+PiAr CQkJCUJBQ0tMSUdIVF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCQlpZiAoSVNfRVJSKGJsZGV2 KSkgewo+PiAgCQkJciA9IFBUUl9FUlIoYmxkZXYpOwo+PiAgCQkJZ290byBlcnJfYmw7Cj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kaXNwbGF5cy9wYW5lbC1zb255LWFj eDU2NWFrbS5jIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvcGFuZWwtc29ueS1h Y3g1NjVha20uYwo+PiBpbmRleCAxNTdjNTEyMjA1ZDEuLjlmMzYyMjkxMDUxMSAxMDA2NDQKPj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvcGFuZWwtc29ueS1hY3g1NjVh a20uYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kaXNwbGF5cy9wYW5lbC1zb255 LWFjeDU2NWFrbS5jCj4+IEBAIC04MTcsNyArODE3LDggQEAgc3RhdGljIGludCBhY3g1NjVha21f cHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKPj4gIAlwcm9wcy50eXBlID0gQkFDS0xJR0hU X1JBVzsKPj4gIAo+PiAgCWJsZGV2ID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigiYWN4NTY1 YWttIiwgJmRkYXRhLT5zcGktPmRldiwKPj4gLQkJCWRkYXRhLCAmYWN4NTY1YWttX2JsX29wcywg JnByb3BzKTsKPj4gKwkJCWRkYXRhLCAmYWN4NTY1YWttX2JsX29wcywgJnByb3BzLAo+PiArCQkJ QkFDS0xJR0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VSUihibGRldikpIHsK Pj4gIAkJciA9IFBUUl9FUlIoYmxkZXYpOwo+PiAgCQlnb3RvIGVycl9yZWdfYmw7Cj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2VuY29kZXJzLmMgYi9kcml2 ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2VuY29kZXJzLmMKPj4gaW5kZXggNTg3Y2FlNGU3 M2M5Li4zNjc2YmE2ZTE2ZWUgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24v YXRvbWJpb3NfZW5jb2RlcnMuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21i aW9zX2VuY29kZXJzLmMKPj4gQEAgLTIxNCw3ICsyMTQsOCBAQCB2b2lkIHJhZGVvbl9hdG9tX2Jh Y2tsaWdodF9pbml0KHN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIsCj4+ICAJ c25wcmludGYoYmxfbmFtZSwgc2l6ZW9mKGJsX25hbWUpLAo+PiAgCQkgInJhZGVvbl9ibCVkIiwg ZGV2LT5wcmltYXJ5LT5pbmRleCk7Cj4+ICAJYmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVy KGJsX25hbWUsIGRybV9jb25uZWN0b3ItPmtkZXYsCj4+IC0JCQkJICAgICAgIHBkYXRhLCAmcmFk ZW9uX2F0b21fYmFja2xpZ2h0X29wcywgJnByb3BzKTsKPj4gKwkJCQkgICAgICAgcGRhdGEsICZy YWRlb25fYXRvbV9iYWNrbGlnaHRfb3BzLCAmcHJvcHMsCj4+ICsJCQkJICAgICAgIEJBQ0tMSUdI VF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCWlmIChJU19FUlIoYmQpKSB7Cj4+ICAJCURSTV9F UlJPUigiQmFja2xpZ2h0IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwo+PiAgCQlnb3RvIGVycm9y Owo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2Vu Y29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMu Ywo+PiBpbmRleCA4NjhjM2JhMmVmYWEuLjI3OTA4NjI0YzgxOCAxMDA2NDQKPj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKPj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKPj4gQEAgLTM5Myw3 ICszOTMsOCBAQCB2b2lkIHJhZGVvbl9sZWdhY3lfYmFja2xpZ2h0X2luaXQoc3RydWN0IHJhZGVv bl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciwKPj4gIAlzbnByaW50ZihibF9uYW1lLCBzaXplb2Yo YmxfbmFtZSksCj4+ICAJCSAicmFkZW9uX2JsJWQiLCBkZXYtPnByaW1hcnktPmluZGV4KTsKPj4g IAliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoYmxfbmFtZSwgZHJtX2Nvbm5lY3Rvci0+ a2RldiwKPj4gLQkJCQkgICAgICAgcGRhdGEsICZyYWRlb25fYmFja2xpZ2h0X29wcywgJnByb3Bz KTsKPj4gKwkJCQkgICAgICAgcGRhdGEsICZyYWRlb25fYmFja2xpZ2h0X29wcywgJnByb3BzLAo+ PiArCQkJCSAgICAgICBCQUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJRU5UKTsKPj4gIAlpZiAoSVNf RVJSKGJkKSkgewo+PiAgCQlEUk1fRVJST1IoIkJhY2tsaWdodCByZWdpc3RyYXRpb24gZmFpbGVk XG4iKTsKPj4gIAkJZ290byBlcnJvcjsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9z aG1vYmlsZS9zaG1vYl9kcm1fYmFja2xpZ2h0LmMgYi9kcml2ZXJzL2dwdS9kcm0vc2htb2JpbGUv c2htb2JfZHJtX2JhY2tsaWdodC5jCj4+IGluZGV4IDMzZGQ0MWFmZWEwZS4uMWZmMTBmYWVkM2E3 IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vc2htb2JpbGUvc2htb2JfZHJtX2JhY2ts aWdodC5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9zaG1vYmlsZS9zaG1vYl9kcm1fYmFja2xp Z2h0LmMKPj4gQEAgLTY4LDcgKzY4LDggQEAgaW50IHNobW9iX2RybV9iYWNrbGlnaHRfaW5pdChz dHJ1Y3Qgc2htb2JfZHJtX2Nvbm5lY3RvciAqc2NvbikKPj4gIAkJcmV0dXJuIDA7Cj4+ICAKPj4g IAliYWNrbGlnaHQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKGJkYXRhLT5uYW1lLCBkZXYt PmRldiwgc2NvbiwKPj4gLQkJCQkJICAgICAgJnNobW9iX2RybV9iYWNrbGlnaHRfb3BzLCBOVUxM KTsKPj4gKwkJCQkJICAgICAgJnNobW9iX2RybV9iYWNrbGlnaHRfb3BzLCBOVUxMLAo+PiArCQkJ CQkgICAgICBCQUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJRU5UKTsKPj4gIAlpZiAoSVNfRVJSKGJh Y2tsaWdodCkpIHsKPj4gIAkJZGV2X2VycihkZXYtPmRldiwgInVuYWJsZSB0byByZWdpc3RlciBi YWNrbGlnaHQgZGV2aWNlOiAlbGRcbiIsCj4+ICAJCQlQVFJfRVJSKGJhY2tsaWdodCkpOwo+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXBpY29sY2RfYmFja2xpZ2h0LmMgYi9kcml2ZXJz L2hpZC9oaWQtcGljb2xjZF9iYWNrbGlnaHQuYwo+PiBpbmRleCA4MDg4MDdhZDM4OGYuLjA2NTk3 ZjUwYzMyYiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9oaWQvaGlkLXBpY29sY2RfYmFja2xpZ2h0 LmMKPj4gKysrIGIvZHJpdmVycy9oaWQvaGlkLXBpY29sY2RfYmFja2xpZ2h0LmMKPj4gQEAgLTc3 LDcgKzc3LDggQEAgaW50IHBpY29sY2RfaW5pdF9iYWNrbGlnaHQoc3RydWN0IHBpY29sY2RfZGF0 YSAqZGF0YSwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCkKPj4gIAlwcm9wcy50eXBlID0gQkFD S0xJR0hUX1JBVzsKPj4gIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDB4ZmY7Cj4+ICAJYmRldiA9 IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoZGV2X25hbWUoZGV2KSwgZGV2LCBkYXRhLAo+PiAt CQkJJnBpY29sY2RfYmxvcHMsICZwcm9wcyk7Cj4+ICsJCQkmcGljb2xjZF9ibG9wcywgJnByb3Bz LAo+PiArCQkJQkFDS0xJR0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VSUihi ZGV2KSkgewo+PiAgCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBiYWNrbGlnaHRc biIpOwo+PiAgCQlyZXR1cm4gUFRSX0VSUihiZGV2KTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bWFjaW50b3NoL3ZpYS1wbXUtYmFja2xpZ2h0LmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11 LWJhY2tsaWdodC5jCj4+IGluZGV4IDZmNjg1MzdjOTNjZS4uZGEwZmIyZTg3Zjc1IDEwMDY0NAo+ PiAtLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWJhY2tsaWdodC5jCj4+ICsrKyBiL2Ry aXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtYmFja2xpZ2h0LmMKPj4gQEAgLTE2MCw3ICsxNjAsOCBA QCB2b2lkIF9faW5pdCBwbXVfYmFja2xpZ2h0X2luaXQoKQo+PiAgCXByb3BzLnR5cGUgPSBCQUNL TElHSFRfUExBVEZPUk07Cj4+ICAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBGQl9CQUNLTElHSFRf TEVWRUxTIC0gMTsKPj4gIAliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIobmFtZSwgTlVM TCwgTlVMTCwgJnBtdV9iYWNrbGlnaHRfZGF0YSwKPj4gLQkJCQkgICAgICAgJnByb3BzKTsKPj4g KwkJCQkgICAgICAgJnByb3BzLAo+PiArCQkJCSAgICAgICBCQUNLTElHSFRfUkVHSVNURVJfRkJf Q0xJRU5UKTsKPj4gIAlpZiAoSVNfRVJSKGJkKSkgewo+PiAgCQlwcmludGsoS0VSTl9FUlIgIlBN VSBCYWNrbGlnaHQgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7Cj4+ICAJCXJldHVybjsKPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMgYi9kcml2ZXJzL3BsYXRm b3JtL3g4Ni9hY2VyLXdtaS5jCj4+IGluZGV4IDc5ZDY0ZWEwMGJmYi4uMGIxN2M1MTQ2MTc1IDEw MDY0NAo+PiAtLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCj4+ICsrKyBiL2Ry aXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKPj4gQEAgLTE0MTksNyArMTQxOSw4IEBAIHN0 YXRpYyBpbnQgYWNlcl9iYWNrbGlnaHRfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+ICAJcHJv cHMudHlwZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKPj4gIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9 IG1heF9icmlnaHRuZXNzOwo+PiAgCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigiYWNl ci13bWkiLCBkZXYsIE5VTEwsICZhY2VyX2JsX29wcywKPj4gLQkJCQkgICAgICAgJnByb3BzKTsK Pj4gKwkJCQkgICAgICAgJnByb3BzLAo+PiArCQkJCSAgICAgICBCQUNLTElHSFRfUkVHSVNURVJf RkJfQ0xJRU5UKTsKPj4gIAlpZiAoSVNfRVJSKGJkKSkgewo+PiAgCQlwcl9lcnIoIkNvdWxkIG5v dCByZWdpc3RlciBBY2VyIGJhY2tsaWdodCBkZXZpY2VcbiIpOwo+PiAgCQlhY2VyX2JhY2tsaWdo dF9kZXZpY2UgPSBOVUxMOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXBw bGUtZ211eC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXBwbGUtZ211eC5jCj4+IGluZGV4IDQw MzRkMmQ0YzUwNy4uZTA0MWJiZTE0ZGY1IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3BsYXRmb3Jt L3g4Ni9hcHBsZS1nbXV4LmMKPj4gKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXBwbGUtZ211 eC5jCj4+IEBAIC02OTgsNyArNjk4LDggQEAgc3RhdGljIGludCBnbXV4X3Byb2JlKHN0cnVjdCBw bnBfZGV2ICpwbnAsIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICppZCkKPj4gIAkJcHJvcHMu bWF4X2JyaWdodG5lc3MgPSBHTVVYX01BWF9CUklHSFRORVNTOwo+PiAgCj4+ICAJYmRldiA9IGJh Y2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoImdtdXhfYmFja2xpZ2h0IiwgJnBucC0+ZGV2LAo+PiAt CQkJCQkgZ211eF9kYXRhLCAmZ211eF9ibF9vcHMsICZwcm9wcyk7Cj4+ICsJCQkJCSBnbXV4X2Rh dGEsICZnbXV4X2JsX29wcywgJnByb3BzLAo+PiArCQkJCQkgQkFDS0xJR0hUX1JFR0lTVEVSX0ZC X0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VSUihiZGV2KSkgewo+PiAgCQlyZXQgPSBQVFJfRVJSKGJk ZXYpOwo+PiAgCQlnb3RvIGVycl9yZWxlYXNlOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0 Zm9ybS94ODYvYXN1cy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtbGFwdG9w LmMKPj4gaW5kZXggMTVmMTMxMTQ2NTAxLi45OGYyNmNmZjljOTYgMTAwNjQ0Cj4+IC0tLSBhL2Ry aXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtbGFwdG9wLmMKPj4gKysrIGIvZHJpdmVycy9wbGF0Zm9y bS94ODYvYXN1cy1sYXB0b3AuYwo+PiBAQCAtODMxLDcgKzgzMSw4IEBAIHN0YXRpYyBpbnQgYXN1 c19iYWNrbGlnaHRfaW5pdChzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMpCj4+ICAKPj4gIAliZCA9 IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoQVNVU19MQVBUT1BfRklMRSwKPj4gIAkJCQkgICAg ICAgJmFzdXMtPnBsYXRmb3JtX2RldmljZS0+ZGV2LCBhc3VzLAo+PiAtCQkJCSAgICAgICAmYXN1 c2JsX29wcywgJnByb3BzKTsKPj4gKwkJCQkgICAgICAgJmFzdXNibF9vcHMsICZwcm9wcywKPj4g KwkJCQkgICAgICAgQkFDS0xJR0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VS UihiZCkpIHsKPj4gIAkJcHJfZXJyKCJDb3VsZCBub3QgcmVnaXN0ZXIgYXN1cyBiYWNrbGlnaHQg ZGV2aWNlXG4iKTsKPj4gIAkJYXN1cy0+YmFja2xpZ2h0X2RldmljZSA9IE5VTEw7Cj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9y bS94ODYvYXN1cy13bWkuYwo+PiBpbmRleCBhMjZkY2EzNjQwZWEuLmNhODk3YmM5NDYyNiAxMDA2 NDQKPj4gLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy13bWkuYwo+PiArKysgYi9kcml2 ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLXdtaS5jCj4+IEBAIC0xNTY1LDcgKzE1NjUsOCBAQCBzdGF0 aWMgaW50IGFzdXNfd21pX2JhY2tsaWdodF9pbml0KHN0cnVjdCBhc3VzX3dtaSAqYXN1cykKPj4g IAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IG1heDsKPj4gIAliZCA9IGJhY2tsaWdodF9kZXZpY2Vf cmVnaXN0ZXIoYXN1cy0+ZHJpdmVyLT5uYW1lLAo+PiAgCQkJCSAgICAgICAmYXN1cy0+cGxhdGZv cm1fZGV2aWNlLT5kZXYsIGFzdXMsCj4+IC0JCQkJICAgICAgICZhc3VzX3dtaV9ibF9vcHMsICZw cm9wcyk7Cj4+ICsJCQkJICAgICAgICZhc3VzX3dtaV9ibF9vcHMsICZwcm9wcywKPj4gKwkJCQkg ICAgICAgQkFDS0xJR0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VSUihiZCkp IHsKPj4gIAkJcHJfZXJyKCJDb3VsZCBub3QgcmVnaXN0ZXIgYmFja2xpZ2h0IGRldmljZVxuIik7 Cj4+ICAJCXJldHVybiBQVFJfRVJSKGJkKTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZv cm0veDg2L2NsYXNzbWF0ZS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NsYXNzbWF0 ZS1sYXB0b3AuYwo+PiBpbmRleCA1NWNmMTBiYzc4MTcuLjYwY2Y3YTBjNzE3MCAxMDA2NDQKPj4g LS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvY2xhc3NtYXRlLWxhcHRvcC5jCj4+ICsrKyBiL2Ry aXZlcnMvcGxhdGZvcm0veDg2L2NsYXNzbWF0ZS1sYXB0b3AuYwo+PiBAQCAtOTcwLDcgKzk3MCw4 IEBAIHN0YXRpYyBpbnQgY21wY19pcG1sX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGkpCj4+ ICAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSA3Owo+PiAgCWlwbWwtPmJkID0gYmFja2xpZ2h0X2Rl dmljZV9yZWdpc3RlcigiY21wY19ibCIsICZhY3BpLT5kZXYsCj4+ICAJCQkJCSAgICAgYWNwaS0+ aGFuZGxlLCAmY21wY19ibF9vcHMsCj4+IC0JCQkJCSAgICAgJnByb3BzKTsKPj4gKwkJCQkJICAg ICAmcHJvcHMsCj4+ICsJCQkJCSAgICAgQkFDS0xJR0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCk7Cj4+ ICAJaWYgKElTX0VSUihpcG1sLT5iZCkpIHsKPj4gIAkJcmV0dmFsID0gUFRSX0VSUihpcG1sLT5i ZCk7Cj4+ICAJCWdvdG8gb3V0X2JkOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94 ODYvY29tcGFsLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvY29tcGFsLWxhcHRvcC5j Cj4+IGluZGV4IGUxYzJiNmQ0YjI0YS4uOWE2NzVkM2I2ZmU1IDEwMDY0NAo+PiAtLS0gYS9kcml2 ZXJzL3BsYXRmb3JtL3g4Ni9jb21wYWwtbGFwdG9wLmMKPj4gKysrIGIvZHJpdmVycy9wbGF0Zm9y bS94ODYvY29tcGFsLWxhcHRvcC5jCj4+IEBAIC0xMDA4LDcgKzEwMDgsOCBAQCBzdGF0aWMgaW50 IF9faW5pdCBjb21wYWxfaW5pdCh2b2lkKQo+PiAgCQljb21wYWxibF9kZXZpY2UgPSBiYWNrbGln aHRfZGV2aWNlX3JlZ2lzdGVyKERSSVZFUl9OQU1FLAo+PiAgCQkJCQkJCSAgICBOVUxMLCBOVUxM LAo+PiAgCQkJCQkJCSAgICAmY29tcGFsYmxfb3BzLAo+PiAtCQkJCQkJCSAgICAmcHJvcHMpOwo+ PiArCQkJCQkJCSAgICAmcHJvcHMsCj4+ICsJCQkJCQkJICAgIEJBQ0tMSUdIVF9SRUdJU1RFUl9G Ql9DTElFTlQpOwo+PiAgCQlpZiAoSVNfRVJSKGNvbXBhbGJsX2RldmljZSkpCj4+ICAJCQlyZXR1 cm4gUFRSX0VSUihjb21wYWxibF9kZXZpY2UpOwo+PiAgCX0KPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxs LWxhcHRvcC5jCj4+IGluZGV4IDJjMmYwMmIyZTA4YS4uNTc3MTJhOTcwZjhkIDEwMDY0NAo+PiAt LS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCj4+ICsrKyBiL2RyaXZlcnMv cGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKPj4gQEAgLTIwMzUsNyArMjAzNSw4IEBAIHN0YXRp YyBpbnQgX19pbml0IGRlbGxfaW5pdCh2b2lkKQo+PiAgCQkJCQkJCQkgICZwbGF0Zm9ybV9kZXZp Y2UtPmRldiwKPj4gIAkJCQkJCQkJICBOVUxMLAo+PiAgCQkJCQkJCQkgICZkZWxsX29wcywKPj4g LQkJCQkJCQkJICAmcHJvcHMpOwo+PiArCQkJCQkJCQkgICZwcm9wcywKPj4gKwkJCQkJCQkJICBC QUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJRU5UKTsKPj4gIAo+PiAgCQlpZiAoSVNfRVJSKGRlbGxf YmFja2xpZ2h0X2RldmljZSkpIHsKPj4gIAkJCXJldCA9IFBUUl9FUlIoZGVsbF9iYWNrbGlnaHRf ZGV2aWNlKTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRv cC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMKPj4gaW5kZXggOGNkZjMx NWY5NzMwLi5kYThhZGEyYmE0MjkgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2 L2VlZXBjLWxhcHRvcC5jCj4+ICsrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRv cC5jCj4+IEBAIC0xMTU5LDcgKzExNTksOCBAQCBzdGF0aWMgaW50IGVlZXBjX2JhY2tsaWdodF9p bml0KHN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjKQo+PiAgCXByb3BzLm1heF9icmlnaHRuZXNz ID0gMTU7Cj4+ICAJYmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKEVFRVBDX0xBUFRPUF9G SUxFLAo+PiAgCQkJCSAgICAgICAmZWVlcGMtPnBsYXRmb3JtX2RldmljZS0+ZGV2LCBlZWVwYywK Pj4gLQkJCQkgICAgICAgJmVlZXBjYmxfb3BzLCAmcHJvcHMpOwo+PiArCQkJCSAgICAgICAmZWVl cGNibF9vcHMsICZwcm9wcywKPj4gKwkJCQkgICAgICAgQkFDS0xJR0hUX1JFR0lTVEVSX0ZCX0NM SUVOVCk7Cj4+ICAJaWYgKElTX0VSUihiZCkpIHsKPj4gIAkJcHJfZXJyKCJDb3VsZCBub3QgcmVn aXN0ZXIgZWVlcGMgYmFja2xpZ2h0IGRldmljZVxuIik7Cj4+ICAJCWVlZXBjLT5iYWNrbGlnaHRf ZGV2aWNlID0gTlVMTDsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0 c3UtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCj4+IGlu ZGV4IGNlNDFiYzM0Mjg4ZC4uYjU0ZTdlYTJlOTY4IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3Bs YXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCj4+ICsrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2 L2Z1aml0c3UtbGFwdG9wLmMKPj4gQEAgLTExNjcsNyArMTE2Nyw4IEBAIHN0YXRpYyBpbnQgX19p bml0IGZ1aml0c3VfaW5pdCh2b2lkKQo+PiAgCQlmdWppdHN1LT5ibF9kZXZpY2UgPSBiYWNrbGln aHRfZGV2aWNlX3JlZ2lzdGVyKCJmdWppdHN1LWxhcHRvcCIsCj4+ICAJCQkJCQkJICAgICAgIE5V TEwsIE5VTEwsCj4+ICAJCQkJCQkJICAgICAgICZmdWppdHN1Ymxfb3BzLAo+PiAtCQkJCQkJCSAg ICAgICAmcHJvcHMpOwo+PiArCQkJCQkJCSAgICAgICAmcHJvcHMsCj4+ICsJCQkJCQkJICAgICAg IEJBQ0tMSUdIVF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCQlpZiAoSVNfRVJSKGZ1aml0c3Ut PmJsX2RldmljZSkpIHsKPj4gIAkJCXJldCA9IFBUUl9FUlIoZnVqaXRzdS0+YmxfZGV2aWNlKTsK Pj4gIAkJCWZ1aml0c3UtPmJsX2RldmljZSA9IE5VTEw7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3BsYXRmb3JtL3g4Ni9pZGVhcGFkLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaWRl YXBhZC1sYXB0b3AuYwo+PiBpbmRleCBkMWEwOTFiOTMxOTIuLjk5ZGUwMmVmZDk3MSAxMDA2NDQK Pj4gLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaWRlYXBhZC1sYXB0b3AuYwo+PiArKysgYi9k cml2ZXJzL3BsYXRmb3JtL3g4Ni9pZGVhcGFkLWxhcHRvcC5jCj4+IEBAIC03MjYsNyArNzI2LDgg QEAgc3RhdGljIGludCBpZGVhcGFkX2JhY2tsaWdodF9pbml0KHN0cnVjdCBpZGVhcGFkX3ByaXZh dGUgKnByaXYpCj4+ICAJCQkJCSAgICAgICZwcml2LT5wbGF0Zm9ybV9kZXZpY2UtPmRldiwKPj4g IAkJCQkJICAgICAgcHJpdiwKPj4gIAkJCQkJICAgICAgJmlkZWFwYWRfYmFja2xpZ2h0X29wcywK Pj4gLQkJCQkJICAgICAgJnByb3BzKTsKPj4gKwkJCQkJICAgICAgJnByb3BzLAo+PiArCQkJCQkg ICAgICBCQUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJRU5UKTsKPj4gIAlpZiAoSVNfRVJSKGJsaWdo dGRldikpIHsKPj4gIAkJcHJfZXJyKCJDb3VsZCBub3QgcmVnaXN0ZXIgYmFja2xpZ2h0IGRldmlj ZVxuIik7Cj4+ICAJCXJldHVybiBQVFJfRVJSKGJsaWdodGRldik7Cj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9vYWt0cmFpbC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94 ODYvaW50ZWxfb2FrdHJhaWwuYwo+PiBpbmRleCA2YWEzM2M0YTgwOWYuLjMwM2U4ZTI3YTBiOSAx MDA2NDQKPj4gLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfb2FrdHJhaWwuYwo+PiAr KysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9vYWt0cmFpbC5jCj4+IEBAIC0yNTMsNyAr MjUzLDggQEAgc3RhdGljIGludCBvYWt0cmFpbF9iYWNrbGlnaHRfaW5pdCh2b2lkKQo+PiAgCWJk ID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihEUklWRVJfTkFNRSwKPj4gIAkJCQkgICAgICAg Jm9ha3RyYWlsX2RldmljZS0+ZGV2LCBOVUxMLAo+PiAgCQkJCSAgICAgICAmb2FrdHJhaWxfYmxf b3BzLAo+PiAtCQkJCSAgICAgICAmcHJvcHMpOwo+PiArCQkJCSAgICAgICAmcHJvcHMsCj4+ICsJ CQkJICAgICAgIEJBQ0tMSUdIVF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCj4+ICAJaWYgKElT X0VSUihiZCkpIHsKPj4gIAkJb2FrdHJhaWxfYmxfZGV2aWNlID0gTlVMTDsKPj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L21zaS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0v eDg2L21zaS1sYXB0b3AuYwo+PiBpbmRleCA0MjMxNzcwNDYyOWQuLjgxOTkwYmRhYjIyOSAxMDA2 NDQKPj4gLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLWxhcHRvcC5jCj4+ICsrKyBiL2Ry aXZlcnMvcGxhdGZvcm0veDg2L21zaS1sYXB0b3AuYwo+PiBAQCAtMTA3OCw3ICsxMDc4LDggQEAg c3RhdGljIGludCBfX2luaXQgbXNpX2luaXQodm9pZCkKPj4gIAkJcHJvcHMubWF4X2JyaWdodG5l c3MgPSBNU0lfTENEX0xFVkVMX01BWCAtIDE7Cj4+ICAJCW1zaWJsX2RldmljZSA9IGJhY2tsaWdo dF9kZXZpY2VfcmVnaXN0ZXIoIm1zaS1sYXB0b3AtYmwiLCBOVUxMLAo+PiAgCQkJCQkJCSBOVUxM LCAmbXNpYmxfb3BzLAo+PiAtCQkJCQkJCSAmcHJvcHMpOwo+PiArCQkJCQkJCSAmcHJvcHMsCj4+ ICsJCQkJCQkJIEJBQ0tMSUdIVF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCQlpZiAoSVNfRVJS KG1zaWJsX2RldmljZSkpCj4+ICAJCQlyZXR1cm4gUFRSX0VSUihtc2libF9kZXZpY2UpOwo+PiAg CX0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L21zaS13bWkuYyBiL2RyaXZl cnMvcGxhdGZvcm0veDg2L21zaS13bWkuYwo+PiBpbmRleCA5NzhlNmQ2NDA1NzIuLjUxNzQ1NzJh Nzg1OSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLXdtaS5jCj4+ICsr KyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L21zaS13bWkuYwo+PiBAQCAtMjQ3LDcgKzI0Nyw4IEBA IHN0YXRpYyBpbnQgX19pbml0IG1zaV93bWlfYmFja2xpZ2h0X3NldHVwKHZvaWQpCj4+ICAJcHJv cHMubWF4X2JyaWdodG5lc3MgPSBBUlJBWV9TSVpFKGJhY2tsaWdodF9tYXApIC0gMTsKPj4gIAli YWNrbGlnaHQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKERSVl9OQU1FLCBOVUxMLCBOVUxM LAo+PiAgCQkJCQkgICAgICAmbXNpX2JhY2tsaWdodF9vcHMsCj4+IC0JCQkJCSAgICAgICZwcm9w cyk7Cj4+ICsJCQkJCSAgICAgICZwcm9wcywKPj4gKwkJCQkJICAgICAgQkFDS0xJR0hUX1JFR0lT VEVSX0ZCX0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VSUihiYWNrbGlnaHQpKQo+PiAgCQlyZXR1cm4g UFRSX0VSUihiYWNrbGlnaHQpOwo+PiAgCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3Jt L3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMt bGFwdG9wLmMKPj4gaW5kZXggM2Y4NzA5NzIyNDdjLi4wMDY3OTgxNGQ4YzMgMTAwNjQ0Cj4+IC0t LSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYwo+PiArKysgYi9kcml2 ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMKPj4gQEAgLTYxOCw3ICs2MTgsOCBA QCBzdGF0aWMgaW50IGFjcGlfcGNjX2hvdGtleV9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZp Y2UpCj4+ICAJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKPj4gIAlwcm9wcy5tYXhf YnJpZ2h0bmVzcyA9IHBjYy0+c2luZltTSU5GX0FDX01BWF9CUklHSFRdOwo+PiAgCXBjYy0+YmFj a2xpZ2h0ID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigicGFuYXNvbmljIiwgTlVMTCwgcGNj LAo+PiAtCQkJCQkJICAgJnBjY19iYWNrbGlnaHRfb3BzLCAmcHJvcHMpOwo+PiArCQkJCQkJICAg JnBjY19iYWNrbGlnaHRfb3BzLCAmcHJvcHMsCj4+ICsJCQkJCQkgICBCQUNLTElHSFRfUkVHSVNU RVJfRkJfQ0xJRU5UKTsKPj4gIAlpZiAoSVNfRVJSKHBjYy0+YmFja2xpZ2h0KSkgewo+PiAgCQly ZXN1bHQgPSBQVFJfRVJSKHBjYy0+YmFja2xpZ2h0KTsKPj4gIAkJZ290byBvdXRfaW5wdXQ7Cj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zYW1zdW5nLWxhcHRvcC5jIGIvZHJp dmVycy9wbGF0Zm9ybS94ODYvc2Ftc3VuZy1sYXB0b3AuYwo+PiBpbmRleCA4YzE0NmUyYjY3Mjcu LjA5ODY4NzA2ZGZkNiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc2Ftc3Vu Zy1sYXB0b3AuYwo+PiArKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zYW1zdW5nLWxhcHRvcC5j Cj4+IEBAIC0xMjAwLDcgKzEyMDAsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBzYW1zdW5nX2JhY2ts aWdodF9pbml0KHN0cnVjdCBzYW1zdW5nX2xhcHRvcCAqc2Ftc3VuZykKPj4gIAliZCA9IGJhY2ts aWdodF9kZXZpY2VfcmVnaXN0ZXIoInNhbXN1bmciLAo+PiAgCQkJCSAgICAgICAmc2Ftc3VuZy0+ cGxhdGZvcm1fZGV2aWNlLT5kZXYsCj4+ICAJCQkJICAgICAgIHNhbXN1bmcsICZiYWNrbGlnaHRf b3BzLAo+PiAtCQkJCSAgICAgICAmcHJvcHMpOwo+PiArCQkJCSAgICAgICAmcHJvcHMsCj4+ICsJ CQkJICAgICAgIEJBQ0tMSUdIVF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCWlmIChJU19FUlIo YmQpKQo+PiAgCQlyZXR1cm4gUFRSX0VSUihiZCk7Cj4+ICAKPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvcGxhdGZvcm0veDg2L3NhbXN1bmctcTEwLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zYW1z dW5nLXExMC5jCj4+IGluZGV4IGU2YWFjNzI1YTBhZi4uY2MyNWQwNDE2MjM2IDEwMDY0NAo+PiAt LS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zYW1zdW5nLXExMC5jCj4+ICsrKyBiL2RyaXZlcnMv cGxhdGZvcm0veDg2L3NhbXN1bmctcTEwLmMKPj4gQEAgLTYwLDcgKzYwLDggQEAgc3RhdGljIGlu dCBzYW1zdW5ncTEwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICAJcHJv cHMudHlwZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKPj4gIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9 IFNBTVNVTkdRMTBfQkxfTUFYX0lOVEVOU0lUWTsKPj4gIAliZCA9IGJhY2tsaWdodF9kZXZpY2Vf cmVnaXN0ZXIoInNhbXN1bmciLCAmcGRldi0+ZGV2LCBOVUxMLAo+PiAtCQkJCSAgICAgICAmc2Ft c3VuZ3ExMF9ibF9vcHMsICZwcm9wcyk7Cj4+ICsJCQkJICAgICAgICZzYW1zdW5ncTEwX2JsX29w cywgJnByb3BzLAo+PiArCQkJCSAgICAgICBCQUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJRU5UKTsK Pj4gIAlpZiAoSVNfRVJSKGJkKSkKPj4gIAkJcmV0dXJuIFBUUl9FUlIoYmQpOwo+PiAgCj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jIGIvZHJpdmVycy9w bGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwo+PiBpbmRleCAxZGJhMzU5OGNmY2IuLmEyMGYzMDYy MWU1ZiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwo+ PiArKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCj4+IEBAIC0zMTU4LDcg KzMxNTgsOCBAQCBzdGF0aWMgdm9pZCBzb255X25jX2JhY2tsaWdodF9zZXR1cCh2b2lkKQo+PiAg CXByb3BzLm1heF9icmlnaHRuZXNzID0gbWF4X2JyaWdodG5lc3M7Cj4+ICAJc29ueV9ibF9wcm9w cy5kZXYgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJzb255IiwgTlVMTCwKPj4gIAkJCQkJ CSAgICAgICZzb255X2JsX3Byb3BzLAo+PiAtCQkJCQkJICAgICAgb3BzLCAmcHJvcHMpOwo+PiAr CQkJCQkJICAgICAgb3BzLCAmcHJvcHMsCj4+ICsJCQkJCQkgICAgICBCQUNLTElHSFRfUkVHSVNU RVJfRkJfQ0xJRU5UKTsKPj4gIAo+PiAgCWlmIChJU19FUlIoc29ueV9ibF9wcm9wcy5kZXYpKSB7 Cj4+ICAJCXByX3dhcm4oInVuYWJsZSB0byByZWdpc3RlciBiYWNrbGlnaHQgZGV2aWNlXG4iKTsK Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYyBiL2Ry aXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwo+PiBpbmRleCBiNjVjZTc1MTk0MTEu Ljk4N2VmODliMTFkYSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtw YWRfYWNwaS5jCj4+ICsrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwo+ PiBAQCAtNjgyMSw3ICs2ODIxLDggQEAgc3RhdGljIGludCBfX2luaXQgYnJpZ2h0bmVzc19pbml0 KHN0cnVjdCBpYm1faW5pdF9zdHJ1Y3QgKmlpYm0pCj4+ICAJaWJtX2JhY2tsaWdodF9kZXZpY2Ug PSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKFRQQUNQSV9CQUNLTElHSFRfREVWX05BTUUsCj4+ ICAJCQkJCQkJIE5VTEwsIE5VTEwsCj4+ICAJCQkJCQkJICZpYm1fYmFja2xpZ2h0X2RhdGEsCj4+ IC0JCQkJCQkJICZwcm9wcyk7Cj4+ICsJCQkJCQkJICZwcm9wcywKPj4gKwkJCQkJCQkgQkFDS0xJ R0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VSUihpYm1fYmFja2xpZ2h0X2Rl dmljZSkpIHsKPj4gIAkJaW50IHJjID0gUFRSX0VSUihpYm1fYmFja2xpZ2h0X2RldmljZSk7Cj4+ ICAJCWlibV9iYWNrbGlnaHRfZGV2aWNlID0gTlVMTDsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv cGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGli YV9hY3BpLmMKPj4gaW5kZXggMDFlMTJkMjIxYThiLi42YjBmMjMzNjAwOTQgMTAwNjQ0Cj4+IC0t LSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jCj4+ICsrKyBiL2RyaXZlcnMv cGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jCj4+IEBAIC0yODQwLDcgKzI4NDAsOCBAQCBzdGF0 aWMgaW50IHRvc2hpYmFfYWNwaV9zZXR1cF9iYWNrbGlnaHQoc3RydWN0IHRvc2hpYmFfYWNwaV9k ZXYgKmRldikKPj4gIAkJCQkJCSAgICAgICAmZGV2LT5hY3BpX2Rldi0+ZGV2LAo+PiAgCQkJCQkJ ICAgICAgIGRldiwKPj4gIAkJCQkJCSAgICAgICAmdG9zaGliYV9iYWNrbGlnaHRfZGF0YSwKPj4g LQkJCQkJCSAgICAgICAmcHJvcHMpOwo+PiArCQkJCQkJICAgICAgICZwcm9wcywKPj4gKwkJCQkJ CSAgICAgICBCQUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJRU5UKTsKPj4gIAlpZiAoSVNfRVJSKGRl di0+YmFja2xpZ2h0X2RldikpIHsKPj4gIAkJcmV0ID0gUFRSX0VSUihkZXYtPmJhY2tsaWdodF9k ZXYpOwo+PiAgCQlwcl9lcnIoIkNvdWxkIG5vdCByZWdpc3RlciB0b3NoaWJhIGJhY2tsaWdodCBk ZXZpY2VcbiIpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ZidGZ0L2ZiX3NzZDEz NTEuYyBiL2RyaXZlcnMvc3RhZ2luZy9mYnRmdC9mYl9zc2QxMzUxLmMKPj4gaW5kZXggY2VmMzNl NDM5ZjQ2Li42YTE5NGZhZjY0NDggMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mYnRm dC9mYl9zc2QxMzUxLmMKPj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL2ZidGZ0L2ZiX3NzZDEzNTEu Ywo+PiBAQCAtMjEwLDcgKzIxMCw4IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyX29uYm9hcmRfYmFj a2xpZ2h0KHN0cnVjdCBmYnRmdF9wYXIgKnBhcikKPj4gIAlibF9wcm9wcy5wb3dlciA9IEZCX0JM QU5LX1BPV0VSRE9XTjsKPj4gIAo+PiAgCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rlcihk ZXZfZHJpdmVyX3N0cmluZyhwYXItPmluZm8tPmRldmljZSksCj4+IC0JCQkJcGFyLT5pbmZvLT5k ZXZpY2UsIHBhciwgJmJsX29wcywgJmJsX3Byb3BzKTsKPj4gKwkJCQlwYXItPmluZm8tPmRldmlj ZSwgcGFyLCAmYmxfb3BzLCAmYmxfcHJvcHMsCj4+ICsJCQkJQkFDS0xJR0hUX1JFR0lTVEVSX0ZC X0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VSUihiZCkpIHsKPj4gIAkJZGV2X2VycihwYXItPmluZm8t PmRldmljZSwKPj4gIAkJCSJjYW5ub3QgcmVnaXN0ZXIgYmFja2xpZ2h0IGRldmljZSAoJWxkKVxu IiwKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mYnRmdC9mYl93YXR0ZXJvdHQuYyBi L2RyaXZlcnMvc3RhZ2luZy9mYnRmdC9mYl93YXR0ZXJvdHQuYwo+PiBpbmRleCBmOGNiNjEwYTdi NjkuLmIyNDkxMzY4ODAxNCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9zdGFnaW5nL2ZidGZ0L2Zi X3dhdHRlcm90dC5jCj4+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9mYnRmdC9mYl93YXR0ZXJvdHQu Ywo+PiBAQCAtMjU5LDcgKzI1OSw4IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyX2NoaXBfYmFja2xp Z2h0KHN0cnVjdCBmYnRmdF9wYXIgKnBhcikKPj4gIAlibF9wcm9wcy5icmlnaHRuZXNzID0gREVG QVVMVF9CUklHSFRORVNTOwo+PiAgCj4+ICAJYmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVy KGRldl9kcml2ZXJfc3RyaW5nKHBhci0+aW5mby0+ZGV2aWNlKSwKPj4gLQkJCQlwYXItPmluZm8t PmRldmljZSwgcGFyLCAmYmxfb3BzLCAmYmxfcHJvcHMpOwo+PiArCQkJCXBhci0+aW5mby0+ZGV2 aWNlLCBwYXIsICZibF9vcHMsICZibF9wcm9wcywKPj4gKwkJCQlCQUNLTElHSFRfUkVHSVNURVJf RkJfQ0xJRU5UKTsKPj4gIAlpZiAoSVNfRVJSKGJkKSkgewo+PiAgCQlkZXZfZXJyKHBhci0+aW5m by0+ZGV2aWNlLAo+PiAgCQkJImNhbm5vdCByZWdpc3RlciBiYWNrbGlnaHQgZGV2aWNlICglbGQp XG4iLAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ZidGZ0L2ZidGZ0LWNvcmUuYyBi L2RyaXZlcnMvc3RhZ2luZy9mYnRmdC9mYnRmdC1jb3JlLmMKPj4gaW5kZXggMGMxYTc3Y2FmZTE0 Li42MWM2N2IwNzliOTAgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mYnRmdC9mYnRm dC1jb3JlLmMKPj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL2ZidGZ0L2ZidGZ0LWNvcmUuYwo+PiBA QCAtMjk5LDcgKzI5OSw4IEBAIHZvaWQgZmJ0ZnRfcmVnaXN0ZXJfYmFja2xpZ2h0KHN0cnVjdCBm YnRmdF9wYXIgKnBhcikKPj4gIAkJYmxfcHJvcHMuc3RhdGUgfD0gQkxfQ09SRV9EUklWRVIxOwo+ PiAgCj4+ICAJYmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKGRldl9kcml2ZXJfc3RyaW5n KHBhci0+aW5mby0+ZGV2aWNlKSwKPj4gLQkJCQlwYXItPmluZm8tPmRldmljZSwgcGFyLCAmZmJ0 ZnRfYmxfb3BzLCAmYmxfcHJvcHMpOwo+PiArCQkJCXBhci0+aW5mby0+ZGV2aWNlLCBwYXIsICZm YnRmdF9ibF9vcHMsICZibF9wcm9wcywKPj4gKwkJCQlCQUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJ RU5UKTsKPj4gIAlpZiAoSVNfRVJSKGJkKSkgewo+PiAgCQlkZXZfZXJyKHBhci0+aW5mby0+ZGV2 aWNlLAo+PiAgCQkJImNhbm5vdCByZWdpc3RlciBiYWNrbGlnaHQgZGV2aWNlICglbGQpXG4iLAo+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb24uYyBiL2Ry aXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uLmMKPj4gaW5kZXggZjQ1YjJlZjA1ZjQ4 Li4zODVjN2FkZWFhMjYgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24v b2xwY19kY29uLmMKPj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb24u Ywo+PiBAQCAtNjQzLDcgKzY0Myw4IEBAIHN0YXRpYyBpbnQgZGNvbl9wcm9iZShzdHJ1Y3QgaTJj X2NsaWVudCAqY2xpZW50LCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCj4+ICAJLyog QWRkIHRoZSBiYWNrbGlnaHQgZGV2aWNlIGZvciB0aGUgRENPTiAqLwo+PiAgCWRjb25fYmxfcHJv cHMuYnJpZ2h0bmVzcyA9IGRjb24tPmJsX3ZhbDsKPj4gIAlkY29uLT5ibF9kZXYgPSBiYWNrbGln aHRfZGV2aWNlX3JlZ2lzdGVyKCJkY29uLWJsIiwgJmRjb25fZGV2aWNlLT5kZXYsCj4+IC0JCWRj b24sICZkY29uX2JsX29wcywgJmRjb25fYmxfcHJvcHMpOwo+PiArCQlkY29uLCAmZGNvbl9ibF9v cHMsICZkY29uX2JsX3Byb3BzLAo+PiArCQlCQUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJRU5UKTsK Pj4gIAlpZiAoSVNfRVJSKGRjb24tPmJsX2RldikpIHsKPj4gIAkJZGV2X2VycigmY2xpZW50LT5k ZXYsICJjYW5ub3QgcmVnaXN0ZXIgYmFja2xpZ2h0IGRldiAoJWxkKVxuIiwKPj4gIAkJCQlQVFJf RVJSKGRjb24tPmJsX2RldikpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9hcHBs ZWRpc3BsYXkuYyBiL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMKPj4gaW5kZXggYTBh MzgyN2I0YWZmLi45N2MwODI5NzExYTggMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvdXNiL21pc2Mv YXBwbGVkaXNwbGF5LmMKPj4gKysrIGIvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYwo+ PiBAQCAtMjkzLDcgKzI5Myw4IEBAIHN0YXRpYyBpbnQgYXBwbGVkaXNwbGF5X3Byb2JlKHN0cnVj dCB1c2JfaW50ZXJmYWNlICppZmFjZSwKPj4gIAlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsK Pj4gIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDB4ZmY7Cj4+ICAJcGRhdGEtPmJkID0gYmFja2xp Z2h0X2RldmljZV9yZWdpc3RlcihibF9uYW1lLCBOVUxMLCBwZGF0YSwKPj4gLQkJCQkJICAgICAg JmFwcGxlZGlzcGxheV9ibF9kYXRhLCAmcHJvcHMpOwo+PiArCQkJCQkgICAgICAmYXBwbGVkaXNw bGF5X2JsX2RhdGEsICZwcm9wcywKPj4gKwkJCQkJICAgICAgQkFDS0xJR0hUX1JFR0lTVEVSX0ZC X0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VSUihwZGF0YS0+YmQpKSB7Cj4+ICAJCWRldl9lcnIoJmlm YWNlLT5kZXYsICJCYWNrbGlnaHQgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7Cj4+ICAJCXJldHZh bCA9IFBUUl9FUlIocGRhdGEtPmJkKTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFj a2xpZ2h0Lzg4cG04NjB4X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC84OHBtODYweF9i bC5jCj4+IGluZGV4IDZkOGRjMmM3NzUyMC4uZTBkODIxMmFlYmMwIDEwMDY0NAo+PiAtLS0gYS9k cml2ZXJzL3ZpZGVvL2JhY2tsaWdodC84OHBtODYweF9ibC5jCj4+ICsrKyBiL2RyaXZlcnMvdmlk ZW8vYmFja2xpZ2h0Lzg4cG04NjB4X2JsLmMKPj4gQEAgLTI0Miw3ICsyNDIsOCBAQCBzdGF0aWMg aW50IHBtODYweF9iYWNrbGlnaHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK Pj4gIAlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKPj4gIAlwcm9wcy5tYXhfYnJpZ2h0bmVz cyA9IE1BWF9CUklHSFRORVNTOwo+PiAgCWJsID0gZGV2bV9iYWNrbGlnaHRfZGV2aWNlX3JlZ2lz dGVyKCZwZGV2LT5kZXYsIG5hbWUsICZwZGV2LT5kZXYsIGRhdGEsCj4+IC0JCQkJCSZwbTg2MHhf YmFja2xpZ2h0X29wcywgJnByb3BzKTsKPj4gKwkJCQkJJnBtODYweF9iYWNrbGlnaHRfb3BzLCAm cHJvcHMsCj4+ICsJCQkJCUJBQ0tMSUdIVF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCWlmIChJ U19FUlIoYmwpKSB7Cj4+ICAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3Rl ciBiYWNrbGlnaHRcbiIpOwo+PiAgCQlyZXR1cm4gUFRSX0VSUihibCk7Cj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hYXQyODcwX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2Jh Y2tsaWdodC9hYXQyODcwX2JsLmMKPj4gaW5kZXggNTA3NzRlNjU3NzAwLi5hNGNiYzMzYmQ2YzIg MTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FhdDI4NzBfYmwuYwo+PiAr KysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hYXQyODcwX2JsLmMKPj4gQEAgLTE1Miw3ICsx NTIsOCBAQCBzdGF0aWMgaW50IGFhdDI4NzBfYmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKPj4gIAlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKPj4gIAliZCA9IGRldm1f YmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2LCAiYWF0Mjg3MC1iYWNrbGlnaHQi LAo+PiAgCQkJCQkmcGRldi0+ZGV2LCBhYXQyODcwX2JsLCAmYWF0Mjg3MF9ibF9vcHMsCj4+IC0J CQkJCSZwcm9wcyk7Cj4+ICsJCQkJCSZwcm9wcywKPj4gKwkJCQkJQkFDS0xJR0hUX1JFR0lTVEVS X0ZCX0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VSUihiZCkpIHsKPj4gIAkJZGV2X2VycigmcGRldi0+ ZGV2LAo+PiAgCQkJIkZhaWxlZCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGJhY2tsaWdodCBkZXZpY2Vc biIpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwNTUyMF9ibC5j IGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwNTUyMF9ibC5jCj4+IGluZGV4IGRkODhiYTFk NzFjZS4uMDMwOTNmYmVlNDE0IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdo dC9hZHA1NTIwX2JsLmMKPj4gKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwNTUyMF9i bC5jCj4+IEBAIC0zMTUsNyArMzE1LDggQEAgc3RhdGljIGludCBhZHA1NTIwX2JsX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBB RFA1MDIwX01BWF9CUklHSFRORVNTOwo+PiAgCWJsID0gZGV2bV9iYWNrbGlnaHRfZGV2aWNlX3Jl Z2lzdGVyKCZwZGV2LT5kZXYsIHBkZXYtPm5hbWUsCj4+ICAJCQkJCWRhdGEtPm1hc3RlciwgZGF0 YSwgJmFkcDU1MjBfYmxfb3BzLAo+PiAtCQkJCQkmcHJvcHMpOwo+PiArCQkJCQkmcHJvcHMsCj4+ ICsJCQkJCUJBQ0tMSUdIVF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCWlmIChJU19FUlIoYmwp KSB7Cj4+ICAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBiYWNrbGln aHRcbiIpOwo+PiAgCQlyZXR1cm4gUFRSX0VSUihibCk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3ZpZGVvL2JhY2tsaWdodC9hZHA4ODYwX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9h ZHA4ODYwX2JsLmMKPj4gaW5kZXggNTEwZTU1OWMwNjBlLi44ODk4MmVkMjU3ZDkgMTAwNjQ0Cj4+ IC0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkcDg4NjBfYmwuYwo+PiArKysgYi9kcml2 ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHA4ODYwX2JsLmMKPj4gQEAgLTcxOCw3ICs3MTgsOCBAQCBz dGF0aWMgaW50IGFkcDg4NjBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKPj4gIAo+ PiAgCWJsID0gZGV2bV9iYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCZjbGllbnQtPmRldiwKPj4g IAkJCQlkZXZfZHJpdmVyX3N0cmluZygmY2xpZW50LT5kZXYpLAo+PiAtCQkJCSZjbGllbnQtPmRl diwgZGF0YSwgJmFkcDg4NjBfYmxfb3BzLCAmcHJvcHMpOwo+PiArCQkJCSZjbGllbnQtPmRldiwg ZGF0YSwgJmFkcDg4NjBfYmxfb3BzLCAmcHJvcHMsCj4+ICsJCQkJQkFDS0xJR0hUX1JFR0lTVEVS X0ZCX0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VSUihibCkpIHsKPj4gIAkJZGV2X2VycigmY2xpZW50 LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgYmFja2xpZ2h0XG4iKTsKPj4gIAkJcmV0dXJuIFBU Ul9FUlIoYmwpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwODg3 MF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwODg3MF9ibC5jCj4+IGluZGV4IDIx YWNhYzkwZmQ3Ny4uNTI4NGY3ZjNjZGQzIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3ZpZGVvL2Jh Y2tsaWdodC9hZHA4ODcwX2JsLmMKPj4gKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRw ODg3MF9ibC5jCj4+IEBAIC04OTQsNyArODk0LDggQEAgc3RhdGljIGludCBhZHA4ODcwX3Byb2Jl KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCj4+ICAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBw cm9wcy5icmlnaHRuZXNzID0gQURQODg3MF9NQVhfQlJJR0hUTkVTUzsKPj4gIAlibCA9IGRldm1f YmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYsCj4+ICAJCQkJZGV2X2RyaXZl cl9zdHJpbmcoJmNsaWVudC0+ZGV2KSwKPj4gLQkJCQkmY2xpZW50LT5kZXYsIGRhdGEsICZhZHA4 ODcwX2JsX29wcywgJnByb3BzKTsKPj4gKwkJCQkmY2xpZW50LT5kZXYsIGRhdGEsICZhZHA4ODcw X2JsX29wcywgJnByb3BzLAo+PiArCQkJCUJBQ0tMSUdIVF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+ PiAgCWlmIChJU19FUlIoYmwpKSB7Cj4+ICAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVk IHRvIHJlZ2lzdGVyIGJhY2tsaWdodFxuIik7Cj4+ICAJCXJldHVybiBQVFJfRVJSKGJsKTsKPj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FtczM2OWZnMDYuYyBiL2RyaXZl cnMvdmlkZW8vYmFja2xpZ2h0L2FtczM2OWZnMDYuYwo+PiBpbmRleCA1Y2NhOGNlNDVkNGQuLjFi ZDY1NjE0MWMxZSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYW1zMzY5 ZmcwNi5jCj4+ICsrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FtczM2OWZnMDYuYwo+PiBA QCAtNDg0LDcgKzQ4NCw4IEBAIHN0YXRpYyBpbnQgYW1zMzY5ZmcwNl9wcm9iZShzdHJ1Y3Qgc3Bp X2RldmljZSAqc3BpKQo+PiAgCj4+ICAJYmQgPSBkZXZtX2JhY2tsaWdodF9kZXZpY2VfcmVnaXN0 ZXIoJnNwaS0+ZGV2LCAiYW1zMzY5ZmcwNi1ibCIsCj4+ICAJCQkJCSZzcGktPmRldiwgbGNkLAo+ PiAtCQkJCQkmYW1zMzY5ZmcwNl9iYWNrbGlnaHRfb3BzLCAmcHJvcHMpOwo+PiArCQkJCQkmYW1z MzY5ZmcwNl9iYWNrbGlnaHRfb3BzLCAmcHJvcHMsCj4+ICsJCQkJCUJBQ0tMSUdIVF9SRUdJU1RF Ul9GQl9DTElFTlQpOwo+PiAgCWlmIChJU19FUlIoYmQpKQo+PiAgCQlyZXR1cm4gUFRSX0VSUihi ZCk7Cj4+ICAKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FwcGxlX2Js LmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hcHBsZV9ibC5jCj4+IGluZGV4IGQ4NDMyOTY3 NjY4OS4uZWUyZTkyZDU4NTEyIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdo dC9hcHBsZV9ibC5jCj4+ICsrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FwcGxlX2JsLmMK Pj4gQEAgLTE4Miw3ICsxODIsOCBAQCBzdGF0aWMgaW50IGFwcGxlX2JsX2FkZChzdHJ1Y3QgYWNw aV9kZXZpY2UgKmRldikKPj4gIAlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1BMQVRGT1JNOwo+PiAg CXByb3BzLm1heF9icmlnaHRuZXNzID0gMTU7Cj4+ICAJYXBwbGVfYmFja2xpZ2h0X2RldmljZSA9 IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoImFwcGxlX2JhY2tsaWdodCIsCj4+IC0JCQkJICBO VUxMLCBOVUxMLCAmaHdfZGF0YS0+YmFja2xpZ2h0X29wcywgJnByb3BzKTsKPj4gKwkJCQkgIE5V TEwsIE5VTEwsICZod19kYXRhLT5iYWNrbGlnaHRfb3BzLCAmcHJvcHMsCj4+ICsJCQkJICBCQUNL TElHSFRfUkVHSVNURVJfRkJfQ0xJRU5UKTsKPj4gIAo+PiAgCWlmIChJU19FUlIoYXBwbGVfYmFj a2xpZ2h0X2RldmljZSkpIHsKPj4gIAkJcmVsZWFzZV9yZWdpb24oaHdfZGF0YS0+aW9zdGFydCwg aHdfZGF0YS0+aW9sZW4pOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQv YXMzNzExX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hczM3MTFfYmwuYwo+PiBpbmRl eCA3MzRhOTE1ODk0NmIuLjVmM2E0MGJjOGE4NSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy92aWRl by9iYWNrbGlnaHQvYXMzNzExX2JsLmMKPj4gKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQv YXMzNzExX2JsLmMKPj4gQEAgLTI0NCw3ICsyNDQsOCBAQCBzdGF0aWMgaW50IGFzMzcxMV9ibF9y ZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+PiAgCQkJCSAgICAgICBzdS0+ dHlwZSA9PSBBUzM3MTFfQkxfU1UxID8KPj4gIAkJCQkgICAgICAgImFzMzcxMS1zdTEiIDogImFz MzcxMS1zdTIiLAo+PiAgCQkJCSAgICAgICAmcGRldi0+ZGV2LCBzdSwKPj4gLQkJCQkgICAgICAg JmFzMzcxMV9ibF9vcHMsICZwcm9wcyk7Cj4+ICsJCQkJICAgICAgICZhczM3MTFfYmxfb3BzLCAm cHJvcHMsCj4+ICsJCQkJICAgICAgIEJBQ0tMSUdIVF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+PiAg CWlmIChJU19FUlIoYmwpKSB7Cj4+ICAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBy ZWdpc3RlciBiYWNrbGlnaHRcbiIpOwo+PiAgCQlyZXR1cm4gUFRSX0VSUihibCk7Cj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYyBiL2RyaXZlcnMvdmlk ZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCj4+IGluZGV4IDI4ODMxOGFkMjFkZC4uMWEyNTI3MzU3 NmU4IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYwo+ PiArKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYwo+PiBAQCAtMzE5LDEz ICszMTksMTUgQEAgRVhQT1JUX1NZTUJPTChiYWNrbGlnaHRfZm9yY2VfdXBkYXRlKTsKPj4gICAq IEBkZXZkYXRhOiBhbiBvcHRpb25hbCBwb2ludGVyIHRvIGJlIHN0b3JlZCBmb3IgcHJpdmF0ZSBk cml2ZXIgdXNlLiBUaGUKPj4gICAqICAgbWV0aG9kcyBtYXkgcmV0cmlldmUgaXQgYnkgdXNpbmcg YmxfZ2V0X2RhdGEoYmQpLgo+PiAgICogQG9wczogdGhlIGJhY2tsaWdodCBvcGVyYXRpb25zIHN0 cnVjdHVyZS4KPj4gKyAqIEBmbGFnczogYml0bWFzayB0byBjb250cm9sIGJhY2tsaWdodCByZWdp c3RyYXRpb24KPj4gICAqCj4+ICAgKiBDcmVhdGVzIGFuZCByZWdpc3RlcnMgbmV3IGJhY2tsaWdo dCBkZXZpY2UuIFJldHVybnMgZWl0aGVyIGFuCj4+ICAgKiBFUlJfUFRSKCkgb3IgYSBwb2ludGVy IHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgZGV2aWNlLgo+PiAgICovCj4+ICBzdHJ1Y3QgYmFja2xp Z2h0X2RldmljZSAqYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLAo+ PiAgCXN0cnVjdCBkZXZpY2UgKnBhcmVudCwgdm9pZCAqZGV2ZGF0YSwgY29uc3Qgc3RydWN0IGJh Y2tsaWdodF9vcHMgKm9wcywKPj4gLQljb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMg KnByb3BzKQo+PiArCWNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyAqcHJvcHMsCj4+ ICsJdW5zaWduZWQgbG9uZyBmbGFncykKPj4gIHsKPj4gIAlzdHJ1Y3QgYmFja2xpZ2h0X2Rldmlj ZSAqbmV3X2JkOwo+PiAgCWludCByYzsKPj4gQEAgLTM2MywxMCArMzY1LDEyIEBAIHN0cnVjdCBi YWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKm5h bWUsCj4+ICAJCXJldHVybiBFUlJfUFRSKHJjKTsKPj4gIAl9Cj4+ICAKPj4gLQlyYyA9IGJhY2ts aWdodF9yZWdpc3Rlcl9mYihuZXdfYmQpOwo+PiAtCWlmIChyYykgewo+PiAtCQlkZXZpY2VfdW5y ZWdpc3RlcigmbmV3X2JkLT5kZXYpOwo+PiAtCQlyZXR1cm4gRVJSX1BUUihyYyk7Cj4+ICsJaWYg KGZsYWdzICYgQkFDS0xJR0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCkgewo+PiArCQlyYyA9IGJhY2ts aWdodF9yZWdpc3Rlcl9mYihuZXdfYmQpOwo+PiArCQlpZiAocmMpIHsKPj4gKwkJCWRldmljZV91 bnJlZ2lzdGVyKCZuZXdfYmQtPmRldik7Cj4+ICsJCQlyZXR1cm4gRVJSX1BUUihyYyk7Cj4+ICsJ CX0KPj4gIAl9Cj4+ICAKPj4gIAluZXdfYmQtPm9wcyA9IG9wczsKPj4gQEAgLTQ5NCw2ICs0OTgs NyBAQCBFWFBPUlRfU1lNQk9MKGJhY2tsaWdodF91bnJlZ2lzdGVyX25vdGlmaWVyKTsKPj4gICAq IEBkZXZkYXRhOiBhbiBvcHRpb25hbCBwb2ludGVyIHRvIGJlIHN0b3JlZCBmb3IgcHJpdmF0ZSBk cml2ZXIgdXNlCj4+ICAgKiBAb3BzOiB0aGUgYmFja2xpZ2h0IG9wZXJhdGlvbnMgc3RydWN0dXJl Cj4+ICAgKiBAcHJvcHM6IHRoZSBiYWNrbGlnaHQgcHJvcGVydGllcwo+PiArICogQGZsYWdzOiBi aXRtYXNrIHRvIGNvbnRyb2wgYmFja2xpZ2h0IHJlZ2lzdHJhdGlvbgo+PiAgICoKPj4gICAqIEBy ZXR1cm4gYSBzdHJ1Y3QgYmFja2xpZ2h0IG9uIHN1Y2Nlc3MsIG9yIGFuIEVSUl9QVFIgb24gZXJy b3IKPj4gICAqCj4+IEBAIC01MDQsNyArNTA5LDggQEAgRVhQT1JUX1NZTUJPTChiYWNrbGlnaHRf dW5yZWdpc3Rlcl9ub3RpZmllcik7Cj4+ICBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqZGV2bV9i YWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwKPj4gIAljb25zdCBj aGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHZvaWQgKmRldmRhdGEsCj4+ICAJY29u c3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgKm9wcywKPj4gLQljb25zdCBzdHJ1Y3QgYmFja2xpZ2h0 X3Byb3BlcnRpZXMgKnByb3BzKQo+PiArCWNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGll cyAqcHJvcHMsCj4+ICsJdW5zaWduZWQgbG9uZyBmbGFncykKPj4gIHsKPj4gIAlzdHJ1Y3QgYmFj a2xpZ2h0X2RldmljZSAqKnB0ciwgKmJhY2tsaWdodDsKPj4gIAo+PiBAQCAtNTE0LDcgKzUyMCw3 IEBAIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpkZXZtX2JhY2tsaWdodF9kZXZpY2VfcmVnaXN0 ZXIoc3RydWN0IGRldmljZSAqZGV2LAo+PiAgCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPj4g IAo+PiAgCWJhY2tsaWdodCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIobmFtZSwgcGFyZW50 LCBkZXZkYXRhLCBvcHMsCj4+IC0JCQkJCQlwcm9wcyk7Cj4+ICsJCQkJCQlwcm9wcywgZmxhZ3Mp Owo+PiAgCWlmICghSVNfRVJSKGJhY2tsaWdodCkpIHsKPj4gIAkJKnB0ciA9IGJhY2tsaWdodDsK Pj4gIAkJZGV2cmVzX2FkZChkZXYsIHB0cik7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVv L2JhY2tsaWdodC9iZDYxMDcuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JkNjEwNy5jCj4+ IGluZGV4IGZkYjJmN2UyYzZiNS4uYThlY2Q3YTJmMmE0IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJz L3ZpZGVvL2JhY2tsaWdodC9iZDYxMDcuYwo+PiArKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdo dC9iZDYxMDcuYwo+PiBAQCAtMTYzLDcgKzE2Myw4IEBAIHN0YXRpYyBpbnQgYmQ2MTA3X3Byb2Jl KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCj4+ICAJYmFja2xpZ2h0ID0gZGV2bV9iYWNrbGln aHRfZGV2aWNlX3JlZ2lzdGVyKCZjbGllbnQtPmRldiwKPj4gIAkJCQkJICAgICAgZGV2X25hbWUo JmNsaWVudC0+ZGV2KSwKPj4gIAkJCQkJICAgICAgJmJkLT5jbGllbnQtPmRldiwgYmQsCj4+IC0J CQkJCSAgICAgICZiZDYxMDdfYmFja2xpZ2h0X29wcywgJnByb3BzKTsKPj4gKwkJCQkJICAgICAg JmJkNjEwN19iYWNrbGlnaHRfb3BzLCAmcHJvcHMsCj4+ICsJCQkJCSAgICAgIEJBQ0tMSUdIVF9S RUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCWlmIChJU19FUlIoYmFja2xpZ2h0KSkgewo+PiAgCQlk ZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBiYWNrbGlnaHRcbiIpOwo+ PiAgCQlyZXR1cm4gUFRSX0VSUihiYWNrbGlnaHQpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92 aWRlby9iYWNrbGlnaHQvY29yZ2lfbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3Jn aV9sY2QuYwo+PiBpbmRleCBkN2MyMzllYTNkMDkuLjAwNmUxNzEyNTZhMCAxMDA2NDQKPj4gLS0t IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfbGNkLmMKPj4gKysrIGIvZHJpdmVycy92 aWRlby9iYWNrbGlnaHQvY29yZ2lfbGNkLmMKPj4gQEAgLTU2Miw3ICs1NjIsOCBAQCBzdGF0aWMg aW50IGNvcmdpX2xjZF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQo+PiAgCXByb3BzLm1h eF9icmlnaHRuZXNzID0gcGRhdGEtPm1heF9pbnRlbnNpdHk7Cj4+ICAJbGNkLT5ibF9kZXYgPSBk ZXZtX2JhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoJnNwaS0+ZGV2LCAiY29yZ2lfYmwiLAo+PiAg CQkJCQkJJnNwaS0+ZGV2LCBsY2QsICZjb3JnaV9ibF9vcHMsCj4+IC0JCQkJCQkmcHJvcHMpOwo+ PiArCQkJCQkJJnByb3BzLAo+PiArCQkJCQkJQkFDS0xJR0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCk7 Cj4+ICAJaWYgKElTX0VSUihsY2QtPmJsX2RldikpCj4+ICAJCXJldHVybiBQVFJfRVJSKGxjZC0+ YmxfZGV2KTsKPj4gIAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY3Jf YmxsY2QuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NyX2JsbGNkLmMKPj4gaW5kZXggM2Uz ODgwZmM4YzhlLi5jZjdjNWQzNWRkNjMgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvdmlkZW8vYmFj a2xpZ2h0L2NyX2JsbGNkLmMKPj4gKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY3JfYmxs Y2QuYwo+PiBAQCAtMTk3LDcgKzE5Nyw4IEBAIHN0YXRpYyBpbnQgY3JfYmFja2xpZ2h0X3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICAJcHJvcHMudHlwZSA9IEJBQ0tMSUdI VF9SQVc7Cj4+ICAJYmRwID0gZGV2bV9iYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5k ZXYsICJjci1iYWNrbGlnaHQiLAo+PiAgCQkJCQkmcGRldi0+ZGV2LCBOVUxMLCAmY3JfYmFja2xp Z2h0X29wcywKPj4gLQkJCQkJJnByb3BzKTsKPj4gKwkJCQkJJnByb3BzLAo+PiArCQkJCQlCQUNL TElHSFRfUkVHSVNURVJfRkJfQ0xJRU5UKTsKPj4gIAlpZiAoSVNfRVJSKGJkcCkpIHsKPj4gIAkJ cGNpX2Rldl9wdXQobHBjX2Rldik7Cj4+ICAJCXJldHVybiBQVFJfRVJSKGJkcCk7Cj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYyBiL2RyaXZlcnMvdmlk ZW8vYmFja2xpZ2h0L2RhOTAzeF9ibC5jCj4+IGluZGV4IGY3OTM3MzhmMDZmYi4uZDYwMTlhZWJm YTQyIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYwo+ PiArKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYwo+PiBAQCAtMTQ2LDcg KzE0Niw4IEBAIHN0YXRpYyBpbnQgZGE5MDN4X2JhY2tsaWdodF9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQo+PiAgCXByb3BzLm1heF9icmlnaHRuZXNzID0gbWF4X2JyaWdodG5l c3M7Cj4+ICAJYmwgPSBkZXZtX2JhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldiwg cGRldi0+bmFtZSwKPj4gIAkJCQkJZGF0YS0+ZGE5MDN4X2RldiwgZGF0YSwKPj4gLQkJCQkJJmRh OTAzeF9iYWNrbGlnaHRfb3BzLCAmcHJvcHMpOwo+PiArCQkJCQkmZGE5MDN4X2JhY2tsaWdodF9v cHMsICZwcm9wcywKPj4gKwkJCQkJQkFDS0xJR0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCk7Cj4+ICAJ aWYgKElTX0VSUihibCkpIHsKPj4gIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJl Z2lzdGVyIGJhY2tsaWdodFxuIik7Cj4+ICAJCXJldHVybiBQVFJfRVJSKGJsKTsKPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2RhOTA1Ml9ibC5jIGIvZHJpdmVycy92aWRl by9iYWNrbGlnaHQvZGE5MDUyX2JsLmMKPj4gaW5kZXggZmQyYmU0MTdhYTY0Li45NjczOGMyZThh MDkgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2RhOTA1Ml9ibC5jCj4+ ICsrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2RhOTA1Ml9ibC5jCj4+IEBAIC0xMjcsNyAr MTI3LDggQEAgc3RhdGljIGludCBkYTkwNTJfYmFja2xpZ2h0X3Byb2JlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCj4+ICAKPj4gIAlibCA9IGRldm1fYmFja2xpZ2h0X2RldmljZV9yZWdp c3RlcigmcGRldi0+ZGV2LCBwZGV2LT5uYW1lLAo+PiAgCQkJCQl3bGVkcy0+ZGE5MDUyLT5kZXYs IHdsZWRzLAo+PiAtCQkJCQkmZGE5MDUyX2JhY2tsaWdodF9vcHMsICZwcm9wcyk7Cj4+ICsJCQkJ CSZkYTkwNTJfYmFja2xpZ2h0X29wcywgJnByb3BzLAo+PiArCQkJCQlCQUNLTElHSFRfUkVHSVNU RVJfRkJfQ0xJRU5UKTsKPj4gIAlpZiAoSVNfRVJSKGJsKSkgewo+PiAgCQlkZXZfZXJyKCZwZGV2 LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgYmFja2xpZ2h0XG4iKTsKPj4gIAkJcmV0dXJuIFBU Ul9FUlIoYmwpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZXA5M3h4 X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9lcDkzeHhfYmwuYwo+PiBpbmRleCAwMDY3 OTMxODIxYzYuLjdmZTI1NDk5NjlhMSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy92aWRlby9iYWNr bGlnaHQvZXA5M3h4X2JsLmMKPj4gKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZXA5M3h4 X2JsLmMKPj4gQEAgLTkzLDcgKzkzLDggQEAgc3RhdGljIGludCBlcDkzeHhibF9wcm9iZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCj4+ICAJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7 Cj4+ICAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBFUDkzWFhfTUFYX0JSSUdIVDsKPj4gIAlibCA9 IGRldm1fYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigmZGV2LT5kZXYsIGRldi0+bmFtZSwgJmRl di0+ZGV2LAo+PiAtCQkJCQllcDkzeHhibCwgJmVwOTN4eGJsX29wcywgJnByb3BzKTsKPj4gKwkJ CQkJZXA5M3h4YmwsICZlcDkzeHhibF9vcHMsICZwcm9wcywKPj4gKwkJCQkJQkFDS0xJR0hUX1JF R0lTVEVSX0ZCX0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VSUihibCkpCj4+ICAJCXJldHVybiBQVFJf RVJSKGJsKTsKPj4gIAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZ2Vu ZXJpY19ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZ2VuZXJpY19ibC5jCj4+IGluZGV4 IDY3ZGZiOTM5YTUxNC4uNzE3MzE4ZTEyZjg3IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3ZpZGVv L2JhY2tsaWdodC9nZW5lcmljX2JsLmMKPj4gKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQv Z2VuZXJpY19ibC5jCj4+IEBAIC03Niw3ICs3Niw4IEBAIHN0YXRpYyBpbnQgZ2VuZXJpY2JsX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICAJcHJvcHMudHlwZSA9IEJBQ0tM SUdIVF9SQVc7Cj4+ICAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBtYWNoaW5mby0+bWF4X2ludGVu c2l0eTsKPj4gIAliZCA9IGRldm1fYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2 LCBuYW1lLCAmcGRldi0+ZGV2LAo+PiAtCQkJCQlOVUxMLCAmZ2VuZXJpY2JsX29wcywgJnByb3Bz KTsKPj4gKwkJCQkJTlVMTCwgJmdlbmVyaWNibF9vcHMsICZwcm9wcywKPj4gKwkJCQkJQkFDS0xJ R0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VSUihiZCkpCj4+ICAJCXJldHVy biBQVFJfRVJSKGJkKTsKPj4gIAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGln aHQvZ3Bpb19iYWNrbGlnaHQuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2dwaW9fYmFja2xp Z2h0LmMKPj4gaW5kZXggMTgxMzQ0MTZiMTU0Li5kMGI2ZjUxNTVmODYgMTAwNjQ0Cj4+IC0tLSBh L2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2dwaW9fYmFja2xpZ2h0LmMKPj4gKysrIGIvZHJpdmVy cy92aWRlby9iYWNrbGlnaHQvZ3Bpb19iYWNrbGlnaHQuYwo+PiBAQCAtMTMyLDcgKzEzMiw4IEBA IHN0YXRpYyBpbnQgZ3Bpb19iYWNrbGlnaHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKPj4gIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDE7Cj4+ICAJYmwgPSBkZXZtX2JhY2ts aWdodF9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldiwgZGV2X25hbWUoJnBkZXYtPmRldiksCj4+ ICAJCQkJCSZwZGV2LT5kZXYsIGdibCwgJmdwaW9fYmFja2xpZ2h0X29wcywKPj4gLQkJCQkJJnBy b3BzKTsKPj4gKwkJCQkJJnByb3BzLAo+PiArCQkJCQlCQUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJ RU5UKTsKPj4gIAlpZiAoSVNfRVJSKGJsKSkgewo+PiAgCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJm YWlsZWQgdG8gcmVnaXN0ZXIgYmFja2xpZ2h0XG4iKTsKPj4gIAkJcmV0dXJuIFBUUl9FUlIoYmwp Owo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYyBiL2Ry aXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMKPj4gaW5kZXggOGVhNDJiOGQ5YmM4Li5h NzViMmQwZDQ4OWEgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgw X2JsLmMKPj4gKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYwo+PiBAQCAt MTExLDcgKzExMSw4IEBAIHN0YXRpYyBpbnQgaHA2ODBibF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQo+PiAgCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwo+PiAgCXByb3Bz Lm1heF9icmlnaHRuZXNzID0gSFA2ODBfTUFYX0lOVEVOU0lUWTsKPj4gIAliZCA9IGRldm1fYmFj a2xpZ2h0X2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2LCAiaHA2ODAtYmwiLCAmcGRldi0+ZGV2 LAo+PiAtCQkJCQlOVUxMLCAmaHA2ODBibF9vcHMsICZwcm9wcyk7Cj4+ICsJCQkJCU5VTEwsICZo cDY4MGJsX29wcywgJnByb3BzLAo+PiArCQkJCQlCQUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJRU5U KTsKPj4gIAlpZiAoSVNfRVJSKGJkKSkKPj4gIAkJcmV0dXJuIFBUUl9FUlIoYmQpOwo+PiAgCj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9pcGFxX21pY3JvX2JsLmMgYi9k cml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9pcGFxX21pY3JvX2JsLmMKPj4gaW5kZXggMzQ3ZGMxMWQ0 Y2ViLi44MzRjY2M4YTcyOTEgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0 L2lwYXFfbWljcm9fYmwuYwo+PiArKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9pcGFxX21p Y3JvX2JsLmMKPj4gQEAgLTYwLDcgKzYwLDggQEAgc3RhdGljIGludCBtaWNyb19iYWNrbGlnaHRf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gIAo+PiAgCWJkID0gZGV2bV9i YWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsICJpcGFxLW1pY3JvLWJhY2tsaWdo dCIsCj4+ICAJCQkJCSAgICAmcGRldi0+ZGV2LCBtaWNybywgJm1pY3JvX2JsX29wcywKPj4gLQkJ CQkJICAgICZtaWNyb19ibF9wcm9wcyk7Cj4+ICsJCQkJCSAgICAmbWljcm9fYmxfcHJvcHMsCj4+ ICsJCQkJCSAgICBCQUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJRU5UKTsKPj4gIAlpZiAoSVNfRVJS KGJkKSkKPj4gIAkJcmV0dXJuIFBUUl9FUlIoYmQpOwo+PiAgCj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3ZpZGVvL2JhY2tsaWdodC9qb3JuYWRhNzIwX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2ts aWdodC9qb3JuYWRhNzIwX2JsLmMKPj4gaW5kZXggN2U2ZmY1MzQ2ODkyLi5lMTczYzViNjBlOWUg MTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2pvcm5hZGE3MjBfYmwuYwo+ PiArKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9qb3JuYWRhNzIwX2JsLmMKPj4gQEAgLTEx OCw3ICsxMTgsOCBAQCBzdGF0aWMgaW50IGpvcm5hZGFfYmxfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKPj4gIAo+PiAgCWJkID0gZGV2bV9iYWNrbGlnaHRfZGV2aWNlX3JlZ2lz dGVyKCZwZGV2LT5kZXYsIFMxRF9ERVZJQ0VOQU1FLAo+PiAgCQkJCQkmcGRldi0+ZGV2LCBOVUxM LCAmam9ybmFkYV9ibF9vcHMsCj4+IC0JCQkJCSZwcm9wcyk7Cj4+ICsJCQkJCSZwcm9wcywKPj4g KwkJCQkJQkFDS0xJR0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VSUihiZCkp IHsKPj4gIAkJcmV0ID0gUFRSX0VSUihiZCk7Cj4+ICAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZh aWxlZCB0byByZWdpc3RlciBkZXZpY2UsIGVycj0leFxuIiwgcmV0KTsKPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2tiMzg4Nl9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNr bGlnaHQva2IzODg2X2JsLmMKPj4gaW5kZXggODRhMTEwYTcxOWNiLi5lYjYxOWM0YTdhMzkgMTAw NjQ0Cj4+IC0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2tiMzg4Nl9ibC5jCj4+ICsrKyBi L2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2tiMzg4Nl9ibC5jCj4+IEBAIC0xNTMsNyArMTUzLDgg QEAgc3RhdGljIGludCBrYjM4ODZibF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQo+PiAgCWtiMzg4Nl9iYWNrbGlnaHRfZGV2aWNlID0gZGV2bV9iYWNrbGlnaHRfZGV2aWNlX3Jl Z2lzdGVyKCZwZGV2LT5kZXYsCj4+ICAJCQkJCQkJImtiMzg4Ni1ibCIsICZwZGV2LT5kZXYsCj4+ ICAJCQkJCQkJTlVMTCwgJmtiMzg4NmJsX29wcywKPj4gLQkJCQkJCQkmcHJvcHMpOwo+PiArCQkJ CQkJCSZwcm9wcywKPj4gKwkJCQkJCQlCQUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJRU5UKTsKPj4g IAlpZiAoSVNfRVJSKGtiMzg4Nl9iYWNrbGlnaHRfZGV2aWNlKSkKPj4gIAkJcmV0dXJuIFBUUl9F UlIoa2IzODg2X2JhY2tsaWdodF9kZXZpY2UpOwo+PiAgCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3ZpZGVvL2JhY2tsaWdodC9sZDkwNDAuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xkOTA0 MC5jCj4+IGluZGV4IDY3N2Y4YWJiYTI3Yy4uYzI4ZTkxZmVjNTRmIDEwMDY0NAo+PiAtLS0gYS9k cml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sZDkwNDAuYwo+PiArKysgYi9kcml2ZXJzL3ZpZGVvL2Jh Y2tsaWdodC9sZDkwNDAuYwo+PiBAQCAtNzIyLDcgKzcyMiw4IEBAIHN0YXRpYyBpbnQgbGQ5MDQw X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCj4+ICAJcHJvcHMubWF4X2JyaWdodG5lc3Mg PSBNQVhfQlJJR0hUTkVTUzsKPj4gIAo+PiAgCWJkID0gZGV2bV9iYWNrbGlnaHRfZGV2aWNlX3Jl Z2lzdGVyKCZzcGktPmRldiwgImxkOTA0MC1ibCIsICZzcGktPmRldiwKPj4gLQkJCQkJbGNkLCAm bGQ5MDQwX2JhY2tsaWdodF9vcHMsICZwcm9wcyk7Cj4+ICsJCQkJCWxjZCwgJmxkOTA0MF9iYWNr bGlnaHRfb3BzLCAmcHJvcHMsCj4+ICsJCQkJCUJBQ0tMSUdIVF9SRUdJU1RFUl9GQl9DTElFTlQp Owo+PiAgCWlmIChJU19FUlIoYmQpKQo+PiAgCQlyZXR1cm4gUFRSX0VSUihiZCk7Cj4+ICAKPj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xtMzUzM19ibC5jIGIvZHJpdmVy cy92aWRlby9iYWNrbGlnaHQvbG0zNTMzX2JsLmMKPj4gaW5kZXggMGUyMzM3ZjM2N2I2Li5mNjM0 NWEyY2QwNzYgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xtMzUzM19i bC5jCj4+ICsrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xtMzUzM19ibC5jCj4+IEBAIC0z MTIsNyArMzEyLDggQEAgc3RhdGljIGludCBsbTM1MzNfYmxfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKPj4gIAlwcm9wcy5icmlnaHRuZXNzID0gcGRhdGEtPmRlZmF1bHRfYnJp Z2h0bmVzczsKPj4gIAliZCA9IGRldm1fYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigmcGRldi0+ ZGV2LCBwZGF0YS0+bmFtZSwKPj4gIAkJCQkJcGRldi0+ZGV2LnBhcmVudCwgYmwsICZsbTM1MzNf Ymxfb3BzLAo+PiAtCQkJCQkmcHJvcHMpOwo+PiArCQkJCQkmcHJvcHMsCj4+ICsJCQkJCUJBQ0tM SUdIVF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCWlmIChJU19FUlIoYmQpKSB7Cj4+ICAJCWRl dl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBiYWNrbGlnaHQgZGV2aWNlXG4i KTsKPj4gIAkJcmV0dXJuIFBUUl9FUlIoYmQpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRl by9iYWNrbGlnaHQvbG0zNjMwYV9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG0zNjMw YV9ibC5jCj4+IGluZGV4IDYwZDZjMmFjODdhYS4uYTYyYTA5NTEwZmUzIDEwMDY0NAo+PiAtLS0g YS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sbTM2MzBhX2JsLmMKPj4gKysrIGIvZHJpdmVycy92 aWRlby9iYWNrbGlnaHQvbG0zNjMwYV9ibC5jCj4+IEBAIC0zMzgsNyArMzM4LDggQEAgc3RhdGlj IGludCBsbTM2MzBhX2JhY2tsaWdodF9yZWdpc3RlcihzdHJ1Y3QgbG0zNjMwYV9jaGlwICpwY2hp cCkKPj4gIAkJcGNoaXAtPmJsZWRhID0KPj4gIAkJICAgIGRldm1fYmFja2xpZ2h0X2RldmljZV9y ZWdpc3RlcihwY2hpcC0+ZGV2LCAibG0zNjMwYV9sZWRhIiwKPj4gIAkJCQkJCSAgIHBjaGlwLT5k ZXYsIHBjaGlwLAo+PiAtCQkJCQkJICAgJmxtMzYzMGFfYmFua19hX29wcywgJnByb3BzKTsKPj4g KwkJCQkJCSAgICZsbTM2MzBhX2JhbmtfYV9vcHMsICZwcm9wcywKPj4gKwkJCQkJCSAgIEJBQ0tM SUdIVF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCQlpZiAoSVNfRVJSKHBjaGlwLT5ibGVkYSkp Cj4+ICAJCQlyZXR1cm4gUFRSX0VSUihwY2hpcC0+YmxlZGEpOwo+PiAgCX0KPj4gQEAgLTM1MCw3 ICszNTEsOCBAQCBzdGF0aWMgaW50IGxtMzYzMGFfYmFja2xpZ2h0X3JlZ2lzdGVyKHN0cnVjdCBs bTM2MzBhX2NoaXAgKnBjaGlwKQo+PiAgCQlwY2hpcC0+YmxlZGIgPQo+PiAgCQkgICAgZGV2bV9i YWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKHBjaGlwLT5kZXYsICJsbTM2MzBhX2xlZGIiLAo+PiAg CQkJCQkJICAgcGNoaXAtPmRldiwgcGNoaXAsCj4+IC0JCQkJCQkgICAmbG0zNjMwYV9iYW5rX2Jf b3BzLCAmcHJvcHMpOwo+PiArCQkJCQkJICAgJmxtMzYzMGFfYmFua19iX29wcywgJnByb3BzLAo+ PiArCQkJCQkJICAgQkFDS0xJR0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCk7Cj4+ICAJCWlmIChJU19F UlIocGNoaXAtPmJsZWRiKSkKPj4gIAkJCXJldHVybiBQVFJfRVJSKHBjaGlwLT5ibGVkYik7Cj4+ ICAJfQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG0zNjM5X2JsLmMg Yi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sbTM2MzlfYmwuYwo+PiBpbmRleCBjZDUwZGY1ODA3 ZWEuLjRhYWYwYzNmOWVlZSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQv bG0zNjM5X2JsLmMKPj4gKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG0zNjM5X2JsLmMK Pj4gQEAgLTM0OSw3ICszNDksOCBAQCBzdGF0aWMgaW50IGxtMzYzOV9wcm9iZShzdHJ1Y3QgaTJj X2NsaWVudCAqY2xpZW50LAo+PiAgCXBjaGlwLT5ibGVkID0KPj4gIAkgICAgZGV2bV9iYWNrbGln aHRfZGV2aWNlX3JlZ2lzdGVyKHBjaGlwLT5kZXYsICJsbTM2MzlfYmxlZCIsCj4+ICAJCQkJCSAg IHBjaGlwLT5kZXYsIHBjaGlwLCAmbG0zNjM5X2JsZWRfb3BzLAo+PiAtCQkJCQkgICAmcHJvcHMp Owo+PiArCQkJCQkgICAmcHJvcHMsCj4+ICsJCQkJCSAgIEJBQ0tMSUdIVF9SRUdJU1RFUl9GQl9D TElFTlQpOwo+PiAgCWlmIChJU19FUlIocGNoaXAtPmJsZWQpKSB7Cj4+ICAJCWRldl9lcnIoJmNs aWVudC0+ZGV2LCAiZmFpbCA6IGJhY2tsaWdodCByZWdpc3RlclxuIik7Cj4+ICAJCXJldCA9IFBU Ul9FUlIocGNoaXAtPmJsZWQpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGln aHQvbG9jb21vbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sb2NvbW9sY2QuYwo+PiBp bmRleCA2YzNlYzQyNTlhNjAuLjEyNmE0ZGY1ZmQxMiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy92 aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMKPj4gKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGln aHQvbG9jb21vbGNkLmMKPj4gQEAgLTIwMCw3ICsyMDAsOCBAQCBzdGF0aWMgaW50IGxvY29tb2xj ZF9wcm9iZShzdHJ1Y3QgbG9jb21vX2RldiAqbGRldikKPj4gIAlwcm9wcy5tYXhfYnJpZ2h0bmVz cyA9IDQ7Cj4+ICAJbG9jb21vbGNkX2JsX2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0 ZXIoImxvY29tby1ibCIsCj4+ICAJCQkJCQkJJmxkZXYtPmRldiwgTlVMTCwKPj4gLQkJCQkJCQkm bG9jb21vYmxfZGF0YSwgJnByb3BzKTsKPj4gKwkJCQkJCQkmbG9jb21vYmxfZGF0YSwgJnByb3Bz LAo+PiArCQkJCQkJCUJBQ0tMSUdIVF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCj4+ICAJaWYg KElTX0VSUihsb2NvbW9sY2RfYmxfZGV2aWNlKSkKPj4gIAkJcmV0dXJuIFBUUl9FUlIobG9jb21v bGNkX2JsX2RldmljZSk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9s cDg1NXhfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xwODU1eF9ibC5jCj4+IGluZGV4 IGU1YjE0ZjUyNjI4Zi4uNmVmNTFjNjU0MGE2IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3ZpZGVv L2JhY2tsaWdodC9scDg1NXhfYmwuYwo+PiArKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9s cDg1NXhfYmwuYwo+PiBAQCAtMjk5LDcgKzI5OSw4IEBAIHN0YXRpYyBpbnQgbHA4NTV4X2JhY2ts aWdodF9yZWdpc3RlcihzdHJ1Y3QgbHA4NTV4ICpscCkKPj4gIAlwcm9wcy5icmlnaHRuZXNzID0g cGRhdGEtPmluaXRpYWxfYnJpZ2h0bmVzczsKPj4gIAo+PiAgCWJsID0gZGV2bV9iYWNrbGlnaHRf ZGV2aWNlX3JlZ2lzdGVyKGxwLT5kZXYsIG5hbWUsIGxwLT5kZXYsIGxwLAo+PiAtCQkJCSAgICAg ICAmbHA4NTV4X2JsX29wcywgJnByb3BzKTsKPj4gKwkJCQkgICAgICAgJmxwODU1eF9ibF9vcHMs ICZwcm9wcywKPj4gKwkJCQkgICAgICAgQkFDS0xJR0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCk7Cj4+ ICAJaWYgKElTX0VSUihibCkpCj4+ICAJCXJldHVybiBQVFJfRVJSKGJsKTsKPj4gIAo+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbHA4Nzg4X2JsLmMgYi9kcml2ZXJzL3Zp ZGVvL2JhY2tsaWdodC9scDg3ODhfYmwuYwo+PiBpbmRleCBjZjg2OWVjOTBjY2UuLjczNDY3N2Jl ZjczOSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbHA4Nzg4X2JsLmMK Pj4gKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbHA4Nzg4X2JsLmMKPj4gQEAgLTIxNCw3 ICsyMTQsOCBAQCBzdGF0aWMgaW50IGxwODc4OF9iYWNrbGlnaHRfcmVnaXN0ZXIoc3RydWN0IGxw ODc4OF9ibCAqYmwpCj4+ICAJCW5hbWUgPSBwZGF0YS0+bmFtZTsKPj4gIAo+PiAgCWJsX2RldiA9 IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIobmFtZSwgYmwtPmxwLT5kZXYsIGJsLAo+PiAtCQkJ CSAgICAgICAmbHA4Nzg4X2JsX29wcywgJnByb3BzKTsKPj4gKwkJCQkgICAgICAgJmxwODc4OF9i bF9vcHMsICZwcm9wcywKPj4gKwkJCQkgICAgICAgQkFDS0xJR0hUX1JFR0lTVEVSX0ZCX0NMSUVO VCk7Cj4+ICAJaWYgKElTX0VSUihibF9kZXYpKQo+PiAgCQlyZXR1cm4gUFRSX0VSUihibF9kZXYp Owo+PiAgCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sdjUyMDdscC5j IGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbHY1MjA3bHAuYwo+PiBpbmRleCA4YWI3Mjk3YjEx OGEuLmViZDQxZWRjZDkzNiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQv bHY1MjA3bHAuYwo+PiArKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sdjUyMDdscC5jCj4+ IEBAIC0xMjAsNyArMTIwLDggQEAgc3RhdGljIGludCBsdjUyMDdscF9wcm9iZShzdHJ1Y3QgaTJj X2NsaWVudCAqY2xpZW50LAo+PiAgCj4+ICAJYmFja2xpZ2h0ID0gZGV2bV9iYWNrbGlnaHRfZGV2 aWNlX3JlZ2lzdGVyKCZjbGllbnQtPmRldiwKPj4gIAkJCQlkZXZfbmFtZSgmY2xpZW50LT5kZXYp LCAmbHYtPmNsaWVudC0+ZGV2LAo+PiAtCQkJCWx2LCAmbHY1MjA3bHBfYmFja2xpZ2h0X29wcywg JnByb3BzKTsKPj4gKwkJCQlsdiwgJmx2NTIwN2xwX2JhY2tsaWdodF9vcHMsICZwcm9wcywKPj4g KwkJCQlCQUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJRU5UKTsKPj4gIAlpZiAoSVNfRVJSKGJhY2ts aWdodCkpIHsKPj4gIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIg YmFja2xpZ2h0XG4iKTsKPj4gIAkJcmV0dXJuIFBUUl9FUlIoYmFja2xpZ2h0KTsKPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L21heDg5MjVfYmwuYyBiL2RyaXZlcnMvdmlk ZW8vYmFja2xpZ2h0L21heDg5MjVfYmwuYwo+PiBpbmRleCA3YjczOGQ2MGVjYzIuLmFhMWQzOWFi OTk3NyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWF4ODkyNV9ibC5j Cj4+ICsrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L21heDg5MjVfYmwuYwo+PiBAQCAtMTY1 LDcgKzE2NSw4IEBAIHN0YXRpYyBpbnQgbWF4ODkyNV9iYWNrbGlnaHRfcHJvYmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKPj4gIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IE1BWF9CUklH SFRORVNTOwo+PiAgCWJsID0gZGV2bV9iYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5k ZXYsICJtYXg4OTI1LWJhY2tsaWdodCIsCj4+ICAJCQkJCSZwZGV2LT5kZXYsIGRhdGEsCj4+IC0J CQkJCSZtYXg4OTI1X2JhY2tsaWdodF9vcHMsICZwcm9wcyk7Cj4+ICsJCQkJCSZtYXg4OTI1X2Jh Y2tsaWdodF9vcHMsICZwcm9wcywKPj4gKwkJCQkJQkFDS0xJR0hUX1JFR0lTVEVSX0ZCX0NMSUVO VCk7Cj4+ICAJaWYgKElTX0VSUihibCkpIHsKPj4gIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFp bGVkIHRvIHJlZ2lzdGVyIGJhY2tsaWdodFxuIik7Cj4+ICAJCXJldHVybiBQVFJfRVJSKGJsKTsK Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L29tYXAxX2JsLmMgYi9kcml2 ZXJzL3ZpZGVvL2JhY2tsaWdodC9vbWFwMV9ibC5jCj4+IGluZGV4IDU0NmQ5NGRmMjFkNS4uYzU4 N2E0ZWM4OWEyIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9vbWFwMV9i bC5jCj4+ICsrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L29tYXAxX2JsLmMKPj4gQEAgLTE0 OCw3ICsxNDgsOCBAQCBzdGF0aWMgaW50IG9tYXBibF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQo+PiAgCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwo+PiAgCXByb3BzLm1h eF9icmlnaHRuZXNzID0gT01BUEJMX01BWF9JTlRFTlNJVFk7Cj4+ICAJZGV2ID0gZGV2bV9iYWNr bGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsICJvbWFwLWJsIiwgJnBkZXYtPmRldiwK Pj4gLQkJCQkJYmwsICZvbWFwYmxfb3BzLCAmcHJvcHMpOwo+PiArCQkJCQlibCwgJm9tYXBibF9v cHMsICZwcm9wcywKPj4gKwkJCQkJQkFDS0xJR0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCk7Cj4+ICAJ aWYgKElTX0VSUihkZXYpKQo+PiAgCQlyZXR1cm4gUFRSX0VSUihkZXYpOwo+PiAgCj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9vdDIwMF9ibC5jIGIvZHJpdmVycy92aWRl by9iYWNrbGlnaHQvb3QyMDBfYmwuYwo+PiBpbmRleCAzYWNkYjlmNjQ2ZWQuLjM2ZDcxYjMyYjlj ZCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvb3QyMDBfYmwuYwo+PiAr KysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9vdDIwMF9ibC5jCj4+IEBAIC0xMjAsNyArMTIw LDggQEAgc3RhdGljIGludCBvdDIwMF9iYWNrbGlnaHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKPj4gIAo+PiAgCWJsID0gZGV2bV9iYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVy KCZwZGV2LT5kZXYsIGRldl9uYW1lKCZwZGV2LT5kZXYpLAo+PiAgCQkJCQkmcGRldi0+ZGV2LCBk YXRhLCAmb3QyMDBfYmFja2xpZ2h0X29wcywKPj4gLQkJCQkJJnByb3BzKTsKPj4gKwkJCQkJJnBy b3BzLAo+PiArCQkJCQlCQUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJRU5UKTsKPj4gIAlpZiAoSVNf RVJSKGJsKSkgewo+PiAgCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIg YmFja2xpZ2h0XG4iKTsKPj4gIAkJcmV0dmFsID0gUFRSX0VSUihibCk7Cj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9wYW5kb3JhX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2Jh Y2tsaWdodC9wYW5kb3JhX2JsLmMKPj4gaW5kZXggNWQ4YmI4YjIwMTgzLi5iNjU0NTQzZWE4OTUg MTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3BhbmRvcmFfYmwuYwo+PiAr KysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9wYW5kb3JhX2JsLmMKPj4gQEAgLTExNSw3ICsx MTUsOCBAQCBzdGF0aWMgaW50IHBhbmRvcmFfYmFja2xpZ2h0X3Byb2JlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCj4+ICAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBNQVhfVVNFUl9WQUxV RTsKPj4gIAlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKPj4gIAlibCA9IGRldm1fYmFja2xp Z2h0X2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2LCBwZGV2LT5uYW1lLCAmcGRldi0+ZGV2LAo+ PiAtCQkJCQlOVUxMLCAmcGFuZG9yYV9iYWNrbGlnaHRfb3BzLCAmcHJvcHMpOwo+PiArCQkJCQlO VUxMLCAmcGFuZG9yYV9iYWNrbGlnaHRfb3BzLCAmcHJvcHMsCj4+ICsJCQkJCUJBQ0tMSUdIVF9S RUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCWlmIChJU19FUlIoYmwpKSB7Cj4+ICAJCWRldl9lcnIo JnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBiYWNrbGlnaHRcbiIpOwo+PiAgCQlyZXR1 cm4gUFRSX0VSUihibCk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9w Y2Y1MDYzMy1iYWNrbGlnaHQuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3BjZjUwNjMzLWJh Y2tsaWdodC5jCj4+IGluZGV4IDg1YmQ1NzNiNmQxNS4uOGYzZGQ2YjIyMDg4IDEwMDY0NAo+PiAt LS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9wY2Y1MDYzMy1iYWNrbGlnaHQuYwo+PiArKysg Yi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9wY2Y1MDYzMy1iYWNrbGlnaHQuYwo+PiBAQCAtMTI5 LDcgKzEyOSw4IEBAIHN0YXRpYyBpbnQgcGNmNTA2MzNfYmxfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKPj4gIAo+PiAgCXBjZl9ibC0+YmwgPSBkZXZtX2JhY2tsaWdodF9kZXZp Y2VfcmVnaXN0ZXIoJnBkZXYtPmRldiwgcGRldi0+bmFtZSwKPj4gIAkJCQkJCSZwZGV2LT5kZXYs IHBjZl9ibCwKPj4gLQkJCQkJCSZwY2Y1MDYzM19ibF9vcHMsICZibF9wcm9wcyk7Cj4+ICsJCQkJ CQkmcGNmNTA2MzNfYmxfb3BzLCAmYmxfcHJvcHMsCj4+ICsJCQkJCQlCQUNLTElHSFRfUkVHSVNU RVJfRkJfQ0xJRU5UKTsKPj4gIAo+PiAgCWlmIChJU19FUlIocGNmX2JsLT5ibCkpCj4+ICAJCXJl dHVybiBQVFJfRVJSKHBjZl9ibC0+YmwpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9i YWNrbGlnaHQvcG04OTQxLXdsZWQuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3BtODk0MS13 bGVkLmMKPj4gaW5kZXggMGI2ZDIxOTU1ZDkxLi44NTAzNWYyZjc4NGYgMTAwNjQ0Cj4+IC0tLSBh L2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3BtODk0MS13bGVkLmMKPj4gKysrIGIvZHJpdmVycy92 aWRlby9iYWNrbGlnaHQvcG04OTQxLXdsZWQuYwo+PiBAQCAtNDA4LDcgKzQwOCw4IEBAIHN0YXRp YyBpbnQgcG04OTQxX3dsZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4g IAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IFBNODk0MV9XTEVEX1JFR19WQUxfTUFYOwo+PiAgCWJs ID0gZGV2bV9iYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsIHdsZWQtPm5hbWUs Cj4+ICAJCQkJCSAgICAmcGRldi0+ZGV2LCB3bGVkLAo+PiAtCQkJCQkgICAgJnBtODk0MV93bGVk X29wcywgJnByb3BzKTsKPj4gKwkJCQkJICAgICZwbTg5NDFfd2xlZF9vcHMsICZwcm9wcywKPj4g KwkJCQkJICAgIEJBQ0tMSUdIVF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCXJldHVybiBQVFJf RVJSX09SX1pFUk8oYmwpOwo+PiAgfTsKPj4gIAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRl by9iYWNrbGlnaHQvcHdtX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9wd21fYmwuYwo+ PiBpbmRleCBiMmIzNjZiYjBmOTcuLjk4NjU1ZmNlNDYyYyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVy cy92aWRlby9iYWNrbGlnaHQvcHdtX2JsLmMKPj4gKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGln aHQvcHdtX2JsLmMKPj4gQEAgLTMzMCw3ICszMzAsOCBAQCBzdGF0aWMgaW50IHB3bV9iYWNrbGln aHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gIAlwcm9wcy50eXBlID0g QkFDS0xJR0hUX1JBVzsKPj4gIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IGRhdGEtPm1heF9icmln aHRuZXNzOwo+PiAgCWJsID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihkZXZfbmFtZSgmcGRl di0+ZGV2KSwgJnBkZXYtPmRldiwgcGIsCj4+IC0JCQkJICAgICAgICZwd21fYmFja2xpZ2h0X29w cywgJnByb3BzKTsKPj4gKwkJCQkgICAgICAgJnB3bV9iYWNrbGlnaHRfb3BzLCAmcHJvcHMsCj4+ ICsJCQkJICAgICAgIEJBQ0tMSUdIVF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCWlmIChJU19F UlIoYmwpKSB7Cj4+ICAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBi YWNrbGlnaHRcbiIpOwo+PiAgCQlyZXQgPSBQVFJfRVJSKGJsKTsKPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvdmlkZW8vYmFja2xpZ2h0L3M2ZTYzbTAuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0 L3M2ZTYzbTAuYwo+PiBpbmRleCAzYzRhMjJhMzA2M2EuLjYwYmM4ODA3NWU2OCAxMDA2NDQKPj4g LS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvczZlNjNtMC5jCj4+ICsrKyBiL2RyaXZlcnMv dmlkZW8vYmFja2xpZ2h0L3M2ZTYzbTAuYwo+PiBAQCAtNzQ4LDcgKzc0OCw4IEBAIHN0YXRpYyBp bnQgczZlNjNtMF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQo+PiAgCj4+ICAJYmQgPSBk ZXZtX2JhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoJnNwaS0+ZGV2LCAiczZlNjNtMGJsLWJsIiwK Pj4gIAkJCQkJJnNwaS0+ZGV2LCBsY2QsICZzNmU2M20wX2JhY2tsaWdodF9vcHMsCj4+IC0JCQkJ CSZwcm9wcyk7Cj4+ICsJCQkJCSZwcm9wcywKPj4gKwkJCQkJQkFDS0xJR0hUX1JFR0lTVEVSX0ZC X0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VSUihiZCkpCj4+ICAJCXJldHVybiBQVFJfRVJSKGJkKTsK Pj4gIAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvc2t5ODE0NTItYmFj a2xpZ2h0LmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9za3k4MTQ1Mi1iYWNrbGlnaHQuYwo+ PiBpbmRleCBkNDE0YzdhM2FjZjUuLjlhYmRiY2Y3MWZlZiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVy cy92aWRlby9iYWNrbGlnaHQvc2t5ODE0NTItYmFja2xpZ2h0LmMKPj4gKysrIGIvZHJpdmVycy92 aWRlby9iYWNrbGlnaHQvc2t5ODE0NTItYmFja2xpZ2h0LmMKPj4gQEAgLTI5NCw3ICsyOTQsOCBA QCBzdGF0aWMgaW50IHNreTgxNDUyX2JsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCj4+ICAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBTS1k4MTQ1Ml9NQVhfQlJJR0hUTkVTUywK Pj4gIAluYW1lID0gcGRhdGEtPm5hbWUgPyBwZGF0YS0+bmFtZSA6IFNLWTgxNDUyX0RFRkFVTFRf TkFNRTsKPj4gIAliZCA9IGRldm1fYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihkZXYsIG5hbWUs IGRldiwgcmVnbWFwLAo+PiAtCQkJCQkJJnNreTgxNDUyX2JsX29wcywgJnByb3BzKTsKPj4gKwkJ CQkJCSZza3k4MTQ1Ml9ibF9vcHMsICZwcm9wcywKPj4gKwkJCQkJCUJBQ0tMSUdIVF9SRUdJU1RF Ul9GQl9DTElFTlQpOwo+PiAgCWlmIChJU19FUlIoYmQpKSB7Cj4+ICAJCWRldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIHJlZ2lzdGVyLiBlcnI9JWxkXG4iLCBQVFJfRVJSKGJkKSk7Cj4+ICAJCXJldHVy biBQVFJfRVJSKGJkKTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3Rv c2FfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3Rvc2FfYmwuYwo+PiBpbmRleCA4Mzc0 MmQ4MDYzOTEuLjc1NWE2MTcyN2NhMSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy92aWRlby9iYWNr bGlnaHQvdG9zYV9ibC5jCj4+ICsrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3Rvc2FfYmwu Ywo+PiBAQCAtMTA3LDcgKzEwNyw4IEBAIHN0YXRpYyBpbnQgdG9zYV9ibF9wcm9iZShzdHJ1Y3Qg aTJjX2NsaWVudCAqY2xpZW50LAo+PiAgCXByb3BzLm1heF9icmlnaHRuZXNzID0gNTEyIC0gMTsK Pj4gIAlkYXRhLT5ibCA9IGRldm1fYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5k ZXYsICJ0b3NhLWJsIiwKPj4gIAkJCQkJCSZjbGllbnQtPmRldiwgZGF0YSwgJmJsX29wcywKPj4g LQkJCQkJCSZwcm9wcyk7Cj4+ICsJCQkJCQkmcHJvcHMsCj4+ICsJCQkJCQlCQUNLTElHSFRfUkVH SVNURVJfRkJfQ0xJRU5UKTsKPj4gIAlpZiAoSVNfRVJSKGRhdGEtPmJsKSkgewo+PiAgCQlyZXQg PSBQVFJfRVJSKGRhdGEtPmJsKTsKPj4gIAkJZ290byBlcnJfcmVnOwo+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy92aWRlby9iYWNrbGlnaHQvdHBzNjUyMTdfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFj a2xpZ2h0L3RwczY1MjE3X2JsLmMKPj4gaW5kZXggZmQ1MjRhZDg2MGE1Li4wYWM1NWI5YTc3M2Mg MTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3RwczY1MjE3X2JsLmMKPj4g KysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvdHBzNjUyMTdfYmwuYwo+PiBAQCAtMzA2LDcg KzMwNiw4IEBAIHN0YXRpYyBpbnQgdHBzNjUyMTdfYmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKPj4gIAo+PiAgCXRwczY1MjE3X2JsLT5ibCA9IGRldm1fYmFja2xpZ2h0X2Rl dmljZV9yZWdpc3RlcigmcGRldi0+ZGV2LCBwZGV2LT5uYW1lLAo+PiAgCQkJCQkJdHBzNjUyMTdf YmwtPmRldiwgdHBzNjUyMTdfYmwsCj4+IC0JCQkJCQkmdHBzNjUyMTdfYmxfb3BzLCAmYmxfcHJv cHMpOwo+PiArCQkJCQkJJnRwczY1MjE3X2JsX29wcywgJmJsX3Byb3BzLAo+PiArCQkJCQkJQkFD S0xJR0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VSUih0cHM2NTIxN19ibC0+ YmwpKSB7Cj4+ICAJCWRldl9lcnIodHBzNjUyMTdfYmwtPmRldiwKPj4gIAkJCSJyZWdpc3RyYXRp b24gb2YgYmFja2xpZ2h0IGRldmljZSBmYWlsZWQ6ICVkXG4iLCByYyk7Cj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC93bTgzMXhfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFj a2xpZ2h0L3dtODMxeF9ibC5jCj4+IGluZGV4IDZlYWIwZDZjMjYyYS4uOGI5MmEyNzdmODNiIDEw MDY0NAo+PiAtLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC93bTgzMXhfYmwuYwo+PiArKysg Yi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC93bTgzMXhfYmwuYwo+PiBAQCAtMTk3LDcgKzE5Nyw4 IEBAIHN0YXRpYyBpbnQgd204MzF4X2JhY2tsaWdodF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQo+PiAgCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwo+PiAgCXByb3BzLm1h eF9icmlnaHRuZXNzID0gbWF4X2lzZWw7Cj4+ICAJYmwgPSBkZXZtX2JhY2tsaWdodF9kZXZpY2Vf cmVnaXN0ZXIoJnBkZXYtPmRldiwgIndtODMxeCIsICZwZGV2LT5kZXYsCj4+IC0JCQkJCWRhdGEs ICZ3bTgzMXhfYmFja2xpZ2h0X29wcywgJnByb3BzKTsKPj4gKwkJCQkJZGF0YSwgJndtODMxeF9i YWNrbGlnaHRfb3BzLCAmcHJvcHMsCj4+ICsJCQkJCUJBQ0tMSUdIVF9SRUdJU1RFUl9GQl9DTElF TlQpOwo+PiAgCWlmIChJU19FUlIoYmwpKSB7Cj4+ICAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZh aWxlZCB0byByZWdpc3RlciBiYWNrbGlnaHRcbiIpOwo+PiAgCQlyZXR1cm4gUFRSX0VSUihibCk7 Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2F0bWVsX2xjZGZiLmMgYi9kcml2 ZXJzL3ZpZGVvL2ZiZGV2L2F0bWVsX2xjZGZiLmMKPj4gaW5kZXggNjY5ZWNjNzU1ZmE5Li5kNmM0 NmQ2NzA2MjIgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvYXRtZWxfbGNkZmIu Ywo+PiArKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2F0bWVsX2xjZGZiLmMKPj4gQEAgLTI0NCw3 ICsyNDQsOCBAQCBzdGF0aWMgdm9pZCBpbml0X2JhY2tsaWdodChzdHJ1Y3QgYXRtZWxfbGNkZmJf aW5mbyAqc2luZm8pCj4+ICAJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7Cj4+ICAJcHJvcHMu bWF4X2JyaWdodG5lc3MgPSAweGZmOwo+PiAgCWJsID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rl cigiYmFja2xpZ2h0IiwgJnNpbmZvLT5wZGV2LT5kZXYsIHNpbmZvLAo+PiAtCQkJCSAgICAgICAm YXRtZWxfbGNkY19ibF9vcHMsICZwcm9wcyk7Cj4+ICsJCQkJICAgICAgICZhdG1lbF9sY2RjX2Js X29wcywgJnByb3BzLAo+PiArCQkJCSAgICAgICBCQUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJRU5U KTsKPj4gIAlpZiAoSVNfRVJSKGJsKSkgewo+PiAgCQlkZXZfZXJyKCZzaW5mby0+cGRldi0+ZGV2 LCAiZXJyb3IgJWxkIG9uIGJhY2tsaWdodCByZWdpc3RlclxuIiwKPj4gIAkJCQlQVFJfRVJSKGJs KSk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2F0eS9hdHkxMjhmYi5jIGIv ZHJpdmVycy92aWRlby9mYmRldi9hdHkvYXR5MTI4ZmIuYwo+PiBpbmRleCAwYTQ2MjY4ODZiMDAu LmRhZTg3MzQ4NzBjOSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9hdHkvYXR5 MTI4ZmIuYwo+PiArKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2F0eS9hdHkxMjhmYi5jCj4+IEBA IC0xODcxLDcgKzE4NzEsOCBAQCBzdGF0aWMgdm9pZCBhdHkxMjhfYmxfaW5pdChzdHJ1Y3QgYXR5 MTI4ZmJfcGFyICpwYXIpCj4+ICAJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7Cj4+ICAJcHJv cHMubWF4X2JyaWdodG5lc3MgPSBGQl9CQUNLTElHSFRfTEVWRUxTIC0gMTsKPj4gIAliZCA9IGJh Y2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIobmFtZSwgaW5mby0+ZGV2LCBwYXIsICZhdHkxMjhfYmxf ZGF0YSwKPj4gLQkJCQkgICAgICAgJnByb3BzKTsKPj4gKwkJCQkgICAgICAgJnByb3BzLAo+PiAr CQkJCSAgICAgICBCQUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJRU5UKTsKPj4gIAlpZiAoSVNfRVJS KGJkKSkgewo+PiAgCQlpbmZvLT5ibF9kZXYgPSBOVUxMOwo+PiAgCQlwcmludGsoS0VSTl9XQVJO SU5HICJhdHkxMjg6IEJhY2tsaWdodCByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvYXR5L2F0eWZiX2Jhc2UuYyBiL2RyaXZlcnMvdmlk ZW8vZmJkZXYvYXR5L2F0eWZiX2Jhc2UuYwo+PiBpbmRleCBmMzRlZDQ3ZmNhZjguLjkxOGVjOGY5 NDZhYSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9hdHkvYXR5ZmJfYmFzZS5j Cj4+ICsrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvYXR5L2F0eWZiX2Jhc2UuYwo+PiBAQCAtMjI0 Miw3ICsyMjQyLDggQEAgc3RhdGljIHZvaWQgYXR5X2JsX2luaXQoc3RydWN0IGF0eWZiX3BhciAq cGFyKQo+PiAgCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwo+PiAgCXByb3BzLm1heF9icmln aHRuZXNzID0gRkJfQkFDS0xJR0hUX0xFVkVMUyAtIDE7Cj4+ICAJYmQgPSBiYWNrbGlnaHRfZGV2 aWNlX3JlZ2lzdGVyKG5hbWUsIGluZm8tPmRldiwgcGFyLCAmYXR5X2JsX2RhdGEsCj4+IC0JCQkJ ICAgICAgICZwcm9wcyk7Cj4+ICsJCQkJICAgICAgICZwcm9wcywKPj4gKwkJCQkgICAgICAgQkFD S0xJR0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VSUihiZCkpIHsKPj4gIAkJ aW5mby0+YmxfZGV2ID0gTlVMTDsKPj4gIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXR5OiBCYWNr bGlnaHQgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Zp ZGVvL2ZiZGV2L2F0eS9yYWRlb25fYmFja2xpZ2h0LmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2F0 eS9yYWRlb25fYmFja2xpZ2h0LmMKPj4gaW5kZXggMzAxZDZkNmFlZWFkLi5hOGM5ZWY2MThlNDIg MTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvYXR5L3JhZGVvbl9iYWNrbGlnaHQu Ywo+PiArKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2F0eS9yYWRlb25fYmFja2xpZ2h0LmMKPj4g QEAgLTE1NSw3ICsxNTUsOCBAQCB2b2lkIHJhZGVvbmZiX2JsX2luaXQoc3RydWN0IHJhZGVvbmZi X2luZm8gKnJpbmZvKQo+PiAgCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwo+PiAgCXByb3Bz Lm1heF9icmlnaHRuZXNzID0gRkJfQkFDS0xJR0hUX0xFVkVMUyAtIDE7Cj4+ICAJYmQgPSBiYWNr bGlnaHRfZGV2aWNlX3JlZ2lzdGVyKG5hbWUsIHJpbmZvLT5pbmZvLT5kZXYsIHBkYXRhLAo+PiAt CQkJCSAgICAgICAmcmFkZW9uX2JsX2RhdGEsICZwcm9wcyk7Cj4+ICsJCQkJICAgICAgICZyYWRl b25fYmxfZGF0YSwgJnByb3BzLAo+PiArCQkJCSAgICAgICBCQUNLTElHSFRfUkVHSVNURVJfRkJf Q0xJRU5UKTsKPj4gIAlpZiAoSVNfRVJSKGJkKSkgewo+PiAgCQlyaW5mby0+aW5mby0+YmxfZGV2 ID0gTlVMTDsKPj4gIAkJcHJpbnRrKCJyYWRlb25mYjogQmFja2xpZ2h0IHJlZ2lzdHJhdGlvbiBm YWlsZWRcbiIpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9iZjUzNy1scTAz NS5jIGIvZHJpdmVycy92aWRlby9mYmRldi9iZjUzNy1scTAzNS5jCj4+IGluZGV4IGVmMjlmYjQy NTEyMi4uNzdiNmY5OGQyMTgyIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2Jm NTM3LWxxMDM1LmMKPj4gKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9iZjUzNy1scTAzNS5jCj4+ IEBAIC03NjUsNyArNzY1LDggQEAgc3RhdGljIGludCBiZmluX2xxMDM1X3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICAJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7Cj4+ ICAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBNQVhfQlJJR0hFTkVTUzsKPj4gIAlibF9kZXYgPSBi YWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJiZjUzNy1ibCIsIE5VTEwsIE5VTEwsCj4+IC0JCQkJ CSAgICZiZmluX2xxMDM1ZmJfYmxfb3BzLCAmcHJvcHMpOwo+PiArCQkJCQkgICAmYmZpbl9scTAz NWZiX2JsX29wcywgJnByb3BzLAo+PiArCQkJCQkgICBCQUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJ RU5UKTsKPj4gIAo+PiAgCWxjZF9kZXYgPSBsY2RfZGV2aWNlX3JlZ2lzdGVyKEtCVUlMRF9NT0RO QU1FLCAmcGRldi0+ZGV2LCBOVUxMLAo+PiAgCQkJCSAgICAgICZiZmluX2xjZF9vcHMpOwo+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9iZjU0eC1scTA0M2ZiLmMgYi9kcml2ZXJz L3ZpZGVvL2ZiZGV2L2JmNTR4LWxxMDQzZmIuYwo+PiBpbmRleCA4ZjFmOTdjNzU2MTkuLjQwMDFm M2M5YzQwYyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9iZjU0eC1scTA0M2Zi LmMKPj4gKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9iZjU0eC1scTA0M2ZiLmMKPj4gQEAgLTY1 Miw3ICs2NTIsOCBAQCBzdGF0aWMgaW50IGJmaW5fYmY1NHhfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKPj4gIAlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKPj4gIAlwcm9w cy5tYXhfYnJpZ2h0bmVzcyA9IDI1NTsKPj4gIAlibF9kZXYgPSBiYWNrbGlnaHRfZGV2aWNlX3Jl Z2lzdGVyKCJiZjU0eC1ibCIsIE5VTEwsIE5VTEwsCj4+IC0JCQkJCSAgICZiZmluX2xxMDQzZmJf Ymxfb3BzLCAmcHJvcHMpOwo+PiArCQkJCQkgICAmYmZpbl9scTA0M2ZiX2JsX29wcywgJnByb3Bz LAo+PiArCQkJCQkgICBCQUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJRU5UKTsKPj4gIAlpZiAoSVNf RVJSKGJsX2RldikpIHsKPj4gIAkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FCj4+ICAJCQki OiB1bmFibGUgdG8gcmVnaXN0ZXIgYmFja2xpZ2h0LlxuIik7Cj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3ZpZGVvL2ZiZGV2L2JmaW4tdDM1MG1jcWItZmIuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYv YmZpbi10MzUwbWNxYi1mYi5jCj4+IGluZGV4IGU1ZWU0ZDk2NzdmNy4uNmMxYzY0ZjQ4NDMyIDEw MDY0NAo+PiAtLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2JmaW4tdDM1MG1jcWItZmIuYwo+PiAr KysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2JmaW4tdDM1MG1jcWItZmIuYwo+PiBAQCAtNTQ5LDcg KzU0OSw4IEBAIHN0YXRpYyBpbnQgYmZpbl90MzUwbWNxYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQo+PiAgCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwo+PiAgCXByb3Bz Lm1heF9icmlnaHRuZXNzID0gMjU1Owo+PiAgCWJsX2RldiA9IGJhY2tsaWdodF9kZXZpY2VfcmVn aXN0ZXIoImJmNTJ4LWJsIiwgTlVMTCwgTlVMTCwKPj4gLQkJCQkJICAgJmJmaW5fbHEwNDNmYl9i bF9vcHMsICZwcm9wcyk7Cj4+ICsJCQkJCSAgICZiZmluX2xxMDQzZmJfYmxfb3BzLCAmcHJvcHMs Cj4+ICsJCQkJCSAgIEJBQ0tMSUdIVF9SRUdJU1RFUl9GQl9DTElFTlQpOwo+PiAgCWlmIChJU19F UlIoYmxfZGV2KSkgewo+PiAgCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUKPj4gIAkJCSI6 IHVuYWJsZSB0byByZWdpc3RlciBiYWNrbGlnaHQuXG4iKTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvdmlkZW8vZmJkZXYvZXh5bm9zL3M2ZThheDAuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvZXh5 bm9zL3M2ZThheDAuYwo+PiBpbmRleCBkZTJmM2U3OTM3ODYuLmE3OGM2ZWZmYWI5NyAxMDA2NDQK Pj4gLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9leHlub3MvczZlOGF4MC5jCj4+ICsrKyBiL2Ry aXZlcnMvdmlkZW8vZmJkZXYvZXh5bm9zL3M2ZThheDAuYwo+PiBAQCAtNzk2LDcgKzc5Niw4IEBA IHN0YXRpYyBpbnQgczZlOGF4MF9wcm9iZShzdHJ1Y3QgbWlwaV9kc2ltX2xjZF9kZXZpY2UgKmRz aW1fZGV2KQo+PiAgCX0KPj4gIAo+PiAgCWxjZC0+YmQgPSBkZXZtX2JhY2tsaWdodF9kZXZpY2Vf cmVnaXN0ZXIobGNkLT5kZXYsICJzNmU4YXgwLWJsIiwKPj4gLQkJCQlsY2QtPmRldiwgbGNkLCAm czZlOGF4MF9iYWNrbGlnaHRfb3BzLCBOVUxMKTsKPj4gKwkJCQlsY2QtPmRldiwgbGNkLCAmczZl OGF4MF9iYWNrbGlnaHRfb3BzLCBOVUxMLAo+PiArCQkJCUJBQ0tMSUdIVF9SRUdJU1RFUl9GQl9D TElFTlQpOwo+PiAgCWlmIChJU19FUlIobGNkLT5iZCkpIHsKPj4gIAkJZGV2X2VycihsY2QtPmRl diwgImZhaWxlZCB0byByZWdpc3RlciBiYWNrbGlnaHQgb3BzLlxuIik7Cj4+ICAJCXJldHVybiBQ VFJfRVJSKGxjZC0+YmQpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9teDNm Yi5jIGIvZHJpdmVycy92aWRlby9mYmRldi9teDNmYi5jCj4+IGluZGV4IGY5MWIxZGIyNjJiMC4u YzEzYzM2NWU2NjIyIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L214M2ZiLmMK Pj4gKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9teDNmYi5jCj4+IEBAIC0zMTksNyArMzE5LDgg QEAgc3RhdGljIHZvaWQgbXgzZmJfaW5pdF9iYWNrbGlnaHQoc3RydWN0IG14M2ZiX2RhdGEgKmZi ZCkKPj4gIAlzZGNfc2V0X2JyaWdodG5lc3MoZmJkLCBmYmQtPmJhY2tsaWdodF9sZXZlbCk7Cj4+ ICAKPj4gIAlibCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoIm14M2ZiLWJsIiwgZmJkLT5k ZXYsIGZiZCwKPj4gLQkJCQkgICAgICAgJm14M2ZiX2xjZGNfYmxfb3BzLCAmcHJvcHMpOwo+PiAr CQkJCSAgICAgICAmbXgzZmJfbGNkY19ibF9vcHMsICZwcm9wcywKPj4gKwkJCQkgICAgICAgQkFD S0xJR0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VSUihibCkpIHsKPj4gIAkJ ZGV2X2VycihmYmQtPmRldiwgImVycm9yICVsZCBvbiBiYWNrbGlnaHQgcmVnaXN0ZXJcbiIsCj4+ ICAJCQkJUFRSX0VSUihibCkpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9u dmlkaWEvbnZfYmFja2xpZ2h0LmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L252aWRpYS9udl9iYWNr bGlnaHQuYwo+PiBpbmRleCA1YzE1MWIyZWE2ODMuLmZkYjkxNTQ3YjAyZiAxMDA2NDQKPj4gLS0t IGEvZHJpdmVycy92aWRlby9mYmRldi9udmlkaWEvbnZfYmFja2xpZ2h0LmMKPj4gKysrIGIvZHJp dmVycy92aWRlby9mYmRldi9udmlkaWEvbnZfYmFja2xpZ2h0LmMKPj4gQEAgLTEwOCw3ICsxMDgs OCBAQCB2b2lkIG52aWRpYV9ibF9pbml0KHN0cnVjdCBudmlkaWFfcGFyICpwYXIpCj4+ICAJcHJv cHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7Cj4+ICAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBGQl9C QUNLTElHSFRfTEVWRUxTIC0gMTsKPj4gIAliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIo bmFtZSwgaW5mby0+ZGV2LCBwYXIsICZudmlkaWFfYmxfb3BzLAo+PiAtCQkJCSAgICAgICAmcHJv cHMpOwo+PiArCQkJCSAgICAgICAmcHJvcHMsCj4+ICsJCQkJICAgICAgIEJBQ0tMSUdIVF9SRUdJ U1RFUl9GQl9DTElFTlQpOwo+PiAgCWlmIChJU19FUlIoYmQpKSB7Cj4+ICAJCWluZm8tPmJsX2Rl diA9IE5VTEw7Cj4+ICAJCXByaW50ayhLRVJOX1dBUk5JTkcgIm52aWRpYTogQmFja2xpZ2h0IHJl Z2lzdHJhdGlvbiBmYWlsZWRcbiIpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRl di9vbWFwMi9vbWFwZmIvZGlzcGxheXMvcGFuZWwtZHNpLWNtLmMgYi9kcml2ZXJzL3ZpZGVvL2Zi ZGV2L29tYXAyL29tYXBmYi9kaXNwbGF5cy9wYW5lbC1kc2ktY20uYwo+PiBpbmRleCBiNTgwMTJi ODJiNmYuLjJjNWZjY2Y4MTM5MSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9v bWFwMi9vbWFwZmIvZGlzcGxheXMvcGFuZWwtZHNpLWNtLmMKPj4gKysrIGIvZHJpdmVycy92aWRl by9mYmRldi9vbWFwMi9vbWFwZmIvZGlzcGxheXMvcGFuZWwtZHNpLWNtLmMKPj4gQEAgLTEyNTks NyArMTI1OSw4IEBAIHN0YXRpYyBpbnQgZHNpY21fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKPj4gIAo+PiAgCQlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKPj4gIAkJYmxk ZXYgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKGRldl9uYW1lKGRldiksCj4+IC0JCQkJZGV2 LCBkZGF0YSwgJmRzaWNtX2JsX29wcywgJnByb3BzKTsKPj4gKwkJCQlkZXYsIGRkYXRhLCAmZHNp Y21fYmxfb3BzLCAmcHJvcHMsCj4+ICsJCQkJQkFDS0xJR0hUX1JFR0lTVEVSX0ZCX0NMSUVOVCk7 Cj4+ICAJCWlmIChJU19FUlIoYmxkZXYpKSB7Cj4+ICAJCQlyID0gUFRSX0VSUihibGRldik7Cj4+ ICAJCQlnb3RvIGVycl9ibDsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21h cDIvb21hcGZiL2Rpc3BsYXlzL3BhbmVsLXNvbnktYWN4NTY1YWttLmMgYi9kcml2ZXJzL3ZpZGVv L2ZiZGV2L29tYXAyL29tYXBmYi9kaXNwbGF5cy9wYW5lbC1zb255LWFjeDU2NWFrbS5jCj4+IGlu ZGV4IDQ2ODU2MGE2ZGFhZS4uOGQ3ODIxZThiYjBhIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3Zp ZGVvL2ZiZGV2L29tYXAyL29tYXBmYi9kaXNwbGF5cy9wYW5lbC1zb255LWFjeDU2NWFrbS5jCj4+ ICsrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvb21hcGZiL2Rpc3BsYXlzL3BhbmVsLXNv bnktYWN4NTY1YWttLmMKPj4gQEAgLTgxNiw3ICs4MTYsOCBAQCBzdGF0aWMgaW50IGFjeDU2NWFr bV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQo+PiAgCXByb3BzLnR5cGUgPSBCQUNLTElH SFRfUkFXOwo+PiAgCj4+ICAJYmxkZXYgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJhY3g1 NjVha20iLCAmZGRhdGEtPnNwaS0+ZGV2LAo+PiAtCQkJZGRhdGEsICZhY3g1NjVha21fYmxfb3Bz LCAmcHJvcHMpOwo+PiArCQkJZGRhdGEsICZhY3g1NjVha21fYmxfb3BzLCAmcHJvcHMsCj4+ICsJ CQlCQUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJRU5UKTsKPj4gIAlpZiAoSVNfRVJSKGJsZGV2KSkg ewo+PiAgCQlyID0gUFRSX0VSUihibGRldik7Cj4+ICAJCWdvdG8gZXJyX3JlZ19ibDsKPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvcml2YS9mYmRldi5jIGIvZHJpdmVycy92aWRl by9mYmRldi9yaXZhL2ZiZGV2LmMKPj4gaW5kZXggMmVmMjZhZDk5MzQxLi42ZGMwNWRhNTA2MDkg MTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvcml2YS9mYmRldi5jCj4+ICsrKyBi L2RyaXZlcnMvdmlkZW8vZmJkZXYvcml2YS9mYmRldi5jCj4+IEBAIC0zNDMsNyArMzQzLDggQEAg c3RhdGljIHZvaWQgcml2YV9ibF9pbml0KHN0cnVjdCByaXZhX3BhciAqcGFyKQo+PiAgCXByb3Bz LnR5cGUgPSBCQUNLTElHSFRfUkFXOwo+PiAgCXByb3BzLm1heF9icmlnaHRuZXNzID0gRkJfQkFD S0xJR0hUX0xFVkVMUyAtIDE7Cj4+ICAJYmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKG5h bWUsIGluZm8tPmRldiwgcGFyLCAmcml2YV9ibF9vcHMsCj4+IC0JCQkJICAgICAgICZwcm9wcyk7 Cj4+ICsJCQkJICAgICAgICZwcm9wcywKPj4gKwkJCQkgICAgICAgQkFDS0xJR0hUX1JFR0lTVEVS X0ZCX0NMSUVOVCk7Cj4+ICAJaWYgKElTX0VSUihiZCkpIHsKPj4gIAkJaW5mby0+YmxfZGV2ID0g TlVMTDsKPj4gIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicml2YTogQmFja2xpZ2h0IHJlZ2lzdHJh dGlvbiBmYWlsZWRcbiIpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9zaF9t b2JpbGVfbGNkY2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L3NoX21vYmlsZV9sY2RjZmIuYwo+ PiBpbmRleCA4MmMwYThjYWE5YjguLjIwMDBlZDk4YjM4MCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVy cy92aWRlby9mYmRldi9zaF9tb2JpbGVfbGNkY2ZiLmMKPj4gKysrIGIvZHJpdmVycy92aWRlby9m YmRldi9zaF9tb2JpbGVfbGNkY2ZiLmMKPj4gQEAgLTIzMTQsNyArMjMxNCw4IEBAIHN0YXRpYyBz dHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqc2hfbW9iaWxlX2xjZGNfYmxfcHJvYmUoc3RydWN0IGRl dmljZSAqcGFyZW50LAo+PiAgCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibDsKPj4gIAo+PiAg CWJsID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihjaC0+Y2ZnLT5ibF9pbmZvLm5hbWUsIHBh cmVudCwgY2gsCj4+IC0JCQkJICAgICAgICZzaF9tb2JpbGVfbGNkY19ibF9vcHMsIE5VTEwpOwo+ PiArCQkJCSAgICAgICAmc2hfbW9iaWxlX2xjZGNfYmxfb3BzLCBOVUxMLAo+PiArCQkJCSAgICAg ICBCQUNLTElHSFRfUkVHSVNURVJfRkJfQ0xJRU5UKTsKPj4gIAlpZiAoSVNfRVJSKGJsKSkgewo+ PiAgCQlkZXZfZXJyKHBhcmVudCwgInVuYWJsZSB0byByZWdpc3RlciBiYWNrbGlnaHQgZGV2aWNl OiAlbGRcbiIsCj4+ICAJCQlQVFJfRVJSKGJsKSk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Zp ZGVvL2ZiZGV2L3NzZDEzMDdmYi5jIGIvZHJpdmVycy92aWRlby9mYmRldi9zc2QxMzA3ZmIuYwo+ PiBpbmRleCBhOWM0NWM4OWIxNWUuLmE4YTdiYTRhY2RlNiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVy cy92aWRlby9mYmRldi9zc2QxMzA3ZmIuYwo+PiArKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L3Nz ZDEzMDdmYi5jCj4+IEBAIC02NzMsNyArNjczLDggQEAgc3RhdGljIGludCBzc2QxMzA3ZmJfcHJv YmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKPj4gIAo+PiAgCXNucHJpbnRmKGJsX25hbWUs IHNpemVvZihibF9uYW1lKSwgInNzZDEzMDdmYiVkIiwgaW5mby0+bm9kZSk7Cj4+ICAJYmwgPSBi YWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKGJsX25hbWUsICZjbGllbnQtPmRldiwgcGFyLAo+PiAt CQkJCSAgICAgICAmc3NkMTMwN2ZiX2JsX29wcywgTlVMTCk7Cj4+ICsJCQkJICAgICAgICZzc2Qx MzA3ZmJfYmxfb3BzLCBOVUxMLAo+PiArCQkJCSAgICAgICBCQUNLTElHSFRfUkVHSVNURVJfRkJf Q0xJRU5UKTsKPj4gIAlpZiAoSVNfRVJSKGJsKSkgewo+PiAgCQlyZXQgPSBQVFJfRVJSKGJsKTsK Pj4gIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgYmFja2xpZ2h0 IGRldmljZTogJWRcbiIsCj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5o IGIvaW5jbHVkZS9saW51eC9iYWNrbGlnaHQuaAo+PiBpbmRleCA1ZjJmZDYxZWY0ZmIuLjc5YWYz Y2NhYmVjYSAxMDA2NDQKPj4gLS0tIGEvaW5jbHVkZS9saW51eC9iYWNrbGlnaHQuaAo+PiArKysg Yi9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5oCj4+IEBAIC0xMjksMTMgKzEyOSwxNiBAQCBzdGF0 aWMgaW5saW5lIGludCBiYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2Rl dmljZSAqYmQpCj4+ICAJcmV0dXJuIHJldDsKPj4gIH0KPj4gIAo+PiArI2RlZmluZSBCQUNLTElH SFRfUkVHSVNURVJfRkJfQ0xJRU5UIDB4MQo+PiAgZXh0ZXJuIHN0cnVjdCBiYWNrbGlnaHRfZGV2 aWNlICpiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsCj4+ICAJc3Ry dWN0IGRldmljZSAqZGV2LCB2b2lkICpkZXZkYXRhLCBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29w cyAqb3BzLAo+PiAtCWNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyAqcHJvcHMpOwo+ PiArCWNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyAqcHJvcHMsCj4+ICsJdW5zaWdu ZWQgbG9uZyBmbGFncyk7Cj4+ICBleHRlcm4gc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmRldm1f YmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigKPj4gIAlzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0 IGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKPj4gIAl2b2lkICpkZXZkYXRhLCBj b25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyAqb3BzLAo+PiAtCWNvbnN0IHN0cnVjdCBiYWNrbGln aHRfcHJvcGVydGllcyAqcHJvcHMpOwo+PiArCWNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVy dGllcyAqcHJvcHMsCj4+ICsJdW5zaWduZWQgbG9uZyBmbGFncyk7Cj4+ICBleHRlcm4gdm9pZCBi YWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKTsK Pj4gIGV4dGVybiB2b2lkIGRldm1fYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBk ZXZpY2UgKmRldiwKPj4gIAkJCQkJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKTsKPj4gLS0g Cj4+IDIuOC4xCj4+IAo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwo+PiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4+IEludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKPj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngKCi0tIApKYW5pIE5pa3VsYSwgSW50ZWwgT3BlbiBTb3VyY2UgVGVjaG5v bG9neSBDZW50ZXIKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Date: Thu, 04 Aug 2016 09:02:23 +0000 Subject: Re: [Intel-gfx] [PATCH] backlight: Avoid double fbcon backlight handling Message-Id: <87a8gsq540.fsf@intel.com> List-Id: References: <1467286256-8870-1-git-send-email-chris@chris-wilson.co.uk> <20160712122119.GR23520@phenom.ffwll.local> In-Reply-To: <20160712122119.GR23520@phenom.ffwll.local> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit To: Daniel Vetter , Chris Wilson Cc: Milo Kim , Krzysztof Kozlowski , David Airlie , nouveau@lists.freedesktop.org, Jon Nettleton , Nicolas Ferre , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, Thierry Reding , Paul Mackerras , Laurent Pinchart , Daniel Vetter , Lee Jones , Daniel Drake , Jens Frederich , linux-acpi@vger.kernel.org, Bruno =?utf-8?Q?Pr=C3=A9mont?= , Tomi Valkeinen , Ben Skeggs , Zhang Rui , Jean-Christophe Plagniol-Villard , Michael Hennerich , intel-gfx@lists.fre On Tue, 12 Jul 2016, Daniel Vetter wrote: > On Thu, Jun 30, 2016 at 12:30:56PM +0100, Chris Wilson wrote: >> Backlights controlled by i915.ko and only associated with its connectors >> and also only associated with the intel_drmfb fbcon, controlled by >> i915.ko. In this situation, we already handle adjusting the backlight >> when the fbcon is blanked/unblanked and do not require backlight trying >> to do the same. >> >> Attempting to register with the fbdev as a client causes lockdep to warn >> about a dependency cycle: > > The fbdev notifier strikes again! > > Last time I looked into this I think the proper solution would be to split > the backlight part from the other fbdev notifier (which is used by fbcon > for reacting to fbdev device reg/unreg events). > > I think that would fix this too, with the added bonus of slightly > untangling the fbcon locking mess. And it's also the one part of > untangling this mess which should be possible without any trouble - I've > simply never done it since entirely getting rid of the fbdev notifier for > fbcon is a lot more work. So what do we do with this? It fixes a problem upstream. There's no Fixes: to identify the bad commit. Any idea on that? It's either this or we dig out the bad commit (Chris probably knows which one?) and revert. BR, Jani. > -Daniel > >> >> [ 18.983763] =========================== >> [ 18.983763] [ INFO: possible circular locking dependency detected ] >> [ 18.983766] 4.7.0-rc5+ #524 Tainted: G O >> [ 18.983767] ------------------------------------------------------- >> [ 18.983767] kworker/u8:0/6 is trying to acquire lock: >> [ 18.983777] (&dev->mode_config.mutex){+.+.+.}, at: [] drm_modeset_lock_all+0x40/0x120 >> [ 18.983777] >> but task is already holding lock: >> [ 18.983782] ((fb_notifier_list).rwsem){++++.+}, at: [] __blocking_notifier_call_chain+0x35/0x70 >> [ 18.983783] >> which lock already depends on the new lock. >> >> [ 18.983783] >> the existing dependency chain (in reverse order) is: >> [ 18.983785] >> -> #1 ((fb_notifier_list).rwsem){++++.+}: >> [ 18.983789] [] lock_acquire+0xb1/0x200 >> [ 18.983792] [] down_write+0x44/0x80 >> [ 18.983795] [] blocking_notifier_chain_register+0x21/0xb0 >> [ 18.983798] [] fb_register_client+0x18/0x20 >> [ 18.983800] [] backlight_device_register+0x136/0x260 >> [ 18.983852] [] intel_backlight_device_register+0xa2/0x160 [i915] >> [ 18.983892] [] intel_connector_register+0xe/0x10 [i915] >> [ 18.983932] [] intel_dp_connector_register+0x1b/0x80 [i915] >> [ 18.983936] [] drm_connector_register+0x4a/0x80 >> [ 18.983938] [] drm_connector_register_all+0x64/0xf0 >> [ 18.983940] [] drm_modeset_register_all+0x174/0x1c0 >> [ 18.983942] [] drm_dev_register+0xc2/0xd0 >> [ 18.983976] [] i915_driver_load+0x1547/0x2200 [i915] >> [ 18.984010] [] i915_pci_probe+0x4f/0x70 [i915] >> [ 18.984014] [] local_pci_probe+0x45/0xa0 >> [ 18.984015] [] pci_device_probe+0xdb/0x130 >> [ 18.984018] [] driver_probe_device+0x223/0x440 >> [ 18.984020] [] __driver_attach+0xd5/0x100 >> [ 18.984022] [] bus_for_each_dev+0x66/0xa0 >> [ 18.984023] [] driver_attach+0x1e/0x20 >> [ 18.984025] [] bus_add_driver+0x1ee/0x280 >> [ 18.984028] [] driver_register+0x60/0xe0 >> [ 18.984030] [] __pci_register_driver+0x60/0x70 >> [ 18.984063] [] i915_init+0x5b/0x62 [i915] >> [ 18.984067] [] do_one_initcall+0x3d/0x150 >> [ 18.984070] [] do_init_module+0x5f/0x1d9 >> [ 18.984073] [] load_module+0x20e6/0x27e0 >> [ 18.984075] [] SYSC_finit_module+0xc3/0xf0 >> [ 18.984076] [] SyS_finit_module+0xe/0x10 >> [ 18.984079] [] entry_SYSCALL_64_fastpath+0x1c/0xac >> [ 18.984081] >> -> #0 (&dev->mode_config.mutex){+.+.+.}: >> [ 18.984083] [] __lock_acquire+0x10fc/0x1260 >> [ 18.984085] [] lock_acquire+0xb1/0x200 >> [ 18.984088] [] mutex_lock_nested+0x67/0x3c0 >> [ 18.984090] [] drm_modeset_lock_all+0x40/0x120 >> [ 18.984093] [] drm_fb_helper_restore_fbdev_mode_unlocked+0x2b/0x80 >> [ 18.984095] [] drm_fb_helper_set_par+0x2d/0x50 >> [ 18.984134] [] intel_fbdev_set_par+0x1a/0x60 [i915] >> [ 18.984136] [] fbcon_init+0x586/0x610 >> [ 18.984139] [] visual_init+0xca/0x130 >> [ 18.984141] [] do_bind_con_driver+0x1c1/0x3a0 >> [ 18.984143] [] do_take_over_console+0x116/0x180 >> [ 18.984145] [] do_fbcon_takeover+0x57/0xb0 >> [ 18.984147] [] fbcon_event_notify+0x658/0x750 >> [ 18.984150] [] notifier_call_chain+0x3e/0xb0 >> [ 18.984152] [] __blocking_notifier_call_chain+0x4d/0x70 >> [ 18.984154] [] blocking_notifier_call_chain+0x16/0x20 >> [ 18.984156] [] fb_notifier_call_chain+0x1b/0x20 >> [ 18.984158] [] register_framebuffer+0x251/0x330 >> [ 18.984160] [] drm_fb_helper_initial_config+0x25f/0x3f0 >> [ 18.984199] [] intel_fbdev_initial_config+0x18/0x30 [i915] >> [ 18.984201] [] async_run_entry_fn+0x48/0x150 >> [ 18.984203] [] process_one_work+0x1e7/0x750 >> [ 18.984205] [] worker_thread+0x4b/0x4f0 >> [ 18.984207] [] kthread+0xef/0x110 >> [ 18.984208] [] ret_from_fork+0x1f/0x40 >> [ 18.984209] >> other info that might help us debug this: >> >> [ 18.984210] Possible unsafe locking scenario: >> >> [ 18.984210] CPU0 CPU1 >> [ 18.984211] ---- ---- >> [ 18.984212] lock((fb_notifier_list).rwsem); >> [ 18.984213] lock(&dev->mode_config.mutex); >> [ 18.984215] lock((fb_notifier_list).rwsem); >> [ 18.984216] lock(&dev->mode_config.mutex); >> [ 18.984216] >> *** DEADLOCK *** >> >> [ 18.984217] 6 locks held by kworker/u8:0/6: >> [ 18.984220] #0: ("events_unbound"){.+.+.+}, at: [] process_one_work+0x169/0x750 >> [ 18.984223] #1: ((&entry->work)){+.+.+.}, at: [] process_one_work+0x169/0x750 >> [ 18.984227] #2: (registration_lock){+.+.+.}, at: [] register_framebuffer+0x27/0x330 >> [ 18.984231] #3: (console_lock){+.+.+.}, at: [] register_framebuffer+0x26e/0x330 >> [ 18.984234] #4: (&fb_info->lock){+.+.+.}, at: [] lock_fb_info+0x1d/0x40 >> [ 18.984238] #5: ((fb_notifier_list).rwsem){++++.+}, at: [] __blocking_notifier_call_chain+0x35/0x70 >> [ 18.984238] >> stack backtrace: >> [ 18.984241] CPU: 2 PID: 6 Comm: kworker/u8:0 Tainted: G O 4.7.0-rc5+ #524 >> [ 18.984242] Hardware name: Intel Corp. Broxton P/NOTEBOOK, BIOS APLKRVPA.X64.0138.B33.1606250842 06/25/2016 >> [ 18.984244] Workqueue: events_unbound async_run_entry_fn >> [ 18.984248] 0000000000000000 ffff8800758577f0 ffffffff814507a5 ffffffff828b9900 >> [ 18.984250] ffffffff828b9900 ffff880075857830 ffffffff810dc6fa ffff880075857880 >> [ 18.984252] ffff88007584d688 0000000000000005 0000000000000006 ffff88007584d6b0 >> [ 18.984253] Call Trace: >> [ 18.984257] [] dump_stack+0x67/0x92 >> [ 18.984259] [] print_circular_bug+0x1aa/0x200 >> [ 18.984261] [] __lock_acquire+0x10fc/0x1260 >> [ 18.984264] [] lock_acquire+0xb1/0x200 >> [ 18.984266] [] ? drm_modeset_lock_all+0x40/0x120 >> [ 18.984267] [] ? drm_modeset_lock_all+0x40/0x120 >> [ 18.984269] [] mutex_lock_nested+0x67/0x3c0 >> [ 18.984271] [] ? drm_modeset_lock_all+0x40/0x120 >> [ 18.984273] [] ? rcu_read_lock_sched_held+0x7f/0x90 >> [ 18.984276] [] ? kmem_cache_alloc_trace+0x248/0x2b0 >> [ 18.984277] [] ? drm_modeset_lock_all+0x25/0x120 >> [ 18.984279] [] drm_modeset_lock_all+0x40/0x120 >> [ 18.984281] [] drm_fb_helper_restore_fbdev_mode_unlocked+0x2b/0x80 >> [ 18.984283] [] drm_fb_helper_set_par+0x2d/0x50 >> [ 18.984322] [] intel_fbdev_set_par+0x1a/0x60 [i915] >> [ 18.984324] [] fbcon_init+0x586/0x610 >> [ 18.984326] [] visual_init+0xca/0x130 >> [ 18.984328] [] do_bind_con_driver+0x1c1/0x3a0 >> [ 18.984330] [] do_take_over_console+0x116/0x180 >> [ 18.984332] [] do_fbcon_takeover+0x57/0xb0 >> [ 18.984334] [] fbcon_event_notify+0x658/0x750 >> [ 18.984336] [] notifier_call_chain+0x3e/0xb0 >> [ 18.984338] [] __blocking_notifier_call_chain+0x4d/0x70 >> [ 18.984340] [] blocking_notifier_call_chain+0x16/0x20 >> [ 18.984342] [] fb_notifier_call_chain+0x1b/0x20 >> [ 18.984344] [] register_framebuffer+0x251/0x330 >> [ 18.984347] [] ? vga_switcheroo_client_fb_set+0x5d/0x70 >> [ 18.984349] [] drm_fb_helper_initial_config+0x25f/0x3f0 >> [ 18.984388] [] intel_fbdev_initial_config+0x18/0x30 [i915] >> [ 18.984389] [] async_run_entry_fn+0x48/0x150 >> [ 18.984391] [] process_one_work+0x1e7/0x750 >> [ 18.984392] [] ? process_one_work+0x169/0x750 >> [ 18.984394] [] worker_thread+0x4b/0x4f0 >> [ 18.984396] [] ? process_one_work+0x750/0x750 >> [ 18.984398] [] kthread+0xef/0x110 >> [ 18.984401] [] ret_from_fork+0x1f/0x40 >> [ 18.984402] [] ? kthread_stop+0x2e0/0x2e0 >> >> Reported-by: Imre Deak >> Signed-off-by: Chris Wilson >> Cc: Imre Deak >> Cc: Zhang Rui >> Cc: Alex Deucher >> Cc: "Christian König" >> Cc: David Airlie >> Cc: Patrik Jakobsson >> Cc: Daniel Vetter >> Cc: Jani Nikula >> Cc: Ben Skeggs >> Cc: Tomi Valkeinen >> Cc: Laurent Pinchart >> Cc: "Bruno Prémont" >> Cc: Jiri Kosina >> Cc: Thomas Petazzoni >> Cc: "Noralf Trønnes" >> Cc: Jens Frederich >> Cc: Daniel Drake >> Cc: Jon Nettleton >> Cc: Jingoo Han >> Cc: Lee Jones >> Cc: Jean-Christophe Plagniol-Villard >> Cc: Michael Hennerich >> Cc: Milo Kim >> Cc: Thierry Reding >> Cc: Nicolas Ferre >> Cc: Paul Mackerras >> Cc: Kukjin Kim >> Cc: Krzysztof Kozlowski >> Cc: Antonino Daplas >> Cc: linux-acpi@vger.kernel.org >> Cc: dri-devel@lists.freedesktop.org >> Cc: intel-gfx@lists.freedesktop.org >> Cc: nouveau@lists.freedesktop.org >> Cc: linux-renesas-soc@vger.kernel.org >> Cc: linux-fbdev@vger.kernel.org >> Cc: linux-omap@vger.kernel.org >> --- >> drivers/acpi/acpi_video.c | 3 ++- >> drivers/gpu/drm/amd/amdgpu/atombios_encoders.c | 3 ++- >> drivers/gpu/drm/bridge/parade-ps8622.c | 3 ++- >> drivers/gpu/drm/gma500/cdv_device.c | 3 ++- >> drivers/gpu/drm/gma500/mdfld_device.c | 3 ++- >> drivers/gpu/drm/gma500/oaktrail_device.c | 3 ++- >> drivers/gpu/drm/gma500/psb_device.c | 3 ++- >> drivers/gpu/drm/i915/intel_panel.c | 3 ++- >> drivers/gpu/drm/nouveau/nouveau_backlight.c | 6 ++++-- >> drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c | 3 ++- >> .../gpu/drm/omapdrm/displays/panel-sony-acx565akm.c | 3 ++- >> drivers/gpu/drm/radeon/atombios_encoders.c | 3 ++- >> drivers/gpu/drm/radeon/radeon_legacy_encoders.c | 3 ++- >> drivers/gpu/drm/shmobile/shmob_drm_backlight.c | 3 ++- >> drivers/hid/hid-picolcd_backlight.c | 3 ++- >> drivers/macintosh/via-pmu-backlight.c | 3 ++- >> drivers/platform/x86/acer-wmi.c | 3 ++- >> drivers/platform/x86/apple-gmux.c | 3 ++- >> drivers/platform/x86/asus-laptop.c | 3 ++- >> drivers/platform/x86/asus-wmi.c | 3 ++- >> drivers/platform/x86/classmate-laptop.c | 3 ++- >> drivers/platform/x86/compal-laptop.c | 3 ++- >> drivers/platform/x86/dell-laptop.c | 3 ++- >> drivers/platform/x86/eeepc-laptop.c | 3 ++- >> drivers/platform/x86/fujitsu-laptop.c | 3 ++- >> drivers/platform/x86/ideapad-laptop.c | 3 ++- >> drivers/platform/x86/intel_oaktrail.c | 3 ++- >> drivers/platform/x86/msi-laptop.c | 3 ++- >> drivers/platform/x86/msi-wmi.c | 3 ++- >> drivers/platform/x86/panasonic-laptop.c | 3 ++- >> drivers/platform/x86/samsung-laptop.c | 3 ++- >> drivers/platform/x86/samsung-q10.c | 3 ++- >> drivers/platform/x86/sony-laptop.c | 3 ++- >> drivers/platform/x86/thinkpad_acpi.c | 3 ++- >> drivers/platform/x86/toshiba_acpi.c | 3 ++- >> drivers/staging/fbtft/fb_ssd1351.c | 3 ++- >> drivers/staging/fbtft/fb_watterott.c | 3 ++- >> drivers/staging/fbtft/fbtft-core.c | 3 ++- >> drivers/staging/olpc_dcon/olpc_dcon.c | 3 ++- >> drivers/usb/misc/appledisplay.c | 3 ++- >> drivers/video/backlight/88pm860x_bl.c | 3 ++- >> drivers/video/backlight/aat2870_bl.c | 3 ++- >> drivers/video/backlight/adp5520_bl.c | 3 ++- >> drivers/video/backlight/adp8860_bl.c | 3 ++- >> drivers/video/backlight/adp8870_bl.c | 3 ++- >> drivers/video/backlight/ams369fg06.c | 3 ++- >> drivers/video/backlight/apple_bl.c | 3 ++- >> drivers/video/backlight/as3711_bl.c | 3 ++- >> drivers/video/backlight/backlight.c | 20 +++++++++++++------- >> drivers/video/backlight/bd6107.c | 3 ++- >> drivers/video/backlight/corgi_lcd.c | 3 ++- >> drivers/video/backlight/cr_bllcd.c | 3 ++- >> drivers/video/backlight/da903x_bl.c | 3 ++- >> drivers/video/backlight/da9052_bl.c | 3 ++- >> drivers/video/backlight/ep93xx_bl.c | 3 ++- >> drivers/video/backlight/generic_bl.c | 3 ++- >> drivers/video/backlight/gpio_backlight.c | 3 ++- >> drivers/video/backlight/hp680_bl.c | 3 ++- >> drivers/video/backlight/ipaq_micro_bl.c | 3 ++- >> drivers/video/backlight/jornada720_bl.c | 3 ++- >> drivers/video/backlight/kb3886_bl.c | 3 ++- >> drivers/video/backlight/ld9040.c | 3 ++- >> drivers/video/backlight/lm3533_bl.c | 3 ++- >> drivers/video/backlight/lm3630a_bl.c | 6 ++++-- >> drivers/video/backlight/lm3639_bl.c | 3 ++- >> drivers/video/backlight/locomolcd.c | 3 ++- >> drivers/video/backlight/lp855x_bl.c | 3 ++- >> drivers/video/backlight/lp8788_bl.c | 3 ++- >> drivers/video/backlight/lv5207lp.c | 3 ++- >> drivers/video/backlight/max8925_bl.c | 3 ++- >> drivers/video/backlight/omap1_bl.c | 3 ++- >> drivers/video/backlight/ot200_bl.c | 3 ++- >> drivers/video/backlight/pandora_bl.c | 3 ++- >> drivers/video/backlight/pcf50633-backlight.c | 3 ++- >> drivers/video/backlight/pm8941-wled.c | 3 ++- >> drivers/video/backlight/pwm_bl.c | 3 ++- >> drivers/video/backlight/s6e63m0.c | 3 ++- >> drivers/video/backlight/sky81452-backlight.c | 3 ++- >> drivers/video/backlight/tosa_bl.c | 3 ++- >> drivers/video/backlight/tps65217_bl.c | 3 ++- >> drivers/video/backlight/wm831x_bl.c | 3 ++- >> drivers/video/fbdev/atmel_lcdfb.c | 3 ++- >> drivers/video/fbdev/aty/aty128fb.c | 3 ++- >> drivers/video/fbdev/aty/atyfb_base.c | 3 ++- >> drivers/video/fbdev/aty/radeon_backlight.c | 3 ++- >> drivers/video/fbdev/bf537-lq035.c | 3 ++- >> drivers/video/fbdev/bf54x-lq043fb.c | 3 ++- >> drivers/video/fbdev/bfin-t350mcqb-fb.c | 3 ++- >> drivers/video/fbdev/exynos/s6e8ax0.c | 3 ++- >> drivers/video/fbdev/mx3fb.c | 3 ++- >> drivers/video/fbdev/nvidia/nv_backlight.c | 3 ++- >> .../video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c | 3 ++- >> .../omap2/omapfb/displays/panel-sony-acx565akm.c | 3 ++- >> drivers/video/fbdev/riva/fbdev.c | 3 ++- >> drivers/video/fbdev/sh_mobile_lcdcfb.c | 3 ++- >> drivers/video/fbdev/ssd1307fb.c | 3 ++- >> include/linux/backlight.h | 7 +++++-- >> 97 files changed, 212 insertions(+), 106 deletions(-) >> >> diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c >> index c1d138e128cb..49e0acb70c17 100644 >> --- a/drivers/acpi/acpi_video.c >> +++ b/drivers/acpi/acpi_video.c >> @@ -1693,7 +1693,8 @@ static void acpi_video_dev_register_backlight(struct acpi_video_device *device) >> parent, >> device, >> &acpi_backlight_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> kfree(name); >> if (IS_ERR(device->backlight)) { >> device->backlight = NULL; >> diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c >> index 48b6bd671cda..b6ae67a75a25 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c >> +++ b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c >> @@ -198,7 +198,8 @@ void amdgpu_atombios_encoder_init_backlight(struct amdgpu_encoder *amdgpu_encode >> snprintf(bl_name, sizeof(bl_name), >> "amdgpu_bl%d", dev->primary->index); >> bd = backlight_device_register(bl_name, drm_connector->kdev, >> - pdata, &amdgpu_atombios_encoder_backlight_ops, &props); >> + pdata, &amdgpu_atombios_encoder_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> DRM_ERROR("Backlight registration failed\n"); >> goto error; >> diff --git a/drivers/gpu/drm/bridge/parade-ps8622.c b/drivers/gpu/drm/bridge/parade-ps8622.c >> index 5cd8dd7e5904..14dea711b474 100644 >> --- a/drivers/gpu/drm/bridge/parade-ps8622.c >> +++ b/drivers/gpu/drm/bridge/parade-ps8622.c >> @@ -608,7 +608,8 @@ static int ps8622_probe(struct i2c_client *client, >> if (!of_find_property(dev->of_node, "use-external-pwm", NULL)) { >> ps8622->bl = backlight_device_register("ps8622-backlight", >> dev, ps8622, &ps8622_backlight_ops, >> - NULL); >> + NULL, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(ps8622->bl)) { >> DRM_ERROR("failed to register backlight\n"); >> ret = PTR_ERR(ps8622->bl); >> diff --git a/drivers/gpu/drm/gma500/cdv_device.c b/drivers/gpu/drm/gma500/cdv_device.c >> index 8745971a7680..d2b4d645b4db 100644 >> --- a/drivers/gpu/drm/gma500/cdv_device.c >> +++ b/drivers/gpu/drm/gma500/cdv_device.c >> @@ -163,7 +163,8 @@ static int cdv_backlight_init(struct drm_device *dev) >> props.type = BACKLIGHT_PLATFORM; >> >> cdv_backlight_device = backlight_device_register("psb-bl", >> - NULL, (void *)dev, &cdv_ops, &props); >> + NULL, (void *)dev, &cdv_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(cdv_backlight_device)) >> return PTR_ERR(cdv_backlight_device); >> >> diff --git a/drivers/gpu/drm/gma500/mdfld_device.c b/drivers/gpu/drm/gma500/mdfld_device.c >> index e2ab858122f9..2e24ecccfd39 100644 >> --- a/drivers/gpu/drm/gma500/mdfld_device.c >> +++ b/drivers/gpu/drm/gma500/mdfld_device.c >> @@ -130,7 +130,8 @@ static int mdfld_backlight_init(struct drm_device *dev) >> props.max_brightness = BRIGHTNESS_MAX_LEVEL; >> props.type = BACKLIGHT_PLATFORM; >> mdfld_backlight_device = backlight_device_register("mdfld-bl", >> - NULL, (void *)dev, &mdfld_ops, &props); >> + NULL, (void *)dev, &mdfld_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> >> if (IS_ERR(mdfld_backlight_device)) >> return PTR_ERR(mdfld_backlight_device); >> diff --git a/drivers/gpu/drm/gma500/oaktrail_device.c b/drivers/gpu/drm/gma500/oaktrail_device.c >> index ba30b43a3412..034553a524ac 100644 >> --- a/drivers/gpu/drm/gma500/oaktrail_device.c >> +++ b/drivers/gpu/drm/gma500/oaktrail_device.c >> @@ -155,7 +155,8 @@ static int oaktrail_backlight_init(struct drm_device *dev) >> props.type = BACKLIGHT_PLATFORM; >> >> oaktrail_backlight_device = backlight_device_register("oaktrail-bl", >> - NULL, (void *)dev, &oaktrail_ops, &props); >> + NULL, (void *)dev, &oaktrail_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> >> if (IS_ERR(oaktrail_backlight_device)) >> return PTR_ERR(oaktrail_backlight_device); >> diff --git a/drivers/gpu/drm/gma500/psb_device.c b/drivers/gpu/drm/gma500/psb_device.c >> index dc0f8527570c..0c1385d64839 100644 >> --- a/drivers/gpu/drm/gma500/psb_device.c >> +++ b/drivers/gpu/drm/gma500/psb_device.c >> @@ -131,7 +131,8 @@ static int psb_backlight_init(struct drm_device *dev) >> props.type = BACKLIGHT_PLATFORM; >> >> psb_backlight_device = backlight_device_register("psb-bl", >> - NULL, (void *)dev, &psb_ops, &props); >> + NULL, (void *)dev, &psb_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(psb_backlight_device)) >> return PTR_ERR(psb_backlight_device); >> >> diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c >> index 3c0b97f0bfae..acf6395b9f33 100644 >> --- a/drivers/gpu/drm/i915/intel_panel.c >> +++ b/drivers/gpu/drm/i915/intel_panel.c >> @@ -1201,7 +1201,8 @@ int intel_backlight_device_register(struct intel_connector *connector) >> backlight_device_register("intel_backlight", >> connector->base.kdev, >> connector, >> - &intel_backlight_device_ops, &props); >> + &intel_backlight_device_ops, &props, >> + 0); >> >> if (IS_ERR(panel->backlight.device)) { >> DRM_ERROR("Failed to register backlight: %ld\n", >> diff --git a/drivers/gpu/drm/nouveau/nouveau_backlight.c b/drivers/gpu/drm/nouveau/nouveau_backlight.c >> index f5101be806cb..5fd7e7498f13 100644 >> --- a/drivers/gpu/drm/nouveau/nouveau_backlight.c >> +++ b/drivers/gpu/drm/nouveau/nouveau_backlight.c >> @@ -82,7 +82,8 @@ nv40_backlight_init(struct drm_connector *connector) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = 31; >> bd = backlight_device_register("nv_backlight", connector->kdev, drm, >> - &nv40_bl_ops, &props); >> + &nv40_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> drm->backlight = bd; >> @@ -204,7 +205,8 @@ nv50_backlight_init(struct drm_connector *connector) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = 100; >> bd = backlight_device_register("nv_backlight", connector->kdev, >> - nv_encoder, ops, &props); >> + nv_encoder, ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> >> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c >> index 1b0cf2d8224b..10511bdd9936 100644 >> --- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c >> +++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c >> @@ -1260,7 +1260,8 @@ static int dsicm_probe(struct platform_device *pdev) >> >> props.type = BACKLIGHT_RAW; >> bldev = backlight_device_register(dev_name(dev), >> - dev, ddata, &dsicm_bl_ops, &props); >> + dev, ddata, &dsicm_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bldev)) { >> r = PTR_ERR(bldev); >> goto err_bl; >> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c >> index 157c512205d1..9f3622910511 100644 >> --- a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c >> +++ b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c >> @@ -817,7 +817,8 @@ static int acx565akm_probe(struct spi_device *spi) >> props.type = BACKLIGHT_RAW; >> >> bldev = backlight_device_register("acx565akm", &ddata->spi->dev, >> - ddata, &acx565akm_bl_ops, &props); >> + ddata, &acx565akm_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bldev)) { >> r = PTR_ERR(bldev); >> goto err_reg_bl; >> diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c >> index 587cae4e73c9..3676ba6e16ee 100644 >> --- a/drivers/gpu/drm/radeon/atombios_encoders.c >> +++ b/drivers/gpu/drm/radeon/atombios_encoders.c >> @@ -214,7 +214,8 @@ void radeon_atom_backlight_init(struct radeon_encoder *radeon_encoder, >> snprintf(bl_name, sizeof(bl_name), >> "radeon_bl%d", dev->primary->index); >> bd = backlight_device_register(bl_name, drm_connector->kdev, >> - pdata, &radeon_atom_backlight_ops, &props); >> + pdata, &radeon_atom_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> DRM_ERROR("Backlight registration failed\n"); >> goto error; >> diff --git a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c >> index 868c3ba2efaa..27908624c818 100644 >> --- a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c >> +++ b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c >> @@ -393,7 +393,8 @@ void radeon_legacy_backlight_init(struct radeon_encoder *radeon_encoder, >> snprintf(bl_name, sizeof(bl_name), >> "radeon_bl%d", dev->primary->index); >> bd = backlight_device_register(bl_name, drm_connector->kdev, >> - pdata, &radeon_backlight_ops, &props); >> + pdata, &radeon_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> DRM_ERROR("Backlight registration failed\n"); >> goto error; >> diff --git a/drivers/gpu/drm/shmobile/shmob_drm_backlight.c b/drivers/gpu/drm/shmobile/shmob_drm_backlight.c >> index 33dd41afea0e..1ff10faed3a7 100644 >> --- a/drivers/gpu/drm/shmobile/shmob_drm_backlight.c >> +++ b/drivers/gpu/drm/shmobile/shmob_drm_backlight.c >> @@ -68,7 +68,8 @@ int shmob_drm_backlight_init(struct shmob_drm_connector *scon) >> return 0; >> >> backlight = backlight_device_register(bdata->name, dev->dev, scon, >> - &shmob_drm_backlight_ops, NULL); >> + &shmob_drm_backlight_ops, NULL, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(backlight)) { >> dev_err(dev->dev, "unable to register backlight device: %ld\n", >> PTR_ERR(backlight)); >> diff --git a/drivers/hid/hid-picolcd_backlight.c b/drivers/hid/hid-picolcd_backlight.c >> index 808807ad388f..06597f50c32b 100644 >> --- a/drivers/hid/hid-picolcd_backlight.c >> +++ b/drivers/hid/hid-picolcd_backlight.c >> @@ -77,7 +77,8 @@ int picolcd_init_backlight(struct picolcd_data *data, struct hid_report *report) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = 0xff; >> bdev = backlight_device_register(dev_name(dev), dev, data, >> - &picolcd_blops, &props); >> + &picolcd_blops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bdev)) { >> dev_err(dev, "failed to register backlight\n"); >> return PTR_ERR(bdev); >> diff --git a/drivers/macintosh/via-pmu-backlight.c b/drivers/macintosh/via-pmu-backlight.c >> index 6f68537c93ce..da0fb2e87f75 100644 >> --- a/drivers/macintosh/via-pmu-backlight.c >> +++ b/drivers/macintosh/via-pmu-backlight.c >> @@ -160,7 +160,8 @@ void __init pmu_backlight_init() >> props.type = BACKLIGHT_PLATFORM; >> props.max_brightness = FB_BACKLIGHT_LEVELS - 1; >> bd = backlight_device_register(name, NULL, NULL, &pmu_backlight_data, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> printk(KERN_ERR "PMU Backlight registration failed\n"); >> return; >> diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c >> index 79d64ea00bfb..0b17c5146175 100644 >> --- a/drivers/platform/x86/acer-wmi.c >> +++ b/drivers/platform/x86/acer-wmi.c >> @@ -1419,7 +1419,8 @@ static int acer_backlight_init(struct device *dev) >> props.type = BACKLIGHT_PLATFORM; >> props.max_brightness = max_brightness; >> bd = backlight_device_register("acer-wmi", dev, NULL, &acer_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> pr_err("Could not register Acer backlight device\n"); >> acer_backlight_device = NULL; >> diff --git a/drivers/platform/x86/apple-gmux.c b/drivers/platform/x86/apple-gmux.c >> index 4034d2d4c507..e041bbe14df5 100644 >> --- a/drivers/platform/x86/apple-gmux.c >> +++ b/drivers/platform/x86/apple-gmux.c >> @@ -698,7 +698,8 @@ static int gmux_probe(struct pnp_dev *pnp, const struct pnp_device_id *id) >> props.max_brightness = GMUX_MAX_BRIGHTNESS; >> >> bdev = backlight_device_register("gmux_backlight", &pnp->dev, >> - gmux_data, &gmux_bl_ops, &props); >> + gmux_data, &gmux_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bdev)) { >> ret = PTR_ERR(bdev); >> goto err_release; >> diff --git a/drivers/platform/x86/asus-laptop.c b/drivers/platform/x86/asus-laptop.c >> index 15f131146501..98f26cff9c96 100644 >> --- a/drivers/platform/x86/asus-laptop.c >> +++ b/drivers/platform/x86/asus-laptop.c >> @@ -831,7 +831,8 @@ static int asus_backlight_init(struct asus_laptop *asus) >> >> bd = backlight_device_register(ASUS_LAPTOP_FILE, >> &asus->platform_device->dev, asus, >> - &asusbl_ops, &props); >> + &asusbl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> pr_err("Could not register asus backlight device\n"); >> asus->backlight_device = NULL; >> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c >> index a26dca3640ea..ca897bc94626 100644 >> --- a/drivers/platform/x86/asus-wmi.c >> +++ b/drivers/platform/x86/asus-wmi.c >> @@ -1565,7 +1565,8 @@ static int asus_wmi_backlight_init(struct asus_wmi *asus) >> props.max_brightness = max; >> bd = backlight_device_register(asus->driver->name, >> &asus->platform_device->dev, asus, >> - &asus_wmi_bl_ops, &props); >> + &asus_wmi_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> pr_err("Could not register backlight device\n"); >> return PTR_ERR(bd); >> diff --git a/drivers/platform/x86/classmate-laptop.c b/drivers/platform/x86/classmate-laptop.c >> index 55cf10bc7817..60cf7a0c7170 100644 >> --- a/drivers/platform/x86/classmate-laptop.c >> +++ b/drivers/platform/x86/classmate-laptop.c >> @@ -970,7 +970,8 @@ static int cmpc_ipml_add(struct acpi_device *acpi) >> props.max_brightness = 7; >> ipml->bd = backlight_device_register("cmpc_bl", &acpi->dev, >> acpi->handle, &cmpc_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(ipml->bd)) { >> retval = PTR_ERR(ipml->bd); >> goto out_bd; >> diff --git a/drivers/platform/x86/compal-laptop.c b/drivers/platform/x86/compal-laptop.c >> index e1c2b6d4b24a..9a675d3b6fe5 100644 >> --- a/drivers/platform/x86/compal-laptop.c >> +++ b/drivers/platform/x86/compal-laptop.c >> @@ -1008,7 +1008,8 @@ static int __init compal_init(void) >> compalbl_device = backlight_device_register(DRIVER_NAME, >> NULL, NULL, >> &compalbl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(compalbl_device)) >> return PTR_ERR(compalbl_device); >> } >> diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c >> index 2c2f02b2e08a..57712a970f8d 100644 >> --- a/drivers/platform/x86/dell-laptop.c >> +++ b/drivers/platform/x86/dell-laptop.c >> @@ -2035,7 +2035,8 @@ static int __init dell_init(void) >> &platform_device->dev, >> NULL, >> &dell_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> >> if (IS_ERR(dell_backlight_device)) { >> ret = PTR_ERR(dell_backlight_device); >> diff --git a/drivers/platform/x86/eeepc-laptop.c b/drivers/platform/x86/eeepc-laptop.c >> index 8cdf315f9730..da8ada2ba429 100644 >> --- a/drivers/platform/x86/eeepc-laptop.c >> +++ b/drivers/platform/x86/eeepc-laptop.c >> @@ -1159,7 +1159,8 @@ static int eeepc_backlight_init(struct eeepc_laptop *eeepc) >> props.max_brightness = 15; >> bd = backlight_device_register(EEEPC_LAPTOP_FILE, >> &eeepc->platform_device->dev, eeepc, >> - &eeepcbl_ops, &props); >> + &eeepcbl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> pr_err("Could not register eeepc backlight device\n"); >> eeepc->backlight_device = NULL; >> diff --git a/drivers/platform/x86/fujitsu-laptop.c b/drivers/platform/x86/fujitsu-laptop.c >> index ce41bc34288d..b54e7ea2e968 100644 >> --- a/drivers/platform/x86/fujitsu-laptop.c >> +++ b/drivers/platform/x86/fujitsu-laptop.c >> @@ -1167,7 +1167,8 @@ static int __init fujitsu_init(void) >> fujitsu->bl_device = backlight_device_register("fujitsu-laptop", >> NULL, NULL, >> &fujitsubl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(fujitsu->bl_device)) { >> ret = PTR_ERR(fujitsu->bl_device); >> fujitsu->bl_device = NULL; >> diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c >> index d1a091b93192..99de02efd971 100644 >> --- a/drivers/platform/x86/ideapad-laptop.c >> +++ b/drivers/platform/x86/ideapad-laptop.c >> @@ -726,7 +726,8 @@ static int ideapad_backlight_init(struct ideapad_private *priv) >> &priv->platform_device->dev, >> priv, >> &ideapad_backlight_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(blightdev)) { >> pr_err("Could not register backlight device\n"); >> return PTR_ERR(blightdev); >> diff --git a/drivers/platform/x86/intel_oaktrail.c b/drivers/platform/x86/intel_oaktrail.c >> index 6aa33c4a809f..303e8e27a0b9 100644 >> --- a/drivers/platform/x86/intel_oaktrail.c >> +++ b/drivers/platform/x86/intel_oaktrail.c >> @@ -253,7 +253,8 @@ static int oaktrail_backlight_init(void) >> bd = backlight_device_register(DRIVER_NAME, >> &oaktrail_device->dev, NULL, >> &oaktrail_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> >> if (IS_ERR(bd)) { >> oaktrail_bl_device = NULL; >> diff --git a/drivers/platform/x86/msi-laptop.c b/drivers/platform/x86/msi-laptop.c >> index 42317704629d..81990bdab229 100644 >> --- a/drivers/platform/x86/msi-laptop.c >> +++ b/drivers/platform/x86/msi-laptop.c >> @@ -1078,7 +1078,8 @@ static int __init msi_init(void) >> props.max_brightness = MSI_LCD_LEVEL_MAX - 1; >> msibl_device = backlight_device_register("msi-laptop-bl", NULL, >> NULL, &msibl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(msibl_device)) >> return PTR_ERR(msibl_device); >> } >> diff --git a/drivers/platform/x86/msi-wmi.c b/drivers/platform/x86/msi-wmi.c >> index 978e6d640572..5174572a7859 100644 >> --- a/drivers/platform/x86/msi-wmi.c >> +++ b/drivers/platform/x86/msi-wmi.c >> @@ -247,7 +247,8 @@ static int __init msi_wmi_backlight_setup(void) >> props.max_brightness = ARRAY_SIZE(backlight_map) - 1; >> backlight = backlight_device_register(DRV_NAME, NULL, NULL, >> &msi_backlight_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(backlight)) >> return PTR_ERR(backlight); >> >> diff --git a/drivers/platform/x86/panasonic-laptop.c b/drivers/platform/x86/panasonic-laptop.c >> index 3f870972247c..00679814d8c3 100644 >> --- a/drivers/platform/x86/panasonic-laptop.c >> +++ b/drivers/platform/x86/panasonic-laptop.c >> @@ -618,7 +618,8 @@ static int acpi_pcc_hotkey_add(struct acpi_device *device) >> props.type = BACKLIGHT_PLATFORM; >> props.max_brightness = pcc->sinf[SINF_AC_MAX_BRIGHT]; >> pcc->backlight = backlight_device_register("panasonic", NULL, pcc, >> - &pcc_backlight_ops, &props); >> + &pcc_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(pcc->backlight)) { >> result = PTR_ERR(pcc->backlight); >> goto out_input; >> diff --git a/drivers/platform/x86/samsung-laptop.c b/drivers/platform/x86/samsung-laptop.c >> index 8c146e2b6727..09868706dfd6 100644 >> --- a/drivers/platform/x86/samsung-laptop.c >> +++ b/drivers/platform/x86/samsung-laptop.c >> @@ -1200,7 +1200,8 @@ static int __init samsung_backlight_init(struct samsung_laptop *samsung) >> bd = backlight_device_register("samsung", >> &samsung->platform_device->dev, >> samsung, &backlight_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> >> diff --git a/drivers/platform/x86/samsung-q10.c b/drivers/platform/x86/samsung-q10.c >> index e6aac725a0af..cc25d0416236 100644 >> --- a/drivers/platform/x86/samsung-q10.c >> +++ b/drivers/platform/x86/samsung-q10.c >> @@ -60,7 +60,8 @@ static int samsungq10_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_PLATFORM; >> props.max_brightness = SAMSUNGQ10_BL_MAX_INTENSITY; >> bd = backlight_device_register("samsung", &pdev->dev, NULL, >> - &samsungq10_bl_ops, &props); >> + &samsungq10_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> >> diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c >> index 1dba3598cfcb..a20f30621e5f 100644 >> --- a/drivers/platform/x86/sony-laptop.c >> +++ b/drivers/platform/x86/sony-laptop.c >> @@ -3158,7 +3158,8 @@ static void sony_nc_backlight_setup(void) >> props.max_brightness = max_brightness; >> sony_bl_props.dev = backlight_device_register("sony", NULL, >> &sony_bl_props, >> - ops, &props); >> + ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> >> if (IS_ERR(sony_bl_props.dev)) { >> pr_warn("unable to register backlight device\n"); >> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c >> index b65ce7519411..987ef89b11da 100644 >> --- a/drivers/platform/x86/thinkpad_acpi.c >> +++ b/drivers/platform/x86/thinkpad_acpi.c >> @@ -6821,7 +6821,8 @@ static int __init brightness_init(struct ibm_init_struct *iibm) >> ibm_backlight_device = backlight_device_register(TPACPI_BACKLIGHT_DEV_NAME, >> NULL, NULL, >> &ibm_backlight_data, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(ibm_backlight_device)) { >> int rc = PTR_ERR(ibm_backlight_device); >> ibm_backlight_device = NULL; >> diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c >> index 01e12d221a8b..6b0f23360094 100644 >> --- a/drivers/platform/x86/toshiba_acpi.c >> +++ b/drivers/platform/x86/toshiba_acpi.c >> @@ -2840,7 +2840,8 @@ static int toshiba_acpi_setup_backlight(struct toshiba_acpi_dev *dev) >> &dev->acpi_dev->dev, >> dev, >> &toshiba_backlight_data, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(dev->backlight_dev)) { >> ret = PTR_ERR(dev->backlight_dev); >> pr_err("Could not register toshiba backlight device\n"); >> diff --git a/drivers/staging/fbtft/fb_ssd1351.c b/drivers/staging/fbtft/fb_ssd1351.c >> index cef33e439f46..6a194faf6448 100644 >> --- a/drivers/staging/fbtft/fb_ssd1351.c >> +++ b/drivers/staging/fbtft/fb_ssd1351.c >> @@ -210,7 +210,8 @@ static void register_onboard_backlight(struct fbtft_par *par) >> bl_props.power = FB_BLANK_POWERDOWN; >> >> bd = backlight_device_register(dev_driver_string(par->info->device), >> - par->info->device, par, &bl_ops, &bl_props); >> + par->info->device, par, &bl_ops, &bl_props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> dev_err(par->info->device, >> "cannot register backlight device (%ld)\n", >> diff --git a/drivers/staging/fbtft/fb_watterott.c b/drivers/staging/fbtft/fb_watterott.c >> index f8cb610a7b69..b24913688014 100644 >> --- a/drivers/staging/fbtft/fb_watterott.c >> +++ b/drivers/staging/fbtft/fb_watterott.c >> @@ -259,7 +259,8 @@ static void register_chip_backlight(struct fbtft_par *par) >> bl_props.brightness = DEFAULT_BRIGHTNESS; >> >> bd = backlight_device_register(dev_driver_string(par->info->device), >> - par->info->device, par, &bl_ops, &bl_props); >> + par->info->device, par, &bl_ops, &bl_props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> dev_err(par->info->device, >> "cannot register backlight device (%ld)\n", >> diff --git a/drivers/staging/fbtft/fbtft-core.c b/drivers/staging/fbtft/fbtft-core.c >> index 0c1a77cafe14..61c67b079b90 100644 >> --- a/drivers/staging/fbtft/fbtft-core.c >> +++ b/drivers/staging/fbtft/fbtft-core.c >> @@ -299,7 +299,8 @@ void fbtft_register_backlight(struct fbtft_par *par) >> bl_props.state |= BL_CORE_DRIVER1; >> >> bd = backlight_device_register(dev_driver_string(par->info->device), >> - par->info->device, par, &fbtft_bl_ops, &bl_props); >> + par->info->device, par, &fbtft_bl_ops, &bl_props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> dev_err(par->info->device, >> "cannot register backlight device (%ld)\n", >> diff --git a/drivers/staging/olpc_dcon/olpc_dcon.c b/drivers/staging/olpc_dcon/olpc_dcon.c >> index f45b2ef05f48..385c7adeaa26 100644 >> --- a/drivers/staging/olpc_dcon/olpc_dcon.c >> +++ b/drivers/staging/olpc_dcon/olpc_dcon.c >> @@ -643,7 +643,8 @@ static int dcon_probe(struct i2c_client *client, const struct i2c_device_id *id) >> /* Add the backlight device for the DCON */ >> dcon_bl_props.brightness = dcon->bl_val; >> dcon->bl_dev = backlight_device_register("dcon-bl", &dcon_device->dev, >> - dcon, &dcon_bl_ops, &dcon_bl_props); >> + dcon, &dcon_bl_ops, &dcon_bl_props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(dcon->bl_dev)) { >> dev_err(&client->dev, "cannot register backlight dev (%ld)\n", >> PTR_ERR(dcon->bl_dev)); >> diff --git a/drivers/usb/misc/appledisplay.c b/drivers/usb/misc/appledisplay.c >> index a0a3827b4aff..97c0829711a8 100644 >> --- a/drivers/usb/misc/appledisplay.c >> +++ b/drivers/usb/misc/appledisplay.c >> @@ -293,7 +293,8 @@ static int appledisplay_probe(struct usb_interface *iface, >> props.type = BACKLIGHT_RAW; >> props.max_brightness = 0xff; >> pdata->bd = backlight_device_register(bl_name, NULL, pdata, >> - &appledisplay_bl_data, &props); >> + &appledisplay_bl_data, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(pdata->bd)) { >> dev_err(&iface->dev, "Backlight registration failed\n"); >> retval = PTR_ERR(pdata->bd); >> diff --git a/drivers/video/backlight/88pm860x_bl.c b/drivers/video/backlight/88pm860x_bl.c >> index 6d8dc2c77520..e0d8212aebc0 100644 >> --- a/drivers/video/backlight/88pm860x_bl.c >> +++ b/drivers/video/backlight/88pm860x_bl.c >> @@ -242,7 +242,8 @@ static int pm860x_backlight_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = MAX_BRIGHTNESS; >> bl = devm_backlight_device_register(&pdev->dev, name, &pdev->dev, data, >> - &pm860x_backlight_ops, &props); >> + &pm860x_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/aat2870_bl.c b/drivers/video/backlight/aat2870_bl.c >> index 50774e657700..a4cbc33bd6c2 100644 >> --- a/drivers/video/backlight/aat2870_bl.c >> +++ b/drivers/video/backlight/aat2870_bl.c >> @@ -152,7 +152,8 @@ static int aat2870_bl_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> bd = devm_backlight_device_register(&pdev->dev, "aat2870-backlight", >> &pdev->dev, aat2870_bl, &aat2870_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> dev_err(&pdev->dev, >> "Failed allocate memory for backlight device\n"); >> diff --git a/drivers/video/backlight/adp5520_bl.c b/drivers/video/backlight/adp5520_bl.c >> index dd88ba1d71ce..03093fbee414 100644 >> --- a/drivers/video/backlight/adp5520_bl.c >> +++ b/drivers/video/backlight/adp5520_bl.c >> @@ -315,7 +315,8 @@ static int adp5520_bl_probe(struct platform_device *pdev) >> props.max_brightness = ADP5020_MAX_BRIGHTNESS; >> bl = devm_backlight_device_register(&pdev->dev, pdev->name, >> data->master, data, &adp5520_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/adp8860_bl.c b/drivers/video/backlight/adp8860_bl.c >> index 510e559c060e..88982ed257d9 100644 >> --- a/drivers/video/backlight/adp8860_bl.c >> +++ b/drivers/video/backlight/adp8860_bl.c >> @@ -718,7 +718,8 @@ static int adp8860_probe(struct i2c_client *client, >> >> bl = devm_backlight_device_register(&client->dev, >> dev_driver_string(&client->dev), >> - &client->dev, data, &adp8860_bl_ops, &props); >> + &client->dev, data, &adp8860_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&client->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/adp8870_bl.c b/drivers/video/backlight/adp8870_bl.c >> index 21acac90fd77..5284f7f3cdd3 100644 >> --- a/drivers/video/backlight/adp8870_bl.c >> +++ b/drivers/video/backlight/adp8870_bl.c >> @@ -894,7 +894,8 @@ static int adp8870_probe(struct i2c_client *client, >> props.max_brightness = props.brightness = ADP8870_MAX_BRIGHTNESS; >> bl = devm_backlight_device_register(&client->dev, >> dev_driver_string(&client->dev), >> - &client->dev, data, &adp8870_bl_ops, &props); >> + &client->dev, data, &adp8870_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&client->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/ams369fg06.c b/drivers/video/backlight/ams369fg06.c >> index 5cca8ce45d4d..1bd656141c1e 100644 >> --- a/drivers/video/backlight/ams369fg06.c >> +++ b/drivers/video/backlight/ams369fg06.c >> @@ -484,7 +484,8 @@ static int ams369fg06_probe(struct spi_device *spi) >> >> bd = devm_backlight_device_register(&spi->dev, "ams369fg06-bl", >> &spi->dev, lcd, >> - &ams369fg06_backlight_ops, &props); >> + &ams369fg06_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> >> diff --git a/drivers/video/backlight/apple_bl.c b/drivers/video/backlight/apple_bl.c >> index d84329676689..ee2e92d58512 100644 >> --- a/drivers/video/backlight/apple_bl.c >> +++ b/drivers/video/backlight/apple_bl.c >> @@ -182,7 +182,8 @@ static int apple_bl_add(struct acpi_device *dev) >> props.type = BACKLIGHT_PLATFORM; >> props.max_brightness = 15; >> apple_backlight_device = backlight_device_register("apple_backlight", >> - NULL, NULL, &hw_data->backlight_ops, &props); >> + NULL, NULL, &hw_data->backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> >> if (IS_ERR(apple_backlight_device)) { >> release_region(hw_data->iostart, hw_data->iolen); >> diff --git a/drivers/video/backlight/as3711_bl.c b/drivers/video/backlight/as3711_bl.c >> index 734a9158946b..5f3a40bc8a85 100644 >> --- a/drivers/video/backlight/as3711_bl.c >> +++ b/drivers/video/backlight/as3711_bl.c >> @@ -244,7 +244,8 @@ static int as3711_bl_register(struct platform_device *pdev, >> su->type = AS3711_BL_SU1 ? >> "as3711-su1" : "as3711-su2", >> &pdev->dev, su, >> - &as3711_bl_ops, &props); >> + &as3711_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c >> index 288318ad21dd..1a25273576e8 100644 >> --- a/drivers/video/backlight/backlight.c >> +++ b/drivers/video/backlight/backlight.c >> @@ -319,13 +319,15 @@ EXPORT_SYMBOL(backlight_force_update); >> * @devdata: an optional pointer to be stored for private driver use. The >> * methods may retrieve it by using bl_get_data(bd). >> * @ops: the backlight operations structure. >> + * @flags: bitmask to control backlight registration >> * >> * Creates and registers new backlight device. Returns either an >> * ERR_PTR() or a pointer to the newly allocated device. >> */ >> struct backlight_device *backlight_device_register(const char *name, >> struct device *parent, void *devdata, const struct backlight_ops *ops, >> - const struct backlight_properties *props) >> + const struct backlight_properties *props, >> + unsigned long flags) >> { >> struct backlight_device *new_bd; >> int rc; >> @@ -363,10 +365,12 @@ struct backlight_device *backlight_device_register(const char *name, >> return ERR_PTR(rc); >> } >> >> - rc = backlight_register_fb(new_bd); >> - if (rc) { >> - device_unregister(&new_bd->dev); >> - return ERR_PTR(rc); >> + if (flags & BACKLIGHT_REGISTER_FB_CLIENT) { >> + rc = backlight_register_fb(new_bd); >> + if (rc) { >> + device_unregister(&new_bd->dev); >> + return ERR_PTR(rc); >> + } >> } >> >> new_bd->ops = ops; >> @@ -494,6 +498,7 @@ EXPORT_SYMBOL(backlight_unregister_notifier); >> * @devdata: an optional pointer to be stored for private driver use >> * @ops: the backlight operations structure >> * @props: the backlight properties >> + * @flags: bitmask to control backlight registration >> * >> * @return a struct backlight on success, or an ERR_PTR on error >> * >> @@ -504,7 +509,8 @@ EXPORT_SYMBOL(backlight_unregister_notifier); >> struct backlight_device *devm_backlight_device_register(struct device *dev, >> const char *name, struct device *parent, void *devdata, >> const struct backlight_ops *ops, >> - const struct backlight_properties *props) >> + const struct backlight_properties *props, >> + unsigned long flags) >> { >> struct backlight_device **ptr, *backlight; >> >> @@ -514,7 +520,7 @@ struct backlight_device *devm_backlight_device_register(struct device *dev, >> return ERR_PTR(-ENOMEM); >> >> backlight = backlight_device_register(name, parent, devdata, ops, >> - props); >> + props, flags); >> if (!IS_ERR(backlight)) { >> *ptr = backlight; >> devres_add(dev, ptr); >> diff --git a/drivers/video/backlight/bd6107.c b/drivers/video/backlight/bd6107.c >> index fdb2f7e2c6b5..a8ecd7a2f2a4 100644 >> --- a/drivers/video/backlight/bd6107.c >> +++ b/drivers/video/backlight/bd6107.c >> @@ -163,7 +163,8 @@ static int bd6107_probe(struct i2c_client *client, >> backlight = devm_backlight_device_register(&client->dev, >> dev_name(&client->dev), >> &bd->client->dev, bd, >> - &bd6107_backlight_ops, &props); >> + &bd6107_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(backlight)) { >> dev_err(&client->dev, "failed to register backlight\n"); >> return PTR_ERR(backlight); >> diff --git a/drivers/video/backlight/corgi_lcd.c b/drivers/video/backlight/corgi_lcd.c >> index d7c239ea3d09..006e171256a0 100644 >> --- a/drivers/video/backlight/corgi_lcd.c >> +++ b/drivers/video/backlight/corgi_lcd.c >> @@ -562,7 +562,8 @@ static int corgi_lcd_probe(struct spi_device *spi) >> props.max_brightness = pdata->max_intensity; >> lcd->bl_dev = devm_backlight_device_register(&spi->dev, "corgi_bl", >> &spi->dev, lcd, &corgi_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(lcd->bl_dev)) >> return PTR_ERR(lcd->bl_dev); >> >> diff --git a/drivers/video/backlight/cr_bllcd.c b/drivers/video/backlight/cr_bllcd.c >> index 3e3880fc8c8e..cf7c5d35dd63 100644 >> --- a/drivers/video/backlight/cr_bllcd.c >> +++ b/drivers/video/backlight/cr_bllcd.c >> @@ -197,7 +197,8 @@ static int cr_backlight_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> bdp = devm_backlight_device_register(&pdev->dev, "cr-backlight", >> &pdev->dev, NULL, &cr_backlight_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bdp)) { >> pci_dev_put(lpc_dev); >> return PTR_ERR(bdp); >> diff --git a/drivers/video/backlight/da903x_bl.c b/drivers/video/backlight/da903x_bl.c >> index f793738f06fb..d6019aebfa42 100644 >> --- a/drivers/video/backlight/da903x_bl.c >> +++ b/drivers/video/backlight/da903x_bl.c >> @@ -146,7 +146,8 @@ static int da903x_backlight_probe(struct platform_device *pdev) >> props.max_brightness = max_brightness; >> bl = devm_backlight_device_register(&pdev->dev, pdev->name, >> data->da903x_dev, data, >> - &da903x_backlight_ops, &props); >> + &da903x_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/da9052_bl.c b/drivers/video/backlight/da9052_bl.c >> index fd2be417aa64..96738c2e8a09 100644 >> --- a/drivers/video/backlight/da9052_bl.c >> +++ b/drivers/video/backlight/da9052_bl.c >> @@ -127,7 +127,8 @@ static int da9052_backlight_probe(struct platform_device *pdev) >> >> bl = devm_backlight_device_register(&pdev->dev, pdev->name, >> wleds->da9052->dev, wleds, >> - &da9052_backlight_ops, &props); >> + &da9052_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "Failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/ep93xx_bl.c b/drivers/video/backlight/ep93xx_bl.c >> index 0067931821c6..7fe2549969a1 100644 >> --- a/drivers/video/backlight/ep93xx_bl.c >> +++ b/drivers/video/backlight/ep93xx_bl.c >> @@ -93,7 +93,8 @@ static int ep93xxbl_probe(struct platform_device *dev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = EP93XX_MAX_BRIGHT; >> bl = devm_backlight_device_register(&dev->dev, dev->name, &dev->dev, >> - ep93xxbl, &ep93xxbl_ops, &props); >> + ep93xxbl, &ep93xxbl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) >> return PTR_ERR(bl); >> >> diff --git a/drivers/video/backlight/generic_bl.c b/drivers/video/backlight/generic_bl.c >> index 67dfb939a514..717318e12f87 100644 >> --- a/drivers/video/backlight/generic_bl.c >> +++ b/drivers/video/backlight/generic_bl.c >> @@ -76,7 +76,8 @@ static int genericbl_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = machinfo->max_intensity; >> bd = devm_backlight_device_register(&pdev->dev, name, &pdev->dev, >> - NULL, &genericbl_ops, &props); >> + NULL, &genericbl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> >> diff --git a/drivers/video/backlight/gpio_backlight.c b/drivers/video/backlight/gpio_backlight.c >> index 18134416b154..d0b6f5155f86 100644 >> --- a/drivers/video/backlight/gpio_backlight.c >> +++ b/drivers/video/backlight/gpio_backlight.c >> @@ -132,7 +132,8 @@ static int gpio_backlight_probe(struct platform_device *pdev) >> props.max_brightness = 1; >> bl = devm_backlight_device_register(&pdev->dev, dev_name(&pdev->dev), >> &pdev->dev, gbl, &gpio_backlight_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/hp680_bl.c b/drivers/video/backlight/hp680_bl.c >> index 8ea42b8d9bc8..a75b2d0d489a 100644 >> --- a/drivers/video/backlight/hp680_bl.c >> +++ b/drivers/video/backlight/hp680_bl.c >> @@ -111,7 +111,8 @@ static int hp680bl_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = HP680_MAX_INTENSITY; >> bd = devm_backlight_device_register(&pdev->dev, "hp680-bl", &pdev->dev, >> - NULL, &hp680bl_ops, &props); >> + NULL, &hp680bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> >> diff --git a/drivers/video/backlight/ipaq_micro_bl.c b/drivers/video/backlight/ipaq_micro_bl.c >> index 347dc11d4ceb..834ccc8a7291 100644 >> --- a/drivers/video/backlight/ipaq_micro_bl.c >> +++ b/drivers/video/backlight/ipaq_micro_bl.c >> @@ -60,7 +60,8 @@ static int micro_backlight_probe(struct platform_device *pdev) >> >> bd = devm_backlight_device_register(&pdev->dev, "ipaq-micro-backlight", >> &pdev->dev, micro, µ_bl_ops, >> - µ_bl_props); >> + µ_bl_props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> >> diff --git a/drivers/video/backlight/jornada720_bl.c b/drivers/video/backlight/jornada720_bl.c >> index 7e6ff5346892..e173c5b60e9e 100644 >> --- a/drivers/video/backlight/jornada720_bl.c >> +++ b/drivers/video/backlight/jornada720_bl.c >> @@ -118,7 +118,8 @@ static int jornada_bl_probe(struct platform_device *pdev) >> >> bd = devm_backlight_device_register(&pdev->dev, S1D_DEVICENAME, >> &pdev->dev, NULL, &jornada_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> ret = PTR_ERR(bd); >> dev_err(&pdev->dev, "failed to register device, err=%x\n", ret); >> diff --git a/drivers/video/backlight/kb3886_bl.c b/drivers/video/backlight/kb3886_bl.c >> index 84a110a719cb..eb619c4a7a39 100644 >> --- a/drivers/video/backlight/kb3886_bl.c >> +++ b/drivers/video/backlight/kb3886_bl.c >> @@ -153,7 +153,8 @@ static int kb3886bl_probe(struct platform_device *pdev) >> kb3886_backlight_device = devm_backlight_device_register(&pdev->dev, >> "kb3886-bl", &pdev->dev, >> NULL, &kb3886bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(kb3886_backlight_device)) >> return PTR_ERR(kb3886_backlight_device); >> >> diff --git a/drivers/video/backlight/ld9040.c b/drivers/video/backlight/ld9040.c >> index 677f8abba27c..c28e91fec54f 100644 >> --- a/drivers/video/backlight/ld9040.c >> +++ b/drivers/video/backlight/ld9040.c >> @@ -722,7 +722,8 @@ static int ld9040_probe(struct spi_device *spi) >> props.max_brightness = MAX_BRIGHTNESS; >> >> bd = devm_backlight_device_register(&spi->dev, "ld9040-bl", &spi->dev, >> - lcd, &ld9040_backlight_ops, &props); >> + lcd, &ld9040_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> >> diff --git a/drivers/video/backlight/lm3533_bl.c b/drivers/video/backlight/lm3533_bl.c >> index 0e2337f367b6..f6345a2cd076 100644 >> --- a/drivers/video/backlight/lm3533_bl.c >> +++ b/drivers/video/backlight/lm3533_bl.c >> @@ -312,7 +312,8 @@ static int lm3533_bl_probe(struct platform_device *pdev) >> props.brightness = pdata->default_brightness; >> bd = devm_backlight_device_register(&pdev->dev, pdata->name, >> pdev->dev.parent, bl, &lm3533_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> dev_err(&pdev->dev, "failed to register backlight device\n"); >> return PTR_ERR(bd); >> diff --git a/drivers/video/backlight/lm3630a_bl.c b/drivers/video/backlight/lm3630a_bl.c >> index 60d6c2ac87aa..a62a09510fe3 100644 >> --- a/drivers/video/backlight/lm3630a_bl.c >> +++ b/drivers/video/backlight/lm3630a_bl.c >> @@ -338,7 +338,8 @@ static int lm3630a_backlight_register(struct lm3630a_chip *pchip) >> pchip->bleda >> devm_backlight_device_register(pchip->dev, "lm3630a_leda", >> pchip->dev, pchip, >> - &lm3630a_bank_a_ops, &props); >> + &lm3630a_bank_a_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(pchip->bleda)) >> return PTR_ERR(pchip->bleda); >> } >> @@ -350,7 +351,8 @@ static int lm3630a_backlight_register(struct lm3630a_chip *pchip) >> pchip->bledb >> devm_backlight_device_register(pchip->dev, "lm3630a_ledb", >> pchip->dev, pchip, >> - &lm3630a_bank_b_ops, &props); >> + &lm3630a_bank_b_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(pchip->bledb)) >> return PTR_ERR(pchip->bledb); >> } >> diff --git a/drivers/video/backlight/lm3639_bl.c b/drivers/video/backlight/lm3639_bl.c >> index cd50df5807ea..4aaf0c3f9eee 100644 >> --- a/drivers/video/backlight/lm3639_bl.c >> +++ b/drivers/video/backlight/lm3639_bl.c >> @@ -349,7 +349,8 @@ static int lm3639_probe(struct i2c_client *client, >> pchip->bled >> devm_backlight_device_register(pchip->dev, "lm3639_bled", >> pchip->dev, pchip, &lm3639_bled_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(pchip->bled)) { >> dev_err(&client->dev, "fail : backlight register\n"); >> ret = PTR_ERR(pchip->bled); >> diff --git a/drivers/video/backlight/locomolcd.c b/drivers/video/backlight/locomolcd.c >> index 6c3ec4259a60..126a4df5fd12 100644 >> --- a/drivers/video/backlight/locomolcd.c >> +++ b/drivers/video/backlight/locomolcd.c >> @@ -200,7 +200,8 @@ static int locomolcd_probe(struct locomo_dev *ldev) >> props.max_brightness = 4; >> locomolcd_bl_device = backlight_device_register("locomo-bl", >> &ldev->dev, NULL, >> - &locomobl_data, &props); >> + &locomobl_data, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> >> if (IS_ERR(locomolcd_bl_device)) >> return PTR_ERR(locomolcd_bl_device); >> diff --git a/drivers/video/backlight/lp855x_bl.c b/drivers/video/backlight/lp855x_bl.c >> index e5b14f52628f..6ef51c6540a6 100644 >> --- a/drivers/video/backlight/lp855x_bl.c >> +++ b/drivers/video/backlight/lp855x_bl.c >> @@ -299,7 +299,8 @@ static int lp855x_backlight_register(struct lp855x *lp) >> props.brightness = pdata->initial_brightness; >> >> bl = devm_backlight_device_register(lp->dev, name, lp->dev, lp, >> - &lp855x_bl_ops, &props); >> + &lp855x_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) >> return PTR_ERR(bl); >> >> diff --git a/drivers/video/backlight/lp8788_bl.c b/drivers/video/backlight/lp8788_bl.c >> index cf869ec90cce..734677bef739 100644 >> --- a/drivers/video/backlight/lp8788_bl.c >> +++ b/drivers/video/backlight/lp8788_bl.c >> @@ -214,7 +214,8 @@ static int lp8788_backlight_register(struct lp8788_bl *bl) >> name = pdata->name; >> >> bl_dev = backlight_device_register(name, bl->lp->dev, bl, >> - &lp8788_bl_ops, &props); >> + &lp8788_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl_dev)) >> return PTR_ERR(bl_dev); >> >> diff --git a/drivers/video/backlight/lv5207lp.c b/drivers/video/backlight/lv5207lp.c >> index 8ab7297b118a..ebd41edcd936 100644 >> --- a/drivers/video/backlight/lv5207lp.c >> +++ b/drivers/video/backlight/lv5207lp.c >> @@ -120,7 +120,8 @@ static int lv5207lp_probe(struct i2c_client *client, >> >> backlight = devm_backlight_device_register(&client->dev, >> dev_name(&client->dev), &lv->client->dev, >> - lv, &lv5207lp_backlight_ops, &props); >> + lv, &lv5207lp_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(backlight)) { >> dev_err(&client->dev, "failed to register backlight\n"); >> return PTR_ERR(backlight); >> diff --git a/drivers/video/backlight/max8925_bl.c b/drivers/video/backlight/max8925_bl.c >> index 7b738d60ecc2..aa1d39ab9977 100644 >> --- a/drivers/video/backlight/max8925_bl.c >> +++ b/drivers/video/backlight/max8925_bl.c >> @@ -165,7 +165,8 @@ static int max8925_backlight_probe(struct platform_device *pdev) >> props.max_brightness = MAX_BRIGHTNESS; >> bl = devm_backlight_device_register(&pdev->dev, "max8925-backlight", >> &pdev->dev, data, >> - &max8925_backlight_ops, &props); >> + &max8925_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/omap1_bl.c b/drivers/video/backlight/omap1_bl.c >> index 546d94df21d5..c587a4ec89a2 100644 >> --- a/drivers/video/backlight/omap1_bl.c >> +++ b/drivers/video/backlight/omap1_bl.c >> @@ -148,7 +148,8 @@ static int omapbl_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = OMAPBL_MAX_INTENSITY; >> dev = devm_backlight_device_register(&pdev->dev, "omap-bl", &pdev->dev, >> - bl, &omapbl_ops, &props); >> + bl, &omapbl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(dev)) >> return PTR_ERR(dev); >> >> diff --git a/drivers/video/backlight/ot200_bl.c b/drivers/video/backlight/ot200_bl.c >> index 3acdb9f646ed..36d71b32b9cd 100644 >> --- a/drivers/video/backlight/ot200_bl.c >> +++ b/drivers/video/backlight/ot200_bl.c >> @@ -120,7 +120,8 @@ static int ot200_backlight_probe(struct platform_device *pdev) >> >> bl = devm_backlight_device_register(&pdev->dev, dev_name(&pdev->dev), >> &pdev->dev, data, &ot200_backlight_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> retval = PTR_ERR(bl); >> diff --git a/drivers/video/backlight/pandora_bl.c b/drivers/video/backlight/pandora_bl.c >> index 5d8bb8b20183..b654543ea895 100644 >> --- a/drivers/video/backlight/pandora_bl.c >> +++ b/drivers/video/backlight/pandora_bl.c >> @@ -115,7 +115,8 @@ static int pandora_backlight_probe(struct platform_device *pdev) >> props.max_brightness = MAX_USER_VALUE; >> props.type = BACKLIGHT_RAW; >> bl = devm_backlight_device_register(&pdev->dev, pdev->name, &pdev->dev, >> - NULL, &pandora_backlight_ops, &props); >> + NULL, &pandora_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/pcf50633-backlight.c b/drivers/video/backlight/pcf50633-backlight.c >> index 85bd573b6d15..8f3dd6b22088 100644 >> --- a/drivers/video/backlight/pcf50633-backlight.c >> +++ b/drivers/video/backlight/pcf50633-backlight.c >> @@ -129,7 +129,8 @@ static int pcf50633_bl_probe(struct platform_device *pdev) >> >> pcf_bl->bl = devm_backlight_device_register(&pdev->dev, pdev->name, >> &pdev->dev, pcf_bl, >> - &pcf50633_bl_ops, &bl_props); >> + &pcf50633_bl_ops, &bl_props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> >> if (IS_ERR(pcf_bl->bl)) >> return PTR_ERR(pcf_bl->bl); >> diff --git a/drivers/video/backlight/pm8941-wled.c b/drivers/video/backlight/pm8941-wled.c >> index 0b6d21955d91..85035f2f784f 100644 >> --- a/drivers/video/backlight/pm8941-wled.c >> +++ b/drivers/video/backlight/pm8941-wled.c >> @@ -408,7 +408,8 @@ static int pm8941_wled_probe(struct platform_device *pdev) >> props.max_brightness = PM8941_WLED_REG_VAL_MAX; >> bl = devm_backlight_device_register(&pdev->dev, wled->name, >> &pdev->dev, wled, >> - &pm8941_wled_ops, &props); >> + &pm8941_wled_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> return PTR_ERR_OR_ZERO(bl); >> }; >> >> diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c >> index b2b366bb0f97..98655fce462c 100644 >> --- a/drivers/video/backlight/pwm_bl.c >> +++ b/drivers/video/backlight/pwm_bl.c >> @@ -330,7 +330,8 @@ static int pwm_backlight_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = data->max_brightness; >> bl = backlight_device_register(dev_name(&pdev->dev), &pdev->dev, pb, >> - &pwm_backlight_ops, &props); >> + &pwm_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> ret = PTR_ERR(bl); >> diff --git a/drivers/video/backlight/s6e63m0.c b/drivers/video/backlight/s6e63m0.c >> index 3c4a22a3063a..60bc88075e68 100644 >> --- a/drivers/video/backlight/s6e63m0.c >> +++ b/drivers/video/backlight/s6e63m0.c >> @@ -748,7 +748,8 @@ static int s6e63m0_probe(struct spi_device *spi) >> >> bd = devm_backlight_device_register(&spi->dev, "s6e63m0bl-bl", >> &spi->dev, lcd, &s6e63m0_backlight_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> >> diff --git a/drivers/video/backlight/sky81452-backlight.c b/drivers/video/backlight/sky81452-backlight.c >> index d414c7a3acf5..9abdbcf71fef 100644 >> --- a/drivers/video/backlight/sky81452-backlight.c >> +++ b/drivers/video/backlight/sky81452-backlight.c >> @@ -294,7 +294,8 @@ static int sky81452_bl_probe(struct platform_device *pdev) >> props.max_brightness = SKY81452_MAX_BRIGHTNESS, >> name = pdata->name ? pdata->name : SKY81452_DEFAULT_NAME; >> bd = devm_backlight_device_register(dev, name, dev, regmap, >> - &sky81452_bl_ops, &props); >> + &sky81452_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> dev_err(dev, "failed to register. err=%ld\n", PTR_ERR(bd)); >> return PTR_ERR(bd); >> diff --git a/drivers/video/backlight/tosa_bl.c b/drivers/video/backlight/tosa_bl.c >> index 83742d806391..755a61727ca1 100644 >> --- a/drivers/video/backlight/tosa_bl.c >> +++ b/drivers/video/backlight/tosa_bl.c >> @@ -107,7 +107,8 @@ static int tosa_bl_probe(struct i2c_client *client, >> props.max_brightness = 512 - 1; >> data->bl = devm_backlight_device_register(&client->dev, "tosa-bl", >> &client->dev, data, &bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(data->bl)) { >> ret = PTR_ERR(data->bl); >> goto err_reg; >> diff --git a/drivers/video/backlight/tps65217_bl.c b/drivers/video/backlight/tps65217_bl.c >> index fd524ad860a5..0ac55b9a773c 100644 >> --- a/drivers/video/backlight/tps65217_bl.c >> +++ b/drivers/video/backlight/tps65217_bl.c >> @@ -306,7 +306,8 @@ static int tps65217_bl_probe(struct platform_device *pdev) >> >> tps65217_bl->bl = devm_backlight_device_register(&pdev->dev, pdev->name, >> tps65217_bl->dev, tps65217_bl, >> - &tps65217_bl_ops, &bl_props); >> + &tps65217_bl_ops, &bl_props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(tps65217_bl->bl)) { >> dev_err(tps65217_bl->dev, >> "registration of backlight device failed: %d\n", rc); >> diff --git a/drivers/video/backlight/wm831x_bl.c b/drivers/video/backlight/wm831x_bl.c >> index 6eab0d6c262a..8b92a277f83b 100644 >> --- a/drivers/video/backlight/wm831x_bl.c >> +++ b/drivers/video/backlight/wm831x_bl.c >> @@ -197,7 +197,8 @@ static int wm831x_backlight_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = max_isel; >> bl = devm_backlight_device_register(&pdev->dev, "wm831x", &pdev->dev, >> - data, &wm831x_backlight_ops, &props); >> + data, &wm831x_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/fbdev/atmel_lcdfb.c b/drivers/video/fbdev/atmel_lcdfb.c >> index 669ecc755fa9..d6c46d670622 100644 >> --- a/drivers/video/fbdev/atmel_lcdfb.c >> +++ b/drivers/video/fbdev/atmel_lcdfb.c >> @@ -244,7 +244,8 @@ static void init_backlight(struct atmel_lcdfb_info *sinfo) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = 0xff; >> bl = backlight_device_register("backlight", &sinfo->pdev->dev, sinfo, >> - &atmel_lcdc_bl_ops, &props); >> + &atmel_lcdc_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&sinfo->pdev->dev, "error %ld on backlight register\n", >> PTR_ERR(bl)); >> diff --git a/drivers/video/fbdev/aty/aty128fb.c b/drivers/video/fbdev/aty/aty128fb.c >> index 0a4626886b00..dae8734870c9 100644 >> --- a/drivers/video/fbdev/aty/aty128fb.c >> +++ b/drivers/video/fbdev/aty/aty128fb.c >> @@ -1871,7 +1871,8 @@ static void aty128_bl_init(struct aty128fb_par *par) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = FB_BACKLIGHT_LEVELS - 1; >> bd = backlight_device_register(name, info->dev, par, &aty128_bl_data, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> info->bl_dev = NULL; >> printk(KERN_WARNING "aty128: Backlight registration failed\n"); >> diff --git a/drivers/video/fbdev/aty/atyfb_base.c b/drivers/video/fbdev/aty/atyfb_base.c >> index f34ed47fcaf8..918ec8f946aa 100644 >> --- a/drivers/video/fbdev/aty/atyfb_base.c >> +++ b/drivers/video/fbdev/aty/atyfb_base.c >> @@ -2242,7 +2242,8 @@ static void aty_bl_init(struct atyfb_par *par) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = FB_BACKLIGHT_LEVELS - 1; >> bd = backlight_device_register(name, info->dev, par, &aty_bl_data, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> info->bl_dev = NULL; >> printk(KERN_WARNING "aty: Backlight registration failed\n"); >> diff --git a/drivers/video/fbdev/aty/radeon_backlight.c b/drivers/video/fbdev/aty/radeon_backlight.c >> index 301d6d6aeead..a8c9ef618e42 100644 >> --- a/drivers/video/fbdev/aty/radeon_backlight.c >> +++ b/drivers/video/fbdev/aty/radeon_backlight.c >> @@ -155,7 +155,8 @@ void radeonfb_bl_init(struct radeonfb_info *rinfo) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = FB_BACKLIGHT_LEVELS - 1; >> bd = backlight_device_register(name, rinfo->info->dev, pdata, >> - &radeon_bl_data, &props); >> + &radeon_bl_data, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> rinfo->info->bl_dev = NULL; >> printk("radeonfb: Backlight registration failed\n"); >> diff --git a/drivers/video/fbdev/bf537-lq035.c b/drivers/video/fbdev/bf537-lq035.c >> index ef29fb425122..77b6f98d2182 100644 >> --- a/drivers/video/fbdev/bf537-lq035.c >> +++ b/drivers/video/fbdev/bf537-lq035.c >> @@ -765,7 +765,8 @@ static int bfin_lq035_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = MAX_BRIGHENESS; >> bl_dev = backlight_device_register("bf537-bl", NULL, NULL, >> - &bfin_lq035fb_bl_ops, &props); >> + &bfin_lq035fb_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> >> lcd_dev = lcd_device_register(KBUILD_MODNAME, &pdev->dev, NULL, >> &bfin_lcd_ops); >> diff --git a/drivers/video/fbdev/bf54x-lq043fb.c b/drivers/video/fbdev/bf54x-lq043fb.c >> index 8f1f97c75619..4001f3c9c40c 100644 >> --- a/drivers/video/fbdev/bf54x-lq043fb.c >> +++ b/drivers/video/fbdev/bf54x-lq043fb.c >> @@ -652,7 +652,8 @@ static int bfin_bf54x_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = 255; >> bl_dev = backlight_device_register("bf54x-bl", NULL, NULL, >> - &bfin_lq043fb_bl_ops, &props); >> + &bfin_lq043fb_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl_dev)) { >> printk(KERN_ERR DRIVER_NAME >> ": unable to register backlight.\n"); >> diff --git a/drivers/video/fbdev/bfin-t350mcqb-fb.c b/drivers/video/fbdev/bfin-t350mcqb-fb.c >> index e5ee4d9677f7..6c1c64f48432 100644 >> --- a/drivers/video/fbdev/bfin-t350mcqb-fb.c >> +++ b/drivers/video/fbdev/bfin-t350mcqb-fb.c >> @@ -549,7 +549,8 @@ static int bfin_t350mcqb_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = 255; >> bl_dev = backlight_device_register("bf52x-bl", NULL, NULL, >> - &bfin_lq043fb_bl_ops, &props); >> + &bfin_lq043fb_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl_dev)) { >> printk(KERN_ERR DRIVER_NAME >> ": unable to register backlight.\n"); >> diff --git a/drivers/video/fbdev/exynos/s6e8ax0.c b/drivers/video/fbdev/exynos/s6e8ax0.c >> index de2f3e793786..a78c6effab97 100644 >> --- a/drivers/video/fbdev/exynos/s6e8ax0.c >> +++ b/drivers/video/fbdev/exynos/s6e8ax0.c >> @@ -796,7 +796,8 @@ static int s6e8ax0_probe(struct mipi_dsim_lcd_device *dsim_dev) >> } >> >> lcd->bd = devm_backlight_device_register(lcd->dev, "s6e8ax0-bl", >> - lcd->dev, lcd, &s6e8ax0_backlight_ops, NULL); >> + lcd->dev, lcd, &s6e8ax0_backlight_ops, NULL, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(lcd->bd)) { >> dev_err(lcd->dev, "failed to register backlight ops.\n"); >> return PTR_ERR(lcd->bd); >> diff --git a/drivers/video/fbdev/mx3fb.c b/drivers/video/fbdev/mx3fb.c >> index f91b1db262b0..c13c365e6622 100644 >> --- a/drivers/video/fbdev/mx3fb.c >> +++ b/drivers/video/fbdev/mx3fb.c >> @@ -319,7 +319,8 @@ static void mx3fb_init_backlight(struct mx3fb_data *fbd) >> sdc_set_brightness(fbd, fbd->backlight_level); >> >> bl = backlight_device_register("mx3fb-bl", fbd->dev, fbd, >> - &mx3fb_lcdc_bl_ops, &props); >> + &mx3fb_lcdc_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(fbd->dev, "error %ld on backlight register\n", >> PTR_ERR(bl)); >> diff --git a/drivers/video/fbdev/nvidia/nv_backlight.c b/drivers/video/fbdev/nvidia/nv_backlight.c >> index 5c151b2ea683..fdb91547b02f 100644 >> --- a/drivers/video/fbdev/nvidia/nv_backlight.c >> +++ b/drivers/video/fbdev/nvidia/nv_backlight.c >> @@ -108,7 +108,8 @@ void nvidia_bl_init(struct nvidia_par *par) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = FB_BACKLIGHT_LEVELS - 1; >> bd = backlight_device_register(name, info->dev, par, &nvidia_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> info->bl_dev = NULL; >> printk(KERN_WARNING "nvidia: Backlight registration failed\n"); >> diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c >> index b58012b82b6f..2c5fccf81391 100644 >> --- a/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c >> +++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c >> @@ -1259,7 +1259,8 @@ static int dsicm_probe(struct platform_device *pdev) >> >> props.type = BACKLIGHT_RAW; >> bldev = backlight_device_register(dev_name(dev), >> - dev, ddata, &dsicm_bl_ops, &props); >> + dev, ddata, &dsicm_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bldev)) { >> r = PTR_ERR(bldev); >> goto err_bl; >> diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c >> index 468560a6daae..8d7821e8bb0a 100644 >> --- a/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c >> +++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c >> @@ -816,7 +816,8 @@ static int acx565akm_probe(struct spi_device *spi) >> props.type = BACKLIGHT_RAW; >> >> bldev = backlight_device_register("acx565akm", &ddata->spi->dev, >> - ddata, &acx565akm_bl_ops, &props); >> + ddata, &acx565akm_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bldev)) { >> r = PTR_ERR(bldev); >> goto err_reg_bl; >> diff --git a/drivers/video/fbdev/riva/fbdev.c b/drivers/video/fbdev/riva/fbdev.c >> index 2ef26ad99341..6dc05da50609 100644 >> --- a/drivers/video/fbdev/riva/fbdev.c >> +++ b/drivers/video/fbdev/riva/fbdev.c >> @@ -343,7 +343,8 @@ static void riva_bl_init(struct riva_par *par) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = FB_BACKLIGHT_LEVELS - 1; >> bd = backlight_device_register(name, info->dev, par, &riva_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> info->bl_dev = NULL; >> printk(KERN_WARNING "riva: Backlight registration failed\n"); >> diff --git a/drivers/video/fbdev/sh_mobile_lcdcfb.c b/drivers/video/fbdev/sh_mobile_lcdcfb.c >> index 82c0a8caa9b8..2000ed98b380 100644 >> --- a/drivers/video/fbdev/sh_mobile_lcdcfb.c >> +++ b/drivers/video/fbdev/sh_mobile_lcdcfb.c >> @@ -2314,7 +2314,8 @@ static struct backlight_device *sh_mobile_lcdc_bl_probe(struct device *parent, >> struct backlight_device *bl; >> >> bl = backlight_device_register(ch->cfg->bl_info.name, parent, ch, >> - &sh_mobile_lcdc_bl_ops, NULL); >> + &sh_mobile_lcdc_bl_ops, NULL, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(parent, "unable to register backlight device: %ld\n", >> PTR_ERR(bl)); >> diff --git a/drivers/video/fbdev/ssd1307fb.c b/drivers/video/fbdev/ssd1307fb.c >> index a9c45c89b15e..a8a7ba4acde6 100644 >> --- a/drivers/video/fbdev/ssd1307fb.c >> +++ b/drivers/video/fbdev/ssd1307fb.c >> @@ -673,7 +673,8 @@ static int ssd1307fb_probe(struct i2c_client *client, >> >> snprintf(bl_name, sizeof(bl_name), "ssd1307fb%d", info->node); >> bl = backlight_device_register(bl_name, &client->dev, par, >> - &ssd1307fb_bl_ops, NULL); >> + &ssd1307fb_bl_ops, NULL, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> ret = PTR_ERR(bl); >> dev_err(&client->dev, "unable to register backlight device: %d\n", >> diff --git a/include/linux/backlight.h b/include/linux/backlight.h >> index 5f2fd61ef4fb..79af3ccabeca 100644 >> --- a/include/linux/backlight.h >> +++ b/include/linux/backlight.h >> @@ -129,13 +129,16 @@ static inline int backlight_update_status(struct backlight_device *bd) >> return ret; >> } >> >> +#define BACKLIGHT_REGISTER_FB_CLIENT 0x1 >> extern struct backlight_device *backlight_device_register(const char *name, >> struct device *dev, void *devdata, const struct backlight_ops *ops, >> - const struct backlight_properties *props); >> + const struct backlight_properties *props, >> + unsigned long flags); >> extern struct backlight_device *devm_backlight_device_register( >> struct device *dev, const char *name, struct device *parent, >> void *devdata, const struct backlight_ops *ops, >> - const struct backlight_properties *props); >> + const struct backlight_properties *props, >> + unsigned long flags); >> extern void backlight_device_unregister(struct backlight_device *bd); >> extern void devm_backlight_device_unregister(struct device *dev, >> struct backlight_device *bd); >> -- >> 2.8.1 >> >> _______________________________________________ >> Intel-gfx mailing list >> Intel-gfx@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Jani Nikula, Intel Open Source Technology Center From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com ([134.134.136.65]:9258 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756346AbcHDJOm convert rfc822-to-8bit (ORCPT ); Thu, 4 Aug 2016 05:14:42 -0400 From: Jani Nikula To: Daniel Vetter , Chris Wilson Cc: Milo Kim , Krzysztof Kozlowski , David Airlie , nouveau@lists.freedesktop.org, Jon Nettleton , Nicolas Ferre , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, Thierry Reding , Paul Mackerras , Laurent Pinchart , Daniel Vetter , Lee Jones , Daniel Drake , Jens Frederich , linux-acpi@vger.kernel.org, Bruno =?utf-8?Q?Pr=C3=A9mont?= , Tomi Valkeinen , Ben Skeggs , Zhang Rui , Jean-Christophe Plagniol-Villard , Michael Hennerich , intel-gfx@lists.freedesktop.org, Jiri Kosina , linux-omap@vger.kernel.org, Thomas Petazzoni , Jingoo Han , linux-renesas-soc@vger.kernel.org, Noralf =?utf-8?Q?Tr=C3=B8nnes?= , Kukjin Kim , Alex Deucher , Antonino Daplas , Christian =?utf-8?Q?K=C3=B6nig?= Subject: Re: [Intel-gfx] [PATCH] backlight: Avoid double fbcon backlight handling In-Reply-To: <20160712122119.GR23520@phenom.ffwll.local> References: <1467286256-8870-1-git-send-email-chris@chris-wilson.co.uk> <20160712122119.GR23520@phenom.ffwll.local> Date: Thu, 04 Aug 2016 12:02:23 +0300 Message-ID: <87a8gsq540.fsf@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8BIT Sender: linux-renesas-soc-owner@vger.kernel.org List-ID: On Tue, 12 Jul 2016, Daniel Vetter wrote: > On Thu, Jun 30, 2016 at 12:30:56PM +0100, Chris Wilson wrote: >> Backlights controlled by i915.ko and only associated with its connectors >> and also only associated with the intel_drmfb fbcon, controlled by >> i915.ko. In this situation, we already handle adjusting the backlight >> when the fbcon is blanked/unblanked and do not require backlight trying >> to do the same. >> >> Attempting to register with the fbdev as a client causes lockdep to warn >> about a dependency cycle: > > The fbdev notifier strikes again! > > Last time I looked into this I think the proper solution would be to split > the backlight part from the other fbdev notifier (which is used by fbcon > for reacting to fbdev device reg/unreg events). > > I think that would fix this too, with the added bonus of slightly > untangling the fbcon locking mess. And it's also the one part of > untangling this mess which should be possible without any trouble - I've > simply never done it since entirely getting rid of the fbdev notifier for > fbcon is a lot more work. So what do we do with this? It fixes a problem upstream. There's no Fixes: to identify the bad commit. Any idea on that? It's either this or we dig out the bad commit (Chris probably knows which one?) and revert. BR, Jani. > -Daniel > >> >> [ 18.983763] ====================================================== >> [ 18.983763] [ INFO: possible circular locking dependency detected ] >> [ 18.983766] 4.7.0-rc5+ #524 Tainted: G O >> [ 18.983767] ------------------------------------------------------- >> [ 18.983767] kworker/u8:0/6 is trying to acquire lock: >> [ 18.983777] (&dev->mode_config.mutex){+.+.+.}, at: [] drm_modeset_lock_all+0x40/0x120 >> [ 18.983777] >> but task is already holding lock: >> [ 18.983782] ((fb_notifier_list).rwsem){++++.+}, at: [] __blocking_notifier_call_chain+0x35/0x70 >> [ 18.983783] >> which lock already depends on the new lock. >> >> [ 18.983783] >> the existing dependency chain (in reverse order) is: >> [ 18.983785] >> -> #1 ((fb_notifier_list).rwsem){++++.+}: >> [ 18.983789] [] lock_acquire+0xb1/0x200 >> [ 18.983792] [] down_write+0x44/0x80 >> [ 18.983795] [] blocking_notifier_chain_register+0x21/0xb0 >> [ 18.983798] [] fb_register_client+0x18/0x20 >> [ 18.983800] [] backlight_device_register+0x136/0x260 >> [ 18.983852] [] intel_backlight_device_register+0xa2/0x160 [i915] >> [ 18.983892] [] intel_connector_register+0xe/0x10 [i915] >> [ 18.983932] [] intel_dp_connector_register+0x1b/0x80 [i915] >> [ 18.983936] [] drm_connector_register+0x4a/0x80 >> [ 18.983938] [] drm_connector_register_all+0x64/0xf0 >> [ 18.983940] [] drm_modeset_register_all+0x174/0x1c0 >> [ 18.983942] [] drm_dev_register+0xc2/0xd0 >> [ 18.983976] [] i915_driver_load+0x1547/0x2200 [i915] >> [ 18.984010] [] i915_pci_probe+0x4f/0x70 [i915] >> [ 18.984014] [] local_pci_probe+0x45/0xa0 >> [ 18.984015] [] pci_device_probe+0xdb/0x130 >> [ 18.984018] [] driver_probe_device+0x223/0x440 >> [ 18.984020] [] __driver_attach+0xd5/0x100 >> [ 18.984022] [] bus_for_each_dev+0x66/0xa0 >> [ 18.984023] [] driver_attach+0x1e/0x20 >> [ 18.984025] [] bus_add_driver+0x1ee/0x280 >> [ 18.984028] [] driver_register+0x60/0xe0 >> [ 18.984030] [] __pci_register_driver+0x60/0x70 >> [ 18.984063] [] i915_init+0x5b/0x62 [i915] >> [ 18.984067] [] do_one_initcall+0x3d/0x150 >> [ 18.984070] [] do_init_module+0x5f/0x1d9 >> [ 18.984073] [] load_module+0x20e6/0x27e0 >> [ 18.984075] [] SYSC_finit_module+0xc3/0xf0 >> [ 18.984076] [] SyS_finit_module+0xe/0x10 >> [ 18.984079] [] entry_SYSCALL_64_fastpath+0x1c/0xac >> [ 18.984081] >> -> #0 (&dev->mode_config.mutex){+.+.+.}: >> [ 18.984083] [] __lock_acquire+0x10fc/0x1260 >> [ 18.984085] [] lock_acquire+0xb1/0x200 >> [ 18.984088] [] mutex_lock_nested+0x67/0x3c0 >> [ 18.984090] [] drm_modeset_lock_all+0x40/0x120 >> [ 18.984093] [] drm_fb_helper_restore_fbdev_mode_unlocked+0x2b/0x80 >> [ 18.984095] [] drm_fb_helper_set_par+0x2d/0x50 >> [ 18.984134] [] intel_fbdev_set_par+0x1a/0x60 [i915] >> [ 18.984136] [] fbcon_init+0x586/0x610 >> [ 18.984139] [] visual_init+0xca/0x130 >> [ 18.984141] [] do_bind_con_driver+0x1c1/0x3a0 >> [ 18.984143] [] do_take_over_console+0x116/0x180 >> [ 18.984145] [] do_fbcon_takeover+0x57/0xb0 >> [ 18.984147] [] fbcon_event_notify+0x658/0x750 >> [ 18.984150] [] notifier_call_chain+0x3e/0xb0 >> [ 18.984152] [] __blocking_notifier_call_chain+0x4d/0x70 >> [ 18.984154] [] blocking_notifier_call_chain+0x16/0x20 >> [ 18.984156] [] fb_notifier_call_chain+0x1b/0x20 >> [ 18.984158] [] register_framebuffer+0x251/0x330 >> [ 18.984160] [] drm_fb_helper_initial_config+0x25f/0x3f0 >> [ 18.984199] [] intel_fbdev_initial_config+0x18/0x30 [i915] >> [ 18.984201] [] async_run_entry_fn+0x48/0x150 >> [ 18.984203] [] process_one_work+0x1e7/0x750 >> [ 18.984205] [] worker_thread+0x4b/0x4f0 >> [ 18.984207] [] kthread+0xef/0x110 >> [ 18.984208] [] ret_from_fork+0x1f/0x40 >> [ 18.984209] >> other info that might help us debug this: >> >> [ 18.984210] Possible unsafe locking scenario: >> >> [ 18.984210] CPU0 CPU1 >> [ 18.984211] ---- ---- >> [ 18.984212] lock((fb_notifier_list).rwsem); >> [ 18.984213] lock(&dev->mode_config.mutex); >> [ 18.984215] lock((fb_notifier_list).rwsem); >> [ 18.984216] lock(&dev->mode_config.mutex); >> [ 18.984216] >> *** DEADLOCK *** >> >> [ 18.984217] 6 locks held by kworker/u8:0/6: >> [ 18.984220] #0: ("events_unbound"){.+.+.+}, at: [] process_one_work+0x169/0x750 >> [ 18.984223] #1: ((&entry->work)){+.+.+.}, at: [] process_one_work+0x169/0x750 >> [ 18.984227] #2: (registration_lock){+.+.+.}, at: [] register_framebuffer+0x27/0x330 >> [ 18.984231] #3: (console_lock){+.+.+.}, at: [] register_framebuffer+0x26e/0x330 >> [ 18.984234] #4: (&fb_info->lock){+.+.+.}, at: [] lock_fb_info+0x1d/0x40 >> [ 18.984238] #5: ((fb_notifier_list).rwsem){++++.+}, at: [] __blocking_notifier_call_chain+0x35/0x70 >> [ 18.984238] >> stack backtrace: >> [ 18.984241] CPU: 2 PID: 6 Comm: kworker/u8:0 Tainted: G O 4.7.0-rc5+ #524 >> [ 18.984242] Hardware name: Intel Corp. Broxton P/NOTEBOOK, BIOS APLKRVPA.X64.0138.B33.1606250842 06/25/2016 >> [ 18.984244] Workqueue: events_unbound async_run_entry_fn >> [ 18.984248] 0000000000000000 ffff8800758577f0 ffffffff814507a5 ffffffff828b9900 >> [ 18.984250] ffffffff828b9900 ffff880075857830 ffffffff810dc6fa ffff880075857880 >> [ 18.984252] ffff88007584d688 0000000000000005 0000000000000006 ffff88007584d6b0 >> [ 18.984253] Call Trace: >> [ 18.984257] [] dump_stack+0x67/0x92 >> [ 18.984259] [] print_circular_bug+0x1aa/0x200 >> [ 18.984261] [] __lock_acquire+0x10fc/0x1260 >> [ 18.984264] [] lock_acquire+0xb1/0x200 >> [ 18.984266] [] ? drm_modeset_lock_all+0x40/0x120 >> [ 18.984267] [] ? drm_modeset_lock_all+0x40/0x120 >> [ 18.984269] [] mutex_lock_nested+0x67/0x3c0 >> [ 18.984271] [] ? drm_modeset_lock_all+0x40/0x120 >> [ 18.984273] [] ? rcu_read_lock_sched_held+0x7f/0x90 >> [ 18.984276] [] ? kmem_cache_alloc_trace+0x248/0x2b0 >> [ 18.984277] [] ? drm_modeset_lock_all+0x25/0x120 >> [ 18.984279] [] drm_modeset_lock_all+0x40/0x120 >> [ 18.984281] [] drm_fb_helper_restore_fbdev_mode_unlocked+0x2b/0x80 >> [ 18.984283] [] drm_fb_helper_set_par+0x2d/0x50 >> [ 18.984322] [] intel_fbdev_set_par+0x1a/0x60 [i915] >> [ 18.984324] [] fbcon_init+0x586/0x610 >> [ 18.984326] [] visual_init+0xca/0x130 >> [ 18.984328] [] do_bind_con_driver+0x1c1/0x3a0 >> [ 18.984330] [] do_take_over_console+0x116/0x180 >> [ 18.984332] [] do_fbcon_takeover+0x57/0xb0 >> [ 18.984334] [] fbcon_event_notify+0x658/0x750 >> [ 18.984336] [] notifier_call_chain+0x3e/0xb0 >> [ 18.984338] [] __blocking_notifier_call_chain+0x4d/0x70 >> [ 18.984340] [] blocking_notifier_call_chain+0x16/0x20 >> [ 18.984342] [] fb_notifier_call_chain+0x1b/0x20 >> [ 18.984344] [] register_framebuffer+0x251/0x330 >> [ 18.984347] [] ? vga_switcheroo_client_fb_set+0x5d/0x70 >> [ 18.984349] [] drm_fb_helper_initial_config+0x25f/0x3f0 >> [ 18.984388] [] intel_fbdev_initial_config+0x18/0x30 [i915] >> [ 18.984389] [] async_run_entry_fn+0x48/0x150 >> [ 18.984391] [] process_one_work+0x1e7/0x750 >> [ 18.984392] [] ? process_one_work+0x169/0x750 >> [ 18.984394] [] worker_thread+0x4b/0x4f0 >> [ 18.984396] [] ? process_one_work+0x750/0x750 >> [ 18.984398] [] kthread+0xef/0x110 >> [ 18.984401] [] ret_from_fork+0x1f/0x40 >> [ 18.984402] [] ? kthread_stop+0x2e0/0x2e0 >> >> Reported-by: Imre Deak >> Signed-off-by: Chris Wilson >> Cc: Imre Deak >> Cc: Zhang Rui >> Cc: Alex Deucher >> Cc: "Christian König" >> Cc: David Airlie >> Cc: Patrik Jakobsson >> Cc: Daniel Vetter >> Cc: Jani Nikula >> Cc: Ben Skeggs >> Cc: Tomi Valkeinen >> Cc: Laurent Pinchart >> Cc: "Bruno Prémont" >> Cc: Jiri Kosina >> Cc: Thomas Petazzoni >> Cc: "Noralf Trønnes" >> Cc: Jens Frederich >> Cc: Daniel Drake >> Cc: Jon Nettleton >> Cc: Jingoo Han >> Cc: Lee Jones >> Cc: Jean-Christophe Plagniol-Villard >> Cc: Michael Hennerich >> Cc: Milo Kim >> Cc: Thierry Reding >> Cc: Nicolas Ferre >> Cc: Paul Mackerras >> Cc: Kukjin Kim >> Cc: Krzysztof Kozlowski >> Cc: Antonino Daplas >> Cc: linux-acpi@vger.kernel.org >> Cc: dri-devel@lists.freedesktop.org >> Cc: intel-gfx@lists.freedesktop.org >> Cc: nouveau@lists.freedesktop.org >> Cc: linux-renesas-soc@vger.kernel.org >> Cc: linux-fbdev@vger.kernel.org >> Cc: linux-omap@vger.kernel.org >> --- >> drivers/acpi/acpi_video.c | 3 ++- >> drivers/gpu/drm/amd/amdgpu/atombios_encoders.c | 3 ++- >> drivers/gpu/drm/bridge/parade-ps8622.c | 3 ++- >> drivers/gpu/drm/gma500/cdv_device.c | 3 ++- >> drivers/gpu/drm/gma500/mdfld_device.c | 3 ++- >> drivers/gpu/drm/gma500/oaktrail_device.c | 3 ++- >> drivers/gpu/drm/gma500/psb_device.c | 3 ++- >> drivers/gpu/drm/i915/intel_panel.c | 3 ++- >> drivers/gpu/drm/nouveau/nouveau_backlight.c | 6 ++++-- >> drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c | 3 ++- >> .../gpu/drm/omapdrm/displays/panel-sony-acx565akm.c | 3 ++- >> drivers/gpu/drm/radeon/atombios_encoders.c | 3 ++- >> drivers/gpu/drm/radeon/radeon_legacy_encoders.c | 3 ++- >> drivers/gpu/drm/shmobile/shmob_drm_backlight.c | 3 ++- >> drivers/hid/hid-picolcd_backlight.c | 3 ++- >> drivers/macintosh/via-pmu-backlight.c | 3 ++- >> drivers/platform/x86/acer-wmi.c | 3 ++- >> drivers/platform/x86/apple-gmux.c | 3 ++- >> drivers/platform/x86/asus-laptop.c | 3 ++- >> drivers/platform/x86/asus-wmi.c | 3 ++- >> drivers/platform/x86/classmate-laptop.c | 3 ++- >> drivers/platform/x86/compal-laptop.c | 3 ++- >> drivers/platform/x86/dell-laptop.c | 3 ++- >> drivers/platform/x86/eeepc-laptop.c | 3 ++- >> drivers/platform/x86/fujitsu-laptop.c | 3 ++- >> drivers/platform/x86/ideapad-laptop.c | 3 ++- >> drivers/platform/x86/intel_oaktrail.c | 3 ++- >> drivers/platform/x86/msi-laptop.c | 3 ++- >> drivers/platform/x86/msi-wmi.c | 3 ++- >> drivers/platform/x86/panasonic-laptop.c | 3 ++- >> drivers/platform/x86/samsung-laptop.c | 3 ++- >> drivers/platform/x86/samsung-q10.c | 3 ++- >> drivers/platform/x86/sony-laptop.c | 3 ++- >> drivers/platform/x86/thinkpad_acpi.c | 3 ++- >> drivers/platform/x86/toshiba_acpi.c | 3 ++- >> drivers/staging/fbtft/fb_ssd1351.c | 3 ++- >> drivers/staging/fbtft/fb_watterott.c | 3 ++- >> drivers/staging/fbtft/fbtft-core.c | 3 ++- >> drivers/staging/olpc_dcon/olpc_dcon.c | 3 ++- >> drivers/usb/misc/appledisplay.c | 3 ++- >> drivers/video/backlight/88pm860x_bl.c | 3 ++- >> drivers/video/backlight/aat2870_bl.c | 3 ++- >> drivers/video/backlight/adp5520_bl.c | 3 ++- >> drivers/video/backlight/adp8860_bl.c | 3 ++- >> drivers/video/backlight/adp8870_bl.c | 3 ++- >> drivers/video/backlight/ams369fg06.c | 3 ++- >> drivers/video/backlight/apple_bl.c | 3 ++- >> drivers/video/backlight/as3711_bl.c | 3 ++- >> drivers/video/backlight/backlight.c | 20 +++++++++++++------- >> drivers/video/backlight/bd6107.c | 3 ++- >> drivers/video/backlight/corgi_lcd.c | 3 ++- >> drivers/video/backlight/cr_bllcd.c | 3 ++- >> drivers/video/backlight/da903x_bl.c | 3 ++- >> drivers/video/backlight/da9052_bl.c | 3 ++- >> drivers/video/backlight/ep93xx_bl.c | 3 ++- >> drivers/video/backlight/generic_bl.c | 3 ++- >> drivers/video/backlight/gpio_backlight.c | 3 ++- >> drivers/video/backlight/hp680_bl.c | 3 ++- >> drivers/video/backlight/ipaq_micro_bl.c | 3 ++- >> drivers/video/backlight/jornada720_bl.c | 3 ++- >> drivers/video/backlight/kb3886_bl.c | 3 ++- >> drivers/video/backlight/ld9040.c | 3 ++- >> drivers/video/backlight/lm3533_bl.c | 3 ++- >> drivers/video/backlight/lm3630a_bl.c | 6 ++++-- >> drivers/video/backlight/lm3639_bl.c | 3 ++- >> drivers/video/backlight/locomolcd.c | 3 ++- >> drivers/video/backlight/lp855x_bl.c | 3 ++- >> drivers/video/backlight/lp8788_bl.c | 3 ++- >> drivers/video/backlight/lv5207lp.c | 3 ++- >> drivers/video/backlight/max8925_bl.c | 3 ++- >> drivers/video/backlight/omap1_bl.c | 3 ++- >> drivers/video/backlight/ot200_bl.c | 3 ++- >> drivers/video/backlight/pandora_bl.c | 3 ++- >> drivers/video/backlight/pcf50633-backlight.c | 3 ++- >> drivers/video/backlight/pm8941-wled.c | 3 ++- >> drivers/video/backlight/pwm_bl.c | 3 ++- >> drivers/video/backlight/s6e63m0.c | 3 ++- >> drivers/video/backlight/sky81452-backlight.c | 3 ++- >> drivers/video/backlight/tosa_bl.c | 3 ++- >> drivers/video/backlight/tps65217_bl.c | 3 ++- >> drivers/video/backlight/wm831x_bl.c | 3 ++- >> drivers/video/fbdev/atmel_lcdfb.c | 3 ++- >> drivers/video/fbdev/aty/aty128fb.c | 3 ++- >> drivers/video/fbdev/aty/atyfb_base.c | 3 ++- >> drivers/video/fbdev/aty/radeon_backlight.c | 3 ++- >> drivers/video/fbdev/bf537-lq035.c | 3 ++- >> drivers/video/fbdev/bf54x-lq043fb.c | 3 ++- >> drivers/video/fbdev/bfin-t350mcqb-fb.c | 3 ++- >> drivers/video/fbdev/exynos/s6e8ax0.c | 3 ++- >> drivers/video/fbdev/mx3fb.c | 3 ++- >> drivers/video/fbdev/nvidia/nv_backlight.c | 3 ++- >> .../video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c | 3 ++- >> .../omap2/omapfb/displays/panel-sony-acx565akm.c | 3 ++- >> drivers/video/fbdev/riva/fbdev.c | 3 ++- >> drivers/video/fbdev/sh_mobile_lcdcfb.c | 3 ++- >> drivers/video/fbdev/ssd1307fb.c | 3 ++- >> include/linux/backlight.h | 7 +++++-- >> 97 files changed, 212 insertions(+), 106 deletions(-) >> >> diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c >> index c1d138e128cb..49e0acb70c17 100644 >> --- a/drivers/acpi/acpi_video.c >> +++ b/drivers/acpi/acpi_video.c >> @@ -1693,7 +1693,8 @@ static void acpi_video_dev_register_backlight(struct acpi_video_device *device) >> parent, >> device, >> &acpi_backlight_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> kfree(name); >> if (IS_ERR(device->backlight)) { >> device->backlight = NULL; >> diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c >> index 48b6bd671cda..b6ae67a75a25 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c >> +++ b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c >> @@ -198,7 +198,8 @@ void amdgpu_atombios_encoder_init_backlight(struct amdgpu_encoder *amdgpu_encode >> snprintf(bl_name, sizeof(bl_name), >> "amdgpu_bl%d", dev->primary->index); >> bd = backlight_device_register(bl_name, drm_connector->kdev, >> - pdata, &amdgpu_atombios_encoder_backlight_ops, &props); >> + pdata, &amdgpu_atombios_encoder_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> DRM_ERROR("Backlight registration failed\n"); >> goto error; >> diff --git a/drivers/gpu/drm/bridge/parade-ps8622.c b/drivers/gpu/drm/bridge/parade-ps8622.c >> index 5cd8dd7e5904..14dea711b474 100644 >> --- a/drivers/gpu/drm/bridge/parade-ps8622.c >> +++ b/drivers/gpu/drm/bridge/parade-ps8622.c >> @@ -608,7 +608,8 @@ static int ps8622_probe(struct i2c_client *client, >> if (!of_find_property(dev->of_node, "use-external-pwm", NULL)) { >> ps8622->bl = backlight_device_register("ps8622-backlight", >> dev, ps8622, &ps8622_backlight_ops, >> - NULL); >> + NULL, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(ps8622->bl)) { >> DRM_ERROR("failed to register backlight\n"); >> ret = PTR_ERR(ps8622->bl); >> diff --git a/drivers/gpu/drm/gma500/cdv_device.c b/drivers/gpu/drm/gma500/cdv_device.c >> index 8745971a7680..d2b4d645b4db 100644 >> --- a/drivers/gpu/drm/gma500/cdv_device.c >> +++ b/drivers/gpu/drm/gma500/cdv_device.c >> @@ -163,7 +163,8 @@ static int cdv_backlight_init(struct drm_device *dev) >> props.type = BACKLIGHT_PLATFORM; >> >> cdv_backlight_device = backlight_device_register("psb-bl", >> - NULL, (void *)dev, &cdv_ops, &props); >> + NULL, (void *)dev, &cdv_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(cdv_backlight_device)) >> return PTR_ERR(cdv_backlight_device); >> >> diff --git a/drivers/gpu/drm/gma500/mdfld_device.c b/drivers/gpu/drm/gma500/mdfld_device.c >> index e2ab858122f9..2e24ecccfd39 100644 >> --- a/drivers/gpu/drm/gma500/mdfld_device.c >> +++ b/drivers/gpu/drm/gma500/mdfld_device.c >> @@ -130,7 +130,8 @@ static int mdfld_backlight_init(struct drm_device *dev) >> props.max_brightness = BRIGHTNESS_MAX_LEVEL; >> props.type = BACKLIGHT_PLATFORM; >> mdfld_backlight_device = backlight_device_register("mdfld-bl", >> - NULL, (void *)dev, &mdfld_ops, &props); >> + NULL, (void *)dev, &mdfld_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> >> if (IS_ERR(mdfld_backlight_device)) >> return PTR_ERR(mdfld_backlight_device); >> diff --git a/drivers/gpu/drm/gma500/oaktrail_device.c b/drivers/gpu/drm/gma500/oaktrail_device.c >> index ba30b43a3412..034553a524ac 100644 >> --- a/drivers/gpu/drm/gma500/oaktrail_device.c >> +++ b/drivers/gpu/drm/gma500/oaktrail_device.c >> @@ -155,7 +155,8 @@ static int oaktrail_backlight_init(struct drm_device *dev) >> props.type = BACKLIGHT_PLATFORM; >> >> oaktrail_backlight_device = backlight_device_register("oaktrail-bl", >> - NULL, (void *)dev, &oaktrail_ops, &props); >> + NULL, (void *)dev, &oaktrail_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> >> if (IS_ERR(oaktrail_backlight_device)) >> return PTR_ERR(oaktrail_backlight_device); >> diff --git a/drivers/gpu/drm/gma500/psb_device.c b/drivers/gpu/drm/gma500/psb_device.c >> index dc0f8527570c..0c1385d64839 100644 >> --- a/drivers/gpu/drm/gma500/psb_device.c >> +++ b/drivers/gpu/drm/gma500/psb_device.c >> @@ -131,7 +131,8 @@ static int psb_backlight_init(struct drm_device *dev) >> props.type = BACKLIGHT_PLATFORM; >> >> psb_backlight_device = backlight_device_register("psb-bl", >> - NULL, (void *)dev, &psb_ops, &props); >> + NULL, (void *)dev, &psb_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(psb_backlight_device)) >> return PTR_ERR(psb_backlight_device); >> >> diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c >> index 3c0b97f0bfae..acf6395b9f33 100644 >> --- a/drivers/gpu/drm/i915/intel_panel.c >> +++ b/drivers/gpu/drm/i915/intel_panel.c >> @@ -1201,7 +1201,8 @@ int intel_backlight_device_register(struct intel_connector *connector) >> backlight_device_register("intel_backlight", >> connector->base.kdev, >> connector, >> - &intel_backlight_device_ops, &props); >> + &intel_backlight_device_ops, &props, >> + 0); >> >> if (IS_ERR(panel->backlight.device)) { >> DRM_ERROR("Failed to register backlight: %ld\n", >> diff --git a/drivers/gpu/drm/nouveau/nouveau_backlight.c b/drivers/gpu/drm/nouveau/nouveau_backlight.c >> index f5101be806cb..5fd7e7498f13 100644 >> --- a/drivers/gpu/drm/nouveau/nouveau_backlight.c >> +++ b/drivers/gpu/drm/nouveau/nouveau_backlight.c >> @@ -82,7 +82,8 @@ nv40_backlight_init(struct drm_connector *connector) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = 31; >> bd = backlight_device_register("nv_backlight", connector->kdev, drm, >> - &nv40_bl_ops, &props); >> + &nv40_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> drm->backlight = bd; >> @@ -204,7 +205,8 @@ nv50_backlight_init(struct drm_connector *connector) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = 100; >> bd = backlight_device_register("nv_backlight", connector->kdev, >> - nv_encoder, ops, &props); >> + nv_encoder, ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> >> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c >> index 1b0cf2d8224b..10511bdd9936 100644 >> --- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c >> +++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c >> @@ -1260,7 +1260,8 @@ static int dsicm_probe(struct platform_device *pdev) >> >> props.type = BACKLIGHT_RAW; >> bldev = backlight_device_register(dev_name(dev), >> - dev, ddata, &dsicm_bl_ops, &props); >> + dev, ddata, &dsicm_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bldev)) { >> r = PTR_ERR(bldev); >> goto err_bl; >> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c >> index 157c512205d1..9f3622910511 100644 >> --- a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c >> +++ b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c >> @@ -817,7 +817,8 @@ static int acx565akm_probe(struct spi_device *spi) >> props.type = BACKLIGHT_RAW; >> >> bldev = backlight_device_register("acx565akm", &ddata->spi->dev, >> - ddata, &acx565akm_bl_ops, &props); >> + ddata, &acx565akm_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bldev)) { >> r = PTR_ERR(bldev); >> goto err_reg_bl; >> diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c >> index 587cae4e73c9..3676ba6e16ee 100644 >> --- a/drivers/gpu/drm/radeon/atombios_encoders.c >> +++ b/drivers/gpu/drm/radeon/atombios_encoders.c >> @@ -214,7 +214,8 @@ void radeon_atom_backlight_init(struct radeon_encoder *radeon_encoder, >> snprintf(bl_name, sizeof(bl_name), >> "radeon_bl%d", dev->primary->index); >> bd = backlight_device_register(bl_name, drm_connector->kdev, >> - pdata, &radeon_atom_backlight_ops, &props); >> + pdata, &radeon_atom_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> DRM_ERROR("Backlight registration failed\n"); >> goto error; >> diff --git a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c >> index 868c3ba2efaa..27908624c818 100644 >> --- a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c >> +++ b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c >> @@ -393,7 +393,8 @@ void radeon_legacy_backlight_init(struct radeon_encoder *radeon_encoder, >> snprintf(bl_name, sizeof(bl_name), >> "radeon_bl%d", dev->primary->index); >> bd = backlight_device_register(bl_name, drm_connector->kdev, >> - pdata, &radeon_backlight_ops, &props); >> + pdata, &radeon_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> DRM_ERROR("Backlight registration failed\n"); >> goto error; >> diff --git a/drivers/gpu/drm/shmobile/shmob_drm_backlight.c b/drivers/gpu/drm/shmobile/shmob_drm_backlight.c >> index 33dd41afea0e..1ff10faed3a7 100644 >> --- a/drivers/gpu/drm/shmobile/shmob_drm_backlight.c >> +++ b/drivers/gpu/drm/shmobile/shmob_drm_backlight.c >> @@ -68,7 +68,8 @@ int shmob_drm_backlight_init(struct shmob_drm_connector *scon) >> return 0; >> >> backlight = backlight_device_register(bdata->name, dev->dev, scon, >> - &shmob_drm_backlight_ops, NULL); >> + &shmob_drm_backlight_ops, NULL, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(backlight)) { >> dev_err(dev->dev, "unable to register backlight device: %ld\n", >> PTR_ERR(backlight)); >> diff --git a/drivers/hid/hid-picolcd_backlight.c b/drivers/hid/hid-picolcd_backlight.c >> index 808807ad388f..06597f50c32b 100644 >> --- a/drivers/hid/hid-picolcd_backlight.c >> +++ b/drivers/hid/hid-picolcd_backlight.c >> @@ -77,7 +77,8 @@ int picolcd_init_backlight(struct picolcd_data *data, struct hid_report *report) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = 0xff; >> bdev = backlight_device_register(dev_name(dev), dev, data, >> - &picolcd_blops, &props); >> + &picolcd_blops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bdev)) { >> dev_err(dev, "failed to register backlight\n"); >> return PTR_ERR(bdev); >> diff --git a/drivers/macintosh/via-pmu-backlight.c b/drivers/macintosh/via-pmu-backlight.c >> index 6f68537c93ce..da0fb2e87f75 100644 >> --- a/drivers/macintosh/via-pmu-backlight.c >> +++ b/drivers/macintosh/via-pmu-backlight.c >> @@ -160,7 +160,8 @@ void __init pmu_backlight_init() >> props.type = BACKLIGHT_PLATFORM; >> props.max_brightness = FB_BACKLIGHT_LEVELS - 1; >> bd = backlight_device_register(name, NULL, NULL, &pmu_backlight_data, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> printk(KERN_ERR "PMU Backlight registration failed\n"); >> return; >> diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c >> index 79d64ea00bfb..0b17c5146175 100644 >> --- a/drivers/platform/x86/acer-wmi.c >> +++ b/drivers/platform/x86/acer-wmi.c >> @@ -1419,7 +1419,8 @@ static int acer_backlight_init(struct device *dev) >> props.type = BACKLIGHT_PLATFORM; >> props.max_brightness = max_brightness; >> bd = backlight_device_register("acer-wmi", dev, NULL, &acer_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> pr_err("Could not register Acer backlight device\n"); >> acer_backlight_device = NULL; >> diff --git a/drivers/platform/x86/apple-gmux.c b/drivers/platform/x86/apple-gmux.c >> index 4034d2d4c507..e041bbe14df5 100644 >> --- a/drivers/platform/x86/apple-gmux.c >> +++ b/drivers/platform/x86/apple-gmux.c >> @@ -698,7 +698,8 @@ static int gmux_probe(struct pnp_dev *pnp, const struct pnp_device_id *id) >> props.max_brightness = GMUX_MAX_BRIGHTNESS; >> >> bdev = backlight_device_register("gmux_backlight", &pnp->dev, >> - gmux_data, &gmux_bl_ops, &props); >> + gmux_data, &gmux_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bdev)) { >> ret = PTR_ERR(bdev); >> goto err_release; >> diff --git a/drivers/platform/x86/asus-laptop.c b/drivers/platform/x86/asus-laptop.c >> index 15f131146501..98f26cff9c96 100644 >> --- a/drivers/platform/x86/asus-laptop.c >> +++ b/drivers/platform/x86/asus-laptop.c >> @@ -831,7 +831,8 @@ static int asus_backlight_init(struct asus_laptop *asus) >> >> bd = backlight_device_register(ASUS_LAPTOP_FILE, >> &asus->platform_device->dev, asus, >> - &asusbl_ops, &props); >> + &asusbl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> pr_err("Could not register asus backlight device\n"); >> asus->backlight_device = NULL; >> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c >> index a26dca3640ea..ca897bc94626 100644 >> --- a/drivers/platform/x86/asus-wmi.c >> +++ b/drivers/platform/x86/asus-wmi.c >> @@ -1565,7 +1565,8 @@ static int asus_wmi_backlight_init(struct asus_wmi *asus) >> props.max_brightness = max; >> bd = backlight_device_register(asus->driver->name, >> &asus->platform_device->dev, asus, >> - &asus_wmi_bl_ops, &props); >> + &asus_wmi_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> pr_err("Could not register backlight device\n"); >> return PTR_ERR(bd); >> diff --git a/drivers/platform/x86/classmate-laptop.c b/drivers/platform/x86/classmate-laptop.c >> index 55cf10bc7817..60cf7a0c7170 100644 >> --- a/drivers/platform/x86/classmate-laptop.c >> +++ b/drivers/platform/x86/classmate-laptop.c >> @@ -970,7 +970,8 @@ static int cmpc_ipml_add(struct acpi_device *acpi) >> props.max_brightness = 7; >> ipml->bd = backlight_device_register("cmpc_bl", &acpi->dev, >> acpi->handle, &cmpc_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(ipml->bd)) { >> retval = PTR_ERR(ipml->bd); >> goto out_bd; >> diff --git a/drivers/platform/x86/compal-laptop.c b/drivers/platform/x86/compal-laptop.c >> index e1c2b6d4b24a..9a675d3b6fe5 100644 >> --- a/drivers/platform/x86/compal-laptop.c >> +++ b/drivers/platform/x86/compal-laptop.c >> @@ -1008,7 +1008,8 @@ static int __init compal_init(void) >> compalbl_device = backlight_device_register(DRIVER_NAME, >> NULL, NULL, >> &compalbl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(compalbl_device)) >> return PTR_ERR(compalbl_device); >> } >> diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c >> index 2c2f02b2e08a..57712a970f8d 100644 >> --- a/drivers/platform/x86/dell-laptop.c >> +++ b/drivers/platform/x86/dell-laptop.c >> @@ -2035,7 +2035,8 @@ static int __init dell_init(void) >> &platform_device->dev, >> NULL, >> &dell_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> >> if (IS_ERR(dell_backlight_device)) { >> ret = PTR_ERR(dell_backlight_device); >> diff --git a/drivers/platform/x86/eeepc-laptop.c b/drivers/platform/x86/eeepc-laptop.c >> index 8cdf315f9730..da8ada2ba429 100644 >> --- a/drivers/platform/x86/eeepc-laptop.c >> +++ b/drivers/platform/x86/eeepc-laptop.c >> @@ -1159,7 +1159,8 @@ static int eeepc_backlight_init(struct eeepc_laptop *eeepc) >> props.max_brightness = 15; >> bd = backlight_device_register(EEEPC_LAPTOP_FILE, >> &eeepc->platform_device->dev, eeepc, >> - &eeepcbl_ops, &props); >> + &eeepcbl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> pr_err("Could not register eeepc backlight device\n"); >> eeepc->backlight_device = NULL; >> diff --git a/drivers/platform/x86/fujitsu-laptop.c b/drivers/platform/x86/fujitsu-laptop.c >> index ce41bc34288d..b54e7ea2e968 100644 >> --- a/drivers/platform/x86/fujitsu-laptop.c >> +++ b/drivers/platform/x86/fujitsu-laptop.c >> @@ -1167,7 +1167,8 @@ static int __init fujitsu_init(void) >> fujitsu->bl_device = backlight_device_register("fujitsu-laptop", >> NULL, NULL, >> &fujitsubl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(fujitsu->bl_device)) { >> ret = PTR_ERR(fujitsu->bl_device); >> fujitsu->bl_device = NULL; >> diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c >> index d1a091b93192..99de02efd971 100644 >> --- a/drivers/platform/x86/ideapad-laptop.c >> +++ b/drivers/platform/x86/ideapad-laptop.c >> @@ -726,7 +726,8 @@ static int ideapad_backlight_init(struct ideapad_private *priv) >> &priv->platform_device->dev, >> priv, >> &ideapad_backlight_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(blightdev)) { >> pr_err("Could not register backlight device\n"); >> return PTR_ERR(blightdev); >> diff --git a/drivers/platform/x86/intel_oaktrail.c b/drivers/platform/x86/intel_oaktrail.c >> index 6aa33c4a809f..303e8e27a0b9 100644 >> --- a/drivers/platform/x86/intel_oaktrail.c >> +++ b/drivers/platform/x86/intel_oaktrail.c >> @@ -253,7 +253,8 @@ static int oaktrail_backlight_init(void) >> bd = backlight_device_register(DRIVER_NAME, >> &oaktrail_device->dev, NULL, >> &oaktrail_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> >> if (IS_ERR(bd)) { >> oaktrail_bl_device = NULL; >> diff --git a/drivers/platform/x86/msi-laptop.c b/drivers/platform/x86/msi-laptop.c >> index 42317704629d..81990bdab229 100644 >> --- a/drivers/platform/x86/msi-laptop.c >> +++ b/drivers/platform/x86/msi-laptop.c >> @@ -1078,7 +1078,8 @@ static int __init msi_init(void) >> props.max_brightness = MSI_LCD_LEVEL_MAX - 1; >> msibl_device = backlight_device_register("msi-laptop-bl", NULL, >> NULL, &msibl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(msibl_device)) >> return PTR_ERR(msibl_device); >> } >> diff --git a/drivers/platform/x86/msi-wmi.c b/drivers/platform/x86/msi-wmi.c >> index 978e6d640572..5174572a7859 100644 >> --- a/drivers/platform/x86/msi-wmi.c >> +++ b/drivers/platform/x86/msi-wmi.c >> @@ -247,7 +247,8 @@ static int __init msi_wmi_backlight_setup(void) >> props.max_brightness = ARRAY_SIZE(backlight_map) - 1; >> backlight = backlight_device_register(DRV_NAME, NULL, NULL, >> &msi_backlight_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(backlight)) >> return PTR_ERR(backlight); >> >> diff --git a/drivers/platform/x86/panasonic-laptop.c b/drivers/platform/x86/panasonic-laptop.c >> index 3f870972247c..00679814d8c3 100644 >> --- a/drivers/platform/x86/panasonic-laptop.c >> +++ b/drivers/platform/x86/panasonic-laptop.c >> @@ -618,7 +618,8 @@ static int acpi_pcc_hotkey_add(struct acpi_device *device) >> props.type = BACKLIGHT_PLATFORM; >> props.max_brightness = pcc->sinf[SINF_AC_MAX_BRIGHT]; >> pcc->backlight = backlight_device_register("panasonic", NULL, pcc, >> - &pcc_backlight_ops, &props); >> + &pcc_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(pcc->backlight)) { >> result = PTR_ERR(pcc->backlight); >> goto out_input; >> diff --git a/drivers/platform/x86/samsung-laptop.c b/drivers/platform/x86/samsung-laptop.c >> index 8c146e2b6727..09868706dfd6 100644 >> --- a/drivers/platform/x86/samsung-laptop.c >> +++ b/drivers/platform/x86/samsung-laptop.c >> @@ -1200,7 +1200,8 @@ static int __init samsung_backlight_init(struct samsung_laptop *samsung) >> bd = backlight_device_register("samsung", >> &samsung->platform_device->dev, >> samsung, &backlight_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> >> diff --git a/drivers/platform/x86/samsung-q10.c b/drivers/platform/x86/samsung-q10.c >> index e6aac725a0af..cc25d0416236 100644 >> --- a/drivers/platform/x86/samsung-q10.c >> +++ b/drivers/platform/x86/samsung-q10.c >> @@ -60,7 +60,8 @@ static int samsungq10_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_PLATFORM; >> props.max_brightness = SAMSUNGQ10_BL_MAX_INTENSITY; >> bd = backlight_device_register("samsung", &pdev->dev, NULL, >> - &samsungq10_bl_ops, &props); >> + &samsungq10_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> >> diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c >> index 1dba3598cfcb..a20f30621e5f 100644 >> --- a/drivers/platform/x86/sony-laptop.c >> +++ b/drivers/platform/x86/sony-laptop.c >> @@ -3158,7 +3158,8 @@ static void sony_nc_backlight_setup(void) >> props.max_brightness = max_brightness; >> sony_bl_props.dev = backlight_device_register("sony", NULL, >> &sony_bl_props, >> - ops, &props); >> + ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> >> if (IS_ERR(sony_bl_props.dev)) { >> pr_warn("unable to register backlight device\n"); >> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c >> index b65ce7519411..987ef89b11da 100644 >> --- a/drivers/platform/x86/thinkpad_acpi.c >> +++ b/drivers/platform/x86/thinkpad_acpi.c >> @@ -6821,7 +6821,8 @@ static int __init brightness_init(struct ibm_init_struct *iibm) >> ibm_backlight_device = backlight_device_register(TPACPI_BACKLIGHT_DEV_NAME, >> NULL, NULL, >> &ibm_backlight_data, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(ibm_backlight_device)) { >> int rc = PTR_ERR(ibm_backlight_device); >> ibm_backlight_device = NULL; >> diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c >> index 01e12d221a8b..6b0f23360094 100644 >> --- a/drivers/platform/x86/toshiba_acpi.c >> +++ b/drivers/platform/x86/toshiba_acpi.c >> @@ -2840,7 +2840,8 @@ static int toshiba_acpi_setup_backlight(struct toshiba_acpi_dev *dev) >> &dev->acpi_dev->dev, >> dev, >> &toshiba_backlight_data, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(dev->backlight_dev)) { >> ret = PTR_ERR(dev->backlight_dev); >> pr_err("Could not register toshiba backlight device\n"); >> diff --git a/drivers/staging/fbtft/fb_ssd1351.c b/drivers/staging/fbtft/fb_ssd1351.c >> index cef33e439f46..6a194faf6448 100644 >> --- a/drivers/staging/fbtft/fb_ssd1351.c >> +++ b/drivers/staging/fbtft/fb_ssd1351.c >> @@ -210,7 +210,8 @@ static void register_onboard_backlight(struct fbtft_par *par) >> bl_props.power = FB_BLANK_POWERDOWN; >> >> bd = backlight_device_register(dev_driver_string(par->info->device), >> - par->info->device, par, &bl_ops, &bl_props); >> + par->info->device, par, &bl_ops, &bl_props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> dev_err(par->info->device, >> "cannot register backlight device (%ld)\n", >> diff --git a/drivers/staging/fbtft/fb_watterott.c b/drivers/staging/fbtft/fb_watterott.c >> index f8cb610a7b69..b24913688014 100644 >> --- a/drivers/staging/fbtft/fb_watterott.c >> +++ b/drivers/staging/fbtft/fb_watterott.c >> @@ -259,7 +259,8 @@ static void register_chip_backlight(struct fbtft_par *par) >> bl_props.brightness = DEFAULT_BRIGHTNESS; >> >> bd = backlight_device_register(dev_driver_string(par->info->device), >> - par->info->device, par, &bl_ops, &bl_props); >> + par->info->device, par, &bl_ops, &bl_props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> dev_err(par->info->device, >> "cannot register backlight device (%ld)\n", >> diff --git a/drivers/staging/fbtft/fbtft-core.c b/drivers/staging/fbtft/fbtft-core.c >> index 0c1a77cafe14..61c67b079b90 100644 >> --- a/drivers/staging/fbtft/fbtft-core.c >> +++ b/drivers/staging/fbtft/fbtft-core.c >> @@ -299,7 +299,8 @@ void fbtft_register_backlight(struct fbtft_par *par) >> bl_props.state |= BL_CORE_DRIVER1; >> >> bd = backlight_device_register(dev_driver_string(par->info->device), >> - par->info->device, par, &fbtft_bl_ops, &bl_props); >> + par->info->device, par, &fbtft_bl_ops, &bl_props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> dev_err(par->info->device, >> "cannot register backlight device (%ld)\n", >> diff --git a/drivers/staging/olpc_dcon/olpc_dcon.c b/drivers/staging/olpc_dcon/olpc_dcon.c >> index f45b2ef05f48..385c7adeaa26 100644 >> --- a/drivers/staging/olpc_dcon/olpc_dcon.c >> +++ b/drivers/staging/olpc_dcon/olpc_dcon.c >> @@ -643,7 +643,8 @@ static int dcon_probe(struct i2c_client *client, const struct i2c_device_id *id) >> /* Add the backlight device for the DCON */ >> dcon_bl_props.brightness = dcon->bl_val; >> dcon->bl_dev = backlight_device_register("dcon-bl", &dcon_device->dev, >> - dcon, &dcon_bl_ops, &dcon_bl_props); >> + dcon, &dcon_bl_ops, &dcon_bl_props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(dcon->bl_dev)) { >> dev_err(&client->dev, "cannot register backlight dev (%ld)\n", >> PTR_ERR(dcon->bl_dev)); >> diff --git a/drivers/usb/misc/appledisplay.c b/drivers/usb/misc/appledisplay.c >> index a0a3827b4aff..97c0829711a8 100644 >> --- a/drivers/usb/misc/appledisplay.c >> +++ b/drivers/usb/misc/appledisplay.c >> @@ -293,7 +293,8 @@ static int appledisplay_probe(struct usb_interface *iface, >> props.type = BACKLIGHT_RAW; >> props.max_brightness = 0xff; >> pdata->bd = backlight_device_register(bl_name, NULL, pdata, >> - &appledisplay_bl_data, &props); >> + &appledisplay_bl_data, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(pdata->bd)) { >> dev_err(&iface->dev, "Backlight registration failed\n"); >> retval = PTR_ERR(pdata->bd); >> diff --git a/drivers/video/backlight/88pm860x_bl.c b/drivers/video/backlight/88pm860x_bl.c >> index 6d8dc2c77520..e0d8212aebc0 100644 >> --- a/drivers/video/backlight/88pm860x_bl.c >> +++ b/drivers/video/backlight/88pm860x_bl.c >> @@ -242,7 +242,8 @@ static int pm860x_backlight_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = MAX_BRIGHTNESS; >> bl = devm_backlight_device_register(&pdev->dev, name, &pdev->dev, data, >> - &pm860x_backlight_ops, &props); >> + &pm860x_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/aat2870_bl.c b/drivers/video/backlight/aat2870_bl.c >> index 50774e657700..a4cbc33bd6c2 100644 >> --- a/drivers/video/backlight/aat2870_bl.c >> +++ b/drivers/video/backlight/aat2870_bl.c >> @@ -152,7 +152,8 @@ static int aat2870_bl_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> bd = devm_backlight_device_register(&pdev->dev, "aat2870-backlight", >> &pdev->dev, aat2870_bl, &aat2870_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> dev_err(&pdev->dev, >> "Failed allocate memory for backlight device\n"); >> diff --git a/drivers/video/backlight/adp5520_bl.c b/drivers/video/backlight/adp5520_bl.c >> index dd88ba1d71ce..03093fbee414 100644 >> --- a/drivers/video/backlight/adp5520_bl.c >> +++ b/drivers/video/backlight/adp5520_bl.c >> @@ -315,7 +315,8 @@ static int adp5520_bl_probe(struct platform_device *pdev) >> props.max_brightness = ADP5020_MAX_BRIGHTNESS; >> bl = devm_backlight_device_register(&pdev->dev, pdev->name, >> data->master, data, &adp5520_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/adp8860_bl.c b/drivers/video/backlight/adp8860_bl.c >> index 510e559c060e..88982ed257d9 100644 >> --- a/drivers/video/backlight/adp8860_bl.c >> +++ b/drivers/video/backlight/adp8860_bl.c >> @@ -718,7 +718,8 @@ static int adp8860_probe(struct i2c_client *client, >> >> bl = devm_backlight_device_register(&client->dev, >> dev_driver_string(&client->dev), >> - &client->dev, data, &adp8860_bl_ops, &props); >> + &client->dev, data, &adp8860_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&client->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/adp8870_bl.c b/drivers/video/backlight/adp8870_bl.c >> index 21acac90fd77..5284f7f3cdd3 100644 >> --- a/drivers/video/backlight/adp8870_bl.c >> +++ b/drivers/video/backlight/adp8870_bl.c >> @@ -894,7 +894,8 @@ static int adp8870_probe(struct i2c_client *client, >> props.max_brightness = props.brightness = ADP8870_MAX_BRIGHTNESS; >> bl = devm_backlight_device_register(&client->dev, >> dev_driver_string(&client->dev), >> - &client->dev, data, &adp8870_bl_ops, &props); >> + &client->dev, data, &adp8870_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&client->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/ams369fg06.c b/drivers/video/backlight/ams369fg06.c >> index 5cca8ce45d4d..1bd656141c1e 100644 >> --- a/drivers/video/backlight/ams369fg06.c >> +++ b/drivers/video/backlight/ams369fg06.c >> @@ -484,7 +484,8 @@ static int ams369fg06_probe(struct spi_device *spi) >> >> bd = devm_backlight_device_register(&spi->dev, "ams369fg06-bl", >> &spi->dev, lcd, >> - &ams369fg06_backlight_ops, &props); >> + &ams369fg06_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> >> diff --git a/drivers/video/backlight/apple_bl.c b/drivers/video/backlight/apple_bl.c >> index d84329676689..ee2e92d58512 100644 >> --- a/drivers/video/backlight/apple_bl.c >> +++ b/drivers/video/backlight/apple_bl.c >> @@ -182,7 +182,8 @@ static int apple_bl_add(struct acpi_device *dev) >> props.type = BACKLIGHT_PLATFORM; >> props.max_brightness = 15; >> apple_backlight_device = backlight_device_register("apple_backlight", >> - NULL, NULL, &hw_data->backlight_ops, &props); >> + NULL, NULL, &hw_data->backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> >> if (IS_ERR(apple_backlight_device)) { >> release_region(hw_data->iostart, hw_data->iolen); >> diff --git a/drivers/video/backlight/as3711_bl.c b/drivers/video/backlight/as3711_bl.c >> index 734a9158946b..5f3a40bc8a85 100644 >> --- a/drivers/video/backlight/as3711_bl.c >> +++ b/drivers/video/backlight/as3711_bl.c >> @@ -244,7 +244,8 @@ static int as3711_bl_register(struct platform_device *pdev, >> su->type == AS3711_BL_SU1 ? >> "as3711-su1" : "as3711-su2", >> &pdev->dev, su, >> - &as3711_bl_ops, &props); >> + &as3711_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c >> index 288318ad21dd..1a25273576e8 100644 >> --- a/drivers/video/backlight/backlight.c >> +++ b/drivers/video/backlight/backlight.c >> @@ -319,13 +319,15 @@ EXPORT_SYMBOL(backlight_force_update); >> * @devdata: an optional pointer to be stored for private driver use. The >> * methods may retrieve it by using bl_get_data(bd). >> * @ops: the backlight operations structure. >> + * @flags: bitmask to control backlight registration >> * >> * Creates and registers new backlight device. Returns either an >> * ERR_PTR() or a pointer to the newly allocated device. >> */ >> struct backlight_device *backlight_device_register(const char *name, >> struct device *parent, void *devdata, const struct backlight_ops *ops, >> - const struct backlight_properties *props) >> + const struct backlight_properties *props, >> + unsigned long flags) >> { >> struct backlight_device *new_bd; >> int rc; >> @@ -363,10 +365,12 @@ struct backlight_device *backlight_device_register(const char *name, >> return ERR_PTR(rc); >> } >> >> - rc = backlight_register_fb(new_bd); >> - if (rc) { >> - device_unregister(&new_bd->dev); >> - return ERR_PTR(rc); >> + if (flags & BACKLIGHT_REGISTER_FB_CLIENT) { >> + rc = backlight_register_fb(new_bd); >> + if (rc) { >> + device_unregister(&new_bd->dev); >> + return ERR_PTR(rc); >> + } >> } >> >> new_bd->ops = ops; >> @@ -494,6 +498,7 @@ EXPORT_SYMBOL(backlight_unregister_notifier); >> * @devdata: an optional pointer to be stored for private driver use >> * @ops: the backlight operations structure >> * @props: the backlight properties >> + * @flags: bitmask to control backlight registration >> * >> * @return a struct backlight on success, or an ERR_PTR on error >> * >> @@ -504,7 +509,8 @@ EXPORT_SYMBOL(backlight_unregister_notifier); >> struct backlight_device *devm_backlight_device_register(struct device *dev, >> const char *name, struct device *parent, void *devdata, >> const struct backlight_ops *ops, >> - const struct backlight_properties *props) >> + const struct backlight_properties *props, >> + unsigned long flags) >> { >> struct backlight_device **ptr, *backlight; >> >> @@ -514,7 +520,7 @@ struct backlight_device *devm_backlight_device_register(struct device *dev, >> return ERR_PTR(-ENOMEM); >> >> backlight = backlight_device_register(name, parent, devdata, ops, >> - props); >> + props, flags); >> if (!IS_ERR(backlight)) { >> *ptr = backlight; >> devres_add(dev, ptr); >> diff --git a/drivers/video/backlight/bd6107.c b/drivers/video/backlight/bd6107.c >> index fdb2f7e2c6b5..a8ecd7a2f2a4 100644 >> --- a/drivers/video/backlight/bd6107.c >> +++ b/drivers/video/backlight/bd6107.c >> @@ -163,7 +163,8 @@ static int bd6107_probe(struct i2c_client *client, >> backlight = devm_backlight_device_register(&client->dev, >> dev_name(&client->dev), >> &bd->client->dev, bd, >> - &bd6107_backlight_ops, &props); >> + &bd6107_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(backlight)) { >> dev_err(&client->dev, "failed to register backlight\n"); >> return PTR_ERR(backlight); >> diff --git a/drivers/video/backlight/corgi_lcd.c b/drivers/video/backlight/corgi_lcd.c >> index d7c239ea3d09..006e171256a0 100644 >> --- a/drivers/video/backlight/corgi_lcd.c >> +++ b/drivers/video/backlight/corgi_lcd.c >> @@ -562,7 +562,8 @@ static int corgi_lcd_probe(struct spi_device *spi) >> props.max_brightness = pdata->max_intensity; >> lcd->bl_dev = devm_backlight_device_register(&spi->dev, "corgi_bl", >> &spi->dev, lcd, &corgi_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(lcd->bl_dev)) >> return PTR_ERR(lcd->bl_dev); >> >> diff --git a/drivers/video/backlight/cr_bllcd.c b/drivers/video/backlight/cr_bllcd.c >> index 3e3880fc8c8e..cf7c5d35dd63 100644 >> --- a/drivers/video/backlight/cr_bllcd.c >> +++ b/drivers/video/backlight/cr_bllcd.c >> @@ -197,7 +197,8 @@ static int cr_backlight_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> bdp = devm_backlight_device_register(&pdev->dev, "cr-backlight", >> &pdev->dev, NULL, &cr_backlight_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bdp)) { >> pci_dev_put(lpc_dev); >> return PTR_ERR(bdp); >> diff --git a/drivers/video/backlight/da903x_bl.c b/drivers/video/backlight/da903x_bl.c >> index f793738f06fb..d6019aebfa42 100644 >> --- a/drivers/video/backlight/da903x_bl.c >> +++ b/drivers/video/backlight/da903x_bl.c >> @@ -146,7 +146,8 @@ static int da903x_backlight_probe(struct platform_device *pdev) >> props.max_brightness = max_brightness; >> bl = devm_backlight_device_register(&pdev->dev, pdev->name, >> data->da903x_dev, data, >> - &da903x_backlight_ops, &props); >> + &da903x_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/da9052_bl.c b/drivers/video/backlight/da9052_bl.c >> index fd2be417aa64..96738c2e8a09 100644 >> --- a/drivers/video/backlight/da9052_bl.c >> +++ b/drivers/video/backlight/da9052_bl.c >> @@ -127,7 +127,8 @@ static int da9052_backlight_probe(struct platform_device *pdev) >> >> bl = devm_backlight_device_register(&pdev->dev, pdev->name, >> wleds->da9052->dev, wleds, >> - &da9052_backlight_ops, &props); >> + &da9052_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "Failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/ep93xx_bl.c b/drivers/video/backlight/ep93xx_bl.c >> index 0067931821c6..7fe2549969a1 100644 >> --- a/drivers/video/backlight/ep93xx_bl.c >> +++ b/drivers/video/backlight/ep93xx_bl.c >> @@ -93,7 +93,8 @@ static int ep93xxbl_probe(struct platform_device *dev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = EP93XX_MAX_BRIGHT; >> bl = devm_backlight_device_register(&dev->dev, dev->name, &dev->dev, >> - ep93xxbl, &ep93xxbl_ops, &props); >> + ep93xxbl, &ep93xxbl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) >> return PTR_ERR(bl); >> >> diff --git a/drivers/video/backlight/generic_bl.c b/drivers/video/backlight/generic_bl.c >> index 67dfb939a514..717318e12f87 100644 >> --- a/drivers/video/backlight/generic_bl.c >> +++ b/drivers/video/backlight/generic_bl.c >> @@ -76,7 +76,8 @@ static int genericbl_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = machinfo->max_intensity; >> bd = devm_backlight_device_register(&pdev->dev, name, &pdev->dev, >> - NULL, &genericbl_ops, &props); >> + NULL, &genericbl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> >> diff --git a/drivers/video/backlight/gpio_backlight.c b/drivers/video/backlight/gpio_backlight.c >> index 18134416b154..d0b6f5155f86 100644 >> --- a/drivers/video/backlight/gpio_backlight.c >> +++ b/drivers/video/backlight/gpio_backlight.c >> @@ -132,7 +132,8 @@ static int gpio_backlight_probe(struct platform_device *pdev) >> props.max_brightness = 1; >> bl = devm_backlight_device_register(&pdev->dev, dev_name(&pdev->dev), >> &pdev->dev, gbl, &gpio_backlight_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/hp680_bl.c b/drivers/video/backlight/hp680_bl.c >> index 8ea42b8d9bc8..a75b2d0d489a 100644 >> --- a/drivers/video/backlight/hp680_bl.c >> +++ b/drivers/video/backlight/hp680_bl.c >> @@ -111,7 +111,8 @@ static int hp680bl_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = HP680_MAX_INTENSITY; >> bd = devm_backlight_device_register(&pdev->dev, "hp680-bl", &pdev->dev, >> - NULL, &hp680bl_ops, &props); >> + NULL, &hp680bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> >> diff --git a/drivers/video/backlight/ipaq_micro_bl.c b/drivers/video/backlight/ipaq_micro_bl.c >> index 347dc11d4ceb..834ccc8a7291 100644 >> --- a/drivers/video/backlight/ipaq_micro_bl.c >> +++ b/drivers/video/backlight/ipaq_micro_bl.c >> @@ -60,7 +60,8 @@ static int micro_backlight_probe(struct platform_device *pdev) >> >> bd = devm_backlight_device_register(&pdev->dev, "ipaq-micro-backlight", >> &pdev->dev, micro, µ_bl_ops, >> - µ_bl_props); >> + µ_bl_props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> >> diff --git a/drivers/video/backlight/jornada720_bl.c b/drivers/video/backlight/jornada720_bl.c >> index 7e6ff5346892..e173c5b60e9e 100644 >> --- a/drivers/video/backlight/jornada720_bl.c >> +++ b/drivers/video/backlight/jornada720_bl.c >> @@ -118,7 +118,8 @@ static int jornada_bl_probe(struct platform_device *pdev) >> >> bd = devm_backlight_device_register(&pdev->dev, S1D_DEVICENAME, >> &pdev->dev, NULL, &jornada_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> ret = PTR_ERR(bd); >> dev_err(&pdev->dev, "failed to register device, err=%x\n", ret); >> diff --git a/drivers/video/backlight/kb3886_bl.c b/drivers/video/backlight/kb3886_bl.c >> index 84a110a719cb..eb619c4a7a39 100644 >> --- a/drivers/video/backlight/kb3886_bl.c >> +++ b/drivers/video/backlight/kb3886_bl.c >> @@ -153,7 +153,8 @@ static int kb3886bl_probe(struct platform_device *pdev) >> kb3886_backlight_device = devm_backlight_device_register(&pdev->dev, >> "kb3886-bl", &pdev->dev, >> NULL, &kb3886bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(kb3886_backlight_device)) >> return PTR_ERR(kb3886_backlight_device); >> >> diff --git a/drivers/video/backlight/ld9040.c b/drivers/video/backlight/ld9040.c >> index 677f8abba27c..c28e91fec54f 100644 >> --- a/drivers/video/backlight/ld9040.c >> +++ b/drivers/video/backlight/ld9040.c >> @@ -722,7 +722,8 @@ static int ld9040_probe(struct spi_device *spi) >> props.max_brightness = MAX_BRIGHTNESS; >> >> bd = devm_backlight_device_register(&spi->dev, "ld9040-bl", &spi->dev, >> - lcd, &ld9040_backlight_ops, &props); >> + lcd, &ld9040_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> >> diff --git a/drivers/video/backlight/lm3533_bl.c b/drivers/video/backlight/lm3533_bl.c >> index 0e2337f367b6..f6345a2cd076 100644 >> --- a/drivers/video/backlight/lm3533_bl.c >> +++ b/drivers/video/backlight/lm3533_bl.c >> @@ -312,7 +312,8 @@ static int lm3533_bl_probe(struct platform_device *pdev) >> props.brightness = pdata->default_brightness; >> bd = devm_backlight_device_register(&pdev->dev, pdata->name, >> pdev->dev.parent, bl, &lm3533_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> dev_err(&pdev->dev, "failed to register backlight device\n"); >> return PTR_ERR(bd); >> diff --git a/drivers/video/backlight/lm3630a_bl.c b/drivers/video/backlight/lm3630a_bl.c >> index 60d6c2ac87aa..a62a09510fe3 100644 >> --- a/drivers/video/backlight/lm3630a_bl.c >> +++ b/drivers/video/backlight/lm3630a_bl.c >> @@ -338,7 +338,8 @@ static int lm3630a_backlight_register(struct lm3630a_chip *pchip) >> pchip->bleda = >> devm_backlight_device_register(pchip->dev, "lm3630a_leda", >> pchip->dev, pchip, >> - &lm3630a_bank_a_ops, &props); >> + &lm3630a_bank_a_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(pchip->bleda)) >> return PTR_ERR(pchip->bleda); >> } >> @@ -350,7 +351,8 @@ static int lm3630a_backlight_register(struct lm3630a_chip *pchip) >> pchip->bledb = >> devm_backlight_device_register(pchip->dev, "lm3630a_ledb", >> pchip->dev, pchip, >> - &lm3630a_bank_b_ops, &props); >> + &lm3630a_bank_b_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(pchip->bledb)) >> return PTR_ERR(pchip->bledb); >> } >> diff --git a/drivers/video/backlight/lm3639_bl.c b/drivers/video/backlight/lm3639_bl.c >> index cd50df5807ea..4aaf0c3f9eee 100644 >> --- a/drivers/video/backlight/lm3639_bl.c >> +++ b/drivers/video/backlight/lm3639_bl.c >> @@ -349,7 +349,8 @@ static int lm3639_probe(struct i2c_client *client, >> pchip->bled = >> devm_backlight_device_register(pchip->dev, "lm3639_bled", >> pchip->dev, pchip, &lm3639_bled_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(pchip->bled)) { >> dev_err(&client->dev, "fail : backlight register\n"); >> ret = PTR_ERR(pchip->bled); >> diff --git a/drivers/video/backlight/locomolcd.c b/drivers/video/backlight/locomolcd.c >> index 6c3ec4259a60..126a4df5fd12 100644 >> --- a/drivers/video/backlight/locomolcd.c >> +++ b/drivers/video/backlight/locomolcd.c >> @@ -200,7 +200,8 @@ static int locomolcd_probe(struct locomo_dev *ldev) >> props.max_brightness = 4; >> locomolcd_bl_device = backlight_device_register("locomo-bl", >> &ldev->dev, NULL, >> - &locomobl_data, &props); >> + &locomobl_data, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> >> if (IS_ERR(locomolcd_bl_device)) >> return PTR_ERR(locomolcd_bl_device); >> diff --git a/drivers/video/backlight/lp855x_bl.c b/drivers/video/backlight/lp855x_bl.c >> index e5b14f52628f..6ef51c6540a6 100644 >> --- a/drivers/video/backlight/lp855x_bl.c >> +++ b/drivers/video/backlight/lp855x_bl.c >> @@ -299,7 +299,8 @@ static int lp855x_backlight_register(struct lp855x *lp) >> props.brightness = pdata->initial_brightness; >> >> bl = devm_backlight_device_register(lp->dev, name, lp->dev, lp, >> - &lp855x_bl_ops, &props); >> + &lp855x_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) >> return PTR_ERR(bl); >> >> diff --git a/drivers/video/backlight/lp8788_bl.c b/drivers/video/backlight/lp8788_bl.c >> index cf869ec90cce..734677bef739 100644 >> --- a/drivers/video/backlight/lp8788_bl.c >> +++ b/drivers/video/backlight/lp8788_bl.c >> @@ -214,7 +214,8 @@ static int lp8788_backlight_register(struct lp8788_bl *bl) >> name = pdata->name; >> >> bl_dev = backlight_device_register(name, bl->lp->dev, bl, >> - &lp8788_bl_ops, &props); >> + &lp8788_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl_dev)) >> return PTR_ERR(bl_dev); >> >> diff --git a/drivers/video/backlight/lv5207lp.c b/drivers/video/backlight/lv5207lp.c >> index 8ab7297b118a..ebd41edcd936 100644 >> --- a/drivers/video/backlight/lv5207lp.c >> +++ b/drivers/video/backlight/lv5207lp.c >> @@ -120,7 +120,8 @@ static int lv5207lp_probe(struct i2c_client *client, >> >> backlight = devm_backlight_device_register(&client->dev, >> dev_name(&client->dev), &lv->client->dev, >> - lv, &lv5207lp_backlight_ops, &props); >> + lv, &lv5207lp_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(backlight)) { >> dev_err(&client->dev, "failed to register backlight\n"); >> return PTR_ERR(backlight); >> diff --git a/drivers/video/backlight/max8925_bl.c b/drivers/video/backlight/max8925_bl.c >> index 7b738d60ecc2..aa1d39ab9977 100644 >> --- a/drivers/video/backlight/max8925_bl.c >> +++ b/drivers/video/backlight/max8925_bl.c >> @@ -165,7 +165,8 @@ static int max8925_backlight_probe(struct platform_device *pdev) >> props.max_brightness = MAX_BRIGHTNESS; >> bl = devm_backlight_device_register(&pdev->dev, "max8925-backlight", >> &pdev->dev, data, >> - &max8925_backlight_ops, &props); >> + &max8925_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/omap1_bl.c b/drivers/video/backlight/omap1_bl.c >> index 546d94df21d5..c587a4ec89a2 100644 >> --- a/drivers/video/backlight/omap1_bl.c >> +++ b/drivers/video/backlight/omap1_bl.c >> @@ -148,7 +148,8 @@ static int omapbl_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = OMAPBL_MAX_INTENSITY; >> dev = devm_backlight_device_register(&pdev->dev, "omap-bl", &pdev->dev, >> - bl, &omapbl_ops, &props); >> + bl, &omapbl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(dev)) >> return PTR_ERR(dev); >> >> diff --git a/drivers/video/backlight/ot200_bl.c b/drivers/video/backlight/ot200_bl.c >> index 3acdb9f646ed..36d71b32b9cd 100644 >> --- a/drivers/video/backlight/ot200_bl.c >> +++ b/drivers/video/backlight/ot200_bl.c >> @@ -120,7 +120,8 @@ static int ot200_backlight_probe(struct platform_device *pdev) >> >> bl = devm_backlight_device_register(&pdev->dev, dev_name(&pdev->dev), >> &pdev->dev, data, &ot200_backlight_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> retval = PTR_ERR(bl); >> diff --git a/drivers/video/backlight/pandora_bl.c b/drivers/video/backlight/pandora_bl.c >> index 5d8bb8b20183..b654543ea895 100644 >> --- a/drivers/video/backlight/pandora_bl.c >> +++ b/drivers/video/backlight/pandora_bl.c >> @@ -115,7 +115,8 @@ static int pandora_backlight_probe(struct platform_device *pdev) >> props.max_brightness = MAX_USER_VALUE; >> props.type = BACKLIGHT_RAW; >> bl = devm_backlight_device_register(&pdev->dev, pdev->name, &pdev->dev, >> - NULL, &pandora_backlight_ops, &props); >> + NULL, &pandora_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/backlight/pcf50633-backlight.c b/drivers/video/backlight/pcf50633-backlight.c >> index 85bd573b6d15..8f3dd6b22088 100644 >> --- a/drivers/video/backlight/pcf50633-backlight.c >> +++ b/drivers/video/backlight/pcf50633-backlight.c >> @@ -129,7 +129,8 @@ static int pcf50633_bl_probe(struct platform_device *pdev) >> >> pcf_bl->bl = devm_backlight_device_register(&pdev->dev, pdev->name, >> &pdev->dev, pcf_bl, >> - &pcf50633_bl_ops, &bl_props); >> + &pcf50633_bl_ops, &bl_props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> >> if (IS_ERR(pcf_bl->bl)) >> return PTR_ERR(pcf_bl->bl); >> diff --git a/drivers/video/backlight/pm8941-wled.c b/drivers/video/backlight/pm8941-wled.c >> index 0b6d21955d91..85035f2f784f 100644 >> --- a/drivers/video/backlight/pm8941-wled.c >> +++ b/drivers/video/backlight/pm8941-wled.c >> @@ -408,7 +408,8 @@ static int pm8941_wled_probe(struct platform_device *pdev) >> props.max_brightness = PM8941_WLED_REG_VAL_MAX; >> bl = devm_backlight_device_register(&pdev->dev, wled->name, >> &pdev->dev, wled, >> - &pm8941_wled_ops, &props); >> + &pm8941_wled_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> return PTR_ERR_OR_ZERO(bl); >> }; >> >> diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c >> index b2b366bb0f97..98655fce462c 100644 >> --- a/drivers/video/backlight/pwm_bl.c >> +++ b/drivers/video/backlight/pwm_bl.c >> @@ -330,7 +330,8 @@ static int pwm_backlight_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = data->max_brightness; >> bl = backlight_device_register(dev_name(&pdev->dev), &pdev->dev, pb, >> - &pwm_backlight_ops, &props); >> + &pwm_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> ret = PTR_ERR(bl); >> diff --git a/drivers/video/backlight/s6e63m0.c b/drivers/video/backlight/s6e63m0.c >> index 3c4a22a3063a..60bc88075e68 100644 >> --- a/drivers/video/backlight/s6e63m0.c >> +++ b/drivers/video/backlight/s6e63m0.c >> @@ -748,7 +748,8 @@ static int s6e63m0_probe(struct spi_device *spi) >> >> bd = devm_backlight_device_register(&spi->dev, "s6e63m0bl-bl", >> &spi->dev, lcd, &s6e63m0_backlight_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) >> return PTR_ERR(bd); >> >> diff --git a/drivers/video/backlight/sky81452-backlight.c b/drivers/video/backlight/sky81452-backlight.c >> index d414c7a3acf5..9abdbcf71fef 100644 >> --- a/drivers/video/backlight/sky81452-backlight.c >> +++ b/drivers/video/backlight/sky81452-backlight.c >> @@ -294,7 +294,8 @@ static int sky81452_bl_probe(struct platform_device *pdev) >> props.max_brightness = SKY81452_MAX_BRIGHTNESS, >> name = pdata->name ? pdata->name : SKY81452_DEFAULT_NAME; >> bd = devm_backlight_device_register(dev, name, dev, regmap, >> - &sky81452_bl_ops, &props); >> + &sky81452_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> dev_err(dev, "failed to register. err=%ld\n", PTR_ERR(bd)); >> return PTR_ERR(bd); >> diff --git a/drivers/video/backlight/tosa_bl.c b/drivers/video/backlight/tosa_bl.c >> index 83742d806391..755a61727ca1 100644 >> --- a/drivers/video/backlight/tosa_bl.c >> +++ b/drivers/video/backlight/tosa_bl.c >> @@ -107,7 +107,8 @@ static int tosa_bl_probe(struct i2c_client *client, >> props.max_brightness = 512 - 1; >> data->bl = devm_backlight_device_register(&client->dev, "tosa-bl", >> &client->dev, data, &bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(data->bl)) { >> ret = PTR_ERR(data->bl); >> goto err_reg; >> diff --git a/drivers/video/backlight/tps65217_bl.c b/drivers/video/backlight/tps65217_bl.c >> index fd524ad860a5..0ac55b9a773c 100644 >> --- a/drivers/video/backlight/tps65217_bl.c >> +++ b/drivers/video/backlight/tps65217_bl.c >> @@ -306,7 +306,8 @@ static int tps65217_bl_probe(struct platform_device *pdev) >> >> tps65217_bl->bl = devm_backlight_device_register(&pdev->dev, pdev->name, >> tps65217_bl->dev, tps65217_bl, >> - &tps65217_bl_ops, &bl_props); >> + &tps65217_bl_ops, &bl_props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(tps65217_bl->bl)) { >> dev_err(tps65217_bl->dev, >> "registration of backlight device failed: %d\n", rc); >> diff --git a/drivers/video/backlight/wm831x_bl.c b/drivers/video/backlight/wm831x_bl.c >> index 6eab0d6c262a..8b92a277f83b 100644 >> --- a/drivers/video/backlight/wm831x_bl.c >> +++ b/drivers/video/backlight/wm831x_bl.c >> @@ -197,7 +197,8 @@ static int wm831x_backlight_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = max_isel; >> bl = devm_backlight_device_register(&pdev->dev, "wm831x", &pdev->dev, >> - data, &wm831x_backlight_ops, &props); >> + data, &wm831x_backlight_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&pdev->dev, "failed to register backlight\n"); >> return PTR_ERR(bl); >> diff --git a/drivers/video/fbdev/atmel_lcdfb.c b/drivers/video/fbdev/atmel_lcdfb.c >> index 669ecc755fa9..d6c46d670622 100644 >> --- a/drivers/video/fbdev/atmel_lcdfb.c >> +++ b/drivers/video/fbdev/atmel_lcdfb.c >> @@ -244,7 +244,8 @@ static void init_backlight(struct atmel_lcdfb_info *sinfo) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = 0xff; >> bl = backlight_device_register("backlight", &sinfo->pdev->dev, sinfo, >> - &atmel_lcdc_bl_ops, &props); >> + &atmel_lcdc_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(&sinfo->pdev->dev, "error %ld on backlight register\n", >> PTR_ERR(bl)); >> diff --git a/drivers/video/fbdev/aty/aty128fb.c b/drivers/video/fbdev/aty/aty128fb.c >> index 0a4626886b00..dae8734870c9 100644 >> --- a/drivers/video/fbdev/aty/aty128fb.c >> +++ b/drivers/video/fbdev/aty/aty128fb.c >> @@ -1871,7 +1871,8 @@ static void aty128_bl_init(struct aty128fb_par *par) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = FB_BACKLIGHT_LEVELS - 1; >> bd = backlight_device_register(name, info->dev, par, &aty128_bl_data, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> info->bl_dev = NULL; >> printk(KERN_WARNING "aty128: Backlight registration failed\n"); >> diff --git a/drivers/video/fbdev/aty/atyfb_base.c b/drivers/video/fbdev/aty/atyfb_base.c >> index f34ed47fcaf8..918ec8f946aa 100644 >> --- a/drivers/video/fbdev/aty/atyfb_base.c >> +++ b/drivers/video/fbdev/aty/atyfb_base.c >> @@ -2242,7 +2242,8 @@ static void aty_bl_init(struct atyfb_par *par) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = FB_BACKLIGHT_LEVELS - 1; >> bd = backlight_device_register(name, info->dev, par, &aty_bl_data, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> info->bl_dev = NULL; >> printk(KERN_WARNING "aty: Backlight registration failed\n"); >> diff --git a/drivers/video/fbdev/aty/radeon_backlight.c b/drivers/video/fbdev/aty/radeon_backlight.c >> index 301d6d6aeead..a8c9ef618e42 100644 >> --- a/drivers/video/fbdev/aty/radeon_backlight.c >> +++ b/drivers/video/fbdev/aty/radeon_backlight.c >> @@ -155,7 +155,8 @@ void radeonfb_bl_init(struct radeonfb_info *rinfo) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = FB_BACKLIGHT_LEVELS - 1; >> bd = backlight_device_register(name, rinfo->info->dev, pdata, >> - &radeon_bl_data, &props); >> + &radeon_bl_data, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> rinfo->info->bl_dev = NULL; >> printk("radeonfb: Backlight registration failed\n"); >> diff --git a/drivers/video/fbdev/bf537-lq035.c b/drivers/video/fbdev/bf537-lq035.c >> index ef29fb425122..77b6f98d2182 100644 >> --- a/drivers/video/fbdev/bf537-lq035.c >> +++ b/drivers/video/fbdev/bf537-lq035.c >> @@ -765,7 +765,8 @@ static int bfin_lq035_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = MAX_BRIGHENESS; >> bl_dev = backlight_device_register("bf537-bl", NULL, NULL, >> - &bfin_lq035fb_bl_ops, &props); >> + &bfin_lq035fb_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> >> lcd_dev = lcd_device_register(KBUILD_MODNAME, &pdev->dev, NULL, >> &bfin_lcd_ops); >> diff --git a/drivers/video/fbdev/bf54x-lq043fb.c b/drivers/video/fbdev/bf54x-lq043fb.c >> index 8f1f97c75619..4001f3c9c40c 100644 >> --- a/drivers/video/fbdev/bf54x-lq043fb.c >> +++ b/drivers/video/fbdev/bf54x-lq043fb.c >> @@ -652,7 +652,8 @@ static int bfin_bf54x_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = 255; >> bl_dev = backlight_device_register("bf54x-bl", NULL, NULL, >> - &bfin_lq043fb_bl_ops, &props); >> + &bfin_lq043fb_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl_dev)) { >> printk(KERN_ERR DRIVER_NAME >> ": unable to register backlight.\n"); >> diff --git a/drivers/video/fbdev/bfin-t350mcqb-fb.c b/drivers/video/fbdev/bfin-t350mcqb-fb.c >> index e5ee4d9677f7..6c1c64f48432 100644 >> --- a/drivers/video/fbdev/bfin-t350mcqb-fb.c >> +++ b/drivers/video/fbdev/bfin-t350mcqb-fb.c >> @@ -549,7 +549,8 @@ static int bfin_t350mcqb_probe(struct platform_device *pdev) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = 255; >> bl_dev = backlight_device_register("bf52x-bl", NULL, NULL, >> - &bfin_lq043fb_bl_ops, &props); >> + &bfin_lq043fb_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl_dev)) { >> printk(KERN_ERR DRIVER_NAME >> ": unable to register backlight.\n"); >> diff --git a/drivers/video/fbdev/exynos/s6e8ax0.c b/drivers/video/fbdev/exynos/s6e8ax0.c >> index de2f3e793786..a78c6effab97 100644 >> --- a/drivers/video/fbdev/exynos/s6e8ax0.c >> +++ b/drivers/video/fbdev/exynos/s6e8ax0.c >> @@ -796,7 +796,8 @@ static int s6e8ax0_probe(struct mipi_dsim_lcd_device *dsim_dev) >> } >> >> lcd->bd = devm_backlight_device_register(lcd->dev, "s6e8ax0-bl", >> - lcd->dev, lcd, &s6e8ax0_backlight_ops, NULL); >> + lcd->dev, lcd, &s6e8ax0_backlight_ops, NULL, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(lcd->bd)) { >> dev_err(lcd->dev, "failed to register backlight ops.\n"); >> return PTR_ERR(lcd->bd); >> diff --git a/drivers/video/fbdev/mx3fb.c b/drivers/video/fbdev/mx3fb.c >> index f91b1db262b0..c13c365e6622 100644 >> --- a/drivers/video/fbdev/mx3fb.c >> +++ b/drivers/video/fbdev/mx3fb.c >> @@ -319,7 +319,8 @@ static void mx3fb_init_backlight(struct mx3fb_data *fbd) >> sdc_set_brightness(fbd, fbd->backlight_level); >> >> bl = backlight_device_register("mx3fb-bl", fbd->dev, fbd, >> - &mx3fb_lcdc_bl_ops, &props); >> + &mx3fb_lcdc_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(fbd->dev, "error %ld on backlight register\n", >> PTR_ERR(bl)); >> diff --git a/drivers/video/fbdev/nvidia/nv_backlight.c b/drivers/video/fbdev/nvidia/nv_backlight.c >> index 5c151b2ea683..fdb91547b02f 100644 >> --- a/drivers/video/fbdev/nvidia/nv_backlight.c >> +++ b/drivers/video/fbdev/nvidia/nv_backlight.c >> @@ -108,7 +108,8 @@ void nvidia_bl_init(struct nvidia_par *par) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = FB_BACKLIGHT_LEVELS - 1; >> bd = backlight_device_register(name, info->dev, par, &nvidia_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> info->bl_dev = NULL; >> printk(KERN_WARNING "nvidia: Backlight registration failed\n"); >> diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c >> index b58012b82b6f..2c5fccf81391 100644 >> --- a/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c >> +++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c >> @@ -1259,7 +1259,8 @@ static int dsicm_probe(struct platform_device *pdev) >> >> props.type = BACKLIGHT_RAW; >> bldev = backlight_device_register(dev_name(dev), >> - dev, ddata, &dsicm_bl_ops, &props); >> + dev, ddata, &dsicm_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bldev)) { >> r = PTR_ERR(bldev); >> goto err_bl; >> diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c >> index 468560a6daae..8d7821e8bb0a 100644 >> --- a/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c >> +++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c >> @@ -816,7 +816,8 @@ static int acx565akm_probe(struct spi_device *spi) >> props.type = BACKLIGHT_RAW; >> >> bldev = backlight_device_register("acx565akm", &ddata->spi->dev, >> - ddata, &acx565akm_bl_ops, &props); >> + ddata, &acx565akm_bl_ops, &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bldev)) { >> r = PTR_ERR(bldev); >> goto err_reg_bl; >> diff --git a/drivers/video/fbdev/riva/fbdev.c b/drivers/video/fbdev/riva/fbdev.c >> index 2ef26ad99341..6dc05da50609 100644 >> --- a/drivers/video/fbdev/riva/fbdev.c >> +++ b/drivers/video/fbdev/riva/fbdev.c >> @@ -343,7 +343,8 @@ static void riva_bl_init(struct riva_par *par) >> props.type = BACKLIGHT_RAW; >> props.max_brightness = FB_BACKLIGHT_LEVELS - 1; >> bd = backlight_device_register(name, info->dev, par, &riva_bl_ops, >> - &props); >> + &props, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bd)) { >> info->bl_dev = NULL; >> printk(KERN_WARNING "riva: Backlight registration failed\n"); >> diff --git a/drivers/video/fbdev/sh_mobile_lcdcfb.c b/drivers/video/fbdev/sh_mobile_lcdcfb.c >> index 82c0a8caa9b8..2000ed98b380 100644 >> --- a/drivers/video/fbdev/sh_mobile_lcdcfb.c >> +++ b/drivers/video/fbdev/sh_mobile_lcdcfb.c >> @@ -2314,7 +2314,8 @@ static struct backlight_device *sh_mobile_lcdc_bl_probe(struct device *parent, >> struct backlight_device *bl; >> >> bl = backlight_device_register(ch->cfg->bl_info.name, parent, ch, >> - &sh_mobile_lcdc_bl_ops, NULL); >> + &sh_mobile_lcdc_bl_ops, NULL, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> dev_err(parent, "unable to register backlight device: %ld\n", >> PTR_ERR(bl)); >> diff --git a/drivers/video/fbdev/ssd1307fb.c b/drivers/video/fbdev/ssd1307fb.c >> index a9c45c89b15e..a8a7ba4acde6 100644 >> --- a/drivers/video/fbdev/ssd1307fb.c >> +++ b/drivers/video/fbdev/ssd1307fb.c >> @@ -673,7 +673,8 @@ static int ssd1307fb_probe(struct i2c_client *client, >> >> snprintf(bl_name, sizeof(bl_name), "ssd1307fb%d", info->node); >> bl = backlight_device_register(bl_name, &client->dev, par, >> - &ssd1307fb_bl_ops, NULL); >> + &ssd1307fb_bl_ops, NULL, >> + BACKLIGHT_REGISTER_FB_CLIENT); >> if (IS_ERR(bl)) { >> ret = PTR_ERR(bl); >> dev_err(&client->dev, "unable to register backlight device: %d\n", >> diff --git a/include/linux/backlight.h b/include/linux/backlight.h >> index 5f2fd61ef4fb..79af3ccabeca 100644 >> --- a/include/linux/backlight.h >> +++ b/include/linux/backlight.h >> @@ -129,13 +129,16 @@ static inline int backlight_update_status(struct backlight_device *bd) >> return ret; >> } >> >> +#define BACKLIGHT_REGISTER_FB_CLIENT 0x1 >> extern struct backlight_device *backlight_device_register(const char *name, >> struct device *dev, void *devdata, const struct backlight_ops *ops, >> - const struct backlight_properties *props); >> + const struct backlight_properties *props, >> + unsigned long flags); >> extern struct backlight_device *devm_backlight_device_register( >> struct device *dev, const char *name, struct device *parent, >> void *devdata, const struct backlight_ops *ops, >> - const struct backlight_properties *props); >> + const struct backlight_properties *props, >> + unsigned long flags); >> extern void backlight_device_unregister(struct backlight_device *bd); >> extern void devm_backlight_device_unregister(struct device *dev, >> struct backlight_device *bd); >> -- >> 2.8.1 >> >> _______________________________________________ >> Intel-gfx mailing list >> Intel-gfx@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Jani Nikula, Intel Open Source Technology Center