From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: [PATCH 23/60] drm/panel: Add driver for the Toppology TD028TTEC1 panel Date: Sun, 7 Jul 2019 21:19:00 +0300 Message-ID: <20190707181937.6250-20-laurent.pinchart@ideasonboard.com> References: <20190707180852.5512-1-laurent.pinchart@ideasonboard.com> <20190707181937.6250-1-laurent.pinchart@ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by gabe.freedesktop.org (Postfix) with ESMTPS id 49F8389B3B for ; Sun, 7 Jul 2019 18:28:37 +0000 (UTC) In-Reply-To: <20190707181937.6250-1-laurent.pinchart@ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Maxime Ripard , Sam Ravnborg , Sebastian Reichel , Tomi Valkeinen , Thierry Reding , Sean Paul List-Id: dri-devel@lists.freedesktop.org VGhpcyBwYW5lbCBpcyB1c2VkIG9uIHRoZSBPcGVuTW9rbyBOZW8gRnJlZVJ1bm5lciBhbmQgTmVv IDE5NzMuCgpTaWduZWQtb2ZmLWJ5OiBMYXVyZW50IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0 QGlkZWFzb25ib2FyZC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcgICAg ICAgICAgICAgICAgfCAgIDggKwogZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlICAgICAg ICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRwby10ZDAyOHR0 ZWMxLmMgfCAzODIgKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAzOTEgaW5z ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5l bC10cG8tdGQwMjh0dGVjMS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tj b25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwppbmRleCBkYzEwZjcyNzY4OWEu LmI3MDk5ZDIxMTA2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcK KysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKQEAgLTMwNCw2ICszMDQsMTQgQEAg Y29uZmlnIERSTV9QQU5FTF9TT05ZX0FDWDU2NUFLTQogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2Fu dCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFNvbnkgQUNYNTY1QUtNCiAJICA4MDB4NjAwIDMu NSIgcGFuZWwuCiAKK2NvbmZpZyBEUk1fUEFORUxfVFBPX1REMDI4VFRFQzEKKwl0cmlzdGF0ZSAi VFBPIFREMDI4VFRFQzEgcGFuZWwgZHJpdmVyIgorCWRlcGVuZHMgb24gT0YgJiYgU1BJCisJZGVw ZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5 b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgVFBPIFREMDI4VFRFQzEgNDgweDY0MAorCSAg Mi44IiBwYW5lbC4KKwogY29uZmlnIERSTV9QQU5FTF9UUE9fVFBHMTEwCiAJdHJpc3RhdGUgIlRQ TyBUUEcgODAweDQwMCBwYW5lbCIKIAlkZXBlbmRzIG9uIE9GICYmIFNQSSAmJiBHUElPTElCCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9k cm0vcGFuZWwvTWFrZWZpbGUKaW5kZXggODRjYmMwNjlmNmNkLi5hMWQ0ZGU2NGMwYjEgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9k cm0vcGFuZWwvTWFrZWZpbGUKQEAgLTMyLDUgKzMyLDYgQEAgb2JqLSQoQ09ORklHX0RSTV9QQU5F TF9TSEFSUF9MUzA0M1QxTEUwMSkgKz0gcGFuZWwtc2hhcnAtbHMwNDN0MWxlMDEubwogb2JqLSQo Q09ORklHX0RSTV9QQU5FTF9TSVRST05JWF9TVDc3MDEpICs9IHBhbmVsLXNpdHJvbml4LXN0Nzcw MS5vCiBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NJVFJPTklYX1NUNzc4OVYpICs9IHBhbmVsLXNp dHJvbml4LXN0Nzc4OXYubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TT05ZX0FDWDU2NUFLTSkg Kz0gcGFuZWwtc29ueS1hY3g1NjVha20ubworb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9UUE9fVEQw MjhUVEVDMSkgKz0gcGFuZWwtdHBvLXRkMDI4dHRlYzEubwogb2JqLSQoQ09ORklHX0RSTV9QQU5F TF9UUE9fVFBHMTEwKSArPSBwYW5lbC10cG8tdHBnMTEwLm8KIG9iai0kKENPTkZJR19EUk1fUEFO RUxfVFJVTFlfTlQzNTU5N19XUVhHQSkgKz0gcGFuZWwtdHJ1bHktbnQzNTU5Ny5vCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtdHBvLXRkMDI4dHRlYzEuYyBiL2RyaXZl cnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cG8tdGQwMjh0dGVjMS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDVhZjllYTYzMzljCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRwby10ZDAyOHR0ZWMxLmMKQEAgLTAsMCArMSwz ODIgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogVG9wcG9s eSBURDAyOFRURUMxIFBhbmVsIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBUZXhh cyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyAqCisgKiBCYXNlZCBvbiB0aGUgb21hcGRybS1z cGVjaWZpYyBwYW5lbC10cG8tdGQwMjh0dGVjMSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMp IDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogVG9taSBWYWxrZWluZW4gPHRvbWku dmFsa2VpbmVuQHRpLmNvbT4KKyAqCisgKiBOZW8gMTk3MyBjb2RlIChqYnQ2azc0LmMpOgorICog Q29weXJpZ2h0IChDKSAyMDA2LTIwMDcgT3Blbk1va28sIEluYy4KKyAqIEF1dGhvcjogSGFyYWxk IFdlbHRlIDxsYWZvcmdlQG9wZW5tb2tvLm9yZz4KKyAqCisgKiBQb3J0ZWQgYW5kIGFkYXB0ZWQg ZnJvbSBOZW8gMTk3MyBVLUJvb3QgYnk6CisgKiBILiBOaWtvbGF1cyBTY2hhbGxlciA8aG5zQGdv bGRlbGljby5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorI2luY2x1 ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8 bGludXgvc3BpL3NwaS5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX21vZGVzLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorCisjZGVm aW5lIEpCVF9DT01NQU5ECQkJMHgwMDAKKyNkZWZpbmUgSkJUX0RBVEEJCQkweDEwMAorCisjZGVm aW5lIEpCVF9SRUdfU0xFRVBfSU4JCTB4MTAKKyNkZWZpbmUgSkJUX1JFR19TTEVFUF9PVVQJCTB4 MTEKKworI2RlZmluZSBKQlRfUkVHX0RJU1BMQVlfT0ZGCQkweDI4CisjZGVmaW5lIEpCVF9SRUdf RElTUExBWV9PTgkJMHgyOQorCisjZGVmaW5lIEpCVF9SRUdfUkdCX0ZPUk1BVAkJMHgzYQorI2Rl ZmluZSBKQlRfUkVHX1FVQURfUkFURQkJMHgzYgorCisjZGVmaW5lIEpCVF9SRUdfUE9XRVJfT05f T0ZGCQkweGIwCisjZGVmaW5lIEpCVF9SRUdfQk9PU1RFUl9PUAkJMHhiMQorI2RlZmluZSBKQlRf UkVHX0JPT1NURVJfTU9ERQkJMHhiMgorI2RlZmluZSBKQlRfUkVHX0JPT1NURVJfRlJFUQkJMHhi MworI2RlZmluZSBKQlRfUkVHX09QQU1QX1NZU0NMSwkJMHhiNAorI2RlZmluZSBKQlRfUkVHX1ZT Q19WT0xUQUdFCQkweGI1CisjZGVmaW5lIEpCVF9SRUdfVkNPTV9WT0xUQUdFCQkweGI2CisjZGVm aW5lIEpCVF9SRUdfRVhUX0RJU1BMCQkweGI3CisjZGVmaW5lIEpCVF9SRUdfT1VUUFVUX0NPTlRS T0wJCTB4YjgKKyNkZWZpbmUgSkJUX1JFR19EQ0NMS19EQ0VWCQkweGI5CisjZGVmaW5lIEpCVF9S RUdfRElTUExBWV9NT0RFMQkJMHhiYQorI2RlZmluZSBKQlRfUkVHX0RJU1BMQVlfTU9ERTIJCTB4 YmIKKyNkZWZpbmUgSkJUX1JFR19ESVNQTEFZX01PREUJCTB4YmMKKyNkZWZpbmUgSkJUX1JFR19B U1dfU0xFVwkJMHhiZAorI2RlZmluZSBKQlRfUkVHX0RVTU1ZX0RJU1BMQVkJCTB4YmUKKyNkZWZp bmUgSkJUX1JFR19EUklWRV9TWVNURU0JCTB4YmYKKworI2RlZmluZSBKQlRfUkVHX1NMRUVQX09V VF9GUl9BCQkweGMwCisjZGVmaW5lIEpCVF9SRUdfU0xFRVBfT1VUX0ZSX0IJCTB4YzEKKyNkZWZp bmUgSkJUX1JFR19TTEVFUF9PVVRfRlJfQwkJMHhjMgorI2RlZmluZSBKQlRfUkVHX1NMRUVQX0lO X0xDQ05UX0QJMHhjMworI2RlZmluZSBKQlRfUkVHX1NMRUVQX0lOX0xDQ05UX0UJMHhjNAorI2Rl ZmluZSBKQlRfUkVHX1NMRUVQX0lOX0xDQ05UX0YJMHhjNQorI2RlZmluZSBKQlRfUkVHX1NMRUVQ X0lOX0xDQ05UX0cJMHhjNgorCisjZGVmaW5lIEpCVF9SRUdfR0FNTUExX0ZJTkVfMQkJMHhjNwor I2RlZmluZSBKQlRfUkVHX0dBTU1BMV9GSU5FXzIJCTB4YzgKKyNkZWZpbmUgSkJUX1JFR19HQU1N QTFfSU5DTElOQVRJT04JMHhjOQorI2RlZmluZSBKQlRfUkVHX0dBTU1BMV9CTFVFX09GRlNFVAkw eGNhCisKKyNkZWZpbmUgSkJUX1JFR19CTEFOS19DT05UUk9MCQkweGNmCisjZGVmaW5lIEpCVF9S RUdfQkxBTktfVEhfVFYJCTB4ZDAKKyNkZWZpbmUgSkJUX1JFR19DS1ZfT05fT0ZGCQkweGQxCisj ZGVmaW5lIEpCVF9SRUdfQ0tWXzFfMgkJCTB4ZDIKKyNkZWZpbmUgSkJUX1JFR19PRVZfVElNSU5H CQkweGQzCisjZGVmaW5lIEpCVF9SRUdfQVNXX1RJTUlOR18xCQkweGQ0CisjZGVmaW5lIEpCVF9S RUdfQVNXX1RJTUlOR18yCQkweGQ1CisKKyNkZWZpbmUgSkJUX1JFR19IQ0xPQ0tfVkdBCQkweGVj CisjZGVmaW5lIEpCVF9SRUdfSENMT0NLX1FWR0EJCTB4ZWQKKworc3RydWN0IHRkMDI4dHRlYzFf ZGV2aWNlIHsKKwlzdHJ1Y3QgZHJtX3BhbmVsIHBhbmVsOworCisJc3RydWN0IHNwaV9kZXZpY2Ug KnNwaTsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0OworfTsKKworI2RlZmlu ZSB0b190ZDAyOHR0ZWMxX2RldmljZShwKSBjb250YWluZXJfb2YocCwgc3RydWN0IHRkMDI4dHRl YzFfZGV2aWNlLCBwYW5lbCkKKworc3RhdGljIGludCBqYnRfcmV0X3dyaXRlXzAoc3RydWN0IHRk MDI4dHRlYzFfZGV2aWNlICpsY2QsIHU4IHJlZywgaW50ICplcnIpCit7CisJc3RydWN0IHNwaV9k ZXZpY2UgKnNwaSA9IGxjZC0+c3BpOworCXUxNiB0eF9idWYgPSBKQlRfQ09NTUFORCB8IHJlZzsK KwlpbnQgcmV0OworCisJaWYgKGVyciAmJiAqZXJyKQorCQlyZXR1cm4gKmVycjsKKworCXJldCA9 IHNwaV93cml0ZShzcGksICh1OCAqKSZ0eF9idWYsIHNpemVvZih0eF9idWYpKTsKKwlpZiAocmV0 IDwgMCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgIiVzOiBTUEkgd3JpdGUgZmFpbGVkOiAlZFxu IiwgX19mdW5jX18sIHJldCk7CisJCWlmIChlcnIpCisJCQkqZXJyID0gcmV0OworCX0KKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgamJ0X3JlZ193cml0ZV8xKHN0cnVjdCB0ZDAyOHR0 ZWMxX2RldmljZSAqbGNkLAorCQkJICAgdTggcmVnLCB1OCBkYXRhLCBpbnQgKmVycikKK3sKKwlz dHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gbGNkLT5zcGk7CisJdTE2IHR4X2J1ZlsyXTsKKwlpbnQg cmV0OworCisJaWYgKGVyciAmJiAqZXJyKQorCQlyZXR1cm4gKmVycjsKKworCXR4X2J1ZlswXSA9 IEpCVF9DT01NQU5EIHwgcmVnOworCXR4X2J1ZlsxXSA9IEpCVF9EQVRBIHwgZGF0YTsKKworCXJl dCA9IHNwaV93cml0ZShzcGksICh1OCAqKXR4X2J1Ziwgc2l6ZW9mKHR4X2J1ZikpOworCWlmIChy ZXQgPCAwKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiJXM6IFNQSSB3cml0ZSBmYWlsZWQ6ICVk XG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJaWYgKGVycikKKwkJCSplcnIgPSByZXQ7CisJfQorCisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBqYnRfcmVnX3dyaXRlXzIoc3RydWN0IHRkMDI4 dHRlYzFfZGV2aWNlICpsY2QsCisJCQkgICB1OCByZWcsIHUxNiBkYXRhLCBpbnQgKmVycikKK3sK KwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gbGNkLT5zcGk7CisJdTE2IHR4X2J1ZlszXTsKKwlp bnQgcmV0OworCisJaWYgKGVyciAmJiAqZXJyKQorCQlyZXR1cm4gKmVycjsKKworCXR4X2J1Zlsw XSA9IEpCVF9DT01NQU5EIHwgcmVnOworCXR4X2J1ZlsxXSA9IEpCVF9EQVRBIHwgKGRhdGEgPj4g OCk7CisJdHhfYnVmWzJdID0gSkJUX0RBVEEgfCAoZGF0YSAmIDB4ZmYpOworCisJcmV0ID0gc3Bp X3dyaXRlKHNwaSwgKHU4ICopdHhfYnVmLCBzaXplb2YodHhfYnVmKSk7CisJaWYgKHJldCA8IDAp IHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICIlczogU1BJIHdyaXRlIGZhaWxlZDogJWRcbiIsIF9f ZnVuY19fLCByZXQpOworCQlpZiAoZXJyKQorCQkJKmVyciA9IHJldDsKKwl9CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgaW50IHRkMDI4dHRlYzFfZGlzYWJsZShzdHJ1Y3QgZHJtX3BhbmVs ICpwYW5lbCkKK3sKKwlzdHJ1Y3QgdGQwMjh0dGVjMV9kZXZpY2UgKmxjZCA9IHRvX3RkMDI4dHRl YzFfZGV2aWNlKHBhbmVsKTsKKworCWJhY2tsaWdodF9kaXNhYmxlKGxjZC0+YmFja2xpZ2h0KTsK KworCWpidF9yZXRfd3JpdGVfMChsY2QsIEpCVF9SRUdfRElTUExBWV9PRkYsIE5VTEwpOworCWpi dF9yZWdfd3JpdGVfMihsY2QsIEpCVF9SRUdfT1VUUFVUX0NPTlRST0wsIDB4ODAwMiwgTlVMTCk7 CisJamJ0X3JldF93cml0ZV8wKGxjZCwgSkJUX1JFR19TTEVFUF9JTiwgTlVMTCk7CisJamJ0X3Jl Z193cml0ZV8xKGxjZCwgSkJUX1JFR19QT1dFUl9PTl9PRkYsIDB4MDAsIE5VTEwpOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGQwMjh0dGVjMV9lbmFibGUoc3RydWN0IGRybV9wYW5l bCAqcGFuZWwpCit7CisJc3RydWN0IHRkMDI4dHRlYzFfZGV2aWNlICpsY2QgPSB0b190ZDAyOHR0 ZWMxX2RldmljZShwYW5lbCk7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJldCA9IDA7CisKKwkv KiBUaHJlZSB0aW1lcyBjb21tYW5kIHplcm8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgKytpKSB7 CisJCWpidF9yZXRfd3JpdGVfMChsY2QsIDB4MDAsICZyZXQpOworCQl1c2xlZXBfcmFuZ2UoMTAw MCwgMjAwMCk7CisJfQorCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIGRlZXAgc3Rh bmRieSBvdXQgKi8KKwlqYnRfcmVnX3dyaXRlXzEobGNkLCBKQlRfUkVHX1BPV0VSX09OX09GRiwg MHgxNywgJnJldCk7CisKKwkvKiBSR0IgSS9GIG9uLCBSQU0gd3JpdGUgb2ZmLCBRVkdBIHRocm91 Z2gsIFNJR0NPTiBlbmFibGUgKi8KKwlqYnRfcmVnX3dyaXRlXzEobGNkLCBKQlRfUkVHX0RJU1BM QVlfTU9ERSwgMHg4MCwgJnJldCk7CisKKwkvKiBRdWFkIG1vZGUgb2ZmICovCisJamJ0X3JlZ193 cml0ZV8xKGxjZCwgSkJUX1JFR19RVUFEX1JBVEUsIDB4MDAsICZyZXQpOworCisJLyogQVZERCBv biwgWFZERCBvbiAqLworCWpidF9yZWdfd3JpdGVfMShsY2QsIEpCVF9SRUdfUE9XRVJfT05fT0ZG LCAweDE2LCAmcmV0KTsKKworCS8qIE91dHB1dCBjb250cm9sICovCisJamJ0X3JlZ193cml0ZV8y KGxjZCwgSkJUX1JFR19PVVRQVVRfQ09OVFJPTCwgMHhmZmY5LCAmcmV0KTsKKworCS8qIFNsZWVw IG1vZGUgb2ZmICovCisJamJ0X3JldF93cml0ZV8wKGxjZCwgSkJUX1JFR19TTEVFUF9PVVQsICZy ZXQpOworCisJLyogYXQgdGhpcyBwb2ludCB3ZSBoYXZlIGxpa2UgNTAlIGdyZXkgKi8KKworCS8q IGluaXRpYWxpemUgcmVnaXN0ZXIgc2V0ICovCisJamJ0X3JlZ193cml0ZV8xKGxjZCwgSkJUX1JF R19ESVNQTEFZX01PREUxLCAweDAxLCAmcmV0KTsKKwlqYnRfcmVnX3dyaXRlXzEobGNkLCBKQlRf UkVHX0RJU1BMQVlfTU9ERTIsIDB4MDAsICZyZXQpOworCWpidF9yZWdfd3JpdGVfMShsY2QsIEpC VF9SRUdfUkdCX0ZPUk1BVCwgMHg2MCwgJnJldCk7CisJamJ0X3JlZ193cml0ZV8xKGxjZCwgSkJU X1JFR19EUklWRV9TWVNURU0sIDB4MTAsICZyZXQpOworCWpidF9yZWdfd3JpdGVfMShsY2QsIEpC VF9SRUdfQk9PU1RFUl9PUCwgMHg1NiwgJnJldCk7CisJamJ0X3JlZ193cml0ZV8xKGxjZCwgSkJU X1JFR19CT09TVEVSX01PREUsIDB4MzMsICZyZXQpOworCWpidF9yZWdfd3JpdGVfMShsY2QsIEpC VF9SRUdfQk9PU1RFUl9GUkVRLCAweDExLCAmcmV0KTsKKwlqYnRfcmVnX3dyaXRlXzEobGNkLCBK QlRfUkVHX0JPT1NURVJfRlJFUSwgMHgxMSwgJnJldCk7CisJamJ0X3JlZ193cml0ZV8xKGxjZCwg SkJUX1JFR19PUEFNUF9TWVNDTEssIDB4MDIsICZyZXQpOworCWpidF9yZWdfd3JpdGVfMShsY2Qs IEpCVF9SRUdfVlNDX1ZPTFRBR0UsIDB4MmIsICZyZXQpOworCWpidF9yZWdfd3JpdGVfMShsY2Qs IEpCVF9SRUdfVkNPTV9WT0xUQUdFLCAweDQwLCAmcmV0KTsKKwlqYnRfcmVnX3dyaXRlXzEobGNk LCBKQlRfUkVHX0VYVF9ESVNQTCwgMHgwMywgJnJldCk7CisJamJ0X3JlZ193cml0ZV8xKGxjZCwg SkJUX1JFR19EQ0NMS19EQ0VWLCAweDA0LCAmcmV0KTsKKwkvKgorCSAqIGRlZmF1bHQgb2YgMHgw MiBpbiBKQlRfUkVHX0FTV19TTEVXIHJlc3BvbnNpYmxlIGZvciA3Mkh6IHJlcXVpcmVtZW50CisJ ICogdG8gYXZvaWQgcmVkIC8gYmx1ZSBmbGlja2VyCisJICovCisJamJ0X3JlZ193cml0ZV8xKGxj ZCwgSkJUX1JFR19BU1dfU0xFVywgMHgwNCwgJnJldCk7CisJamJ0X3JlZ193cml0ZV8xKGxjZCwg SkJUX1JFR19EVU1NWV9ESVNQTEFZLCAweDAwLCAmcmV0KTsKKworCWpidF9yZWdfd3JpdGVfMShs Y2QsIEpCVF9SRUdfU0xFRVBfT1VUX0ZSX0EsIDB4MTEsICZyZXQpOworCWpidF9yZWdfd3JpdGVf MShsY2QsIEpCVF9SRUdfU0xFRVBfT1VUX0ZSX0IsIDB4MTEsICZyZXQpOworCWpidF9yZWdfd3Jp dGVfMShsY2QsIEpCVF9SRUdfU0xFRVBfT1VUX0ZSX0MsIDB4MTEsICZyZXQpOworCWpidF9yZWdf d3JpdGVfMihsY2QsIEpCVF9SRUdfU0xFRVBfSU5fTENDTlRfRCwgMHgyMDQwLCAmcmV0KTsKKwlq YnRfcmVnX3dyaXRlXzIobGNkLCBKQlRfUkVHX1NMRUVQX0lOX0xDQ05UX0UsIDB4NjBjMCwgJnJl dCk7CisJamJ0X3JlZ193cml0ZV8yKGxjZCwgSkJUX1JFR19TTEVFUF9JTl9MQ0NOVF9GLCAweDEw MjAsICZyZXQpOworCWpidF9yZWdfd3JpdGVfMihsY2QsIEpCVF9SRUdfU0xFRVBfSU5fTENDTlRf RywgMHg2MGMwLCAmcmV0KTsKKworCWpidF9yZWdfd3JpdGVfMihsY2QsIEpCVF9SRUdfR0FNTUEx X0ZJTkVfMSwgMHg1NTMzLCAmcmV0KTsKKwlqYnRfcmVnX3dyaXRlXzEobGNkLCBKQlRfUkVHX0dB TU1BMV9GSU5FXzIsIDB4MDAsICZyZXQpOworCWpidF9yZWdfd3JpdGVfMShsY2QsIEpCVF9SRUdf R0FNTUExX0lOQ0xJTkFUSU9OLCAweDAwLCAmcmV0KTsKKwlqYnRfcmVnX3dyaXRlXzEobGNkLCBK QlRfUkVHX0dBTU1BMV9CTFVFX09GRlNFVCwgMHgwMCwgJnJldCk7CisKKwlqYnRfcmVnX3dyaXRl XzIobGNkLCBKQlRfUkVHX0hDTE9DS19WR0EsIDB4MWYwLCAmcmV0KTsKKwlqYnRfcmVnX3dyaXRl XzEobGNkLCBKQlRfUkVHX0JMQU5LX0NPTlRST0wsIDB4MDIsICZyZXQpOworCWpidF9yZWdfd3Jp dGVfMihsY2QsIEpCVF9SRUdfQkxBTktfVEhfVFYsIDB4MDgwNCwgJnJldCk7CisKKwlqYnRfcmVn X3dyaXRlXzEobGNkLCBKQlRfUkVHX0NLVl9PTl9PRkYsIDB4MDEsICZyZXQpOworCWpidF9yZWdf d3JpdGVfMihsY2QsIEpCVF9SRUdfQ0tWXzFfMiwgMHgwMDAwLCAmcmV0KTsKKworCWpidF9yZWdf d3JpdGVfMihsY2QsIEpCVF9SRUdfT0VWX1RJTUlORywgMHgwZDBlLCAmcmV0KTsKKwlqYnRfcmVn X3dyaXRlXzIobGNkLCBKQlRfUkVHX0FTV19USU1JTkdfMSwgMHgxMWE0LCAmcmV0KTsKKwlqYnRf cmVnX3dyaXRlXzEobGNkLCBKQlRfUkVHX0FTV19USU1JTkdfMiwgMHgwZSwgJnJldCk7CisKKwlq YnRfcmV0X3dyaXRlXzAobGNkLCBKQlRfUkVHX0RJU1BMQVlfT04sICZyZXQpOworCisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCWJhY2tsaWdodF9lbmFibGUobGNkLT5iYWNrbGlnaHQpOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSB0 ZDAyOHR0ZWMxX21vZGUgPSB7CisJLmNsb2NrID0gMjIxNTMsCisJLmhkaXNwbGF5ID0gNDgwLAor CS5oc3luY19zdGFydCA9IDQ4MCArIDI0LAorCS5oc3luY19lbmQgPSA0ODAgKyAyNCArIDgsCisJ Lmh0b3RhbCA9IDQ4MCArIDI0ICsgOCArIDgsCisJLnZkaXNwbGF5ID0gNjQwLAorCS52c3luY19z dGFydCA9IDY0MCArIDQsCisJLnZzeW5jX2VuZCA9IDY0MCArIDQgKyAyLAorCS52dG90YWwgPSA2 NDAgKyA0ICsgMiArIDIsCisJLnZyZWZyZXNoID0gNjYsCisJLnR5cGUgPSBEUk1fTU9ERV9UWVBF X0RSSVZFUiB8IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVELAorCS5mbGFncyA9IERSTV9NT0RFX0ZM QUdfTkhTWU5DIHwgRFJNX01PREVfRkxBR19OVlNZTkMsCit9OworCitzdGF0aWMgaW50IHRkMDI4 dHRlYzFfZ2V0X21vZGVzKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IgPSBwYW5lbC0+Y29ubmVjdG9yOworCXN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICptb2RlOworCisJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShwYW5lbC0+ZHJt LCAmdGQwMjh0dGVjMV9tb2RlKTsKKwlpZiAoIW1vZGUpCisJCXJldHVybiAtRU5PTUVNOworCisJ ZHJtX21vZGVfc2V0X25hbWUobW9kZSk7CisJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3Is IG1vZGUpOworCisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ud2lkdGhfbW0gPSA0MzsKKwljb25u ZWN0b3ItPmRpc3BsYXlfaW5mby5oZWlnaHRfbW0gPSA1ODsKKwkvKgorCSAqIEZJWE1FOiBBY2Nv cmRpbmcgdG8gdGhlIGRhdGFzaGVldCBzeW5jIHNpZ25hbHMgYXJlIHNhbXBsZWQgb24gdGhlCisJ ICogcmlzaW5nIGVkZ2Ugb2YgdGhlIGNsb2NrLCBidXQgdGhlIGNvZGUgcnVubmluZyBvbiB0aGUg T3Blbk1va28gTmVvCisJICogRnJlZVJ1bm5lciBhbmQgTmVvIDE5NzMgaW5kaWNhdGVzIHNhbXBs aW5nIG9uIHRoZSBmYWxsaW5nIGVkZ2UuIFRoaXMKKwkgKiBzaG91bGQgYmUgdGVzdGVkIG9uIGEg cmVhbCBkZXZpY2UuCisJICovCisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uYnVzX2ZsYWdzID0g RFJNX0JVU19GTEFHX0RFX0hJR0gKKwkJCQkJICB8IERSTV9CVVNfRkxBR19TWU5DX1NBTVBMRV9O RUdFREdFCisJCQkJCSAgfCBEUk1fQlVTX0ZMQUdfUElYREFUQV9TQU1QTEVfUE9TRURHRTsKKwor CXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wYW5lbF9mdW5jcyB0ZDAy OHR0ZWMxX2Z1bmNzID0geworCS5kaXNhYmxlID0gdGQwMjh0dGVjMV9kaXNhYmxlLAorCS5lbmFi bGUgPSB0ZDAyOHR0ZWMxX2VuYWJsZSwKKwkuZ2V0X21vZGVzID0gdGQwMjh0dGVjMV9nZXRfbW9k ZXMsCit9OworCitzdGF0aWMgaW50IHRkMDI4dHRlYzFfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2Ug KnNwaSkKK3sKKwlzdHJ1Y3QgdGQwMjh0dGVjMV9kZXZpY2UgKmxjZDsKKwlpbnQgcmV0OworCisJ bGNkID0gZGV2bV9remFsbG9jKCZzcGktPmRldiwgc2l6ZW9mKCpsY2QpLCBHRlBfS0VSTkVMKTsK KwlpZiAobGNkID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3BpX3NldF9kcnZkYXRh KHNwaSwgbGNkKTsKKwlsY2QtPnNwaSA9IHNwaTsKKworCWxjZC0+YmFja2xpZ2h0ID0gZGV2bV9v Zl9maW5kX2JhY2tsaWdodCgmc3BpLT5kZXYpOworCWlmIChJU19FUlIobGNkLT5iYWNrbGlnaHQp KQorCQlyZXR1cm4gUFRSX0VSUihsY2QtPmJhY2tsaWdodCk7CisKKwlzcGktPm1vZGUgPSBTUElf TU9ERV8zOworCXNwaS0+Yml0c19wZXJfd29yZCA9IDk7CisKKwlyZXQgPSBzcGlfc2V0dXAoc3Bp KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCB0byBzZXR1 cCBTUEk6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRybV9wYW5lbF9pbml0 KCZsY2QtPnBhbmVsKTsKKwlsY2QtPnBhbmVsLmRldiA9ICZsY2QtPnNwaS0+ZGV2OworCWxjZC0+ cGFuZWwuZnVuY3MgPSAmdGQwMjh0dGVjMV9mdW5jczsKKworCXJldHVybiBkcm1fcGFuZWxfYWRk KCZsY2QtPnBhbmVsKTsKK30KKworc3RhdGljIGludCB0ZDAyOHR0ZWMxX3JlbW92ZShzdHJ1Y3Qg c3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCB0ZDAyOHR0ZWMxX2RldmljZSAqbGNkID0gc3Bp X2dldF9kcnZkYXRhKHNwaSk7CisKKwlkcm1fcGFuZWxfcmVtb3ZlKCZsY2QtPnBhbmVsKTsKKwl0 ZDAyOHR0ZWMxX2Rpc2FibGUoJmxjZC0+cGFuZWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRkMDI4dHRlYzFfb2ZfbWF0Y2hbXSA9IHsKKwl7 IC5jb21wYXRpYmxlID0gInRwbyx0ZDAyOHR0ZWMxIiwgfSwKKwkvKiBEVCBiYWNrd2FyZCBjb21w YXRpYmlsaXR5LiAqLworCXsgLmNvbXBhdGlibGUgPSAidG9wcG9seSx0ZDAyOHR0ZWMxIiwgfSwK Kwl7fSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRkMDI4dHRlYzFfb2ZfbWF0Y2gp OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgdGQwMjh0dGVjMV9pZHNbXSA9 IHsKKwl7ICJ0cG8sdGQwMjh0dGVjMSIsIDB9LAorCXsgInRvcHBvbHksdGQwMjh0dGVjMSIsIDAg fSwKKwl7IC8qIHNlbnRpbmVsICovIH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoc3BpLCB0 ZDAyOHR0ZWMxX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB0ZDAyOHR0ZWMxX2Ry aXZlciA9IHsKKwkucHJvYmUJCT0gdGQwMjh0dGVjMV9wcm9iZSwKKwkucmVtb3ZlCQk9IHRkMDI4 dHRlYzFfcmVtb3ZlLAorCS5pZF90YWJsZQk9IHRkMDI4dHRlYzFfaWRzLAorCS5kcml2ZXIJCT0g eworCQkubmFtZSAgID0gInBhbmVsLXRwby10ZDAyOHR0ZWMxIiwKKwkJLm9mX21hdGNoX3RhYmxl ID0gdGQwMjh0dGVjMV9vZl9tYXRjaCwKKwl9LAorfTsKKworbW9kdWxlX3NwaV9kcml2ZXIodGQw Mjh0dGVjMV9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJILiBOaWtvbGF1cyBTY2hhbGxlciA8 aG5zQGdvbGRlbGljby5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRvcHBvbHkgVEQwMjhU VEVDMSBwYW5lbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLS0gClJlZ2FyZHMs CgpMYXVyZW50IFBpbmNoYXJ0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k cmktZGV2ZWw=