From mboxrd@z Thu Jan 1 00:00:00 1970 From: Darius Subject: [PATCH V10] I2C driver for IMX Date: Fri, 18 Jul 2008 09:56:45 +0300 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------090303030406020009080406" Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: i2c-bounces-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org Errors-To: i2c-bounces-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org To: i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org Cc: linux-arm-kernel-xIg/pKzrS19vn6HldHNs0ANdhmdF6hFW@public.gmane.org List-Id: linux-i2c@vger.kernel.org This is a multi-part message in MIME format. --------------090303030406020009080406 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Description: Implementation of I2C Adapter/Algorithm Driver for I2C Bus integrated in Freescale's i.MXL and i.MX1 processors Changes from V9 version: - platform_driver_register replaced by platform_driver_probe because I2C is non-hotpluggable device - Patch divided into two separate patches for I2C driver and for board support for I2C device - In I2C wait functions dummy cycles replaced by calling shedule(); - Fixed coding style errors This driver is not yet compatible with upcomming Clock API for i.MX. I'll implement this after 2.6.27-rc1 release. Signed-off-by: Darius Augulis --- --------------090303030406020009080406 Content-Type: text/plain; name="patch-i2c-imx" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="patch-i2c-imx" SW5kZXg6IGxpbnV4LTIuNi4yNi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysgbGludXgtMi42LjI2L2RyaXZlcnMvaTJjL2J1 c3Nlcy9pMmMtaW14LmMKQEAgLTAsMCArMSw2MTcgQEAKKy8qCisgKglDb3B5cmlnaHQgKEMp IDIwMDIgTW90b3JvbGEgR1NHLUNoaW5hCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq CWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAyCisgKglvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqCWJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKglNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKglHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor ICoKKyAqCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisgKglhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICoJRm91bmRhdGlvbiwgSW5jLiwgNTkg VGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LAorICoJ VVNBLgorICoKKyAqIEF1dGhvcjoKKyAqCURhcml1cyBBdWd1bGlzLCBUZWx0b25pa2EgSW5j LgorICoKKyAqIERlc2MuOgorICoJSW1wbGVtZW50YXRpb24gb2YgSTJDIEFkYXB0ZXIvQWxn b3JpdGhtIERyaXZlcgorICoJZm9yIEkyQyBCdXMgaW50ZWdyYXRlZCBpbiBpLk1YTCwgaS5N WDEKKyAqCisgKgltb2R1bGUgcGFyYW1ldGVyczoKKyAqCQktIGNsa2ZyZXE6CisgKgkJCVNl dHMgdGhlIGRlc2lyZWQgY2xvY2sgcmF0ZQorICoJCQlUaGUgZGVmYXVsdCB2YWx1ZSBpcyAx MDAwMDAKKyAqCQkJTWF4IHZhbHVlIGlzIDQwMDAwMAorICoKKyAqCURlcml2ZWQgZnJvbSBN b3Rvcm9sYSBHU0cgQ2hpbmEgSTJDIGV4YW1wbGUgZHJpdmVyCisgKgorICoJQ29weXJpZ2h0 IChDKSAyMDA1IFRvcnN0ZW4gS29zY2hvcnJlayA8a29zY2hvcnJlayBhdCBzeW5lcnRyb25p eHguZGUKKyAqCVBvcnRpb25zOgorICoJQ29weXJpZ2h0IChDKSAyMDA1IE1hdHRoaWFzIEJs YXNjaGtlIDxibGFzY2hrZSBhdCBzeW5lcnRyb25peHguZGUKKyAqCUNvcHlyaWdodCAoQykg MjAwNyBSaWdodEhhbmQgVGVjaG5vbG9naWVzLCBJbmMuIDxhZHllcmF0cmlnaHRoYW5kdGVj aC5jb20+CisgKglDb3B5cmlnaHQgKEMpIDIwMDggRGFyaXVzIEF1Z3VsaXMgPGRhcml1cy5h dWd1bGlzIGF0IHRlbHRvbmlrYS5sdD4KKyAqCisgKi8KKworLyoqIEluY2x1ZGVzICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51 eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9p bnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4 L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQu aD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20v YXJjaC9pcnFzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRl IDxhc20vYXJjaC9pbXgtcmVncy5oPgorCisvKiogRGVmaW5lcyAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgor KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyB3aWxsIGJlIHRoZSBkcml2 ZXIgbmFtZSB0aGUga2VybmVsIHJlcG9ydHMgKi8KKyNkZWZpbmUgRFJJVkVSX05BTUUgImlt eC1pMmMiCisKKy8qIERlZmF1bHQgdmFsdWVzIG9mIG1vZHVsZSBwYXJhbWV0ZXJzICovCisj ZGVmaW5lIElNWF9JMkNfQklUX1JBVEUJMTAwMDAwCS8qIDEwMGtIeiAqLworCisvKiBUaW1l b3V0cyAqLworI2RlZmluZSBJMkNfSU1YX1RJTUVfQlVTWQkyMDAwCS8qIGxvb3AgY291bnQg Ki8KKyNkZWZpbmUgSTJDX0lNWF9USU1FX0FDSwkyMDAwCS8qIGxvb3AgY291bnQgKi8KKyNk ZWZpbmUgSTJDX0lNWF9USU1FX1RSWAk1CS8qIHNlY29uZHMgKi8KKworLyogSU1YIEkyQyBy ZWdpc3RlcnMgKi8KKyNkZWZpbmUgSU1YX0kyQ19JQURSCTB4MDAJLyogaTJjIHNsYXZlIGFk ZHJlc3MgKi8KKyNkZWZpbmUgSU1YX0kyQ19JRkRSCTB4MDQJLyogaTJjIGZyZXF1ZW5jeSBk aXZpZGVyICovCisjZGVmaW5lIElNWF9JMkNfSTJDUgkweDA4CS8qIGkyYyBjb250cm9sICov CisjZGVmaW5lIElNWF9JMkNfSTJTUgkweDBDCS8qIGkyYyBzdGF0dXMgKi8KKyNkZWZpbmUg SU1YX0kyQ19JMkRSCTB4MTAJLyogaTJjIHRyYW5zZmVyIGRhdGEgKi8KKworLyogQml0cyBv ZiBJTVggSTJDIHJlZ2lzdGVycyAqLworI2RlZmluZSBJMlNSX1JYQUsJMHgwMQorI2RlZmlu ZSBJMlNSX0lJRgkweDAyCisjZGVmaW5lIEkyU1JfU1JXCTB4MDQKKyNkZWZpbmUgSTJTUl9J QUwJMHgxMAorI2RlZmluZSBJMlNSX0lCQgkweDIwCisjZGVmaW5lIEkyU1JfSUFBUwkweDQw CisjZGVmaW5lIEkyU1JfSUNGCTB4ODAKKyNkZWZpbmUgSTJDUl9SU1RBCTB4MDQKKyNkZWZp bmUgSTJDUl9UWEFLCTB4MDgKKyNkZWZpbmUgSTJDUl9NVFgJMHgxMAorI2RlZmluZSBJMkNS X01TVEEJMHgyMAorI2RlZmluZSBJMkNSX0lJRU4JMHg0MAorI2RlZmluZSBJMkNSX0lFTgkw eDgwCisKKy8qKiBWYXJpYWJsZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGNsa2ZyZXEgPSBJTVhfSTJDX0JJVF9S QVRFOworc3RhdGljIHVuc2lnbmVkIGludCBkaXNhYmxlX2RlbGF5OwkvKiBEdW1teSBkZWxh eSAqLworCisvKgorICogc29ydGVkIGxpc3Qgb2YgY2xvY2sgZGl2aWRlciwgcmVnaXN0ZXIg dmFsdWUgcGFpcnMKKyAqIHRha2VuIGZyb20gdGFibGUgMjYtNSwgcC4yNi05LCBGcmVlc2Nh bGUgaS5NWAorICogSW50ZWdyYXRlZCBQb3J0YWJsZSBTeXN0ZW0gUHJvY2Vzc29yIFJlZmVy ZW5jZSBNYW51YWwKKyAqIERvY3VtZW50IE51bWJlcjogTUM5MzI4TVhMUk0sIFJldi4gNS4x LCAwNi8yMDA3CisgKgorICogRHVwbGljYXRlZCBkaXZpZGVyIHZhbHVlcyByZW1vdmVkIGZy b20gbGlzdAorICovCisKK3N0YXRpYyB1MTYgX19pbml0ZGF0YSBpMmNfaW14X2Nsa19kaXZp ZGVyIFs1MF0gWzJdID0geworCXsgMjIsCTB4MjAgfSwgeyAyNCwJMHgyMSB9LCB7IDI2LAkw eDIyIH0sIHsgMjgsCTB4MjMgfSwKKwl7IDMwLAkweDAwIH0sCXsgMzIsCTB4MjQgfSwgeyAz NiwJMHgyNSB9LCB7IDQwLAkweDI2IH0sCisJeyA0MiwJMHgwMyB9LCB7IDQ0LAkweDI3IH0s CXsgNDgsCTB4MjggfSwgeyA1MiwJMHgwNSB9LAorCXsgNTYsCTB4MjkgfSwgeyA2MCwJMHgw NiB9LCB7IDY0LAkweDJBIH0sCXsgNzIsCTB4MkIgfSwKKwl7IDgwLAkweDJDIH0sIHsgODgs CTB4MDkgfSwgeyA5NiwJMHgyRCB9LCB7IDEwNCwJMHgwQSB9LAorCXsgMTEyLAkweDJFIH0s IHsgMTI4LAkweDJGIH0sIHsgMTQ0LAkweDBDIH0sIHsgMTYwLAkweDMwIH0sCisJeyAxOTIs CTB4MzEgfSwJeyAyMjQsCTB4MzIgfSwgeyAyNDAsCTB4MEYgfSwgeyAyNTYsCTB4MzMgfSwK Kwl7IDI4OCwJMHgxMCB9LCB7IDMyMCwJMHgzNCB9LAl7IDM4NCwJMHgzNSB9LCB7IDQ0OCwJ MHgzNiB9LAorCXsgNDgwLAkweDEzIH0sIHsgNTEyLAkweDM3IH0sIHsgNTc2LAkweDE0IH0s CXsgNjQwLAkweDM4IH0sCisJeyA3NjgsCTB4MzkgfSwgeyA4OTYsCTB4M0EgfSwgeyA5NjAs CTB4MTcgfSwgeyAxMDI0LAkweDNCIH0sCisJeyAxMTUyLAkweDE4IH0sIHsgMTI4MCwJMHgz QyB9LCB7IDE1MzYsCTB4M0QgfSwgeyAxNzkyLAkweDNFIH0sCisJeyAxOTIwLAkweDFCIH0s CXsgMjA0OCwJMHgzRiB9LCB7IDIzMDQsCTB4MUMgfSwgeyAyNTYwLAkweDFEIH0sCisJeyAz MDcyLAkweDFFIH0sIHsgMzg0MCwJMHgxRiB9Cit9OworCitzdHJ1Y3QgaW14X2kyY19zdHJ1 Y3QgeworCXN0cnVjdCBpMmNfYWRhcHRlcglhZGFwdGVyOworCXN0cnVjdCByZXNvdXJjZQkJ KnJlczsKKwl2b2lkIF9faW9tZW0JCSpiYXNlOworCWludAkJCWlycTsKKwl3YWl0X3F1ZXVl X2hlYWRfdAlxdWV1ZTsKKwl1bnNpZ25lZCBsb25nCQlpMmNzcjsKK307CisKKy8qKiBGdW5j dGlvbnMgZm9yIElNWCBJMkMgYWRhcHRlciBkcml2ZXIgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0 aWMgaW50IGkyY19pbXhfYnVzX2J1c3koc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14 KQoreworCXVuc2lnbmVkIGxvbmcgb3JpZ19qaWZmaWVzID0gamlmZmllczsKKworCWRldl9k YmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPlxuIiwgX19mdW5jX18pOworCisJLyog d2FpdCBmb3IgYnVzIG5vdCBidXN5ICovCisJd2hpbGUgKHJlYWRiKGkyY19pbXgtPmJhc2Ug KyBJTVhfSTJDX0kyU1IpICYgSTJTUl9JQkIpIHsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1 cnJlbnQpKSB7CisJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwKKwkJCQkiPCVz PiBJMkMgSW50ZXJydXB0ZWRcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiAtRUlOVFI7CisJ CX0KKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgb3JpZ19qaWZmaWVzICsgSFopKSB7CisJ CQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwKKwkJCQkiPCVzPiBJMkMgYnVzIGlz IGJ1c3lcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCXNjaGVkdWxl KCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTJjX2lteF90cnhfY29t cGxldGUoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14KQoreworCWludCByZXN1bHQ7 CisKKwlyZXN1bHQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChpMmNfaW14 LT5xdWV1ZSwKKwkJaTJjX2lteC0+aTJjc3IgJiBJMlNSX0lJRiwgSTJDX0lNWF9USU1FX1RS WCAqIEhaKTsKKworCWlmICh1bmxpa2VseShyZXN1bHQgPCAwKSkgeworCQlkZXZfZGJnKCZp MmNfaW14LT5hZGFwdGVyLmRldiwgIjwlcz4gcmVzdWx0IDwgMFxuIiwgX19mdW5jX18pOwor CQlyZXR1cm4gcmVzdWx0OworCX0gZWxzZSBpZiAodW5saWtlbHkoIShpMmNfaW14LT5pMmNz ciAmIEkyU1JfSUlGKSkpIHsKKwkJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsICI8 JXM+IFRpbWVvdXRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQor CWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPiBUUlggY29tcGxldGVcbiIs IF9fZnVuY19fKTsKKwlpMmNfaW14LT5pMmNzciA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgaTJjX2lteF9hY2tlZChzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QgKmkyY19pbXgp Cit7CisJdW5zaWduZWQgbG9uZyBvcmlnX2ppZmZpZXMgPSBqaWZmaWVzOworCisJLyogV2Fp dCBmb3IgYWNrICovCisJd2hpbGUgKHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0ky U1IpICYgSTJTUl9SWEFLKSB7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewor CQkJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsCisJCQkJIjwlcz4gSTJDIEludGVy cnVwdGVkXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gLUVJTlRSOworCQl9CisJCWlmICh0 aW1lX2FmdGVyKGppZmZpZXMsIG9yaWdfamlmZmllcyArIEhaKSkgeworCQkJZGV2X2RiZygm aTJjX2lteC0+YWRhcHRlci5kZXYsCisJCQkJIjwlcz4gTm8gQUNLXG4iLCBfX2Z1bmNfXyk7 CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlzY2hlZHVsZSgpOworCX0KKworCWRldl9kYmco JmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPiBBQ0sgcmVjZWl2ZWRcbiIsIF9fZnVuY19f KTsKKwlyZXR1cm4gMDsgICAvKiBObyBBQ0sgKi8KK30KKworc3RhdGljIHZvaWQgaTJjX2lt eF9zdGFydChzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QgKmkyY19pbXgpCit7CisJdW5zaWduZWQg aW50IHRlbXAgPSAwOworCisJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsICI8JXM+ XG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBFbmFibGUgSTJDIGNvbnRyb2xsZXIgKi8KKwl3cml0 ZWIoSTJDUl9JRU4sIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOworCS8qIFN0YXJ0 IEkyQyB0cmFuc2FjdGlvbiAqLworCXRlbXAgPSByZWFkYihpMmNfaW14LT5iYXNlICsgSU1Y X0kyQ19JMkNSKTsKKwl0ZW1wIHw9IEkyQ1JfTVNUQTsKKwl3cml0ZWIodGVtcCwgaTJjX2lt eC0+YmFzZSArIElNWF9JMkNfSTJDUik7CisJdGVtcCB8PSBJMkNSX0lJRU4gfCBJMkNSX01U WCB8IEkyQ1JfVFhBSzsKKwl3cml0ZWIodGVtcCwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNf STJDUik7Cit9CisKK3N0YXRpYyB2b2lkIGkyY19pbXhfc3RvcChzdHJ1Y3QgaW14X2kyY19z dHJ1Y3QgKmkyY19pbXgpCit7CisJdW5zaWduZWQgaW50IHRlbXAgPSAwOworCisJLyogU3Rv cCBJMkMgdHJhbnNhY3Rpb24gKi8KKwlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwg Ijwlcz5cbiIsIF9fZnVuY19fKTsKKwl0ZW1wID0gcmVhZGIoaTJjX2lteC0+YmFzZSArIElN WF9JMkNfSTJDUik7CisJdGVtcCAmPSB+STJDUl9NU1RBOworCXdyaXRlYih0ZW1wLCBpMmNf aW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwkvKiBzZXR1cCBjaGlwIHJlZ2lzdGVycyB0 byBkZWZhdWx0cyAqLworCXdyaXRlYihJMkNSX0lFTiwgaTJjX2lteC0+YmFzZSArIElNWF9J MkNfSTJDUik7CisJd3JpdGViKDAsIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyU1IpOwor CS8qCisJICogVGhpcyBkZWxheSBjYXVzZWQgYnkgYW4gaS5NWEwgaGFyZHdhcmUgYnVnLgor CSAqIElmIG5vIChvciB0b28gc2hvcnQpIGRlbGF5LCBubyAiU1RPUCIgYml0IHdpbGwgYmUg Z2VuZXJhdGVkLgorCSAqLworCXVkZWxheShkaXNhYmxlX2RlbGF5KTsKKwkvKiBEaXNhYmxl IEkyQyBjb250cm9sbGVyICovCisJd3JpdGViKDAsIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJD X0kyQ1IpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgaTJjX2lteF9zZXRfY2xrKHN0cnVj dCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCwgdW5zaWduZWQgaW50IHJhdGUpCit7CisJdW5z aWduZWQgaW50IGhjbGs7CisJdW5zaWduZWQgaW50IGRlc2lyZWRfZGl2OworCWludCBpOwor CisJLyogRGl2aWRlciB2YWx1ZSBjYWxjdWxhdGlvbiAqLworCWhjbGsgPSBpbXhfZ2V0X2hj bGsoKTsKKwlkZXNpcmVkX2RpdiA9IChoY2xrICsgcmF0ZSAtIDEpIC8gcmF0ZTsKKwlpZiAo ZGVzaXJlZF9kaXYgPCBpMmNfaW14X2Nsa19kaXZpZGVyWzBdWzBdKQorCQlpID0gMDsKKwll bHNlIGlmIChkZXNpcmVkX2RpdiA+IGkyY19pbXhfY2xrX2RpdmlkZXJbQVJSQVlfU0laRShp MmNfaW14X2Nsa19kaXZpZGVyKSAtIDFdWzBdKQorCQlpID0gQVJSQVlfU0laRShpMmNfaW14 X2Nsa19kaXZpZGVyKSAtIDE7CisJZWxzZQorCQlmb3IgKGkgPSAwOyBpMmNfaW14X2Nsa19k aXZpZGVyW2ldWzBdIDwgZGVzaXJlZF9kaXY7IGkrKyk7CisKKwkvKiBXcml0ZSBkaXZpZGVy IHZhbHVlIHRvIHJlZ2lzdGVyICovCisJd3JpdGViKGkyY19pbXhfY2xrX2RpdmlkZXJbaV1b MV0sIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0lGRFIpOworCisJLyoKKwkgKiBUaGVyZSBk dW1teSBkZWxheSBpcyBjYWxjdWxhdGVkLgorCSAqIEl0IHNob3VsZCBiZSBhYm91dCBvbmUg STJDIGNsb2NrIHBlcmlvZCBsb25nLgorCSAqIFRoaXMgZGVsYXkgaXMgdXNlZCBpbiBJMkMg YnVzIGRpc2FibGUgZnVuY3Rpb24KKwkgKiB0byBmaXggY2hpcCBoYXJkd2FyZSBidWcuCisJ ICovCisJZGlzYWJsZV9kZWxheSA9ICg1MDAwMDBVICogaTJjX2lteF9jbGtfZGl2aWRlcltp XVswXQorCQkrIChoY2xrIC8gMikgLSAxKSAvIChoY2xrIC8gMik7CisKKwkvKiBkZXZfZGJn KCkgY2FuJ3QgYmUgdXNlZCwgYmVjYXVzZSBhZGFwdGVyIGlzIG5vdCB5ZXQgcmVnaXN0ZXJl ZCAqLworI2lmZGVmIENPTkZJR19JMkNfREVCVUdfQlVTCisJdW5zaWduZWQgaW50IHN5c2Ns azsKKwlzeXNjbGsgPSBpbXhfZ2V0X3N5c3RlbV9jbGsoKTsKKwlwcmludGsoS0VSTl9ERUJV RyAiSTJDOiA8JXM+IFNZU0NMSz0lZCwgSENMSz0lZCwgUkVRIERJVj0lZFxuIiwKKwkJX19m dW5jX18sIHN5c2NsaywgaGNsaywgZGVzaXJlZF9kaXYpOworCXByaW50ayhLRVJOX0RFQlVH ICJJMkM6IDwlcz4gSUZEUltJQ109MHgleCwgUkVBTCBESVY9JWRcbiIsCisJCV9fZnVuY19f LCBpMmNfaW14X2Nsa19kaXZpZGVyW2ldWzFdLCBpMmNfaW14X2Nsa19kaXZpZGVyW2ldWzBd KTsKKyNlbmRpZgorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaTJjX2lteF9pc3IoaW50IGly cSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCA9 IGRldl9pZDsKKwl1bnNpZ25lZCBpbnQgdGVtcDsKKworCXRlbXAgPSByZWFkYihpMmNfaW14 LT5iYXNlICsgSU1YX0kyQ19JMlNSKTsKKwlpZiAodGVtcCAmIEkyU1JfSUlGKSB7CisJCS8q IHNhdmUgc3RhdHVzIHJlZ2lzdGVyICovCisJCWkyY19pbXgtPmkyY3NyID0gdGVtcDsKKwkJ dGVtcCAmPSB+STJTUl9JSUY7CisJCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1Y X0kyQ19JMlNSKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpMmNfaW14LT5xdWV1ZSk7 CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGkyY19pbXhf d3JpdGUoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14LCBzdHJ1Y3QgaTJjX21zZyAq bXNncykKK3sKKwlpbnQgaSwgcmVzdWx0OworCisJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRl ci5kZXYsICI8JXM+IHdyaXRlIHNsYXZlIGFkZHJlc3M6IGFkZHI9MHgleFxuIiwKKwkJX19m dW5jX18sIG1zZ3MtPmFkZHIpOworCisJLyogd3JpdGUgc2xhdmUgYWRkcmVzcyAqLworCXdy aXRlYihtc2dzLT5hZGRyLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkRSKTsKKwlyZXN1 bHQgPSBpMmNfaW14X3RyeF9jb21wbGV0ZShpMmNfaW14KTsKKwlpZiAocmVzdWx0KQorCQly ZXR1cm4gcmVzdWx0OworCXJlc3VsdCA9IGkyY19pbXhfYWNrZWQoaTJjX2lteCk7CisJaWYg KHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKwlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVy LmRldiwgIjwlcz4gd3JpdGUgZGF0YVxuIiwgX19mdW5jX18pOworCisJLyogd3JpdGUgZGF0 YSAqLworCWZvciAoaSA9IDA7IGkgPCBtc2dzLT5sZW47IGkrKykgeworCQlkZXZfZGJnKCZp MmNfaW14LT5hZGFwdGVyLmRldiwKKwkJCSI8JXM+IHdyaXRlIGJ5dGU6IEIlZD0weCVYXG4i LAorCQkJX19mdW5jX18sIGksIG1zZ3MtPmJ1ZltpXSk7CisJCXdyaXRlYihtc2dzLT5idWZb aV0sIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyRFIpOworCQlyZXN1bHQgPSBpMmNfaW14 X3RyeF9jb21wbGV0ZShpMmNfaW14KTsKKwkJaWYgKHJlc3VsdCkKKwkJCXJldHVybiByZXN1 bHQ7CisJCXJlc3VsdCA9IGkyY19pbXhfYWNrZWQoaTJjX2lteCk7CisJCWlmIChyZXN1bHQp CisJCQlyZXR1cm4gcmVzdWx0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBp MmNfaW14X3JlYWQoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14LCBzdHJ1Y3QgaTJj X21zZyAqbXNncykKK3sKKwlpbnQgaSwgcmVzdWx0OworCXVuc2lnbmVkIGludCB0ZW1wOwor CisJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsCisJCSI8JXM+IHdyaXRlIHNsYXZl IGFkZHJlc3M6IGFkZHI9MHgleFxuIiwKKwkJX19mdW5jX18sIG1zZ3MtPmFkZHIgfCAweDAx KTsKKworCS8qIHdyaXRlIHNsYXZlIGFkZHJlc3MgKi8KKwl3cml0ZWIobXNncy0+YWRkciB8 IDB4MDEsIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyRFIpOworCXJlc3VsdCA9IGkyY19p bXhfdHJ4X2NvbXBsZXRlKGkyY19pbXgpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1 bHQ7CisJcmVzdWx0ID0gaTJjX2lteF9hY2tlZChpMmNfaW14KTsKKwlpZiAocmVzdWx0KQor CQlyZXR1cm4gcmVzdWx0OworCisJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsICI8 JXM+IHNldHVwIGJ1c1xuIiwgX19mdW5jX18pOworCisJLyogc2V0dXAgYnVzIHRvIHJlYWQg ZGF0YSAqLworCXRlbXAgPSByZWFkYihpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsK Kwl0ZW1wICY9IH5JMkNSX01UWDsKKwlpZiAobXNncy0+bGVuIC0gMSkKKwkJdGVtcCAmPSB+ STJDUl9UWEFLOworCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNS KTsKKwlyZWFkYihpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkRSKTsgLyogZHVtbXkgcmVh ZCAqLworCisJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsICI8JXM+IHJlYWQgZGF0 YVxuIiwgX19mdW5jX18pOworCisJLyogcmVhZCBkYXRhICovCisJZm9yIChpID0gMDsgaSA8 IG1zZ3MtPmxlbjsgaSsrKSB7CisJCXJlc3VsdCA9IGkyY19pbXhfdHJ4X2NvbXBsZXRlKGky Y19pbXgpOworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJaWYgKGkgPT0g KG1zZ3MtPmxlbiAtIDEpKSB7CisJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwK KwkJCQkiPCVzPiBjbGVhciBNU1RBXG4iLCBfX2Z1bmNfXyk7CisJCQl0ZW1wID0gcmVhZGIo aTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CisJCQl0ZW1wICY9IH5JMkNSX01TVEE7 CisJCQl3cml0ZWIodGVtcCwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CisJCX0g ZWxzZSBpZiAoaSA9PSAobXNncy0+bGVuIC0gMikpIHsKKwkJCWRldl9kYmcoJmkyY19pbXgt PmFkYXB0ZXIuZGV2LAorCQkJCSI8JXM+IHNldCBUWEFLXG4iLCBfX2Z1bmNfXyk7CisJCQl0 ZW1wID0gcmVhZGIoaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CisJCQl0ZW1wIHw9 IEkyQ1JfVFhBSzsKKwkJCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19J MkNSKTsKKwkJfQorCQltc2dzLT5idWZbaV0gPSByZWFkYihpMmNfaW14LT5iYXNlICsgSU1Y X0kyQ19JMkRSKTsKKwkJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsCisJCQkiPCVz PiByZWFkIGJ5dGU6IEIlZD0weCVYXG4iLAorCQkJX19mdW5jX18sIGksIG1zZ3MtPmJ1Zltp XSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGkyY19pbXhfeGZlcihzdHJ1 Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVt KQoreworCXVuc2lnbmVkIGludCBpLCB0ZW1wOworCWludCByZXN1bHQ7CisJc3RydWN0IGlt eF9pMmNfc3RydWN0ICppMmNfaW14ID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwor CWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPlxuIiwgX19mdW5jX18pOwor CisJLyogQ2hlY2sgb3IgaTJjIGJ1cyBpcyBub3QgYnVzeSAqLworCXJlc3VsdCA9IGkyY19p bXhfYnVzX2J1c3koaTJjX2lteCk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBmYWlsMDsKKwor CS8qIFN0YXJ0IEkyQyB0cmFuc2ZlciAqLworCWkyY19pbXhfc3RhcnQoaTJjX2lteCk7CisK KwkvKiByZWFkL3dyaXRlIGRhdGEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsK KwkJaWYgKGkpIHsKKwkJCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LAorCQkJCSI8 JXM+IHJlcGVhdGVkIHN0YXJ0XG4iLCBfX2Z1bmNfXyk7CisJCQl0ZW1wID0gcmVhZGIoaTJj X2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CisJCQl0ZW1wIHw9IEkyQ1JfUlNUQTsKKwkJ CXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwkJfQorCQlk ZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwKKwkJCSI8JXM+IHRyYW5zZmVyIG1lc3Nh Z2U6ICVkXG4iLCBfX2Z1bmNfXywgaSk7CisJCS8qIHdyaXRlL3JlYWQgZGF0YSAqLworI2lm ZGVmIENPTkZJR19JMkNfREVCVUdfQlVTCisJCXRlbXAgPSByZWFkYihpMmNfaW14LT5iYXNl ICsgSU1YX0kyQ19JMkNSKTsKKwkJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsICI8 JXM+IENPTlRST0w6IElFTj0lZCwgSUlFTj0lZCwgIgorCQkJIk1TVEE9JWQsIE1UWD0lZCwg VFhBSz0lZCwgUlNUQT0lZFxuIiwgX19mdW5jX18sCisJCQkodGVtcCAmIEkyQ1JfSUVOID8g MSA6IDApLCAodGVtcCAmIEkyQ1JfSUlFTiA/IDEgOiAwKSwKKwkJCSh0ZW1wICYgSTJDUl9N U1RBID8gMSA6IDApLCAodGVtcCAmIEkyQ1JfTVRYID8gMSA6IDApLAorCQkJKHRlbXAgJiBJ MkNSX1RYQUsgPyAxIDogMCksICh0ZW1wICYgSTJDUl9SU1RBID8gMSA6IDApKTsKKwkJdGVt cCA9IHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyU1IpOworCQlkZXZfZGJnKCZp MmNfaW14LT5hZGFwdGVyLmRldiwKKwkJCSI8JXM+IFNUQVRVUzogSUNGPSVkLCBJQUFTPSVk LCBJQkI9JWQsICIKKwkJCSJJQUw9JWQsIFNSVz0lZCwgSUlGPSVkLCBSWEFLPSVkXG4iLCBf X2Z1bmNfXywKKwkJCSh0ZW1wICYgSTJTUl9JQ0YgPyAxIDogMCksICh0ZW1wICYgSTJTUl9J QUFTID8gMSA6IDApLAorCQkJKHRlbXAgJiBJMlNSX0lCQiA/IDEgOiAwKSwgKHRlbXAgJiBJ MlNSX0lBTCA/IDEgOiAwKSwKKwkJCSh0ZW1wICYgSTJTUl9TUlcgPyAxIDogMCksICh0ZW1w ICYgSTJTUl9JSUYgPyAxIDogMCksCisJCQkodGVtcCAmIEkyU1JfUlhBSyA/IDEgOiAwKSk7 CisjZW5kaWYKKwkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkKKwkJCXJlc3VsdCA9 IGkyY19pbXhfcmVhZChpMmNfaW14LCAmbXNnc1tpXSk7CisJCWVsc2UKKwkJCXJlc3VsdCA9 IGkyY19pbXhfd3JpdGUoaTJjX2lteCwgJm1zZ3NbaV0pOworCX0KKworZmFpbDA6CisJLyog U3RvcCBJMkMgdHJhbnNmZXIgKi8KKwlpMmNfaW14X3N0b3AoaTJjX2lteCk7CisKKwlkZXZf ZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwgIjwlcz4gZXhpdCB3aXRoOiAlczogJWRcbiIs IF9fZnVuY19fLAorCQkocmVzdWx0IDwgMCkgPyAiZXJyb3IiIDogInN1Y2Nlc3MgbXNnIiwK KwkJKHJlc3VsdCA8IDApID8gcmVzdWx0IDogbnVtKTsKKwlyZXR1cm4gKHJlc3VsdCA8IDAp ID8gcmVzdWx0IDogbnVtOworfQorCitzdGF0aWMgdTMyIGkyY19pbXhfZnVuYyhzdHJ1Y3Qg aTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQyB8IEkyQ19G VU5DX1NNQlVTX0VNVUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBpMmNf aW14X2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyCT0gaTJjX2lteF94ZmVyLAorCS5mdW5jdGlv bmFsaXR5CT0gaTJjX2lteF9mdW5jLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaTJjX2lt eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBpbXhf aTJjX3N0cnVjdCAqaTJjX2lteDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl2b2lkIF9f aW9tZW0gKmJhc2U7CisJaW50IGlycTsKKwlpbnQgcmVzX3NpemU7CisJaW50IHJldDsKKwor CWRldl9kYmcoJnBkZXYtPmRldiwgIjwlcz5cbiIsIF9fZnVuY19fKTsKKworCXJlcyA9IHBs YXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaXJxID0g cGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZw ZGV2LT5kZXYsICJjYW4ndCBnZXQgZGV2aWNlIHJlc291cmNlc1xuIik7CisJCXJldHVybiAt RU5PREVWOworCX0KKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJj YW4ndCBnZXQgaXJxIG51bWJlclxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXNf c2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CisJaWYgKCFyZXF1ZXN0X21lbV9y ZWdpb24ocmVzLT5zdGFydCwgcmVzX3NpemUsIHJlcy0+bmFtZSkpIHsKKwkJZGV2X2Vycigm cGRldi0+ZGV2LCAiY2FuJ3QgYWxsb2NhdGUgJWQgYnl0ZXMgYXQgJWQgYWRkcmVzc1xuIiwK KwkJCXJlc19zaXplLCByZXMtPnN0YXJ0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWJh c2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc19zaXplKTsKKwlpZiAoIWJhc2UpIHsKKwkJ ZGV2X2VycigmcGRldi0+ZGV2LCAiaW9yZW1hcCBmYWlsZWRcbiIpOworCQlyZXQgPSAtRUlP OworCQlnb3RvIGZhaWwwOworCX0KKwlpMmNfaW14ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0 IGlteF9pMmNfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpMmNfaW14KSB7CisJCWRl dl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGFsbG9jYXRlIGludGVyZmFjZVxuIik7CisJCXJl dCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDE7CisJfQorCisJLyogU2V0dXAgaTJjX2lteCBk cml2ZXIgc3RydWN0dXJlICovCisJc3RyY3B5KGkyY19pbXgtPmFkYXB0ZXIubmFtZSwgcGRl di0+bmFtZSk7CisJaTJjX2lteC0+YWRhcHRlci5vd25lcgkJPSBUSElTX01PRFVMRTsKKwlp MmNfaW14LT5hZGFwdGVyLmFsZ28JCT0gJmkyY19pbXhfYWxnbzsKKwlpMmNfaW14LT5hZGFw dGVyLmRldi5wYXJlbnQJPSAmcGRldi0+ZGV2OworCWkyY19pbXgtPmFkYXB0ZXIuY2xhc3Mg CQk9IEkyQ19DTEFTU19IV01PTjsKKwlpMmNfaW14LT5hZGFwdGVyLm5yIAkJPSBwZGV2LT5p ZDsKKwlpMmNfaW14LT5pcnEJCQk9IGlycTsKKwlpMmNfaW14LT5iYXNlCQkJPSBiYXNlOwor CWkyY19pbXgtPnJlcwkJCT0gcmVzOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmaTJjX2lt eC0+cXVldWUpOworCisJLyogU2V0IHVwIHBsYXRmb3JtIGRyaXZlciBkYXRhICovCisJcGxh dGZvcm1fc2V0X2RydmRhdGEocGRldiwgaTJjX2lteCk7CisKKwlyZXQgPSByZXF1ZXN0X2ly cShpMmNfaW14LT5pcnEsIGkyY19pbXhfaXNyLAorCQlJUlFGX0RJU0FCTEVELCBwZGV2LT5u YW1lLCBpMmNfaW14KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNh bm5vdCBjbGFpbSBpcnEgJWRcbiIsIGkyY19pbXgtPmlycSk7CisJCWdvdG8gZmFpbDI7CisJ fQorCisJLyogU2V0IHVwIGFkYXB0ZXIgZGF0YSAqLworCWkyY19zZXRfYWRhcGRhdGEoJmky Y19pbXgtPmFkYXB0ZXIsIGkyY19pbXgpOworCisJLyogU2V0IHVwIGNsb2NrIGRpdmlkZXIg Ki8KKwlpMmNfaW14X3NldF9jbGsoaTJjX2lteCwgY2xrZnJlcSk7CisKKwkvKiBTZXQgdXAg SS9PIHBpbnMgZm9yIEkyQyovCisJaW14X2dwaW9fbW9kZShQQTE1X1BGX0kyQ19TREEpOwor CWlteF9ncGlvX21vZGUoUEExNl9QRl9JMkNfU0NMKTsKKworCS8qIFNldCB1cCBjaGlwIHJl Z2lzdGVycyB0byBkZWZhdWx0cyAqLworCXdyaXRlYigwLCBpMmNfaW14LT5iYXNlICsgSU1Y X0kyQ19JMkNSKTsKKwl3cml0ZWIoMCwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJTUik7 CisKKworCS8qIEFkZCBJMkMgYWRhcHRlciAqLworCXJldCA9IGkyY19hZGRfbnVtYmVyZWRf YWRhcHRlcigmaTJjX2lteC0+YWRhcHRlcik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vy cigmcGRldi0+ZGV2LCAicmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbDM7 CisJfQorCisJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsICJjbGFpbWVkIGlycSAl ZFxuIiwgaTJjX2lteC0+aXJxKTsKKwlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwg ImRldmljZSByZXNvdXJjZXMgZnJvbSAweCV4IHRvIDB4JXhcbiIsCisJCWkyY19pbXgtPnJl cy0+c3RhcnQsIGkyY19pbXgtPnJlcy0+ZW5kKTsKKwlkZXZfZGJnKCZpMmNfaW14LT5hZGFw dGVyLmRldiwgImFsbG9jYXRlZCAlZCBieXRlcyBhdCAweCV4IFxuIiwKKwkJcmVzX3NpemUs IGkyY19pbXgtPnJlcy0+c3RhcnQpOworCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2 LCAiYWRhcHRlciBuYW1lOiBcIiVzXCJcbiIsCisJCWkyY19pbXgtPmFkYXB0ZXIubmFtZSk7 CisJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsICJJTVggSTJDIGFkYXB0ZXIgcmVn aXN0ZXJlZFxuIik7CisKKwlyZXR1cm4gMDsgICAvKiBSZXR1cm4gT0sgKi8KKworZmFpbDM6 CisJZnJlZV9pcnEoaTJjX2lteC0+aXJxLCBpMmNfaW14KTsKK2ZhaWwyOgorCXBsYXRmb3Jt X3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKGkyY19pbXgpOworZmFpbDE6CisJ aW91bm1hcChpMmNfaW14LT5iYXNlKTsKK2ZhaWwwOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihy ZXMtPnN0YXJ0LCByZXNfc2l6ZSk7CisJcmV0dXJuIHJldDsgLyogUmV0dXJuIGVycm9yIG51 bWJlciAqLworfQorCitzdGF0aWMgaW50IF9fZXhpdCBpMmNfaW14X3JlbW92ZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJj X2lteCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJLyogcmVtb3ZlIGFkYXB0 ZXIgKi8KKwlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwgImFkYXB0ZXIgcmVtb3Zl ZFxuIik7CisJaTJjX2RlbF9hZGFwdGVyKCZpMmNfaW14LT5hZGFwdGVyKTsKKwlwbGF0Zm9y bV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCS8qIGZyZWUgaW50ZXJydXB0ICovCisJ ZnJlZV9pcnEoaTJjX2lteC0+aXJxLCBpMmNfaW14KTsKKworCS8qIHNldHVwIGNoaXAgcmVn aXN0ZXJzIHRvIGRlZmF1bHRzICovCisJd3JpdGViKDAsIGkyY19pbXgtPmJhc2UgKyBJTVhf STJDX0lBRFIpOworCXdyaXRlYigwLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JRkRSKTsK Kwl3cml0ZWIoMCwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CisJd3JpdGViKDAs IGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyU1IpOworCisJLyogcmVsZWFzZSBtZW1vcnkg Ki8KKwlyZWxlYXNlX21lbV9yZWdpb24oaTJjX2lteC0+cmVzLT5zdGFydCwgaTJjX2lteC0+ cmVzLT5lbmQgLSBpMmNfaW14LT5yZXMtPnN0YXJ0ICsgMSk7CisJaW91bm1hcChpMmNfaW14 LT5iYXNlKTsKKwlrZnJlZShpMmNfaW14KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaTJjX2lteF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGky Y19pbXhfcHJvYmUsCisJLnJlbW92ZQkJPSBpMmNfaW14X3JlbW92ZSwKKwkuZHJpdmVyCT0g eworCQkubmFtZQk9IERSSVZFUl9OQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9 Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpMmNfYWRhcF9pbXhfaW5pdCh2b2lkKQorewor CXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmkyY19pbXhfZHJpdmVyLCBpMmNfaW14 X3Byb2JlKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGkyY19hZGFwX2lteF9leGl0KHZv aWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmkyY19pbXhfZHJpdmVyKTsK K30KKworbW9kdWxlX2luaXQoaTJjX2FkYXBfaW14X2luaXQpOworbW9kdWxlX2V4aXQoaTJj X2FkYXBfaW14X2V4aXQpOworCittb2R1bGVfcGFyYW0oY2xrZnJlcSwgdWludCwgU19JUlVH Tyk7CitNT0RVTEVfUEFSTV9ERVNDKGNsa2ZyZXEsICJkZXNpcmVkIElNWCBJMkMgQ2xvY2sg UmF0ZSBpbiBIeiIpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9S KCJEYXJpdXMgQXVndWxpcyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMgYWRhcHRlciBk cml2ZXIgZm9yIElNWCBJMkMgYnVzIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJJ VkVSX05BTUUpOwpJbmRleDogbGludXgtMi42LjI2L2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29u ZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGxpbnV4LTIuNi4yNi5vcmlnL2RyaXZlcnMvaTJjL2J1 c3Nlcy9LY29uZmlnCisrKyBsaW51eC0yLjYuMjYvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25m aWcKQEAgLTI1Nyw2ICsyNTcsMTYgQEAgY29uZmlnIEkyQ19JQk1fSUlDCiAJICBUaGlzIGRy aXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxl CiAJICB3aWxsIGJlIGNhbGxlZCBpMmMtaWJtX2lpYy4KIAorY29uZmlnIEkyQ19JTVgKKwl0 cmlzdGF0ZSAiSU1YIEkyQyBpbnRlcmZhY2UiCisJZGVwZW5kcyBvbiBBUkNIX0lNWAorCWhl bHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBJSUMgYnVzIGNvbnRy b2xsZXIgb24KKwkgIHRoZSBGcmVlc2NhbGUgaS5NWEwgYW5kIGkuTVgxIHByb2Nlc3NvcnMu CisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYg c28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGkyYy1pbXguCisKIGNvbmZpZyBJ MkNfSU9QM1hYCiAJdHJpc3RhdGUgIkludGVsIElPUHgzeHggYW5kIElYUDR4eCBvbi1jaGlw IEkyQyBpbnRlcmZhY2UiCiAJZGVwZW5kcyBvbiBBUkNIX0lPUDMyWCB8fCBBUkNIX0lPUDMz WCB8fCBBUkNIX0lYUDRYWCB8fCBBUkNIX0lPUDEzWFgKSW5kZXg6IGxpbnV4LTIuNi4yNi9k cml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGludXgtMi42 LjI2Lm9yaWcvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCisrKyBsaW51eC0yLjYuMjYv ZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCkBAIC0xOCw2ICsxOCw3IEBAIG9iai0kKENP TkZJR19JMkNfSFlEUkEpCQkrPSBpMmMtaHlkcmEubwogb2JqLSQoQ09ORklHX0kyQ19JODAx KQkJKz0gaTJjLWk4MDEubwogb2JqLSQoQ09ORklHX0kyQ19JODEwKQkJKz0gaTJjLWk4MTAu bwogb2JqLSQoQ09ORklHX0kyQ19JQk1fSUlDKQkrPSBpMmMtaWJtX2lpYy5vCitvYmotJChD T05GSUdfSTJDX0lNWCkJCSs9IGkyYy1pbXgubwogb2JqLSQoQ09ORklHX0kyQ19JT1AzWFgp CSs9IGkyYy1pb3AzeHgubwogb2JqLSQoQ09ORklHX0kyQ19JWFAyMDAwKQkrPSBpMmMtaXhw MjAwMC5vCiBvYmotJChDT05GSUdfSTJDX1BPV0VSTUFDKQkrPSBpMmMtcG93ZXJtYWMubwo= --------------090303030406020009080406 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ i2c mailing list i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org http://lists.lm-sensors.org/mailman/listinfo/i2c --------------090303030406020009080406--