From mboxrd@z Thu Jan 1 00:00:00 1970 From: Russell King Subject: [PATCH v3 5/7] drm/i2c: tda9950: add CEC driver Date: Mon, 09 Apr 2018 13:16:32 +0100 Message-ID: References: <20180409121529.GA31403@n2100.armlinux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180409121529.GA31403@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: Hans Verkuil Cc: David Airlie , devicetree@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org List-Id: devicetree@vger.kernel.org QWRkIGEgQ0VDIGRyaXZlciBmb3IgdGhlIFREQTk5NTAsIHdoaWNoIGlzIGEgc3RhbmQtYWxvbmUg STJDIENFQyBkZXZpY2UsCmJ1dCBpcyBhbHNvIGludGVncmF0ZWQgaW50byBIRE1JIHRyYW5zY2Vp dmVycyBzdWNoIGFzIHRoZSBUREE5OTg5IGFuZApUREExOTk4OS4KClRoZSBUREE5OTUwIGNvbnRh aW5zIGEgY29tbWFuZCBwcm9jZXNzb3Igd2hpY2ggaGFuZGxlcyByZXRyYW5zbWlzc2lvbnMKYW5k IHRoZSBsb3cgbGV2ZWwgYnVzIHByb3RvY29sLiAgVGhlIGRyaXZlciBqdXN0IGhhcyB0byByZWFk IGFuZCB3cml0ZQp0aGUgbWVzc2FnZXMsIGFuZCBoYW5kbGUgZXJyb3IgY29uZGl0aW9ucy4KClNp Z25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+Ci0t LQogZHJpdmVycy9ncHUvZHJtL2kyYy9LY29uZmlnICAgICAgICAgICB8ICAgNSArCiBkcml2ZXJz L2dwdS9kcm0vaTJjL01ha2VmaWxlICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9p MmMvdGRhOTk1MC5jICAgICAgICAgfCA1MDkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3RkYTk5NTAuaCB8ICAxNiArKwogNCBm aWxlcyBjaGFuZ2VkLCA1MzEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9pMmMvdGRhOTk1MC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51 eC9wbGF0Zm9ybV9kYXRhL3RkYTk5NTAuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p MmMvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9pMmMvS2NvbmZpZwppbmRleCBhNmM5MmJlYjQx MGEuLjNhMjMyZjVmZjBhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2kyYy9LY29uZmln CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pMmMvS2NvbmZpZwpAQCAtMjYsNCArMjYsOSBAQCBjb25m aWcgRFJNX0kyQ19OWFBfVERBOTk4WAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIE5YUCBTZW1pY29u ZHVjdG9ycyBUREE5OThYIEhETUkgZW5jb2RlcnMuCiAKK2NvbmZpZyBEUk1fSTJDX05YUF9UREE5 OTUwCisJdHJpc3RhdGUgIk5YUCBTZW1pY29uZHVjdG9ycyBUREE5OTUwL1REQTk5OFggSERNSSBD RUMiCisJc2VsZWN0IENFQ19OT1RJRklFUgorCXNlbGVjdCBDRUNfQ09SRQorCiBlbmRtZW51CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTJjL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJt L2kyYy9NYWtlZmlsZQppbmRleCBiMjAxMDBjMThmZmIuLmE5NjJmNmYwODU2OCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2kyYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTJj L01ha2VmaWxlCkBAIC03LDMgKzcsNCBAQCBvYmotJChDT05GSUdfRFJNX0kyQ19TSUwxNjQpICs9 IHNpbDE2NC5vCiAKIHRkYTk5OHgteSA6PSB0ZGE5OTh4X2Rydi5vCiBvYmotJChDT05GSUdfRFJN X0kyQ19OWFBfVERBOTk4WCkgKz0gdGRhOTk4eC5vCitvYmotJChDT05GSUdfRFJNX0kyQ19OWFBf VERBOTk1MCkgKz0gdGRhOTk1MC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTJjL3Rk YTk5NTAuYyBiL2RyaXZlcnMvZ3B1L2RybS9pMmMvdGRhOTk1MC5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uM2Y3Mzk2Y2FhZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2kyYy90ZGE5OTUwLmMKQEAgLTAsMCArMSw1MDkgQEAKKy8qCisgKiAg 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+cnhfbXNnLmxlbiA9IGJ1ZlswXSAtIDI7CisJCWlm IChwcml2LT5yeF9tc2cubGVuID4gQ0VDX01BWF9NU0dfU0laRSkKKwkJCXByaXYtPnJ4X21zZy5s ZW4gPSBDRUNfTUFYX01TR19TSVpFOworCisJCW1lbWNweShwcml2LT5yeF9tc2cubXNnLCBidWYg KyAyLCBwcml2LT5yeF9tc2cubGVuKTsKKwkJY2VjX3JlY2VpdmVkX21zZyhwcml2LT5hZGFwLCAm cHJpdi0+cnhfbXNnKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OiAvKiB1bmtub3duICovCisJCWRl dl9lcnIoJnByaXYtPmNsaWVudC0+ZGV2LCAidW5rbm93biBzZXJ2aWNlIGlkIDB4JTAyeFxuIiwK KwkJCWJ1ZlsxXSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwor c3RhdGljIGludCB0ZGE5OTUwX2NlY190cmFuc21pdChzdHJ1Y3QgY2VjX2FkYXB0ZXIgKmFkYXAs IHU4IGF0dGVtcHRzLAorCQkJCXUzMiBzaWduYWxfZnJlZV90aW1lLCBzdHJ1Y3QgY2VjX21zZyAq bXNnKQoreworCXN0cnVjdCB0ZGE5OTUwX3ByaXYgKnByaXYgPSBhZGFwLT5wcml2OworCXU4IGJ1 ZltDRUNfTUFYX01TR19TSVpFICsgMl07CisKKwlidWZbMF0gPSAyICsgbXNnLT5sZW47CisJYnVm WzFdID0gQ0RSMV9SRVE7CisJbWVtY3B5KGJ1ZiArIDIsIG1zZy0+bXNnLCBtc2ctPmxlbik7CisK KwlpZiAoYXR0ZW1wdHMgPiA1KQorCQlhdHRlbXB0cyA9IDU7CisKKwl0ZGE5OTUwX3dyaXRlKHBy aXYtPmNsaWVudCwgUkVHX0NDT05SLCBhdHRlbXB0cyk7CisKKwlyZXR1cm4gdGRhOTk1MF93cml0 ZV9yYW5nZShwcml2LT5jbGllbnQsIFJFR19DRFIwLCBidWYsIDIgKyBtc2ctPmxlbik7Cit9CisK K3N0YXRpYyBpbnQgdGRhOTk1MF9jZWNfYWRhcF9sb2dfYWRkcihzdHJ1Y3QgY2VjX2FkYXB0ZXIg KmFkYXAsIHU4IGFkZHIpCit7CisJc3RydWN0IHRkYTk5NTBfcHJpdiAqcHJpdiA9IGFkYXAtPnBy aXY7CisJdTE2IGFkZHJlc3NlczsKKwl1OCBidWZbMl07CisKKwlpZiAoYWRkciA9PSBDRUNfTE9H X0FERFJfSU5WQUxJRCkKKwkJYWRkcmVzc2VzID0gcHJpdi0+YWRkcmVzc2VzID0gMDsKKwllbHNl CisJCWFkZHJlc3NlcyA9IHByaXYtPmFkZHJlc3NlcyB8PSBCSVQoYWRkcik7CisKKwkvKiBUREE5 OTUwIGRvZXNuJ3Qgd2FudCBhZGRyZXNzIDE1IHNldCAqLworCWFkZHJlc3NlcyAmPSAweDdmZmY7 CisJYnVmWzBdID0gYWRkcmVzc2VzID4+IDg7CisJYnVmWzFdID0gYWRkcmVzc2VzOworCisJcmV0 dXJuIHRkYTk5NTBfd3JpdGVfcmFuZ2UocHJpdi0+Y2xpZW50LCBSRUdfQUNLSCwgYnVmLCAyKTsK K30KKworLyoKKyAqIFdoZW4gb3BlcmF0aW5nIGFzIHBhcnQgb2YgdGhlIFREQTk5OHgsIHdlIG5l ZWQgYWRkaXRpb25hbCBoYW5kbGluZworICogdG8gaW5pdGlhbGlzZSBhbmQgc2h1dCBkb3duIHRo ZSBUREE5OTUwIHBhcnQgb2YgdGhlIGRldmljZS4gIFRoZXNlCisgKiB0d28gaG9va3MgYXJlIHBy b3ZpZGVkIHRvIGFsbG93IHRoZSBUREE5OTh4IGNvZGUgdG8gcGVyZm9ybSB0aG9zZQorICogYWN0 aXZpdGllcy4KKyAqLworc3RhdGljIGludCB0ZGE5OTUwX2dsdWVfb3BlbihzdHJ1Y3QgdGRhOTk1 MF9wcml2ICpwcml2KQoreworCWludCByZXQgPSAwOworCisJaWYgKHByaXYtPmdsdWUgJiYgcHJp di0+Z2x1ZS0+b3BlbikKKwkJcmV0ID0gcHJpdi0+Z2x1ZS0+b3Blbihwcml2LT5nbHVlLT5kYXRh KTsKKworCXByaXYtPm9wZW4gPSB0cnVlOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZv aWQgdGRhOTk1MF9nbHVlX3JlbGVhc2Uoc3RydWN0IHRkYTk5NTBfcHJpdiAqcHJpdikKK3sKKwlw cml2LT5vcGVuID0gZmFsc2U7CisKKwlpZiAocHJpdi0+Z2x1ZSAmJiBwcml2LT5nbHVlLT5yZWxl YXNlKQorCQlwcml2LT5nbHVlLT5yZWxlYXNlKHByaXYtPmdsdWUtPmRhdGEpOworfQorCitzdGF0 aWMgaW50IHRkYTk5NTBfb3BlbihzdHJ1Y3QgdGRhOTk1MF9wcml2ICpwcml2KQoreworCXN0cnVj dCBpMmNfY2xpZW50ICpjbGllbnQgPSBwcml2LT5jbGllbnQ7CisJaW50IHJldDsKKworCXJldCA9 IHRkYTk5NTBfZ2x1ZV9vcGVuKHByaXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkv KiBSZXNldCB0aGUgVERBOTk1MCwgYW5kIHdhaXQgMjUwbXMgZm9yIGl0IHRvIHJlY292ZXIgKi8K Kwl0ZGE5OTUwX3dyaXRlKGNsaWVudCwgUkVHX0NDUiwgQ0NSX1JFU0VUKTsKKwltc2xlZXAoMjUw KTsKKworCXRkYTk5NTBfY2VjX2FkYXBfbG9nX2FkZHIocHJpdi0+YWRhcCwgQ0VDX0xPR19BRERS X0lOVkFMSUQpOworCisJLyogU3RhcnQgdGhlIGNvbW1hbmQgcHJvY2Vzc29yICovCisJdGRhOTk1 MF93cml0ZShjbGllbnQsIFJFR19DQ1IsIENDUl9PTik7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHZvaWQgdGRhOTk1MF9yZWxlYXNlKHN0cnVjdCB0ZGE5OTUwX3ByaXYgKnByaXYpCit7CisJ c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHByaXYtPmNsaWVudDsKKwlpbnQgdGltZW91dCA9 IDUwOworCXU4IGNzcjsKKworCS8qIFN0b3AgdGhlIGNvbW1hbmQgcHJvY2Vzc29yICovCisJdGRh OTk1MF93cml0ZShjbGllbnQsIFJFR19DQ1IsIDApOworCisJLyogV2FpdCB1cCB0byAuNXMgZm9y IGl0IHRvIHNpZ25hbCBub24tYnVzeSAqLworCWRvIHsKKwkJY3NyID0gdGRhOTk1MF9yZWFkKGNs aWVudCwgUkVHX0NTUik7CisJCWlmICghKGNzciAmIENTUl9CVVNZKSB8fCAtLXRpbWVvdXQpCisJ CQlicmVhazsKKwkJbXNsZWVwKDEwKTsKKwl9IHdoaWxlICgxKTsKKworCS8qIFdhcm4gdGhlIHVz ZXIgdGhhdCB0aGVpciBJUlEgbWF5IGRpZSBpZiBpdCdzIHNoYXJlZC4gKi8KKwlpZiAoY3NyICYg Q1NSX0JVU1kpCisJCWRldl93YXJuKCZjbGllbnQtPmRldiwgImNvbW1hbmQgcHJvY2Vzc29yIGZh aWxlZCB0byBzdG9wLCBpcnElZCBtYXkgZGllIChjc3I9MHglMDJ4KVxuIiwKKwkJCSBjbGllbnQt PmlycSwgY3NyKTsKKworCXRkYTk5NTBfZ2x1ZV9yZWxlYXNlKHByaXYpOworfQorCitzdGF0aWMg aW50IHRkYTk5NTBfY2VjX2FkYXBfZW5hYmxlKHN0cnVjdCBjZWNfYWRhcHRlciAqYWRhcCwgYm9v bCBlbmFibGUpCit7CisJc3RydWN0IHRkYTk5NTBfcHJpdiAqcHJpdiA9IGFkYXAtPnByaXY7CisK KwlpZiAoIWVuYWJsZSkgeworCQl0ZGE5OTUwX3JlbGVhc2UocHJpdik7CisJCXJldHVybiAwOwor CX0gZWxzZSB7CisJCXJldHVybiB0ZGE5OTUwX29wZW4ocHJpdik7CisJfQorfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGNlY19hZGFwX29wcyB0ZGE5OTUwX2NlY19vcHMgPSB7CisJLmFkYXBfZW5h YmxlID0gdGRhOTk1MF9jZWNfYWRhcF9lbmFibGUsCisJLmFkYXBfbG9nX2FkZHIgPSB0ZGE5OTUw X2NlY19hZGFwX2xvZ19hZGRyLAorCS5hZGFwX3RyYW5zbWl0ID0gdGRhOTk1MF9jZWNfdHJhbnNt aXQsCit9OworCisvKgorICogV2hlbiBvcGVyYXRpbmcgYXMgcGFydCBvZiB0aGUgVERBOTk4eCwg d2UgbmVlZCB0byBjbGFpbSBhZGRpdGlvbmFsCisgKiByZXNvdXJjZXMuICBUaGVzZSB0d28gaG9v a3MgcGVybWl0IHRoZSBtYW5hZ2VtZW50IG9mIHRob3NlIHJlc291cmNlcy4KKyAqLworc3RhdGlj IHZvaWQgdGRhOTk1MF9kZXZtX2dsdWVfZXhpdCh2b2lkICpkYXRhKQoreworCXN0cnVjdCB0ZGE5 OTUwX2dsdWUgKmdsdWUgPSBkYXRhOworCisJaWYgKGdsdWUgJiYgZ2x1ZS0+ZXhpdCkKKwkJZ2x1 ZS0+ZXhpdChnbHVlLT5kYXRhKTsKK30KKworc3RhdGljIGludCB0ZGE5OTUwX2Rldm1fZ2x1ZV9p bml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHRkYTk5NTBfZ2x1ZSAqZ2x1ZSkKK3sKKwlp bnQgcmV0OworCisJaWYgKGdsdWUgJiYgZ2x1ZS0+aW5pdCkgeworCQlyZXQgPSBnbHVlLT5pbml0 KGdsdWUtPmRhdGEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBk ZXZtX2FkZF9hY3Rpb24oZGV2LCB0ZGE5OTUwX2Rldm1fZ2x1ZV9leGl0LCBnbHVlKTsKKwlpZiAo cmV0KQorCQl0ZGE5OTUwX2Rldm1fZ2x1ZV9leGl0KGdsdWUpOworCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIHZvaWQgdGRhOTk1MF9jZWNfZGVsKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHRk YTk5NTBfcHJpdiAqcHJpdiA9IGRhdGE7CisKKwljZWNfZGVsZXRlX2FkYXB0ZXIocHJpdi0+YWRh cCk7Cit9CisKK3N0YXRpYyBpbnQgdGRhOTk1MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xp ZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdGRh OTk1MF9nbHVlICpnbHVlID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7CisJc3RydWN0IHRkYTk5NTBfcHJpdiAqcHJpdjsKKwl1 bnNpZ25lZCBsb25nIGlycWZsYWdzOworCWludCByZXQ7CisJdTggY3ZyOworCisJLyoKKwkgKiBX ZSBtdXN0IGhhdmUgSTJDIGZ1bmN0aW9uYWxpdHk6IG91ciBtdWx0aS1ieXRlIGFjY2Vzc2VzCisJ ICogbXVzdCBiZSBwZXJmb3JtZWQgYXMgYSBzaW5nbGUgY29udGlndW91cyB0cmFuc2FjdGlvbi4K KwkgKi8KKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJD X0ZVTkNfSTJDKSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSJhZGFwdGVyIGRvZXMg bm90IHN1cHBvcnQgSTJDIGZ1bmN0aW9uYWxpdHlcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0K KworCS8qIFdlIG11c3QgaGF2ZSBhbiBpbnRlcnJ1cHQgdG8gYmUgZnVuY3Rpb25hbC4gKi8KKwlp ZiAoY2xpZW50LT5pcnEgPD0gMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImRyaXZlciBy ZXF1aXJlcyBhbiBpbnRlcnJ1cHRcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXByaXYg PSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBy aXYpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+Y2xpZW50ID0gY2xpZW50OworCXByaXYt PmdsdWUgPSBnbHVlOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcHJpdik7CisKKwkv KgorCSAqIElmIHdlJ3JlIHBhcnQgb2YgYSBUREE5OTh4LCB3ZSB3YW50IHRoZSBjbGFzcyBkZXZp Y2VzIHRvIGJlCisJICogYXNzb2NpYXRlZCB3aXRoIHRoZSBIRE1JIFR4IHNvIHdlIGhhdmUgYSB0 aWdodCByZWxhdGlvbnNoaXAKKwkgKiBiZXR3ZWVuIHRoZSBIRE1JIGludGVyZmFjZSBhbmQgdGhl IENFQyBpbnRlcmZhY2UuCisJICovCisJcHJpdi0+aGRtaSA9IGRldjsKKwlpZiAoZ2x1ZSAmJiBn bHVlLT5wYXJlbnQpCisJCXByaXYtPmhkbWkgPSBnbHVlLT5wYXJlbnQ7CisKKwlwcml2LT5hZGFw ID0gY2VjX2FsbG9jYXRlX2FkYXB0ZXIoJnRkYTk5NTBfY2VjX29wcywgcHJpdiwgInRkYTk5NTAi LAorCQkJCQkgIENFQ19DQVBfREVGQVVMVFMsCisJCQkJCSAgQ0VDX01BWF9MT0dfQUREUlMpOwor CWlmIChJU19FUlIocHJpdi0+YWRhcCkpCisJCXJldHVybiBQVFJfRVJSKHByaXYtPmFkYXApOwor CisJcmV0ID0gZGV2bV9hZGRfYWN0aW9uKGRldiwgdGRhOTk1MF9jZWNfZGVsLCBwcml2KTsKKwlp ZiAocmV0KSB7CisJCWNlY19kZWxldGVfYWRhcHRlcihwcml2LT5hZGFwKTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwlyZXQgPSB0ZGE5OTUwX2Rldm1fZ2x1ZV9pbml0KGRldiwgZ2x1ZSk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHRkYTk5NTBfZ2x1ZV9vcGVuKHByaXYpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwljdnIgPSB0ZGE5OTUwX3JlYWQoY2xpZW50LCBS RUdfQ1ZSKTsKKworCWRldl9pbmZvKCZjbGllbnQtPmRldiwKKwkJICJUREE5OTUwIENFQyBpbnRl cmZhY2UsIGhhcmR3YXJlIHZlcnNpb24gJXUuJXVcbiIsCisJCSBjdnIgPj4gNCwgY3ZyICYgMTUp OworCisJdGRhOTk1MF9nbHVlX3JlbGVhc2UocHJpdik7CisKKwlpcnFmbGFncyA9IElSUUZfVFJJ R0dFUl9GQUxMSU5HOworCWlmIChnbHVlKQorCQlpcnFmbGFncyA9IGdsdWUtPmlycV9mbGFnczsK KworCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBjbGllbnQtPmlycSwgTlVM TCwgdGRhOTk1MF9pcnEsCisJCQkJCWlycWZsYWdzIHwgSVJRRl9TSEFSRUQgfCBJUlFGX09ORVNI T1QsCisJCQkJCWRldl9uYW1lKCZjbGllbnQtPmRldiksIHByaXYpOworCWlmIChyZXQgPCAwKQor CQlyZXR1cm4gcmV0OworCisJcHJpdi0+bm90aWZ5ID0gY2VjX25vdGlmaWVyX2dldChwcml2LT5o ZG1pKTsKKwlpZiAoIXByaXYtPm5vdGlmeSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBj ZWNfcmVnaXN0ZXJfYWRhcHRlcihwcml2LT5hZGFwLCBwcml2LT5oZG1pKTsKKwlpZiAocmV0IDwg MCkgeworCQljZWNfbm90aWZpZXJfcHV0KHByaXYtPm5vdGlmeSk7CisJCXJldHVybiByZXQ7CisJ fQorCisJLyoKKwkgKiBDRUMgZG9jdW1lbnRhdGlvbiBzYXlzIHdlIG11c3Qgbm90IGNhbGwgY2Vj X2RlbGV0ZV9hZGFwdGVyCisJICogYWZ0ZXIgYSBzdWNjZXNzZnVsIGNhbGwgdG8gY2VjX3JlZ2lz dGVyX2FkYXB0ZXIoKS4KKwkgKi8KKwlkZXZtX3JlbW92ZV9hY3Rpb24oZGV2LCB0ZGE5OTUwX2Nl Y19kZWwsIHByaXYpOworCisJY2VjX3JlZ2lzdGVyX2NlY19ub3RpZmllcihwcml2LT5hZGFwLCBw cml2LT5ub3RpZnkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGRhOTk1MF9yZW1v dmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdGRhOTk1MF9wcml2ICpw cml2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwljZWNfdW5yZWdpc3Rlcl9hZGFw dGVyKHByaXYtPmFkYXApOworCWNlY19ub3RpZmllcl9wdXQocHJpdi0+bm90aWZ5KTsKKworCXJl dHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kZXZpY2VfaWQgdGRhOTk1MF9pZHNbXSA9 IHsKKwl7ICJ0ZGE5OTUwIiwgMCB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGky YywgdGRhOTk1MF9pZHMpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGRhOTk1MF9kcml2 ZXIgPSB7CisJLnByb2JlID0gdGRhOTk1MF9wcm9iZSwKKwkucmVtb3ZlID0gdGRhOTk1MF9yZW1v dmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidGRhOTk1MCIsCisJfSwKKwkuaWRfdGFibGUg PSB0ZGE5OTUwX2lkcywKK307CisKK21vZHVsZV9pMmNfZHJpdmVyKHRkYTk5NTBfZHJpdmVyKTsK KworTU9EVUxFX0FVVEhPUigiUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51 az4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVERBOTk1MC9UREE5OTh4IENvbnN1bWVyIEVsZWN0 cm9uaWNzIENvbnRyb2wgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYg LS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvdGRhOTk1MC5oIGIvaW5jbHVkZS9s aW51eC9wbGF0Zm9ybV9kYXRhL3RkYTk5NTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLmM2NWVmZDQ2MTEwMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGlu dXgvcGxhdGZvcm1fZGF0YS90ZGE5OTUwLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBMSU5V WF9QTEFURk9STV9EQVRBX1REQTk5NTBfSAorI2RlZmluZSBMSU5VWF9QTEFURk9STV9EQVRBX1RE QTk5NTBfSAorCitzdHJ1Y3QgZGV2aWNlOworCitzdHJ1Y3QgdGRhOTk1MF9nbHVlIHsKKwlzdHJ1 Y3QgZGV2aWNlICpwYXJlbnQ7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJdm9pZCAqZGF0 YTsKKwlpbnQgKCppbml0KSh2b2lkICopOworCXZvaWQgKCpleGl0KSh2b2lkICopOworCWludCAo Km9wZW4pKHZvaWQgKik7CisJdm9pZCAoKnJlbGVhc2UpKHZvaWQgKik7Cit9OworCisjZW5kaWYK LS0gCjIuNy40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK