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

diff --git a/a/1.txt b/N1/1.txt
index 151c06b..777f310 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,233 +1,368 @@
-T24gMDYvMTgvMjAxNCAxMTo0MiBBTSwgR3VlbnRlciBSb2VjayB3cm90ZToKPiBPbiAwNi8xNy8y
-MDE0IDEwOjQ2IFBNLCBWYXJrYSBCaGFkcmFtIHdyb3RlOgo+PiBIaSwKPj4KPj4gT24gMDYvMTgv
-MjAxNCAxMTowNyBBTSwgSGVpa28gU2Nob2NoZXIgd3JvdGU6Cj4+PiBEcml2ZXIgZm9yIHRoZSBU
-SSBUTVAxMDMuCj4+Pgo+Pj4gVGhlIFRJIFRNUDEwMyBpcyBzaW1pbGFyIHRvIHRoZSBUTVAxMDIu
-ICBJdCBkaWZmZXJzIGZyb20gdGhlIFRNUDEwMgo+Pj4gYnkgaGF2aW5nIG9ubHkgOCBiaXQgcmVn
-aXN0ZXJzLgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IEhlaWtvIFNjaG9jaGVyIDxoc0BkZW54LmRl
-Pgo+Pj4KPj4+IC0tLQo+Pj4KPj4+IENjOiBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9y
-Zz4KPj4+IENjOiBHdWVudGVyIFJvZWNrIDxsaW51eEByb2Vjay11cy5uZXQ+Cj4+PiBDYzogbGlu
-dXgta2VybmVsQHZnZXIua2VybmVsLm9yZwo+Pj4gQ2M6IGRldmljZXRyZWVAdmdlci5rZXJuZWwu
-b3JnCj4+PiBDYzogbGludXgtZG9jQHZnZXIua2VybmVsLm9yZwo+Pj4gQ2M6IE1hcmsgUnV0bGFu
-ZCA8bWFyay5ydXRsYW5kQGFybS5jb20+Cj4+Pgo+Pj4gLSBjaGFuZ2UgZm9yIHYyOgo+Pj4gICAg
-LSBhZGQgY29tbWVudHMgZnJvbSBHdWVudGVyUm9lY2s6Cj4+PiAgICAgIC0gcmVtb3ZlIENjIGZy
-b20gY29tbWl0IHN1YmplY3QKPj4+ICAgICAgLSBhZGQgZGV2aWNldHJlZSBtYWludGFpbmVyCj4+
-PiAgICAgIC0gbW92ZSBEb2N1bWVudGF0aW9uIHRvIERvY3VtZW50YXRpb24vaHdtb24vdG1wMTAz
-Cj4+PiAgICAgIC0gcmVtb3ZlIGRldmljZXRyZWUgYmluZGluZ3MgZnJvbSBEb2N1bWVudGF0aW9u
-Cj4+PiAgICAgIC0gYWRkIGNvbXBhdGlibGUgc3RyaW5nIHRvCj4+PiAiRG9jdW1lbnRhdGlvbi9k
-ZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy90cml2aWFsLWRldmljZXMudHh0Igo+Pj4gICAgICAtIHJl
-bW92ZSBDYW1lbENhc2UKPj4+ICAgICAgLSBmaXggQ29kaW5nc3R5bGUgaXNzdWVzCj4+PiAgICAg
-IC0gdXNlIEFUVFJJQlVURV9HUk9VUFMgYW5kIAo+Pj4gZGV2bV9od21vbl9kZXZpY2VfcmVnaXN0
-ZXJfd2l0aF9ncm91cHMoKQo+Pj4gICAgICAtIHJlbW92ZSB1bnN1c2VkIGRlZmluZSBUTVAxMDNf
-Q09ORklHX1JEX09OTFkKPj4+ICAgICAgLSByZXN0b3JlIGNvbmZpZyByZWdpc3RlciB3aGVuIGV4
-aXQoKQo+Pj4gICAgICAtIHVzZSByZWdtYXAKPj4+IC0gY2hhbmdlcyBmb3IgdjM6Cj4+PiAgICBh
-Z2FpbiBhIGxvdCBvZiBmYW50YXN0aWMgdGlwcyBob3cgdG8gdXNlIHJlZ21hcCBlZmZpY2llbnRs
-eQo+Pj4gICAgZnJvbSBHdWVudGVyIFJvZWNrOgo+Pj4gICAgLSBnZXQgcmlkIG9mICJzdHJ1Y3Qg
-dG1wMTAzIgo+Pj4gICAgLSBnZXQgcmlkIG9mICJzdGF0aWMgY29uc3QgdTggdG1wMTAzX3JlZ1td
-Igo+Pj4gICAgLSBnZXQgcmlkIG9mIG11dGV4IGxvY2sKPj4+ICAgIC0gZHJvcCBjb25maWdfb3Jp
-ZyBlbnRpcmVseQo+Pj4gICAgLSB1c2UgcmVnbWFwX3VwZGF0ZV9iaXRzKCkKPj4+IC0gY2hhbmdl
-cyBmb3IgdjQ6Cj4+PiAgICAtIGFkZCBjb21tZW50IGZyb20gR3VlbnRlciBSb2VjazoKPj4+ICAg
-ICAgZGVmaW5lIFRNUDEwM19DT05GSUdfTUFTSyBhbmQgVE1QMTAzX0NPTkZfU0RfTUFTSwo+Pj4g
-ICAgICBzZXBhcmF0ZWx5IHRvIGVuc3VyZSB5b3UgY2F0Y2ggYWxsIHRoZSB0by1iZS1jbGVhcmVk
-IGJpdHMuCj4+PiAtIGNoYW5nZXMgZm9yIHY1Ogo+Pj4gICAgYWRkIGNvbW1lbnQgZnJvbSBHdWVu
-dGVyIFJvZWNrOgo+Pj4gICAgLSB1c2UgIiNkZWZpbmUgVE1QMTAzX0NPTkZfU0QgVE1QMTAzX0NP
-TkZfTTEiCj4+PiAgICBhZGQgY29tbWVudCBmcm9tIE1hcmsgUnV0bGFuZDoKPj4+ICAgIC0gdXNl
-IGZ1bGwgc3RyaW5nIGZvciBEVCBjb21wYXRpYmxlIHN0cmluZyBtYXRjaGluZywgaW5zdGVhZCBv
-Zgo+Pj4gICAgICBEUklWRVJfTkFNRS4gR2V0IHJpZCBjb21wbGV0ZSBvZiBEUklWRVJfTkFNRSBk
-ZWZpbmUuCj4+Pgo+Pj4gICAuLi4vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvdHJpdmlhbC1kZXZp
-Y2VzLnR4dCAgICB8ICAgMSArCj4+PiAgIERvY3VtZW50YXRpb24vaHdtb24vdG1wMTAzICAgICAg
-ICAgICAgICAgICAgICAgICAgIHwgIDI4ICsrKwo+Pj4gICBkcml2ZXJzL2h3bW9uL0tjb25maWcg
-ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMCArCj4+PiAgIGRyaXZlcnMvaHdtb24v
-TWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKPj4+ICAgZHJpdmVy
-cy9od21vbi90bXAxMDMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMDUgCj4+PiAr
-KysrKysrKysrKysrKysrKysrKysKPj4+ICAgNSBmaWxlcyBjaGFuZ2VkLCAyNDUgaW5zZXJ0aW9u
-cygrKQo+Pj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9od21vbi90bXAxMDMK
-Pj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvaHdtb24vdG1wMTAzLmMKPj4+Cj4+PiBk
-aWZmIC0tZ2l0IAo+Pj4gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL3Ry
-aXZpYWwtZGV2aWNlcy50eHQgCj4+PiBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5n
-cy9pMmMvdHJpdmlhbC1kZXZpY2VzLnR4dAo+Pj4gaW5kZXggYmVmODZlNS4uZmM5NDRlMCAxMDA2
-NDQKPj4+IC0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvdHJpdmlh
-bC1kZXZpY2VzLnR4dAo+Pj4gKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdz
-L2kyYy90cml2aWFsLWRldmljZXMudHh0Cj4+PiBAQCAtODMsNSArODMsNiBAQCBzdG0sbTQxdDgw
-ICAgICAgICBNNDFUODAgLSBTRVJJQUwgQUNDRVNTIFJUQyBXSVRIIAo+Pj4gQUxBUk1TCj4+PiAg
-IHRhb3MsdHNsMjU1MCAgICAgICAgQW1iaWVudCBMaWdodCBTZW5zb3Igd2l0aCBTTUJVUy9Ud28g
-V2lyZSAKPj4+IFNlcmlhbCBJbnRlcmZhY2UKPj4+ICAgdGksdHNjMjAwMyAgICAgICAgSTJDIFRv
-dWNoLVNjcmVlbiBDb250cm9sbGVyCj4+PiAgIHRpLHRtcDEwMiAgICAgICAgTG93IFBvd2VyIERp
-Z2l0YWwgVGVtcGVyYXR1cmUgU2Vuc29yIHdpdGggCj4+PiBTTUJVUy9Ud28gV2lyZSBTZXJpYWwg
-SW50ZXJmYWNlCj4+PiArdGksdG1wMTAzICAgICAgICBMb3cgUG93ZXIgRGlnaXRhbCBUZW1wZXJh
-dHVyZSBTZW5zb3Igd2l0aCAKPj4+IFNNQlVTL1R3byBXaXJlIFNlcmlhbCBJbnRlcmZhY2UKTWF5
-IGkga25vdyBhYm91dCB0aGlzIGJpbmRpbmcgY29tcGF0aWJsZSBwcm9wZXJ0eSA/Cj4+PiAgIHRp
-LHRtcDI3NSAgICAgICAgRGlnaXRhbCBUZW1wZXJhdHVyZSBTZW5zb3IKPj4+ICAgd2luYm9uZCx3
-cGN0MzAxICAgICAgICBpMmMgdHJ1c3RlZCBwbGF0Zm9ybSBtb2R1bGUgKFRQTSkKPj4+IGRpZmYg
-LS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3RtcDEwMyBiL0RvY3VtZW50YXRpb24vaHdtb24v
-dG1wMTAzCj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4gaW5kZXggMDAwMDAwMC4uZWMwMGEx
-NQo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi90bXAxMDMK
-Pj4+IEBAIC0wLDAgKzEsMjggQEAKPj4+ICtLZXJuZWwgZHJpdmVyIHRtcDEwMwo+Pj4gKz09PT09
-PT09PT09PT09PT09PT09Cj4+PiArCj4+PiArU3VwcG9ydGVkIGNoaXBzOgo+Pj4gKyAgKiBUZXhh
-cyBJbnN0cnVtZW50cyBUTVAxMDMKPj4+ICsgICAgUHJlZml4OiAndG1wMTAzJwo+Pj4gKyAgICBB
-ZGRyZXNzZXMgc2Nhbm5lZDogbm9uZQo+Pj4gKyAgICBQcm9kdWN0IGluZm8gYW5kIGRhdGFzaGVl
-dDogaHR0cDovL3d3dy50aS5jb20vcHJvZHVjdC90bXAxMDMKPj4+ICsKPj4+ICtBdXRob3I6Cj4+
-PiArICAgIEhlaWtvIFNjaG9jaGVyIDxoc0BkZW54LmRlPgo+Pj4gKwo+Pj4gK0Rlc2NyaXB0aW9u
-Cj4+PiArLS0tLS0tLS0tLS0KPj4+ICsKPj4+ICtUaGUgVE1QMTAzIGlzIGEgZGlnaXRhbCBvdXRw
-dXQgdGVtcGVyYXR1cmUgc2Vuc29yIGluIGEgZm91ci1iYWxsCj4+PiArd2FmZXIgY2hpcC1zY2Fs
-ZSBwYWNrYWdlIChXQ1NQKS4gVGhlIFRNUDEwMyBpcyBjYXBhYmxlIG9mIHJlYWRpbmcKPj4+ICt0
-ZW1wZXJhdHVyZXMgdG8gYSByZXNvbHV0aW9uIG9mIDHCsEMuIFRoZSBUTVAxMDMgaXMgc3BlY2lm
-aWVkIGZvcgo+Pj4gK29wZXJhdGlvbiBvdmVyIGEgdGVtcGVyYXR1cmUgcmFuZ2Ugb2Yg4oCTNDDC
-sEMgdG8gKzEyNcKwQy4KPj4+ICsKPj4+ICtSZXNvbHV0aW9uOiA4IEJpdHMKPj4+ICtBY2N1cmFj
-eTogwrExwrBDIFR5cCAo4oCTMTDCsEMgdG8gKzEwMMKwQykKPj4+ICsKPj4+ICtUaGUgZHJpdmVy
-IHByb3ZpZGVzIHRoZSBjb21tb24gc3lzZnMtaW50ZXJmYWNlIGZvciB0ZW1wZXJhdHVyZXMgKHNl
-ZQo+Pj4gK0RvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlIHVuZGVyIFRlbXBlcmF0
-dXJlcykuCj4+PiArCj4+PiArUGxlYXNlIHJlZmVyIGhvdyB0byBpbnN0YW50aWF0ZSB0aGlzIGRy
-aXZlcjoKPj4+ICtEb2N1bWVudGF0aW9uL2kyYy9pbnN0YW50aWF0aW5nLWRldmljZXMKPj4+IGRp
-ZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcK
-Pj4+IGluZGV4IDA4NTMxYTEuLmM4ODJkNGIgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2h3bW9u
-L0tjb25maWcKPj4+ICsrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwo+Pj4gQEAgLTEzOTEsNiAr
-MTM5MSwxNiBAQCBjb25maWcgU0VOU09SU19UTVAxMDIKPj4+ICAgICAgICAgVGhpcyBkcml2ZXIg
-Y2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQo+Pj4gICAg
-ICAgICB3aWxsIGJlIGNhbGxlZCB0bXAxMDIuCj4+PiArY29uZmlnIFNFTlNPUlNfVE1QMTAzCj4+
-PiArICAgIHRyaXN0YXRlICJUZXhhcyBJbnN0cnVtZW50cyBUTVAxMDMiCj4+PiArICAgIGRlcGVu
-ZHMgb24gSTJDCj4+PiArICAgIGhlbHAKPj4+ICsgICAgICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlv
-dSBnZXQgc3VwcG9ydCBmb3IgVGV4YXMgSW5zdHJ1bWVudHMgVE1QMTAzCj4+PiArICAgICAgc2Vu
-c29yIGNoaXBzLgo+Pj4gKwo+Pj4gKyAgICAgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0
-IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKPj4+ICsgICAgICB3aWxsIGJlIGNhbGxl
-ZCB0bXAxMDMuCj4+PiArCj4+PiAgIGNvbmZpZyBTRU5TT1JTX1RNUDQwMQo+Pj4gICAgICAgdHJp
-c3RhdGUgIlRleGFzIEluc3RydW1lbnRzIFRNUDQwMSBhbmQgY29tcGF0aWJsZXMiCj4+PiAgICAg
-ICBkZXBlbmRzIG9uIEkyQwo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUg
-Yi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCj4+PiBpbmRleCAzZGMwZjAyLi5jYzBkZjFlZiAxMDA2
-NDQKPj4+IC0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKPj4+ICsrKyBiL2RyaXZlcnMvaHdt
-b24vTWFrZWZpbGUKPj4+IEBAIC0xMzUsNiArMTM1LDcgQEAgb2JqLSQoQ09ORklHX1NFTlNPUlNf
-U01TQzQ3TTE5MikrPSBzbXNjNDdtMTkyLm8KPj4+ICAgb2JqLSQoQ09ORklHX1NFTlNPUlNfQU1D
-NjgyMSkgICAgKz0gYW1jNjgyMS5vCj4+PiAgIG9iai0kKENPTkZJR19TRU5TT1JTX1RITUM1MCkg
-ICAgKz0gdGhtYzUwLm8KPj4+ICAgb2JqLSQoQ09ORklHX1NFTlNPUlNfVE1QMTAyKSAgICArPSB0
-bXAxMDIubwo+Pj4gK29iai0kKENPTkZJR19TRU5TT1JTX1RNUDEwMykgICAgKz0gdG1wMTAzLm8K
-Pj4+ICAgb2JqLSQoQ09ORklHX1NFTlNPUlNfVE1QNDAxKSAgICArPSB0bXA0MDEubwo+Pj4gICBv
-YmotJChDT05GSUdfU0VOU09SU19UTVA0MjEpICAgICs9IHRtcDQyMS5vCj4+PiAgIG9iai0kKENP
-TkZJR19TRU5TT1JTX1RXTDQwMzBfTUFEQykrPSB0d2w0MDMwLW1hZGMtaHdtb24ubwo+Pj4gZGlm
-ZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdG1wMTAzLmMgYi9kcml2ZXJzL2h3bW9uL3RtcDEwMy5j
-Cj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4gaW5kZXggMDAwMDAwMC4uZTY5ZGJjYQo+Pj4g
-LS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvZHJpdmVycy9od21vbi90bXAxMDMuYwo+Pj4gQEAgLTAs
-MCArMSwyMDUgQEAKPj4+ICsvKgo+Pj4gKyAqIFRleGFzIEluc3RydW1lbnRzIFRNUDEwMyBTTUJ1
-cyB0ZW1wZXJhdHVyZSBzZW5zb3IgZHJpdmVyCj4+PiArICogQ29weXJpZ2h0IChDKSAyMDE0IEhl
-aWtvIFNjaG9jaGVyIDxoc0BkZW54LmRlPgo+Pj4gKyAqCj4+PiArICogQmFzZWQgb246Cj4+PiAr
-ICogVGV4YXMgSW5zdHJ1bWVudHMgVE1QMTAyIFNNQnVzIHRlbXBlcmF0dXJlIHNlbnNvciBkcml2
-ZXIKPj4+ICsgKgo+Pj4gKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGV2ZW4gS2luZyA8c2ZraW5n
-QGZkd2RjLmNvbT4KPj4+ICsgKgo+Pj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl
-OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCj4+PiBtb2RpZnkKPj4+ICsgKiBpdCB1
-bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAo+Pj4g
-cHVibGlzaGVkIGJ5Cj4+PiArICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
-IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPj4+ICsgKiAoYXQgeW91ciBvcHRpb24pIGFu
-eSBsYXRlciB2ZXJzaW9uLgo+Pj4gKyAqCj4+PiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
-dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+PiArICogYnV0IFdJVEhP
-VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4+
-ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
-ICBTZWUgdGhlCj4+PiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
-YWlscy4KPj4+ICsgKgo+Pj4gKyAqLwo+Pj4gKwo+Pj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu
-aD4KPj4+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9zbGFi
-Lmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9od21v
-bi5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgo+Pj4gKyNpbmNsdWRlIDxs
-aW51eC9lcnIuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KPj4+ICsjaW5jbHVkZSA8
-bGludXgvZGV2aWNlLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KPj4+ICsjaW5j
-bHVkZSA8bGludXgvcmVnbWFwLmg+Cj4+PiArCj4+PiArI2RlZmluZSBUTVAxMDNfVEVNUF9SRUcg
-ICAgICAgIDB4MDAKPj4+ICsjZGVmaW5lIFRNUDEwM19DT05GX1JFRyAgICAgICAgMHgwMQo+Pj4g
-KyNkZWZpbmUgVE1QMTAzX1RMT1dfUkVHICAgICAgICAweDAyCj4+PiArI2RlZmluZSBUTVAxMDNf
-VEhJR0hfUkVHICAgIDB4MDMKPj4+ICsKPj4+ICsjZGVmaW5lIFRNUDEwM19DT05GX00wICAgICAg
-ICAweDAxCj4+PiArI2RlZmluZSBUTVAxMDNfQ09ORl9NMSAgICAgICAgMHgwMgo+Pj4gKyNkZWZp
-bmUgVE1QMTAzX0NPTkZfTEMgICAgICAgIDB4MDQKPj4+ICsjZGVmaW5lIFRNUDEwM19DT05GX0ZM
-ICAgICAgICAweDA4Cj4+PiArI2RlZmluZSBUTVAxMDNfQ09ORl9GSCAgICAgICAgMHgxMAo+Pj4g
-KyNkZWZpbmUgVE1QMTAzX0NPTkZfQ1IwICAgICAgICAweDIwCj4+PiArI2RlZmluZSBUTVAxMDNf
-Q09ORl9DUjEgICAgICAgIDB4NDAKPj4+ICsjZGVmaW5lIFRNUDEwM19DT05GX0lEICAgICAgICAw
-eDgwCj4+PiArI2RlZmluZSBUTVAxMDNfQ09ORl9TRCAgICAgICAgKFRNUDEwM19DT05GX00xKQo+
-Pj4gKyNkZWZpbmUgVE1QMTAzX0NPTkZfU0RfTUFTSyAgICAoVE1QMTAzX0NPTkZfTTAgfCBUTVAx
-MDNfQ09ORl9NMSkKPj4+ICsKPj4+ICsjZGVmaW5lIFRNUDEwM19DT05GSUcgICAgICAgIChUTVAx
-MDNfQ09ORl9DUjEgfCBUTVAxMDNfQ09ORl9NMSkKPj4+ICsjZGVmaW5lIFRNUDEwM19DT05GSUdf
-TUFTSyAgICAoVE1QMTAzX0NPTkZfQ1IwIHwgVE1QMTAzX0NPTkZfQ1IxIHwgXAo+Pj4gKyAgICAg
-ICAgICAgICAgICAgVE1QMTAzX0NPTkZfTTAgfCBUTVAxMDNfQ09ORl9NMSkKPj4+ICsKPj4+ICtz
-dGF0aWMgaW5saW5lIGludCB0bXAxMDNfcmVnX3RvX21jKHM4IHZhbCkKPj4+ICt7Cj4+PiArICAg
-IHJldHVybiB2YWwgKiAxMDAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIHU4IHRt
-cDEwM19tY190b19yZWcoaW50IHZhbCkKPj4+ICt7Cj4+PiArICAgIHJldHVybiBESVZfUk9VTkRf
-Q0xPU0VTVCh2YWwsIDEwMDApOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgc3NpemVfdCB0bXAx
-MDNfc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKPj4+ICsgICAgICAgICAgICAgICAgc3Ry
-dWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4+PiArICAgICAgICAgICAgICAgIGNoYXIgKmJ1
-ZikKPj4+ICt7Cj4+PiArICAgIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2RhID0g
-dG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOwo+Pj4gKyAgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXAg
-PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPj4+ICsgICAgdW5zaWduZWQgaW50IHJlZ3ZhbDsKPj4+
-ICsgICAgaW50IHJldDsKPj4+ICsKPj4+ICsgICAgcmV0ID0gcmVnbWFwX3JlYWQocmVnbWFwLCBz
-ZGEtPmluZGV4LCAmcmVndmFsKTsKPj4+ICsgICAgaWYgKHJldCA8IDApCj4+PiArICAgICAgICBy
-ZXR1cm4gcmV0Owo+Pj4gKwo+Pj4gKyAgICByZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdG1w
-MTAzX3JlZ190b19tYyhyZWd2YWwpKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHNzaXplX3Qg
-dG1wMTAzX3NldF90ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKPj4+ICsgICAgICAgICAgICAgICAg
-ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4+PiArICAgICAgICAgICAgICAgICAg
-IGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQo+Pj4gK3sKPj4+ICsgICAgc3RydWN0IHNl
-bnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZGEgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7Cj4+
-PiArICAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+Pj4g
-KyAgICBsb25nIHZhbDsKPj4+ICsgICAgaW50IHJldDsKPj4+ICsKPj4+ICsgICAgaWYgKGtzdHJ0
-b2woYnVmLCAxMCwgJnZhbCkgPCAwKQo+Pj4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+PiAr
-Cj4+PiArICAgIHZhbCA9IGNsYW1wX3ZhbCh2YWwsIC01NTAwMCwgMTI3MDAwKTsKPj4+ICsgICAg
-cmV0ID0gcmVnbWFwX3dyaXRlKHJlZ21hcCwgc2RhLT5pbmRleCwgdG1wMTAzX21jX3RvX3JlZyh2
-YWwpKTsKPj4+ICsgICAgcmV0dXJuIHJldCA/IHJldCA6IGNvdW50Owo+Pj4gK30KPj4+ICsKPj4+
-ICtzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCB0bXAxMDNf
-c2hvd190ZW1wLCAKPj4+IE5VTEwgLAo+Pj4gKyAgICAgICAgICAgICAgVE1QMTAzX1RFTVBfUkVH
-KTsKPj4+ICsKPj4+ICtzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21pbiwgU19JV1VT
-UiB8IFNfSVJVR08sIAo+Pj4gdG1wMTAzX3Nob3dfdGVtcCwKPj4+ICsgICAgICAgICAgICAgIHRt
-cDEwM19zZXRfdGVtcCwgVE1QMTAzX1RMT1dfUkVHKTsKPj4+ICsKPj4+ICtzdGF0aWMgU0VOU09S
-X0RFVklDRV9BVFRSKHRlbXAxX21heCwgU19JV1VTUiB8IFNfSVJVR08sIAo+Pj4gdG1wMTAzX3No
-b3dfdGVtcCwKPj4+ICsgICAgICAgICAgICAgIHRtcDEwM19zZXRfdGVtcCwgVE1QMTAzX1RISUdI
-X1JFRyk7Cj4+PiArCj4+PiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRtcDEwM19hdHRyc1td
-ID0gewo+Pj4gKyAgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIs
-Cj4+PiArICAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWluLmRldl9hdHRyLmF0dHIsCj4+PiAr
-ICAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyLmF0dHIsCj4+PiArICAgIE5V
-TEwKPj4+ICt9Owo+Pj4gK0FUVFJJQlVURV9HUk9VUFModG1wMTAzKTsKPj4+ICsKPj4+ICtzdGF0
-aWMgYm9vbCB0bXAxMDNfcmVnbWFwX2lzX3ZvbGF0aWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5z
-aWduZWQgCj4+PiBpbnQgcmVnKQo+Pj4gK3sKPj4+ICsgICAgcmV0dXJuIHJlZyA9PSBUTVAxMDNf
-VEVNUF9SRUc7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyB0
-bXAxMDNfcmVnbWFwX2NvbmZpZyA9IHsKPj4+ICsgICAgLnJlZ19iaXRzID0gOCwKPj4+ICsgICAg
-LnZhbF9iaXRzID0gOCwKPj4+ICsgICAgLm1heF9yZWdpc3RlciA9IFRNUDEwM19USElHSF9SRUcs
-Cj4+PiArICAgIC52b2xhdGlsZV9yZWcgPSB0bXAxMDNfcmVnbWFwX2lzX3ZvbGF0aWxlLAo+Pj4g
-K307Cj4+PiArCj4+PiArc3RhdGljIGludCB0bXAxMDNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQg
-KmNsaWVudCwKPj4+ICsgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQp
-Cj4+PiArewo+Pj4gKyAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7Cj4+PiAr
-ICAgIHN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKPj4+ICsgICAgc3RydWN0IHJlZ21hcCAqcmVn
-bWFwOwo+Pj4gKyAgICBpbnQgcmV0Owo+Pj4gKwo+Pj4gKyAgICBpZiAoIWkyY19jaGVja19mdW5j
-dGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKPj4+ICsgICAgICAgICAgICAgICAgICAgICBJMkNf
-RlVOQ19TTUJVU19CWVRFX0RBVEEpKSB7Cj4+PiArICAgICAgICBkZXZfZXJyKCZjbGllbnQtPmRl
-diwKPj4+ICsgICAgICAgICAgICAiYWRhcHRlciBkb2Vzbid0IHN1cHBvcnQgU01CdXMgYnl0ZSB0
-cmFuc2FjdGlvbnNcbiIpOwo+Pj4gKyAgICAgICAgcmV0dXJuIC1FTk9ERVY7Cj4+PiArICAgIH0K
-Pj4+ICsKPj4+ICsgICAgcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCAmdG1w
-MTAzX3JlZ21hcF9jb25maWcpOwo+Pj4gKyAgICBpZiAoSVNfRVJSKHJlZ21hcCkpIHsKPj4+ICsg
-ICAgICAgIGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHJlZ2lzdGVyIG1hcFxuIik7
-Cj4+PiArICAgICAgICByZXR1cm4gUFRSX0VSUihyZWdtYXApOwo+Pj4gKyAgICB9Cj4+PiArCj4+
-PiArICAgIHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIFRNUDEwM19DT05GX1JFRywg
-Cj4+PiBUTVAxMDNfQ09ORklHX01BU0ssCj4+PiArICAgICAgICAgICAgICAgICBUTVAxMDNfQ09O
-RklHKTsKPj4+ICsgICAgaWYgKHJldCA8IDApIHsKPj4+ICsgICAgICAgIGRldl9lcnIoJmNsaWVu
-dC0+ZGV2LCAiZXJyb3Igd3JpdGluZyBjb25maWcgcmVnaXN0ZXJcbiIpOwo+Pj4gKyAgICAgICAg
-cmV0dXJuIHJldDsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICBod21vbl9kZXYgPSBod21vbl9k
-ZXZpY2VfcmVnaXN0ZXJfd2l0aF9ncm91cHMoZGV2LCBjbGllbnQtPm5hbWUsCj4+PiArICAgICAg
-ICAgICAgICAgICAgICAgICAgICAgICAgcmVnbWFwLCB0bXAxMDNfZ3JvdXBzKTsKPj4+ICsgICAg
-cmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhod21vbl9kZXYpOwo+Pj4gK30KPj4+ICsKPj4+ICsjaWZk
-ZWYgQ09ORklHX1BNCj4+PiArc3RhdGljIGludCB0bXAxMDNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNl
-ICpkZXYpCj4+PiArewo+Pj4gKyAgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBkZXZfZ2V0X2Ry
-dmRhdGEoZGV2KTsKPj4+ICsKPj4+ICsgICAgcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhyZWdt
-YXAsIFRNUDEwM19DT05GX1JFRywKPj4+ICsgICAgICAgICAgICAgICAgICBUTVAxMDNfQ09ORl9T
-RF9NQVNLLCAwKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCB0bXAxMDNfcmVzdW1lKHN0
-cnVjdCBkZXZpY2UgKmRldikKPj4+ICt7Cj4+PiArICAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcCA9
-IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+Pj4gKwo+Pj4gKyAgICByZXR1cm4gcmVnbWFwX3VwZGF0
-ZV9iaXRzKHJlZ21hcCwgVE1QMTAzX0NPTkZfUkVHLAo+Pj4gKyAgICAgICAgICAgICAgICAgIFRN
-UDEwM19DT05GX1NEX01BU0ssIFRNUDEwM19DT05GX1NEKTsKPj4+ICt9Cj4+PiArCj4+PiArc3Rh
-dGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHRtcDEwM19kZXZfcG1fb3BzID0gewo+Pj4gKyAg
-ICAuc3VzcGVuZCAgICA9IHRtcDEwM19zdXNwZW5kLAo+Pj4gKyAgICAucmVzdW1lICAgICAgICA9
-IHRtcDEwM19yZXN1bWUsCj4+PiArfTsKPj4+ICsKPj4+ICsjZGVmaW5lIFRNUDEwM19ERVZfUE1f
-T1BTICgmdG1wMTAzX2Rldl9wbV9vcHMpCj4+PiArI2Vsc2UKPj4+ICsjZGVmaW5lICAgIFRNUDEw
-M19ERVZfUE1fT1BTIE5VTEwKPj4+ICsjZW5kaWYgLyogQ09ORklHX1BNICovCj4+PiArCj4+PiAr
-c3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRtcDEwM19pZFtdID0gewo+Pj4gKyAg
-ICB7ICJ0bXAxMDMiLCAwIH0sCj4+PiArICAgIHsgfQo+Pj4gK307Cj4+Cj4+IEluIHRoZSBiaW5k
-aW5ncyB5b3UgYXJlIGdpdmluZyB0aGUgY29tcGF0aWJsZSBwcm9wZXJ0eSBhcyA6IAo+PiB0aSx0
-bXAxMDMsIGJ1dCBoZXJlIG9ubHkgdG1wMTAzLgo+Pgo+PiBJbnN0ZWFkIG9mIHVzaW5nIHRoZSBp
-MmNfZGV2aWNlX2lkIHN0cnVjdCAsIHVzZSBvZl9kZXZpY2VfaWQgc3RydWN0IAo+PiBmb3IgZ2l2
-aW5nIHRoZQo+PiBjb21wYXRpYmxlIHByb3BlcnR5IHZhbHVlLgo+PiBjb21wYXRibGUgPSAiPG1h
-bnVmYWN0dXJlcj4sPG1vZGVsPiIKPj4KPgo+IE5vLiBXZSBkb24ndCBkbyB0aGF0IGZvciBvdGhl
-ciBpMmMgZHJpdmVycywgYW5kIHRoZSBpMmMgc3Vic3lzdGVtIGhhbmRsZXMKPiB0aGlzIGNhc2Us
-IHNvIGl0IGRvZXMgbm90IHNlbnNlIHRvIHN0YXJ0IHRoYXQgd2l0aCB0aGlzIGRyaXZlciBqdXN0
-Cj4gZm9yIHRoZSBzYWtlIG9mIG1ha2luZyB0aGUgY29kZSBtb3JlIGNvbXBsaWNhdGVkIHRoYW4g
-aXQgaGFzIHRvIGJlLgo+Cj4gVGhhbmtzLAo+IEd1ZW50ZXIKPgoKCl9fX19fX19fX19fX19fX19f
-X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxtLXNlbnNvcnMgbWFpbGluZyBsaXN0Cmxt
-LXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKaHR0cDovL2xpc3RzLmxtLXNlbnNvcnMub3JnL21haWxt
-YW4vbGlzdGluZm8vbG0tc2Vuc29ycw=
+On 06/18/2014 11:42 AM, Guenter Roeck wrote:
+> 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
+May i know about this binding compatible property ?
+>>>   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 29ff666..6b50266 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -2,8 +2,8 @@
  "ref\053A127BB.7090802@gmail.com\0"
  "ref\053A12DBB.50704@roeck-us.net\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 06:30:31 +0000\0"
+ "Subject\0Re: [PATCH v5] hwmon: Driver for TI TMP103 temperature sensor\0"
+ "Date\0Wed, 18 Jun 2014 11:48:31 +0530\0"
  "To\0Guenter Roeck <linux@roeck-us.net>"
   Heiko Schocher <hs@denx.de>
  " lm-sensors@lm-sensors.org\0"
@@ -14,238 +14,373 @@
  " Mark Rutland <mark.rutland@arm.com>\0"
  "\00:1\0"
  "b\0"
- "T24gMDYvMTgvMjAxNCAxMTo0MiBBTSwgR3VlbnRlciBSb2VjayB3cm90ZToKPiBPbiAwNi8xNy8y\n"
- "MDE0IDEwOjQ2IFBNLCBWYXJrYSBCaGFkcmFtIHdyb3RlOgo+PiBIaSwKPj4KPj4gT24gMDYvMTgv\n"
- "MjAxNCAxMTowNyBBTSwgSGVpa28gU2Nob2NoZXIgd3JvdGU6Cj4+PiBEcml2ZXIgZm9yIHRoZSBU\n"
- "SSBUTVAxMDMuCj4+Pgo+Pj4gVGhlIFRJIFRNUDEwMyBpcyBzaW1pbGFyIHRvIHRoZSBUTVAxMDIu\n"
- "ICBJdCBkaWZmZXJzIGZyb20gdGhlIFRNUDEwMgo+Pj4gYnkgaGF2aW5nIG9ubHkgOCBiaXQgcmVn\n"
- "aXN0ZXJzLgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IEhlaWtvIFNjaG9jaGVyIDxoc0BkZW54LmRl\n"
- "Pgo+Pj4KPj4+IC0tLQo+Pj4KPj4+IENjOiBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9y\n"
- "Zz4KPj4+IENjOiBHdWVudGVyIFJvZWNrIDxsaW51eEByb2Vjay11cy5uZXQ+Cj4+PiBDYzogbGlu\n"
- "dXgta2VybmVsQHZnZXIua2VybmVsLm9yZwo+Pj4gQ2M6IGRldmljZXRyZWVAdmdlci5rZXJuZWwu\n"
- "b3JnCj4+PiBDYzogbGludXgtZG9jQHZnZXIua2VybmVsLm9yZwo+Pj4gQ2M6IE1hcmsgUnV0bGFu\n"
- "ZCA8bWFyay5ydXRsYW5kQGFybS5jb20+Cj4+Pgo+Pj4gLSBjaGFuZ2UgZm9yIHYyOgo+Pj4gICAg\n"
- "LSBhZGQgY29tbWVudHMgZnJvbSBHdWVudGVyUm9lY2s6Cj4+PiAgICAgIC0gcmVtb3ZlIENjIGZy\n"
- "b20gY29tbWl0IHN1YmplY3QKPj4+ICAgICAgLSBhZGQgZGV2aWNldHJlZSBtYWludGFpbmVyCj4+\n"
- "PiAgICAgIC0gbW92ZSBEb2N1bWVudGF0aW9uIHRvIERvY3VtZW50YXRpb24vaHdtb24vdG1wMTAz\n"
- "Cj4+PiAgICAgIC0gcmVtb3ZlIGRldmljZXRyZWUgYmluZGluZ3MgZnJvbSBEb2N1bWVudGF0aW9u\n"
- "Cj4+PiAgICAgIC0gYWRkIGNvbXBhdGlibGUgc3RyaW5nIHRvCj4+PiAiRG9jdW1lbnRhdGlvbi9k\n"
- "ZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy90cml2aWFsLWRldmljZXMudHh0Igo+Pj4gICAgICAtIHJl\n"
- "bW92ZSBDYW1lbENhc2UKPj4+ICAgICAgLSBmaXggQ29kaW5nc3R5bGUgaXNzdWVzCj4+PiAgICAg\n"
- "IC0gdXNlIEFUVFJJQlVURV9HUk9VUFMgYW5kIAo+Pj4gZGV2bV9od21vbl9kZXZpY2VfcmVnaXN0\n"
- "ZXJfd2l0aF9ncm91cHMoKQo+Pj4gICAgICAtIHJlbW92ZSB1bnN1c2VkIGRlZmluZSBUTVAxMDNf\n"
- "Q09ORklHX1JEX09OTFkKPj4+ICAgICAgLSByZXN0b3JlIGNvbmZpZyByZWdpc3RlciB3aGVuIGV4\n"
- "aXQoKQo+Pj4gICAgICAtIHVzZSByZWdtYXAKPj4+IC0gY2hhbmdlcyBmb3IgdjM6Cj4+PiAgICBh\n"
- "Z2FpbiBhIGxvdCBvZiBmYW50YXN0aWMgdGlwcyBob3cgdG8gdXNlIHJlZ21hcCBlZmZpY2llbnRs\n"
- "eQo+Pj4gICAgZnJvbSBHdWVudGVyIFJvZWNrOgo+Pj4gICAgLSBnZXQgcmlkIG9mICJzdHJ1Y3Qg\n"
- "dG1wMTAzIgo+Pj4gICAgLSBnZXQgcmlkIG9mICJzdGF0aWMgY29uc3QgdTggdG1wMTAzX3JlZ1td\n"
- "Igo+Pj4gICAgLSBnZXQgcmlkIG9mIG11dGV4IGxvY2sKPj4+ICAgIC0gZHJvcCBjb25maWdfb3Jp\n"
- "ZyBlbnRpcmVseQo+Pj4gICAgLSB1c2UgcmVnbWFwX3VwZGF0ZV9iaXRzKCkKPj4+IC0gY2hhbmdl\n"
- "cyBmb3IgdjQ6Cj4+PiAgICAtIGFkZCBjb21tZW50IGZyb20gR3VlbnRlciBSb2VjazoKPj4+ICAg\n"
- "ICAgZGVmaW5lIFRNUDEwM19DT05GSUdfTUFTSyBhbmQgVE1QMTAzX0NPTkZfU0RfTUFTSwo+Pj4g\n"
- "ICAgICBzZXBhcmF0ZWx5IHRvIGVuc3VyZSB5b3UgY2F0Y2ggYWxsIHRoZSB0by1iZS1jbGVhcmVk\n"
- "IGJpdHMuCj4+PiAtIGNoYW5nZXMgZm9yIHY1Ogo+Pj4gICAgYWRkIGNvbW1lbnQgZnJvbSBHdWVu\n"
- "dGVyIFJvZWNrOgo+Pj4gICAgLSB1c2UgIiNkZWZpbmUgVE1QMTAzX0NPTkZfU0QgVE1QMTAzX0NP\n"
- "TkZfTTEiCj4+PiAgICBhZGQgY29tbWVudCBmcm9tIE1hcmsgUnV0bGFuZDoKPj4+ICAgIC0gdXNl\n"
- "IGZ1bGwgc3RyaW5nIGZvciBEVCBjb21wYXRpYmxlIHN0cmluZyBtYXRjaGluZywgaW5zdGVhZCBv\n"
- "Zgo+Pj4gICAgICBEUklWRVJfTkFNRS4gR2V0IHJpZCBjb21wbGV0ZSBvZiBEUklWRVJfTkFNRSBk\n"
- "ZWZpbmUuCj4+Pgo+Pj4gICAuLi4vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvdHJpdmlhbC1kZXZp\n"
- "Y2VzLnR4dCAgICB8ICAgMSArCj4+PiAgIERvY3VtZW50YXRpb24vaHdtb24vdG1wMTAzICAgICAg\n"
- "ICAgICAgICAgICAgICAgICAgIHwgIDI4ICsrKwo+Pj4gICBkcml2ZXJzL2h3bW9uL0tjb25maWcg\n"
- "ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMCArCj4+PiAgIGRyaXZlcnMvaHdtb24v\n"
- "TWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKPj4+ICAgZHJpdmVy\n"
- "cy9od21vbi90bXAxMDMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMDUgCj4+PiAr\n"
- "KysrKysrKysrKysrKysrKysrKysKPj4+ICAgNSBmaWxlcyBjaGFuZ2VkLCAyNDUgaW5zZXJ0aW9u\n"
- "cygrKQo+Pj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9od21vbi90bXAxMDMK\n"
- "Pj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvaHdtb24vdG1wMTAzLmMKPj4+Cj4+PiBk\n"
- "aWZmIC0tZ2l0IAo+Pj4gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL3Ry\n"
- "aXZpYWwtZGV2aWNlcy50eHQgCj4+PiBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5n\n"
- "cy9pMmMvdHJpdmlhbC1kZXZpY2VzLnR4dAo+Pj4gaW5kZXggYmVmODZlNS4uZmM5NDRlMCAxMDA2\n"
- "NDQKPj4+IC0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvdHJpdmlh\n"
- "bC1kZXZpY2VzLnR4dAo+Pj4gKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdz\n"
- "L2kyYy90cml2aWFsLWRldmljZXMudHh0Cj4+PiBAQCAtODMsNSArODMsNiBAQCBzdG0sbTQxdDgw\n"
- "ICAgICAgICBNNDFUODAgLSBTRVJJQUwgQUNDRVNTIFJUQyBXSVRIIAo+Pj4gQUxBUk1TCj4+PiAg\n"
- "IHRhb3MsdHNsMjU1MCAgICAgICAgQW1iaWVudCBMaWdodCBTZW5zb3Igd2l0aCBTTUJVUy9Ud28g\n"
- "V2lyZSAKPj4+IFNlcmlhbCBJbnRlcmZhY2UKPj4+ICAgdGksdHNjMjAwMyAgICAgICAgSTJDIFRv\n"
- "dWNoLVNjcmVlbiBDb250cm9sbGVyCj4+PiAgIHRpLHRtcDEwMiAgICAgICAgTG93IFBvd2VyIERp\n"
- "Z2l0YWwgVGVtcGVyYXR1cmUgU2Vuc29yIHdpdGggCj4+PiBTTUJVUy9Ud28gV2lyZSBTZXJpYWwg\n"
- "SW50ZXJmYWNlCj4+PiArdGksdG1wMTAzICAgICAgICBMb3cgUG93ZXIgRGlnaXRhbCBUZW1wZXJh\n"
- "dHVyZSBTZW5zb3Igd2l0aCAKPj4+IFNNQlVTL1R3byBXaXJlIFNlcmlhbCBJbnRlcmZhY2UKTWF5\n"
- "IGkga25vdyBhYm91dCB0aGlzIGJpbmRpbmcgY29tcGF0aWJsZSBwcm9wZXJ0eSA/Cj4+PiAgIHRp\n"
- "LHRtcDI3NSAgICAgICAgRGlnaXRhbCBUZW1wZXJhdHVyZSBTZW5zb3IKPj4+ICAgd2luYm9uZCx3\n"
- "cGN0MzAxICAgICAgICBpMmMgdHJ1c3RlZCBwbGF0Zm9ybSBtb2R1bGUgKFRQTSkKPj4+IGRpZmYg\n"
- "LS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3RtcDEwMyBiL0RvY3VtZW50YXRpb24vaHdtb24v\n"
- "dG1wMTAzCj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4gaW5kZXggMDAwMDAwMC4uZWMwMGEx\n"
- "NQo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi90bXAxMDMK\n"
- "Pj4+IEBAIC0wLDAgKzEsMjggQEAKPj4+ICtLZXJuZWwgZHJpdmVyIHRtcDEwMwo+Pj4gKz09PT09\n"
- "PT09PT09PT09PT09PT09Cj4+PiArCj4+PiArU3VwcG9ydGVkIGNoaXBzOgo+Pj4gKyAgKiBUZXhh\n"
- "cyBJbnN0cnVtZW50cyBUTVAxMDMKPj4+ICsgICAgUHJlZml4OiAndG1wMTAzJwo+Pj4gKyAgICBB\n"
- "ZGRyZXNzZXMgc2Nhbm5lZDogbm9uZQo+Pj4gKyAgICBQcm9kdWN0IGluZm8gYW5kIGRhdGFzaGVl\n"
- "dDogaHR0cDovL3d3dy50aS5jb20vcHJvZHVjdC90bXAxMDMKPj4+ICsKPj4+ICtBdXRob3I6Cj4+\n"
- "PiArICAgIEhlaWtvIFNjaG9jaGVyIDxoc0BkZW54LmRlPgo+Pj4gKwo+Pj4gK0Rlc2NyaXB0aW9u\n"
- "Cj4+PiArLS0tLS0tLS0tLS0KPj4+ICsKPj4+ICtUaGUgVE1QMTAzIGlzIGEgZGlnaXRhbCBvdXRw\n"
- "dXQgdGVtcGVyYXR1cmUgc2Vuc29yIGluIGEgZm91ci1iYWxsCj4+PiArd2FmZXIgY2hpcC1zY2Fs\n"
- "ZSBwYWNrYWdlIChXQ1NQKS4gVGhlIFRNUDEwMyBpcyBjYXBhYmxlIG9mIHJlYWRpbmcKPj4+ICt0\n"
- "ZW1wZXJhdHVyZXMgdG8gYSByZXNvbHV0aW9uIG9mIDHCsEMuIFRoZSBUTVAxMDMgaXMgc3BlY2lm\n"
- "aWVkIGZvcgo+Pj4gK29wZXJhdGlvbiBvdmVyIGEgdGVtcGVyYXR1cmUgcmFuZ2Ugb2Yg4oCTNDDC\n"
- "sEMgdG8gKzEyNcKwQy4KPj4+ICsKPj4+ICtSZXNvbHV0aW9uOiA4IEJpdHMKPj4+ICtBY2N1cmFj\n"
- "eTogwrExwrBDIFR5cCAo4oCTMTDCsEMgdG8gKzEwMMKwQykKPj4+ICsKPj4+ICtUaGUgZHJpdmVy\n"
- "IHByb3ZpZGVzIHRoZSBjb21tb24gc3lzZnMtaW50ZXJmYWNlIGZvciB0ZW1wZXJhdHVyZXMgKHNl\n"
- "ZQo+Pj4gK0RvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlIHVuZGVyIFRlbXBlcmF0\n"
- "dXJlcykuCj4+PiArCj4+PiArUGxlYXNlIHJlZmVyIGhvdyB0byBpbnN0YW50aWF0ZSB0aGlzIGRy\n"
- "aXZlcjoKPj4+ICtEb2N1bWVudGF0aW9uL2kyYy9pbnN0YW50aWF0aW5nLWRldmljZXMKPj4+IGRp\n"
- "ZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcK\n"
- "Pj4+IGluZGV4IDA4NTMxYTEuLmM4ODJkNGIgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2h3bW9u\n"
- "L0tjb25maWcKPj4+ICsrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwo+Pj4gQEAgLTEzOTEsNiAr\n"
- "MTM5MSwxNiBAQCBjb25maWcgU0VOU09SU19UTVAxMDIKPj4+ICAgICAgICAgVGhpcyBkcml2ZXIg\n"
- "Y2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQo+Pj4gICAg\n"
- "ICAgICB3aWxsIGJlIGNhbGxlZCB0bXAxMDIuCj4+PiArY29uZmlnIFNFTlNPUlNfVE1QMTAzCj4+\n"
- "PiArICAgIHRyaXN0YXRlICJUZXhhcyBJbnN0cnVtZW50cyBUTVAxMDMiCj4+PiArICAgIGRlcGVu\n"
- "ZHMgb24gSTJDCj4+PiArICAgIGhlbHAKPj4+ICsgICAgICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlv\n"
- "dSBnZXQgc3VwcG9ydCBmb3IgVGV4YXMgSW5zdHJ1bWVudHMgVE1QMTAzCj4+PiArICAgICAgc2Vu\n"
- "c29yIGNoaXBzLgo+Pj4gKwo+Pj4gKyAgICAgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0\n"
- "IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKPj4+ICsgICAgICB3aWxsIGJlIGNhbGxl\n"
- "ZCB0bXAxMDMuCj4+PiArCj4+PiAgIGNvbmZpZyBTRU5TT1JTX1RNUDQwMQo+Pj4gICAgICAgdHJp\n"
- "c3RhdGUgIlRleGFzIEluc3RydW1lbnRzIFRNUDQwMSBhbmQgY29tcGF0aWJsZXMiCj4+PiAgICAg\n"
- "ICBkZXBlbmRzIG9uIEkyQwo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUg\n"
- "Yi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCj4+PiBpbmRleCAzZGMwZjAyLi5jYzBkZjFlZiAxMDA2\n"
- "NDQKPj4+IC0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKPj4+ICsrKyBiL2RyaXZlcnMvaHdt\n"
- "b24vTWFrZWZpbGUKPj4+IEBAIC0xMzUsNiArMTM1LDcgQEAgb2JqLSQoQ09ORklHX1NFTlNPUlNf\n"
- "U01TQzQ3TTE5MikrPSBzbXNjNDdtMTkyLm8KPj4+ICAgb2JqLSQoQ09ORklHX1NFTlNPUlNfQU1D\n"
- "NjgyMSkgICAgKz0gYW1jNjgyMS5vCj4+PiAgIG9iai0kKENPTkZJR19TRU5TT1JTX1RITUM1MCkg\n"
- "ICAgKz0gdGhtYzUwLm8KPj4+ICAgb2JqLSQoQ09ORklHX1NFTlNPUlNfVE1QMTAyKSAgICArPSB0\n"
- "bXAxMDIubwo+Pj4gK29iai0kKENPTkZJR19TRU5TT1JTX1RNUDEwMykgICAgKz0gdG1wMTAzLm8K\n"
- "Pj4+ICAgb2JqLSQoQ09ORklHX1NFTlNPUlNfVE1QNDAxKSAgICArPSB0bXA0MDEubwo+Pj4gICBv\n"
- "YmotJChDT05GSUdfU0VOU09SU19UTVA0MjEpICAgICs9IHRtcDQyMS5vCj4+PiAgIG9iai0kKENP\n"
- "TkZJR19TRU5TT1JTX1RXTDQwMzBfTUFEQykrPSB0d2w0MDMwLW1hZGMtaHdtb24ubwo+Pj4gZGlm\n"
- "ZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdG1wMTAzLmMgYi9kcml2ZXJzL2h3bW9uL3RtcDEwMy5j\n"
- "Cj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4gaW5kZXggMDAwMDAwMC4uZTY5ZGJjYQo+Pj4g\n"
- "LS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvZHJpdmVycy9od21vbi90bXAxMDMuYwo+Pj4gQEAgLTAs\n"
- "MCArMSwyMDUgQEAKPj4+ICsvKgo+Pj4gKyAqIFRleGFzIEluc3RydW1lbnRzIFRNUDEwMyBTTUJ1\n"
- "cyB0ZW1wZXJhdHVyZSBzZW5zb3IgZHJpdmVyCj4+PiArICogQ29weXJpZ2h0IChDKSAyMDE0IEhl\n"
- "aWtvIFNjaG9jaGVyIDxoc0BkZW54LmRlPgo+Pj4gKyAqCj4+PiArICogQmFzZWQgb246Cj4+PiAr\n"
- "ICogVGV4YXMgSW5zdHJ1bWVudHMgVE1QMTAyIFNNQnVzIHRlbXBlcmF0dXJlIHNlbnNvciBkcml2\n"
- "ZXIKPj4+ICsgKgo+Pj4gKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGV2ZW4gS2luZyA8c2ZraW5n\n"
- "QGZkd2RjLmNvbT4KPj4+ICsgKgo+Pj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl\n"
- "OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCj4+PiBtb2RpZnkKPj4+ICsgKiBpdCB1\n"
- "bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAo+Pj4g\n"
- "cHVibGlzaGVkIGJ5Cj4+PiArICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy\n"
- "IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPj4+ICsgKiAoYXQgeW91ciBvcHRpb24pIGFu\n"
- "eSBsYXRlciB2ZXJzaW9uLgo+Pj4gKyAqCj4+PiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1\n"
- "dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+PiArICogYnV0IFdJVEhP\n"
- "VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4+\n"
- "ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu\n"
- "ICBTZWUgdGhlCj4+PiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0\n"
- "YWlscy4KPj4+ICsgKgo+Pj4gKyAqLwo+Pj4gKwo+Pj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu\n"
- "aD4KPj4+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9zbGFi\n"
- "Lmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9od21v\n"
- "bi5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgo+Pj4gKyNpbmNsdWRlIDxs\n"
- "aW51eC9lcnIuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KPj4+ICsjaW5jbHVkZSA8\n"
- "bGludXgvZGV2aWNlLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KPj4+ICsjaW5j\n"
- "bHVkZSA8bGludXgvcmVnbWFwLmg+Cj4+PiArCj4+PiArI2RlZmluZSBUTVAxMDNfVEVNUF9SRUcg\n"
- "ICAgICAgIDB4MDAKPj4+ICsjZGVmaW5lIFRNUDEwM19DT05GX1JFRyAgICAgICAgMHgwMQo+Pj4g\n"
- "KyNkZWZpbmUgVE1QMTAzX1RMT1dfUkVHICAgICAgICAweDAyCj4+PiArI2RlZmluZSBUTVAxMDNf\n"
- "VEhJR0hfUkVHICAgIDB4MDMKPj4+ICsKPj4+ICsjZGVmaW5lIFRNUDEwM19DT05GX00wICAgICAg\n"
- "ICAweDAxCj4+PiArI2RlZmluZSBUTVAxMDNfQ09ORl9NMSAgICAgICAgMHgwMgo+Pj4gKyNkZWZp\n"
- "bmUgVE1QMTAzX0NPTkZfTEMgICAgICAgIDB4MDQKPj4+ICsjZGVmaW5lIFRNUDEwM19DT05GX0ZM\n"
- "ICAgICAgICAweDA4Cj4+PiArI2RlZmluZSBUTVAxMDNfQ09ORl9GSCAgICAgICAgMHgxMAo+Pj4g\n"
- "KyNkZWZpbmUgVE1QMTAzX0NPTkZfQ1IwICAgICAgICAweDIwCj4+PiArI2RlZmluZSBUTVAxMDNf\n"
- "Q09ORl9DUjEgICAgICAgIDB4NDAKPj4+ICsjZGVmaW5lIFRNUDEwM19DT05GX0lEICAgICAgICAw\n"
- "eDgwCj4+PiArI2RlZmluZSBUTVAxMDNfQ09ORl9TRCAgICAgICAgKFRNUDEwM19DT05GX00xKQo+\n"
- "Pj4gKyNkZWZpbmUgVE1QMTAzX0NPTkZfU0RfTUFTSyAgICAoVE1QMTAzX0NPTkZfTTAgfCBUTVAx\n"
- "MDNfQ09ORl9NMSkKPj4+ICsKPj4+ICsjZGVmaW5lIFRNUDEwM19DT05GSUcgICAgICAgIChUTVAx\n"
- "MDNfQ09ORl9DUjEgfCBUTVAxMDNfQ09ORl9NMSkKPj4+ICsjZGVmaW5lIFRNUDEwM19DT05GSUdf\n"
- "TUFTSyAgICAoVE1QMTAzX0NPTkZfQ1IwIHwgVE1QMTAzX0NPTkZfQ1IxIHwgXAo+Pj4gKyAgICAg\n"
- "ICAgICAgICAgICAgVE1QMTAzX0NPTkZfTTAgfCBUTVAxMDNfQ09ORl9NMSkKPj4+ICsKPj4+ICtz\n"
- "dGF0aWMgaW5saW5lIGludCB0bXAxMDNfcmVnX3RvX21jKHM4IHZhbCkKPj4+ICt7Cj4+PiArICAg\n"
- "IHJldHVybiB2YWwgKiAxMDAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIHU4IHRt\n"
- "cDEwM19tY190b19yZWcoaW50IHZhbCkKPj4+ICt7Cj4+PiArICAgIHJldHVybiBESVZfUk9VTkRf\n"
- "Q0xPU0VTVCh2YWwsIDEwMDApOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgc3NpemVfdCB0bXAx\n"
- "MDNfc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKPj4+ICsgICAgICAgICAgICAgICAgc3Ry\n"
- "dWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4+PiArICAgICAgICAgICAgICAgIGNoYXIgKmJ1\n"
- "ZikKPj4+ICt7Cj4+PiArICAgIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2RhID0g\n"
- "dG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOwo+Pj4gKyAgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXAg\n"
- "PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPj4+ICsgICAgdW5zaWduZWQgaW50IHJlZ3ZhbDsKPj4+\n"
- "ICsgICAgaW50IHJldDsKPj4+ICsKPj4+ICsgICAgcmV0ID0gcmVnbWFwX3JlYWQocmVnbWFwLCBz\n"
- "ZGEtPmluZGV4LCAmcmVndmFsKTsKPj4+ICsgICAgaWYgKHJldCA8IDApCj4+PiArICAgICAgICBy\n"
- "ZXR1cm4gcmV0Owo+Pj4gKwo+Pj4gKyAgICByZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdG1w\n"
- "MTAzX3JlZ190b19tYyhyZWd2YWwpKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHNzaXplX3Qg\n"
- "dG1wMTAzX3NldF90ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKPj4+ICsgICAgICAgICAgICAgICAg\n"
- "ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4+PiArICAgICAgICAgICAgICAgICAg\n"
- "IGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQo+Pj4gK3sKPj4+ICsgICAgc3RydWN0IHNl\n"
- "bnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZGEgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7Cj4+\n"
- "PiArICAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+Pj4g\n"
- "KyAgICBsb25nIHZhbDsKPj4+ICsgICAgaW50IHJldDsKPj4+ICsKPj4+ICsgICAgaWYgKGtzdHJ0\n"
- "b2woYnVmLCAxMCwgJnZhbCkgPCAwKQo+Pj4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+PiAr\n"
- "Cj4+PiArICAgIHZhbCA9IGNsYW1wX3ZhbCh2YWwsIC01NTAwMCwgMTI3MDAwKTsKPj4+ICsgICAg\n"
- "cmV0ID0gcmVnbWFwX3dyaXRlKHJlZ21hcCwgc2RhLT5pbmRleCwgdG1wMTAzX21jX3RvX3JlZyh2\n"
- "YWwpKTsKPj4+ICsgICAgcmV0dXJuIHJldCA/IHJldCA6IGNvdW50Owo+Pj4gK30KPj4+ICsKPj4+\n"
- "ICtzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCB0bXAxMDNf\n"
- "c2hvd190ZW1wLCAKPj4+IE5VTEwgLAo+Pj4gKyAgICAgICAgICAgICAgVE1QMTAzX1RFTVBfUkVH\n"
- "KTsKPj4+ICsKPj4+ICtzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21pbiwgU19JV1VT\n"
- "UiB8IFNfSVJVR08sIAo+Pj4gdG1wMTAzX3Nob3dfdGVtcCwKPj4+ICsgICAgICAgICAgICAgIHRt\n"
- "cDEwM19zZXRfdGVtcCwgVE1QMTAzX1RMT1dfUkVHKTsKPj4+ICsKPj4+ICtzdGF0aWMgU0VOU09S\n"
- "X0RFVklDRV9BVFRSKHRlbXAxX21heCwgU19JV1VTUiB8IFNfSVJVR08sIAo+Pj4gdG1wMTAzX3No\n"
- "b3dfdGVtcCwKPj4+ICsgICAgICAgICAgICAgIHRtcDEwM19zZXRfdGVtcCwgVE1QMTAzX1RISUdI\n"
- "X1JFRyk7Cj4+PiArCj4+PiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRtcDEwM19hdHRyc1td\n"
- "ID0gewo+Pj4gKyAgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIs\n"
- "Cj4+PiArICAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWluLmRldl9hdHRyLmF0dHIsCj4+PiAr\n"
- "ICAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyLmF0dHIsCj4+PiArICAgIE5V\n"
- "TEwKPj4+ICt9Owo+Pj4gK0FUVFJJQlVURV9HUk9VUFModG1wMTAzKTsKPj4+ICsKPj4+ICtzdGF0\n"
- "aWMgYm9vbCB0bXAxMDNfcmVnbWFwX2lzX3ZvbGF0aWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5z\n"
- "aWduZWQgCj4+PiBpbnQgcmVnKQo+Pj4gK3sKPj4+ICsgICAgcmV0dXJuIHJlZyA9PSBUTVAxMDNf\n"
- "VEVNUF9SRUc7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyB0\n"
- "bXAxMDNfcmVnbWFwX2NvbmZpZyA9IHsKPj4+ICsgICAgLnJlZ19iaXRzID0gOCwKPj4+ICsgICAg\n"
- "LnZhbF9iaXRzID0gOCwKPj4+ICsgICAgLm1heF9yZWdpc3RlciA9IFRNUDEwM19USElHSF9SRUcs\n"
- "Cj4+PiArICAgIC52b2xhdGlsZV9yZWcgPSB0bXAxMDNfcmVnbWFwX2lzX3ZvbGF0aWxlLAo+Pj4g\n"
- "K307Cj4+PiArCj4+PiArc3RhdGljIGludCB0bXAxMDNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQg\n"
- "KmNsaWVudCwKPj4+ICsgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQp\n"
- "Cj4+PiArewo+Pj4gKyAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7Cj4+PiAr\n"
- "ICAgIHN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKPj4+ICsgICAgc3RydWN0IHJlZ21hcCAqcmVn\n"
- "bWFwOwo+Pj4gKyAgICBpbnQgcmV0Owo+Pj4gKwo+Pj4gKyAgICBpZiAoIWkyY19jaGVja19mdW5j\n"
- "dGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKPj4+ICsgICAgICAgICAgICAgICAgICAgICBJMkNf\n"
- "RlVOQ19TTUJVU19CWVRFX0RBVEEpKSB7Cj4+PiArICAgICAgICBkZXZfZXJyKCZjbGllbnQtPmRl\n"
- "diwKPj4+ICsgICAgICAgICAgICAiYWRhcHRlciBkb2Vzbid0IHN1cHBvcnQgU01CdXMgYnl0ZSB0\n"
- "cmFuc2FjdGlvbnNcbiIpOwo+Pj4gKyAgICAgICAgcmV0dXJuIC1FTk9ERVY7Cj4+PiArICAgIH0K\n"
- "Pj4+ICsKPj4+ICsgICAgcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCAmdG1w\n"
- "MTAzX3JlZ21hcF9jb25maWcpOwo+Pj4gKyAgICBpZiAoSVNfRVJSKHJlZ21hcCkpIHsKPj4+ICsg\n"
- "ICAgICAgIGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHJlZ2lzdGVyIG1hcFxuIik7\n"
- "Cj4+PiArICAgICAgICByZXR1cm4gUFRSX0VSUihyZWdtYXApOwo+Pj4gKyAgICB9Cj4+PiArCj4+\n"
- "PiArICAgIHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIFRNUDEwM19DT05GX1JFRywg\n"
- "Cj4+PiBUTVAxMDNfQ09ORklHX01BU0ssCj4+PiArICAgICAgICAgICAgICAgICBUTVAxMDNfQ09O\n"
- "RklHKTsKPj4+ICsgICAgaWYgKHJldCA8IDApIHsKPj4+ICsgICAgICAgIGRldl9lcnIoJmNsaWVu\n"
- "dC0+ZGV2LCAiZXJyb3Igd3JpdGluZyBjb25maWcgcmVnaXN0ZXJcbiIpOwo+Pj4gKyAgICAgICAg\n"
- "cmV0dXJuIHJldDsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICBod21vbl9kZXYgPSBod21vbl9k\n"
- "ZXZpY2VfcmVnaXN0ZXJfd2l0aF9ncm91cHMoZGV2LCBjbGllbnQtPm5hbWUsCj4+PiArICAgICAg\n"
- "ICAgICAgICAgICAgICAgICAgICAgICAgcmVnbWFwLCB0bXAxMDNfZ3JvdXBzKTsKPj4+ICsgICAg\n"
- "cmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhod21vbl9kZXYpOwo+Pj4gK30KPj4+ICsKPj4+ICsjaWZk\n"
- "ZWYgQ09ORklHX1BNCj4+PiArc3RhdGljIGludCB0bXAxMDNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNl\n"
- "ICpkZXYpCj4+PiArewo+Pj4gKyAgICBzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBkZXZfZ2V0X2Ry\n"
- "dmRhdGEoZGV2KTsKPj4+ICsKPj4+ICsgICAgcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhyZWdt\n"
- "YXAsIFRNUDEwM19DT05GX1JFRywKPj4+ICsgICAgICAgICAgICAgICAgICBUTVAxMDNfQ09ORl9T\n"
- "RF9NQVNLLCAwKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCB0bXAxMDNfcmVzdW1lKHN0\n"
- "cnVjdCBkZXZpY2UgKmRldikKPj4+ICt7Cj4+PiArICAgIHN0cnVjdCByZWdtYXAgKnJlZ21hcCA9\n"
- "IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+Pj4gKwo+Pj4gKyAgICByZXR1cm4gcmVnbWFwX3VwZGF0\n"
- "ZV9iaXRzKHJlZ21hcCwgVE1QMTAzX0NPTkZfUkVHLAo+Pj4gKyAgICAgICAgICAgICAgICAgIFRN\n"
- "UDEwM19DT05GX1NEX01BU0ssIFRNUDEwM19DT05GX1NEKTsKPj4+ICt9Cj4+PiArCj4+PiArc3Rh\n"
- "dGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHRtcDEwM19kZXZfcG1fb3BzID0gewo+Pj4gKyAg\n"
- "ICAuc3VzcGVuZCAgICA9IHRtcDEwM19zdXNwZW5kLAo+Pj4gKyAgICAucmVzdW1lICAgICAgICA9\n"
- "IHRtcDEwM19yZXN1bWUsCj4+PiArfTsKPj4+ICsKPj4+ICsjZGVmaW5lIFRNUDEwM19ERVZfUE1f\n"
- "T1BTICgmdG1wMTAzX2Rldl9wbV9vcHMpCj4+PiArI2Vsc2UKPj4+ICsjZGVmaW5lICAgIFRNUDEw\n"
- "M19ERVZfUE1fT1BTIE5VTEwKPj4+ICsjZW5kaWYgLyogQ09ORklHX1BNICovCj4+PiArCj4+PiAr\n"
- "c3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRtcDEwM19pZFtdID0gewo+Pj4gKyAg\n"
- "ICB7ICJ0bXAxMDMiLCAwIH0sCj4+PiArICAgIHsgfQo+Pj4gK307Cj4+Cj4+IEluIHRoZSBiaW5k\n"
- "aW5ncyB5b3UgYXJlIGdpdmluZyB0aGUgY29tcGF0aWJsZSBwcm9wZXJ0eSBhcyA6IAo+PiB0aSx0\n"
- "bXAxMDMsIGJ1dCBoZXJlIG9ubHkgdG1wMTAzLgo+Pgo+PiBJbnN0ZWFkIG9mIHVzaW5nIHRoZSBp\n"
- "MmNfZGV2aWNlX2lkIHN0cnVjdCAsIHVzZSBvZl9kZXZpY2VfaWQgc3RydWN0IAo+PiBmb3IgZ2l2\n"
- "aW5nIHRoZQo+PiBjb21wYXRpYmxlIHByb3BlcnR5IHZhbHVlLgo+PiBjb21wYXRibGUgPSAiPG1h\n"
- "bnVmYWN0dXJlcj4sPG1vZGVsPiIKPj4KPgo+IE5vLiBXZSBkb24ndCBkbyB0aGF0IGZvciBvdGhl\n"
- "ciBpMmMgZHJpdmVycywgYW5kIHRoZSBpMmMgc3Vic3lzdGVtIGhhbmRsZXMKPiB0aGlzIGNhc2Us\n"
- "IHNvIGl0IGRvZXMgbm90IHNlbnNlIHRvIHN0YXJ0IHRoYXQgd2l0aCB0aGlzIGRyaXZlciBqdXN0\n"
- "Cj4gZm9yIHRoZSBzYWtlIG9mIG1ha2luZyB0aGUgY29kZSBtb3JlIGNvbXBsaWNhdGVkIHRoYW4g\n"
- "aXQgaGFzIHRvIGJlLgo+Cj4gVGhhbmtzLAo+IEd1ZW50ZXIKPgoKCl9fX19fX19fX19fX19fX19f\n"
- "X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxtLXNlbnNvcnMgbWFpbGluZyBsaXN0Cmxt\n"
- "LXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKaHR0cDovL2xpc3RzLmxtLXNlbnNvcnMub3JnL21haWxt\n"
- YW4vbGlzdGluZm8vbG0tc2Vuc29ycw=
+ "On 06/18/2014 11:42 AM, Guenter Roeck wrote:\n"
+ "> 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 \n"
+ ">>> 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"
+ ">>> +++++++++++++++++++++\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 \n"
+ ">>> ALARMS\n"
+ ">>>   taos,tsl2550        Ambient Light Sensor with SMBUS/Two Wire \n"
+ ">>> Serial Interface\n"
+ ">>>   ti,tsc2003        I2C Touch-Screen Controller\n"
+ ">>>   ti,tmp102        Low Power Digital Temperature Sensor with \n"
+ ">>> SMBUS/Two Wire Serial Interface\n"
+ ">>> +ti,tmp103        Low Power Digital Temperature Sensor with \n"
+ ">>> SMBUS/Two Wire Serial Interface\n"
+ "May i know about this binding compatible property ?\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, \n"
+ ">>> 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"
+ ">\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\n"
+ >
 
-48803b913d9c0031eef0af3bcac91635f6e1f7e5180f7eafbb3fc0510636d823
+c31fb60410785520566a7bec928fbf0c871c4f2b2629376b478d0790f85a20b9

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.