All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <53A12DBB.50704@roeck-us.net>

diff --git a/a/1.txt b/N1/1.txt
index fc9c826..c103d5c 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,224 +1,348 @@
-T24gMDYvMTcvMjAxNCAxMDo0NiBQTSwgVmFya2EgQmhhZHJhbSB3cm90ZToKPiBIaSwKPgo+IE9u
-IDA2LzE4LzIwMTQgMTE6MDcgQU0sIEhlaWtvIFNjaG9jaGVyIHdyb3RlOgo+PiBEcml2ZXIgZm9y
-IHRoZSBUSSBUTVAxMDMuCj4+Cj4+IFRoZSBUSSBUTVAxMDMgaXMgc2ltaWxhciB0byB0aGUgVE1Q
-MTAyLiAgSXQgZGlmZmVycyBmcm9tIHRoZSBUTVAxMDIKPj4gYnkgaGF2aW5nIG9ubHkgOCBiaXQg
-cmVnaXN0ZXJzLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5k
-ZT4KPj4KPj4gLS0tCj4+Cj4+IENjOiBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4K
-Pj4gQ2M6IEd1ZW50ZXIgUm9lY2sgPGxpbnV4QHJvZWNrLXVzLm5ldD4KPj4gQ2M6IGxpbnV4LWtl
-cm5lbEB2Z2VyLmtlcm5lbC5vcmcKPj4gQ2M6IGRldmljZXRyZWVAdmdlci5rZXJuZWwub3JnCj4+
-IENjOiBsaW51eC1kb2NAdmdlci5rZXJuZWwub3JnCj4+IENjOiBNYXJrIFJ1dGxhbmQgPG1hcmsu
-cnV0bGFuZEBhcm0uY29tPgo+Pgo+PiAtIGNoYW5nZSBmb3IgdjI6Cj4+ICAgIC0gYWRkIGNvbW1l
-bnRzIGZyb20gR3VlbnRlclJvZWNrOgo+PiAgICAgIC0gcmVtb3ZlIENjIGZyb20gY29tbWl0IHN1
-YmplY3QKPj4gICAgICAtIGFkZCBkZXZpY2V0cmVlIG1haW50YWluZXIKPj4gICAgICAtIG1vdmUg
-RG9jdW1lbnRhdGlvbiB0byBEb2N1bWVudGF0aW9uL2h3bW9uL3RtcDEwMwo+PiAgICAgIC0gcmVt
-b3ZlIGRldmljZXRyZWUgYmluZGluZ3MgZnJvbSBEb2N1bWVudGF0aW9uCj4+ICAgICAgLSBhZGQg
-Y29tcGF0aWJsZSBzdHJpbmcgdG8KPj4gICAgICAgICJEb2N1bWVudGF0aW9uL2RldmljZXRyZWUv
-YmluZGluZ3MvaTJjL3RyaXZpYWwtZGV2aWNlcy50eHQiCj4+ICAgICAgLSByZW1vdmUgQ2FtZWxD
-YXNlCj4+ICAgICAgLSBmaXggQ29kaW5nc3R5bGUgaXNzdWVzCj4+ICAgICAgLSB1c2UgQVRUUklC
-VVRFX0dST1VQUyBhbmQgZGV2bV9od21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9ncm91cHMoKQo+
-PiAgICAgIC0gcmVtb3ZlIHVuc3VzZWQgZGVmaW5lIFRNUDEwM19DT05GSUdfUkRfT05MWQo+PiAg
-ICAgIC0gcmVzdG9yZSBjb25maWcgcmVnaXN0ZXIgd2hlbiBleGl0KCkKPj4gICAgICAtIHVzZSBy
-ZWdtYXAKPj4gLSBjaGFuZ2VzIGZvciB2MzoKPj4gICAgYWdhaW4gYSBsb3Qgb2YgZmFudGFzdGlj
-IHRpcHMgaG93IHRvIHVzZSByZWdtYXAgZWZmaWNpZW50bHkKPj4gICAgZnJvbSBHdWVudGVyIFJv
-ZWNrOgo+PiAgICAtIGdldCByaWQgb2YgInN0cnVjdCB0bXAxMDMiCj4+ICAgIC0gZ2V0IHJpZCBv
-ZiAic3RhdGljIGNvbnN0IHU4IHRtcDEwM19yZWdbXSIKPj4gICAgLSBnZXQgcmlkIG9mIG11dGV4
-IGxvY2sKPj4gICAgLSBkcm9wIGNvbmZpZ19vcmlnIGVudGlyZWx5Cj4+ICAgIC0gdXNlIHJlZ21h
-cF91cGRhdGVfYml0cygpCj4+IC0gY2hhbmdlcyBmb3IgdjQ6Cj4+ICAgIC0gYWRkIGNvbW1lbnQg
-ZnJvbSBHdWVudGVyIFJvZWNrOgo+PiAgICAgIGRlZmluZSBUTVAxMDNfQ09ORklHX01BU0sgYW5k
-IFRNUDEwM19DT05GX1NEX01BU0sKPj4gICAgICBzZXBhcmF0ZWx5IHRvIGVuc3VyZSB5b3UgY2F0
-Y2ggYWxsIHRoZSB0by1iZS1jbGVhcmVkIGJpdHMuCj4+IC0gY2hhbmdlcyBmb3IgdjU6Cj4+ICAg
-IGFkZCBjb21tZW50IGZyb20gR3VlbnRlciBSb2VjazoKPj4gICAgLSB1c2UgIiNkZWZpbmUgVE1Q
-MTAzX0NPTkZfU0QgVE1QMTAzX0NPTkZfTTEiCj4+ICAgIGFkZCBjb21tZW50IGZyb20gTWFyayBS
-dXRsYW5kOgo+PiAgICAtIHVzZSBmdWxsIHN0cmluZyBmb3IgRFQgY29tcGF0aWJsZSBzdHJpbmcg
-bWF0Y2hpbmcsIGluc3RlYWQgb2YKPj4gICAgICBEUklWRVJfTkFNRS4gR2V0IHJpZCBjb21wbGV0
-ZSBvZiBEUklWRVJfTkFNRSBkZWZpbmUuCj4+Cj4+ICAgLi4uL2RldmljZXRyZWUvYmluZGluZ3Mv
-aTJjL3RyaXZpYWwtZGV2aWNlcy50eHQgICAgfCAgIDEgKwo+PiAgIERvY3VtZW50YXRpb24vaHdt
-b24vdG1wMTAzICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI4ICsrKwo+PiAgIGRyaXZlcnMv
-aHdtb24vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEwICsKPj4gICBk
-cml2ZXJzL2h3bW9uL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSAr
-Cj4+ICAgZHJpdmVycy9od21vbi90bXAxMDMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
-fCAyMDUgKysrKysrKysrKysrKysrKysrKysrCj4+ICAgNSBmaWxlcyBjaGFuZ2VkLCAyNDUgaW5z
-ZXJ0aW9ucygrKQo+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2h3bW9uL3Rt
-cDEwMwo+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2h3bW9uL3RtcDEwMy5jCj4+Cj4+
-IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL3RyaXZp
-YWwtZGV2aWNlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL3Ry
-aXZpYWwtZGV2aWNlcy50eHQKPj4gaW5kZXggYmVmODZlNS4uZmM5NDRlMCAxMDA2NDQKPj4gLS0t
-IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy90cml2aWFsLWRldmljZXMu
-dHh0Cj4+ICsrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvdHJpdmlh
-bC1kZXZpY2VzLnR4dAo+PiBAQCAtODMsNSArODMsNiBAQCBzdG0sbTQxdDgwICAgICAgICBNNDFU
-ODAgLSBTRVJJQUwgQUNDRVNTIFJUQyBXSVRIIEFMQVJNUwo+PiAgIHRhb3MsdHNsMjU1MCAgICAg
-ICAgQW1iaWVudCBMaWdodCBTZW5zb3Igd2l0aCBTTUJVUy9Ud28gV2lyZSBTZXJpYWwgSW50ZXJm
-YWNlCj4+ICAgdGksdHNjMjAwMyAgICAgICAgSTJDIFRvdWNoLVNjcmVlbiBDb250cm9sbGVyCj4+
-ICAgdGksdG1wMTAyICAgICAgICBMb3cgUG93ZXIgRGlnaXRhbCBUZW1wZXJhdHVyZSBTZW5zb3Ig
-d2l0aCBTTUJVUy9Ud28gV2lyZSBTZXJpYWwgSW50ZXJmYWNlCj4+ICt0aSx0bXAxMDMgICAgICAg
-IExvdyBQb3dlciBEaWdpdGFsIFRlbXBlcmF0dXJlIFNlbnNvciB3aXRoIFNNQlVTL1R3byBXaXJl
-IFNlcmlhbCBJbnRlcmZhY2UKPj4gICB0aSx0bXAyNzUgICAgICAgIERpZ2l0YWwgVGVtcGVyYXR1
-cmUgU2Vuc29yCj4+ICAgd2luYm9uZCx3cGN0MzAxICAgICAgICBpMmMgdHJ1c3RlZCBwbGF0Zm9y
-bSBtb2R1bGUgKFRQTSkKPj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vdG1wMTAz
-IGIvRG9jdW1lbnRhdGlvbi9od21vbi90bXAxMDMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4g
-aW5kZXggMDAwMDAwMC4uZWMwMGExNQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL0RvY3VtZW50
-YXRpb24vaHdtb24vdG1wMTAzCj4+IEBAIC0wLDAgKzEsMjggQEAKPj4gK0tlcm5lbCBkcml2ZXIg
-dG1wMTAzCj4+ICs9PT09PT09PT09PT09PT09PT09PQo+PiArCj4+ICtTdXBwb3J0ZWQgY2hpcHM6
-Cj4+ICsgICogVGV4YXMgSW5zdHJ1bWVudHMgVE1QMTAzCj4+ICsgICAgUHJlZml4OiAndG1wMTAz
-Jwo+PiArICAgIEFkZHJlc3NlcyBzY2FubmVkOiBub25lCj4+ICsgICAgUHJvZHVjdCBpbmZvIGFu
-ZCBkYXRhc2hlZXQ6IGh0dHA6Ly93d3cudGkuY29tL3Byb2R1Y3QvdG1wMTAzCj4+ICsKPj4gK0F1
-dGhvcjoKPj4gKyAgICBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KPj4gKwo+PiArRGVzY3Jp
-cHRpb24KPj4gKy0tLS0tLS0tLS0tCj4+ICsKPj4gK1RoZSBUTVAxMDMgaXMgYSBkaWdpdGFsIG91
-dHB1dCB0ZW1wZXJhdHVyZSBzZW5zb3IgaW4gYSBmb3VyLWJhbGwKPj4gK3dhZmVyIGNoaXAtc2Nh
-bGUgcGFja2FnZSAoV0NTUCkuIFRoZSBUTVAxMDMgaXMgY2FwYWJsZSBvZiByZWFkaW5nCj4+ICt0
-ZW1wZXJhdHVyZXMgdG8gYSByZXNvbHV0aW9uIG9mIDHCsEMuIFRoZSBUTVAxMDMgaXMgc3BlY2lm
-aWVkIGZvcgo+PiArb3BlcmF0aW9uIG92ZXIgYSB0ZW1wZXJhdHVyZSByYW5nZSBvZiDigJM0MMKw
-QyB0byArMTI1wrBDLgo+PiArCj4+ICtSZXNvbHV0aW9uOiA4IEJpdHMKPj4gK0FjY3VyYWN5OiDC
-sTHCsEMgVHlwICjigJMxMMKwQyB0byArMTAwwrBDKQo+PiArCj4+ICtUaGUgZHJpdmVyIHByb3Zp
-ZGVzIHRoZSBjb21tb24gc3lzZnMtaW50ZXJmYWNlIGZvciB0ZW1wZXJhdHVyZXMgKHNlZQo+PiAr
-RG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UgdW5kZXIgVGVtcGVyYXR1cmVzKS4K
-Pj4gKwo+PiArUGxlYXNlIHJlZmVyIGhvdyB0byBpbnN0YW50aWF0ZSB0aGlzIGRyaXZlcjoKPj4g
-K0RvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcwo+PiBkaWZmIC0tZ2l0IGEv
-ZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCj4+IGluZGV4IDA4
-NTMxYTEuLmM4ODJkNGIgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZwo+PiAr
-KysgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKPj4gQEAgLTEzOTEsNiArMTM5MSwxNiBAQCBjb25m
-aWcgU0VOU09SU19UTVAxMDIKPj4gICAgICAgICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWls
-dCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCj4+ICAgICAgICAgd2lsbCBiZSBjYWxs
-ZWQgdG1wMTAyLgo+PiArY29uZmlnIFNFTlNPUlNfVE1QMTAzCj4+ICsgICAgdHJpc3RhdGUgIlRl
-eGFzIEluc3RydW1lbnRzIFRNUDEwMyIKPj4gKyAgICBkZXBlbmRzIG9uIEkyQwo+PiArICAgIGhl
-bHAKPj4gKyAgICAgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBUZXhh
-cyBJbnN0cnVtZW50cyBUTVAxMDMKPj4gKyAgICAgIHNlbnNvciBjaGlwcy4KPj4gKwo+PiArICAg
-ICAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhl
-IG1vZHVsZQo+PiArICAgICAgd2lsbCBiZSBjYWxsZWQgdG1wMTAzLgo+PiArCj4+ICAgY29uZmln
-IFNFTlNPUlNfVE1QNDAxCj4+ICAgICAgIHRyaXN0YXRlICJUZXhhcyBJbnN0cnVtZW50cyBUTVA0
-MDEgYW5kIGNvbXBhdGlibGVzIgo+PiAgICAgICBkZXBlbmRzIG9uIEkyQwo+PiBkaWZmIC0tZ2l0
-IGEvZHJpdmVycy9od21vbi9NYWtlZmlsZSBiL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKPj4gaW5k
-ZXggM2RjMGYwMi4uY2MwZGYxZWYgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZp
-bGUKPj4gKysrIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQo+PiBAQCAtMTM1LDYgKzEzNSw3IEBA
-IG9iai0kKENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIpKz0gc21zYzQ3bTE5Mi5vCj4+ICAgb2Jq
-LSQoQ09ORklHX1NFTlNPUlNfQU1DNjgyMSkgICAgKz0gYW1jNjgyMS5vCj4+ICAgb2JqLSQoQ09O
-RklHX1NFTlNPUlNfVEhNQzUwKSAgICArPSB0aG1jNTAubwo+PiAgIG9iai0kKENPTkZJR19TRU5T
-T1JTX1RNUDEwMikgICAgKz0gdG1wMTAyLm8KPj4gK29iai0kKENPTkZJR19TRU5TT1JTX1RNUDEw
-MykgICAgKz0gdG1wMTAzLm8KPj4gICBvYmotJChDT05GSUdfU0VOU09SU19UTVA0MDEpICAgICs9
-IHRtcDQwMS5vCj4+ICAgb2JqLSQoQ09ORklHX1NFTlNPUlNfVE1QNDIxKSAgICArPSB0bXA0MjEu
-bwo+PiAgIG9iai0kKENPTkZJR19TRU5TT1JTX1RXTDQwMzBfTUFEQykrPSB0d2w0MDMwLW1hZGMt
-aHdtb24ubwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi90bXAxMDMuYyBiL2RyaXZlcnMv
-aHdtb24vdG1wMTAzLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4u
-ZTY5ZGJjYQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvaHdtb24vdG1wMTAzLmMK
-Pj4gQEAgLTAsMCArMSwyMDUgQEAKPj4gKy8qCj4+ICsgKiBUZXhhcyBJbnN0cnVtZW50cyBUTVAx
-MDMgU01CdXMgdGVtcGVyYXR1cmUgc2Vuc29yIGRyaXZlcgo+PiArICogQ29weXJpZ2h0IChDKSAy
-MDE0IEhlaWtvIFNjaG9jaGVyIDxoc0BkZW54LmRlPgo+PiArICoKPj4gKyAqIEJhc2VkIG9uOgo+
-PiArICogVGV4YXMgSW5zdHJ1bWVudHMgVE1QMTAyIFNNQnVzIHRlbXBlcmF0dXJlIHNlbnNvciBk
-cml2ZXIKPj4gKyAqCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RldmVuIEtpbmcgPHNma2lu
-Z0BmZHdkYy5jb20+Cj4+ICsgKgo+PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7
-IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRo
-ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
-Cj4+ICsgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9m
-IHRoZSBMaWNlbnNlLCBvcgo+PiArICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
-bi4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
-dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
-d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ICsgKiBNRVJDSEFOVEFCSUxJ
-VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4+ICsgKiBH
-TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiArICoKPj4gKyAq
-Lwo+PiArCj4+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgv
-aW5pdC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9p
-MmMuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9od21vbi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2h3
-bW9uLXN5c2ZzLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvZXJyLmg+Cj4+ICsjaW5jbHVkZSA8bGlu
-dXgvbXV0ZXguaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPj4gKyNpbmNsdWRlIDxs
-aW51eC9qaWZmaWVzLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cj4+ICsKPj4gKyNk
-ZWZpbmUgVE1QMTAzX1RFTVBfUkVHICAgICAgICAweDAwCj4+ICsjZGVmaW5lIFRNUDEwM19DT05G
-X1JFRyAgICAgICAgMHgwMQo+PiArI2RlZmluZSBUTVAxMDNfVExPV19SRUcgICAgICAgIDB4MDIK
-Pj4gKyNkZWZpbmUgVE1QMTAzX1RISUdIX1JFRyAgICAweDAzCj4+ICsKPj4gKyNkZWZpbmUgVE1Q
-MTAzX0NPTkZfTTAgICAgICAgIDB4MDEKPj4gKyNkZWZpbmUgVE1QMTAzX0NPTkZfTTEgICAgICAg
-IDB4MDIKPj4gKyNkZWZpbmUgVE1QMTAzX0NPTkZfTEMgICAgICAgIDB4MDQKPj4gKyNkZWZpbmUg
-VE1QMTAzX0NPTkZfRkwgICAgICAgIDB4MDgKPj4gKyNkZWZpbmUgVE1QMTAzX0NPTkZfRkggICAg
-ICAgIDB4MTAKPj4gKyNkZWZpbmUgVE1QMTAzX0NPTkZfQ1IwICAgICAgICAweDIwCj4+ICsjZGVm
-aW5lIFRNUDEwM19DT05GX0NSMSAgICAgICAgMHg0MAo+PiArI2RlZmluZSBUTVAxMDNfQ09ORl9J
-RCAgICAgICAgMHg4MAo+PiArI2RlZmluZSBUTVAxMDNfQ09ORl9TRCAgICAgICAgKFRNUDEwM19D
-T05GX00xKQo+PiArI2RlZmluZSBUTVAxMDNfQ09ORl9TRF9NQVNLICAgIChUTVAxMDNfQ09ORl9N
-MCB8IFRNUDEwM19DT05GX00xKQo+PiArCj4+ICsjZGVmaW5lIFRNUDEwM19DT05GSUcgICAgICAg
-IChUTVAxMDNfQ09ORl9DUjEgfCBUTVAxMDNfQ09ORl9NMSkKPj4gKyNkZWZpbmUgVE1QMTAzX0NP
-TkZJR19NQVNLICAgIChUTVAxMDNfQ09ORl9DUjAgfCBUTVAxMDNfQ09ORl9DUjEgfCBcCj4+ICsg
-ICAgICAgICAgICAgICAgIFRNUDEwM19DT05GX00wIHwgVE1QMTAzX0NPTkZfTTEpCj4+ICsKPj4g
-K3N0YXRpYyBpbmxpbmUgaW50IHRtcDEwM19yZWdfdG9fbWMoczggdmFsKQo+PiArewo+PiArICAg
-IHJldHVybiB2YWwgKiAxMDAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHU4IHRtcDEw
-M19tY190b19yZWcoaW50IHZhbCkKPj4gK3sKPj4gKyAgICByZXR1cm4gRElWX1JPVU5EX0NMT1NF
-U1QodmFsLCAxMDAwKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHNzaXplX3QgdG1wMTAzX3Nob3df
-dGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCj4+ICsgICAgICAgICAgICAgICAgc3RydWN0IGRldmlj
-ZV9hdHRyaWJ1dGUgKmF0dHIsCj4+ICsgICAgICAgICAgICAgICAgY2hhciAqYnVmKQo+PiArewo+
-PiArICAgIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2RhID0gdG9fc2Vuc29yX2Rl
-dl9hdHRyKGF0dHIpOwo+PiArICAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGRldl9nZXRfZHJ2
-ZGF0YShkZXYpOwo+PiArICAgIHVuc2lnbmVkIGludCByZWd2YWw7Cj4+ICsgICAgaW50IHJldDsK
-Pj4gKwo+PiArICAgIHJldCA9IHJlZ21hcF9yZWFkKHJlZ21hcCwgc2RhLT5pbmRleCwgJnJlZ3Zh
-bCk7Cj4+ICsgICAgaWYgKHJldCA8IDApCj4+ICsgICAgICAgIHJldHVybiByZXQ7Cj4+ICsKPj4g
-KyAgICByZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdG1wMTAzX3JlZ190b19tYyhyZWd2YWwp
-KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHNzaXplX3QgdG1wMTAzX3NldF90ZW1wKHN0cnVjdCBk
-ZXZpY2UgKmRldiwKPj4gKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0
-ZSAqYXR0ciwKPj4gKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBj
-b3VudCkKPj4gK3sKPj4gKyAgICBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNkYSA9
-IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKPj4gKyAgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXAg
-PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPj4gKyAgICBsb25nIHZhbDsKPj4gKyAgICBpbnQgcmV0
-Owo+PiArCj4+ICsgICAgaWYgKGtzdHJ0b2woYnVmLCAxMCwgJnZhbCkgPCAwKQo+PiArICAgICAg
-ICByZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArICAgIHZhbCA9IGNsYW1wX3ZhbCh2YWwsIC01NTAw
-MCwgMTI3MDAwKTsKPj4gKyAgICByZXQgPSByZWdtYXBfd3JpdGUocmVnbWFwLCBzZGEtPmluZGV4
-LCB0bXAxMDNfbWNfdG9fcmVnKHZhbCkpOwo+PiArICAgIHJldHVybiByZXQgPyByZXQgOiBjb3Vu
-dDsKPj4gK30KPj4gKwo+PiArc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwg
-U19JUlVHTywgdG1wMTAzX3Nob3dfdGVtcCwgTlVMTCAsCj4+ICsgICAgICAgICAgICAgIFRNUDEw
-M19URU1QX1JFRyk7Cj4+ICsKPj4gK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWlu
-LCBTX0lXVVNSIHwgU19JUlVHTywgdG1wMTAzX3Nob3dfdGVtcCwKPj4gKyAgICAgICAgICAgICAg
-dG1wMTAzX3NldF90ZW1wLCBUTVAxMDNfVExPV19SRUcpOwo+PiArCj4+ICtzdGF0aWMgU0VOU09S
-X0RFVklDRV9BVFRSKHRlbXAxX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHRtcDEwM19zaG93X3Rl
-bXAsCj4+ICsgICAgICAgICAgICAgIHRtcDEwM19zZXRfdGVtcCwgVE1QMTAzX1RISUdIX1JFRyk7
-Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp0bXAxMDNfYXR0cnNbXSA9IHsKPj4g
-KyAgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCj4+ICsgICAg
-JnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW4uZGV2X2F0dHIuYXR0ciwKPj4gKyAgICAmc2Vuc29y
-X2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0ci5hdHRyLAo+PiArICAgIE5VTEwKPj4gK307Cj4+
-ICtBVFRSSUJVVEVfR1JPVVBTKHRtcDEwMyk7Cj4+ICsKPj4gK3N0YXRpYyBib29sIHRtcDEwM19y
-ZWdtYXBfaXNfdm9sYXRpbGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnKQo+
-PiArewo+PiArICAgIHJldHVybiByZWcgPT0gVE1QMTAzX1RFTVBfUkVHOwo+PiArfQo+PiArCj4+
-ICtzdGF0aWMgc3RydWN0IHJlZ21hcF9jb25maWcgdG1wMTAzX3JlZ21hcF9jb25maWcgPSB7Cj4+
-ICsgICAgLnJlZ19iaXRzID0gOCwKPj4gKyAgICAudmFsX2JpdHMgPSA4LAo+PiArICAgIC5tYXhf
-cmVnaXN0ZXIgPSBUTVAxMDNfVEhJR0hfUkVHLAo+PiArICAgIC52b2xhdGlsZV9yZWcgPSB0bXAx
-MDNfcmVnbWFwX2lzX3ZvbGF0aWxlLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGludCB0bXAxMDNf
-cHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKPj4gKyAgICAgICAgICAgIGNvbnN0IHN0
-cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKPj4gK3sKPj4gKyAgICBzdHJ1Y3QgZGV2aWNlICpkZXYg
-PSAmY2xpZW50LT5kZXY7Cj4+ICsgICAgc3RydWN0IGRldmljZSAqaHdtb25fZGV2Owo+PiArICAg
-IHN0cnVjdCByZWdtYXAgKnJlZ21hcDsKPj4gKyAgICBpbnQgcmV0Owo+PiArCj4+ICsgICAgaWYg
-KCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCj4+ICsgICAgICAgICAg
-ICAgICAgICAgICBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKSB7Cj4+ICsgICAgICAgIGRldl9l
-cnIoJmNsaWVudC0+ZGV2LAo+PiArICAgICAgICAgICAgImFkYXB0ZXIgZG9lc24ndCBzdXBwb3J0
-IFNNQnVzIGJ5dGUgdHJhbnNhY3Rpb25zXG4iKTsKPj4gKyAgICAgICAgcmV0dXJuIC1FTk9ERVY7
-Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xp
-ZW50LCAmdG1wMTAzX3JlZ21hcF9jb25maWcpOwo+PiArICAgIGlmIChJU19FUlIocmVnbWFwKSkg
-ewo+PiArICAgICAgICBkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSByZWdpc3RlciBt
-YXBcbiIpOwo+PiArICAgICAgICByZXR1cm4gUFRSX0VSUihyZWdtYXApOwo+PiArICAgIH0KPj4g
-Kwo+PiArICAgIHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIFRNUDEwM19DT05GX1JF
-RywgVE1QMTAzX0NPTkZJR19NQVNLLAo+PiArICAgICAgICAgICAgICAgICBUTVAxMDNfQ09ORklH
-KTsKPj4gKyAgICBpZiAocmV0IDwgMCkgewo+PiArICAgICAgICBkZXZfZXJyKCZjbGllbnQtPmRl
-diwgImVycm9yIHdyaXRpbmcgY29uZmlnIHJlZ2lzdGVyXG4iKTsKPj4gKyAgICAgICAgcmV0dXJu
-IHJldDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBod21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVn
-aXN0ZXJfd2l0aF9ncm91cHMoZGV2LCBjbGllbnQtPm5hbWUsCj4+ICsgICAgICAgICAgICAgICAg
-ICAgICAgICAgICAgICByZWdtYXAsIHRtcDEwM19ncm91cHMpOwo+PiArICAgIHJldHVybiBQVFJf
-RVJSX09SX1pFUk8oaHdtb25fZGV2KTsKPj4gK30KPj4gKwo+PiArI2lmZGVmIENPTkZJR19QTQo+
-PiArc3RhdGljIGludCB0bXAxMDNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+ICt7Cj4+
-ICsgICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4+ICsK
-Pj4gKyAgICByZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgVE1QMTAzX0NPTkZfUkVH
-LAo+PiArICAgICAgICAgICAgICAgICAgVE1QMTAzX0NPTkZfU0RfTUFTSywgMCk7Cj4+ICt9Cj4+
-ICsKPj4gK3N0YXRpYyBpbnQgdG1wMTAzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+ICt7
-Cj4+ICsgICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4+
-ICsKPj4gKyAgICByZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgVE1QMTAzX0NPTkZf
-UkVHLAo+PiArICAgICAgICAgICAgICAgICAgVE1QMTAzX0NPTkZfU0RfTUFTSywgVE1QMTAzX0NP
-TkZfU0QpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdG1w
-MTAzX2Rldl9wbV9vcHMgPSB7Cj4+ICsgICAgLnN1c3BlbmQgICAgPSB0bXAxMDNfc3VzcGVuZCwK
-Pj4gKyAgICAucmVzdW1lICAgICAgICA9IHRtcDEwM19yZXN1bWUsCj4+ICt9Owo+PiArCj4+ICsj
-ZGVmaW5lIFRNUDEwM19ERVZfUE1fT1BTICgmdG1wMTAzX2Rldl9wbV9vcHMpCj4+ICsjZWxzZQo+
-PiArI2RlZmluZSAgICBUTVAxMDNfREVWX1BNX09QUyBOVUxMCj4+ICsjZW5kaWYgLyogQ09ORklH
-X1BNICovCj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0bXAxMDNf
-aWRbXSA9IHsKPj4gKyAgICB7ICJ0bXAxMDMiLCAwIH0sCj4+ICsgICAgeyB9Cj4+ICt9Owo+Cj4g
-SW4gdGhlIGJpbmRpbmdzIHlvdSBhcmUgZ2l2aW5nIHRoZSBjb21wYXRpYmxlIHByb3BlcnR5IGFz
-IDogdGksdG1wMTAzLCBidXQgaGVyZSBvbmx5IHRtcDEwMy4KPgo+IEluc3RlYWQgb2YgdXNpbmcg
-dGhlIGkyY19kZXZpY2VfaWQgc3RydWN0ICwgdXNlIG9mX2RldmljZV9pZCBzdHJ1Y3QgZm9yIGdp
-dmluZyB0aGUKPiBjb21wYXRpYmxlIHByb3BlcnR5IHZhbHVlLgo+IGNvbXBhdGJsZSA9ICI8bWFu
-dWZhY3R1cmVyPiw8bW9kZWw+Igo+CgpOby4gV2UgZG9uJ3QgZG8gdGhhdCBmb3Igb3RoZXIgaTJj
-IGRyaXZlcnMsIGFuZCB0aGUgaTJjIHN1YnN5c3RlbSBoYW5kbGVzCnRoaXMgY2FzZSwgc28gaXQg
-ZG9lcyBub3Qgc2Vuc2UgdG8gc3RhcnQgdGhhdCB3aXRoIHRoaXMgZHJpdmVyIGp1c3QKZm9yIHRo
-ZSBzYWtlIG9mIG1ha2luZyB0aGUgY29kZSBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gaXQgaGFzIHRv
-IGJlLgoKVGhhbmtzLApHdWVudGVyCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
-X19fX19fX19fX19fX18KbG0tc2Vuc29ycyBtYWlsaW5nIGxpc3QKbG0tc2Vuc29yc0BsbS1zZW5z
-b3JzLm9yZwpodHRwOi8vbGlzdHMubG0tc2Vuc29ycy5vcmcvbWFpbG1hbi9saXN0aW5mby9sbS1z
-ZW5zb3Jz
+On 06/17/2014 10:46 PM, Varka Bhadram wrote:
+> Hi,
+>
+> On 06/18/2014 11:07 AM, Heiko Schocher wrote:
+>> Driver for the TI TMP103.
+>>
+>> The TI TMP103 is similar to the TMP102.  It differs from the TMP102
+>> by having only 8 bit registers.
+>>
+>> Signed-off-by: Heiko Schocher <hs@denx.de>
+>>
+>> ---
+>>
+>> Cc: Jean Delvare <khali@linux-fr.org>
+>> Cc: Guenter Roeck <linux@roeck-us.net>
+>> Cc: linux-kernel@vger.kernel.org
+>> Cc: devicetree@vger.kernel.org
+>> Cc: linux-doc@vger.kernel.org
+>> Cc: Mark Rutland <mark.rutland@arm.com>
+>>
+>> - change for v2:
+>>    - add comments from GuenterRoeck:
+>>      - remove Cc from commit subject
+>>      - add devicetree maintainer
+>>      - move Documentation to Documentation/hwmon/tmp103
+>>      - remove devicetree bindings from Documentation
+>>      - add compatible string to
+>>        "Documentation/devicetree/bindings/i2c/trivial-devices.txt"
+>>      - remove CamelCase
+>>      - fix Codingstyle issues
+>>      - use ATTRIBUTE_GROUPS and devm_hwmon_device_register_with_groups()
+>>      - remove unsused define TMP103_CONFIG_RD_ONLY
+>>      - restore config register when exit()
+>>      - use regmap
+>> - changes for v3:
+>>    again a lot of fantastic tips how to use regmap efficiently
+>>    from Guenter Roeck:
+>>    - get rid of "struct tmp103"
+>>    - get rid of "static const u8 tmp103_reg[]"
+>>    - get rid of mutex lock
+>>    - drop config_orig entirely
+>>    - use regmap_update_bits()
+>> - changes for v4:
+>>    - add comment from Guenter Roeck:
+>>      define TMP103_CONFIG_MASK and TMP103_CONF_SD_MASK
+>>      separately to ensure you catch all the to-be-cleared bits.
+>> - changes for v5:
+>>    add comment from Guenter Roeck:
+>>    - use "#define TMP103_CONF_SD TMP103_CONF_M1"
+>>    add comment from Mark Rutland:
+>>    - use full string for DT compatible string matching, instead of
+>>      DRIVER_NAME. Get rid complete of DRIVER_NAME define.
+>>
+>>   .../devicetree/bindings/i2c/trivial-devices.txt    |   1 +
+>>   Documentation/hwmon/tmp103                         |  28 +++
+>>   drivers/hwmon/Kconfig                              |  10 +
+>>   drivers/hwmon/Makefile                             |   1 +
+>>   drivers/hwmon/tmp103.c                             | 205 +++++++++++++++++++++
+>>   5 files changed, 245 insertions(+)
+>>   create mode 100644 Documentation/hwmon/tmp103
+>>   create mode 100644 drivers/hwmon/tmp103.c
+>>
+>> diff --git a/Documentation/devicetree/bindings/i2c/trivial-devices.txt b/Documentation/devicetree/bindings/i2c/trivial-devices.txt
+>> index bef86e5..fc944e0 100644
+>> --- a/Documentation/devicetree/bindings/i2c/trivial-devices.txt
+>> +++ b/Documentation/devicetree/bindings/i2c/trivial-devices.txt
+>> @@ -83,5 +83,6 @@ stm,m41t80        M41T80 - SERIAL ACCESS RTC WITH ALARMS
+>>   taos,tsl2550        Ambient Light Sensor with SMBUS/Two Wire Serial Interface
+>>   ti,tsc2003        I2C Touch-Screen Controller
+>>   ti,tmp102        Low Power Digital Temperature Sensor with SMBUS/Two Wire Serial Interface
+>> +ti,tmp103        Low Power Digital Temperature Sensor with SMBUS/Two Wire Serial Interface
+>>   ti,tmp275        Digital Temperature Sensor
+>>   winbond,wpct301        i2c trusted platform module (TPM)
+>> diff --git a/Documentation/hwmon/tmp103 b/Documentation/hwmon/tmp103
+>> new file mode 100644
+>> index 0000000..ec00a15
+>> --- /dev/null
+>> +++ b/Documentation/hwmon/tmp103
+>> @@ -0,0 +1,28 @@
+>> +Kernel driver tmp103
+>> +====================
+>> +
+>> +Supported chips:
+>> +  * Texas Instruments TMP103
+>> +    Prefix: 'tmp103'
+>> +    Addresses scanned: none
+>> +    Product info and datasheet: http://www.ti.com/product/tmp103
+>> +
+>> +Author:
+>> +    Heiko Schocher <hs@denx.de>
+>> +
+>> +Description
+>> +-----------
+>> +
+>> +The TMP103 is a digital output temperature sensor in a four-ball
+>> +wafer chip-scale package (WCSP). The TMP103 is capable of reading
+>> +temperatures to a resolution of 1°C. The TMP103 is specified for
+>> +operation over a temperature range of –40°C to +125°C.
+>> +
+>> +Resolution: 8 Bits
+>> +Accuracy: ±1°C Typ (–10°C to +100°C)
+>> +
+>> +The driver provides the common sysfs-interface for temperatures (see
+>> +Documentation/hwmon/sysfs-interface under Temperatures).
+>> +
+>> +Please refer how to instantiate this driver:
+>> +Documentation/i2c/instantiating-devices
+>> diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
+>> index 08531a1..c882d4b 100644
+>> --- a/drivers/hwmon/Kconfig
+>> +++ b/drivers/hwmon/Kconfig
+>> @@ -1391,6 +1391,16 @@ config SENSORS_TMP102
+>>         This driver can also be built as a module.  If so, the module
+>>         will be called tmp102.
+>> +config SENSORS_TMP103
+>> +    tristate "Texas Instruments TMP103"
+>> +    depends on I2C
+>> +    help
+>> +      If you say yes here you get support for Texas Instruments TMP103
+>> +      sensor chips.
+>> +
+>> +      This driver can also be built as a module.  If so, the module
+>> +      will be called tmp103.
+>> +
+>>   config SENSORS_TMP401
+>>       tristate "Texas Instruments TMP401 and compatibles"
+>>       depends on I2C
+>> diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
+>> index 3dc0f02..cc0df1ef 100644
+>> --- a/drivers/hwmon/Makefile
+>> +++ b/drivers/hwmon/Makefile
+>> @@ -135,6 +135,7 @@ obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o
+>>   obj-$(CONFIG_SENSORS_AMC6821)    += amc6821.o
+>>   obj-$(CONFIG_SENSORS_THMC50)    += thmc50.o
+>>   obj-$(CONFIG_SENSORS_TMP102)    += tmp102.o
+>> +obj-$(CONFIG_SENSORS_TMP103)    += tmp103.o
+>>   obj-$(CONFIG_SENSORS_TMP401)    += tmp401.o
+>>   obj-$(CONFIG_SENSORS_TMP421)    += tmp421.o
+>>   obj-$(CONFIG_SENSORS_TWL4030_MADC)+= twl4030-madc-hwmon.o
+>> diff --git a/drivers/hwmon/tmp103.c b/drivers/hwmon/tmp103.c
+>> new file mode 100644
+>> index 0000000..e69dbca
+>> --- /dev/null
+>> +++ b/drivers/hwmon/tmp103.c
+>> @@ -0,0 +1,205 @@
+>> +/*
+>> + * Texas Instruments TMP103 SMBus temperature sensor driver
+>> + * Copyright (C) 2014 Heiko Schocher <hs@denx.de>
+>> + *
+>> + * Based on:
+>> + * Texas Instruments TMP102 SMBus temperature sensor driver
+>> + *
+>> + * Copyright (C) 2010 Steven King <sfking@fdwdc.com>
+>> + *
+>> + * This program is free software; you can redistribute it and/or modify
+>> + * it under the terms of the GNU General Public License as published by
+>> + * the Free Software Foundation; either version 2 of the License, or
+>> + * (at your option) any later version.
+>> + *
+>> + * This program is distributed in the hope that it will be useful,
+>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
+>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+>> + * GNU General Public License for more details.
+>> + *
+>> + */
+>> +
+>> +#include <linux/module.h>
+>> +#include <linux/init.h>
+>> +#include <linux/slab.h>
+>> +#include <linux/i2c.h>
+>> +#include <linux/hwmon.h>
+>> +#include <linux/hwmon-sysfs.h>
+>> +#include <linux/err.h>
+>> +#include <linux/mutex.h>
+>> +#include <linux/device.h>
+>> +#include <linux/jiffies.h>
+>> +#include <linux/regmap.h>
+>> +
+>> +#define TMP103_TEMP_REG        0x00
+>> +#define TMP103_CONF_REG        0x01
+>> +#define TMP103_TLOW_REG        0x02
+>> +#define TMP103_THIGH_REG    0x03
+>> +
+>> +#define TMP103_CONF_M0        0x01
+>> +#define TMP103_CONF_M1        0x02
+>> +#define TMP103_CONF_LC        0x04
+>> +#define TMP103_CONF_FL        0x08
+>> +#define TMP103_CONF_FH        0x10
+>> +#define TMP103_CONF_CR0        0x20
+>> +#define TMP103_CONF_CR1        0x40
+>> +#define TMP103_CONF_ID        0x80
+>> +#define TMP103_CONF_SD        (TMP103_CONF_M1)
+>> +#define TMP103_CONF_SD_MASK    (TMP103_CONF_M0 | TMP103_CONF_M1)
+>> +
+>> +#define TMP103_CONFIG        (TMP103_CONF_CR1 | TMP103_CONF_M1)
+>> +#define TMP103_CONFIG_MASK    (TMP103_CONF_CR0 | TMP103_CONF_CR1 | \
+>> +                 TMP103_CONF_M0 | TMP103_CONF_M1)
+>> +
+>> +static inline int tmp103_reg_to_mc(s8 val)
+>> +{
+>> +    return val * 1000;
+>> +}
+>> +
+>> +static inline u8 tmp103_mc_to_reg(int val)
+>> +{
+>> +    return DIV_ROUND_CLOSEST(val, 1000);
+>> +}
+>> +
+>> +static ssize_t tmp103_show_temp(struct device *dev,
+>> +                struct device_attribute *attr,
+>> +                char *buf)
+>> +{
+>> +    struct sensor_device_attribute *sda = to_sensor_dev_attr(attr);
+>> +    struct regmap *regmap = dev_get_drvdata(dev);
+>> +    unsigned int regval;
+>> +    int ret;
+>> +
+>> +    ret = regmap_read(regmap, sda->index, &regval);
+>> +    if (ret < 0)
+>> +        return ret;
+>> +
+>> +    return sprintf(buf, "%d\n", tmp103_reg_to_mc(regval));
+>> +}
+>> +
+>> +static ssize_t tmp103_set_temp(struct device *dev,
+>> +                   struct device_attribute *attr,
+>> +                   const char *buf, size_t count)
+>> +{
+>> +    struct sensor_device_attribute *sda = to_sensor_dev_attr(attr);
+>> +    struct regmap *regmap = dev_get_drvdata(dev);
+>> +    long val;
+>> +    int ret;
+>> +
+>> +    if (kstrtol(buf, 10, &val) < 0)
+>> +        return -EINVAL;
+>> +
+>> +    val = clamp_val(val, -55000, 127000);
+>> +    ret = regmap_write(regmap, sda->index, tmp103_mc_to_reg(val));
+>> +    return ret ? ret : count;
+>> +}
+>> +
+>> +static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, tmp103_show_temp, NULL ,
+>> +              TMP103_TEMP_REG);
+>> +
+>> +static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, tmp103_show_temp,
+>> +              tmp103_set_temp, TMP103_TLOW_REG);
+>> +
+>> +static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, tmp103_show_temp,
+>> +              tmp103_set_temp, TMP103_THIGH_REG);
+>> +
+>> +static struct attribute *tmp103_attrs[] = {
+>> +    &sensor_dev_attr_temp1_input.dev_attr.attr,
+>> +    &sensor_dev_attr_temp1_min.dev_attr.attr,
+>> +    &sensor_dev_attr_temp1_max.dev_attr.attr,
+>> +    NULL
+>> +};
+>> +ATTRIBUTE_GROUPS(tmp103);
+>> +
+>> +static bool tmp103_regmap_is_volatile(struct device *dev, unsigned int reg)
+>> +{
+>> +    return reg == TMP103_TEMP_REG;
+>> +}
+>> +
+>> +static struct regmap_config tmp103_regmap_config = {
+>> +    .reg_bits = 8,
+>> +    .val_bits = 8,
+>> +    .max_register = TMP103_THIGH_REG,
+>> +    .volatile_reg = tmp103_regmap_is_volatile,
+>> +};
+>> +
+>> +static int tmp103_probe(struct i2c_client *client,
+>> +            const struct i2c_device_id *id)
+>> +{
+>> +    struct device *dev = &client->dev;
+>> +    struct device *hwmon_dev;
+>> +    struct regmap *regmap;
+>> +    int ret;
+>> +
+>> +    if (!i2c_check_functionality(client->adapter,
+>> +                     I2C_FUNC_SMBUS_BYTE_DATA)) {
+>> +        dev_err(&client->dev,
+>> +            "adapter doesn't support SMBus byte transactions\n");
+>> +        return -ENODEV;
+>> +    }
+>> +
+>> +    regmap = devm_regmap_init_i2c(client, &tmp103_regmap_config);
+>> +    if (IS_ERR(regmap)) {
+>> +        dev_err(dev, "failed to allocate register map\n");
+>> +        return PTR_ERR(regmap);
+>> +    }
+>> +
+>> +    ret = regmap_update_bits(regmap, TMP103_CONF_REG, TMP103_CONFIG_MASK,
+>> +                 TMP103_CONFIG);
+>> +    if (ret < 0) {
+>> +        dev_err(&client->dev, "error writing config register\n");
+>> +        return ret;
+>> +    }
+>> +
+>> +    hwmon_dev = hwmon_device_register_with_groups(dev, client->name,
+>> +                              regmap, tmp103_groups);
+>> +    return PTR_ERR_OR_ZERO(hwmon_dev);
+>> +}
+>> +
+>> +#ifdef CONFIG_PM
+>> +static int tmp103_suspend(struct device *dev)
+>> +{
+>> +    struct regmap *regmap = dev_get_drvdata(dev);
+>> +
+>> +    return regmap_update_bits(regmap, TMP103_CONF_REG,
+>> +                  TMP103_CONF_SD_MASK, 0);
+>> +}
+>> +
+>> +static int tmp103_resume(struct device *dev)
+>> +{
+>> +    struct regmap *regmap = dev_get_drvdata(dev);
+>> +
+>> +    return regmap_update_bits(regmap, TMP103_CONF_REG,
+>> +                  TMP103_CONF_SD_MASK, TMP103_CONF_SD);
+>> +}
+>> +
+>> +static const struct dev_pm_ops tmp103_dev_pm_ops = {
+>> +    .suspend    = tmp103_suspend,
+>> +    .resume        = tmp103_resume,
+>> +};
+>> +
+>> +#define TMP103_DEV_PM_OPS (&tmp103_dev_pm_ops)
+>> +#else
+>> +#define    TMP103_DEV_PM_OPS NULL
+>> +#endif /* CONFIG_PM */
+>> +
+>> +static const struct i2c_device_id tmp103_id[] = {
+>> +    { "tmp103", 0 },
+>> +    { }
+>> +};
+>
+> In the bindings you are giving the compatible property as : ti,tmp103, but here only tmp103.
+>
+> Instead of using the i2c_device_id struct , use of_device_id struct for giving the
+> compatible property value.
+> compatble = "<manufacturer>,<model>"
+>
+
+No. We don't do that for other i2c drivers, and the i2c subsystem handles
+this case, so it does not sense to start that with this driver just
+for the sake of making the code more complicated than it has to be.
+
+Thanks,
+Guenter
diff --git a/a/content_digest b/N1/content_digest
index 5a8a37e..fb30767 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,8 +1,8 @@
  "ref\01403069837-15651-1-git-send-email-hs@denx.de\0"
  "ref\053A127BB.7090802@gmail.com\0"
  "From\0Guenter Roeck <linux@roeck-us.net>\0"
- "Subject\0Re: [lm-sensors] [PATCH v5] hwmon: Driver for TI TMP103 temperature sensor\0"
- "Date\0Wed, 18 Jun 2014 06:12:11 +0000\0"
+ "Subject\0Re: [PATCH v5] hwmon: Driver for TI TMP103 temperature sensor\0"
+ "Date\0Tue, 17 Jun 2014 23:12:11 -0700\0"
  "To\0Varka Bhadram <varkabhadram@gmail.com>"
   Heiko Schocher <hs@denx.de>
  " lm-sensors@lm-sensors.org\0"
@@ -13,229 +13,353 @@
  " Mark Rutland <mark.rutland@arm.com>\0"
  "\00:1\0"
  "b\0"
- "T24gMDYvMTcvMjAxNCAxMDo0NiBQTSwgVmFya2EgQmhhZHJhbSB3cm90ZToKPiBIaSwKPgo+IE9u\n"
- "IDA2LzE4LzIwMTQgMTE6MDcgQU0sIEhlaWtvIFNjaG9jaGVyIHdyb3RlOgo+PiBEcml2ZXIgZm9y\n"
- "IHRoZSBUSSBUTVAxMDMuCj4+Cj4+IFRoZSBUSSBUTVAxMDMgaXMgc2ltaWxhciB0byB0aGUgVE1Q\n"
- "MTAyLiAgSXQgZGlmZmVycyBmcm9tIHRoZSBUTVAxMDIKPj4gYnkgaGF2aW5nIG9ubHkgOCBiaXQg\n"
- "cmVnaXN0ZXJzLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5k\n"
- "ZT4KPj4KPj4gLS0tCj4+Cj4+IENjOiBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4K\n"
- "Pj4gQ2M6IEd1ZW50ZXIgUm9lY2sgPGxpbnV4QHJvZWNrLXVzLm5ldD4KPj4gQ2M6IGxpbnV4LWtl\n"
- "cm5lbEB2Z2VyLmtlcm5lbC5vcmcKPj4gQ2M6IGRldmljZXRyZWVAdmdlci5rZXJuZWwub3JnCj4+\n"
- "IENjOiBsaW51eC1kb2NAdmdlci5rZXJuZWwub3JnCj4+IENjOiBNYXJrIFJ1dGxhbmQgPG1hcmsu\n"
- "cnV0bGFuZEBhcm0uY29tPgo+Pgo+PiAtIGNoYW5nZSBmb3IgdjI6Cj4+ICAgIC0gYWRkIGNvbW1l\n"
- "bnRzIGZyb20gR3VlbnRlclJvZWNrOgo+PiAgICAgIC0gcmVtb3ZlIENjIGZyb20gY29tbWl0IHN1\n"
- "YmplY3QKPj4gICAgICAtIGFkZCBkZXZpY2V0cmVlIG1haW50YWluZXIKPj4gICAgICAtIG1vdmUg\n"
- "RG9jdW1lbnRhdGlvbiB0byBEb2N1bWVudGF0aW9uL2h3bW9uL3RtcDEwMwo+PiAgICAgIC0gcmVt\n"
- "b3ZlIGRldmljZXRyZWUgYmluZGluZ3MgZnJvbSBEb2N1bWVudGF0aW9uCj4+ICAgICAgLSBhZGQg\n"
- "Y29tcGF0aWJsZSBzdHJpbmcgdG8KPj4gICAgICAgICJEb2N1bWVudGF0aW9uL2RldmljZXRyZWUv\n"
- "YmluZGluZ3MvaTJjL3RyaXZpYWwtZGV2aWNlcy50eHQiCj4+ICAgICAgLSByZW1vdmUgQ2FtZWxD\n"
- "YXNlCj4+ICAgICAgLSBmaXggQ29kaW5nc3R5bGUgaXNzdWVzCj4+ICAgICAgLSB1c2UgQVRUUklC\n"
- "VVRFX0dST1VQUyBhbmQgZGV2bV9od21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9ncm91cHMoKQo+\n"
- "PiAgICAgIC0gcmVtb3ZlIHVuc3VzZWQgZGVmaW5lIFRNUDEwM19DT05GSUdfUkRfT05MWQo+PiAg\n"
- "ICAgIC0gcmVzdG9yZSBjb25maWcgcmVnaXN0ZXIgd2hlbiBleGl0KCkKPj4gICAgICAtIHVzZSBy\n"
- "ZWdtYXAKPj4gLSBjaGFuZ2VzIGZvciB2MzoKPj4gICAgYWdhaW4gYSBsb3Qgb2YgZmFudGFzdGlj\n"
- "IHRpcHMgaG93IHRvIHVzZSByZWdtYXAgZWZmaWNpZW50bHkKPj4gICAgZnJvbSBHdWVudGVyIFJv\n"
- "ZWNrOgo+PiAgICAtIGdldCByaWQgb2YgInN0cnVjdCB0bXAxMDMiCj4+ICAgIC0gZ2V0IHJpZCBv\n"
- "ZiAic3RhdGljIGNvbnN0IHU4IHRtcDEwM19yZWdbXSIKPj4gICAgLSBnZXQgcmlkIG9mIG11dGV4\n"
- "IGxvY2sKPj4gICAgLSBkcm9wIGNvbmZpZ19vcmlnIGVudGlyZWx5Cj4+ICAgIC0gdXNlIHJlZ21h\n"
- "cF91cGRhdGVfYml0cygpCj4+IC0gY2hhbmdlcyBmb3IgdjQ6Cj4+ICAgIC0gYWRkIGNvbW1lbnQg\n"
- "ZnJvbSBHdWVudGVyIFJvZWNrOgo+PiAgICAgIGRlZmluZSBUTVAxMDNfQ09ORklHX01BU0sgYW5k\n"
- "IFRNUDEwM19DT05GX1NEX01BU0sKPj4gICAgICBzZXBhcmF0ZWx5IHRvIGVuc3VyZSB5b3UgY2F0\n"
- "Y2ggYWxsIHRoZSB0by1iZS1jbGVhcmVkIGJpdHMuCj4+IC0gY2hhbmdlcyBmb3IgdjU6Cj4+ICAg\n"
- "IGFkZCBjb21tZW50IGZyb20gR3VlbnRlciBSb2VjazoKPj4gICAgLSB1c2UgIiNkZWZpbmUgVE1Q\n"
- "MTAzX0NPTkZfU0QgVE1QMTAzX0NPTkZfTTEiCj4+ICAgIGFkZCBjb21tZW50IGZyb20gTWFyayBS\n"
- "dXRsYW5kOgo+PiAgICAtIHVzZSBmdWxsIHN0cmluZyBmb3IgRFQgY29tcGF0aWJsZSBzdHJpbmcg\n"
- "bWF0Y2hpbmcsIGluc3RlYWQgb2YKPj4gICAgICBEUklWRVJfTkFNRS4gR2V0IHJpZCBjb21wbGV0\n"
- "ZSBvZiBEUklWRVJfTkFNRSBkZWZpbmUuCj4+Cj4+ICAgLi4uL2RldmljZXRyZWUvYmluZGluZ3Mv\n"
- "aTJjL3RyaXZpYWwtZGV2aWNlcy50eHQgICAgfCAgIDEgKwo+PiAgIERvY3VtZW50YXRpb24vaHdt\n"
- "b24vdG1wMTAzICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI4ICsrKwo+PiAgIGRyaXZlcnMv\n"
- "aHdtb24vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEwICsKPj4gICBk\n"
- "cml2ZXJzL2h3bW9uL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSAr\n"
- "Cj4+ICAgZHJpdmVycy9od21vbi90bXAxMDMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\n"
- "fCAyMDUgKysrKysrKysrKysrKysrKysrKysrCj4+ICAgNSBmaWxlcyBjaGFuZ2VkLCAyNDUgaW5z\n"
- "ZXJ0aW9ucygrKQo+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2h3bW9uL3Rt\n"
- "cDEwMwo+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2h3bW9uL3RtcDEwMy5jCj4+Cj4+\n"
- "IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL3RyaXZp\n"
- "YWwtZGV2aWNlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL3Ry\n"
- "aXZpYWwtZGV2aWNlcy50eHQKPj4gaW5kZXggYmVmODZlNS4uZmM5NDRlMCAxMDA2NDQKPj4gLS0t\n"
- "IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy90cml2aWFsLWRldmljZXMu\n"
- "dHh0Cj4+ICsrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvdHJpdmlh\n"
- "bC1kZXZpY2VzLnR4dAo+PiBAQCAtODMsNSArODMsNiBAQCBzdG0sbTQxdDgwICAgICAgICBNNDFU\n"
- "ODAgLSBTRVJJQUwgQUNDRVNTIFJUQyBXSVRIIEFMQVJNUwo+PiAgIHRhb3MsdHNsMjU1MCAgICAg\n"
- "ICAgQW1iaWVudCBMaWdodCBTZW5zb3Igd2l0aCBTTUJVUy9Ud28gV2lyZSBTZXJpYWwgSW50ZXJm\n"
- "YWNlCj4+ICAgdGksdHNjMjAwMyAgICAgICAgSTJDIFRvdWNoLVNjcmVlbiBDb250cm9sbGVyCj4+\n"
- "ICAgdGksdG1wMTAyICAgICAgICBMb3cgUG93ZXIgRGlnaXRhbCBUZW1wZXJhdHVyZSBTZW5zb3Ig\n"
- "d2l0aCBTTUJVUy9Ud28gV2lyZSBTZXJpYWwgSW50ZXJmYWNlCj4+ICt0aSx0bXAxMDMgICAgICAg\n"
- "IExvdyBQb3dlciBEaWdpdGFsIFRlbXBlcmF0dXJlIFNlbnNvciB3aXRoIFNNQlVTL1R3byBXaXJl\n"
- "IFNlcmlhbCBJbnRlcmZhY2UKPj4gICB0aSx0bXAyNzUgICAgICAgIERpZ2l0YWwgVGVtcGVyYXR1\n"
- "cmUgU2Vuc29yCj4+ICAgd2luYm9uZCx3cGN0MzAxICAgICAgICBpMmMgdHJ1c3RlZCBwbGF0Zm9y\n"
- "bSBtb2R1bGUgKFRQTSkKPj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vdG1wMTAz\n"
- "IGIvRG9jdW1lbnRhdGlvbi9od21vbi90bXAxMDMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4g\n"
- "aW5kZXggMDAwMDAwMC4uZWMwMGExNQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL0RvY3VtZW50\n"
- "YXRpb24vaHdtb24vdG1wMTAzCj4+IEBAIC0wLDAgKzEsMjggQEAKPj4gK0tlcm5lbCBkcml2ZXIg\n"
- "dG1wMTAzCj4+ICs9PT09PT09PT09PT09PT09PT09PQo+PiArCj4+ICtTdXBwb3J0ZWQgY2hpcHM6\n"
- "Cj4+ICsgICogVGV4YXMgSW5zdHJ1bWVudHMgVE1QMTAzCj4+ICsgICAgUHJlZml4OiAndG1wMTAz\n"
- "Jwo+PiArICAgIEFkZHJlc3NlcyBzY2FubmVkOiBub25lCj4+ICsgICAgUHJvZHVjdCBpbmZvIGFu\n"
- "ZCBkYXRhc2hlZXQ6IGh0dHA6Ly93d3cudGkuY29tL3Byb2R1Y3QvdG1wMTAzCj4+ICsKPj4gK0F1\n"
- "dGhvcjoKPj4gKyAgICBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KPj4gKwo+PiArRGVzY3Jp\n"
- "cHRpb24KPj4gKy0tLS0tLS0tLS0tCj4+ICsKPj4gK1RoZSBUTVAxMDMgaXMgYSBkaWdpdGFsIG91\n"
- "dHB1dCB0ZW1wZXJhdHVyZSBzZW5zb3IgaW4gYSBmb3VyLWJhbGwKPj4gK3dhZmVyIGNoaXAtc2Nh\n"
- "bGUgcGFja2FnZSAoV0NTUCkuIFRoZSBUTVAxMDMgaXMgY2FwYWJsZSBvZiByZWFkaW5nCj4+ICt0\n"
- "ZW1wZXJhdHVyZXMgdG8gYSByZXNvbHV0aW9uIG9mIDHCsEMuIFRoZSBUTVAxMDMgaXMgc3BlY2lm\n"
- "aWVkIGZvcgo+PiArb3BlcmF0aW9uIG92ZXIgYSB0ZW1wZXJhdHVyZSByYW5nZSBvZiDigJM0MMKw\n"
- "QyB0byArMTI1wrBDLgo+PiArCj4+ICtSZXNvbHV0aW9uOiA4IEJpdHMKPj4gK0FjY3VyYWN5OiDC\n"
- "sTHCsEMgVHlwICjigJMxMMKwQyB0byArMTAwwrBDKQo+PiArCj4+ICtUaGUgZHJpdmVyIHByb3Zp\n"
- "ZGVzIHRoZSBjb21tb24gc3lzZnMtaW50ZXJmYWNlIGZvciB0ZW1wZXJhdHVyZXMgKHNlZQo+PiAr\n"
- "RG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UgdW5kZXIgVGVtcGVyYXR1cmVzKS4K\n"
- "Pj4gKwo+PiArUGxlYXNlIHJlZmVyIGhvdyB0byBpbnN0YW50aWF0ZSB0aGlzIGRyaXZlcjoKPj4g\n"
- "K0RvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcwo+PiBkaWZmIC0tZ2l0IGEv\n"
- "ZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCj4+IGluZGV4IDA4\n"
- "NTMxYTEuLmM4ODJkNGIgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZwo+PiAr\n"
- "KysgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKPj4gQEAgLTEzOTEsNiArMTM5MSwxNiBAQCBjb25m\n"
- "aWcgU0VOU09SU19UTVAxMDIKPj4gICAgICAgICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWls\n"
- "dCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCj4+ICAgICAgICAgd2lsbCBiZSBjYWxs\n"
- "ZWQgdG1wMTAyLgo+PiArY29uZmlnIFNFTlNPUlNfVE1QMTAzCj4+ICsgICAgdHJpc3RhdGUgIlRl\n"
- "eGFzIEluc3RydW1lbnRzIFRNUDEwMyIKPj4gKyAgICBkZXBlbmRzIG9uIEkyQwo+PiArICAgIGhl\n"
- "bHAKPj4gKyAgICAgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBUZXhh\n"
- "cyBJbnN0cnVtZW50cyBUTVAxMDMKPj4gKyAgICAgIHNlbnNvciBjaGlwcy4KPj4gKwo+PiArICAg\n"
- "ICAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhl\n"
- "IG1vZHVsZQo+PiArICAgICAgd2lsbCBiZSBjYWxsZWQgdG1wMTAzLgo+PiArCj4+ICAgY29uZmln\n"
- "IFNFTlNPUlNfVE1QNDAxCj4+ICAgICAgIHRyaXN0YXRlICJUZXhhcyBJbnN0cnVtZW50cyBUTVA0\n"
- "MDEgYW5kIGNvbXBhdGlibGVzIgo+PiAgICAgICBkZXBlbmRzIG9uIEkyQwo+PiBkaWZmIC0tZ2l0\n"
- "IGEvZHJpdmVycy9od21vbi9NYWtlZmlsZSBiL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKPj4gaW5k\n"
- "ZXggM2RjMGYwMi4uY2MwZGYxZWYgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZp\n"
- "bGUKPj4gKysrIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQo+PiBAQCAtMTM1LDYgKzEzNSw3IEBA\n"
- "IG9iai0kKENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIpKz0gc21zYzQ3bTE5Mi5vCj4+ICAgb2Jq\n"
- "LSQoQ09ORklHX1NFTlNPUlNfQU1DNjgyMSkgICAgKz0gYW1jNjgyMS5vCj4+ICAgb2JqLSQoQ09O\n"
- "RklHX1NFTlNPUlNfVEhNQzUwKSAgICArPSB0aG1jNTAubwo+PiAgIG9iai0kKENPTkZJR19TRU5T\n"
- "T1JTX1RNUDEwMikgICAgKz0gdG1wMTAyLm8KPj4gK29iai0kKENPTkZJR19TRU5TT1JTX1RNUDEw\n"
- "MykgICAgKz0gdG1wMTAzLm8KPj4gICBvYmotJChDT05GSUdfU0VOU09SU19UTVA0MDEpICAgICs9\n"
- "IHRtcDQwMS5vCj4+ICAgb2JqLSQoQ09ORklHX1NFTlNPUlNfVE1QNDIxKSAgICArPSB0bXA0MjEu\n"
- "bwo+PiAgIG9iai0kKENPTkZJR19TRU5TT1JTX1RXTDQwMzBfTUFEQykrPSB0d2w0MDMwLW1hZGMt\n"
- "aHdtb24ubwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi90bXAxMDMuYyBiL2RyaXZlcnMv\n"
- "aHdtb24vdG1wMTAzLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4u\n"
- "ZTY5ZGJjYQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvaHdtb24vdG1wMTAzLmMK\n"
- "Pj4gQEAgLTAsMCArMSwyMDUgQEAKPj4gKy8qCj4+ICsgKiBUZXhhcyBJbnN0cnVtZW50cyBUTVAx\n"
- "MDMgU01CdXMgdGVtcGVyYXR1cmUgc2Vuc29yIGRyaXZlcgo+PiArICogQ29weXJpZ2h0IChDKSAy\n"
- "MDE0IEhlaWtvIFNjaG9jaGVyIDxoc0BkZW54LmRlPgo+PiArICoKPj4gKyAqIEJhc2VkIG9uOgo+\n"
- "PiArICogVGV4YXMgSW5zdHJ1bWVudHMgVE1QMTAyIFNNQnVzIHRlbXBlcmF0dXJlIHNlbnNvciBk\n"
- "cml2ZXIKPj4gKyAqCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RldmVuIEtpbmcgPHNma2lu\n"
- "Z0BmZHdkYy5jb20+Cj4+ICsgKgo+PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7\n"
- "IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRo\n"
- "ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5\n"
- "Cj4+ICsgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9m\n"
- "IHRoZSBMaWNlbnNlLCBvcgo+PiArICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv\n"
- "bi4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg\n"
- "dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg\n"
- "d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ICsgKiBNRVJDSEFOVEFCSUxJ\n"
- "VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4+ICsgKiBH\n"
- "TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiArICoKPj4gKyAq\n"
- "Lwo+PiArCj4+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgv\n"
- "aW5pdC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9p\n"
- "MmMuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9od21vbi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2h3\n"
- "bW9uLXN5c2ZzLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvZXJyLmg+Cj4+ICsjaW5jbHVkZSA8bGlu\n"
- "dXgvbXV0ZXguaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPj4gKyNpbmNsdWRlIDxs\n"
- "aW51eC9qaWZmaWVzLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cj4+ICsKPj4gKyNk\n"
- "ZWZpbmUgVE1QMTAzX1RFTVBfUkVHICAgICAgICAweDAwCj4+ICsjZGVmaW5lIFRNUDEwM19DT05G\n"
- "X1JFRyAgICAgICAgMHgwMQo+PiArI2RlZmluZSBUTVAxMDNfVExPV19SRUcgICAgICAgIDB4MDIK\n"
- "Pj4gKyNkZWZpbmUgVE1QMTAzX1RISUdIX1JFRyAgICAweDAzCj4+ICsKPj4gKyNkZWZpbmUgVE1Q\n"
- "MTAzX0NPTkZfTTAgICAgICAgIDB4MDEKPj4gKyNkZWZpbmUgVE1QMTAzX0NPTkZfTTEgICAgICAg\n"
- "IDB4MDIKPj4gKyNkZWZpbmUgVE1QMTAzX0NPTkZfTEMgICAgICAgIDB4MDQKPj4gKyNkZWZpbmUg\n"
- "VE1QMTAzX0NPTkZfRkwgICAgICAgIDB4MDgKPj4gKyNkZWZpbmUgVE1QMTAzX0NPTkZfRkggICAg\n"
- "ICAgIDB4MTAKPj4gKyNkZWZpbmUgVE1QMTAzX0NPTkZfQ1IwICAgICAgICAweDIwCj4+ICsjZGVm\n"
- "aW5lIFRNUDEwM19DT05GX0NSMSAgICAgICAgMHg0MAo+PiArI2RlZmluZSBUTVAxMDNfQ09ORl9J\n"
- "RCAgICAgICAgMHg4MAo+PiArI2RlZmluZSBUTVAxMDNfQ09ORl9TRCAgICAgICAgKFRNUDEwM19D\n"
- "T05GX00xKQo+PiArI2RlZmluZSBUTVAxMDNfQ09ORl9TRF9NQVNLICAgIChUTVAxMDNfQ09ORl9N\n"
- "MCB8IFRNUDEwM19DT05GX00xKQo+PiArCj4+ICsjZGVmaW5lIFRNUDEwM19DT05GSUcgICAgICAg\n"
- "IChUTVAxMDNfQ09ORl9DUjEgfCBUTVAxMDNfQ09ORl9NMSkKPj4gKyNkZWZpbmUgVE1QMTAzX0NP\n"
- "TkZJR19NQVNLICAgIChUTVAxMDNfQ09ORl9DUjAgfCBUTVAxMDNfQ09ORl9DUjEgfCBcCj4+ICsg\n"
- "ICAgICAgICAgICAgICAgIFRNUDEwM19DT05GX00wIHwgVE1QMTAzX0NPTkZfTTEpCj4+ICsKPj4g\n"
- "K3N0YXRpYyBpbmxpbmUgaW50IHRtcDEwM19yZWdfdG9fbWMoczggdmFsKQo+PiArewo+PiArICAg\n"
- "IHJldHVybiB2YWwgKiAxMDAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHU4IHRtcDEw\n"
- "M19tY190b19yZWcoaW50IHZhbCkKPj4gK3sKPj4gKyAgICByZXR1cm4gRElWX1JPVU5EX0NMT1NF\n"
- "U1QodmFsLCAxMDAwKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHNzaXplX3QgdG1wMTAzX3Nob3df\n"
- "dGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCj4+ICsgICAgICAgICAgICAgICAgc3RydWN0IGRldmlj\n"
- "ZV9hdHRyaWJ1dGUgKmF0dHIsCj4+ICsgICAgICAgICAgICAgICAgY2hhciAqYnVmKQo+PiArewo+\n"
- "PiArICAgIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2RhID0gdG9fc2Vuc29yX2Rl\n"
- "dl9hdHRyKGF0dHIpOwo+PiArICAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGRldl9nZXRfZHJ2\n"
- "ZGF0YShkZXYpOwo+PiArICAgIHVuc2lnbmVkIGludCByZWd2YWw7Cj4+ICsgICAgaW50IHJldDsK\n"
- "Pj4gKwo+PiArICAgIHJldCA9IHJlZ21hcF9yZWFkKHJlZ21hcCwgc2RhLT5pbmRleCwgJnJlZ3Zh\n"
- "bCk7Cj4+ICsgICAgaWYgKHJldCA8IDApCj4+ICsgICAgICAgIHJldHVybiByZXQ7Cj4+ICsKPj4g\n"
- "KyAgICByZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdG1wMTAzX3JlZ190b19tYyhyZWd2YWwp\n"
- "KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHNzaXplX3QgdG1wMTAzX3NldF90ZW1wKHN0cnVjdCBk\n"
- "ZXZpY2UgKmRldiwKPj4gKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0\n"
- "ZSAqYXR0ciwKPj4gKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBj\n"
- "b3VudCkKPj4gK3sKPj4gKyAgICBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNkYSA9\n"
- "IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKPj4gKyAgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXAg\n"
- "PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPj4gKyAgICBsb25nIHZhbDsKPj4gKyAgICBpbnQgcmV0\n"
- "Owo+PiArCj4+ICsgICAgaWYgKGtzdHJ0b2woYnVmLCAxMCwgJnZhbCkgPCAwKQo+PiArICAgICAg\n"
- "ICByZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArICAgIHZhbCA9IGNsYW1wX3ZhbCh2YWwsIC01NTAw\n"
- "MCwgMTI3MDAwKTsKPj4gKyAgICByZXQgPSByZWdtYXBfd3JpdGUocmVnbWFwLCBzZGEtPmluZGV4\n"
- "LCB0bXAxMDNfbWNfdG9fcmVnKHZhbCkpOwo+PiArICAgIHJldHVybiByZXQgPyByZXQgOiBjb3Vu\n"
- "dDsKPj4gK30KPj4gKwo+PiArc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwg\n"
- "U19JUlVHTywgdG1wMTAzX3Nob3dfdGVtcCwgTlVMTCAsCj4+ICsgICAgICAgICAgICAgIFRNUDEw\n"
- "M19URU1QX1JFRyk7Cj4+ICsKPj4gK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWlu\n"
- "LCBTX0lXVVNSIHwgU19JUlVHTywgdG1wMTAzX3Nob3dfdGVtcCwKPj4gKyAgICAgICAgICAgICAg\n"
- "dG1wMTAzX3NldF90ZW1wLCBUTVAxMDNfVExPV19SRUcpOwo+PiArCj4+ICtzdGF0aWMgU0VOU09S\n"
- "X0RFVklDRV9BVFRSKHRlbXAxX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHRtcDEwM19zaG93X3Rl\n"
- "bXAsCj4+ICsgICAgICAgICAgICAgIHRtcDEwM19zZXRfdGVtcCwgVE1QMTAzX1RISUdIX1JFRyk7\n"
- "Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp0bXAxMDNfYXR0cnNbXSA9IHsKPj4g\n"
- "KyAgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCj4+ICsgICAg\n"
- "JnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW4uZGV2X2F0dHIuYXR0ciwKPj4gKyAgICAmc2Vuc29y\n"
- "X2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0ci5hdHRyLAo+PiArICAgIE5VTEwKPj4gK307Cj4+\n"
- "ICtBVFRSSUJVVEVfR1JPVVBTKHRtcDEwMyk7Cj4+ICsKPj4gK3N0YXRpYyBib29sIHRtcDEwM19y\n"
- "ZWdtYXBfaXNfdm9sYXRpbGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnKQo+\n"
- "PiArewo+PiArICAgIHJldHVybiByZWcgPT0gVE1QMTAzX1RFTVBfUkVHOwo+PiArfQo+PiArCj4+\n"
- "ICtzdGF0aWMgc3RydWN0IHJlZ21hcF9jb25maWcgdG1wMTAzX3JlZ21hcF9jb25maWcgPSB7Cj4+\n"
- "ICsgICAgLnJlZ19iaXRzID0gOCwKPj4gKyAgICAudmFsX2JpdHMgPSA4LAo+PiArICAgIC5tYXhf\n"
- "cmVnaXN0ZXIgPSBUTVAxMDNfVEhJR0hfUkVHLAo+PiArICAgIC52b2xhdGlsZV9yZWcgPSB0bXAx\n"
- "MDNfcmVnbWFwX2lzX3ZvbGF0aWxlLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGludCB0bXAxMDNf\n"
- "cHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKPj4gKyAgICAgICAgICAgIGNvbnN0IHN0\n"
- "cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKPj4gK3sKPj4gKyAgICBzdHJ1Y3QgZGV2aWNlICpkZXYg\n"
- "PSAmY2xpZW50LT5kZXY7Cj4+ICsgICAgc3RydWN0IGRldmljZSAqaHdtb25fZGV2Owo+PiArICAg\n"
- "IHN0cnVjdCByZWdtYXAgKnJlZ21hcDsKPj4gKyAgICBpbnQgcmV0Owo+PiArCj4+ICsgICAgaWYg\n"
- "KCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCj4+ICsgICAgICAgICAg\n"
- "ICAgICAgICAgICBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKSB7Cj4+ICsgICAgICAgIGRldl9l\n"
- "cnIoJmNsaWVudC0+ZGV2LAo+PiArICAgICAgICAgICAgImFkYXB0ZXIgZG9lc24ndCBzdXBwb3J0\n"
- "IFNNQnVzIGJ5dGUgdHJhbnNhY3Rpb25zXG4iKTsKPj4gKyAgICAgICAgcmV0dXJuIC1FTk9ERVY7\n"
- "Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xp\n"
- "ZW50LCAmdG1wMTAzX3JlZ21hcF9jb25maWcpOwo+PiArICAgIGlmIChJU19FUlIocmVnbWFwKSkg\n"
- "ewo+PiArICAgICAgICBkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSByZWdpc3RlciBt\n"
- "YXBcbiIpOwo+PiArICAgICAgICByZXR1cm4gUFRSX0VSUihyZWdtYXApOwo+PiArICAgIH0KPj4g\n"
- "Kwo+PiArICAgIHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIFRNUDEwM19DT05GX1JF\n"
- "RywgVE1QMTAzX0NPTkZJR19NQVNLLAo+PiArICAgICAgICAgICAgICAgICBUTVAxMDNfQ09ORklH\n"
- "KTsKPj4gKyAgICBpZiAocmV0IDwgMCkgewo+PiArICAgICAgICBkZXZfZXJyKCZjbGllbnQtPmRl\n"
- "diwgImVycm9yIHdyaXRpbmcgY29uZmlnIHJlZ2lzdGVyXG4iKTsKPj4gKyAgICAgICAgcmV0dXJu\n"
- "IHJldDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBod21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVn\n"
- "aXN0ZXJfd2l0aF9ncm91cHMoZGV2LCBjbGllbnQtPm5hbWUsCj4+ICsgICAgICAgICAgICAgICAg\n"
- "ICAgICAgICAgICAgICByZWdtYXAsIHRtcDEwM19ncm91cHMpOwo+PiArICAgIHJldHVybiBQVFJf\n"
- "RVJSX09SX1pFUk8oaHdtb25fZGV2KTsKPj4gK30KPj4gKwo+PiArI2lmZGVmIENPTkZJR19QTQo+\n"
- "PiArc3RhdGljIGludCB0bXAxMDNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+ICt7Cj4+\n"
- "ICsgICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4+ICsK\n"
- "Pj4gKyAgICByZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgVE1QMTAzX0NPTkZfUkVH\n"
- "LAo+PiArICAgICAgICAgICAgICAgICAgVE1QMTAzX0NPTkZfU0RfTUFTSywgMCk7Cj4+ICt9Cj4+\n"
- "ICsKPj4gK3N0YXRpYyBpbnQgdG1wMTAzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+ICt7\n"
- "Cj4+ICsgICAgc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4+\n"
- "ICsKPj4gKyAgICByZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgVE1QMTAzX0NPTkZf\n"
- "UkVHLAo+PiArICAgICAgICAgICAgICAgICAgVE1QMTAzX0NPTkZfU0RfTUFTSywgVE1QMTAzX0NP\n"
- "TkZfU0QpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdG1w\n"
- "MTAzX2Rldl9wbV9vcHMgPSB7Cj4+ICsgICAgLnN1c3BlbmQgICAgPSB0bXAxMDNfc3VzcGVuZCwK\n"
- "Pj4gKyAgICAucmVzdW1lICAgICAgICA9IHRtcDEwM19yZXN1bWUsCj4+ICt9Owo+PiArCj4+ICsj\n"
- "ZGVmaW5lIFRNUDEwM19ERVZfUE1fT1BTICgmdG1wMTAzX2Rldl9wbV9vcHMpCj4+ICsjZWxzZQo+\n"
- "PiArI2RlZmluZSAgICBUTVAxMDNfREVWX1BNX09QUyBOVUxMCj4+ICsjZW5kaWYgLyogQ09ORklH\n"
- "X1BNICovCj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0bXAxMDNf\n"
- "aWRbXSA9IHsKPj4gKyAgICB7ICJ0bXAxMDMiLCAwIH0sCj4+ICsgICAgeyB9Cj4+ICt9Owo+Cj4g\n"
- "SW4gdGhlIGJpbmRpbmdzIHlvdSBhcmUgZ2l2aW5nIHRoZSBjb21wYXRpYmxlIHByb3BlcnR5IGFz\n"
- "IDogdGksdG1wMTAzLCBidXQgaGVyZSBvbmx5IHRtcDEwMy4KPgo+IEluc3RlYWQgb2YgdXNpbmcg\n"
- "dGhlIGkyY19kZXZpY2VfaWQgc3RydWN0ICwgdXNlIG9mX2RldmljZV9pZCBzdHJ1Y3QgZm9yIGdp\n"
- "dmluZyB0aGUKPiBjb21wYXRpYmxlIHByb3BlcnR5IHZhbHVlLgo+IGNvbXBhdGJsZSA9ICI8bWFu\n"
- "dWZhY3R1cmVyPiw8bW9kZWw+Igo+CgpOby4gV2UgZG9uJ3QgZG8gdGhhdCBmb3Igb3RoZXIgaTJj\n"
- "IGRyaXZlcnMsIGFuZCB0aGUgaTJjIHN1YnN5c3RlbSBoYW5kbGVzCnRoaXMgY2FzZSwgc28gaXQg\n"
- "ZG9lcyBub3Qgc2Vuc2UgdG8gc3RhcnQgdGhhdCB3aXRoIHRoaXMgZHJpdmVyIGp1c3QKZm9yIHRo\n"
- "ZSBzYWtlIG9mIG1ha2luZyB0aGUgY29kZSBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gaXQgaGFzIHRv\n"
- "IGJlLgoKVGhhbmtzLApHdWVudGVyCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f\n"
- "X19fX19fX19fX19fX18KbG0tc2Vuc29ycyBtYWlsaW5nIGxpc3QKbG0tc2Vuc29yc0BsbS1zZW5z\n"
- "b3JzLm9yZwpodHRwOi8vbGlzdHMubG0tc2Vuc29ycy5vcmcvbWFpbG1hbi9saXN0aW5mby9sbS1z\n"
- ZW5zb3Jz
+ "On 06/17/2014 10:46 PM, Varka Bhadram wrote:\n"
+ "> Hi,\n"
+ ">\n"
+ "> On 06/18/2014 11:07 AM, Heiko Schocher wrote:\n"
+ ">> Driver for the TI TMP103.\n"
+ ">>\n"
+ ">> The TI TMP103 is similar to the TMP102.  It differs from the TMP102\n"
+ ">> by having only 8 bit registers.\n"
+ ">>\n"
+ ">> Signed-off-by: Heiko Schocher <hs@denx.de>\n"
+ ">>\n"
+ ">> ---\n"
+ ">>\n"
+ ">> Cc: Jean Delvare <khali@linux-fr.org>\n"
+ ">> Cc: Guenter Roeck <linux@roeck-us.net>\n"
+ ">> Cc: linux-kernel@vger.kernel.org\n"
+ ">> Cc: devicetree@vger.kernel.org\n"
+ ">> Cc: linux-doc@vger.kernel.org\n"
+ ">> Cc: Mark Rutland <mark.rutland@arm.com>\n"
+ ">>\n"
+ ">> - change for v2:\n"
+ ">>    - add comments from GuenterRoeck:\n"
+ ">>      - remove Cc from commit subject\n"
+ ">>      - add devicetree maintainer\n"
+ ">>      - move Documentation to Documentation/hwmon/tmp103\n"
+ ">>      - remove devicetree bindings from Documentation\n"
+ ">>      - add compatible string to\n"
+ ">>        \"Documentation/devicetree/bindings/i2c/trivial-devices.txt\"\n"
+ ">>      - remove CamelCase\n"
+ ">>      - fix Codingstyle issues\n"
+ ">>      - use ATTRIBUTE_GROUPS and devm_hwmon_device_register_with_groups()\n"
+ ">>      - remove unsused define TMP103_CONFIG_RD_ONLY\n"
+ ">>      - restore config register when exit()\n"
+ ">>      - use regmap\n"
+ ">> - changes for v3:\n"
+ ">>    again a lot of fantastic tips how to use regmap efficiently\n"
+ ">>    from Guenter Roeck:\n"
+ ">>    - get rid of \"struct tmp103\"\n"
+ ">>    - get rid of \"static const u8 tmp103_reg[]\"\n"
+ ">>    - get rid of mutex lock\n"
+ ">>    - drop config_orig entirely\n"
+ ">>    - use regmap_update_bits()\n"
+ ">> - changes for v4:\n"
+ ">>    - add comment from Guenter Roeck:\n"
+ ">>      define TMP103_CONFIG_MASK and TMP103_CONF_SD_MASK\n"
+ ">>      separately to ensure you catch all the to-be-cleared bits.\n"
+ ">> - changes for v5:\n"
+ ">>    add comment from Guenter Roeck:\n"
+ ">>    - use \"#define TMP103_CONF_SD TMP103_CONF_M1\"\n"
+ ">>    add comment from Mark Rutland:\n"
+ ">>    - use full string for DT compatible string matching, instead of\n"
+ ">>      DRIVER_NAME. Get rid complete of DRIVER_NAME define.\n"
+ ">>\n"
+ ">>   .../devicetree/bindings/i2c/trivial-devices.txt    |   1 +\n"
+ ">>   Documentation/hwmon/tmp103                         |  28 +++\n"
+ ">>   drivers/hwmon/Kconfig                              |  10 +\n"
+ ">>   drivers/hwmon/Makefile                             |   1 +\n"
+ ">>   drivers/hwmon/tmp103.c                             | 205 +++++++++++++++++++++\n"
+ ">>   5 files changed, 245 insertions(+)\n"
+ ">>   create mode 100644 Documentation/hwmon/tmp103\n"
+ ">>   create mode 100644 drivers/hwmon/tmp103.c\n"
+ ">>\n"
+ ">> diff --git a/Documentation/devicetree/bindings/i2c/trivial-devices.txt b/Documentation/devicetree/bindings/i2c/trivial-devices.txt\n"
+ ">> index bef86e5..fc944e0 100644\n"
+ ">> --- a/Documentation/devicetree/bindings/i2c/trivial-devices.txt\n"
+ ">> +++ b/Documentation/devicetree/bindings/i2c/trivial-devices.txt\n"
+ ">> @@ -83,5 +83,6 @@ stm,m41t80        M41T80 - SERIAL ACCESS RTC WITH ALARMS\n"
+ ">>   taos,tsl2550        Ambient Light Sensor with SMBUS/Two Wire Serial Interface\n"
+ ">>   ti,tsc2003        I2C Touch-Screen Controller\n"
+ ">>   ti,tmp102        Low Power Digital Temperature Sensor with SMBUS/Two Wire Serial Interface\n"
+ ">> +ti,tmp103        Low Power Digital Temperature Sensor with SMBUS/Two Wire Serial Interface\n"
+ ">>   ti,tmp275        Digital Temperature Sensor\n"
+ ">>   winbond,wpct301        i2c trusted platform module (TPM)\n"
+ ">> diff --git a/Documentation/hwmon/tmp103 b/Documentation/hwmon/tmp103\n"
+ ">> new file mode 100644\n"
+ ">> index 0000000..ec00a15\n"
+ ">> --- /dev/null\n"
+ ">> +++ b/Documentation/hwmon/tmp103\n"
+ ">> @@ -0,0 +1,28 @@\n"
+ ">> +Kernel driver tmp103\n"
+ ">> +====================\n"
+ ">> +\n"
+ ">> +Supported chips:\n"
+ ">> +  * Texas Instruments TMP103\n"
+ ">> +    Prefix: 'tmp103'\n"
+ ">> +    Addresses scanned: none\n"
+ ">> +    Product info and datasheet: http://www.ti.com/product/tmp103\n"
+ ">> +\n"
+ ">> +Author:\n"
+ ">> +    Heiko Schocher <hs@denx.de>\n"
+ ">> +\n"
+ ">> +Description\n"
+ ">> +-----------\n"
+ ">> +\n"
+ ">> +The TMP103 is a digital output temperature sensor in a four-ball\n"
+ ">> +wafer chip-scale package (WCSP). The TMP103 is capable of reading\n"
+ ">> +temperatures to a resolution of 1\302\260C. The TMP103 is specified for\n"
+ ">> +operation over a temperature range of \342\200\22340\302\260C to +125\302\260C.\n"
+ ">> +\n"
+ ">> +Resolution: 8 Bits\n"
+ ">> +Accuracy: \302\2611\302\260C Typ (\342\200\22310\302\260C to +100\302\260C)\n"
+ ">> +\n"
+ ">> +The driver provides the common sysfs-interface for temperatures (see\n"
+ ">> +Documentation/hwmon/sysfs-interface under Temperatures).\n"
+ ">> +\n"
+ ">> +Please refer how to instantiate this driver:\n"
+ ">> +Documentation/i2c/instantiating-devices\n"
+ ">> diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig\n"
+ ">> index 08531a1..c882d4b 100644\n"
+ ">> --- a/drivers/hwmon/Kconfig\n"
+ ">> +++ b/drivers/hwmon/Kconfig\n"
+ ">> @@ -1391,6 +1391,16 @@ config SENSORS_TMP102\n"
+ ">>         This driver can also be built as a module.  If so, the module\n"
+ ">>         will be called tmp102.\n"
+ ">> +config SENSORS_TMP103\n"
+ ">> +    tristate \"Texas Instruments TMP103\"\n"
+ ">> +    depends on I2C\n"
+ ">> +    help\n"
+ ">> +      If you say yes here you get support for Texas Instruments TMP103\n"
+ ">> +      sensor chips.\n"
+ ">> +\n"
+ ">> +      This driver can also be built as a module.  If so, the module\n"
+ ">> +      will be called tmp103.\n"
+ ">> +\n"
+ ">>   config SENSORS_TMP401\n"
+ ">>       tristate \"Texas Instruments TMP401 and compatibles\"\n"
+ ">>       depends on I2C\n"
+ ">> diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile\n"
+ ">> index 3dc0f02..cc0df1ef 100644\n"
+ ">> --- a/drivers/hwmon/Makefile\n"
+ ">> +++ b/drivers/hwmon/Makefile\n"
+ ">> @@ -135,6 +135,7 @@ obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o\n"
+ ">>   obj-$(CONFIG_SENSORS_AMC6821)    += amc6821.o\n"
+ ">>   obj-$(CONFIG_SENSORS_THMC50)    += thmc50.o\n"
+ ">>   obj-$(CONFIG_SENSORS_TMP102)    += tmp102.o\n"
+ ">> +obj-$(CONFIG_SENSORS_TMP103)    += tmp103.o\n"
+ ">>   obj-$(CONFIG_SENSORS_TMP401)    += tmp401.o\n"
+ ">>   obj-$(CONFIG_SENSORS_TMP421)    += tmp421.o\n"
+ ">>   obj-$(CONFIG_SENSORS_TWL4030_MADC)+= twl4030-madc-hwmon.o\n"
+ ">> diff --git a/drivers/hwmon/tmp103.c b/drivers/hwmon/tmp103.c\n"
+ ">> new file mode 100644\n"
+ ">> index 0000000..e69dbca\n"
+ ">> --- /dev/null\n"
+ ">> +++ b/drivers/hwmon/tmp103.c\n"
+ ">> @@ -0,0 +1,205 @@\n"
+ ">> +/*\n"
+ ">> + * Texas Instruments TMP103 SMBus temperature sensor driver\n"
+ ">> + * Copyright (C) 2014 Heiko Schocher <hs@denx.de>\n"
+ ">> + *\n"
+ ">> + * Based on:\n"
+ ">> + * Texas Instruments TMP102 SMBus temperature sensor driver\n"
+ ">> + *\n"
+ ">> + * Copyright (C) 2010 Steven King <sfking@fdwdc.com>\n"
+ ">> + *\n"
+ ">> + * This program is free software; you can redistribute it and/or modify\n"
+ ">> + * it under the terms of the GNU General Public License as published by\n"
+ ">> + * the Free Software Foundation; either version 2 of the License, or\n"
+ ">> + * (at your option) any later version.\n"
+ ">> + *\n"
+ ">> + * This program is distributed in the hope that it will be useful,\n"
+ ">> + * but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+ ">> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
+ ">> + * GNU General Public License for more details.\n"
+ ">> + *\n"
+ ">> + */\n"
+ ">> +\n"
+ ">> +#include <linux/module.h>\n"
+ ">> +#include <linux/init.h>\n"
+ ">> +#include <linux/slab.h>\n"
+ ">> +#include <linux/i2c.h>\n"
+ ">> +#include <linux/hwmon.h>\n"
+ ">> +#include <linux/hwmon-sysfs.h>\n"
+ ">> +#include <linux/err.h>\n"
+ ">> +#include <linux/mutex.h>\n"
+ ">> +#include <linux/device.h>\n"
+ ">> +#include <linux/jiffies.h>\n"
+ ">> +#include <linux/regmap.h>\n"
+ ">> +\n"
+ ">> +#define TMP103_TEMP_REG        0x00\n"
+ ">> +#define TMP103_CONF_REG        0x01\n"
+ ">> +#define TMP103_TLOW_REG        0x02\n"
+ ">> +#define TMP103_THIGH_REG    0x03\n"
+ ">> +\n"
+ ">> +#define TMP103_CONF_M0        0x01\n"
+ ">> +#define TMP103_CONF_M1        0x02\n"
+ ">> +#define TMP103_CONF_LC        0x04\n"
+ ">> +#define TMP103_CONF_FL        0x08\n"
+ ">> +#define TMP103_CONF_FH        0x10\n"
+ ">> +#define TMP103_CONF_CR0        0x20\n"
+ ">> +#define TMP103_CONF_CR1        0x40\n"
+ ">> +#define TMP103_CONF_ID        0x80\n"
+ ">> +#define TMP103_CONF_SD        (TMP103_CONF_M1)\n"
+ ">> +#define TMP103_CONF_SD_MASK    (TMP103_CONF_M0 | TMP103_CONF_M1)\n"
+ ">> +\n"
+ ">> +#define TMP103_CONFIG        (TMP103_CONF_CR1 | TMP103_CONF_M1)\n"
+ ">> +#define TMP103_CONFIG_MASK    (TMP103_CONF_CR0 | TMP103_CONF_CR1 | \\\n"
+ ">> +                 TMP103_CONF_M0 | TMP103_CONF_M1)\n"
+ ">> +\n"
+ ">> +static inline int tmp103_reg_to_mc(s8 val)\n"
+ ">> +{\n"
+ ">> +    return val * 1000;\n"
+ ">> +}\n"
+ ">> +\n"
+ ">> +static inline u8 tmp103_mc_to_reg(int val)\n"
+ ">> +{\n"
+ ">> +    return DIV_ROUND_CLOSEST(val, 1000);\n"
+ ">> +}\n"
+ ">> +\n"
+ ">> +static ssize_t tmp103_show_temp(struct device *dev,\n"
+ ">> +                struct device_attribute *attr,\n"
+ ">> +                char *buf)\n"
+ ">> +{\n"
+ ">> +    struct sensor_device_attribute *sda = to_sensor_dev_attr(attr);\n"
+ ">> +    struct regmap *regmap = dev_get_drvdata(dev);\n"
+ ">> +    unsigned int regval;\n"
+ ">> +    int ret;\n"
+ ">> +\n"
+ ">> +    ret = regmap_read(regmap, sda->index, &regval);\n"
+ ">> +    if (ret < 0)\n"
+ ">> +        return ret;\n"
+ ">> +\n"
+ ">> +    return sprintf(buf, \"%d\\n\", tmp103_reg_to_mc(regval));\n"
+ ">> +}\n"
+ ">> +\n"
+ ">> +static ssize_t tmp103_set_temp(struct device *dev,\n"
+ ">> +                   struct device_attribute *attr,\n"
+ ">> +                   const char *buf, size_t count)\n"
+ ">> +{\n"
+ ">> +    struct sensor_device_attribute *sda = to_sensor_dev_attr(attr);\n"
+ ">> +    struct regmap *regmap = dev_get_drvdata(dev);\n"
+ ">> +    long val;\n"
+ ">> +    int ret;\n"
+ ">> +\n"
+ ">> +    if (kstrtol(buf, 10, &val) < 0)\n"
+ ">> +        return -EINVAL;\n"
+ ">> +\n"
+ ">> +    val = clamp_val(val, -55000, 127000);\n"
+ ">> +    ret = regmap_write(regmap, sda->index, tmp103_mc_to_reg(val));\n"
+ ">> +    return ret ? ret : count;\n"
+ ">> +}\n"
+ ">> +\n"
+ ">> +static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, tmp103_show_temp, NULL ,\n"
+ ">> +              TMP103_TEMP_REG);\n"
+ ">> +\n"
+ ">> +static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, tmp103_show_temp,\n"
+ ">> +              tmp103_set_temp, TMP103_TLOW_REG);\n"
+ ">> +\n"
+ ">> +static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, tmp103_show_temp,\n"
+ ">> +              tmp103_set_temp, TMP103_THIGH_REG);\n"
+ ">> +\n"
+ ">> +static struct attribute *tmp103_attrs[] = {\n"
+ ">> +    &sensor_dev_attr_temp1_input.dev_attr.attr,\n"
+ ">> +    &sensor_dev_attr_temp1_min.dev_attr.attr,\n"
+ ">> +    &sensor_dev_attr_temp1_max.dev_attr.attr,\n"
+ ">> +    NULL\n"
+ ">> +};\n"
+ ">> +ATTRIBUTE_GROUPS(tmp103);\n"
+ ">> +\n"
+ ">> +static bool tmp103_regmap_is_volatile(struct device *dev, unsigned int reg)\n"
+ ">> +{\n"
+ ">> +    return reg == TMP103_TEMP_REG;\n"
+ ">> +}\n"
+ ">> +\n"
+ ">> +static struct regmap_config tmp103_regmap_config = {\n"
+ ">> +    .reg_bits = 8,\n"
+ ">> +    .val_bits = 8,\n"
+ ">> +    .max_register = TMP103_THIGH_REG,\n"
+ ">> +    .volatile_reg = tmp103_regmap_is_volatile,\n"
+ ">> +};\n"
+ ">> +\n"
+ ">> +static int tmp103_probe(struct i2c_client *client,\n"
+ ">> +            const struct i2c_device_id *id)\n"
+ ">> +{\n"
+ ">> +    struct device *dev = &client->dev;\n"
+ ">> +    struct device *hwmon_dev;\n"
+ ">> +    struct regmap *regmap;\n"
+ ">> +    int ret;\n"
+ ">> +\n"
+ ">> +    if (!i2c_check_functionality(client->adapter,\n"
+ ">> +                     I2C_FUNC_SMBUS_BYTE_DATA)) {\n"
+ ">> +        dev_err(&client->dev,\n"
+ ">> +            \"adapter doesn't support SMBus byte transactions\\n\");\n"
+ ">> +        return -ENODEV;\n"
+ ">> +    }\n"
+ ">> +\n"
+ ">> +    regmap = devm_regmap_init_i2c(client, &tmp103_regmap_config);\n"
+ ">> +    if (IS_ERR(regmap)) {\n"
+ ">> +        dev_err(dev, \"failed to allocate register map\\n\");\n"
+ ">> +        return PTR_ERR(regmap);\n"
+ ">> +    }\n"
+ ">> +\n"
+ ">> +    ret = regmap_update_bits(regmap, TMP103_CONF_REG, TMP103_CONFIG_MASK,\n"
+ ">> +                 TMP103_CONFIG);\n"
+ ">> +    if (ret < 0) {\n"
+ ">> +        dev_err(&client->dev, \"error writing config register\\n\");\n"
+ ">> +        return ret;\n"
+ ">> +    }\n"
+ ">> +\n"
+ ">> +    hwmon_dev = hwmon_device_register_with_groups(dev, client->name,\n"
+ ">> +                              regmap, tmp103_groups);\n"
+ ">> +    return PTR_ERR_OR_ZERO(hwmon_dev);\n"
+ ">> +}\n"
+ ">> +\n"
+ ">> +#ifdef CONFIG_PM\n"
+ ">> +static int tmp103_suspend(struct device *dev)\n"
+ ">> +{\n"
+ ">> +    struct regmap *regmap = dev_get_drvdata(dev);\n"
+ ">> +\n"
+ ">> +    return regmap_update_bits(regmap, TMP103_CONF_REG,\n"
+ ">> +                  TMP103_CONF_SD_MASK, 0);\n"
+ ">> +}\n"
+ ">> +\n"
+ ">> +static int tmp103_resume(struct device *dev)\n"
+ ">> +{\n"
+ ">> +    struct regmap *regmap = dev_get_drvdata(dev);\n"
+ ">> +\n"
+ ">> +    return regmap_update_bits(regmap, TMP103_CONF_REG,\n"
+ ">> +                  TMP103_CONF_SD_MASK, TMP103_CONF_SD);\n"
+ ">> +}\n"
+ ">> +\n"
+ ">> +static const struct dev_pm_ops tmp103_dev_pm_ops = {\n"
+ ">> +    .suspend    = tmp103_suspend,\n"
+ ">> +    .resume        = tmp103_resume,\n"
+ ">> +};\n"
+ ">> +\n"
+ ">> +#define TMP103_DEV_PM_OPS (&tmp103_dev_pm_ops)\n"
+ ">> +#else\n"
+ ">> +#define    TMP103_DEV_PM_OPS NULL\n"
+ ">> +#endif /* CONFIG_PM */\n"
+ ">> +\n"
+ ">> +static const struct i2c_device_id tmp103_id[] = {\n"
+ ">> +    { \"tmp103\", 0 },\n"
+ ">> +    { }\n"
+ ">> +};\n"
+ ">\n"
+ "> In the bindings you are giving the compatible property as : ti,tmp103, but here only tmp103.\n"
+ ">\n"
+ "> Instead of using the i2c_device_id struct , use of_device_id struct for giving the\n"
+ "> compatible property value.\n"
+ "> compatble = \"<manufacturer>,<model>\"\n"
+ ">\n"
+ "\n"
+ "No. We don't do that for other i2c drivers, and the i2c subsystem handles\n"
+ "this case, so it does not sense to start that with this driver just\n"
+ "for the sake of making the code more complicated than it has to be.\n"
+ "\n"
+ "Thanks,\n"
+ Guenter
 
-0ee3bf9b9306184d3d0323d334491028cee2ff75fed0d042d0a4fb2e95a1fcd4
+2bd9bf97a0f09d607a47b96c4019e6a2a90bd0cfc6956d67fb4332a66f0a5618

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.