From mboxrd@z Thu Jan 1 00:00:00 1970 From: Russell King Subject: [PATCH 5/6] drm/i2c: tda9950: add CEC driver Date: Tue, 28 Nov 2017 23:18:00 +0000 Message-ID: References: <20171128231712.GB8356@n2100.armlinux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from pandora.armlinux.org.uk (pandora.armlinux.org.uk [IPv6:2001:4d48:ad52:3201:214:fdff:fe10:1be6]) by gabe.freedesktop.org (Postfix) with ESMTPS id 074666E74C for ; Tue, 28 Nov 2017 23:18:10 +0000 (UTC) In-Reply-To: <20171128231712.GB8356@n2100.armlinux.org.uk> Content-Disposition: inline List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: David Airlie , Hans Verkuil Cc: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org QWRkIGEgQ0VDIGRyaXZlciBmb3IgdGhlIFREQTk5NTAsIHdoaWNoIGlzIGEgc3RhbmQtYWxvbmUg STJDIENFQyBkZXZpY2UsCmJ1dCBpcyBhbHNvIGludGVncmF0ZWQgaW50byBIRE1JIHRyYW5zY2Vp dmVycyBzdWNoIGFzIHRoZSBUREE5OTg5IGFuZApUREExOTk4OS4KClRoZSBUREE5OTUwIGNvbnRh aW5zIGEgY29tbWFuZCBwcm9jZXNzb3Igd2hpY2ggaGFuZGxlcyByZXRyYW5zbWlzc2lvbnMKYW5k IHRoZSBsb3cgbGV2ZWwgYnVzIHByb3RvY29sLiAgVGhlIGRyaXZlciBqdXN0IGhhcyB0byByZWFk IGFuZCB3cml0ZQp0aGUgbWVzc2FnZXMsIGFuZCBoYW5kbGUgZXJyb3IgY29uZGl0aW9ucy4KClNp Z25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+Ci0t LQogZHJpdmVycy9ncHUvZHJtL2kyYy9LY29uZmlnICAgICAgICAgICB8ICAgNSArCiBkcml2ZXJz L2dwdS9kcm0vaTJjL01ha2VmaWxlICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9p MmMvdGRhOTk1MC5jICAgICAgICAgfCA1MDcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3RkYTk5NTAuaCB8ICAxNiArKwogNCBm aWxlcyBjaGFuZ2VkLCA1MjkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9pMmMvdGRhOTk1MC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51 eC9wbGF0Zm9ybV9kYXRhL3RkYTk5NTAuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p MmMvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9pMmMvS2NvbmZpZwppbmRleCBhNmM5MmJlYjQx MGEuLjNhMjMyZjVmZjBhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2kyYy9LY29uZmln CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pMmMvS2NvbmZpZwpAQCAtMjYsNCArMjYsOSBAQCBjb25m aWcgRFJNX0kyQ19OWFBfVERBOTk4WAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIE5YUCBTZW1pY29u ZHVjdG9ycyBUREE5OThYIEhETUkgZW5jb2RlcnMuCiAKK2NvbmZpZyBEUk1fSTJDX05YUF9UREE5 OTUwCisJdHJpc3RhdGUgIk5YUCBTZW1pY29uZHVjdG9ycyBUREE5OTUwL1REQTk5OFggSERNSSBD RUMiCisJc2VsZWN0IENFQ19OT1RJRklFUgorCXNlbGVjdCBDRUNfQ09SRQorCiBlbmRtZW51CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTJjL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJt L2kyYy9NYWtlZmlsZQppbmRleCBiMjAxMDBjMThmZmIuLmE5NjJmNmYwODU2OCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2kyYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTJj L01ha2VmaWxlCkBAIC03LDMgKzcsNCBAQCBvYmotJChDT05GSUdfRFJNX0kyQ19TSUwxNjQpICs9 IHNpbDE2NC5vCiAKIHRkYTk5OHgteSA6PSB0ZGE5OTh4X2Rydi5vCiBvYmotJChDT05GSUdfRFJN X0kyQ19OWFBfVERBOTk4WCkgKz0gdGRhOTk4eC5vCitvYmotJChDT05GSUdfRFJNX0kyQ19OWFBf VERBOTk1MCkgKz0gdGRhOTk1MC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTJjL3Rk YTk5NTAuYyBiL2RyaXZlcnMvZ3B1L2RybS9pMmMvdGRhOTk1MC5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNmY3YTM3ZGRkYTA1Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2kyYy90ZGE5OTUwLmMKQEAgLTAsMCArMSw1MDcgQEAKKy8qCisgKiAg VERBOTk1MCBDb25zdW1lciBFbGVjdHJvbmljcyBDb250cm9sIGRyaXZlcgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCisgKgorICogVGhlIE5YUCBUREE5OTUwIGltcGxlbWVudHMgdGhlIEhETUkgQ29u c3VtZXIgRWxlY3Ryb25pY3MgQ29udHJvbAorICogaW50ZXJmYWNlLiAgVGhlIGhvc3QgaW50ZXJm YWNlIGlzIHNpbWlsYXIgdG8gYSBtYWlsYm94OiB0aGUgZGF0YQorICogcmVnaXN0ZXJzIHN0YXJ0 aW5nIGF0IFJFR19DRFIwIGFyZSB3cml0dGVuIHRvIHNlbmQgYSBjb21tYW5kIHRvIHRoZQorICog aW50ZXJuYWwgQ1BVLCBhbmQgcmVwbGllcyBhcmUgcmVhZCBmcm9tIHRoZXNlIHJlZ2lzdGVycy4K KyAqCisgKiBBcyB0aGUgZGF0YSByZWdpc3RlcnMgcmVwcmVzZW50IGEgbWFpbGJveCwgdGhleSBt dXN0IGJlIGFjY2Vzc2VkCisgKiBhcyBhIHNpbmdsZSBJMkMgdHJhbnNhY3Rpb24uICBTZWUgdGhl IFREQTk5NTAgZGF0YSBzaGVldCBmb3IgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2Rl bGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0 Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f ZGF0YS90ZGE5OTUwLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGRybS9k cm1fZWRpZC5oPgorI2luY2x1ZGUgPG1lZGlhL2NlYy5oPgorI2luY2x1ZGUgPG1lZGlhL2NlYy1u b3RpZmllci5oPgorCitlbnVtIHsKKwlSRUdfQ1NSID0gMHgwMCwKKwlDU1JfQlVTWSA9IEJJVCg3 KSwKKwlDU1JfSU5UICA9IEJJVCg2KSwKKwlDU1JfRVJSICA9IEJJVCg1KSwKKworCVJFR19DRVIg PSAweDAxLAorCisJUkVHX0NWUiA9IDB4MDIsCisKKwlSRUdfQ0NSID0gMHgwMywKKwlDQ1JfUkVT RVQgPSBCSVQoNyksCisJQ0NSX09OICAgID0gQklUKDYpLAorCisJUkVHX0FDS0ggPSAweDA0LAor CVJFR19BQ0tMID0gMHgwNSwKKworCVJFR19DQ09OUiA9IDB4MDYsCisJQ0NPTlJfRU5BQkxFX0VS Uk9SID0gQklUKDQpLAorCUNDT05SX1JFVFJZX01BU0sgPSA3LAorCisJUkVHX0NEUjAgPSAweDA3 LAorCisJQ0RSMV9SRVEgPSAweDAwLAorCUNEUjFfQ05GID0gMHgwMSwKKwlDRFIxX0lORCA9IDB4 ODEsCisJQ0RSMV9FUlIgPSAweDgyLAorCUNEUjFfSUVSID0gMHg4MywKKworCUNEUjJfQ05GX1NV Q0NFU1MgICAgPSAweDAwLAorCUNEUjJfQ05GX09GRl9TVEFURSAgPSAweDgwLAorCUNEUjJfQ05G X0JBRF9SRVEgICAgPSAweDgxLAorCUNEUjJfQ05GX0NFQ19BQ0NFU1MgPSAweDgyLAorCUNEUjJf Q05GX0FSQl9FUlJPUiAgPSAweDgzLAorCUNEUjJfQ05GX0JBRF9USU1JTkcgPSAweDg0LAorCUNE UjJfQ05GX05BQ0tfQUREUiAgPSAweDg1LAorCUNEUjJfQ05GX05BQ0tfREFUQSAgPSAweDg2LAor fTsKKworc3RydWN0IHRkYTk5NTBfcHJpdiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsK KwlzdHJ1Y3QgZGV2aWNlICpoZG1pOworCXN0cnVjdCBjZWNfYWRhcHRlciAqYWRhcDsKKwlzdHJ1 Y3QgdGRhOTk1MF9nbHVlICpnbHVlOworCXUxNiBhZGRyZXNzZXM7CisJc3RydWN0IGNlY19tc2cg cnhfbXNnOworCXN0cnVjdCBjZWNfbm90aWZpZXIgKm5vdGlmeTsKKwlib29sIG9wZW47Cit9Owor CitzdGF0aWMgaW50IHRkYTk5NTBfd3JpdGVfcmFuZ2Uoc3RydWN0IGkyY19jbGllbnQgKmNsaWVu dCwgdTggYWRkciwgdTggKnAsIGludCBjbnQpCit7CisJc3RydWN0IGkyY19tc2cgbXNnOworCXU4 IGJ1ZltjbnQgKyAxXTsKKwlpbnQgcmV0OworCisJYnVmWzBdID0gYWRkcjsKKwltZW1jcHkoYnVm ICsgMSwgcCwgY250KTsKKworCW1zZy5hZGRyID0gY2xpZW50LT5hZGRyOworCW1zZy5mbGFncyA9 IDA7CisJbXNnLmxlbiA9IGNudCArIDE7CisJbXNnLmJ1ZiA9IGJ1ZjsKKworCWRldl9kYmcoJmNs aWVudC0+ZGV2LCAid3IgMHglMDJ4OiAlKnBoXG4iLCBhZGRyLCBjbnQsIHApOworCisJcmV0ID0g aTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgJm1zZywgMSk7CisJaWYgKHJldCA8IDApCisJ CWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRXJyb3IgJWQgd3JpdGluZyB0byBjZWM6MHgleFxuIiwg cmV0LCBhZGRyKTsKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7Cit9CisKK3N0YXRpYyB2b2lk IHRkYTk5NTBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggYWRkciwgdTggdmFs KQoreworCXRkYTk5NTBfd3JpdGVfcmFuZ2UoY2xpZW50LCBhZGRyLCAmdmFsLCAxKTsKK30KKwor c3RhdGljIGludCB0ZGE5OTUwX3JlYWRfcmFuZ2Uoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwg dTggYWRkciwgdTggKnAsIGludCBjbnQpCit7CisJc3RydWN0IGkyY19tc2cgbXNnWzJdOworCWlu dCByZXQ7CisKKwltc2dbMF0uYWRkciA9IGNsaWVudC0+YWRkcjsKKwltc2dbMF0uZmxhZ3MgPSAw OworCW1zZ1swXS5sZW4gPSAxOworCW1zZ1swXS5idWYgPSAmYWRkcjsKKwltc2dbMV0uYWRkciA9 IGNsaWVudC0+YWRkcjsKKwltc2dbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKKwltc2dbMV0ubGVuID0g Y250OworCW1zZ1sxXS5idWYgPSBwOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRh cHRlciwgbXNnLCAyKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJF cnJvciAlZCByZWFkaW5nIGZyb20gY2VjOjB4JXhcbiIsIHJldCwgYWRkcik7CisKKwlkZXZfZGJn KCZjbGllbnQtPmRldiwgInJkIDB4JTAyeDogJSpwaFxuIiwgYWRkciwgY250LCBwKTsKKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyB1OCB0ZGE5OTUwX3JlYWQoc3RydWN0IGkyY19jbGllbnQg KmNsaWVudCwgdTggYWRkcikKK3sKKwlpbnQgcmV0OworCXU4IHZhbDsKKworCXJldCA9IHRkYTk5 NTBfcmVhZF9yYW5nZShjbGllbnQsIGFkZHIsICZ2YWwsIDEpOworCWlmIChyZXQgPCAwKQorCQl2 YWwgPSAwOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlycXJldHVybl90IHRkYTk5NTBf aXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHRkYTk5NTBfcHJpdiAqcHJpdiA9 IGRhdGE7CisJdW5zaWduZWQgaW50IHR4X3N0YXR1czsKKwl1OCBjc3IsIGNjb25yLCBidWZbMTld OworCXU4IGFyYl9sb3N0X2NudCwgbmFja19jbnQsIGVycl9jbnQ7CisKKwlpZiAoIXByaXYtPm9w ZW4pCisJCXJldHVybiBJUlFfTk9ORTsKKworCWNzciA9IHRkYTk5NTBfcmVhZChwcml2LT5jbGll bnQsIFJFR19DU1IpOworCWlmICghKGNzciAmIENTUl9JTlQpKQorCQlyZXR1cm4gSVJRX05PTkU7 CisKKwljY29uciA9IHRkYTk5NTBfcmVhZChwcml2LT5jbGllbnQsIFJFR19DQ09OUikgJiBDQ09O Ul9SRVRSWV9NQVNLOworCisJdGRhOTk1MF9yZWFkX3JhbmdlKHByaXYtPmNsaWVudCwgUkVHX0NE UjAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisJLyoKKwkgKiBUaGlzIHNob3VsZCBuZXZlciBoYXBw ZW46IHRoZSBkYXRhIHNoZWV0IHNheXMgdGhhdCB0aGVyZSB3aWxsCisJICogYWx3YXlzIGJlIGEg dmFsaWQgbWVzc2FnZSBpZiB0aGUgaW50ZXJydXB0IGxpbmUgaXMgYXNzZXJ0ZWQuCisJICovCisJ aWYgKGJ1ZlswXSA9PSAwKSB7CisJCWRldl93YXJuKCZwcml2LT5jbGllbnQtPmRldiwgImludGVy cnVwdCBwZW5kaW5nLCBidXQgbm8gbWVzc2FnZT9cbiIpOworCQlyZXR1cm4gSVJRX05PTkU7CisJ fQorCisJc3dpdGNoIChidWZbMV0pIHsKKwljYXNlIENEUjFfQ05GOiAvKiB0cmFuc21pdCByZXN1 bHQgKi8KKwkJYXJiX2xvc3RfY250ID0gbmFja19jbnQgPSBlcnJfY250ID0gMDsKKwkJc3dpdGNo IChidWZbMl0pIHsKKwkJY2FzZSBDRFIyX0NORl9TVUNDRVNTOgorCQkJdHhfc3RhdHVzID0gQ0VD X1RYX1NUQVRVU19PSzsKKwkJCWJyZWFrOworCisJCWNhc2UgQ0RSMl9DTkZfQVJCX0VSUk9SOgor CQkJdHhfc3RhdHVzID0gQ0VDX1RYX1NUQVRVU19BUkJfTE9TVDsKKwkJCWFyYl9sb3N0X2NudCA9 IGNjb25yOworCQkJYnJlYWs7CisKKwkJY2FzZSBDRFIyX0NORl9OQUNLX0FERFI6CisJCQl0eF9z dGF0dXMgPSBDRUNfVFhfU1RBVFVTX05BQ0s7CisJCQluYWNrX2NudCA9IGNjb25yOworCQkJYnJl YWs7CisKKwkJZGVmYXVsdDogLyogc29tZSBvdGhlciBlcnJvciwgcmVmZXIgdG8gVERBOTk1MCBk b2NzICovCisJCQlkZXZfZXJyKCZwcml2LT5jbGllbnQtPmRldiwgIkNORiByZXBseSBlcnJvciAw eCUwMnhcbiIsCisJCQkJYnVmWzJdKTsKKwkJCXR4X3N0YXR1cyA9IENFQ19UWF9TVEFUVVNfRVJS T1I7CisJCQllcnJfY250ID0gY2NvbnI7CisJCQlicmVhazsKKwkJfQorCQkvKiBUREE5OTUwIGV4 ZWN1dGVzIGFsbCByZXRyaWVzIGZvciB1cyAqLworCQl0eF9zdGF0dXMgfD0gQ0VDX1RYX1NUQVRV U19NQVhfUkVUUklFUzsKKwkJY2VjX3RyYW5zbWl0X2RvbmUocHJpdi0+YWRhcCwgdHhfc3RhdHVz LCBhcmJfbG9zdF9jbnQsCisJCQkJICBuYWNrX2NudCwgMCwgZXJyX2NudCk7CisJCWJyZWFrOwor CisJY2FzZSBDRFIxX0lORDoKKwkJcHJpdi0+cnhfbXNnLmxlbiA9IGJ1ZlswXSAtIDI7CisJCW1l bWNweShwcml2LT5yeF9tc2cubXNnLCBidWYgKyAyLCBwcml2LT5yeF9tc2cubGVuKTsKKwkJY2Vj X3JlY2VpdmVkX21zZyhwcml2LT5hZGFwLCAmcHJpdi0+cnhfbXNnKTsKKwkJYnJlYWs7CisKKwlk ZWZhdWx0OiAvKiB1bmtub3duICovCisJCWRldl9lcnIoJnByaXYtPmNsaWVudC0+ZGV2LCAidW5r bm93biBzZXJ2aWNlIGlkIDB4JTAyeFxuIiwKKwkJCWJ1ZlsxXSk7CisJCWJyZWFrOworCX0KKwor CXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCB0ZGE5OTUwX2NlY190cmFuc21p dChzdHJ1Y3QgY2VjX2FkYXB0ZXIgKmFkYXAsIHU4IGF0dGVtcHRzLAorCQkJCXUzMiBzaWduYWxf ZnJlZV90aW1lLCBzdHJ1Y3QgY2VjX21zZyAqbXNnKQoreworCXN0cnVjdCB0ZGE5OTUwX3ByaXYg KnByaXYgPSBhZGFwLT5wcml2OworCXU4IGJ1ZlsxNiArIDJdOworCisJYnVmWzBdID0gMiArIG1z Zy0+bGVuOworCWJ1ZlsxXSA9IENEUjFfUkVROworCW1lbWNweShidWYgKyAyLCBtc2ctPm1zZywg bXNnLT5sZW4pOworCisJaWYgKGF0dGVtcHRzID4gNSkKKwkJYXR0ZW1wdHMgPSA1OworCisJdGRh OTk1MF93cml0ZShwcml2LT5jbGllbnQsIFJFR19DQ09OUiwgYXR0ZW1wdHMpOworCisJcmV0dXJu IHRkYTk5NTBfd3JpdGVfcmFuZ2UocHJpdi0+Y2xpZW50LCBSRUdfQ0RSMCwgYnVmLCAyICsgbXNn LT5sZW4pOworfQorCitzdGF0aWMgaW50IHRkYTk5NTBfY2VjX2FkYXBfbG9nX2FkZHIoc3RydWN0 IGNlY19hZGFwdGVyICphZGFwLCB1OCBhZGRyKQoreworCXN0cnVjdCB0ZGE5OTUwX3ByaXYgKnBy aXYgPSBhZGFwLT5wcml2OworCXUxNiBhZGRyZXNzZXM7CisJdTggYnVmWzJdOworCisJaWYgKGFk ZHIgPT0gQ0VDX0xPR19BRERSX0lOVkFMSUQpCisJCWFkZHJlc3NlcyA9IHByaXYtPmFkZHJlc3Nl cyA9IDA7CisJZWxzZQorCQlhZGRyZXNzZXMgPSBwcml2LT5hZGRyZXNzZXMgfD0gQklUKGFkZHIp OworCisJLyogVERBOTk1MCBkb2Vzbid0IHdhbnQgYWRkcmVzcyAxNSBzZXQgKi8KKwlhZGRyZXNz ZXMgJj0gMHg3ZmZmOworCWJ1ZlswXSA9IGFkZHJlc3NlcyA+PiA4OworCWJ1ZlsxXSA9IGFkZHJl c3NlczsKKworCXJldHVybiB0ZGE5OTUwX3dyaXRlX3JhbmdlKHByaXYtPmNsaWVudCwgUkVHX0FD S0gsIGJ1ZiwgMik7Cit9CisKKy8qCisgKiBXaGVuIG9wZXJhdGluZyBhcyBwYXJ0IG9mIHRoZSBU REE5OTh4LCB3ZSBuZWVkIGFkZGl0aW9uYWwgaGFuZGxpbmcKKyAqIHRvIGluaXRpYWxpc2UgYW5k IHNodXQgZG93biB0aGUgVERBOTk1MCBwYXJ0IG9mIHRoZSBkZXZpY2UuICBUaGVzZQorICogdHdv IGhvb2tzIGFyZSBwcm92aWRlZCB0byBhbGxvdyB0aGUgVERBOTk4eCBjb2RlIHRvIHBlcmZvcm0g dGhvc2UKKyAqIGFjdGl2aXRpZXMuCisgKi8KK3N0YXRpYyBpbnQgdGRhOTk1MF9nbHVlX29wZW4o c3RydWN0IHRkYTk5NTBfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChwcml2 LT5nbHVlICYmIHByaXYtPmdsdWUtPm9wZW4pCisJCXJldCA9IHByaXYtPmdsdWUtPm9wZW4ocHJp di0+Z2x1ZS0+ZGF0YSk7CisKKwlwcml2LT5vcGVuID0gdHJ1ZTsKKworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyB2b2lkIHRkYTk5NTBfZ2x1ZV9yZWxlYXNlKHN0cnVjdCB0ZGE5OTUwX3ByaXYg KnByaXYpCit7CisJcHJpdi0+b3BlbiA9IGZhbHNlOworCisJaWYgKHByaXYtPmdsdWUgJiYgcHJp di0+Z2x1ZS0+cmVsZWFzZSkKKwkJcHJpdi0+Z2x1ZS0+cmVsZWFzZShwcml2LT5nbHVlLT5kYXRh KTsKK30KKworc3RhdGljIGludCB0ZGE5OTUwX29wZW4oc3RydWN0IHRkYTk5NTBfcHJpdiAqcHJp dikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gcHJpdi0+Y2xpZW50OworCWludCBy ZXQ7CisKKwlyZXQgPSB0ZGE5OTUwX2dsdWVfb3Blbihwcml2KTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJLyogUmVzZXQgdGhlIFREQTk5NTAsIGFuZCB3YWl0IDI1MG1zIGZvciBpdCB0 byByZWNvdmVyICovCisJdGRhOTk1MF93cml0ZShjbGllbnQsIFJFR19DQ1IsIENDUl9SRVNFVCk7 CisJbXNsZWVwKDI1MCk7CisKKwl0ZGE5OTUwX2NlY19hZGFwX2xvZ19hZGRyKHByaXYtPmFkYXAs IENFQ19MT0dfQUREUl9JTlZBTElEKTsKKworCS8qIFN0YXJ0IHRoZSBjb21tYW5kIHByb2Nlc3Nv ciAqLworCXRkYTk5NTBfd3JpdGUoY2xpZW50LCBSRUdfQ0NSLCBDQ1JfT04pOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyB2b2lkIHRkYTk5NTBfcmVsZWFzZShzdHJ1Y3QgdGRhOTk1MF9wcml2 ICpwcml2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBwcml2LT5jbGllbnQ7CisJ aW50IHRpbWVvdXQgPSA1MDsKKwl1OCBjc3I7CisKKwkvKiBTdG9wIHRoZSBjb21tYW5kIHByb2Nl c3NvciAqLworCXRkYTk5NTBfd3JpdGUoY2xpZW50LCBSRUdfQ0NSLCAwKTsKKworCS8qIFdhaXQg dXAgdG8gLjVzIGZvciBpdCB0byBzaWduYWwgbm9uLWJ1c3kgKi8KKwlkbyB7CisJCWNzciA9IHRk YTk5NTBfcmVhZChjbGllbnQsIFJFR19DU1IpOworCQlpZiAoIShjc3IgJiBDU1JfQlVTWSkgfHwg LS10aW1lb3V0KQorCQkJYnJlYWs7CisJCW1zbGVlcCgxMCk7CisJfSB3aGlsZSAoMSk7CisKKwkv KiBXYXJuIHRoZSB1c2VyIHRoYXQgdGhlaXIgSVJRIG1heSBkaWUgaWYgaXQncyBzaGFyZWQuICov CisJaWYgKGNzciAmIENTUl9CVVNZKQorCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJjb21tYW5k IHByb2Nlc3NvciBmYWlsZWQgdG8gc3RvcCwgaXJxJWQgbWF5IGRpZSAoY3NyPTB4JTAyeClcbiIs CisJCQkgY2xpZW50LT5pcnEsIGNzcik7CisKKwl0ZGE5OTUwX2dsdWVfcmVsZWFzZShwcml2KTsK K30KKworc3RhdGljIGludCB0ZGE5OTUwX2NlY19hZGFwX2VuYWJsZShzdHJ1Y3QgY2VjX2FkYXB0 ZXIgKmFkYXAsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCB0ZGE5OTUwX3ByaXYgKnByaXYgPSBh ZGFwLT5wcml2OworCisJaWYgKCFlbmFibGUpIHsKKwkJdGRhOTk1MF9yZWxlYXNlKHByaXYpOwor CQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gdGRhOTk1MF9vcGVuKHByaXYpOworCX0K K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjZWNfYWRhcF9vcHMgdGRhOTk1MF9jZWNfb3BzID0g eworCS5hZGFwX2VuYWJsZSA9IHRkYTk5NTBfY2VjX2FkYXBfZW5hYmxlLAorCS5hZGFwX2xvZ19h ZGRyID0gdGRhOTk1MF9jZWNfYWRhcF9sb2dfYWRkciwKKwkuYWRhcF90cmFuc21pdCA9IHRkYTk5 NTBfY2VjX3RyYW5zbWl0LAorfTsKKworLyoKKyAqIFdoZW4gb3BlcmF0aW5nIGFzIHBhcnQgb2Yg dGhlIFREQTk5OHgsIHdlIG5lZWQgdG8gY2xhaW0gYWRkaXRpb25hbAorICogcmVzb3VyY2VzLiAg VGhlc2UgdHdvIGhvb2tzIHBlcm1pdCB0aGUgbWFuYWdlbWVudCBvZiB0aG9zZSByZXNvdXJjZXMu CisgKi8KK3N0YXRpYyB2b2lkIHRkYTk5NTBfZGV2bV9nbHVlX2V4aXQodm9pZCAqZGF0YSkKK3sK KwlzdHJ1Y3QgdGRhOTk1MF9nbHVlICpnbHVlID0gZGF0YTsKKworCWlmIChnbHVlICYmIGdsdWUt PmV4aXQpCisJCWdsdWUtPmV4aXQoZ2x1ZS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgdGRhOTk1 MF9kZXZtX2dsdWVfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0ZGE5OTUwX2dsdWUg KmdsdWUpCit7CisJaW50IHJldDsKKworCWlmIChnbHVlICYmIGdsdWUtPmluaXQpIHsKKwkJcmV0 ID0gZ2x1ZS0+aW5pdChnbHVlLT5kYXRhKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJ fQorCisJcmV0ID0gZGV2bV9hZGRfYWN0aW9uKGRldiwgdGRhOTk1MF9kZXZtX2dsdWVfZXhpdCwg Z2x1ZSk7CisJaWYgKHJldCkKKwkJdGRhOTk1MF9kZXZtX2dsdWVfZXhpdChnbHVlKTsKKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHRkYTk5NTBfY2VjX2RlbCh2b2lkICpkYXRhKQor eworCXN0cnVjdCB0ZGE5OTUwX3ByaXYgKnByaXYgPSBkYXRhOworCisJY2VjX2RlbGV0ZV9hZGFw dGVyKHByaXYtPmFkYXApOworfQorCitzdGF0aWMgaW50IHRkYTk5NTBfcHJvYmUoc3RydWN0IGky Y19jbGllbnQgKmNsaWVudCwKKwkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7 CisJc3RydWN0IHRkYTk5NTBfZ2x1ZSAqZ2x1ZSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7 CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2OworCXN0cnVjdCB0ZGE5OTUwX3By aXYgKnByaXY7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwlpbnQgcmV0OworCXU4IGN2cjsK KworCS8qCisJICogV2UgbXVzdCBoYXZlIEkyQyBmdW5jdGlvbmFsaXR5OiBvdXIgbXVsdGktYnl0 ZSBhY2Nlc3NlcworCSAqIG11c3QgYmUgcGVyZm9ybWVkIGFzIGEgc2luZ2xlIGNvbnRpZ3VvdXMg dHJhbnNhY3Rpb24uCisJICovCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQt PmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQki YWRhcHRlciBkb2VzIG5vdCBzdXBwb3J0IEkyQyBmdW5jdGlvbmFsaXR5XG4iKTsKKwkJcmV0dXJu IC1FTlhJTzsKKwl9CisKKwkvKiBXZSBtdXN0IGhhdmUgYW4gaW50ZXJydXB0IHRvIGJlIGZ1bmN0 aW9uYWwuICovCisJaWYgKGNsaWVudC0+aXJxIDw9IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5k ZXYsICJkcml2ZXIgcmVxdWlyZXMgYW4gaW50ZXJydXB0XG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsK Kwl9CisKKwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYtPmNsaWVudCA9IGNs aWVudDsKKwlwcml2LT5nbHVlID0gZ2x1ZTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQs IHByaXYpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBwYXJ0IG9mIGEgVERBOTk4eCwgd2Ugd2FudCB0 aGUgY2xhc3MgZGV2aWNlcyB0byBiZQorCSAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgSERNSSBUeCBz byB3ZSBoYXZlIGEgdGlnaHQgcmVsYXRpb25zaGlwCisJICogYmV0d2VlbiB0aGUgSERNSSBpbnRl cmZhY2UgYW5kIHRoZSBDRUMgaW50ZXJmYWNlLgorCSAqLworCXByaXYtPmhkbWkgPSBkZXY7CisJ aWYgKGdsdWUgJiYgZ2x1ZS0+cGFyZW50KQorCQlwcml2LT5oZG1pID0gZ2x1ZS0+cGFyZW50Owor CisJcHJpdi0+YWRhcCA9IGNlY19hbGxvY2F0ZV9hZGFwdGVyKCZ0ZGE5OTUwX2NlY19vcHMsIHBy aXYsICJ0ZGE5OTUwIiwKKwkJCQkJICBDRUNfQ0FQX0xPR19BRERSUyB8CisJCQkJCSAgQ0VDX0NB UF9UUkFOU01JVCB8IENFQ19DQVBfUkMsCisJCQkJCSAgQ0VDX01BWF9MT0dfQUREUlMpOworCWlm IChJU19FUlIocHJpdi0+YWRhcCkpCisJCXJldHVybiBQVFJfRVJSKHByaXYtPmFkYXApOworCisJ cmV0ID0gZGV2bV9hZGRfYWN0aW9uKGRldiwgdGRhOTk1MF9jZWNfZGVsLCBwcml2KTsKKwlpZiAo cmV0KSB7CisJCWNlY19kZWxldGVfYWRhcHRlcihwcml2LT5hZGFwKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwlyZXQgPSB0ZGE5OTUwX2Rldm1fZ2x1ZV9pbml0KGRldiwgZ2x1ZSk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHRkYTk5NTBfZ2x1ZV9vcGVuKHByaXYpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwljdnIgPSB0ZGE5OTUwX3JlYWQoY2xpZW50LCBSRUdf Q1ZSKTsKKworCWRldl9pbmZvKCZjbGllbnQtPmRldiwKKwkJICJUREE5OTUwIENFQyBpbnRlcmZh Y2UsIGhhcmR3YXJlIHZlcnNpb24gJXUuJXVcbiIsCisJCSBjdnIgPj4gNCwgY3ZyICYgMTUpOwor CisJdGRhOTk1MF9nbHVlX3JlbGVhc2UocHJpdik7CisKKwlpcnFmbGFncyA9IElSUUZfVFJJR0dF Ul9GQUxMSU5HOworCWlmIChnbHVlKQorCQlpcnFmbGFncyA9IGdsdWUtPmlycV9mbGFnczsKKwor CXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBjbGllbnQtPmlycSwgTlVMTCwg dGRhOTk1MF9pcnEsCisJCQkJCWlycWZsYWdzIHwgSVJRRl9TSEFSRUQgfCBJUlFGX09ORVNIT1Qs CisJCQkJCWRldl9uYW1lKCZjbGllbnQtPmRldiksIHByaXYpOworCWlmIChyZXQgPCAwKQorCQly ZXR1cm4gcmV0OworCisJcHJpdi0+bm90aWZ5ID0gY2VjX25vdGlmaWVyX2dldChwcml2LT5oZG1p KTsKKwlpZiAoIXByaXYtPm5vdGlmeSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBjZWNf cmVnaXN0ZXJfYWRhcHRlcihwcml2LT5hZGFwLCBwcml2LT5oZG1pKTsKKwlpZiAocmV0IDwgMCkg eworCQljZWNfbm90aWZpZXJfcHV0KHByaXYtPm5vdGlmeSk7CisJCXJldHVybiByZXQ7CisJfQor CisJLyoKKwkgKiBDRUMgZG9jdW1lbnRhdGlvbiBzYXlzIHdlIG11c3Qgbm90IGNhbGwgY2VjX2Rl bGV0ZV9hZGFwdGVyCisJICogYWZ0ZXIgYSBzdWNjZXNzZnVsIGNhbGwgdG8gY2VjX3JlZ2lzdGVy X2FkYXB0ZXIoKS4KKwkgKi8KKwlkZXZtX3JlbW92ZV9hY3Rpb24oZGV2LCB0ZGE5OTUwX2NlY19k ZWwsIHByaXYpOworCisJY2VjX3JlZ2lzdGVyX2NlY19ub3RpZmllcihwcml2LT5hZGFwLCBwcml2 LT5ub3RpZnkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGRhOTk1MF9yZW1vdmUo c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdGRhOTk1MF9wcml2ICpwcml2 ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwljZWNfdW5yZWdpc3Rlcl9hZGFwdGVy KHByaXYtPmFkYXApOworCWNlY19ub3RpZmllcl9wdXQocHJpdi0+bm90aWZ5KTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kZXZpY2VfaWQgdGRhOTk1MF9pZHNbXSA9IHsK Kwl7ICJ0ZGE5OTUwIiwgMCB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywg dGRhOTk1MF9pZHMpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGRhOTk1MF9kcml2ZXIg PSB7CisJLnByb2JlID0gdGRhOTk1MF9wcm9iZSwKKwkucmVtb3ZlID0gdGRhOTk1MF9yZW1vdmUs CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidGRhOTk1MCIsCisJfSwKKwkuaWRfdGFibGUgPSB0 ZGE5OTUwX2lkcywKK307CisKK21vZHVsZV9pMmNfZHJpdmVyKHRkYTk5NTBfZHJpdmVyKTsKKwor TU9EVUxFX0FVVEhPUigiUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4i KTsKK01PRFVMRV9ERVNDUklQVElPTigiVERBOTk1MC9UREE5OTh4IENvbnN1bWVyIEVsZWN0cm9u aWNzIENvbnRyb2wgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1n aXQgYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvdGRhOTk1MC5oIGIvaW5jbHVkZS9saW51 eC9wbGF0Zm9ybV9kYXRhL3RkYTk5NTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLmM2NWVmZDQ2MTEwMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgv cGxhdGZvcm1fZGF0YS90ZGE5OTUwLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBMSU5VWF9Q TEFURk9STV9EQVRBX1REQTk5NTBfSAorI2RlZmluZSBMSU5VWF9QTEFURk9STV9EQVRBX1REQTk5 NTBfSAorCitzdHJ1Y3QgZGV2aWNlOworCitzdHJ1Y3QgdGRhOTk1MF9nbHVlIHsKKwlzdHJ1Y3Qg ZGV2aWNlICpwYXJlbnQ7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJdm9pZCAqZGF0YTsK KwlpbnQgKCppbml0KSh2b2lkICopOworCXZvaWQgKCpleGl0KSh2b2lkICopOworCWludCAoKm9w ZW4pKHZvaWQgKik7CisJdm9pZCAoKnJlbGVhc2UpKHZvaWQgKik7Cit9OworCisjZW5kaWYKLS0g CjIuNy40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK