All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <53A138A0.4010704@gmail.com>

diff --git a/a/1.txt b/N1/1.txt
index 3f90fd2..ae02348 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,228 +1,394 @@
-T24gMDYvMTgvMjAxNCAxMTo0NiBBTSwgSGVpa28gU2Nob2NoZXIgd3JvdGU6Cj4gSGVsbG8gVmFy
-a2EsCj4KPiBBbSAxOC4wNi4yMDE0IDA3OjQ2LCBzY2hyaWViIFZhcmthIEJoYWRyYW06Cj4+IEhp
-LAo+Pgo+PiBPbiAwNi8xOC8yMDE0IDExOjA3IEFNLCBIZWlrbyBTY2hvY2hlciB3cm90ZToKPj4+
-IERyaXZlciBmb3IgdGhlIFRJIFRNUDEwMy4KPj4+Cj4+PiBUaGUgVEkgVE1QMTAzIGlzIHNpbWls
-YXIgdG8gdGhlIFRNUDEwMi4gSXQgZGlmZmVycyBmcm9tIHRoZSBUTVAxMDIKPj4+IGJ5IGhhdmlu
-ZyBvbmx5IDggYml0IHJlZ2lzdGVycy4KPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBIZWlrbyBTY2hv
-Y2hlciA8aHNAZGVueC5kZT4KPj4+Cj4+PiAtLS0KPj4+Cj4+PiBDYzogSmVhbiBEZWx2YXJlIDxr
-aGFsaUBsaW51eC1mci5vcmc+Cj4+PiBDYzogR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMu
-bmV0Pgo+Pj4gQ2M6IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKPj4+IENjOiBkZXZpY2V0
-cmVlQHZnZXIua2VybmVsLm9yZwo+Pj4gQ2M6IGxpbnV4LWRvY0B2Z2VyLmtlcm5lbC5vcmcKPj4+
-IENjOiBNYXJrIFJ1dGxhbmQgPG1hcmsucnV0bGFuZEBhcm0uY29tPgo+Pj4KPj4+IC0gY2hhbmdl
-IGZvciB2MjoKPj4+IC0gYWRkIGNvbW1lbnRzIGZyb20gR3VlbnRlclJvZWNrOgo+Pj4gLSByZW1v
-dmUgQ2MgZnJvbSBjb21taXQgc3ViamVjdAo+Pj4gLSBhZGQgZGV2aWNldHJlZSBtYWludGFpbmVy
-Cj4+PiAtIG1vdmUgRG9jdW1lbnRhdGlvbiB0byBEb2N1bWVudGF0aW9uL2h3bW9uL3RtcDEwMwo+
-Pj4gLSByZW1vdmUgZGV2aWNldHJlZSBiaW5kaW5ncyBmcm9tIERvY3VtZW50YXRpb24KPj4+IC0g
-YWRkIGNvbXBhdGlibGUgc3RyaW5nIHRvCj4+PiAiRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jp
-bmRpbmdzL2kyYy90cml2aWFsLWRldmljZXMudHh0Igo+Pj4gLSByZW1vdmUgQ2FtZWxDYXNlCj4+
-PiAtIGZpeCBDb2RpbmdzdHlsZSBpc3N1ZXMKPj4+IC0gdXNlIEFUVFJJQlVURV9HUk9VUFMgYW5k
-IGRldm1faHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfZ3JvdXBzKCkKPj4+IC0gcmVtb3ZlIHVu
-c3VzZWQgZGVmaW5lIFRNUDEwM19DT05GSUdfUkRfT05MWQo+Pj4gLSByZXN0b3JlIGNvbmZpZyBy
-ZWdpc3RlciB3aGVuIGV4aXQoKQo+Pj4gLSB1c2UgcmVnbWFwCj4+PiAtIGNoYW5nZXMgZm9yIHYz
-Ogo+Pj4gYWdhaW4gYSBsb3Qgb2YgZmFudGFzdGljIHRpcHMgaG93IHRvIHVzZSByZWdtYXAgZWZm
-aWNpZW50bHkKPj4+IGZyb20gR3VlbnRlciBSb2VjazoKPj4+IC0gZ2V0IHJpZCBvZiAic3RydWN0
-IHRtcDEwMyIKPj4+IC0gZ2V0IHJpZCBvZiAic3RhdGljIGNvbnN0IHU4IHRtcDEwM19yZWdbXSIK
-Pj4+IC0gZ2V0IHJpZCBvZiBtdXRleCBsb2NrCj4+PiAtIGRyb3AgY29uZmlnX29yaWcgZW50aXJl
-bHkKPj4+IC0gdXNlIHJlZ21hcF91cGRhdGVfYml0cygpCj4+PiAtIGNoYW5nZXMgZm9yIHY0Ogo+
-Pj4gLSBhZGQgY29tbWVudCBmcm9tIEd1ZW50ZXIgUm9lY2s6Cj4+PiBkZWZpbmUgVE1QMTAzX0NP
-TkZJR19NQVNLIGFuZCBUTVAxMDNfQ09ORl9TRF9NQVNLCj4+PiBzZXBhcmF0ZWx5IHRvIGVuc3Vy
-ZSB5b3UgY2F0Y2ggYWxsIHRoZSB0by1iZS1jbGVhcmVkIGJpdHMuCj4+PiAtIGNoYW5nZXMgZm9y
-IHY1Ogo+Pj4gYWRkIGNvbW1lbnQgZnJvbSBHdWVudGVyIFJvZWNrOgo+Pj4gLSB1c2UgIiNkZWZp
-bmUgVE1QMTAzX0NPTkZfU0QgVE1QMTAzX0NPTkZfTTEiCj4+PiBhZGQgY29tbWVudCBmcm9tIE1h
-cmsgUnV0bGFuZDoKPj4+IC0gdXNlIGZ1bGwgc3RyaW5nIGZvciBEVCBjb21wYXRpYmxlIHN0cmlu
-ZyBtYXRjaGluZywgaW5zdGVhZCBvZgo+Pj4gRFJJVkVSX05BTUUuIEdldCByaWQgY29tcGxldGUg
-b2YgRFJJVkVSX05BTUUgZGVmaW5lLgo+Pj4KPj4+IC4uLi9kZXZpY2V0cmVlL2JpbmRpbmdzL2ky
-Yy90cml2aWFsLWRldmljZXMudHh0IHwgMSArCj4+PiBEb2N1bWVudGF0aW9uL2h3bW9uL3RtcDEw
-MyB8IDI4ICsrKwo+Pj4gZHJpdmVycy9od21vbi9LY29uZmlnIHwgMTAgKwo+Pj4gZHJpdmVycy9o
-d21vbi9NYWtlZmlsZSB8IDEgKwo+Pj4gZHJpdmVycy9od21vbi90bXAxMDMuYyB8IDIwNSArKysr
-KysrKysrKysrKysrKysrKysKPj4+IDUgZmlsZXMgY2hhbmdlZCwgMjQ1IGluc2VydGlvbnMoKykK
-Pj4+IGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2h3bW9uL3RtcDEwMwo+Pj4gY3Jl
-YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvaHdtb24vdG1wMTAzLmMKPj4+Cj4+PiBkaWZmIC0tZ2l0
-IAo+Pj4gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL3RyaXZpYWwtZGV2
-aWNlcy50eHQgCj4+PiBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvdHJp
-dmlhbC1kZXZpY2VzLnR4dAo+Pj4gaW5kZXggYmVmODZlNS4uZmM5NDRlMCAxMDA2NDQKPj4+IC0t
-LSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvdHJpdmlhbC1kZXZpY2Vz
-LnR4dAo+Pj4gKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy90cml2
-aWFsLWRldmljZXMudHh0Cj4+PiBAQCAtODMsNSArODMsNiBAQCBzdG0sbTQxdDgwIE00MVQ4MCAt
-IFNFUklBTCBBQ0NFU1MgUlRDIFdJVEggQUxBUk1TCj4+PiB0YW9zLHRzbDI1NTAgQW1iaWVudCBM
-aWdodCBTZW5zb3Igd2l0aCBTTUJVUy9Ud28gV2lyZSBTZXJpYWwgSW50ZXJmYWNlCj4+PiB0aSx0
-c2MyMDAzIEkyQyBUb3VjaC1TY3JlZW4gQ29udHJvbGxlcgo+Pj4gdGksdG1wMTAyIExvdyBQb3dl
-ciBEaWdpdGFsIFRlbXBlcmF0dXJlIFNlbnNvciB3aXRoIFNNQlVTL1R3byBXaXJlIAo+Pj4gU2Vy
-aWFsIEludGVyZmFjZQo+Pj4gK3RpLHRtcDEwMyBMb3cgUG93ZXIgRGlnaXRhbCBUZW1wZXJhdHVy
-ZSBTZW5zb3Igd2l0aCBTTUJVUy9Ud28gV2lyZSAKPj4+IFNlcmlhbCBJbnRlcmZhY2UKPj4+IHRp
-LHRtcDI3NSBEaWdpdGFsIFRlbXBlcmF0dXJlIFNlbnNvcgo+Pj4gd2luYm9uZCx3cGN0MzAxIGky
-YyB0cnVzdGVkIHBsYXRmb3JtIG1vZHVsZSAoVFBNKQo+Pj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50
-YXRpb24vaHdtb24vdG1wMTAzIGIvRG9jdW1lbnRhdGlvbi9od21vbi90bXAxMDMKPj4+IG5ldyBm
-aWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAwLi5lYzAwYTE1Cj4+PiAtLS0gL2Rldi9u
-dWxsCj4+PiArKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3RtcDEwMwo+Pj4gQEAgLTAsMCArMSwy
-OCBAQAo+Pj4gK0tlcm5lbCBkcml2ZXIgdG1wMTAzCj4+PiArPT09PT09PT09PT09PT09PT09PT0K
-Pj4+ICsKPj4+ICtTdXBwb3J0ZWQgY2hpcHM6Cj4+PiArICogVGV4YXMgSW5zdHJ1bWVudHMgVE1Q
-MTAzCj4+PiArIFByZWZpeDogJ3RtcDEwMycKPj4+ICsgQWRkcmVzc2VzIHNjYW5uZWQ6IG5vbmUK
-Pj4+ICsgUHJvZHVjdCBpbmZvIGFuZCBkYXRhc2hlZXQ6IGh0dHA6Ly93d3cudGkuY29tL3Byb2R1
-Y3QvdG1wMTAzCj4+PiArCj4+PiArQXV0aG9yOgo+Pj4gKyBIZWlrbyBTY2hvY2hlciA8aHNAZGVu
-eC5kZT4KPj4+ICsKPj4+ICtEZXNjcmlwdGlvbgo+Pj4gKy0tLS0tLS0tLS0tCj4+PiArCj4+PiAr
-VGhlIFRNUDEwMyBpcyBhIGRpZ2l0YWwgb3V0cHV0IHRlbXBlcmF0dXJlIHNlbnNvciBpbiBhIGZv
-dXItYmFsbAo+Pj4gK3dhZmVyIGNoaXAtc2NhbGUgcGFja2FnZSAoV0NTUCkuIFRoZSBUTVAxMDMg
-aXMgY2FwYWJsZSBvZiByZWFkaW5nCj4+PiArdGVtcGVyYXR1cmVzIHRvIGEgcmVzb2x1dGlvbiBv
-ZiAxwrBDLiBUaGUgVE1QMTAzIGlzIHNwZWNpZmllZCBmb3IKPj4+ICtvcGVyYXRpb24gb3ZlciBh
-IHRlbXBlcmF0dXJlIHJhbmdlIG9mIOKAkzQwwrBDIHRvICsxMjXCsEMuCj4+PiArCj4+PiArUmVz
-b2x1dGlvbjogOCBCaXRzCj4+PiArQWNjdXJhY3k6IMKxMcKwQyBUeXAgKOKAkzEwwrBDIHRvICsx
-MDDCsEMpCj4+PiArCj4+PiArVGhlIGRyaXZlciBwcm92aWRlcyB0aGUgY29tbW9uIHN5c2ZzLWlu
-dGVyZmFjZSBmb3IgdGVtcGVyYXR1cmVzIChzZWUKPj4+ICtEb2N1bWVudGF0aW9uL2h3bW9uL3N5
-c2ZzLWludGVyZmFjZSB1bmRlciBUZW1wZXJhdHVyZXMpLgo+Pj4gKwo+Pj4gK1BsZWFzZSByZWZl
-ciBob3cgdG8gaW5zdGFudGlhdGUgdGhpcyBkcml2ZXI6Cj4+PiArRG9jdW1lbnRhdGlvbi9pMmMv
-aW5zdGFudGlhdGluZy1kZXZpY2VzCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29u
-ZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCj4+PiBpbmRleCAwODUzMWExLi5jODgyZDRiIDEw
-MDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCj4+PiArKysgYi9kcml2ZXJzL2h3
-bW9uL0tjb25maWcKPj4+IEBAIC0xMzkxLDYgKzEzOTEsMTYgQEAgY29uZmlnIFNFTlNPUlNfVE1Q
-MTAyCj4+PiBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28s
-IHRoZSBtb2R1bGUKPj4+IHdpbGwgYmUgY2FsbGVkIHRtcDEwMi4KPj4+ICtjb25maWcgU0VOU09S
-U19UTVAxMDMKPj4+ICsgdHJpc3RhdGUgIlRleGFzIEluc3RydW1lbnRzIFRNUDEwMyIKPj4+ICsg
-ZGVwZW5kcyBvbiBJMkMKPj4+ICsgaGVscAo+Pj4gKyBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBn
-ZXQgc3VwcG9ydCBmb3IgVGV4YXMgSW5zdHJ1bWVudHMgVE1QMTAzCj4+PiArIHNlbnNvciBjaGlw
-cy4KPj4+ICsKPj4+ICsgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUu
-IElmIHNvLCB0aGUgbW9kdWxlCj4+PiArIHdpbGwgYmUgY2FsbGVkIHRtcDEwMy4KPj4+ICsKPj4+
-IGNvbmZpZyBTRU5TT1JTX1RNUDQwMQo+Pj4gdHJpc3RhdGUgIlRleGFzIEluc3RydW1lbnRzIFRN
-UDQwMSBhbmQgY29tcGF0aWJsZXMiCj4+PiBkZXBlbmRzIG9uIEkyQwo+Pj4gZGlmZiAtLWdpdCBh
-L2RyaXZlcnMvaHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCj4+PiBpbmRl
-eCAzZGMwZjAyLi5jYzBkZjFlZiAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZp
-bGUKPj4+ICsrKyBiL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKPj4+IEBAIC0xMzUsNiArMTM1LDcg
-QEAgb2JqLSQoQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MikrPSBzbXNjNDdtMTkyLm8KPj4+IG9i
-ai0kKENPTkZJR19TRU5TT1JTX0FNQzY4MjEpICs9IGFtYzY4MjEubwo+Pj4gb2JqLSQoQ09ORklH
-X1NFTlNPUlNfVEhNQzUwKSArPSB0aG1jNTAubwo+Pj4gb2JqLSQoQ09ORklHX1NFTlNPUlNfVE1Q
-MTAyKSArPSB0bXAxMDIubwo+Pj4gK29iai0kKENPTkZJR19TRU5TT1JTX1RNUDEwMykgKz0gdG1w
-MTAzLm8KPj4+IG9iai0kKENPTkZJR19TRU5TT1JTX1RNUDQwMSkgKz0gdG1wNDAxLm8KPj4+IG9i
-ai0kKENPTkZJR19TRU5TT1JTX1RNUDQyMSkgKz0gdG1wNDIxLm8KPj4+IG9iai0kKENPTkZJR19T
-RU5TT1JTX1RXTDQwMzBfTUFEQykrPSB0d2w0MDMwLW1hZGMtaHdtb24ubwo+Pj4gZGlmZiAtLWdp
-dCBhL2RyaXZlcnMvaHdtb24vdG1wMTAzLmMgYi9kcml2ZXJzL2h3bW9uL3RtcDEwMy5jCj4+PiBu
-ZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4gaW5kZXggMDAwMDAwMC4uZTY5ZGJjYQo+Pj4gLS0tIC9k
-ZXYvbnVsbAo+Pj4gKysrIGIvZHJpdmVycy9od21vbi90bXAxMDMuYwo+Pj4gQEAgLTAsMCArMSwy
-MDUgQEAKPj4+ICsvKgo+Pj4gKyAqIFRleGFzIEluc3RydW1lbnRzIFRNUDEwMyBTTUJ1cyB0ZW1w
-ZXJhdHVyZSBzZW5zb3IgZHJpdmVyCj4+PiArICogQ29weXJpZ2h0IChDKSAyMDE0IEhlaWtvIFNj
-aG9jaGVyIDxoc0BkZW54LmRlPgo+Pj4gKyAqCj4+PiArICogQmFzZWQgb246Cj4+PiArICogVGV4
-YXMgSW5zdHJ1bWVudHMgVE1QMTAyIFNNQnVzIHRlbXBlcmF0dXJlIHNlbnNvciBkcml2ZXIKPj4+
-ICsgKgo+Pj4gKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGV2ZW4gS2luZyA8c2ZraW5nQGZkd2Rj
-LmNvbT4KPj4+ICsgKgo+Pj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
-Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCj4+PiBtb2RpZnkKPj4+ICsgKiBpdCB1bmRlciB0
-aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAo+Pj4gcHVibGlz
-aGVkIGJ5Cj4+PiArICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp
-b24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPj4+ICsgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
-ciB2ZXJzaW9uLgo+Pj4gKyAqCj4+PiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu
-IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+PiArICogYnV0IFdJVEhPVVQgQU5Z
-IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4+ICsgKiBN
-RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0
-aGUKPj4+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+
-Pj4gKyAqCj4+PiArICovCj4+PiArCj4+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+Pj4g
-KyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPj4+
-ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+Cj4+
-PiArI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2Vy
-ci5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9k
-ZXZpY2UuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgo+Pj4gKyNpbmNsdWRlIDxs
-aW51eC9yZWdtYXAuaD4KPj4+ICsKPj4+ICsjZGVmaW5lIFRNUDEwM19URU1QX1JFRyAweDAwCj4+
-PiArI2RlZmluZSBUTVAxMDNfQ09ORl9SRUcgMHgwMQo+Pj4gKyNkZWZpbmUgVE1QMTAzX1RMT1df
-UkVHIDB4MDIKPj4+ICsjZGVmaW5lIFRNUDEwM19USElHSF9SRUcgMHgwMwo+Pj4gKwo+Pj4gKyNk
-ZWZpbmUgVE1QMTAzX0NPTkZfTTAgMHgwMQo+Pj4gKyNkZWZpbmUgVE1QMTAzX0NPTkZfTTEgMHgw
-Mgo+Pj4gKyNkZWZpbmUgVE1QMTAzX0NPTkZfTEMgMHgwNAo+Pj4gKyNkZWZpbmUgVE1QMTAzX0NP
-TkZfRkwgMHgwOAo+Pj4gKyNkZWZpbmUgVE1QMTAzX0NPTkZfRkggMHgxMAo+Pj4gKyNkZWZpbmUg
-VE1QMTAzX0NPTkZfQ1IwIDB4MjAKPj4+ICsjZGVmaW5lIFRNUDEwM19DT05GX0NSMSAweDQwCj4+
-PiArI2RlZmluZSBUTVAxMDNfQ09ORl9JRCAweDgwCj4+PiArI2RlZmluZSBUTVAxMDNfQ09ORl9T
-RCAoVE1QMTAzX0NPTkZfTTEpCj4+PiArI2RlZmluZSBUTVAxMDNfQ09ORl9TRF9NQVNLIChUTVAx
-MDNfQ09ORl9NMCB8IFRNUDEwM19DT05GX00xKQo+Pj4gKwo+Pj4gKyNkZWZpbmUgVE1QMTAzX0NP
-TkZJRyAoVE1QMTAzX0NPTkZfQ1IxIHwgVE1QMTAzX0NPTkZfTTEpCj4+PiArI2RlZmluZSBUTVAx
-MDNfQ09ORklHX01BU0sgKFRNUDEwM19DT05GX0NSMCB8IFRNUDEwM19DT05GX0NSMSB8IFwKPj4+
-ICsgVE1QMTAzX0NPTkZfTTAgfCBUTVAxMDNfQ09ORl9NMSkKPj4+ICsKPj4+ICtzdGF0aWMgaW5s
-aW5lIGludCB0bXAxMDNfcmVnX3RvX21jKHM4IHZhbCkKPj4+ICt7Cj4+PiArIHJldHVybiB2YWwg
-KiAxMDAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIHU4IHRtcDEwM19tY190b19y
-ZWcoaW50IHZhbCkKPj4+ICt7Cj4+PiArIHJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCh2YWwsIDEw
-MDApOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgc3NpemVfdCB0bXAxMDNfc2hvd190ZW1wKHN0
-cnVjdCBkZXZpY2UgKmRldiwKPj4+ICsgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4+
-PiArIGNoYXIgKmJ1ZikKPj4+ICt7Cj4+PiArIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0
-ZSAqc2RhID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOwo+Pj4gKyBzdHJ1Y3QgcmVnbWFwICpy
-ZWdtYXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPj4+ICsgdW5zaWduZWQgaW50IHJlZ3ZhbDsK
-Pj4+ICsgaW50IHJldDsKPj4+ICsKPj4+ICsgcmV0ID0gcmVnbWFwX3JlYWQocmVnbWFwLCBzZGEt
-PmluZGV4LCAmcmVndmFsKTsKPj4+ICsgaWYgKHJldCA8IDApCj4+PiArIHJldHVybiByZXQ7Cj4+
-PiArCj4+PiArIHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0bXAxMDNfcmVnX3RvX21jKHJl
-Z3ZhbCkpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgc3NpemVfdCB0bXAxMDNfc2V0X3RlbXAo
-c3RydWN0IGRldmljZSAqZGV2LAo+Pj4gKyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwK
-Pj4+ICsgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCj4+PiArewo+Pj4gKyBzdHJ1Y3Qg
-c2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNkYSA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsK
-Pj4+ICsgc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4+PiAr
-IGxvbmcgdmFsOwo+Pj4gKyBpbnQgcmV0Owo+Pj4gKwo+Pj4gKyBpZiAoa3N0cnRvbChidWYsIDEw
-LCAmdmFsKSA8IDApCj4+PiArIHJldHVybiAtRUlOVkFMOwo+Pj4gKwo+Pj4gKyB2YWwgPSBjbGFt
-cF92YWwodmFsLCAtNTUwMDAsIDEyNzAwMCk7Cj4+PiArIHJldCA9IHJlZ21hcF93cml0ZShyZWdt
-YXAsIHNkYS0+aW5kZXgsIHRtcDEwM19tY190b19yZWcodmFsKSk7Cj4+PiArIHJldHVybiByZXQg
-PyByZXQgOiBjb3VudDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRU
-Uih0ZW1wMV9pbnB1dCwgU19JUlVHTywgdG1wMTAzX3Nob3dfdGVtcCwgCj4+PiBOVUxMICwKPj4+
-ICsgVE1QMTAzX1RFTVBfUkVHKTsKPj4+ICsKPj4+ICtzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRS
-KHRlbXAxX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIAo+Pj4gdG1wMTAzX3Nob3dfdGVtcCwKPj4+
-ICsgdG1wMTAzX3NldF90ZW1wLCBUTVAxMDNfVExPV19SRUcpOwo+Pj4gKwo+Pj4gK3N0YXRpYyBT
-RU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgCj4+PiB0bXAx
-MDNfc2hvd190ZW1wLAo+Pj4gKyB0bXAxMDNfc2V0X3RlbXAsIFRNUDEwM19USElHSF9SRUcpOwo+
-Pj4gKwo+Pj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp0bXAxMDNfYXR0cnNbXSA9IHsKPj4+
-ICsgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAo+Pj4gKyAmc2Vu
-c29yX2Rldl9hdHRyX3RlbXAxX21pbi5kZXZfYXR0ci5hdHRyLAo+Pj4gKyAmc2Vuc29yX2Rldl9h
-dHRyX3RlbXAxX21heC5kZXZfYXR0ci5hdHRyLAo+Pj4gKyBOVUxMCj4+PiArfTsKPj4+ICtBVFRS
-SUJVVEVfR1JPVVBTKHRtcDEwMyk7Cj4+PiArCj4+PiArc3RhdGljIGJvb2wgdG1wMTAzX3JlZ21h
-cF9pc192b2xhdGlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIAo+Pj4gaW50IHJlZykK
-Pj4+ICt7Cj4+PiArIHJldHVybiByZWcgPT0gVE1QMTAzX1RFTVBfUkVHOwo+Pj4gK30KPj4+ICsK
-Pj4+ICtzdGF0aWMgc3RydWN0IHJlZ21hcF9jb25maWcgdG1wMTAzX3JlZ21hcF9jb25maWcgPSB7
-Cj4+PiArIC5yZWdfYml0cyA9IDgsCj4+PiArIC52YWxfYml0cyA9IDgsCj4+PiArIC5tYXhfcmVn
-aXN0ZXIgPSBUTVAxMDNfVEhJR0hfUkVHLAo+Pj4gKyAudm9sYXRpbGVfcmVnID0gdG1wMTAzX3Jl
-Z21hcF9pc192b2xhdGlsZSwKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgdG1wMTAzX3By
-b2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCj4+PiArIGNvbnN0IHN0cnVjdCBpMmNfZGV2
-aWNlX2lkICppZCkKPj4+ICt7Cj4+PiArIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRl
-djsKPj4+ICsgc3RydWN0IGRldmljZSAqaHdtb25fZGV2Owo+Pj4gKyBzdHJ1Y3QgcmVnbWFwICpy
-ZWdtYXA7Cj4+PiArIGludCByZXQ7Cj4+PiArCj4+PiArIGlmICghaTJjX2NoZWNrX2Z1bmN0aW9u
-YWxpdHkoY2xpZW50LT5hZGFwdGVyLAo+Pj4gKyBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKSB7
-Cj4+PiArIGRldl9lcnIoJmNsaWVudC0+ZGV2LAo+Pj4gKyAiYWRhcHRlciBkb2Vzbid0IHN1cHBv
-cnQgU01CdXMgYnl0ZSB0cmFuc2FjdGlvbnNcbiIpOwo+Pj4gKyByZXR1cm4gLUVOT0RFVjsKPj4+
-ICsgfQo+Pj4gKwo+Pj4gKyByZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsICZ0
-bXAxMDNfcmVnbWFwX2NvbmZpZyk7Cj4+PiArIGlmIChJU19FUlIocmVnbWFwKSkgewo+Pj4gKyBk
-ZXZfZXJyKGRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSByZWdpc3RlciBtYXBcbiIpOwo+Pj4gKyBy
-ZXR1cm4gUFRSX0VSUihyZWdtYXApOwo+Pj4gKyB9Cj4+PiArCj4+PiArIHJldCA9IHJlZ21hcF91
-cGRhdGVfYml0cyhyZWdtYXAsIFRNUDEwM19DT05GX1JFRywgVE1QMTAzX0NPTkZJR19NQVNLLAo+
-Pj4gKyBUTVAxMDNfQ09ORklHKTsKPj4+ICsgaWYgKHJldCA8IDApIHsKPj4+ICsgZGV2X2Vycigm
-Y2xpZW50LT5kZXYsICJlcnJvciB3cml0aW5nIGNvbmZpZyByZWdpc3RlclxuIik7Cj4+PiArIHJl
-dHVybiByZXQ7Cj4+PiArIH0KPj4+ICsKPj4+ICsgaHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3Jl
-Z2lzdGVyX3dpdGhfZ3JvdXBzKGRldiwgY2xpZW50LT5uYW1lLAo+Pj4gKyByZWdtYXAsIHRtcDEw
-M19ncm91cHMpOwo+Pj4gKyByZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGh3bW9uX2Rldik7Cj4+PiAr
-fQo+Pj4gKwo+Pj4gKyNpZmRlZiBDT05GSUdfUE0KPj4+ICtzdGF0aWMgaW50IHRtcDEwM19zdXNw
-ZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPj4+ICt7Cj4+PiArIHN0cnVjdCByZWdtYXAgKnJlZ21h
-cCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+Pj4gKwo+Pj4gKyByZXR1cm4gcmVnbWFwX3VwZGF0
-ZV9iaXRzKHJlZ21hcCwgVE1QMTAzX0NPTkZfUkVHLAo+Pj4gKyBUTVAxMDNfQ09ORl9TRF9NQVNL
-LCAwKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCB0bXAxMDNfcmVzdW1lKHN0cnVjdCBk
-ZXZpY2UgKmRldikKPj4+ICt7Cj4+PiArIHN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGRldl9nZXRf
-ZHJ2ZGF0YShkZXYpOwo+Pj4gKwo+Pj4gKyByZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21h
-cCwgVE1QMTAzX0NPTkZfUkVHLAo+Pj4gKyBUTVAxMDNfQ09ORl9TRF9NQVNLLCBUTVAxMDNfQ09O
-Rl9TRCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB0
-bXAxMDNfZGV2X3BtX29wcyA9IHsKPj4+ICsgLnN1c3BlbmQgPSB0bXAxMDNfc3VzcGVuZCwKPj4+
-ICsgLnJlc3VtZSA9IHRtcDEwM19yZXN1bWUsCj4+PiArfTsKPj4+ICsKPj4+ICsjZGVmaW5lIFRN
-UDEwM19ERVZfUE1fT1BTICgmdG1wMTAzX2Rldl9wbV9vcHMpCj4+PiArI2Vsc2UKPj4+ICsjZGVm
-aW5lIFRNUDEwM19ERVZfUE1fT1BTIE5VTEwKPj4+ICsjZW5kaWYgLyogQ09ORklHX1BNICovCj4+
-PiArCj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRtcDEwM19pZFtdID0g
-ewo+Pj4gKyB7ICJ0bXAxMDMiLCAwIH0sCj4+PiArIHsgfQo+Pj4gK307Cj4+Cj4+IEluIHRoZSBi
-aW5kaW5ncyB5b3UgYXJlIGdpdmluZyB0aGUgY29tcGF0aWJsZSBwcm9wZXJ0eSBhcyA6IAo+PiB0
-aSx0bXAxMDMsIGJ1dCBoZXJlIG9ubHkgdG1wMTAzLgo+Pgo+PiBJbnN0ZWFkIG9mIHVzaW5nIHRo
-ZSBpMmNfZGV2aWNlX2lkIHN0cnVjdCAsIHVzZSBvZl9kZXZpY2VfaWQgc3RydWN0IAo+PiBmb3Ig
-Z2l2aW5nIHRoZQo+PiBjb21wYXRpYmxlIHByb3BlcnR5IHZhbHVlLgo+PiBjb21wYXRibGUgPSAi
-PG1hbnVmYWN0dXJlcj4sPG1vZGVsPiIKPgo+IFRoZXJlIGFyZSBhIGxvdCBvZiBkcml2ZXJzIGlu
-IGRyaXZlcnMvaHdtb24gd2hpY2ggdXNlICJpMmNfZGV2aWNlX2lkIAo+IHN0cnVjdCIsCj4gYW5k
-IGZvciB0aGVtIG9ubHkgIm1vZGVsIiBpcyBuZWNlc3NhcnkgLi4uCj4KPiBBcyB0aGlzIGlzIG5v
-dCBhIHBsYXRmb3JtIGRyaXZlciwgSSBkbyBub3Qga25vdywgaWYgIm9mX2RldmljZV9pZCBzdHJ1
-Y3QiCj4gaXMgcG9zc2libGUgdG8gdXNlLiBGb3IgdGhhdCwgaXQgbXVzdCBiZSBjb252ZXJ0ZWQg
-dG8gYSBwbGF0Zm9ybQo+IGRldmljZSBkcml2ZXIgLi4uCj4KSSB0aG91Z2h0IHlvdXIgYXJlIHVz
-aW5nIHRoZSBkZXZpY2V0cmVlIHNvdXJjZSB0byBsb2FkIHRoZSBkcml2ZXIuIEluIAp0aGF0IGNh
-c2UgaXQgbmVlZCBub3QgdG8gYmUgcGxhdGZvcm0gZHJpdmVyLgp3ZSBjYW4gdXNlICJvZl9kZXZp
-Y2VfaWQgc3RydWN0IiB3aGljaCBtYXRjaGVzIHRoZSBiaW5kaW5ncyBpbiB5b3VyIAp0cml2aWFs
-LWRldmljZXMudHh0CgpUaGFua3MKVmFya2EgQmhhZHJhbQo+IGJ5ZSwKPiBIZWlrbwo+Pgo+Pj4g
-K01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0bXAxMDNfaWQpOwo+Pj4gKytzdGF0aWMgc3RydWN0
-IGkyY19kcml2ZXIgdG1wMTAzX2RyaXZlciA9IHsKPj4+ICsgLmRyaXZlciA9IHsKPj4+ICsgLm5h
-bWUgPSAidG1wMTAzIiwKPj4+ICsgLnBtID0gVE1QMTAzX0RFVl9QTV9PUFMsCj4+PiArIH0sCj4+
-PiArIC5wcm9iZSA9IHRtcDEwM19wcm9iZSwKPj4+ICsgLmlkX3RhYmxlID0gdG1wMTAzX2lkLAo+
-Pj4gK307Cj4+PiArCj4+PiArbW9kdWxlX2kyY19kcml2ZXIodG1wMTAzX2RyaXZlcik7Cj4+PiAr
-Cj4+PiArTU9EVUxFX0FVVEhPUigiSGVpa28gU2Nob2NoZXIgPGhzQGRlbnguZGU+Iik7Cj4+PiAr
-TU9EVUxFX0RFU0NSSVBUSU9OKCJUZXhhcyBJbnN0cnVtZW50cyBUTVAxMDMgdGVtcGVyYXR1cmUg
-c2Vuc29yIAo+Pj4gZHJpdmVyIik7Cj4+PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+Pgo+Pgo+
-Pgo+CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbG0t
-c2Vuc29ycyBtYWlsaW5nIGxpc3QKbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwpodHRwOi8vbGlz
-dHMubG0tc2Vuc29ycy5vcmcvbWFpbG1hbi9saXN0aW5mby9sbS1zZW5zb3Jz
+On 06/18/2014 11:46 AM, Heiko Schocher wrote:
+> Hello Varka,
+>
+> Am 18.06.2014 07:46, schrieb Varka Bhadram:
+>> 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>"
+>
+> There are a lot of drivers in drivers/hwmon which use "i2c_device_id 
+> struct",
+> and for them only "model" is necessary ...
+>
+> As this is not a platform driver, I do not know, if "of_device_id struct"
+> is possible to use. For that, it must be converted to a platform
+> device driver ...
+>
+I thought your are using the devicetree source to load the driver. In 
+that case it need not to be platform driver.
+we can use "of_device_id struct" which matches the bindings in your 
+trivial-devices.txt
+
+Thanks
+Varka Bhadram
+> bye,
+> Heiko
+>>
+>>> +MODULE_DEVICE_TABLE(i2c, tmp103_id);
+>>> ++static struct i2c_driver tmp103_driver = {
+>>> + .driver = {
+>>> + .name = "tmp103",
+>>> + .pm = TMP103_DEV_PM_OPS,
+>>> + },
+>>> + .probe = tmp103_probe,
+>>> + .id_table = tmp103_id,
+>>> +};
+>>> +
+>>> +module_i2c_driver(tmp103_driver);
+>>> +
+>>> +MODULE_AUTHOR("Heiko Schocher <hs@denx.de>");
+>>> +MODULE_DESCRIPTION("Texas Instruments TMP103 temperature sensor 
+>>> driver");
+>>> +MODULE_LICENSE("GPL");
+>>
+>>
+>>
+>
diff --git a/a/content_digest b/N1/content_digest
index dcd7b47..de42e4a 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -2,8 +2,8 @@
  "ref\053A127BB.7090802@gmail.com\0"
  "ref\053A12ED2.4080004@denx.de\0"
  "From\0Varka Bhadram <varkabhadram@gmail.com>\0"
- "Subject\0Re: [lm-sensors] [PATCH v5] hwmon: Driver for TI TMP103 temperature sensor\0"
- "Date\0Wed, 18 Jun 2014 07:10:40 +0000\0"
+ "Subject\0Re: [PATCH v5] hwmon: Driver for TI TMP103 temperature sensor\0"
+ "Date\0Wed, 18 Jun 2014 12:28:40 +0530\0"
  "To\0hs@denx.de\0"
  "Cc\0lm-sensors@lm-sensors.org"
   Jean Delvare <khali@linux-fr.org>
@@ -14,233 +14,399 @@
  " Mark Rutland <mark.rutland@arm.com>\0"
  "\00:1\0"
  "b\0"
- "T24gMDYvMTgvMjAxNCAxMTo0NiBBTSwgSGVpa28gU2Nob2NoZXIgd3JvdGU6Cj4gSGVsbG8gVmFy\n"
- "a2EsCj4KPiBBbSAxOC4wNi4yMDE0IDA3OjQ2LCBzY2hyaWViIFZhcmthIEJoYWRyYW06Cj4+IEhp\n"
- "LAo+Pgo+PiBPbiAwNi8xOC8yMDE0IDExOjA3IEFNLCBIZWlrbyBTY2hvY2hlciB3cm90ZToKPj4+\n"
- "IERyaXZlciBmb3IgdGhlIFRJIFRNUDEwMy4KPj4+Cj4+PiBUaGUgVEkgVE1QMTAzIGlzIHNpbWls\n"
- "YXIgdG8gdGhlIFRNUDEwMi4gSXQgZGlmZmVycyBmcm9tIHRoZSBUTVAxMDIKPj4+IGJ5IGhhdmlu\n"
- "ZyBvbmx5IDggYml0IHJlZ2lzdGVycy4KPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBIZWlrbyBTY2hv\n"
- "Y2hlciA8aHNAZGVueC5kZT4KPj4+Cj4+PiAtLS0KPj4+Cj4+PiBDYzogSmVhbiBEZWx2YXJlIDxr\n"
- "aGFsaUBsaW51eC1mci5vcmc+Cj4+PiBDYzogR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMu\n"
- "bmV0Pgo+Pj4gQ2M6IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKPj4+IENjOiBkZXZpY2V0\n"
- "cmVlQHZnZXIua2VybmVsLm9yZwo+Pj4gQ2M6IGxpbnV4LWRvY0B2Z2VyLmtlcm5lbC5vcmcKPj4+\n"
- "IENjOiBNYXJrIFJ1dGxhbmQgPG1hcmsucnV0bGFuZEBhcm0uY29tPgo+Pj4KPj4+IC0gY2hhbmdl\n"
- "IGZvciB2MjoKPj4+IC0gYWRkIGNvbW1lbnRzIGZyb20gR3VlbnRlclJvZWNrOgo+Pj4gLSByZW1v\n"
- "dmUgQ2MgZnJvbSBjb21taXQgc3ViamVjdAo+Pj4gLSBhZGQgZGV2aWNldHJlZSBtYWludGFpbmVy\n"
- "Cj4+PiAtIG1vdmUgRG9jdW1lbnRhdGlvbiB0byBEb2N1bWVudGF0aW9uL2h3bW9uL3RtcDEwMwo+\n"
- "Pj4gLSByZW1vdmUgZGV2aWNldHJlZSBiaW5kaW5ncyBmcm9tIERvY3VtZW50YXRpb24KPj4+IC0g\n"
- "YWRkIGNvbXBhdGlibGUgc3RyaW5nIHRvCj4+PiAiRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jp\n"
- "bmRpbmdzL2kyYy90cml2aWFsLWRldmljZXMudHh0Igo+Pj4gLSByZW1vdmUgQ2FtZWxDYXNlCj4+\n"
- "PiAtIGZpeCBDb2RpbmdzdHlsZSBpc3N1ZXMKPj4+IC0gdXNlIEFUVFJJQlVURV9HUk9VUFMgYW5k\n"
- "IGRldm1faHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfZ3JvdXBzKCkKPj4+IC0gcmVtb3ZlIHVu\n"
- "c3VzZWQgZGVmaW5lIFRNUDEwM19DT05GSUdfUkRfT05MWQo+Pj4gLSByZXN0b3JlIGNvbmZpZyBy\n"
- "ZWdpc3RlciB3aGVuIGV4aXQoKQo+Pj4gLSB1c2UgcmVnbWFwCj4+PiAtIGNoYW5nZXMgZm9yIHYz\n"
- "Ogo+Pj4gYWdhaW4gYSBsb3Qgb2YgZmFudGFzdGljIHRpcHMgaG93IHRvIHVzZSByZWdtYXAgZWZm\n"
- "aWNpZW50bHkKPj4+IGZyb20gR3VlbnRlciBSb2VjazoKPj4+IC0gZ2V0IHJpZCBvZiAic3RydWN0\n"
- "IHRtcDEwMyIKPj4+IC0gZ2V0IHJpZCBvZiAic3RhdGljIGNvbnN0IHU4IHRtcDEwM19yZWdbXSIK\n"
- "Pj4+IC0gZ2V0IHJpZCBvZiBtdXRleCBsb2NrCj4+PiAtIGRyb3AgY29uZmlnX29yaWcgZW50aXJl\n"
- "bHkKPj4+IC0gdXNlIHJlZ21hcF91cGRhdGVfYml0cygpCj4+PiAtIGNoYW5nZXMgZm9yIHY0Ogo+\n"
- "Pj4gLSBhZGQgY29tbWVudCBmcm9tIEd1ZW50ZXIgUm9lY2s6Cj4+PiBkZWZpbmUgVE1QMTAzX0NP\n"
- "TkZJR19NQVNLIGFuZCBUTVAxMDNfQ09ORl9TRF9NQVNLCj4+PiBzZXBhcmF0ZWx5IHRvIGVuc3Vy\n"
- "ZSB5b3UgY2F0Y2ggYWxsIHRoZSB0by1iZS1jbGVhcmVkIGJpdHMuCj4+PiAtIGNoYW5nZXMgZm9y\n"
- "IHY1Ogo+Pj4gYWRkIGNvbW1lbnQgZnJvbSBHdWVudGVyIFJvZWNrOgo+Pj4gLSB1c2UgIiNkZWZp\n"
- "bmUgVE1QMTAzX0NPTkZfU0QgVE1QMTAzX0NPTkZfTTEiCj4+PiBhZGQgY29tbWVudCBmcm9tIE1h\n"
- "cmsgUnV0bGFuZDoKPj4+IC0gdXNlIGZ1bGwgc3RyaW5nIGZvciBEVCBjb21wYXRpYmxlIHN0cmlu\n"
- "ZyBtYXRjaGluZywgaW5zdGVhZCBvZgo+Pj4gRFJJVkVSX05BTUUuIEdldCByaWQgY29tcGxldGUg\n"
- "b2YgRFJJVkVSX05BTUUgZGVmaW5lLgo+Pj4KPj4+IC4uLi9kZXZpY2V0cmVlL2JpbmRpbmdzL2ky\n"
- "Yy90cml2aWFsLWRldmljZXMudHh0IHwgMSArCj4+PiBEb2N1bWVudGF0aW9uL2h3bW9uL3RtcDEw\n"
- "MyB8IDI4ICsrKwo+Pj4gZHJpdmVycy9od21vbi9LY29uZmlnIHwgMTAgKwo+Pj4gZHJpdmVycy9o\n"
- "d21vbi9NYWtlZmlsZSB8IDEgKwo+Pj4gZHJpdmVycy9od21vbi90bXAxMDMuYyB8IDIwNSArKysr\n"
- "KysrKysrKysrKysrKysrKysKPj4+IDUgZmlsZXMgY2hhbmdlZCwgMjQ1IGluc2VydGlvbnMoKykK\n"
- "Pj4+IGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2h3bW9uL3RtcDEwMwo+Pj4gY3Jl\n"
- "YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvaHdtb24vdG1wMTAzLmMKPj4+Cj4+PiBkaWZmIC0tZ2l0\n"
- "IAo+Pj4gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL3RyaXZpYWwtZGV2\n"
- "aWNlcy50eHQgCj4+PiBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvdHJp\n"
- "dmlhbC1kZXZpY2VzLnR4dAo+Pj4gaW5kZXggYmVmODZlNS4uZmM5NDRlMCAxMDA2NDQKPj4+IC0t\n"
- "LSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvdHJpdmlhbC1kZXZpY2Vz\n"
- "LnR4dAo+Pj4gKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy90cml2\n"
- "aWFsLWRldmljZXMudHh0Cj4+PiBAQCAtODMsNSArODMsNiBAQCBzdG0sbTQxdDgwIE00MVQ4MCAt\n"
- "IFNFUklBTCBBQ0NFU1MgUlRDIFdJVEggQUxBUk1TCj4+PiB0YW9zLHRzbDI1NTAgQW1iaWVudCBM\n"
- "aWdodCBTZW5zb3Igd2l0aCBTTUJVUy9Ud28gV2lyZSBTZXJpYWwgSW50ZXJmYWNlCj4+PiB0aSx0\n"
- "c2MyMDAzIEkyQyBUb3VjaC1TY3JlZW4gQ29udHJvbGxlcgo+Pj4gdGksdG1wMTAyIExvdyBQb3dl\n"
- "ciBEaWdpdGFsIFRlbXBlcmF0dXJlIFNlbnNvciB3aXRoIFNNQlVTL1R3byBXaXJlIAo+Pj4gU2Vy\n"
- "aWFsIEludGVyZmFjZQo+Pj4gK3RpLHRtcDEwMyBMb3cgUG93ZXIgRGlnaXRhbCBUZW1wZXJhdHVy\n"
- "ZSBTZW5zb3Igd2l0aCBTTUJVUy9Ud28gV2lyZSAKPj4+IFNlcmlhbCBJbnRlcmZhY2UKPj4+IHRp\n"
- "LHRtcDI3NSBEaWdpdGFsIFRlbXBlcmF0dXJlIFNlbnNvcgo+Pj4gd2luYm9uZCx3cGN0MzAxIGky\n"
- "YyB0cnVzdGVkIHBsYXRmb3JtIG1vZHVsZSAoVFBNKQo+Pj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50\n"
- "YXRpb24vaHdtb24vdG1wMTAzIGIvRG9jdW1lbnRhdGlvbi9od21vbi90bXAxMDMKPj4+IG5ldyBm\n"
- "aWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAwLi5lYzAwYTE1Cj4+PiAtLS0gL2Rldi9u\n"
- "dWxsCj4+PiArKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3RtcDEwMwo+Pj4gQEAgLTAsMCArMSwy\n"
- "OCBAQAo+Pj4gK0tlcm5lbCBkcml2ZXIgdG1wMTAzCj4+PiArPT09PT09PT09PT09PT09PT09PT0K\n"
- "Pj4+ICsKPj4+ICtTdXBwb3J0ZWQgY2hpcHM6Cj4+PiArICogVGV4YXMgSW5zdHJ1bWVudHMgVE1Q\n"
- "MTAzCj4+PiArIFByZWZpeDogJ3RtcDEwMycKPj4+ICsgQWRkcmVzc2VzIHNjYW5uZWQ6IG5vbmUK\n"
- "Pj4+ICsgUHJvZHVjdCBpbmZvIGFuZCBkYXRhc2hlZXQ6IGh0dHA6Ly93d3cudGkuY29tL3Byb2R1\n"
- "Y3QvdG1wMTAzCj4+PiArCj4+PiArQXV0aG9yOgo+Pj4gKyBIZWlrbyBTY2hvY2hlciA8aHNAZGVu\n"
- "eC5kZT4KPj4+ICsKPj4+ICtEZXNjcmlwdGlvbgo+Pj4gKy0tLS0tLS0tLS0tCj4+PiArCj4+PiAr\n"
- "VGhlIFRNUDEwMyBpcyBhIGRpZ2l0YWwgb3V0cHV0IHRlbXBlcmF0dXJlIHNlbnNvciBpbiBhIGZv\n"
- "dXItYmFsbAo+Pj4gK3dhZmVyIGNoaXAtc2NhbGUgcGFja2FnZSAoV0NTUCkuIFRoZSBUTVAxMDMg\n"
- "aXMgY2FwYWJsZSBvZiByZWFkaW5nCj4+PiArdGVtcGVyYXR1cmVzIHRvIGEgcmVzb2x1dGlvbiBv\n"
- "ZiAxwrBDLiBUaGUgVE1QMTAzIGlzIHNwZWNpZmllZCBmb3IKPj4+ICtvcGVyYXRpb24gb3ZlciBh\n"
- "IHRlbXBlcmF0dXJlIHJhbmdlIG9mIOKAkzQwwrBDIHRvICsxMjXCsEMuCj4+PiArCj4+PiArUmVz\n"
- "b2x1dGlvbjogOCBCaXRzCj4+PiArQWNjdXJhY3k6IMKxMcKwQyBUeXAgKOKAkzEwwrBDIHRvICsx\n"
- "MDDCsEMpCj4+PiArCj4+PiArVGhlIGRyaXZlciBwcm92aWRlcyB0aGUgY29tbW9uIHN5c2ZzLWlu\n"
- "dGVyZmFjZSBmb3IgdGVtcGVyYXR1cmVzIChzZWUKPj4+ICtEb2N1bWVudGF0aW9uL2h3bW9uL3N5\n"
- "c2ZzLWludGVyZmFjZSB1bmRlciBUZW1wZXJhdHVyZXMpLgo+Pj4gKwo+Pj4gK1BsZWFzZSByZWZl\n"
- "ciBob3cgdG8gaW5zdGFudGlhdGUgdGhpcyBkcml2ZXI6Cj4+PiArRG9jdW1lbnRhdGlvbi9pMmMv\n"
- "aW5zdGFudGlhdGluZy1kZXZpY2VzCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29u\n"
- "ZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCj4+PiBpbmRleCAwODUzMWExLi5jODgyZDRiIDEw\n"
- "MDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCj4+PiArKysgYi9kcml2ZXJzL2h3\n"
- "bW9uL0tjb25maWcKPj4+IEBAIC0xMzkxLDYgKzEzOTEsMTYgQEAgY29uZmlnIFNFTlNPUlNfVE1Q\n"
- "MTAyCj4+PiBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28s\n"
- "IHRoZSBtb2R1bGUKPj4+IHdpbGwgYmUgY2FsbGVkIHRtcDEwMi4KPj4+ICtjb25maWcgU0VOU09S\n"
- "U19UTVAxMDMKPj4+ICsgdHJpc3RhdGUgIlRleGFzIEluc3RydW1lbnRzIFRNUDEwMyIKPj4+ICsg\n"
- "ZGVwZW5kcyBvbiBJMkMKPj4+ICsgaGVscAo+Pj4gKyBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBn\n"
- "ZXQgc3VwcG9ydCBmb3IgVGV4YXMgSW5zdHJ1bWVudHMgVE1QMTAzCj4+PiArIHNlbnNvciBjaGlw\n"
- "cy4KPj4+ICsKPj4+ICsgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUu\n"
- "IElmIHNvLCB0aGUgbW9kdWxlCj4+PiArIHdpbGwgYmUgY2FsbGVkIHRtcDEwMy4KPj4+ICsKPj4+\n"
- "IGNvbmZpZyBTRU5TT1JTX1RNUDQwMQo+Pj4gdHJpc3RhdGUgIlRleGFzIEluc3RydW1lbnRzIFRN\n"
- "UDQwMSBhbmQgY29tcGF0aWJsZXMiCj4+PiBkZXBlbmRzIG9uIEkyQwo+Pj4gZGlmZiAtLWdpdCBh\n"
- "L2RyaXZlcnMvaHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCj4+PiBpbmRl\n"
- "eCAzZGMwZjAyLi5jYzBkZjFlZiAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZp\n"
- "bGUKPj4+ICsrKyBiL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKPj4+IEBAIC0xMzUsNiArMTM1LDcg\n"
- "QEAgb2JqLSQoQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MikrPSBzbXNjNDdtMTkyLm8KPj4+IG9i\n"
- "ai0kKENPTkZJR19TRU5TT1JTX0FNQzY4MjEpICs9IGFtYzY4MjEubwo+Pj4gb2JqLSQoQ09ORklH\n"
- "X1NFTlNPUlNfVEhNQzUwKSArPSB0aG1jNTAubwo+Pj4gb2JqLSQoQ09ORklHX1NFTlNPUlNfVE1Q\n"
- "MTAyKSArPSB0bXAxMDIubwo+Pj4gK29iai0kKENPTkZJR19TRU5TT1JTX1RNUDEwMykgKz0gdG1w\n"
- "MTAzLm8KPj4+IG9iai0kKENPTkZJR19TRU5TT1JTX1RNUDQwMSkgKz0gdG1wNDAxLm8KPj4+IG9i\n"
- "ai0kKENPTkZJR19TRU5TT1JTX1RNUDQyMSkgKz0gdG1wNDIxLm8KPj4+IG9iai0kKENPTkZJR19T\n"
- "RU5TT1JTX1RXTDQwMzBfTUFEQykrPSB0d2w0MDMwLW1hZGMtaHdtb24ubwo+Pj4gZGlmZiAtLWdp\n"
- "dCBhL2RyaXZlcnMvaHdtb24vdG1wMTAzLmMgYi9kcml2ZXJzL2h3bW9uL3RtcDEwMy5jCj4+PiBu\n"
- "ZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4gaW5kZXggMDAwMDAwMC4uZTY5ZGJjYQo+Pj4gLS0tIC9k\n"
- "ZXYvbnVsbAo+Pj4gKysrIGIvZHJpdmVycy9od21vbi90bXAxMDMuYwo+Pj4gQEAgLTAsMCArMSwy\n"
- "MDUgQEAKPj4+ICsvKgo+Pj4gKyAqIFRleGFzIEluc3RydW1lbnRzIFRNUDEwMyBTTUJ1cyB0ZW1w\n"
- "ZXJhdHVyZSBzZW5zb3IgZHJpdmVyCj4+PiArICogQ29weXJpZ2h0IChDKSAyMDE0IEhlaWtvIFNj\n"
- "aG9jaGVyIDxoc0BkZW54LmRlPgo+Pj4gKyAqCj4+PiArICogQmFzZWQgb246Cj4+PiArICogVGV4\n"
- "YXMgSW5zdHJ1bWVudHMgVE1QMTAyIFNNQnVzIHRlbXBlcmF0dXJlIHNlbnNvciBkcml2ZXIKPj4+\n"
- "ICsgKgo+Pj4gKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGV2ZW4gS2luZyA8c2ZraW5nQGZkd2Rj\n"
- "LmNvbT4KPj4+ICsgKgo+Pj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug\n"
- "Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCj4+PiBtb2RpZnkKPj4+ICsgKiBpdCB1bmRlciB0\n"
- "aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAo+Pj4gcHVibGlz\n"
- "aGVkIGJ5Cj4+PiArICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp\n"
- "b24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPj4+ICsgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl\n"
- "ciB2ZXJzaW9uLgo+Pj4gKyAqCj4+PiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu\n"
- "IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+PiArICogYnV0IFdJVEhPVVQgQU5Z\n"
- "IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4+ICsgKiBN\n"
- "RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0\n"
- "aGUKPj4+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+\n"
- "Pj4gKyAqCj4+PiArICovCj4+PiArCj4+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+Pj4g\n"
- "KyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPj4+\n"
- "ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+Cj4+\n"
- "PiArI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2Vy\n"
- "ci5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9k\n"
- "ZXZpY2UuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgo+Pj4gKyNpbmNsdWRlIDxs\n"
- "aW51eC9yZWdtYXAuaD4KPj4+ICsKPj4+ICsjZGVmaW5lIFRNUDEwM19URU1QX1JFRyAweDAwCj4+\n"
- "PiArI2RlZmluZSBUTVAxMDNfQ09ORl9SRUcgMHgwMQo+Pj4gKyNkZWZpbmUgVE1QMTAzX1RMT1df\n"
- "UkVHIDB4MDIKPj4+ICsjZGVmaW5lIFRNUDEwM19USElHSF9SRUcgMHgwMwo+Pj4gKwo+Pj4gKyNk\n"
- "ZWZpbmUgVE1QMTAzX0NPTkZfTTAgMHgwMQo+Pj4gKyNkZWZpbmUgVE1QMTAzX0NPTkZfTTEgMHgw\n"
- "Mgo+Pj4gKyNkZWZpbmUgVE1QMTAzX0NPTkZfTEMgMHgwNAo+Pj4gKyNkZWZpbmUgVE1QMTAzX0NP\n"
- "TkZfRkwgMHgwOAo+Pj4gKyNkZWZpbmUgVE1QMTAzX0NPTkZfRkggMHgxMAo+Pj4gKyNkZWZpbmUg\n"
- "VE1QMTAzX0NPTkZfQ1IwIDB4MjAKPj4+ICsjZGVmaW5lIFRNUDEwM19DT05GX0NSMSAweDQwCj4+\n"
- "PiArI2RlZmluZSBUTVAxMDNfQ09ORl9JRCAweDgwCj4+PiArI2RlZmluZSBUTVAxMDNfQ09ORl9T\n"
- "RCAoVE1QMTAzX0NPTkZfTTEpCj4+PiArI2RlZmluZSBUTVAxMDNfQ09ORl9TRF9NQVNLIChUTVAx\n"
- "MDNfQ09ORl9NMCB8IFRNUDEwM19DT05GX00xKQo+Pj4gKwo+Pj4gKyNkZWZpbmUgVE1QMTAzX0NP\n"
- "TkZJRyAoVE1QMTAzX0NPTkZfQ1IxIHwgVE1QMTAzX0NPTkZfTTEpCj4+PiArI2RlZmluZSBUTVAx\n"
- "MDNfQ09ORklHX01BU0sgKFRNUDEwM19DT05GX0NSMCB8IFRNUDEwM19DT05GX0NSMSB8IFwKPj4+\n"
- "ICsgVE1QMTAzX0NPTkZfTTAgfCBUTVAxMDNfQ09ORl9NMSkKPj4+ICsKPj4+ICtzdGF0aWMgaW5s\n"
- "aW5lIGludCB0bXAxMDNfcmVnX3RvX21jKHM4IHZhbCkKPj4+ICt7Cj4+PiArIHJldHVybiB2YWwg\n"
- "KiAxMDAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIHU4IHRtcDEwM19tY190b19y\n"
- "ZWcoaW50IHZhbCkKPj4+ICt7Cj4+PiArIHJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCh2YWwsIDEw\n"
- "MDApOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgc3NpemVfdCB0bXAxMDNfc2hvd190ZW1wKHN0\n"
- "cnVjdCBkZXZpY2UgKmRldiwKPj4+ICsgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4+\n"
- "PiArIGNoYXIgKmJ1ZikKPj4+ICt7Cj4+PiArIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0\n"
- "ZSAqc2RhID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOwo+Pj4gKyBzdHJ1Y3QgcmVnbWFwICpy\n"
- "ZWdtYXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPj4+ICsgdW5zaWduZWQgaW50IHJlZ3ZhbDsK\n"
- "Pj4+ICsgaW50IHJldDsKPj4+ICsKPj4+ICsgcmV0ID0gcmVnbWFwX3JlYWQocmVnbWFwLCBzZGEt\n"
- "PmluZGV4LCAmcmVndmFsKTsKPj4+ICsgaWYgKHJldCA8IDApCj4+PiArIHJldHVybiByZXQ7Cj4+\n"
- "PiArCj4+PiArIHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0bXAxMDNfcmVnX3RvX21jKHJl\n"
- "Z3ZhbCkpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgc3NpemVfdCB0bXAxMDNfc2V0X3RlbXAo\n"
- "c3RydWN0IGRldmljZSAqZGV2LAo+Pj4gKyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwK\n"
- "Pj4+ICsgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCj4+PiArewo+Pj4gKyBzdHJ1Y3Qg\n"
- "c2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNkYSA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsK\n"
- "Pj4+ICsgc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4+PiAr\n"
- "IGxvbmcgdmFsOwo+Pj4gKyBpbnQgcmV0Owo+Pj4gKwo+Pj4gKyBpZiAoa3N0cnRvbChidWYsIDEw\n"
- "LCAmdmFsKSA8IDApCj4+PiArIHJldHVybiAtRUlOVkFMOwo+Pj4gKwo+Pj4gKyB2YWwgPSBjbGFt\n"
- "cF92YWwodmFsLCAtNTUwMDAsIDEyNzAwMCk7Cj4+PiArIHJldCA9IHJlZ21hcF93cml0ZShyZWdt\n"
- "YXAsIHNkYS0+aW5kZXgsIHRtcDEwM19tY190b19yZWcodmFsKSk7Cj4+PiArIHJldHVybiByZXQg\n"
- "PyByZXQgOiBjb3VudDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRU\n"
- "Uih0ZW1wMV9pbnB1dCwgU19JUlVHTywgdG1wMTAzX3Nob3dfdGVtcCwgCj4+PiBOVUxMICwKPj4+\n"
- "ICsgVE1QMTAzX1RFTVBfUkVHKTsKPj4+ICsKPj4+ICtzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRS\n"
- "KHRlbXAxX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIAo+Pj4gdG1wMTAzX3Nob3dfdGVtcCwKPj4+\n"
- "ICsgdG1wMTAzX3NldF90ZW1wLCBUTVAxMDNfVExPV19SRUcpOwo+Pj4gKwo+Pj4gK3N0YXRpYyBT\n"
- "RU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgCj4+PiB0bXAx\n"
- "MDNfc2hvd190ZW1wLAo+Pj4gKyB0bXAxMDNfc2V0X3RlbXAsIFRNUDEwM19USElHSF9SRUcpOwo+\n"
- "Pj4gKwo+Pj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp0bXAxMDNfYXR0cnNbXSA9IHsKPj4+\n"
- "ICsgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAo+Pj4gKyAmc2Vu\n"
- "c29yX2Rldl9hdHRyX3RlbXAxX21pbi5kZXZfYXR0ci5hdHRyLAo+Pj4gKyAmc2Vuc29yX2Rldl9h\n"
- "dHRyX3RlbXAxX21heC5kZXZfYXR0ci5hdHRyLAo+Pj4gKyBOVUxMCj4+PiArfTsKPj4+ICtBVFRS\n"
- "SUJVVEVfR1JPVVBTKHRtcDEwMyk7Cj4+PiArCj4+PiArc3RhdGljIGJvb2wgdG1wMTAzX3JlZ21h\n"
- "cF9pc192b2xhdGlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIAo+Pj4gaW50IHJlZykK\n"
- "Pj4+ICt7Cj4+PiArIHJldHVybiByZWcgPT0gVE1QMTAzX1RFTVBfUkVHOwo+Pj4gK30KPj4+ICsK\n"
- "Pj4+ICtzdGF0aWMgc3RydWN0IHJlZ21hcF9jb25maWcgdG1wMTAzX3JlZ21hcF9jb25maWcgPSB7\n"
- "Cj4+PiArIC5yZWdfYml0cyA9IDgsCj4+PiArIC52YWxfYml0cyA9IDgsCj4+PiArIC5tYXhfcmVn\n"
- "aXN0ZXIgPSBUTVAxMDNfVEhJR0hfUkVHLAo+Pj4gKyAudm9sYXRpbGVfcmVnID0gdG1wMTAzX3Jl\n"
- "Z21hcF9pc192b2xhdGlsZSwKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgdG1wMTAzX3By\n"
- "b2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCj4+PiArIGNvbnN0IHN0cnVjdCBpMmNfZGV2\n"
- "aWNlX2lkICppZCkKPj4+ICt7Cj4+PiArIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRl\n"
- "djsKPj4+ICsgc3RydWN0IGRldmljZSAqaHdtb25fZGV2Owo+Pj4gKyBzdHJ1Y3QgcmVnbWFwICpy\n"
- "ZWdtYXA7Cj4+PiArIGludCByZXQ7Cj4+PiArCj4+PiArIGlmICghaTJjX2NoZWNrX2Z1bmN0aW9u\n"
- "YWxpdHkoY2xpZW50LT5hZGFwdGVyLAo+Pj4gKyBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKSB7\n"
- "Cj4+PiArIGRldl9lcnIoJmNsaWVudC0+ZGV2LAo+Pj4gKyAiYWRhcHRlciBkb2Vzbid0IHN1cHBv\n"
- "cnQgU01CdXMgYnl0ZSB0cmFuc2FjdGlvbnNcbiIpOwo+Pj4gKyByZXR1cm4gLUVOT0RFVjsKPj4+\n"
- "ICsgfQo+Pj4gKwo+Pj4gKyByZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsICZ0\n"
- "bXAxMDNfcmVnbWFwX2NvbmZpZyk7Cj4+PiArIGlmIChJU19FUlIocmVnbWFwKSkgewo+Pj4gKyBk\n"
- "ZXZfZXJyKGRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSByZWdpc3RlciBtYXBcbiIpOwo+Pj4gKyBy\n"
- "ZXR1cm4gUFRSX0VSUihyZWdtYXApOwo+Pj4gKyB9Cj4+PiArCj4+PiArIHJldCA9IHJlZ21hcF91\n"
- "cGRhdGVfYml0cyhyZWdtYXAsIFRNUDEwM19DT05GX1JFRywgVE1QMTAzX0NPTkZJR19NQVNLLAo+\n"
- "Pj4gKyBUTVAxMDNfQ09ORklHKTsKPj4+ICsgaWYgKHJldCA8IDApIHsKPj4+ICsgZGV2X2Vycigm\n"
- "Y2xpZW50LT5kZXYsICJlcnJvciB3cml0aW5nIGNvbmZpZyByZWdpc3RlclxuIik7Cj4+PiArIHJl\n"
- "dHVybiByZXQ7Cj4+PiArIH0KPj4+ICsKPj4+ICsgaHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3Jl\n"
- "Z2lzdGVyX3dpdGhfZ3JvdXBzKGRldiwgY2xpZW50LT5uYW1lLAo+Pj4gKyByZWdtYXAsIHRtcDEw\n"
- "M19ncm91cHMpOwo+Pj4gKyByZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGh3bW9uX2Rldik7Cj4+PiAr\n"
- "fQo+Pj4gKwo+Pj4gKyNpZmRlZiBDT05GSUdfUE0KPj4+ICtzdGF0aWMgaW50IHRtcDEwM19zdXNw\n"
- "ZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPj4+ICt7Cj4+PiArIHN0cnVjdCByZWdtYXAgKnJlZ21h\n"
- "cCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+Pj4gKwo+Pj4gKyByZXR1cm4gcmVnbWFwX3VwZGF0\n"
- "ZV9iaXRzKHJlZ21hcCwgVE1QMTAzX0NPTkZfUkVHLAo+Pj4gKyBUTVAxMDNfQ09ORl9TRF9NQVNL\n"
- "LCAwKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCB0bXAxMDNfcmVzdW1lKHN0cnVjdCBk\n"
- "ZXZpY2UgKmRldikKPj4+ICt7Cj4+PiArIHN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGRldl9nZXRf\n"
- "ZHJ2ZGF0YShkZXYpOwo+Pj4gKwo+Pj4gKyByZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21h\n"
- "cCwgVE1QMTAzX0NPTkZfUkVHLAo+Pj4gKyBUTVAxMDNfQ09ORl9TRF9NQVNLLCBUTVAxMDNfQ09O\n"
- "Rl9TRCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB0\n"
- "bXAxMDNfZGV2X3BtX29wcyA9IHsKPj4+ICsgLnN1c3BlbmQgPSB0bXAxMDNfc3VzcGVuZCwKPj4+\n"
- "ICsgLnJlc3VtZSA9IHRtcDEwM19yZXN1bWUsCj4+PiArfTsKPj4+ICsKPj4+ICsjZGVmaW5lIFRN\n"
- "UDEwM19ERVZfUE1fT1BTICgmdG1wMTAzX2Rldl9wbV9vcHMpCj4+PiArI2Vsc2UKPj4+ICsjZGVm\n"
- "aW5lIFRNUDEwM19ERVZfUE1fT1BTIE5VTEwKPj4+ICsjZW5kaWYgLyogQ09ORklHX1BNICovCj4+\n"
- "PiArCj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRtcDEwM19pZFtdID0g\n"
- "ewo+Pj4gKyB7ICJ0bXAxMDMiLCAwIH0sCj4+PiArIHsgfQo+Pj4gK307Cj4+Cj4+IEluIHRoZSBi\n"
- "aW5kaW5ncyB5b3UgYXJlIGdpdmluZyB0aGUgY29tcGF0aWJsZSBwcm9wZXJ0eSBhcyA6IAo+PiB0\n"
- "aSx0bXAxMDMsIGJ1dCBoZXJlIG9ubHkgdG1wMTAzLgo+Pgo+PiBJbnN0ZWFkIG9mIHVzaW5nIHRo\n"
- "ZSBpMmNfZGV2aWNlX2lkIHN0cnVjdCAsIHVzZSBvZl9kZXZpY2VfaWQgc3RydWN0IAo+PiBmb3Ig\n"
- "Z2l2aW5nIHRoZQo+PiBjb21wYXRpYmxlIHByb3BlcnR5IHZhbHVlLgo+PiBjb21wYXRibGUgPSAi\n"
- "PG1hbnVmYWN0dXJlcj4sPG1vZGVsPiIKPgo+IFRoZXJlIGFyZSBhIGxvdCBvZiBkcml2ZXJzIGlu\n"
- "IGRyaXZlcnMvaHdtb24gd2hpY2ggdXNlICJpMmNfZGV2aWNlX2lkIAo+IHN0cnVjdCIsCj4gYW5k\n"
- "IGZvciB0aGVtIG9ubHkgIm1vZGVsIiBpcyBuZWNlc3NhcnkgLi4uCj4KPiBBcyB0aGlzIGlzIG5v\n"
- "dCBhIHBsYXRmb3JtIGRyaXZlciwgSSBkbyBub3Qga25vdywgaWYgIm9mX2RldmljZV9pZCBzdHJ1\n"
- "Y3QiCj4gaXMgcG9zc2libGUgdG8gdXNlLiBGb3IgdGhhdCwgaXQgbXVzdCBiZSBjb252ZXJ0ZWQg\n"
- "dG8gYSBwbGF0Zm9ybQo+IGRldmljZSBkcml2ZXIgLi4uCj4KSSB0aG91Z2h0IHlvdXIgYXJlIHVz\n"
- "aW5nIHRoZSBkZXZpY2V0cmVlIHNvdXJjZSB0byBsb2FkIHRoZSBkcml2ZXIuIEluIAp0aGF0IGNh\n"
- "c2UgaXQgbmVlZCBub3QgdG8gYmUgcGxhdGZvcm0gZHJpdmVyLgp3ZSBjYW4gdXNlICJvZl9kZXZp\n"
- "Y2VfaWQgc3RydWN0IiB3aGljaCBtYXRjaGVzIHRoZSBiaW5kaW5ncyBpbiB5b3VyIAp0cml2aWFs\n"
- "LWRldmljZXMudHh0CgpUaGFua3MKVmFya2EgQmhhZHJhbQo+IGJ5ZSwKPiBIZWlrbwo+Pgo+Pj4g\n"
- "K01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0bXAxMDNfaWQpOwo+Pj4gKytzdGF0aWMgc3RydWN0\n"
- "IGkyY19kcml2ZXIgdG1wMTAzX2RyaXZlciA9IHsKPj4+ICsgLmRyaXZlciA9IHsKPj4+ICsgLm5h\n"
- "bWUgPSAidG1wMTAzIiwKPj4+ICsgLnBtID0gVE1QMTAzX0RFVl9QTV9PUFMsCj4+PiArIH0sCj4+\n"
- "PiArIC5wcm9iZSA9IHRtcDEwM19wcm9iZSwKPj4+ICsgLmlkX3RhYmxlID0gdG1wMTAzX2lkLAo+\n"
- "Pj4gK307Cj4+PiArCj4+PiArbW9kdWxlX2kyY19kcml2ZXIodG1wMTAzX2RyaXZlcik7Cj4+PiAr\n"
- "Cj4+PiArTU9EVUxFX0FVVEhPUigiSGVpa28gU2Nob2NoZXIgPGhzQGRlbnguZGU+Iik7Cj4+PiAr\n"
- "TU9EVUxFX0RFU0NSSVBUSU9OKCJUZXhhcyBJbnN0cnVtZW50cyBUTVAxMDMgdGVtcGVyYXR1cmUg\n"
- "c2Vuc29yIAo+Pj4gZHJpdmVyIik7Cj4+PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+Pgo+Pgo+\n"
- "Pgo+CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbG0t\n"
- "c2Vuc29ycyBtYWlsaW5nIGxpc3QKbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwpodHRwOi8vbGlz\n"
- dHMubG0tc2Vuc29ycy5vcmcvbWFpbG1hbi9saXN0aW5mby9sbS1zZW5zb3Jz
+ "On 06/18/2014 11:46 AM, Heiko Schocher wrote:\n"
+ "> Hello Varka,\n"
+ ">\n"
+ "> Am 18.06.2014 07:46, schrieb Varka Bhadram:\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 \n"
+ ">>> a/Documentation/devicetree/bindings/i2c/trivial-devices.txt \n"
+ ">>> 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 \n"
+ ">>> Serial Interface\n"
+ ">>> +ti,tmp103 Low Power Digital Temperature Sensor with SMBUS/Two Wire \n"
+ ">>> 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 \n"
+ ">>> modify\n"
+ ">>> + * it under the terms of the GNU General Public License as \n"
+ ">>> 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, \n"
+ ">>> NULL ,\n"
+ ">>> + TMP103_TEMP_REG);\n"
+ ">>> +\n"
+ ">>> +static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, \n"
+ ">>> tmp103_show_temp,\n"
+ ">>> + tmp103_set_temp, TMP103_TLOW_REG);\n"
+ ">>> +\n"
+ ">>> +static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, \n"
+ ">>> 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 \n"
+ ">>> 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 : \n"
+ ">> ti,tmp103, but here only tmp103.\n"
+ ">>\n"
+ ">> Instead of using the i2c_device_id struct , use of_device_id struct \n"
+ ">> for giving the\n"
+ ">> compatible property value.\n"
+ ">> compatble = \"<manufacturer>,<model>\"\n"
+ ">\n"
+ "> There are a lot of drivers in drivers/hwmon which use \"i2c_device_id \n"
+ "> struct\",\n"
+ "> and for them only \"model\" is necessary ...\n"
+ ">\n"
+ "> As this is not a platform driver, I do not know, if \"of_device_id struct\"\n"
+ "> is possible to use. For that, it must be converted to a platform\n"
+ "> device driver ...\n"
+ ">\n"
+ "I thought your are using the devicetree source to load the driver. In \n"
+ "that case it need not to be platform driver.\n"
+ "we can use \"of_device_id struct\" which matches the bindings in your \n"
+ "trivial-devices.txt\n"
+ "\n"
+ "Thanks\n"
+ "Varka Bhadram\n"
+ "> bye,\n"
+ "> Heiko\n"
+ ">>\n"
+ ">>> +MODULE_DEVICE_TABLE(i2c, tmp103_id);\n"
+ ">>> ++static struct i2c_driver tmp103_driver = {\n"
+ ">>> + .driver = {\n"
+ ">>> + .name = \"tmp103\",\n"
+ ">>> + .pm = TMP103_DEV_PM_OPS,\n"
+ ">>> + },\n"
+ ">>> + .probe = tmp103_probe,\n"
+ ">>> + .id_table = tmp103_id,\n"
+ ">>> +};\n"
+ ">>> +\n"
+ ">>> +module_i2c_driver(tmp103_driver);\n"
+ ">>> +\n"
+ ">>> +MODULE_AUTHOR(\"Heiko Schocher <hs@denx.de>\");\n"
+ ">>> +MODULE_DESCRIPTION(\"Texas Instruments TMP103 temperature sensor \n"
+ ">>> driver\");\n"
+ ">>> +MODULE_LICENSE(\"GPL\");\n"
+ ">>\n"
+ ">>\n"
+ ">>\n"
+ >
 
-a31a3b2feed4da2f89ddcb0fd4ba003be2b737bc49f016ce8472ddad60e00bcb
+a8e88671a6fc3eba42645c56dfe6789fdc4de286bd4319a71d1e6f0bc2f98d81

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.