From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Date: Tue, 09 Oct 2007 13:02:38 +0000 Subject: [lm-sensors] PATCH: hwmon-fschmd-new-driver-v3.patch Message-Id: <470B7BEE.1010004@hhs.nl> MIME-Version: 1 Content-Type: multipart/mixed; boundary="------------020204000403060304000903" List-Id: To: lm-sensors@vger.kernel.org This is a multi-part message in MIME format. --------------020204000403060304000903 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi all, This patch adds a new merged driver for FSC sensor chips, it merges the fscher and fscpos drivers and adds support for the FSC Scylla, Heracles and Heimdall chips. This 3rd version of the patch has a few issues found during review of the fixed 2nd version, thanks to Jean Delvare! Signed-off-by: Hans de Goede --- Jean, I've also attached a diff to the previous patch for easy review. Mark please apply once acked by Jean. Regards, Hans --------------020204000403060304000903 Content-Type: text/x-patch; name="hwmon-fschmd-new-driver-v3.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="hwmon-fschmd-new-driver-v3.patch" VGhpcyBwYXRjaCBhZGRzIGEgbmV3IG1lcmdlZCBkcml2ZXIgZm9yIEZTQyBzZW5zb3IgY2hp cHMsIGl0IG1lcmdlcyB0aGUgZnNjaGVyCmFuZCBmc2Nwb3MgZHJpdmVycyBhbmQgYWRkcyBz dXBwb3J0IGZvciB0aGUgRlNDIFNjeWxsYSwgSGVyYWNsZXMgYW5kIEhlaW1kYWxsCmNoaXBz LgoKVGhpcyAzcmQgdmVyc2lvbiBvZiB0aGUgcGF0Y2ggaGFzIGEgZmV3IGlzc3VlcyBmb3Vu ZCBkdXJpbmcgcmV2aWV3IG9mIHRoZSBmaXhlZAoybmQgdmVyc2lvbiwgdGhhbmtzIHRvIEpl YW4gRGVsdmFyZSEKClNpZ25lZC1vZmYtYnk6IEhhbnMgZGUgR29lZGUgPGoudy5yLmRlZ29l ZGVAaGhzLm5sPgpkaWZmIC11cCBsaW51eC0yLjYuMjIueDg2XzY0L2RyaXZlcnMvaHdtb24v S2NvbmZpZy5mc2NobWQgbGludXgtMi42LjIyLng4Nl82NC9kcml2ZXJzL2h3bW9uL0tjb25m aWcKLS0tIGxpbnV4LTIuNi4yMi54ODZfNjQvZHJpdmVycy9od21vbi9LY29uZmlnLmZzY2ht ZAkyMDA3LTEwLTA3IDE2OjMyOjU2LjAwMDAwMDAwMCArMDIwMAorKysgbGludXgtMi42LjIy Lng4Nl82NC9kcml2ZXJzL2h3bW9uL0tjb25maWcJMjAwNy0xMC0wNyAxNjo0MzoxMi4wMDAw MDAwMDAgKzAyMDAKQEAgLTIzNiw2ICsyMzYsMjAgQEAgY29uZmlnIFNFTlNPUlNfRlNDUE9T CiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNv LCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBmc2Nwb3MuCiAKK2NvbmZpZyBTRU5T T1JTX0ZTQ0hNRAorCXRyaXN0YXRlICJGU0MgUG9zZWlkb24sIFNjeWxsYSwgSGVybWVzLCBI ZWltZGFsbCBhbmQgSGVyYWNsZXMiCisJZGVwZW5kcyBvbiBYODYgJiYgSTJDICYmIEVYUEVS SU1FTlRBTAorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0 IGZvciB2YXJpb3VzIEZ1aml0c3UgU2llbWVucworCSAgQ29tcHV0ZXJzIHNlbnNvciBjaGlw cy4KKworCSAgVGhpcyBpcyBhIG5ldyBtZXJnZWQgZHJpdmVyIGZvciBGU0Mgc2Vuc29yIGNo aXBzIHdoaWNoIGlzIGludGVuZGVkCisJICBhcyBhIHJlcGxhY21lbnQgZm9yIHRoZSBmc2Nw b3MsIGZzY3NjeSBhbmQgZnNjaGVyIGRyaXZlcnMgYW5kIGFkZHMKKwkgIHN1cHBvcnQgZm9y IHNldmVyYWwgb3RoZXIgRkNTIHNlbnNvciBjaGlwcy4KKworCSAgVGhpcyBkcml2ZXIgY2Fu IGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2ls bCBiZSBjYWxsZWQgZnNjaG1kLgorCiBjb25maWcgU0VOU09SU19HTDUxOFNNCiAJdHJpc3Rh dGUgIkdlbmVzeXMgTG9naWMgR0w1MThTTSIKIAlkZXBlbmRzIG9uIEkyQwpkaWZmIC11cCAv ZGV2L251bGwgbGludXgtMi42LjIyLng4Nl82NC9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jCi0t LSAvZGV2L251bGwJMjAwNy0xMC0wNyAyMTo1ODozNi4yNjcwMDc5MzMgKzAyMDAKKysrIGxp bnV4LTIuNi4yMi54ODZfNjQvZHJpdmVycy9od21vbi9mc2NobWQuYwkyMDA3LTEwLTA3IDIw OjU3OjE1LjAwMDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDc3OCBAQAorLyogZnNjaG1kLmMK KyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSGFucyBkZSBHb2VkZSA8ai53LnIuZGVnb2Vk ZUBoaHMubmw+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1i cmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyoKKyAqICBNZXJnZWQgRnVqaXRzdSBT aWVtZW5zIGh3bW9uIGRyaXZlciwgc3VwcG9ydGluZyB0aGUgUG9zZWlkb24sIEhlcm1lcywK KyAqICBTY3lsbGEsIEhlcmFjbGVzIGFuZCBIZWltZGFsbCBjaGlwcworICoKKyAqICBCYXNl ZCBvbiB0aGUgb3JpZ2luYWwgMi40IGZzY3NjeSwgMi42IGZzY3BvcywgMi42IGZzY2hlciBh bmQgMi42CisgKiAgKGNhbmRpZGF0ZSkgZnNjaG1kIGRyaXZlcnM6CisgKiAgQ29weXJpZ2h0 IChDKSAyMDA2IFRoaWxvIENlc3RvbmFybyAKKyAqCQkJPHRoaWxvLmNlc3RvbmFyby5leHRl cm5hbEBmdWppdHN1LXNpZW1lbnMuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAw NSBTdGVmYW4gT3R0IDxzdGVmYW5AZGVzaXJlLmNoPgorICogIENvcHlyaWdodCAoQykgMjAw MywgMjAwNCBSZWluaGFyZCBOaXNzbCA8cm5pc3NsQGdteC5kZT4KKyAqICBDb3B5cmlnaHQg KGMpIDIwMDEgTWFydGluIEtub2JsYXVjaCA8bWtuQHRlcmFwb3J0LmRlLCBrbm9iaUBrbm9i aXNvZnQuZGU+CisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIEhlcm1hbm4gSnVuZyA8aGVqQG9k bi5kZT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGlu dXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9q aWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaHdt b24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4 L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3lz ZnMuaD4KKworLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9y dCBub3JtYWxfaTJjW10gPSB7IDB4NzMsIEkyQ19DTElFTlRfRU5EIH07CisKKy8qIEluc21v ZCBwYXJhbWV0ZXJzICovCitJMkNfQ0xJRU5UX0lOU01PRF81KGZzY3BvcywgZnNjaGVyLCBm c2NzY3ksIGZzY2hyYywgZnNjaG1kKTsKKworLyoKKyAqIFRoZSBGU0NITUQgcmVnaXN0ZXJz IGFuZCBvdGhlciBkZWZpbmVzCisgKi8KKworLyogY2hpcCBpZGVudGlmaWNhdGlvbiAqLwor I2RlZmluZSBGU0NITURfUkVHX0lERU5UXzAJCTB4MDAKKyNkZWZpbmUgRlNDSE1EX1JFR19J REVOVF8xCQkweDAxCisjZGVmaW5lIEZTQ0hNRF9SRUdfSURFTlRfMgkJMHgwMgorI2RlZmlu ZSBGU0NITURfUkVHX1JFVklTSU9OCQkweDAzCisKKy8qIGdsb2JhbCBjb250cm9sIGFuZCBz dGF0dXMgKi8KKyNkZWZpbmUgRlNDSE1EX1JFR19FVkVOVF9TVEFURQkJMHgwNAorI2RlZmlu ZSBGU0NITURfUkVHX0NPTlRST0wJCTB4MDUKKworI2RlZmluZSBGU0NITURfQ09OVFJPTF9B TEVSVF9MRURfTUFTSwkweDAxCisKKy8qIHdhdGNoZG9nIChzdXBwb3J0IHRvIGJlIGltcGxl bWVudGVkKSAqLworI2RlZmluZSBGU0NITURfUkVHX1dET0dfUFJFU0VUCQkweDI4CisjZGVm aW5lIEZTQ0hNRF9SRUdfV0RPR19TVEFURQkJMHgyMworI2RlZmluZSBGU0NITURfUkVHX1dE T0dfQ09OVFJPTAkJMHgyMQorCisvKiB2b2x0YWdlcywgd2VpcmQgb3JkZXIgaXMgdG8ga2Vl cCB0aGUgc2FtZSBvcmRlciBhcyB0aGUgb2xkIGRyaXZlcnMgKi8KK3N0YXRpYyBjb25zdCB1 OCBGU0NITURfUkVHX1ZPTFRbM10gPSB7IDB4NDUsIDB4NDIsIDB4NDggfTsKKworLyogbWlu aW11bSBwd20gYXQgd2hpY2ggdGhlIGZhbiBpcyBkcml2ZW4gKHB3bSBjYW4gYnkgaW5jcmVh c2VkIGRlcGVuZGluZyBvbgorICAgdGhlIHRlbXAuIE5vdGljZSB0aGF0IGZvciB0aGUgc2N5 IHNvbWUgZmFucyBzaGFyZSB0aGVyZSBtaW5pbXVtIHNwZWVkLgorICAgQWxzbyBub3RpY2Ug dGhhdCB3aXRoIHRoZSBzY3kgdGhlIHNlbnNvciBvcmRlciBpcyBkaWZmZXJlbnQgdGhlbiB3 aXRoIHRoZQorICAgb3RoZXIgY2hpcHMsIHRoaXMgb3JkZXIgd2FzIGluIHRoZSAyLjQgZHJp dmVyIGFuZCBrZXB0IGZvciBjb25zaXN0ZW5jeS4gKi8KK3N0YXRpYyBjb25zdCB1OCBGU0NI TURfUkVHX0ZBTl9NSU5bNV1bNl0gPSB7CisJeyAweDU1LCAweDY1IH0sCQkJCQkvKiBwb3Mg Ki8KKwl7IDB4NTUsIDB4NjUsIDB4YjUgfSwJCQkJLyogaGVyICovCisJeyAweDY1LCAweDY1 LCAweDU1LCAweGE1LCAweDU1LCAweGE1IH0sCQkvKiBzY3kgKi8KKwl7IDB4NTUsIDB4NjUs IDB4YTUsIDB4YjUgfSwJCQkvKiBocmMgKi8KKwl7IDB4NTUsIDB4NjUsIDB4YTUsIDB4YjUs IDB4YzUgfSwJCS8qIGhtZCAqLworfTsKKworLyogYWN0dWFsIGZhbiBzcGVlZCAqLwkKK3N0 YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX0ZBTl9BQ1RbNV1bNl0gPSB7CisJeyAweDBlLCAw eDZiLCAweGFiIH0sCQkJCS8qIHBvcyAqLworCXsgMHgwZSwgMHg2YiwgMHhiYiB9LAkJCQkv KiBoZXIgKi8KKwl7IDB4NmIsIDB4NmMsIDB4MGUsIDB4YWIsIDB4NWMsIDB4YmIgfSwJCS8q IHNjeSAqLworCXsgMHgwZSwgMHg2YiwgMHhhYiwgMHhiYiB9LAkJCS8qIGhyYyAqLworCXsg MHg1YiwgMHg2YiwgMHhhYiwgMHhiYiwgMHhjYiB9LAkJLyogaG1kICovCit9OworCisvKiBm YW4gc3RhdHVzIHJlZ2lzdGVycyAqLworc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfRkFO X1NUQVRFWzVdWzZdID0geworCXsgMHgwZCwgMHg2MiwgMHhhMiB9LAkJCQkvKiBwb3MgKi8K Kwl7IDB4MGQsIDB4NjIsIDB4YjIgfSwJCQkJLyogaGVyICovCisJeyAweDYyLCAweDYxLCAw eDBkLCAweGEyLCAweDUyLCAweGIyIH0sCQkvKiBzY3kgKi8KKwl7IDB4MGQsIDB4NjIsIDB4 YTIsIDB4YjIgfSwJCQkvKiBocmMgKi8KKwl7IDB4NTIsIDB4NjIsIDB4YTIsIDB4YjIsIDB4 YzIgfSwJCS8qIGhtZCAqLworfTsKKwkKKy8qIGZhbiByaXBwbGUgLyBkaXZpZGVyIHJlZ2lz dGVycyAqLwkKK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX0ZBTl9SSVBQTEVbNV1bNl0g PSB7CisJeyAweDBmLCAweDZmLCAweGFmIH0sCQkJCS8qIHBvcyAqLworCXsgMHgwZiwgMHg2 ZiwgMHhiZiB9LAkJCQkvKiBoZXIgKi8KKwl7IDB4NmYsIDB4NmYsIDB4MGYsIDB4YWYsIDB4 MGYsIDB4YmYgfSwJCS8qIHNjeSAqLworCXsgMHgwZiwgMHg2ZiwgMHhhZiwgMHhiZiB9LAkJ CS8qIGhyYyAqLworCXsgMHg1ZiwgMHg2ZiwgMHhhZiwgMHhiZiwgMHhjZiB9LAkJLyogaG1k ICovCit9OworCitzdGF0aWMgY29uc3QgaW50IEZTQ0hNRF9OT19GQU5fU0VOU09SU1s1XSA9 IHsgMywgMywgNiwgNCwgNSB9OworCisvKiBGYW4gc3RhdHVzIHJlZ2lzdGVyIGJpdG1hc2tz ICovCisjZGVmaW5lIEZTQ0hNRF9GQU5fQUxBUk1fTUFTSwkJMHgwNCAvKiBjYWxsZWQgZmF1 bHQgYnkgRlNDISAqLworI2RlZmluZSBGU0NITURfRkFOX05PVF9QUkVTRU5UX01BU0sJMHgw OCAvKiBub3QgZG9jdW1lbnRlZCAqLworCisKKy8qIGFjdHVhbCB0ZW1wZXJhdHVyZSByZWdp c3RlcnMgKi8KK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX1RFTVBfQUNUWzVdWzVdID0g eworCXsgMHg2NCwgMHgzMiwgMHgzNSB9LAkJCQkvKiBwb3MgKi8KKwl7IDB4NjQsIDB4MzIs IDB4MzUgfSwJCQkJLyogaGVyICovCisJeyAweDY0LCAweEQwLCAweDMyLCAweDM1IH0sCQkJ Lyogc2N5ICovCisJeyAweDY0LCAweDMyLCAweDM1IH0sCQkJCS8qIGhyYyAqLworCXsgMHg3 MCwgMHg4MCwgMHg5MCwgMHhkMCwgMHhlMCB9LAkJLyogaG1kICovCit9OworCisvKiB0ZW1w ZXJhdHVyZSBzdGF0ZSByZWdpc3RlcnMgKi8KK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVH X1RFTVBfU1RBVEVbNV1bNV0gPSB7CisJeyAweDcxLCAweDgxLCAweDkxIH0sCQkJCS8qIHBv cyAqLworCXsgMHg3MSwgMHg4MSwgMHg5MSB9LAkJCQkvKiBoZXIgKi8KKwl7IDB4NzEsIDB4 ZDEsIDB4ODEsIDB4OTEgfSwJCQkvKiBzY3kgKi8KKwl7IDB4NzEsIDB4ODEsIDB4OTEgfSwJ CQkJLyogaHJjICovCisJeyAweDcxLCAweDgxLCAweDkxLCAweGQxLCAweGUxIH0sCQkvKsKg aG1kICovCit9OworCisvKiB0ZW1wZXJhdHVyZSBoaWdoIGxpbWl0IHJlZ2lzdGVycywgRlND IGRvZXMgbm90IGRvY3VtZW50IHRoZXNlLiBQcm92ZW4gdG8gYmUKKyAgIHRoZXJlIHdpdGgg ZmllbGQgdGVzdGluZyBvbiB0aGUgZnNjaGVyIGFuZCBmc2NocmMsIGFscmVhZHkgc3VwcG9y dGVkIC8gdXNlZAorICAgaW4gdGhlIGZzY3NjeSAyLjQgZHJpdmVyLiBGU0MgaGFzIGNvbmZp cm1lZCB0aGF0IHRoZSBmc2NobWQgaGFzIHJlZ2lzdGVycworICAgYXQgdGhlc2UgYWRkcmVz c2VzLCBidXQgZG9lc24ndCB3YW50IHRvIGNvbmZpcm0gdGhleSBhcmUgdGhlIHNhbWUgYXMg d2l0aAorICAgdGhlIGZzY2hlcj8/ICovCitzdGF0aWMgY29uc3QgdTggRlNDSE1EX1JFR19U RU1QX0xJTUlUWzVdWzVdID0geworCXsgMCwgMCwgMCB9LAkJCQkJLyogcG9zICovCisJeyAw eDc2LCAweDg2LCAweDk2IH0sCQkJCS8qIGhlciAqLworCXsgMHg3NiwgMHhkNiwgMHg4Niwg MHg5NiB9LAkJCS8qIHNjeSAqLworCXsgMHg3NiwgMHg4NiwgMHg5NiB9LAkJCQkvKiBocmMg Ki8KKwl7IDB4NzYsIDB4ODYsIDB4OTYsIDB4ZDYsIDB4ZTYgfSwJCS8qwqBobWQgKi8KK307 CisKKy8qIFRoZXNlIHdlcmUgZm91bmQgdGhyb3VnaCBleHBlcmltZW50aW5nIHdpdGggYW4g ZnNjaGVyLCBjdXJyZW50bHkgdGhleSBhcmUKKyAgIG5vdCB1c2VkLCBidXQgd2Uga2VlcCB0 aGVtIGFyb3VuZCBmb3IgZnV0dXJlIHJlZmVyZW5jZS4KK3N0YXRpYyBjb25zdCB1OCBGU0NI RVJfUkVHX1RFTVBfQVVUT1AxW10gPQl7IDB4NzMsIDB4ODMsIDB4OTMgfTsKK3N0YXRpYyBj b25zdCB1OCBGU0NIRVJfUkVHX1RFTVBfQVVUT1AyW10gPQl7IDB4NzUsIDB4ODUsIDB4OTUg fTsgKi8KKworc3RhdGljIGNvbnN0IGludCBGU0NITURfTk9fVEVNUF9TRU5TT1JTWzVdID0g eyAzLCAzLCA0LCAzLCA1IH07CisKKy8qIHRlbXAgc3RhdHVzIHJlZ2lzdGVyIGJpdG1hc2tz ICovCisjZGVmaW5lIEZTQ0hNRF9URU1QX1dPUktJTkdfTUFTSwkweDAxCisjZGVmaW5lIEZT Q0hNRF9URU1QX0FMRVJUX01BU0sJCTB4MDIKKy8qIHRoZXJlIG9ubHkgcmVhbGx5IGlzIGFu IGFsYXJtIGlmIHRoZSBzZW5zb3IgaXMgd29ya2luZyBhbmQgYWxlcnQgPT0gMSAqLworI2Rl ZmluZSBGU0NITURfVEVNUF9BTEFSTV9NQVNLIFwKKwkoRlNDSE1EX1RFTVBfV09SS0lOR19N QVNLIHwgRlNDSE1EX1RFTVBfQUxFUlRfTUFTSykKKworLyogb3VyIGRyaXZlciBuYW1lICov CisjZGVmaW5lIEZTQ0hNRF9OQU1FICJmc2NobWQiCisKKy8qCisgKiBGdW5jdGlvbnMgZGVj bGFyYXRpb25zCisgKi8KKworc3RhdGljIGludCBmc2NobWRfYXR0YWNoX2FkYXB0ZXIoc3Ry dWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgZnNjaG1kX2RldGFjaF9j bGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CitzdGF0aWMgc3RydWN0IGZzY2ht ZF9kYXRhICpmc2NobWRfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisv KgorICogRHJpdmVyIGRhdGEgKGNvbW1vbiB0byBhbGwgY2xpZW50cykKKyAqLworCitzdGF0 aWMgc3RydWN0IGkyY19kcml2ZXIgZnNjaG1kX2RyaXZlciA9IHsKKwkuZHJpdmVyID0gewor CQkubmFtZQk9IEZTQ0hNRF9OQU1FLAorCX0sCisJLmF0dGFjaF9hZGFwdGVyCT0gZnNjaG1k X2F0dGFjaF9hZGFwdGVyLAorCS5kZXRhY2hfY2xpZW50CT0gZnNjaG1kX2RldGFjaF9jbGll bnQsCit9OworCisvKgorICogQ2xpZW50IGRhdGEgKGVhY2ggY2xpZW50IGdldHMgaXRzIG93 bikKKyAqLworCitzdHJ1Y3QgZnNjaG1kX2RhdGEgeworCXN0cnVjdCBpMmNfY2xpZW50IGNs aWVudDsKKwlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisJc3RydWN0IG11dGV4IHVwZGF0 ZV9sb2NrOworCWludCBraW5kOworCWNoYXIgdmFsaWQ7IC8qIHplcm8gdW50aWwgZm9sbG93 aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsg LyogaW4gamlmZmllcyAqLworCisJLyogcmVnaXN0ZXIgdmFsdWVzICovCisJdTggZ2xvYmFs X2NvbnRyb2w7CS8qIGdsb2JhbCBjb250cm9sIHJlZ2lzdGVyICovCisJdTggdm9sdFszXTsJ CS8qIDEyLCA1LCBiYXR0ZXJ5IHZvbHRhZ2UgKi8gCisJdTggdGVtcF9hY3RbNV07CQkvKiB0 ZW1wZXJhdHVyZSAqLworCXU4IHRlbXBfc3RhdHVzWzVdOwkvKiBzdGF0dXMgb2Ygc2Vuc29y ICovCisJdTggdGVtcF9tYXhbNV07CQkvKiBoaWdoIHRlbXAgbGltaXQsIG5vdGljZTogdW5k b2N1bWVudGVkISAqLworCXU4IGZhbl9hY3RbNl07CQkvKiBmYW5zIHJldm9sdXRpb25zIHBl ciBzZWNvbmQgKi8KKwl1OCBmYW5fc3RhdHVzWzZdOwkvKiBmYW4gc3RhdHVzICovCisJdTgg ZmFuX21pbls2XTsJCS8qIGZhbiBtaW4gdmFsdWUgZm9yIHJwcyAqLworCXU4IGZhbl9yaXBw bGVbNl07CS8qIGRpdmlkZXIgZm9yIHJwcyAqLworfTsKKworLyoKKyAqIFN5c2ZzIGF0dHIg c2hvdyAvIHN0b3JlIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfaW5f dmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpk ZXZhdHRyLCBjaGFyICpidWYpCit7CisJY29uc3QgaW50IG1heF9yZWFkaW5nWzNdID0geyAx NDIwMCwgNjYwMCwgMzMwMCB9OworCWludCBpbmRleCA9IHRvX3NlbnNvcl9kZXZfYXR0cihk ZXZhdHRyKS0+aW5kZXg7CisJc3RydWN0IGZzY2htZF9kYXRhICpkYXRhID0gZnNjaG1kX3Vw ZGF0ZV9kZXZpY2UoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoZGF0 YS0+dm9sdFtpbmRleF0gKgorCQltYXhfcmVhZGluZ1tpbmRleF0gKyAxMjgpIC8gMjU1KTsK K30KKworCisjZGVmaW5lIFRFTVBfRlJPTV9SRUcodmFsKQkoKCh2YWwpIC0gMTI4KSAqIDEw MDApCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF92YWx1ZShzdHJ1Y3QgZGV2aWNlICpk ZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sK KwlpbnQgaW5kZXggPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCXN0 cnVjdCBmc2NobWRfZGF0YSAqZGF0YSA9IGZzY2htZF91cGRhdGVfZGV2aWNlKGRldik7CisK KwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUF9GUk9NX1JFRyhkYXRhLT50ZW1w X2FjdFtpbmRleF0pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX21heChzdHJ1 Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNo YXIgKmJ1ZikKK3sKKwlpbnQgaW5kZXggPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cikt PmluZGV4OworCXN0cnVjdCBmc2NobWRfZGF0YSAqZGF0YSA9IGZzY2htZF91cGRhdGVfZGV2 aWNlKGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUF9GUk9NX1JF RyhkYXRhLT50ZW1wX21heFtpbmRleF0pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVf dGVtcF9tYXgoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQor CSpkZXZhdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgaW5k ZXggPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCXN0cnVjdCBmc2No bWRfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWxvbmcgdiA9IHNpbXBs ZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCkgLyAxMDAwOworCisJdiA9IFNFTlNPUlNfTElNSVQo diwgLTEyOCwgMTI3KSArIDEyODsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2Nr KTsKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKCZkYXRhLT5jbGllbnQsCisJCUZTQ0hN RF9SRUdfVEVNUF9MSU1JVFtkYXRhLT5raW5kXVtpbmRleF0sIHYpOworCWRhdGEtPnRlbXBf bWF4W2luZGV4XSA9IHY7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisK KwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9mYXVsdChz dHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIs IGNoYXIgKmJ1ZikKK3sKKwlpbnQgaW5kZXggPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0 ciktPmluZGV4OworCXN0cnVjdCBmc2NobWRfZGF0YSAqZGF0YSA9IGZzY2htZF91cGRhdGVf ZGV2aWNlKGRldik7CisKKwkvKiBiaXQgMCBzZXQgbWVhbnMgc2Vuc29yIHdvcmtpbmcgb2ss IHNvIG5vIGZhdWx0ISAqLworCWlmIChkYXRhLT50ZW1wX3N0YXR1c1tpbmRleF0gJiBGU0NI TURfVEVNUF9XT1JLSU5HX01BU0spCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjBcbiIpOwor CWVsc2UKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiMVxuIik7Cit9CisKK3N0YXRpYyBzc2l6 ZV90IHNob3dfdGVtcF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmlj ZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgaW5kZXggPSB0b19z ZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCXN0cnVjdCBmc2NobWRfZGF0YSAq ZGF0YSA9IGZzY2htZF91cGRhdGVfZGV2aWNlKGRldik7CisKKwlpZiAoKGRhdGEtPnRlbXBf c3RhdHVzW2luZGV4XSAmIEZTQ0hNRF9URU1QX0FMQVJNX01BU0spID09CisJCQlGU0NITURf VEVNUF9BTEFSTV9NQVNLKQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIxXG4iKTsKKwllbHNl CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjBcbiIpOworfQorCisKKyNkZWZpbmUgUlBNX0ZS T01fUkVHKHZhbCkJKCh2YWwpICogNjApCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZmFuX3Zh bHVlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2 YXR0ciwgY2hhciAqYnVmKQoreworCWludCBpbmRleCA9IHRvX3NlbnNvcl9kZXZfYXR0cihk ZXZhdHRyKS0+aW5kZXg7CisJc3RydWN0IGZzY2htZF9kYXRhICpkYXRhID0gZnNjaG1kX3Vw ZGF0ZV9kZXZpY2UoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBSUE1f RlJPTV9SRUcoZGF0YS0+ZmFuX2FjdFtpbmRleF0pKTsKK30KKworc3RhdGljIHNzaXplX3Qg c2hvd19mYW5fZGl2KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJp YnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCWludCBpbmRleCA9IHRvX3NlbnNvcl9k ZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CisJc3RydWN0IGZzY2htZF9kYXRhICpkYXRhID0g ZnNjaG1kX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKworCS8qIGJpdHMgMi4uNyByZXNlcnZlZCA9 PiBtYXNrIHdpdGggMyAqLyAgCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIDEgPDwg KGRhdGEtPmZhbl9yaXBwbGVbaW5kZXhdICYgMykpOworfQorCitzdGF0aWMgc3NpemVfdCBz dG9yZV9mYW5fZGl2KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1 dGUKKwkqZGV2YXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdTgg cmVnOworCWludCBpbmRleCA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7 CisJc3RydWN0IGZzY2htZF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJ Lyogc3VwcG9ydGVkIHZhbHVlczogMiwgNCwgOCAqLworCXVuc2lnbmVkIGxvbmcgdiA9IHNp bXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCisJc3dpdGNoICh2KSB7CisJY2FzZSAy OiB2ID0gMTsgYnJlYWs7CisJY2FzZSA0OiB2ID0gMjsgYnJlYWs7CisJY2FzZSA4OiB2ID0g MzsgYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICJmYW5fZGl2IHZhbHVlICVs dSBub3Qgc3VwcG9ydGVkLiAiCisJCQkiQ2hvb3NlIG9uZSBvZiAyLCA0IG9yIDghXG4iLCB2 KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRl X2xvY2spOworCisJcmVnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKCZkYXRhLT5jbGll bnQsCisJCUZTQ0hNRF9SRUdfRkFOX1JJUFBMRVtkYXRhLT5raW5kXVtpbmRleF0pOworCisJ LyogYml0cyAyLi43IHJlc2VydmVkID0+IG1hc2sgd2l0aCAweDAzICovCisJcmVnICY9IH4w eDAzOworCXJlZyB8PSB2OworCisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YSgmZGF0YS0+ Y2xpZW50LAorCQlGU0NITURfUkVHX0ZBTl9SSVBQTEVbZGF0YS0+a2luZF1baW5kZXhdLCBy ZWcpOworCisJZGF0YS0+ZmFuX3JpcHBsZVtpbmRleF0gPSByZWc7CisKKwltdXRleF91bmxv Y2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGlj IHNzaXplX3Qgc2hvd19mYW5fYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBk ZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJaW50IGluZGV4ID0g dG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKKwlzdHJ1Y3QgZnNjaG1kX2Rh dGEgKmRhdGEgPSBmc2NobWRfdXBkYXRlX2RldmljZShkZXYpOworCisJaWYgKGRhdGEtPmZh bl9zdGF0dXNbaW5kZXhdICYgRlNDSE1EX0ZBTl9BTEFSTV9NQVNLKQorCQlyZXR1cm4gc3By aW50ZihidWYsICIxXG4iKTsKKwllbHNlCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjBcbiIp OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2Zhbl9mYXVsdChzdHJ1Y3QgZGV2aWNlICpk ZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sK KwlpbnQgaW5kZXggPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCXN0 cnVjdCBmc2NobWRfZGF0YSAqZGF0YSA9IGZzY2htZF91cGRhdGVfZGV2aWNlKGRldik7CisK KwlpZiAoZGF0YS0+ZmFuX3N0YXR1c1tpbmRleF0gJiBGU0NITURfRkFOX05PVF9QUkVTRU5U X01BU0spCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjFcbiIpOworCWVsc2UKKwkJcmV0dXJu IHNwcmludGYoYnVmLCAiMFxuIik7Cit9CisKKworc3RhdGljIHNzaXplX3Qgc2hvd19wd21f YXV0b19wb2ludDFfcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0 dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCWludCBpbmRleCA9IHRvX3NlbnNv cl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CisJaW50IHZhbCA9IGZzY2htZF91cGRhdGVf ZGV2aWNlKGRldiktPmZhbl9taW5baW5kZXhdOworCisJLyogMCA9IGFsbG93IHR1cm5pbmcg b2ZmLCAxLTI1NSA9IDUwLTEwMCUgKi8KKwlpZiAodmFsKQorCQl2YWwgPSB2YWwgLyAyICsg MTI4OworCQorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwpOworfQorCitzdGF0 aWMgc3NpemVfdCBzdG9yZV9wd21fYXV0b19wb2ludDFfcHdtKHN0cnVjdCBkZXZpY2UgKmRl diwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY29uc3QgY2hhciAqYnVm LCBzaXplX3QgY291bnQpCit7CisJaW50IGluZGV4ID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRl dmF0dHIpLT5pbmRleDsKKwlzdHJ1Y3QgZnNjaG1kX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHYgPSBzaW1wbGVfc3RydG91bChidWYsIE5V TEwsIDEwKTsKKwkKKwkvKiByZWdpc3RlcjogMCA9IGFsbG93IHR1cm5pbmcgb2ZmLCAxLTI1 NSA9IDUwLTEwMCUgKi8KKwlpZiAodikgeworCQl2ID0gU0VOU09SU19MSU1JVCh2LCAxMjgs IDI1NSk7CisJCXYgPSAodiAtIDEyOCkgKiAyICsgMTsKKwl9CisKKwltdXRleF9sb2NrKCZk YXRhLT51cGRhdGVfbG9jayk7CisKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKCZkYXRh LT5jbGllbnQsCisJCUZTQ0hNRF9SRUdfRkFOX01JTltkYXRhLT5raW5kXVtpbmRleF0sIHYp OworCWRhdGEtPmZhbl9taW5baW5kZXhdID0gdjsKKworCW11dGV4X3VubG9jaygmZGF0YS0+ dXBkYXRlX2xvY2spOworCQorCXJldHVybiBjb3VudDsKK30KKworCisvKiBUaGUgRlNDIGh3 bW9uIGZhbWlseSBoYXMgdGhlIGFiaWxpdHkgdG8gZm9yY2UgYW4gYXR0YWNoZWQgYWxlcnQg bGVkIHRvIGZsYXNoCisgICBmcm9tIHNvZnR3YXJlLCB3ZSBleHBvcnQgdGhpcyBhcyBhbiBh bGVydF9sZWQgc3lzZnMgYXR0ciAqLworc3RhdGljIHNzaXplX3Qgc2hvd19hbGVydF9sZWQo c3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRy LCBjaGFyICpidWYpCit7CisJc3RydWN0IGZzY2htZF9kYXRhICpkYXRhID0gZnNjaG1kX3Vw ZGF0ZV9kZXZpY2UoZGV2KTsKKworCWlmIChkYXRhLT5nbG9iYWxfY29udHJvbCAmIEZTQ0hN RF9DT05UUk9MX0FMRVJUX0xFRF9NQVNLKQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIxXG4i KTsKKwllbHNlCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjBcbiIpOworfQorCitzdGF0aWMg c3NpemVfdCBzdG9yZV9hbGVydF9sZWQoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBk ZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3Vu dCkKK3sKKwl1OCByZWc7CisJc3RydWN0IGZzY2htZF9kYXRhICpkYXRhID0gZGV2X2dldF9k cnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyB2ID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBO VUxMLCAxMCk7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZWcg PSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoJmRhdGEtPmNsaWVudCwgRlNDSE1EX1JFR19D T05UUk9MKTsKKworCWlmICh2KQorCQlyZWcgfD0gRlNDSE1EX0NPTlRST0xfQUxFUlRfTEVE X01BU0s7CisJZWxzZQorCQlyZWcgJj0gfkZTQ0hNRF9DT05UUk9MX0FMRVJUX0xFRF9NQVNL OworCisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YSgmZGF0YS0+Y2xpZW50LCBGU0NITURf UkVHX0NPTlRST0wsIHJlZyk7CisKKwlkYXRhLT5nbG9iYWxfY29udHJvbCA9IHJlZzsKKwor CW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGNvdW50Owor fQorCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIGZzY2htZF9hdHRy W10gPSB7CisJU0VOU09SX0FUVFIoaW4wX2lucHV0LCAwNDQ0LCBzaG93X2luX3ZhbHVlLCBO VUxMLCAwKSwKKwlTRU5TT1JfQVRUUihpbjFfaW5wdXQsIDA0NDQsIHNob3dfaW5fdmFsdWUs IE5VTEwsIDEpLAorCVNFTlNPUl9BVFRSKGluMl9pbnB1dCwgMDQ0NCwgc2hvd19pbl92YWx1 ZSwgTlVMTCwgMiksCisJU0VOU09SX0FUVFIoYWxlcnRfbGVkLCAwNjQ0LCBzaG93X2FsZXJ0 X2xlZCwgc3RvcmVfYWxlcnRfbGVkLCAwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29y X2RldmljZV9hdHRyaWJ1dGUgZnNjaG1kX3RlbXBfYXR0cltdID0geworCVNFTlNPUl9BVFRS KHRlbXAxX2lucHV0LCAwNDQ0LCBzaG93X3RlbXBfdmFsdWUsIE5VTEwsIDApLAorCVNFTlNP Ul9BVFRSKHRlbXAxX21heCwgICAwNjQ0LCBzaG93X3RlbXBfbWF4LCBzdG9yZV90ZW1wX21h eCwgMCksCisJU0VOU09SX0FUVFIodGVtcDFfZmF1bHQsIDA0NDQsIHNob3dfdGVtcF9mYXVs dCwgTlVMTCwgMCksCisJU0VOU09SX0FUVFIodGVtcDFfYWxhcm0sIDA0NDQsIHNob3dfdGVt cF9hbGFybSwgTlVMTCwgMCksCisJU0VOU09SX0FUVFIodGVtcDJfaW5wdXQsIDA0NDQsIHNo b3dfdGVtcF92YWx1ZSwgTlVMTCwgMSksCisJU0VOU09SX0FUVFIodGVtcDJfbWF4LCAgIDA2 NDQsIHNob3dfdGVtcF9tYXgsIHN0b3JlX3RlbXBfbWF4LCAxKSwKKwlTRU5TT1JfQVRUUih0 ZW1wMl9mYXVsdCwgMDQ0NCwgc2hvd190ZW1wX2ZhdWx0LCBOVUxMLCAxKSwKKwlTRU5TT1Jf QVRUUih0ZW1wMl9hbGFybSwgMDQ0NCwgc2hvd190ZW1wX2FsYXJtLCBOVUxMLCAxKSwKKwlT RU5TT1JfQVRUUih0ZW1wM19pbnB1dCwgMDQ0NCwgc2hvd190ZW1wX3ZhbHVlLCBOVUxMLCAy KSwKKwlTRU5TT1JfQVRUUih0ZW1wM19tYXgsICAgMDY0NCwgc2hvd190ZW1wX21heCwgc3Rv cmVfdGVtcF9tYXgsIDIpLAorCVNFTlNPUl9BVFRSKHRlbXAzX2ZhdWx0LCAwNDQ0LCBzaG93 X3RlbXBfZmF1bHQsIE5VTEwsIDIpLAorCVNFTlNPUl9BVFRSKHRlbXAzX2FsYXJtLCAwNDQ0 LCBzaG93X3RlbXBfYWxhcm0sIE5VTEwsIDIpLAorCVNFTlNPUl9BVFRSKHRlbXA0X2lucHV0 LCAwNDQ0LCBzaG93X3RlbXBfdmFsdWUsIE5VTEwsIDMpLAorCVNFTlNPUl9BVFRSKHRlbXA0 X21heCwgICAwNjQ0LCBzaG93X3RlbXBfbWF4LCBzdG9yZV90ZW1wX21heCwgMyksCisJU0VO U09SX0FUVFIodGVtcDRfZmF1bHQsIDA0NDQsIHNob3dfdGVtcF9mYXVsdCwgTlVMTCwgMyks CisJU0VOU09SX0FUVFIodGVtcDRfYWxhcm0sIDA0NDQsIHNob3dfdGVtcF9hbGFybSwgTlVM TCwgMyksCisJU0VOU09SX0FUVFIodGVtcDVfaW5wdXQsIDA0NDQsIHNob3dfdGVtcF92YWx1 ZSwgTlVMTCwgNCksCisJU0VOU09SX0FUVFIodGVtcDVfbWF4LCAgIDA2NDQsIHNob3dfdGVt cF9tYXgsIHN0b3JlX3RlbXBfbWF4LCA0KSwKKwlTRU5TT1JfQVRUUih0ZW1wNV9mYXVsdCwg MDQ0NCwgc2hvd190ZW1wX2ZhdWx0LCBOVUxMLCA0KSwKKwlTRU5TT1JfQVRUUih0ZW1wNV9h bGFybSwgMDQ0NCwgc2hvd190ZW1wX2FsYXJtLCBOVUxMLCA0KSwKK307CisKK3N0YXRpYyBz dHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgZnNjaG1kX2Zhbl9hdHRyW10gPSB7CisJ U0VOU09SX0FUVFIoZmFuMV9pbnB1dCwgMDQ0NCwgc2hvd19mYW5fdmFsdWUsIE5VTEwsIDAp LAorCVNFTlNPUl9BVFRSKGZhbjFfZGl2LCAgIDA2NDQsIHNob3dfZmFuX2Rpdiwgc3RvcmVf ZmFuX2RpdiwgMCksCisJU0VOU09SX0FUVFIoZmFuMV9hbGFybSwgMDQ0NCwgc2hvd19mYW5f YWxhcm0sIE5VTEwsIDApLAorCVNFTlNPUl9BVFRSKGZhbjFfZmF1bHQsIDA0NDQsIHNob3df ZmFuX2ZhdWx0LCBOVUxMLCAwKSwKKwlTRU5TT1JfQVRUUihwd20xX2F1dG9fcG9pbnQxX3B3 bSwgMDY0NCwgc2hvd19wd21fYXV0b19wb2ludDFfcHdtLAorCQlzdG9yZV9wd21fYXV0b19w b2ludDFfcHdtLCAwKSwKKwlTRU5TT1JfQVRUUihmYW4yX2lucHV0LCAwNDQ0LCBzaG93X2Zh bl92YWx1ZSwgTlVMTCwgMSksCisJU0VOU09SX0FUVFIoZmFuMl9kaXYsICAgMDY0NCwgc2hv d19mYW5fZGl2LCBzdG9yZV9mYW5fZGl2LCAxKSwKKwlTRU5TT1JfQVRUUihmYW4yX2FsYXJt LCAwNDQ0LCBzaG93X2Zhbl9hbGFybSwgTlVMTCwgMSksCisJU0VOU09SX0FUVFIoZmFuMl9m YXVsdCwgMDQ0NCwgc2hvd19mYW5fZmF1bHQsIE5VTEwsIDEpLAorCVNFTlNPUl9BVFRSKHB3 bTJfYXV0b19wb2ludDFfcHdtLCAwNjQ0LCBzaG93X3B3bV9hdXRvX3BvaW50MV9wd20sCisJ CXN0b3JlX3B3bV9hdXRvX3BvaW50MV9wd20sIDEpLAorCVNFTlNPUl9BVFRSKGZhbjNfaW5w dXQsIDA0NDQsIHNob3dfZmFuX3ZhbHVlLCBOVUxMLCAyKSwKKwlTRU5TT1JfQVRUUihmYW4z X2RpdiwgICAwNjQ0LCBzaG93X2Zhbl9kaXYsIHN0b3JlX2Zhbl9kaXYsIDIpLAorCVNFTlNP Ul9BVFRSKGZhbjNfYWxhcm0sIDA0NDQsIHNob3dfZmFuX2FsYXJtLCBOVUxMLCAyKSwKKwlT RU5TT1JfQVRUUihmYW4zX2ZhdWx0LCAwNDQ0LCBzaG93X2Zhbl9mYXVsdCwgTlVMTCwgMiks CisJU0VOU09SX0FUVFIocHdtM19hdXRvX3BvaW50MV9wd20sIDA2NDQsIHNob3dfcHdtX2F1 dG9fcG9pbnQxX3B3bSwKKwkJc3RvcmVfcHdtX2F1dG9fcG9pbnQxX3B3bSwgMiksCisJU0VO U09SX0FUVFIoZmFuNF9pbnB1dCwgMDQ0NCwgc2hvd19mYW5fdmFsdWUsIE5VTEwsIDMpLAor CVNFTlNPUl9BVFRSKGZhbjRfZGl2LCAgIDA2NDQsIHNob3dfZmFuX2Rpdiwgc3RvcmVfZmFu X2RpdiwgMyksCisJU0VOU09SX0FUVFIoZmFuNF9hbGFybSwgMDQ0NCwgc2hvd19mYW5fYWxh cm0sIE5VTEwsIDMpLAorCVNFTlNPUl9BVFRSKGZhbjRfZmF1bHQsIDA0NDQsIHNob3dfZmFu X2ZhdWx0LCBOVUxMLCAzKSwKKwlTRU5TT1JfQVRUUihwd200X2F1dG9fcG9pbnQxX3B3bSwg MDY0NCwgc2hvd19wd21fYXV0b19wb2ludDFfcHdtLAorCQlzdG9yZV9wd21fYXV0b19wb2lu dDFfcHdtLCAzKSwKKwlTRU5TT1JfQVRUUihmYW41X2lucHV0LCAwNDQ0LCBzaG93X2Zhbl92 YWx1ZSwgTlVMTCwgNCksCisJU0VOU09SX0FUVFIoZmFuNV9kaXYsICAgMDY0NCwgc2hvd19m YW5fZGl2LCBzdG9yZV9mYW5fZGl2LCA0KSwKKwlTRU5TT1JfQVRUUihmYW41X2FsYXJtLCAw NDQ0LCBzaG93X2Zhbl9hbGFybSwgTlVMTCwgNCksCisJU0VOU09SX0FUVFIoZmFuNV9mYXVs dCwgMDQ0NCwgc2hvd19mYW5fZmF1bHQsIE5VTEwsIDQpLAorCVNFTlNPUl9BVFRSKHB3bTVf YXV0b19wb2ludDFfcHdtLCAwNjQ0LCBzaG93X3B3bV9hdXRvX3BvaW50MV9wd20sCisJCXN0 b3JlX3B3bV9hdXRvX3BvaW50MV9wd20sIDQpLAorCVNFTlNPUl9BVFRSKGZhbjZfaW5wdXQs IDA0NDQsIHNob3dfZmFuX3ZhbHVlLCBOVUxMLCA1KSwKKwlTRU5TT1JfQVRUUihmYW42X2Rp diwgICAwNjQ0LCBzaG93X2Zhbl9kaXYsIHN0b3JlX2Zhbl9kaXYsIDUpLAorCVNFTlNPUl9B VFRSKGZhbjZfYWxhcm0sIDA0NDQsIHNob3dfZmFuX2FsYXJtLCBOVUxMLCA1KSwKKwlTRU5T T1JfQVRUUihmYW42X2ZhdWx0LCAwNDQ0LCBzaG93X2Zhbl9mYXVsdCwgTlVMTCwgNSksCisJ U0VOU09SX0FUVFIocHdtNl9hdXRvX3BvaW50MV9wd20sIDA2NDQsIHNob3dfcHdtX2F1dG9f cG9pbnQxX3B3bSwKKwkJc3RvcmVfcHdtX2F1dG9fcG9pbnQxX3B3bSwgNSksCit9OworCisK Ky8qCisgKiBSZWFsIGNvZGUKKyAqLworCitzdGF0aWMgaW50IGZzY2htZF9kZXRlY3Qoc3Ry dWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCit7CisJ c3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgZnNjaG1kX2RhdGEgKmRhdGE7 CisJdTggcmV2aXNpb247CisJY29uc3QgY2hhciAqIGNvbnN0IG5hbWVzWzVdID0geyAiUG9z ZWlkb24iLCAiSGVybWVzIiwgIlNjeWxsYSIsCisJCQkJCSJIZXJhY2xlcyIsICJIZWltZGFs bCIgfTsKKwljb25zdCBjaGFyICogY29uc3QgY2xpZW50X25hbWVzWzVdID0geyAiZnNjcG9z IiwgImZzY2hlciIsICJmc2NzY3kiLAorCQkJCQkJImZzY2hyYyIsICJmc2NobWQiIH07CisJ aW50IGksIGVyciA9IDA7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0 ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAwOworCisJLyogT0su IEZvciBub3csIHdlIHByZXN1bWUgd2UgaGF2ZSBhIHZhbGlkIGNsaWVudC4gV2Ugbm93IGNy ZWF0ZSB0aGUKKwkgKiBjbGllbnQgc3RydWN0dXJlLCBldmVuIHRob3VnaCB3ZSBjYW5ub3Qg ZmlsbCBpdCBjb21wbGV0ZWx5IHlldC4KKwkgKiBCdXQgaXQgYWxsb3dzIHVzIHRvIGFjY2Vz cyBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEuICovCisJaWYgKCEoZGF0YSA9IGt6YWxsb2Mo c2l6ZW9mKHN0cnVjdCBmc2NobWRfZGF0YSksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC1F Tk9NRU07CisKKwljbGllbnQgPSAmZGF0YS0+Y2xpZW50OworCWkyY19zZXRfY2xpZW50ZGF0 YShjbGllbnQsIGRhdGEpOworCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7CisJY2xpZW50LT5h ZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnQtPmRyaXZlciA9ICZmc2NobWRfZHJpdmVyOwor CW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCS8qIERldGVjdCAmIElkZW50 aWZ5IHRoZSBjaGlwICovCisJaWYgKGtpbmQgPD0gMCkgeworCQljaGFyIGlkWzRdOworCQkK KwkJaWRbMF0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCUZTQ0hN RF9SRUdfSURFTlRfMCk7CisJCWlkWzFdID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNs aWVudCwKKwkJCQlGU0NITURfUkVHX0lERU5UXzEpOworCQlpZFsyXSA9IGkyY19zbWJ1c19y ZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJRlNDSE1EX1JFR19JREVOVF8yKTsKKwkJaWRb M10gPSAnXDAnOworCQkKKwkJaWYgKCFzdHJjbXAoaWQsICJQRUciKSkKKwkJCWtpbmQgPSBm c2Nwb3M7CisJCWVsc2UgaWYgKCFzdHJjbXAoaWQsICJIRVIiKSkKKwkJCWtpbmQgPSBmc2No ZXI7CisJCWVsc2UgaWYgKCFzdHJjbXAoaWQsICJTQ1kiKSkKKwkJCWtpbmQgPSBmc2NzY3k7 CisJCWVsc2UgaWYgKCFzdHJjbXAoaWQsICJIUkMiKSkKKwkJCWtpbmQgPSBmc2NocmM7CisJ CWVsc2UgaWYgKCFzdHJjbXAoaWQsICJITUQiKSkKKwkJCWtpbmQgPSBmc2NobWQ7CisJCWVs c2UKKwkJCWdvdG8gZXhpdF9mcmVlOworCX0KKworCWlmIChraW5kID09IGZzY3Bvcykgewor CQkvKiBUaGUgUG9zZWlkb24gaGFzIGhhcmR3aXJlZCB0ZW1wIGxpbWl0cywgZmlsbCB0aGVz ZQorCQkgICBpbiBmb3IgdGhlIGFsYXJtIHJlc2V0dGluZyBjb2RlICovIAorCQlkYXRhLT50 ZW1wX21heFswXSA9IDcwICsgMTI4OworCQlkYXRhLT50ZW1wX21heFsxXSA9IDUwICsgMTI4 OworCQlkYXRhLT50ZW1wX21heFsyXSA9IDUwICsgMTI4OworCX0KKworCS8qIGkyYyBraW5k IGdvZXMgZnJvbSAxLTUsIHdlIHdhbnQgZnJvbSAwLTQgdG8gYWRkcmVzcyBhcnJheXMgKi8K KwlkYXRhLT5raW5kID0ga2luZCAtIDE7CisJc3RybGNweShjbGllbnQtPm5hbWUsIGNsaWVu dF9uYW1lc1tkYXRhLT5raW5kXSwgSTJDX05BTUVfU0laRSk7CisKKwkvKiBUZWxsIHRoZSBJ MkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCisJaWYgKChlcnIgPSBpMmNf YXR0YWNoX2NsaWVudChjbGllbnQpKSkKKwkJZ290byBleGl0X2ZyZWU7CisJCQorCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZzY2htZF9hdHRyKTsgaSsrKSB7CisJCWVyciA9IGRl dmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsCisJCQkJCSZmc2NobWRfYXR0cltpXS5k ZXZfYXR0cik7CisJCWlmIChlcnIpCisJCQlnb3RvIGV4aXRfZGV0YWNoOworCX0KKworCWZv ciAoaSA9IDA7IGkgPCAoRlNDSE1EX05PX1RFTVBfU0VOU09SU1tkYXRhLT5raW5kXSAqIDQp OyBpKyspIHsKKwkJLyogUG9zZWlkb24gZG9lc24ndCBoYXZlIFRFTVBfTElNSVQgcmVnaXN0 ZXJzICovCisJCWlmIChraW5kID09IGZzY3BvcyAmJiBmc2NobWRfdGVtcF9hdHRyW2ldLmRl dl9hdHRyLnNob3cgPT0KKwkJCQlzaG93X3RlbXBfbWF4KQorCQkJY29udGludWU7CisKKwkJ ZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwKKwkJCQkJJmZzY2htZF90 ZW1wX2F0dHJbaV0uZGV2X2F0dHIpOworCQlpZiAoZXJyKQorCQkJZ290byBleGl0X2RldGFj aDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgKEZTQ0hNRF9OT19GQU5fU0VOU09SU1tkYXRh LT5raW5kXSAqIDUpOyBpKyspIHsKKwkJLyogUG9zZWlkb24gZG9lc24ndCBoYXZlIGEgRkFO X01JTiByZWdpc3RlciBmb3IgaXRzIDNyZCBmYW4gKi8KKwkJaWYgKGtpbmQgPT0gZnNjcG9z ICYmCisJCQkJIXN0cmNtcChmc2NobWRfZmFuX2F0dHJbaV0uZGV2X2F0dHIuYXR0ci5uYW1l LAorCQkJCQkicHdtM19hdXRvX3BvaW50MV9wd20iKSkKKwkJCWNvbnRpbnVlOworCisJCWVy ciA9IGRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsCisJCQkJCSZmc2NobWRfZmFu X2F0dHJbaV0uZGV2X2F0dHIpOworCQlpZiAoZXJyKQorCQkJZ290byBleGl0X2RldGFjaDsK Kwl9CisKKwlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJmNsaWVu dC0+ZGV2KTsKKwlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKKwkJZXJyID0gUFRS X0VSUihkYXRhLT5od21vbl9kZXYpOworCQlkYXRhLT5od21vbl9kZXYgPSBOVUxMOyAKKwkJ Z290byBleGl0X2RldGFjaDsKKwl9CisKKwlyZXZpc2lvbiA9IGkyY19zbWJ1c19yZWFkX2J5 dGVfZGF0YShjbGllbnQsIEZTQ0hNRF9SRUdfUkVWSVNJT04pOworCXByaW50ayhLRVJOX0lO Rk8gRlNDSE1EX05BTUUgIjogRGV0ZWN0ZWQgRlNDICVzIGNoaXAsIHJldmlzaW9uOiAlZFxu IiwKKwkJbmFtZXNbZGF0YS0+a2luZF0sIChpbnQpIHJldmlzaW9uKTsKKworCXJldHVybiAw OworCitleGl0X2RldGFjaDoKKwlmc2NobWRfZGV0YWNoX2NsaWVudChjbGllbnQpOyAvKiB3 aWxsIGFsc28gZnJlZSBkYXRhIGZvciB1cyAqLworCXJldHVybiBlcnI7CisJCitleGl0X2Zy ZWU6CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBmc2No bWRfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCWlm ICghKGFkYXB0ZXItPmNsYXNzICYgSTJDX0NMQVNTX0hXTU9OKSkKKwkJcmV0dXJuIDA7CisJ cmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCBmc2NobWRfZGV0ZWN0KTsK K30KKworc3RhdGljIGludCBmc2NobWRfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVu dCAqY2xpZW50KQoreworCXN0cnVjdCBmc2NobWRfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xp ZW50ZGF0YShjbGllbnQpOworCWludCBpLCBlcnI7CisKKwkvKiBDaGVjayBpZiByZWdpc3Rl cmVkIGluIGNhc2Ugd2UncmUgY2FsbGVkIGZyb20gZnNjaG1kX2RldGVjdAorCSAgIHRvIGNs ZWFudXAgYWZ0ZXIgYW4gZXJyb3IgKi8KKwlpZiAoZGF0YS0+aHdtb25fZGV2KQorCQlod21v bl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOworCisJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUoZnNjaG1kX2F0dHIpOyBpKyspCisJCWRldmljZV9yZW1vdmVfZmls ZSgmY2xpZW50LT5kZXYsICZmc2NobWRfYXR0cltpXS5kZXZfYXR0cik7CisJZm9yIChpID0g MDsgaSA8IChGU0NITURfTk9fVEVNUF9TRU5TT1JTW2RhdGEtPmtpbmRdICogNCk7IGkrKykK KwkJZGV2aWNlX3JlbW92ZV9maWxlKCZjbGllbnQtPmRldiwKKwkJCQkJJmZzY2htZF90ZW1w X2F0dHJbaV0uZGV2X2F0dHIpOworCWZvciAoaSA9IDA7IGkgPCAoRlNDSE1EX05PX0ZBTl9T RU5TT1JTW2RhdGEtPmtpbmRdICogNSk7IGkrKykKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZj bGllbnQtPmRldiwKKwkJCQkJJmZzY2htZF9mYW5fYXR0cltpXS5kZXZfYXR0cik7CisKKwlp ZiAoKGVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCkpKQorCQlyZXR1cm4gZXJyOwor CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnNjaG1k X2RhdGEgKmZzY2htZF91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlz dHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVj dCBmc2NobWRfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWlu dCBpOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJaWYgKHRpbWVf YWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgMiAqIEhaKSB8fCAhZGF0YS0+ dmFsaWQpIHsKKwkJCisJCWZvciAoaSA9IDA7IGkgPCBGU0NITURfTk9fVEVNUF9TRU5TT1JT W2RhdGEtPmtpbmRdOyBpKyspIHsKKwkJCWRhdGEtPnRlbXBfYWN0W2ldID0gaTJjX3NtYnVz X3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJRlNDSE1EX1JFR19URU1QX0FDVFtkYXRh LT5raW5kXVtpXSk7CisJCQlkYXRhLT50ZW1wX3N0YXR1c1tpXSA9IGkyY19zbWJ1c19yZWFk X2J5dGVfZGF0YShjbGllbnQsCisJCQkJCUZTQ0hNRF9SRUdfVEVNUF9TVEFURVtkYXRhLT5r aW5kXVtpXSk7CisKKwkJCS8qIFRoZSBmc2Nwb3MgZG9lc24ndCBoYXZlIFRFTVBfTElNSVQg cmVnaXN0ZXJzICovCisJCQlpZiAoRlNDSE1EX1JFR19URU1QX0xJTUlUW2RhdGEtPmtpbmRd W2ldKQorCQkJCWRhdGEtPnRlbXBfbWF4W2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRh KAorCQkJCQljbGllbnQsCisJCQkJCUZTQ0hNRF9SRUdfVEVNUF9MSU1JVFtkYXRhLT5raW5k XVtpXSk7CisJCQkJCisJCQkvKiByZXNldCBhbGFybSBpZiB0aGUgYWxhcm0gY29uZGl0aW9u IGlzIGdvbmUsCisJCQkgICB0aGUgY2hpcCBkb2Vzbid0IGRvIHRoaXMgaXRzZWxmICovCisJ CQlpZiAoKGRhdGEtPnRlbXBfc3RhdHVzW2ldICYgRlNDSE1EX1RFTVBfQUxBUk1fTUFTSykg PT0KKwkJCQkJRlNDSE1EX1RFTVBfQUxBUk1fTUFTSyAmJgorCQkJCQlkYXRhLT50ZW1wX2Fj dFtpXSA8IGRhdGEtPnRlbXBfbWF4W2ldKQorCQkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2Rh dGEoY2xpZW50LAorCQkJCQlGU0NITURfUkVHX1RFTVBfU1RBVEVbZGF0YS0+a2luZF1baV0s CisJCQkJCUZTQ0hNRF9URU1QX0FMRVJUX01BU0spOworCQl9CisJCQkJCQorCQlmb3IgKGkg PSAwOyBpIDwgRlNDSE1EX05PX0ZBTl9TRU5TT1JTW2RhdGEtPmtpbmRdOyBpKyspIHsKKwkJ CWRhdGEtPmZhbl9hY3RbaV0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAor CQkJCQlGU0NITURfUkVHX0ZBTl9BQ1RbZGF0YS0+a2luZF1baV0pOworCQkJZGF0YS0+ZmFu X3N0YXR1c1tpXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCUZT Q0hNRF9SRUdfRkFOX1NUQVRFW2RhdGEtPmtpbmRdW2ldKTsKKwkJCWRhdGEtPmZhbl9yaXBw bGVbaV0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQlGU0NITURf UkVHX0ZBTl9SSVBQTEVbZGF0YS0+a2luZF1baV0pOworCisJCQkvKiBUaGUgZnNjcG9zIHRo aXJkIGZhbiBkb2Vzbid0IGhhdmUgYSBmYW5fbWluICovCisJCQlpZiAoRlNDSE1EX1JFR19G QU5fTUlOW2RhdGEtPmtpbmRdW2ldKQorCQkJCWRhdGEtPmZhbl9taW5baV0gPSBpMmNfc21i dXNfcmVhZF9ieXRlX2RhdGEoCisJCQkJCWNsaWVudCwKKwkJCQkJRlNDSE1EX1JFR19GQU5f TUlOW2RhdGEtPmtpbmRdW2ldKTsKKworCQkJLyogcmVzZXQgZmFuIHN0YXR1cyBpZiBzcGVl ZCBpcyBiYWNrIHRvID4gMCAqLworCQkJaWYgKChkYXRhLT5mYW5fc3RhdHVzW2ldICYgRlND SE1EX0ZBTl9BTEFSTV9NQVNLKSAmJgorCQkJCQlkYXRhLT5mYW5fYWN0W2ldKQorCQkJCWky Y19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQlGU0NITURfUkVHX0ZBTl9T VEFURVtkYXRhLT5raW5kXVtpXSwKKwkJCQkJRlNDSE1EX0ZBTl9BTEFSTV9NQVNLKTsKKwkJ fQorCisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCQlkYXRhLT52b2x0W2ldID0gaTJj X3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCUZTQ0hNRF9SRUdfVk9MVFtp XSk7CisKKwkJZGF0YS0+Z2xvYmFsX2NvbnRyb2wgPSBpMmNfc21idXNfcmVhZF9ieXRlX2Rh dGEoY2xpZW50LAorCQkJCQkJRlNDSE1EX1JFR19DT05UUk9MKTsKKworCQkvKiBUbyBiZSBp bXBsZW1lbnRlZCBpbiB0aGUgZnV0dXJlCisJCWRhdGEtPndhdGNoZG9nWzBdID0gaTJjX3Nt YnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCUZTQ0hNRF9SRUdfV0RPR19QUkVT RVQpOworCQlkYXRhLT53YXRjaGRvZ1sxXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShj bGllbnQsCisJCQkJCQlGU0NITURfUkVHX1dET0dfU1RBVEUpOworCQlkYXRhLT53YXRjaGRv Z1syXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQlGU0NITURf UkVHX1dET0dfQ09OVFJPTCk7ICovCisKKwkJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmll czsKKwkJZGF0YS0+dmFsaWQgPSAxOworCX0KKworCW11dGV4X3VubG9jaygmZGF0YS0+dXBk YXRlX2xvY2spOworCisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGZz Y2htZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZmc2NobWRfZHJp dmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGZzY2htZF9leGl0KHZvaWQpCit7CisJ aTJjX2RlbF9kcml2ZXIoJmZzY2htZF9kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJI YW5zIGRlIEdvZWRlIDxqLncuci5kZWdvZWRlQGhocy5ubD4iKTsKK01PRFVMRV9ERVNDUklQ VElPTigiRlNDIFBvc2VpZG9uLCBIZXJtZXMsIFNjeWxsYSwgSGVyYWNsZXMgYW5kICIKKwkJ CSJIZWltZGFsbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxl X2luaXQoZnNjaG1kX2luaXQpOworbW9kdWxlX2V4aXQoZnNjaG1kX2V4aXQpOwpkaWZmIC11 cCBsaW51eC0yLjYuMjIueDg2XzY0L2RyaXZlcnMvaHdtb24vTWFrZWZpbGUuZnNjaG1kIGxp bnV4LTIuNi4yMi54ODZfNjQvZHJpdmVycy9od21vbi9NYWtlZmlsZQotLS0gbGludXgtMi42 LjIyLng4Nl82NC9kcml2ZXJzL2h3bW9uL01ha2VmaWxlLmZzY2htZAkyMDA3LTEwLTA3IDE2 OjMyOjU2LjAwMDAwMDAwMCArMDIwMAorKysgbGludXgtMi42LjIyLng4Nl82NC9kcml2ZXJz L2h3bW9uL01ha2VmaWxlCTIwMDctMTAtMDcgMTY6MzM6MTAuMDAwMDAwMDAwICswMjAwCkBA IC0zMCw2ICszMCw3IEBAIG9iai0kKENPTkZJR19TRU5TT1JTX0RNRTE3MzcpCSs9IGRtZTE3 MzcKIG9iai0kKENPTkZJR19TRU5TT1JTX0RTMTYyMSkJKz0gZHMxNjIxLm8KIG9iai0kKENP TkZJR19TRU5TT1JTX0Y3MTgwNUYpCSs9IGY3MTgwNWYubwogb2JqLSQoQ09ORklHX1NFTlNP UlNfRlNDSEVSKQkrPSBmc2NoZXIubworb2JqLSQoQ09ORklHX1NFTlNPUlNfRlNDSE1EKQkr PSBmc2NobWQubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfRlNDUE9TKQkrPSBmc2Nwb3Mubwog b2JqLSQoQ09ORklHX1NFTlNPUlNfR0w1MThTTSkJKz0gZ2w1MThzbS5vCiBvYmotJChDT05G SUdfU0VOU09SU19HTDUyMFNNKQkrPSBnbDUyMHNtLm8= --------------020204000403060304000903 Content-Type: text/plain; name="diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diff" --- hwmon-fschmd-new-driver-v2.patch 2007-10-09 14:52:27.000000000 +0200 +++ hwmon-fschmd-new-driver-v3.patch 2007-10-09 14:59:13.000000000 +0200 @@ -2,9 +2,8 @@ and fscpos drivers and adds support for the FSC Scylla, Heracles and Heimdall chips. -This version of the patch has had all issues found during the review by Jean -Delvare addressed: -http://lists.lm-sensors.org/pipermail/lm-sensors/2007-October/021396.html +This 3rd version of the patch has a few issues found during review of the fixed +2nd version, thanks to Jean Delvare! Signed-off-by: Hans de Goede diff -up linux-2.6.22.x86_64/drivers/hwmon/Kconfig.fschmd linux-2.6.22.x86_64/drivers/hwmon/Kconfig @@ -457,7 +456,7 @@ +{ + struct fschmd_data *data = fschmd_update_device(dev); + -+ if (data->global_control & 0x01) ++ if (data->global_control & FSCHMD_CONTROL_ALERT_LED_MASK) + return sprintf(buf, "1\n"); + else + return sprintf(buf, "0\n"); @@ -479,7 +478,7 @@ + else + reg &= ~FSCHMD_CONTROL_ALERT_LED_MASK; + -+ i2c_smbus_write_byte_data(&data->client, FSCHMD_REG_CONTROL, v); ++ i2c_smbus_write_byte_data(&data->client, FSCHMD_REG_CONTROL, reg); + + data->global_control = reg; + --------------020204000403060304000903 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ lm-sensors mailing list lm-sensors@lm-sensors.org http://lists.lm-sensors.org/mailman/listinfo/lm-sensors --------------020204000403060304000903--