All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <1437860750-10339-1-git-send-email-const@MakeLinux.com>

diff --git a/a/1.txt b/N1/1.txt
index c82d500..2391e47 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,213 +1,276 @@
-SW50cm9kdWNlZCBSRUdfUFdNLCBwd21bMS4uM11fYXV0b19wb2ludFsxLi41XV90ZW1wLApwd21b
-MS4uM11fYXV0b19wb2ludFsxLi41XV9wd20sIG5jdDc4MDJfYXV0b19wb2ludF9hdHRycywKbmN0
-NzgwMl9hdXRvX3BvaW50X2dyb3VwLCB1cGRhdGVkIG5jdDc4MDJfcmVnbWFwX2lzX3ZvbGF0aWxl
-CgpTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluZSBTaHVseXVwaW4gPGNvbnN0QE1ha2VMaW51eC5j
-b20+Ci0tLQoKQ2hhbmdlZCBpbiB2NDoKLSBmaXhlZCBleHByZXNzaW9uIGluIG5jdDc4MDJfcmVn
-bWFwX2lzX3ZvbGF0aWxlCi0gYWRkZWQgcHdtWF9hdXRvX3RlbXAgdG8gZHJpdmVyJ3MgZG9jdW1l
-bnRhdGlvbgpDaGFuZ2VkIGluIHYzOgotIHJlbW92ZWQgbmN0NzgwMl9hdXRvX3BvaW50X2lzX3Zp
-c2libGUKLSByZW1vdmVkIHVzYWdlIG9mIHN5c2ZzX3VwZGF0ZV9ncm91cAotIGludHJvZHVjZWQg
-UkVHX1BXTQotIHJlbW92ZWQgU19JV1VTUiBmcm9tIFJPIGF0dHJpYnV0ZXMKLSBhZGRlZCBQV00g
-cmVnaXN0ZXJzIHRvIG5jdDc4MDJfcmVnbWFwX2lzX3ZvbGF0aWxlCkNoYW5nZWQgaW4gdjI6Ci0g
-cmVtb3ZlZCBQV01fUkVHLCBURU1QX1JFRwotIHJlbW92ZWQgYXV0b19wb2ludFsxLi40XV90ZW1w
-LCBhdXRvX3BvaW50WzEuLjRdX3B3bQogIGFuZCBhdXRvX3BvaW50X2NyaXRfdGVtcAotIGludHJv
-ZHVjZWQgcHdtWzEuLjNdX2F1dG9fcG9pbnRbMS4uNV1fdGVtcAogIGFuZCBwd21bMS4uM11fYXV0
-b19wb2ludFsxLi41XV9wd20uCi0gaW50cm9kdWNlZCBuY3Q3ODAyX2F1dG9fcG9pbnRfaXNfdmlz
-aWJsZQotIHVzZWQgc3lzZnNfdXBkYXRlX2dyb3VwIGluIHN0b3JlX3B3bV9lbmFibGUKCkRlZmF1
-bHQgdmFsdWVzIG9uIG15IHBsYXRmb3JtOgoKZmFuMV9hbGFybTowICAgICAgICAgICAgICAgICAg
-ICBwd20yX2F1dG9fcG9pbnQxX3RlbXA6MjUwMDAKZmFuMV9iZWVwOjAgICAgICAgICAgICAgICAg
-ICAgICBwd20yX2F1dG9fcG9pbnQyX3B3bToxNzAKZmFuMV9pbnB1dDoxNTAwMDAgICAgICAgICAg
-ICAgICBwd20yX2F1dG9fcG9pbnQyX3RlbXA6MzUwMDAKZmFuMV9taW46MCAgICAgICAgICAgICAg
-ICAgICAgICBwd20yX2F1dG9fcG9pbnQzX3B3bToyMDAKZmFuMl9hbGFybTowICAgICAgICAgICAg
-ICAgICAgICBwd20yX2F1dG9fcG9pbnQzX3RlbXA6NDUwMDAKZmFuMl9iZWVwOjAgICAgICAgICAg
-ICAgICAgICAgICBwd20yX2F1dG9fcG9pbnQ0X3B3bToyMzAKZmFuMl9pbnB1dDowICAgICAgICAg
-ICAgICAgICAgICBwd20yX2F1dG9fcG9pbnQ0X3RlbXA6NTUwMDAKZmFuMl9taW46MCAgICAgICAg
-ICAgICAgICAgICAgICBwd20yX2F1dG9fcG9pbnQ1X3B3bToyNTUKZmFuM19hbGFybTowICAgICAg
-ICAgICAgICAgICAgICBwd20yX2F1dG9fcG9pbnQ1X3RlbXA6NjAwMDAKZmFuM19iZWVwOjAgICAg
-ICAgICAgICAgICAgICAgICBwd20yX2VuYWJsZToxCmZhbjNfaW5wdXQ6MCAgICAgICAgICAgICAg
-ICAgICAgcHdtMl9tb2RlOjEKZmFuM19taW46MCAgICAgICAgICAgICAgICAgICAgICBwd20zOjEy
-NwppbjBfYWxhcm06MCAgICAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19wb2ludDFfcHdtOjE0
-MAppbjBfYmVlcDowICAgICAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19wb2ludDFfdGVtcDoy
-NTAwMAppbjBfaW5wdXQ6MzMxMiAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19wb2ludDJfcHdt
-OjE3MAppbjBfbWF4OjQwOTIgICAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19wb2ludDJfdGVt
-cDozNTAwMAppbjBfbWluOjAgICAgICAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19wb2ludDNf
-cHdtOjIwMAppbjFfaW5wdXQ6OTAyICAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19wb2ludDNf
-dGVtcDo0NTAwMAppbjNfYWxhcm06MCAgICAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19wb2lu
-dDRfcHdtOjIzMAppbjNfYmVlcDowICAgICAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19wb2lu
-dDRfdGVtcDo1NTAwMAppbjNfaW5wdXQ6MTgwOCAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19w
-b2ludDVfcHdtOjI1NQppbjNfbWF4OjIwNDYgICAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19w
-b2ludDVfdGVtcDo2MDAwMAppbjNfbWluOjAgICAgICAgICAgICAgICAgICAgICAgIHB3bTNfZW5h
-YmxlOjEKaW40X2FsYXJtOjAgICAgICAgICAgICAgICAgICAgICBwd20zX21vZGU6MQppbjRfYmVl
-cDowICAgICAgICAgICAgICAgICAgICAgIHRlbXAxX2JlZXA6MAppbjRfaW5wdXQ6MTUwOCAgICAg
-ICAgICAgICAgICAgIHRlbXAxX2NyaXQ6MTAwMDAwCmluNF9tYXg6MjA0NiAgICAgICAgICAgICAg
-ICAgICAgdGVtcDFfY3JpdF9hbGFybTowCmluNF9taW46MCAgICAgICAgICAgICAgICAgICAgICAg
-dGVtcDFfZmF1bHQ6MApuYW1lOm5jdDc4MDIgICAgICAgICAgICAgICAgICAgIHRlbXAxX2lucHV0
-OjM1NTAwCnB3bTE6MTI3ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcDFfbWF4Ojg1MDAwCnB3
-bTFfYXV0b19wb2ludDFfcHdtOjE0MCAgICAgICAgdGVtcDFfbWF4X2FsYXJtOjAKcHdtMV9hdXRv
-X3BvaW50MV90ZW1wOjI1MDAwICAgICB0ZW1wMV9taW46MApwd20xX2F1dG9fcG9pbnQyX3B3bTox
-NzAgICAgICAgIHRlbXAxX21pbl9hbGFybTowCnB3bTFfYXV0b19wb2ludDJfdGVtcDozNTAwMCAg
-ICAgdGVtcDFfdHlwZTo0CnB3bTFfYXV0b19wb2ludDNfcHdtOjIwMCAgICAgICAgdGVtcDRfYmVl
-cDowCnB3bTFfYXV0b19wb2ludDNfdGVtcDo0NTAwMCAgICAgdGVtcDRfY3JpdDoxMDAwMDAKcHdt
-MV9hdXRvX3BvaW50NF9wd206MjMwICAgICAgICB0ZW1wNF9jcml0X2FsYXJtOjAKcHdtMV9hdXRv
-X3BvaW50NF90ZW1wOjU1MDAwICAgICB0ZW1wNF9pbnB1dDozOTAwMApwd20xX2F1dG9fcG9pbnQ1
-X3B3bToyNTUgICAgICAgIHRlbXA0X21heDo4NTAwMApwd20xX2F1dG9fcG9pbnQ1X3RlbXA6NjAw
-MDAgICAgIHRlbXA0X21heF9hbGFybTowCnB3bTFfZW5hYmxlOjEgICAgICAgICAgICAgICAgICAg
-dGVtcDRfbWluOjAKcHdtMV9tb2RlOjEgICAgICAgICAgICAgICAgICAgICB0ZW1wNF9taW5fYWxh
-cm06MApwd20yOjEyNyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXA2X2JlZXA6MApwd20yX2F1
-dG9fcG9pbnQxX3B3bToxNDAgICAgICAgIHRlbXA2X2lucHV0OjAKCi0tLQogRG9jdW1lbnRhdGlv
-bi9od21vbi9uY3Q3ODAyIHwgICA1ICstCiBkcml2ZXJzL2h3bW9uL25jdDc4MDIuYyAgICAgfCAx
-MzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KIDIgZmlsZXMg
-Y2hhbmdlZCwgMTI4IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv
-RG9jdW1lbnRhdGlvbi9od21vbi9uY3Q3ODAyIGIvRG9jdW1lbnRhdGlvbi9od21vbi9uY3Q3ODAy
-CmluZGV4IDJlMDBmNWUuLmM1YzI1YTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24v
-bmN0NzgwMgorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL25jdDc4MDIKQEAgLTUsNyArNSw3IEBA
-IFN1cHBvcnRlZCBjaGlwczoKICAgKiBOdXZvdG9uIE5DVDc4MDJZCiAgICAgUHJlZml4OiAnbmN0
-NzgwMicKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MjguLjB4MmYKLSAgICBEYXRhc2hl
-ZXQ6IEF2YWlsYWJsZSBmcm9tIE51dm90b24gd2ViIHNpdGUKKyAgICBEYXRhc2hlZXQ6IGh0dHA6
-Ly93d3cubnV2b3Rvbi5jb20vaHEvcHJvZHVjdHMvY2xvdWQtY29tcHV0aW5nL2hhcmR3YXJlLW1v
-bml0b3JzL2Rlc2t0b3Atc2VydmVyLXNlcmllcy9uY3Q3ODAyeS8KIAogQXV0aG9yczoKICAgICAg
-ICAgR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMubmV0PgpAQCAtMTcsOCArMTcsNyBAQCBU
-aGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBOdXZvdG9uIE5DVDc4MDJZIGhh
-cmR3YXJlIG1vbml0b3JpbmcKIGNoaXAuIE5DVDc4MDJZIHN1cHBvcnRzIDYgdGVtcGVyYXR1cmUg
-c2Vuc29ycywgNSB2b2x0YWdlIHNlbnNvcnMsIGFuZCAzIGZhbgogc3BlZWQgc2Vuc29ycy4KIAot
-VGhlIGNoaXAgYWxzbyBzdXBwb3J0cyBpbnRlbGxpZ2VudCBmYW4gc3BlZWQgY29udHJvbC4gVGhp
-cyBmdW5jdGlvbmFsaXR5IGlzCi1ub3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVy
-LgorU21hcnQgRmFu4oSiIHNwZWVkIGNvbnRyb2wgaXMgYXZpbGFiZWwgdmlhIHB3bVhfYXV0b190
-ZW1wIGF0dHJpYnV0ZXMuCiAKIFRlc3RlZCBCb2FyZHMgYW5kIEJJT1MgVmVyc2lvbnMKIC0tLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbmN0
-NzgwMi5jIGIvZHJpdmVycy9od21vbi9uY3Q3ODAyLmMKaW5kZXggZDAxODU3MS4uYzE4OThiYSAx
-MDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9uY3Q3ODAyLmMKKysrIGIvZHJpdmVycy9od21vbi9u
-Y3Q3ODAyLmMKQEAgLTUzLDYgKzUzLDcgQEAgc3RhdGljIGNvbnN0IHU4IFJFR19WT0xUQUdFX0xJ
-TUlUX01TQl9TSElGVFsyXVs1XSA9IHsKICNkZWZpbmUgUkVHX1BFQ0lfRU5BQkxFCQkweDIzCiAj
-ZGVmaW5lIFJFR19GQU5fRU5BQkxFCQkweDI0CiAjZGVmaW5lIFJFR19WTU9OX0VOQUJMRQkJMHgy
-NQorI2RlZmluZSBSRUdfUFdNKHgpCQkoMHg2MCArICh4KSkKICNkZWZpbmUgUkVHX1NNQVJURkFO
-X0VOKHgpICAgICAgKDB4NjQgKyAoeCkgLyAyKQogI2RlZmluZSBTTUFSVEZBTl9FTl9TSElGVCh4
-KSAgICAoKHgpICUgMiAqIDQpCiAjZGVmaW5lIFJFR19WRU5ET1JfSUQJCTB4ZmQKQEAgLTEzMCw2
-ICsxMzEsOSBAQCBzdGF0aWMgc3NpemVfdCBzaG93X3B3bShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0
-cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAogCXVuc2lnbmVkIGludCB2YWw7CiAJaW50
-IHJldDsKIAorCWlmICghYXR0ci0+aW5kZXgpCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjI1NVxu
-Iik7CisKIAlyZXQgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIGF0dHItPmluZGV4LCAmdmFs
-KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTgyNiw5ICs4MzAsMTIgQEAgc3Rh
-dGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20yX21vZGUsIFNfSVJVR08sIHNob3dfcHdtX21vZGUs
-IE5VTEwsIDEpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20zX21vZGUsIFNfSVJVR08s
-IHNob3dfcHdtX21vZGUsIE5VTEwsIDIpOwogCiAvKiA3LjIuOTEuLi4gRmFuIENvbnRyb2wgT3V0
-cHV0IFZhbHVlICovCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTEsIFNfSVJVR08gfCBT
-X0lXVVNSLCBzaG93X3B3bSwgc3RvcmVfcHdtLCAweDYwKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNF
-X0FUVFIocHdtMiwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtLCBzdG9yZV9wd20sIDB4NjEp
-Owotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20zLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hv
-d19wd20sIHN0b3JlX3B3bSwgMHg2Mik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTEs
-IFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3B3bSwgc3RvcmVfcHdtLAorCQkJICBSRUdfUFdNKDAp
-KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMiwgU19JUlVHTyB8IFNfSVdVU1IsIHNo
-b3dfcHdtLCBzdG9yZV9wd20sCisJCQkgIFJFR19QV00oMSkpOworc3RhdGljIFNFTlNPUl9ERVZJ
-Q0VfQVRUUihwd20zLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wd20sIHN0b3JlX3B3bSwKKwkJ
-CSAgUkVHX1BXTSgyKSk7CiAKIC8qIDcuMi45NS4uLiBUZW1wZXJhdHVyZSB0byBGYW4gbWFwcGlu
-ZyBSZWxhdGlvbnNoaXBzIFJlZ2lzdGVyICovCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3
-bTFfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wd21fZW5hYmxlLApAQCAtODkzLDEx
-ICs5MDAsMTI1IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG5jdDc4MDJfcHdtX2dy
-b3VwID0gewogCS5hdHRycyA9IG5jdDc4MDJfcHdtX2F0dHJzLAogfTsKIAorLyogNy4yLjExNS4u
-LiAweDgwLTB4ODMsIDB4ODQgVGVtcGVyYXR1cmUgKFgtYXhpcykgdHJhbnNpdGlvbiAqLworc3Rh
-dGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTFfYXV0b19wb2ludDFfdGVtcCwgU19JUlVHTyB8
-IFNfSVdVU1IsCisJCQkgICAgc2hvd190ZW1wLCBzdG9yZV90ZW1wLCAweDgwLCAwKTsKK3N0YXRp
-YyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20xX2F1dG9fcG9pbnQyX3RlbXAsIFNfSVJVR08gfCBT
-X0lXVVNSLAorCQkJICAgIHNob3dfdGVtcCwgc3RvcmVfdGVtcCwgMHg4MSwgMCk7CitzdGF0aWMg
-U0VOU09SX0RFVklDRV9BVFRSXzIocHdtMV9hdXRvX3BvaW50M190ZW1wLCBTX0lSVUdPIHwgU19J
-V1VTUiwKKwkJCSAgICBzaG93X3RlbXAsIHN0b3JlX3RlbXAsIDB4ODIsIDApOworc3RhdGljIFNF
-TlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTFfYXV0b19wb2ludDRfdGVtcCwgU19JUlVHTyB8IFNfSVdV
-U1IsCisJCQkgICAgc2hvd190ZW1wLCBzdG9yZV90ZW1wLCAweDgzLCAwKTsKK3N0YXRpYyBTRU5T
-T1JfREVWSUNFX0FUVFJfMihwd20xX2F1dG9fcG9pbnQ1X3RlbXAsIFNfSVJVR08gfCBTX0lXVVNS
-LAorCQkJICAgIHNob3dfdGVtcCwgc3RvcmVfdGVtcCwgMHg4NCwgMCk7CisKKy8qIDcuMi4xMjAu
-Li4gMHg4NS0weDg4IFBXTSAoWS1heGlzKSB0cmFuc2l0aW9uICovCitzdGF0aWMgU0VOU09SX0RF
-VklDRV9BVFRSKHB3bTFfYXV0b19wb2ludDFfcHdtLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAg
-c2hvd19wd20sIHN0b3JlX3B3bSwgMHg4NSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3
-bTFfYXV0b19wb2ludDJfcHdtLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19wd20sIHN0
-b3JlX3B3bSwgMHg4Nik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTFfYXV0b19wb2lu
-dDNfcHdtLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19wd20sIHN0b3JlX3B3bSwgMHg4
-Nyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTFfYXV0b19wb2ludDRfcHdtLCBTX0lS
-VUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19wd20sIHN0b3JlX3B3bSwgMHg4OCk7CitzdGF0aWMg
-U0VOU09SX0RFVklDRV9BVFRSKHB3bTFfYXV0b19wb2ludDVfcHdtLCBTX0lSVUdPLCBzaG93X3B3
-bSwgTlVMTCwgMCk7CisKKy8qIDcuMi4xMjQgVGFibGUgMiBYLWF4aXMgVHJhbnNpdGlvbiBQb2lu
-dCAxIFJlZ2lzdGVyICovCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMl9hdXRvX3Bv
-aW50MV90ZW1wLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgICBzaG93X3RlbXAsIHN0b3JlX3Rl
-bXAsIDB4OTAsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTJfYXV0b19wb2lu
-dDJfdGVtcCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgICAgc2hvd190ZW1wLCBzdG9yZV90ZW1w
-LCAweDkxLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20yX2F1dG9fcG9pbnQz
-X3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJICAgIHNob3dfdGVtcCwgc3RvcmVfdGVtcCwg
-MHg5MiwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMl9hdXRvX3BvaW50NF90
-ZW1wLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgICBzaG93X3RlbXAsIHN0b3JlX3RlbXAsIDB4
-OTMsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTJfYXV0b19wb2ludDVfdGVt
-cCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgICAgc2hvd190ZW1wLCBzdG9yZV90ZW1wLCAweDk0
-LCAwKTsKKworLyogNy4yLjEyOSBUYWJsZSAyIFktYXhpcyBUcmFuc2l0aW9uIFBvaW50IDEgUmVn
-aXN0ZXIgKi8KK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMl9hdXRvX3BvaW50MV9wd20s
-IFNfSVJVR08gfCBTX0lXVVNSLAorCQkJICBzaG93X3B3bSwgc3RvcmVfcHdtLCAweDk1KTsKK3N0
-YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMl9hdXRvX3BvaW50Ml9wd20sIFNfSVJVR08gfCBT
-X0lXVVNSLAorCQkJICBzaG93X3B3bSwgc3RvcmVfcHdtLCAweDk2KTsKK3N0YXRpYyBTRU5TT1Jf
-REVWSUNFX0FUVFIocHdtMl9hdXRvX3BvaW50M19wd20sIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJ
-ICBzaG93X3B3bSwgc3RvcmVfcHdtLCAweDk3KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIo
-cHdtMl9hdXRvX3BvaW50NF9wd20sIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJICBzaG93X3B3bSwg
-c3RvcmVfcHdtLCAweDk4KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMl9hdXRvX3Bv
-aW50NV9wd20sIFNfSVJVR08sIHNob3dfcHdtLCBOVUxMLCAwKTsKKworLyogNy4yLjEzMyBUYWJs
-ZSAzIFgtYXhpcyBUcmFuc2l0aW9uIFBvaW50IDEgUmVnaXN0ZXIgKi8KK3N0YXRpYyBTRU5TT1Jf
-REVWSUNFX0FUVFJfMihwd20zX2F1dG9fcG9pbnQxX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAor
-CQkJICAgIHNob3dfdGVtcCwgc3RvcmVfdGVtcCwgMHhBMCwgMCk7CitzdGF0aWMgU0VOU09SX0RF
-VklDRV9BVFRSXzIocHdtM19hdXRvX3BvaW50Ml90ZW1wLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJ
-CSAgICBzaG93X3RlbXAsIHN0b3JlX3RlbXAsIDB4QTEsIDApOworc3RhdGljIFNFTlNPUl9ERVZJ
-Q0VfQVRUUl8yKHB3bTNfYXV0b19wb2ludDNfdGVtcCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkg
-ICAgc2hvd190ZW1wLCBzdG9yZV90ZW1wLCAweEEyLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNF
-X0FUVFJfMihwd20zX2F1dG9fcG9pbnQ0X3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJICAg
-IHNob3dfdGVtcCwgc3RvcmVfdGVtcCwgMHhBMywgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9B
-VFRSXzIocHdtM19hdXRvX3BvaW50NV90ZW1wLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgICBz
-aG93X3RlbXAsIHN0b3JlX3RlbXAsIDB4QTQsIDApOworCisvKiA3LjIuMTM4IFRhYmxlIDMgWS1h
-eGlzIFRyYW5zaXRpb24gUG9pbnQgMSBSZWdpc3RlciAqLworc3RhdGljIFNFTlNPUl9ERVZJQ0Vf
-QVRUUihwd20zX2F1dG9fcG9pbnQxX3B3bSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgIHNob3df
-cHdtLCBzdG9yZV9wd20sIDB4QTUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20zX2F1
-dG9fcG9pbnQyX3B3bSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgIHNob3dfcHdtLCBzdG9yZV9w
-d20sIDB4QTYpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20zX2F1dG9fcG9pbnQzX3B3
-bSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgIHNob3dfcHdtLCBzdG9yZV9wd20sIDB4QTcpOwor
-c3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20zX2F1dG9fcG9pbnQ0X3B3bSwgU19JUlVHTyB8
-IFNfSVdVU1IsCisJCQkgIHNob3dfcHdtLCBzdG9yZV9wd20sIDB4QTgpOworc3RhdGljIFNFTlNP
-Ul9ERVZJQ0VfQVRUUihwd20zX2F1dG9fcG9pbnQ1X3B3bSwgU19JUlVHTywgc2hvd19wd20sIE5V
-TEwsIDApOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbmN0NzgwMl9hdXRvX3BvaW50X2F0
-dHJzW10gPSB7CisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQxX3RlbXAuZGV2X2F0
-dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDJfdGVtcC5kZXZfYXR0
-ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3BvaW50M190ZW1wLmRldl9hdHRy
-LmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQ0X3RlbXAuZGV2X2F0dHIu
-YXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDVfdGVtcC5kZXZfYXR0ci5h
-dHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQxX3B3bS5kZXZfYXR0ci5h
-dHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3BvaW50Ml9wd20uZGV2X2F0dHIuYXR0
-ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDNfcHdtLmRldl9hdHRyLmF0dHIs
-CisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQ0X3B3bS5kZXZfYXR0ci5hdHRyLAor
-CSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3BvaW50NV9wd20uZGV2X2F0dHIuYXR0ciwKKwor
-CSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX3BvaW50MV90ZW1wLmRldl9hdHRyLmF0dHIsCisJ
-JnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQyX3RlbXAuZGV2X2F0dHIuYXR0ciwKKwkm
-c2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19wb2ludDNfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZz
-ZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX3BvaW50NF90ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNl
-bnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQ1X3RlbXAuZGV2X2F0dHIuYXR0ciwKKworCSZz
-ZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX3BvaW50MV9wd20uZGV2X2F0dHIuYXR0ciwKKwkmc2Vu
-c29yX2Rldl9hdHRyX3B3bTJfYXV0b19wb2ludDJfcHdtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNv
-cl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQzX3B3bS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3Jf
-ZGV2X2F0dHJfcHdtMl9hdXRvX3BvaW50NF9wd20uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rl
-dl9hdHRyX3B3bTJfYXV0b19wb2ludDVfcHdtLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rl
-dl9hdHRyX3B3bTNfYXV0b19wb2ludDFfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2
-X2F0dHJfcHdtM19hdXRvX3BvaW50Ml90ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZf
-YXR0cl9wd20zX2F1dG9fcG9pbnQzX3RlbXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9h
-dHRyX3B3bTNfYXV0b19wb2ludDRfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0
-dHJfcHdtM19hdXRvX3BvaW50NV90ZW1wLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9h
-dHRyX3B3bTNfYXV0b19wb2ludDFfcHdtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0
-cl9wd20zX2F1dG9fcG9pbnQyX3B3bS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJf
-cHdtM19hdXRvX3BvaW50M19wd20uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3
-bTNfYXV0b19wb2ludDRfcHdtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20z
-X2F1dG9fcG9pbnQ1X3B3bS5kZXZfYXR0ci5hdHRyLAorCisJTlVMTAorfTsKKworc3RhdGljIHN0
-cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbmN0NzgwMl9hdXRvX3BvaW50X2dyb3VwID0geworCS5hdHRy
-cyA9IG5jdDc4MDJfYXV0b19wb2ludF9hdHRycywKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg
-YXR0cmlidXRlX2dyb3VwICpuY3Q3ODAyX2dyb3Vwc1tdID0gewogCSZuY3Q3ODAyX3RlbXBfZ3Jv
-dXAsCiAJJm5jdDc4MDJfaW5fZ3JvdXAsCiAJJm5jdDc4MDJfZmFuX2dyb3VwLAogCSZuY3Q3ODAy
-X3B3bV9ncm91cCwKKwkmbmN0NzgwMl9hdXRvX3BvaW50X2dyb3VwLAogCU5VTEwKIH07CiAKQEAg
-LTk0NSw3ICsxMDY2LDggQEAgc3RhdGljIGludCBuY3Q3ODAyX2RldGVjdChzdHJ1Y3QgaTJjX2Ns
-aWVudCAqY2xpZW50LAogCiBzdGF0aWMgYm9vbCBuY3Q3ODAyX3JlZ21hcF9pc192b2xhdGlsZShz
-dHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCiB7Ci0JcmV0dXJuIHJlZyAhPSBS
-RUdfQkFOSyAmJiByZWcgPD0gMHgyMDsKKwlyZXR1cm4gKHJlZyAhPSBSRUdfQkFOSyAmJiByZWcg
-PD0gMHgyMCkgfHwKKwkJKHJlZyA+PSBSRUdfUFdNKDApICYmIHJlZyA8PSBSRUdfUFdNKDIpKTsK
-IH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIG5jdDc4MDJfcmVnbWFwX2Nv
-bmZpZyA9IHsKLS0gCjEuOS4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
-X19fX19fX19fX18KbG0tc2Vuc29ycyBtYWlsaW5nIGxpc3QKbG0tc2Vuc29yc0BsbS1zZW5zb3Jz
-Lm9yZwpodHRwOi8vbGlzdHMubG0tc2Vuc29ycy5vcmcvbWFpbG1hbi9saXN0aW5mby9sbS1zZW5z
-b3Jz
+Introduced REG_PWM, pwm[1..3]_auto_point[1..5]_temp,
+pwm[1..3]_auto_point[1..5]_pwm, nct7802_auto_point_attrs,
+nct7802_auto_point_group, updated nct7802_regmap_is_volatile
+
+Signed-off-by: Constantine Shulyupin <const@MakeLinux.com>
+---
+
+Changed in v4:
+- fixed expression in nct7802_regmap_is_volatile
+- added pwmX_auto_temp to driver's documentation
+Changed in v3:
+- removed nct7802_auto_point_is_visible
+- removed usage of sysfs_update_group
+- introduced REG_PWM
+- removed S_IWUSR from RO attributes
+- added PWM registers to nct7802_regmap_is_volatile
+Changed in v2:
+- removed PWM_REG, TEMP_REG
+- removed auto_point[1..4]_temp, auto_point[1..4]_pwm
+  and auto_point_crit_temp
+- introduced pwm[1..3]_auto_point[1..5]_temp
+  and pwm[1..3]_auto_point[1..5]_pwm.
+- introduced nct7802_auto_point_is_visible
+- used sysfs_update_group in store_pwm_enable
+
+Default values on my platform:
+
+fan1_alarm:0                    pwm2_auto_point1_temp:25000
+fan1_beep:0                     pwm2_auto_point2_pwm:170
+fan1_input:150000               pwm2_auto_point2_temp:35000
+fan1_min:0                      pwm2_auto_point3_pwm:200
+fan2_alarm:0                    pwm2_auto_point3_temp:45000
+fan2_beep:0                     pwm2_auto_point4_pwm:230
+fan2_input:0                    pwm2_auto_point4_temp:55000
+fan2_min:0                      pwm2_auto_point5_pwm:255
+fan3_alarm:0                    pwm2_auto_point5_temp:60000
+fan3_beep:0                     pwm2_enable:1
+fan3_input:0                    pwm2_mode:1
+fan3_min:0                      pwm3:127
+in0_alarm:0                     pwm3_auto_point1_pwm:140
+in0_beep:0                      pwm3_auto_point1_temp:25000
+in0_input:3312                  pwm3_auto_point2_pwm:170
+in0_max:4092                    pwm3_auto_point2_temp:35000
+in0_min:0                       pwm3_auto_point3_pwm:200
+in1_input:902                   pwm3_auto_point3_temp:45000
+in3_alarm:0                     pwm3_auto_point4_pwm:230
+in3_beep:0                      pwm3_auto_point4_temp:55000
+in3_input:1808                  pwm3_auto_point5_pwm:255
+in3_max:2046                    pwm3_auto_point5_temp:60000
+in3_min:0                       pwm3_enable:1
+in4_alarm:0                     pwm3_mode:1
+in4_beep:0                      temp1_beep:0
+in4_input:1508                  temp1_crit:100000
+in4_max:2046                    temp1_crit_alarm:0
+in4_min:0                       temp1_fault:0
+name:nct7802                    temp1_input:35500
+pwm1:127                        temp1_max:85000
+pwm1_auto_point1_pwm:140        temp1_max_alarm:0
+pwm1_auto_point1_temp:25000     temp1_min:0
+pwm1_auto_point2_pwm:170        temp1_min_alarm:0
+pwm1_auto_point2_temp:35000     temp1_type:4
+pwm1_auto_point3_pwm:200        temp4_beep:0
+pwm1_auto_point3_temp:45000     temp4_crit:100000
+pwm1_auto_point4_pwm:230        temp4_crit_alarm:0
+pwm1_auto_point4_temp:55000     temp4_input:39000
+pwm1_auto_point5_pwm:255        temp4_max:85000
+pwm1_auto_point5_temp:60000     temp4_max_alarm:0
+pwm1_enable:1                   temp4_min:0
+pwm1_mode:1                     temp4_min_alarm:0
+pwm2:127                        temp6_beep:0
+pwm2_auto_point1_pwm:140        temp6_input:0
+
+---
+ Documentation/hwmon/nct7802 |   5 +-
+ drivers/hwmon/nct7802.c     | 130 ++++++++++++++++++++++++++++++++++++++++++--
+ 2 files changed, 128 insertions(+), 7 deletions(-)
+
+diff --git a/Documentation/hwmon/nct7802 b/Documentation/hwmon/nct7802
+index 2e00f5e..c5c25a5 100644
+--- a/Documentation/hwmon/nct7802
++++ b/Documentation/hwmon/nct7802
+@@ -5,7 +5,7 @@ Supported chips:
+   * Nuvoton NCT7802Y
+     Prefix: 'nct7802'
+     Addresses scanned: I2C 0x28..0x2f
+-    Datasheet: Available from Nuvoton web site
++    Datasheet: http://www.nuvoton.com/hq/products/cloud-computing/hardware-monitors/desktop-server-series/nct7802y/
+ 
+ Authors:
+         Guenter Roeck <linux@roeck-us.net>
+@@ -17,8 +17,7 @@ This driver implements support for the Nuvoton NCT7802Y hardware monitoring
+ chip. NCT7802Y supports 6 temperature sensors, 5 voltage sensors, and 3 fan
+ speed sensors.
+ 
+-The chip also supports intelligent fan speed control. This functionality is
+-not currently supported by the driver.
++Smart Fan™ speed control is avilabel via pwmX_auto_temp attributes.
+ 
+ Tested Boards and BIOS Versions
+ -------------------------------
+diff --git a/drivers/hwmon/nct7802.c b/drivers/hwmon/nct7802.c
+index d018571..c1898ba 100644
+--- a/drivers/hwmon/nct7802.c
++++ b/drivers/hwmon/nct7802.c
+@@ -53,6 +53,7 @@ static const u8 REG_VOLTAGE_LIMIT_MSB_SHIFT[2][5] = {
+ #define REG_PECI_ENABLE		0x23
+ #define REG_FAN_ENABLE		0x24
+ #define REG_VMON_ENABLE		0x25
++#define REG_PWM(x)		(0x60 + (x))
+ #define REG_SMARTFAN_EN(x)      (0x64 + (x) / 2)
+ #define SMARTFAN_EN_SHIFT(x)    ((x) % 2 * 4)
+ #define REG_VENDOR_ID		0xfd
+@@ -130,6 +131,9 @@ static ssize_t show_pwm(struct device *dev, struct device_attribute *devattr,
+ 	unsigned int val;
+ 	int ret;
+ 
++	if (!attr->index)
++		return sprintf(buf, "255\n");
++
+ 	ret = regmap_read(data->regmap, attr->index, &val);
+ 	if (ret < 0)
+ 		return ret;
+@@ -826,9 +830,12 @@ static SENSOR_DEVICE_ATTR(pwm2_mode, S_IRUGO, show_pwm_mode, NULL, 1);
+ static SENSOR_DEVICE_ATTR(pwm3_mode, S_IRUGO, show_pwm_mode, NULL, 2);
+ 
+ /* 7.2.91... Fan Control Output Value */
+-static SENSOR_DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR, show_pwm, store_pwm, 0x60);
+-static SENSOR_DEVICE_ATTR(pwm2, S_IRUGO | S_IWUSR, show_pwm, store_pwm, 0x61);
+-static SENSOR_DEVICE_ATTR(pwm3, S_IRUGO | S_IWUSR, show_pwm, store_pwm, 0x62);
++static SENSOR_DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR, show_pwm, store_pwm,
++			  REG_PWM(0));
++static SENSOR_DEVICE_ATTR(pwm2, S_IRUGO | S_IWUSR, show_pwm, store_pwm,
++			  REG_PWM(1));
++static SENSOR_DEVICE_ATTR(pwm3, S_IRUGO | S_IWUSR, show_pwm, store_pwm,
++			  REG_PWM(2));
+ 
+ /* 7.2.95... Temperature to Fan mapping Relationships Register */
+ static SENSOR_DEVICE_ATTR(pwm1_enable, S_IRUGO | S_IWUSR, show_pwm_enable,
+@@ -893,11 +900,125 @@ static struct attribute_group nct7802_pwm_group = {
+ 	.attrs = nct7802_pwm_attrs,
+ };
+ 
++/* 7.2.115... 0x80-0x83, 0x84 Temperature (X-axis) transition */
++static SENSOR_DEVICE_ATTR_2(pwm1_auto_point1_temp, S_IRUGO | S_IWUSR,
++			    show_temp, store_temp, 0x80, 0);
++static SENSOR_DEVICE_ATTR_2(pwm1_auto_point2_temp, S_IRUGO | S_IWUSR,
++			    show_temp, store_temp, 0x81, 0);
++static SENSOR_DEVICE_ATTR_2(pwm1_auto_point3_temp, S_IRUGO | S_IWUSR,
++			    show_temp, store_temp, 0x82, 0);
++static SENSOR_DEVICE_ATTR_2(pwm1_auto_point4_temp, S_IRUGO | S_IWUSR,
++			    show_temp, store_temp, 0x83, 0);
++static SENSOR_DEVICE_ATTR_2(pwm1_auto_point5_temp, S_IRUGO | S_IWUSR,
++			    show_temp, store_temp, 0x84, 0);
++
++/* 7.2.120... 0x85-0x88 PWM (Y-axis) transition */
++static SENSOR_DEVICE_ATTR(pwm1_auto_point1_pwm, S_IRUGO | S_IWUSR,
++			  show_pwm, store_pwm, 0x85);
++static SENSOR_DEVICE_ATTR(pwm1_auto_point2_pwm, S_IRUGO | S_IWUSR,
++			  show_pwm, store_pwm, 0x86);
++static SENSOR_DEVICE_ATTR(pwm1_auto_point3_pwm, S_IRUGO | S_IWUSR,
++			  show_pwm, store_pwm, 0x87);
++static SENSOR_DEVICE_ATTR(pwm1_auto_point4_pwm, S_IRUGO | S_IWUSR,
++			  show_pwm, store_pwm, 0x88);
++static SENSOR_DEVICE_ATTR(pwm1_auto_point5_pwm, S_IRUGO, show_pwm, NULL, 0);
++
++/* 7.2.124 Table 2 X-axis Transition Point 1 Register */
++static SENSOR_DEVICE_ATTR_2(pwm2_auto_point1_temp, S_IRUGO | S_IWUSR,
++			    show_temp, store_temp, 0x90, 0);
++static SENSOR_DEVICE_ATTR_2(pwm2_auto_point2_temp, S_IRUGO | S_IWUSR,
++			    show_temp, store_temp, 0x91, 0);
++static SENSOR_DEVICE_ATTR_2(pwm2_auto_point3_temp, S_IRUGO | S_IWUSR,
++			    show_temp, store_temp, 0x92, 0);
++static SENSOR_DEVICE_ATTR_2(pwm2_auto_point4_temp, S_IRUGO | S_IWUSR,
++			    show_temp, store_temp, 0x93, 0);
++static SENSOR_DEVICE_ATTR_2(pwm2_auto_point5_temp, S_IRUGO | S_IWUSR,
++			    show_temp, store_temp, 0x94, 0);
++
++/* 7.2.129 Table 2 Y-axis Transition Point 1 Register */
++static SENSOR_DEVICE_ATTR(pwm2_auto_point1_pwm, S_IRUGO | S_IWUSR,
++			  show_pwm, store_pwm, 0x95);
++static SENSOR_DEVICE_ATTR(pwm2_auto_point2_pwm, S_IRUGO | S_IWUSR,
++			  show_pwm, store_pwm, 0x96);
++static SENSOR_DEVICE_ATTR(pwm2_auto_point3_pwm, S_IRUGO | S_IWUSR,
++			  show_pwm, store_pwm, 0x97);
++static SENSOR_DEVICE_ATTR(pwm2_auto_point4_pwm, S_IRUGO | S_IWUSR,
++			  show_pwm, store_pwm, 0x98);
++static SENSOR_DEVICE_ATTR(pwm2_auto_point5_pwm, S_IRUGO, show_pwm, NULL, 0);
++
++/* 7.2.133 Table 3 X-axis Transition Point 1 Register */
++static SENSOR_DEVICE_ATTR_2(pwm3_auto_point1_temp, S_IRUGO | S_IWUSR,
++			    show_temp, store_temp, 0xA0, 0);
++static SENSOR_DEVICE_ATTR_2(pwm3_auto_point2_temp, S_IRUGO | S_IWUSR,
++			    show_temp, store_temp, 0xA1, 0);
++static SENSOR_DEVICE_ATTR_2(pwm3_auto_point3_temp, S_IRUGO | S_IWUSR,
++			    show_temp, store_temp, 0xA2, 0);
++static SENSOR_DEVICE_ATTR_2(pwm3_auto_point4_temp, S_IRUGO | S_IWUSR,
++			    show_temp, store_temp, 0xA3, 0);
++static SENSOR_DEVICE_ATTR_2(pwm3_auto_point5_temp, S_IRUGO | S_IWUSR,
++			    show_temp, store_temp, 0xA4, 0);
++
++/* 7.2.138 Table 3 Y-axis Transition Point 1 Register */
++static SENSOR_DEVICE_ATTR(pwm3_auto_point1_pwm, S_IRUGO | S_IWUSR,
++			  show_pwm, store_pwm, 0xA5);
++static SENSOR_DEVICE_ATTR(pwm3_auto_point2_pwm, S_IRUGO | S_IWUSR,
++			  show_pwm, store_pwm, 0xA6);
++static SENSOR_DEVICE_ATTR(pwm3_auto_point3_pwm, S_IRUGO | S_IWUSR,
++			  show_pwm, store_pwm, 0xA7);
++static SENSOR_DEVICE_ATTR(pwm3_auto_point4_pwm, S_IRUGO | S_IWUSR,
++			  show_pwm, store_pwm, 0xA8);
++static SENSOR_DEVICE_ATTR(pwm3_auto_point5_pwm, S_IRUGO, show_pwm, NULL, 0);
++
++static struct attribute *nct7802_auto_point_attrs[] = {
++	&sensor_dev_attr_pwm1_auto_point1_temp.dev_attr.attr,
++	&sensor_dev_attr_pwm1_auto_point2_temp.dev_attr.attr,
++	&sensor_dev_attr_pwm1_auto_point3_temp.dev_attr.attr,
++	&sensor_dev_attr_pwm1_auto_point4_temp.dev_attr.attr,
++	&sensor_dev_attr_pwm1_auto_point5_temp.dev_attr.attr,
++
++	&sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
++	&sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
++	&sensor_dev_attr_pwm1_auto_point3_pwm.dev_attr.attr,
++	&sensor_dev_attr_pwm1_auto_point4_pwm.dev_attr.attr,
++	&sensor_dev_attr_pwm1_auto_point5_pwm.dev_attr.attr,
++
++	&sensor_dev_attr_pwm2_auto_point1_temp.dev_attr.attr,
++	&sensor_dev_attr_pwm2_auto_point2_temp.dev_attr.attr,
++	&sensor_dev_attr_pwm2_auto_point3_temp.dev_attr.attr,
++	&sensor_dev_attr_pwm2_auto_point4_temp.dev_attr.attr,
++	&sensor_dev_attr_pwm2_auto_point5_temp.dev_attr.attr,
++
++	&sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
++	&sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
++	&sensor_dev_attr_pwm2_auto_point3_pwm.dev_attr.attr,
++	&sensor_dev_attr_pwm2_auto_point4_pwm.dev_attr.attr,
++	&sensor_dev_attr_pwm2_auto_point5_pwm.dev_attr.attr,
++
++	&sensor_dev_attr_pwm3_auto_point1_temp.dev_attr.attr,
++	&sensor_dev_attr_pwm3_auto_point2_temp.dev_attr.attr,
++	&sensor_dev_attr_pwm3_auto_point3_temp.dev_attr.attr,
++	&sensor_dev_attr_pwm3_auto_point4_temp.dev_attr.attr,
++	&sensor_dev_attr_pwm3_auto_point5_temp.dev_attr.attr,
++
++	&sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
++	&sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
++	&sensor_dev_attr_pwm3_auto_point3_pwm.dev_attr.attr,
++	&sensor_dev_attr_pwm3_auto_point4_pwm.dev_attr.attr,
++	&sensor_dev_attr_pwm3_auto_point5_pwm.dev_attr.attr,
++
++	NULL
++};
++
++static struct attribute_group nct7802_auto_point_group = {
++	.attrs = nct7802_auto_point_attrs,
++};
++
+ static const struct attribute_group *nct7802_groups[] = {
+ 	&nct7802_temp_group,
+ 	&nct7802_in_group,
+ 	&nct7802_fan_group,
+ 	&nct7802_pwm_group,
++	&nct7802_auto_point_group,
+ 	NULL
+ };
+ 
+@@ -945,7 +1066,8 @@ static int nct7802_detect(struct i2c_client *client,
+ 
+ static bool nct7802_regmap_is_volatile(struct device *dev, unsigned int reg)
+ {
+-	return reg != REG_BANK && reg <= 0x20;
++	return (reg != REG_BANK && reg <= 0x20) ||
++		(reg >= REG_PWM(0) && reg <= REG_PWM(2));
+ }
+ 
+ static const struct regmap_config nct7802_regmap_config = {
+-- 
+1.9.1
diff --git a/a/content_digest b/N1/content_digest
index f1ba75c..ba8fdfd 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,227 +1,290 @@
  "From\0Constantine Shulyupin <const@makelinux.com>\0"
- "Subject\0[lm-sensors] [PATCH v4] hwmon: (nct7802) Add autopoint attributes\0"
- "Date\0Sat, 25 Jul 2015 21:45:50 +0000\0"
+ "Subject\0[PATCH v4] hwmon: (nct7802) Add autopoint attributes\0"
+ "Date\0Sun, 26 Jul 2015 00:45:50 +0300\0"
  "To\0Jean Delvare <jdelvare@suse.com>"
   Guenter Roeck <linux@roeck-us.net>
   Jonathan Corbet <corbet@lwn.net>
-  open list:HARDWARE MONITORING <lm-sensors@lm-sensors.org>
-  open list:DOCUMENTATION <linux-doc@vger.kernel.org>
- " open list <linux-kernel@vger.kernel.org>\0"
+  lm-sensors@lm-sensors.org (open list:HARDWARE MONITORING)
+  linux-doc@vger.kernel.org (open list:DOCUMENTATION)
+ " linux-kernel@vger.kernel.org (open list)\0"
  "Cc\0Constantine Shulyupin <const@makelinux.com>\0"
  "\00:1\0"
  "b\0"
- "SW50cm9kdWNlZCBSRUdfUFdNLCBwd21bMS4uM11fYXV0b19wb2ludFsxLi41XV90ZW1wLApwd21b\n"
- "MS4uM11fYXV0b19wb2ludFsxLi41XV9wd20sIG5jdDc4MDJfYXV0b19wb2ludF9hdHRycywKbmN0\n"
- "NzgwMl9hdXRvX3BvaW50X2dyb3VwLCB1cGRhdGVkIG5jdDc4MDJfcmVnbWFwX2lzX3ZvbGF0aWxl\n"
- "CgpTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluZSBTaHVseXVwaW4gPGNvbnN0QE1ha2VMaW51eC5j\n"
- "b20+Ci0tLQoKQ2hhbmdlZCBpbiB2NDoKLSBmaXhlZCBleHByZXNzaW9uIGluIG5jdDc4MDJfcmVn\n"
- "bWFwX2lzX3ZvbGF0aWxlCi0gYWRkZWQgcHdtWF9hdXRvX3RlbXAgdG8gZHJpdmVyJ3MgZG9jdW1l\n"
- "bnRhdGlvbgpDaGFuZ2VkIGluIHYzOgotIHJlbW92ZWQgbmN0NzgwMl9hdXRvX3BvaW50X2lzX3Zp\n"
- "c2libGUKLSByZW1vdmVkIHVzYWdlIG9mIHN5c2ZzX3VwZGF0ZV9ncm91cAotIGludHJvZHVjZWQg\n"
- "UkVHX1BXTQotIHJlbW92ZWQgU19JV1VTUiBmcm9tIFJPIGF0dHJpYnV0ZXMKLSBhZGRlZCBQV00g\n"
- "cmVnaXN0ZXJzIHRvIG5jdDc4MDJfcmVnbWFwX2lzX3ZvbGF0aWxlCkNoYW5nZWQgaW4gdjI6Ci0g\n"
- "cmVtb3ZlZCBQV01fUkVHLCBURU1QX1JFRwotIHJlbW92ZWQgYXV0b19wb2ludFsxLi40XV90ZW1w\n"
- "LCBhdXRvX3BvaW50WzEuLjRdX3B3bQogIGFuZCBhdXRvX3BvaW50X2NyaXRfdGVtcAotIGludHJv\n"
- "ZHVjZWQgcHdtWzEuLjNdX2F1dG9fcG9pbnRbMS4uNV1fdGVtcAogIGFuZCBwd21bMS4uM11fYXV0\n"
- "b19wb2ludFsxLi41XV9wd20uCi0gaW50cm9kdWNlZCBuY3Q3ODAyX2F1dG9fcG9pbnRfaXNfdmlz\n"
- "aWJsZQotIHVzZWQgc3lzZnNfdXBkYXRlX2dyb3VwIGluIHN0b3JlX3B3bV9lbmFibGUKCkRlZmF1\n"
- "bHQgdmFsdWVzIG9uIG15IHBsYXRmb3JtOgoKZmFuMV9hbGFybTowICAgICAgICAgICAgICAgICAg\n"
- "ICBwd20yX2F1dG9fcG9pbnQxX3RlbXA6MjUwMDAKZmFuMV9iZWVwOjAgICAgICAgICAgICAgICAg\n"
- "ICAgICBwd20yX2F1dG9fcG9pbnQyX3B3bToxNzAKZmFuMV9pbnB1dDoxNTAwMDAgICAgICAgICAg\n"
- "ICAgICBwd20yX2F1dG9fcG9pbnQyX3RlbXA6MzUwMDAKZmFuMV9taW46MCAgICAgICAgICAgICAg\n"
- "ICAgICAgICBwd20yX2F1dG9fcG9pbnQzX3B3bToyMDAKZmFuMl9hbGFybTowICAgICAgICAgICAg\n"
- "ICAgICAgICBwd20yX2F1dG9fcG9pbnQzX3RlbXA6NDUwMDAKZmFuMl9iZWVwOjAgICAgICAgICAg\n"
- "ICAgICAgICAgICBwd20yX2F1dG9fcG9pbnQ0X3B3bToyMzAKZmFuMl9pbnB1dDowICAgICAgICAg\n"
- "ICAgICAgICAgICBwd20yX2F1dG9fcG9pbnQ0X3RlbXA6NTUwMDAKZmFuMl9taW46MCAgICAgICAg\n"
- "ICAgICAgICAgICAgICBwd20yX2F1dG9fcG9pbnQ1X3B3bToyNTUKZmFuM19hbGFybTowICAgICAg\n"
- "ICAgICAgICAgICAgICBwd20yX2F1dG9fcG9pbnQ1X3RlbXA6NjAwMDAKZmFuM19iZWVwOjAgICAg\n"
- "ICAgICAgICAgICAgICAgICBwd20yX2VuYWJsZToxCmZhbjNfaW5wdXQ6MCAgICAgICAgICAgICAg\n"
- "ICAgICAgcHdtMl9tb2RlOjEKZmFuM19taW46MCAgICAgICAgICAgICAgICAgICAgICBwd20zOjEy\n"
- "NwppbjBfYWxhcm06MCAgICAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19wb2ludDFfcHdtOjE0\n"
- "MAppbjBfYmVlcDowICAgICAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19wb2ludDFfdGVtcDoy\n"
- "NTAwMAppbjBfaW5wdXQ6MzMxMiAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19wb2ludDJfcHdt\n"
- "OjE3MAppbjBfbWF4OjQwOTIgICAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19wb2ludDJfdGVt\n"
- "cDozNTAwMAppbjBfbWluOjAgICAgICAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19wb2ludDNf\n"
- "cHdtOjIwMAppbjFfaW5wdXQ6OTAyICAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19wb2ludDNf\n"
- "dGVtcDo0NTAwMAppbjNfYWxhcm06MCAgICAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19wb2lu\n"
- "dDRfcHdtOjIzMAppbjNfYmVlcDowICAgICAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19wb2lu\n"
- "dDRfdGVtcDo1NTAwMAppbjNfaW5wdXQ6MTgwOCAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19w\n"
- "b2ludDVfcHdtOjI1NQppbjNfbWF4OjIwNDYgICAgICAgICAgICAgICAgICAgIHB3bTNfYXV0b19w\n"
- "b2ludDVfdGVtcDo2MDAwMAppbjNfbWluOjAgICAgICAgICAgICAgICAgICAgICAgIHB3bTNfZW5h\n"
- "YmxlOjEKaW40X2FsYXJtOjAgICAgICAgICAgICAgICAgICAgICBwd20zX21vZGU6MQppbjRfYmVl\n"
- "cDowICAgICAgICAgICAgICAgICAgICAgIHRlbXAxX2JlZXA6MAppbjRfaW5wdXQ6MTUwOCAgICAg\n"
- "ICAgICAgICAgICAgIHRlbXAxX2NyaXQ6MTAwMDAwCmluNF9tYXg6MjA0NiAgICAgICAgICAgICAg\n"
- "ICAgICAgdGVtcDFfY3JpdF9hbGFybTowCmluNF9taW46MCAgICAgICAgICAgICAgICAgICAgICAg\n"
- "dGVtcDFfZmF1bHQ6MApuYW1lOm5jdDc4MDIgICAgICAgICAgICAgICAgICAgIHRlbXAxX2lucHV0\n"
- "OjM1NTAwCnB3bTE6MTI3ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcDFfbWF4Ojg1MDAwCnB3\n"
- "bTFfYXV0b19wb2ludDFfcHdtOjE0MCAgICAgICAgdGVtcDFfbWF4X2FsYXJtOjAKcHdtMV9hdXRv\n"
- "X3BvaW50MV90ZW1wOjI1MDAwICAgICB0ZW1wMV9taW46MApwd20xX2F1dG9fcG9pbnQyX3B3bTox\n"
- "NzAgICAgICAgIHRlbXAxX21pbl9hbGFybTowCnB3bTFfYXV0b19wb2ludDJfdGVtcDozNTAwMCAg\n"
- "ICAgdGVtcDFfdHlwZTo0CnB3bTFfYXV0b19wb2ludDNfcHdtOjIwMCAgICAgICAgdGVtcDRfYmVl\n"
- "cDowCnB3bTFfYXV0b19wb2ludDNfdGVtcDo0NTAwMCAgICAgdGVtcDRfY3JpdDoxMDAwMDAKcHdt\n"
- "MV9hdXRvX3BvaW50NF9wd206MjMwICAgICAgICB0ZW1wNF9jcml0X2FsYXJtOjAKcHdtMV9hdXRv\n"
- "X3BvaW50NF90ZW1wOjU1MDAwICAgICB0ZW1wNF9pbnB1dDozOTAwMApwd20xX2F1dG9fcG9pbnQ1\n"
- "X3B3bToyNTUgICAgICAgIHRlbXA0X21heDo4NTAwMApwd20xX2F1dG9fcG9pbnQ1X3RlbXA6NjAw\n"
- "MDAgICAgIHRlbXA0X21heF9hbGFybTowCnB3bTFfZW5hYmxlOjEgICAgICAgICAgICAgICAgICAg\n"
- "dGVtcDRfbWluOjAKcHdtMV9tb2RlOjEgICAgICAgICAgICAgICAgICAgICB0ZW1wNF9taW5fYWxh\n"
- "cm06MApwd20yOjEyNyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXA2X2JlZXA6MApwd20yX2F1\n"
- "dG9fcG9pbnQxX3B3bToxNDAgICAgICAgIHRlbXA2X2lucHV0OjAKCi0tLQogRG9jdW1lbnRhdGlv\n"
- "bi9od21vbi9uY3Q3ODAyIHwgICA1ICstCiBkcml2ZXJzL2h3bW9uL25jdDc4MDIuYyAgICAgfCAx\n"
- "MzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KIDIgZmlsZXMg\n"
- "Y2hhbmdlZCwgMTI4IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv\n"
- "RG9jdW1lbnRhdGlvbi9od21vbi9uY3Q3ODAyIGIvRG9jdW1lbnRhdGlvbi9od21vbi9uY3Q3ODAy\n"
- "CmluZGV4IDJlMDBmNWUuLmM1YzI1YTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24v\n"
- "bmN0NzgwMgorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL25jdDc4MDIKQEAgLTUsNyArNSw3IEBA\n"
- "IFN1cHBvcnRlZCBjaGlwczoKICAgKiBOdXZvdG9uIE5DVDc4MDJZCiAgICAgUHJlZml4OiAnbmN0\n"
- "NzgwMicKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MjguLjB4MmYKLSAgICBEYXRhc2hl\n"
- "ZXQ6IEF2YWlsYWJsZSBmcm9tIE51dm90b24gd2ViIHNpdGUKKyAgICBEYXRhc2hlZXQ6IGh0dHA6\n"
- "Ly93d3cubnV2b3Rvbi5jb20vaHEvcHJvZHVjdHMvY2xvdWQtY29tcHV0aW5nL2hhcmR3YXJlLW1v\n"
- "bml0b3JzL2Rlc2t0b3Atc2VydmVyLXNlcmllcy9uY3Q3ODAyeS8KIAogQXV0aG9yczoKICAgICAg\n"
- "ICAgR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMubmV0PgpAQCAtMTcsOCArMTcsNyBAQCBU\n"
- "aGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBOdXZvdG9uIE5DVDc4MDJZIGhh\n"
- "cmR3YXJlIG1vbml0b3JpbmcKIGNoaXAuIE5DVDc4MDJZIHN1cHBvcnRzIDYgdGVtcGVyYXR1cmUg\n"
- "c2Vuc29ycywgNSB2b2x0YWdlIHNlbnNvcnMsIGFuZCAzIGZhbgogc3BlZWQgc2Vuc29ycy4KIAot\n"
- "VGhlIGNoaXAgYWxzbyBzdXBwb3J0cyBpbnRlbGxpZ2VudCBmYW4gc3BlZWQgY29udHJvbC4gVGhp\n"
- "cyBmdW5jdGlvbmFsaXR5IGlzCi1ub3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVy\n"
- "LgorU21hcnQgRmFu4oSiIHNwZWVkIGNvbnRyb2wgaXMgYXZpbGFiZWwgdmlhIHB3bVhfYXV0b190\n"
- "ZW1wIGF0dHJpYnV0ZXMuCiAKIFRlc3RlZCBCb2FyZHMgYW5kIEJJT1MgVmVyc2lvbnMKIC0tLS0t\n"
- "LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbmN0\n"
- "NzgwMi5jIGIvZHJpdmVycy9od21vbi9uY3Q3ODAyLmMKaW5kZXggZDAxODU3MS4uYzE4OThiYSAx\n"
- "MDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9uY3Q3ODAyLmMKKysrIGIvZHJpdmVycy9od21vbi9u\n"
- "Y3Q3ODAyLmMKQEAgLTUzLDYgKzUzLDcgQEAgc3RhdGljIGNvbnN0IHU4IFJFR19WT0xUQUdFX0xJ\n"
- "TUlUX01TQl9TSElGVFsyXVs1XSA9IHsKICNkZWZpbmUgUkVHX1BFQ0lfRU5BQkxFCQkweDIzCiAj\n"
- "ZGVmaW5lIFJFR19GQU5fRU5BQkxFCQkweDI0CiAjZGVmaW5lIFJFR19WTU9OX0VOQUJMRQkJMHgy\n"
- "NQorI2RlZmluZSBSRUdfUFdNKHgpCQkoMHg2MCArICh4KSkKICNkZWZpbmUgUkVHX1NNQVJURkFO\n"
- "X0VOKHgpICAgICAgKDB4NjQgKyAoeCkgLyAyKQogI2RlZmluZSBTTUFSVEZBTl9FTl9TSElGVCh4\n"
- "KSAgICAoKHgpICUgMiAqIDQpCiAjZGVmaW5lIFJFR19WRU5ET1JfSUQJCTB4ZmQKQEAgLTEzMCw2\n"
- "ICsxMzEsOSBAQCBzdGF0aWMgc3NpemVfdCBzaG93X3B3bShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0\n"
- "cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAogCXVuc2lnbmVkIGludCB2YWw7CiAJaW50\n"
- "IHJldDsKIAorCWlmICghYXR0ci0+aW5kZXgpCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjI1NVxu\n"
- "Iik7CisKIAlyZXQgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIGF0dHItPmluZGV4LCAmdmFs\n"
- "KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTgyNiw5ICs4MzAsMTIgQEAgc3Rh\n"
- "dGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20yX21vZGUsIFNfSVJVR08sIHNob3dfcHdtX21vZGUs\n"
- "IE5VTEwsIDEpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20zX21vZGUsIFNfSVJVR08s\n"
- "IHNob3dfcHdtX21vZGUsIE5VTEwsIDIpOwogCiAvKiA3LjIuOTEuLi4gRmFuIENvbnRyb2wgT3V0\n"
- "cHV0IFZhbHVlICovCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTEsIFNfSVJVR08gfCBT\n"
- "X0lXVVNSLCBzaG93X3B3bSwgc3RvcmVfcHdtLCAweDYwKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNF\n"
- "X0FUVFIocHdtMiwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtLCBzdG9yZV9wd20sIDB4NjEp\n"
- "Owotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20zLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hv\n"
- "d19wd20sIHN0b3JlX3B3bSwgMHg2Mik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTEs\n"
- "IFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3B3bSwgc3RvcmVfcHdtLAorCQkJICBSRUdfUFdNKDAp\n"
- "KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMiwgU19JUlVHTyB8IFNfSVdVU1IsIHNo\n"
- "b3dfcHdtLCBzdG9yZV9wd20sCisJCQkgIFJFR19QV00oMSkpOworc3RhdGljIFNFTlNPUl9ERVZJ\n"
- "Q0VfQVRUUihwd20zLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wd20sIHN0b3JlX3B3bSwKKwkJ\n"
- "CSAgUkVHX1BXTSgyKSk7CiAKIC8qIDcuMi45NS4uLiBUZW1wZXJhdHVyZSB0byBGYW4gbWFwcGlu\n"
- "ZyBSZWxhdGlvbnNoaXBzIFJlZ2lzdGVyICovCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3\n"
- "bTFfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wd21fZW5hYmxlLApAQCAtODkzLDEx\n"
- "ICs5MDAsMTI1IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG5jdDc4MDJfcHdtX2dy\n"
- "b3VwID0gewogCS5hdHRycyA9IG5jdDc4MDJfcHdtX2F0dHJzLAogfTsKIAorLyogNy4yLjExNS4u\n"
- "LiAweDgwLTB4ODMsIDB4ODQgVGVtcGVyYXR1cmUgKFgtYXhpcykgdHJhbnNpdGlvbiAqLworc3Rh\n"
- "dGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTFfYXV0b19wb2ludDFfdGVtcCwgU19JUlVHTyB8\n"
- "IFNfSVdVU1IsCisJCQkgICAgc2hvd190ZW1wLCBzdG9yZV90ZW1wLCAweDgwLCAwKTsKK3N0YXRp\n"
- "YyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20xX2F1dG9fcG9pbnQyX3RlbXAsIFNfSVJVR08gfCBT\n"
- "X0lXVVNSLAorCQkJICAgIHNob3dfdGVtcCwgc3RvcmVfdGVtcCwgMHg4MSwgMCk7CitzdGF0aWMg\n"
- "U0VOU09SX0RFVklDRV9BVFRSXzIocHdtMV9hdXRvX3BvaW50M190ZW1wLCBTX0lSVUdPIHwgU19J\n"
- "V1VTUiwKKwkJCSAgICBzaG93X3RlbXAsIHN0b3JlX3RlbXAsIDB4ODIsIDApOworc3RhdGljIFNF\n"
- "TlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTFfYXV0b19wb2ludDRfdGVtcCwgU19JUlVHTyB8IFNfSVdV\n"
- "U1IsCisJCQkgICAgc2hvd190ZW1wLCBzdG9yZV90ZW1wLCAweDgzLCAwKTsKK3N0YXRpYyBTRU5T\n"
- "T1JfREVWSUNFX0FUVFJfMihwd20xX2F1dG9fcG9pbnQ1X3RlbXAsIFNfSVJVR08gfCBTX0lXVVNS\n"
- "LAorCQkJICAgIHNob3dfdGVtcCwgc3RvcmVfdGVtcCwgMHg4NCwgMCk7CisKKy8qIDcuMi4xMjAu\n"
- "Li4gMHg4NS0weDg4IFBXTSAoWS1heGlzKSB0cmFuc2l0aW9uICovCitzdGF0aWMgU0VOU09SX0RF\n"
- "VklDRV9BVFRSKHB3bTFfYXV0b19wb2ludDFfcHdtLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAg\n"
- "c2hvd19wd20sIHN0b3JlX3B3bSwgMHg4NSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3\n"
- "bTFfYXV0b19wb2ludDJfcHdtLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19wd20sIHN0\n"
- "b3JlX3B3bSwgMHg4Nik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTFfYXV0b19wb2lu\n"
- "dDNfcHdtLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19wd20sIHN0b3JlX3B3bSwgMHg4\n"
- "Nyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTFfYXV0b19wb2ludDRfcHdtLCBTX0lS\n"
- "VUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19wd20sIHN0b3JlX3B3bSwgMHg4OCk7CitzdGF0aWMg\n"
- "U0VOU09SX0RFVklDRV9BVFRSKHB3bTFfYXV0b19wb2ludDVfcHdtLCBTX0lSVUdPLCBzaG93X3B3\n"
- "bSwgTlVMTCwgMCk7CisKKy8qIDcuMi4xMjQgVGFibGUgMiBYLWF4aXMgVHJhbnNpdGlvbiBQb2lu\n"
- "dCAxIFJlZ2lzdGVyICovCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMl9hdXRvX3Bv\n"
- "aW50MV90ZW1wLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgICBzaG93X3RlbXAsIHN0b3JlX3Rl\n"
- "bXAsIDB4OTAsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTJfYXV0b19wb2lu\n"
- "dDJfdGVtcCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgICAgc2hvd190ZW1wLCBzdG9yZV90ZW1w\n"
- "LCAweDkxLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20yX2F1dG9fcG9pbnQz\n"
- "X3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJICAgIHNob3dfdGVtcCwgc3RvcmVfdGVtcCwg\n"
- "MHg5MiwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMl9hdXRvX3BvaW50NF90\n"
- "ZW1wLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgICBzaG93X3RlbXAsIHN0b3JlX3RlbXAsIDB4\n"
- "OTMsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTJfYXV0b19wb2ludDVfdGVt\n"
- "cCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgICAgc2hvd190ZW1wLCBzdG9yZV90ZW1wLCAweDk0\n"
- "LCAwKTsKKworLyogNy4yLjEyOSBUYWJsZSAyIFktYXhpcyBUcmFuc2l0aW9uIFBvaW50IDEgUmVn\n"
- "aXN0ZXIgKi8KK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMl9hdXRvX3BvaW50MV9wd20s\n"
- "IFNfSVJVR08gfCBTX0lXVVNSLAorCQkJICBzaG93X3B3bSwgc3RvcmVfcHdtLCAweDk1KTsKK3N0\n"
- "YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMl9hdXRvX3BvaW50Ml9wd20sIFNfSVJVR08gfCBT\n"
- "X0lXVVNSLAorCQkJICBzaG93X3B3bSwgc3RvcmVfcHdtLCAweDk2KTsKK3N0YXRpYyBTRU5TT1Jf\n"
- "REVWSUNFX0FUVFIocHdtMl9hdXRvX3BvaW50M19wd20sIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJ\n"
- "ICBzaG93X3B3bSwgc3RvcmVfcHdtLCAweDk3KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIo\n"
- "cHdtMl9hdXRvX3BvaW50NF9wd20sIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJICBzaG93X3B3bSwg\n"
- "c3RvcmVfcHdtLCAweDk4KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMl9hdXRvX3Bv\n"
- "aW50NV9wd20sIFNfSVJVR08sIHNob3dfcHdtLCBOVUxMLCAwKTsKKworLyogNy4yLjEzMyBUYWJs\n"
- "ZSAzIFgtYXhpcyBUcmFuc2l0aW9uIFBvaW50IDEgUmVnaXN0ZXIgKi8KK3N0YXRpYyBTRU5TT1Jf\n"
- "REVWSUNFX0FUVFJfMihwd20zX2F1dG9fcG9pbnQxX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAor\n"
- "CQkJICAgIHNob3dfdGVtcCwgc3RvcmVfdGVtcCwgMHhBMCwgMCk7CitzdGF0aWMgU0VOU09SX0RF\n"
- "VklDRV9BVFRSXzIocHdtM19hdXRvX3BvaW50Ml90ZW1wLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJ\n"
- "CSAgICBzaG93X3RlbXAsIHN0b3JlX3RlbXAsIDB4QTEsIDApOworc3RhdGljIFNFTlNPUl9ERVZJ\n"
- "Q0VfQVRUUl8yKHB3bTNfYXV0b19wb2ludDNfdGVtcCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkg\n"
- "ICAgc2hvd190ZW1wLCBzdG9yZV90ZW1wLCAweEEyLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNF\n"
- "X0FUVFJfMihwd20zX2F1dG9fcG9pbnQ0X3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJICAg\n"
- "IHNob3dfdGVtcCwgc3RvcmVfdGVtcCwgMHhBMywgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9B\n"
- "VFRSXzIocHdtM19hdXRvX3BvaW50NV90ZW1wLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgICBz\n"
- "aG93X3RlbXAsIHN0b3JlX3RlbXAsIDB4QTQsIDApOworCisvKiA3LjIuMTM4IFRhYmxlIDMgWS1h\n"
- "eGlzIFRyYW5zaXRpb24gUG9pbnQgMSBSZWdpc3RlciAqLworc3RhdGljIFNFTlNPUl9ERVZJQ0Vf\n"
- "QVRUUihwd20zX2F1dG9fcG9pbnQxX3B3bSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgIHNob3df\n"
- "cHdtLCBzdG9yZV9wd20sIDB4QTUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20zX2F1\n"
- "dG9fcG9pbnQyX3B3bSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgIHNob3dfcHdtLCBzdG9yZV9w\n"
- "d20sIDB4QTYpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20zX2F1dG9fcG9pbnQzX3B3\n"
- "bSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgIHNob3dfcHdtLCBzdG9yZV9wd20sIDB4QTcpOwor\n"
- "c3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20zX2F1dG9fcG9pbnQ0X3B3bSwgU19JUlVHTyB8\n"
- "IFNfSVdVU1IsCisJCQkgIHNob3dfcHdtLCBzdG9yZV9wd20sIDB4QTgpOworc3RhdGljIFNFTlNP\n"
- "Ul9ERVZJQ0VfQVRUUihwd20zX2F1dG9fcG9pbnQ1X3B3bSwgU19JUlVHTywgc2hvd19wd20sIE5V\n"
- "TEwsIDApOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbmN0NzgwMl9hdXRvX3BvaW50X2F0\n"
- "dHJzW10gPSB7CisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQxX3RlbXAuZGV2X2F0\n"
- "dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDJfdGVtcC5kZXZfYXR0\n"
- "ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3BvaW50M190ZW1wLmRldl9hdHRy\n"
- "LmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQ0X3RlbXAuZGV2X2F0dHIu\n"
- "YXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDVfdGVtcC5kZXZfYXR0ci5h\n"
- "dHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQxX3B3bS5kZXZfYXR0ci5h\n"
- "dHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3BvaW50Ml9wd20uZGV2X2F0dHIuYXR0\n"
- "ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDNfcHdtLmRldl9hdHRyLmF0dHIs\n"
- "CisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQ0X3B3bS5kZXZfYXR0ci5hdHRyLAor\n"
- "CSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3BvaW50NV9wd20uZGV2X2F0dHIuYXR0ciwKKwor\n"
- "CSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX3BvaW50MV90ZW1wLmRldl9hdHRyLmF0dHIsCisJ\n"
- "JnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQyX3RlbXAuZGV2X2F0dHIuYXR0ciwKKwkm\n"
- "c2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19wb2ludDNfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZz\n"
- "ZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX3BvaW50NF90ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNl\n"
- "bnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQ1X3RlbXAuZGV2X2F0dHIuYXR0ciwKKworCSZz\n"
- "ZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX3BvaW50MV9wd20uZGV2X2F0dHIuYXR0ciwKKwkmc2Vu\n"
- "c29yX2Rldl9hdHRyX3B3bTJfYXV0b19wb2ludDJfcHdtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNv\n"
- "cl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQzX3B3bS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3Jf\n"
- "ZGV2X2F0dHJfcHdtMl9hdXRvX3BvaW50NF9wd20uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rl\n"
- "dl9hdHRyX3B3bTJfYXV0b19wb2ludDVfcHdtLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rl\n"
- "dl9hdHRyX3B3bTNfYXV0b19wb2ludDFfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2\n"
- "X2F0dHJfcHdtM19hdXRvX3BvaW50Ml90ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZf\n"
- "YXR0cl9wd20zX2F1dG9fcG9pbnQzX3RlbXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9h\n"
- "dHRyX3B3bTNfYXV0b19wb2ludDRfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0\n"
- "dHJfcHdtM19hdXRvX3BvaW50NV90ZW1wLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9h\n"
- "dHRyX3B3bTNfYXV0b19wb2ludDFfcHdtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0\n"
- "cl9wd20zX2F1dG9fcG9pbnQyX3B3bS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJf\n"
- "cHdtM19hdXRvX3BvaW50M19wd20uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3\n"
- "bTNfYXV0b19wb2ludDRfcHdtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20z\n"
- "X2F1dG9fcG9pbnQ1X3B3bS5kZXZfYXR0ci5hdHRyLAorCisJTlVMTAorfTsKKworc3RhdGljIHN0\n"
- "cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbmN0NzgwMl9hdXRvX3BvaW50X2dyb3VwID0geworCS5hdHRy\n"
- "cyA9IG5jdDc4MDJfYXV0b19wb2ludF9hdHRycywKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg\n"
- "YXR0cmlidXRlX2dyb3VwICpuY3Q3ODAyX2dyb3Vwc1tdID0gewogCSZuY3Q3ODAyX3RlbXBfZ3Jv\n"
- "dXAsCiAJJm5jdDc4MDJfaW5fZ3JvdXAsCiAJJm5jdDc4MDJfZmFuX2dyb3VwLAogCSZuY3Q3ODAy\n"
- "X3B3bV9ncm91cCwKKwkmbmN0NzgwMl9hdXRvX3BvaW50X2dyb3VwLAogCU5VTEwKIH07CiAKQEAg\n"
- "LTk0NSw3ICsxMDY2LDggQEAgc3RhdGljIGludCBuY3Q3ODAyX2RldGVjdChzdHJ1Y3QgaTJjX2Ns\n"
- "aWVudCAqY2xpZW50LAogCiBzdGF0aWMgYm9vbCBuY3Q3ODAyX3JlZ21hcF9pc192b2xhdGlsZShz\n"
- "dHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCiB7Ci0JcmV0dXJuIHJlZyAhPSBS\n"
- "RUdfQkFOSyAmJiByZWcgPD0gMHgyMDsKKwlyZXR1cm4gKHJlZyAhPSBSRUdfQkFOSyAmJiByZWcg\n"
- "PD0gMHgyMCkgfHwKKwkJKHJlZyA+PSBSRUdfUFdNKDApICYmIHJlZyA8PSBSRUdfUFdNKDIpKTsK\n"
- "IH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIG5jdDc4MDJfcmVnbWFwX2Nv\n"
- "bmZpZyA9IHsKLS0gCjEuOS4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f\n"
- "X19fX19fX19fX18KbG0tc2Vuc29ycyBtYWlsaW5nIGxpc3QKbG0tc2Vuc29yc0BsbS1zZW5zb3Jz\n"
- "Lm9yZwpodHRwOi8vbGlzdHMubG0tc2Vuc29ycy5vcmcvbWFpbG1hbi9saXN0aW5mby9sbS1zZW5z\n"
- b3Jz
+ "Introduced REG_PWM, pwm[1..3]_auto_point[1..5]_temp,\n"
+ "pwm[1..3]_auto_point[1..5]_pwm, nct7802_auto_point_attrs,\n"
+ "nct7802_auto_point_group, updated nct7802_regmap_is_volatile\n"
+ "\n"
+ "Signed-off-by: Constantine Shulyupin <const@MakeLinux.com>\n"
+ "---\n"
+ "\n"
+ "Changed in v4:\n"
+ "- fixed expression in nct7802_regmap_is_volatile\n"
+ "- added pwmX_auto_temp to driver's documentation\n"
+ "Changed in v3:\n"
+ "- removed nct7802_auto_point_is_visible\n"
+ "- removed usage of sysfs_update_group\n"
+ "- introduced REG_PWM\n"
+ "- removed S_IWUSR from RO attributes\n"
+ "- added PWM registers to nct7802_regmap_is_volatile\n"
+ "Changed in v2:\n"
+ "- removed PWM_REG, TEMP_REG\n"
+ "- removed auto_point[1..4]_temp, auto_point[1..4]_pwm\n"
+ "  and auto_point_crit_temp\n"
+ "- introduced pwm[1..3]_auto_point[1..5]_temp\n"
+ "  and pwm[1..3]_auto_point[1..5]_pwm.\n"
+ "- introduced nct7802_auto_point_is_visible\n"
+ "- used sysfs_update_group in store_pwm_enable\n"
+ "\n"
+ "Default values on my platform:\n"
+ "\n"
+ "fan1_alarm:0                    pwm2_auto_point1_temp:25000\n"
+ "fan1_beep:0                     pwm2_auto_point2_pwm:170\n"
+ "fan1_input:150000               pwm2_auto_point2_temp:35000\n"
+ "fan1_min:0                      pwm2_auto_point3_pwm:200\n"
+ "fan2_alarm:0                    pwm2_auto_point3_temp:45000\n"
+ "fan2_beep:0                     pwm2_auto_point4_pwm:230\n"
+ "fan2_input:0                    pwm2_auto_point4_temp:55000\n"
+ "fan2_min:0                      pwm2_auto_point5_pwm:255\n"
+ "fan3_alarm:0                    pwm2_auto_point5_temp:60000\n"
+ "fan3_beep:0                     pwm2_enable:1\n"
+ "fan3_input:0                    pwm2_mode:1\n"
+ "fan3_min:0                      pwm3:127\n"
+ "in0_alarm:0                     pwm3_auto_point1_pwm:140\n"
+ "in0_beep:0                      pwm3_auto_point1_temp:25000\n"
+ "in0_input:3312                  pwm3_auto_point2_pwm:170\n"
+ "in0_max:4092                    pwm3_auto_point2_temp:35000\n"
+ "in0_min:0                       pwm3_auto_point3_pwm:200\n"
+ "in1_input:902                   pwm3_auto_point3_temp:45000\n"
+ "in3_alarm:0                     pwm3_auto_point4_pwm:230\n"
+ "in3_beep:0                      pwm3_auto_point4_temp:55000\n"
+ "in3_input:1808                  pwm3_auto_point5_pwm:255\n"
+ "in3_max:2046                    pwm3_auto_point5_temp:60000\n"
+ "in3_min:0                       pwm3_enable:1\n"
+ "in4_alarm:0                     pwm3_mode:1\n"
+ "in4_beep:0                      temp1_beep:0\n"
+ "in4_input:1508                  temp1_crit:100000\n"
+ "in4_max:2046                    temp1_crit_alarm:0\n"
+ "in4_min:0                       temp1_fault:0\n"
+ "name:nct7802                    temp1_input:35500\n"
+ "pwm1:127                        temp1_max:85000\n"
+ "pwm1_auto_point1_pwm:140        temp1_max_alarm:0\n"
+ "pwm1_auto_point1_temp:25000     temp1_min:0\n"
+ "pwm1_auto_point2_pwm:170        temp1_min_alarm:0\n"
+ "pwm1_auto_point2_temp:35000     temp1_type:4\n"
+ "pwm1_auto_point3_pwm:200        temp4_beep:0\n"
+ "pwm1_auto_point3_temp:45000     temp4_crit:100000\n"
+ "pwm1_auto_point4_pwm:230        temp4_crit_alarm:0\n"
+ "pwm1_auto_point4_temp:55000     temp4_input:39000\n"
+ "pwm1_auto_point5_pwm:255        temp4_max:85000\n"
+ "pwm1_auto_point5_temp:60000     temp4_max_alarm:0\n"
+ "pwm1_enable:1                   temp4_min:0\n"
+ "pwm1_mode:1                     temp4_min_alarm:0\n"
+ "pwm2:127                        temp6_beep:0\n"
+ "pwm2_auto_point1_pwm:140        temp6_input:0\n"
+ "\n"
+ "---\n"
+ " Documentation/hwmon/nct7802 |   5 +-\n"
+ " drivers/hwmon/nct7802.c     | 130 ++++++++++++++++++++++++++++++++++++++++++--\n"
+ " 2 files changed, 128 insertions(+), 7 deletions(-)\n"
+ "\n"
+ "diff --git a/Documentation/hwmon/nct7802 b/Documentation/hwmon/nct7802\n"
+ "index 2e00f5e..c5c25a5 100644\n"
+ "--- a/Documentation/hwmon/nct7802\n"
+ "+++ b/Documentation/hwmon/nct7802\n"
+ "@@ -5,7 +5,7 @@ Supported chips:\n"
+ "   * Nuvoton NCT7802Y\n"
+ "     Prefix: 'nct7802'\n"
+ "     Addresses scanned: I2C 0x28..0x2f\n"
+ "-    Datasheet: Available from Nuvoton web site\n"
+ "+    Datasheet: http://www.nuvoton.com/hq/products/cloud-computing/hardware-monitors/desktop-server-series/nct7802y/\n"
+ " \n"
+ " Authors:\n"
+ "         Guenter Roeck <linux@roeck-us.net>\n"
+ "@@ -17,8 +17,7 @@ This driver implements support for the Nuvoton NCT7802Y hardware monitoring\n"
+ " chip. NCT7802Y supports 6 temperature sensors, 5 voltage sensors, and 3 fan\n"
+ " speed sensors.\n"
+ " \n"
+ "-The chip also supports intelligent fan speed control. This functionality is\n"
+ "-not currently supported by the driver.\n"
+ "+Smart Fan\342\204\242 speed control is avilabel via pwmX_auto_temp attributes.\n"
+ " \n"
+ " Tested Boards and BIOS Versions\n"
+ " -------------------------------\n"
+ "diff --git a/drivers/hwmon/nct7802.c b/drivers/hwmon/nct7802.c\n"
+ "index d018571..c1898ba 100644\n"
+ "--- a/drivers/hwmon/nct7802.c\n"
+ "+++ b/drivers/hwmon/nct7802.c\n"
+ "@@ -53,6 +53,7 @@ static const u8 REG_VOLTAGE_LIMIT_MSB_SHIFT[2][5] = {\n"
+ " #define REG_PECI_ENABLE\t\t0x23\n"
+ " #define REG_FAN_ENABLE\t\t0x24\n"
+ " #define REG_VMON_ENABLE\t\t0x25\n"
+ "+#define REG_PWM(x)\t\t(0x60 + (x))\n"
+ " #define REG_SMARTFAN_EN(x)      (0x64 + (x) / 2)\n"
+ " #define SMARTFAN_EN_SHIFT(x)    ((x) % 2 * 4)\n"
+ " #define REG_VENDOR_ID\t\t0xfd\n"
+ "@@ -130,6 +131,9 @@ static ssize_t show_pwm(struct device *dev, struct device_attribute *devattr,\n"
+ " \tunsigned int val;\n"
+ " \tint ret;\n"
+ " \n"
+ "+\tif (!attr->index)\n"
+ "+\t\treturn sprintf(buf, \"255\\n\");\n"
+ "+\n"
+ " \tret = regmap_read(data->regmap, attr->index, &val);\n"
+ " \tif (ret < 0)\n"
+ " \t\treturn ret;\n"
+ "@@ -826,9 +830,12 @@ static SENSOR_DEVICE_ATTR(pwm2_mode, S_IRUGO, show_pwm_mode, NULL, 1);\n"
+ " static SENSOR_DEVICE_ATTR(pwm3_mode, S_IRUGO, show_pwm_mode, NULL, 2);\n"
+ " \n"
+ " /* 7.2.91... Fan Control Output Value */\n"
+ "-static SENSOR_DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR, show_pwm, store_pwm, 0x60);\n"
+ "-static SENSOR_DEVICE_ATTR(pwm2, S_IRUGO | S_IWUSR, show_pwm, store_pwm, 0x61);\n"
+ "-static SENSOR_DEVICE_ATTR(pwm3, S_IRUGO | S_IWUSR, show_pwm, store_pwm, 0x62);\n"
+ "+static SENSOR_DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR, show_pwm, store_pwm,\n"
+ "+\t\t\t  REG_PWM(0));\n"
+ "+static SENSOR_DEVICE_ATTR(pwm2, S_IRUGO | S_IWUSR, show_pwm, store_pwm,\n"
+ "+\t\t\t  REG_PWM(1));\n"
+ "+static SENSOR_DEVICE_ATTR(pwm3, S_IRUGO | S_IWUSR, show_pwm, store_pwm,\n"
+ "+\t\t\t  REG_PWM(2));\n"
+ " \n"
+ " /* 7.2.95... Temperature to Fan mapping Relationships Register */\n"
+ " static SENSOR_DEVICE_ATTR(pwm1_enable, S_IRUGO | S_IWUSR, show_pwm_enable,\n"
+ "@@ -893,11 +900,125 @@ static struct attribute_group nct7802_pwm_group = {\n"
+ " \t.attrs = nct7802_pwm_attrs,\n"
+ " };\n"
+ " \n"
+ "+/* 7.2.115... 0x80-0x83, 0x84 Temperature (X-axis) transition */\n"
+ "+static SENSOR_DEVICE_ATTR_2(pwm1_auto_point1_temp, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t    show_temp, store_temp, 0x80, 0);\n"
+ "+static SENSOR_DEVICE_ATTR_2(pwm1_auto_point2_temp, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t    show_temp, store_temp, 0x81, 0);\n"
+ "+static SENSOR_DEVICE_ATTR_2(pwm1_auto_point3_temp, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t    show_temp, store_temp, 0x82, 0);\n"
+ "+static SENSOR_DEVICE_ATTR_2(pwm1_auto_point4_temp, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t    show_temp, store_temp, 0x83, 0);\n"
+ "+static SENSOR_DEVICE_ATTR_2(pwm1_auto_point5_temp, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t    show_temp, store_temp, 0x84, 0);\n"
+ "+\n"
+ "+/* 7.2.120... 0x85-0x88 PWM (Y-axis) transition */\n"
+ "+static SENSOR_DEVICE_ATTR(pwm1_auto_point1_pwm, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t  show_pwm, store_pwm, 0x85);\n"
+ "+static SENSOR_DEVICE_ATTR(pwm1_auto_point2_pwm, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t  show_pwm, store_pwm, 0x86);\n"
+ "+static SENSOR_DEVICE_ATTR(pwm1_auto_point3_pwm, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t  show_pwm, store_pwm, 0x87);\n"
+ "+static SENSOR_DEVICE_ATTR(pwm1_auto_point4_pwm, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t  show_pwm, store_pwm, 0x88);\n"
+ "+static SENSOR_DEVICE_ATTR(pwm1_auto_point5_pwm, S_IRUGO, show_pwm, NULL, 0);\n"
+ "+\n"
+ "+/* 7.2.124 Table 2 X-axis Transition Point 1 Register */\n"
+ "+static SENSOR_DEVICE_ATTR_2(pwm2_auto_point1_temp, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t    show_temp, store_temp, 0x90, 0);\n"
+ "+static SENSOR_DEVICE_ATTR_2(pwm2_auto_point2_temp, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t    show_temp, store_temp, 0x91, 0);\n"
+ "+static SENSOR_DEVICE_ATTR_2(pwm2_auto_point3_temp, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t    show_temp, store_temp, 0x92, 0);\n"
+ "+static SENSOR_DEVICE_ATTR_2(pwm2_auto_point4_temp, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t    show_temp, store_temp, 0x93, 0);\n"
+ "+static SENSOR_DEVICE_ATTR_2(pwm2_auto_point5_temp, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t    show_temp, store_temp, 0x94, 0);\n"
+ "+\n"
+ "+/* 7.2.129 Table 2 Y-axis Transition Point 1 Register */\n"
+ "+static SENSOR_DEVICE_ATTR(pwm2_auto_point1_pwm, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t  show_pwm, store_pwm, 0x95);\n"
+ "+static SENSOR_DEVICE_ATTR(pwm2_auto_point2_pwm, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t  show_pwm, store_pwm, 0x96);\n"
+ "+static SENSOR_DEVICE_ATTR(pwm2_auto_point3_pwm, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t  show_pwm, store_pwm, 0x97);\n"
+ "+static SENSOR_DEVICE_ATTR(pwm2_auto_point4_pwm, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t  show_pwm, store_pwm, 0x98);\n"
+ "+static SENSOR_DEVICE_ATTR(pwm2_auto_point5_pwm, S_IRUGO, show_pwm, NULL, 0);\n"
+ "+\n"
+ "+/* 7.2.133 Table 3 X-axis Transition Point 1 Register */\n"
+ "+static SENSOR_DEVICE_ATTR_2(pwm3_auto_point1_temp, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t    show_temp, store_temp, 0xA0, 0);\n"
+ "+static SENSOR_DEVICE_ATTR_2(pwm3_auto_point2_temp, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t    show_temp, store_temp, 0xA1, 0);\n"
+ "+static SENSOR_DEVICE_ATTR_2(pwm3_auto_point3_temp, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t    show_temp, store_temp, 0xA2, 0);\n"
+ "+static SENSOR_DEVICE_ATTR_2(pwm3_auto_point4_temp, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t    show_temp, store_temp, 0xA3, 0);\n"
+ "+static SENSOR_DEVICE_ATTR_2(pwm3_auto_point5_temp, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t    show_temp, store_temp, 0xA4, 0);\n"
+ "+\n"
+ "+/* 7.2.138 Table 3 Y-axis Transition Point 1 Register */\n"
+ "+static SENSOR_DEVICE_ATTR(pwm3_auto_point1_pwm, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t  show_pwm, store_pwm, 0xA5);\n"
+ "+static SENSOR_DEVICE_ATTR(pwm3_auto_point2_pwm, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t  show_pwm, store_pwm, 0xA6);\n"
+ "+static SENSOR_DEVICE_ATTR(pwm3_auto_point3_pwm, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t  show_pwm, store_pwm, 0xA7);\n"
+ "+static SENSOR_DEVICE_ATTR(pwm3_auto_point4_pwm, S_IRUGO | S_IWUSR,\n"
+ "+\t\t\t  show_pwm, store_pwm, 0xA8);\n"
+ "+static SENSOR_DEVICE_ATTR(pwm3_auto_point5_pwm, S_IRUGO, show_pwm, NULL, 0);\n"
+ "+\n"
+ "+static struct attribute *nct7802_auto_point_attrs[] = {\n"
+ "+\t&sensor_dev_attr_pwm1_auto_point1_temp.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm1_auto_point2_temp.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm1_auto_point3_temp.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm1_auto_point4_temp.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm1_auto_point5_temp.dev_attr.attr,\n"
+ "+\n"
+ "+\t&sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm1_auto_point3_pwm.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm1_auto_point4_pwm.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm1_auto_point5_pwm.dev_attr.attr,\n"
+ "+\n"
+ "+\t&sensor_dev_attr_pwm2_auto_point1_temp.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm2_auto_point2_temp.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm2_auto_point3_temp.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm2_auto_point4_temp.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm2_auto_point5_temp.dev_attr.attr,\n"
+ "+\n"
+ "+\t&sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm2_auto_point3_pwm.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm2_auto_point4_pwm.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm2_auto_point5_pwm.dev_attr.attr,\n"
+ "+\n"
+ "+\t&sensor_dev_attr_pwm3_auto_point1_temp.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm3_auto_point2_temp.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm3_auto_point3_temp.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm3_auto_point4_temp.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm3_auto_point5_temp.dev_attr.attr,\n"
+ "+\n"
+ "+\t&sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm3_auto_point3_pwm.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm3_auto_point4_pwm.dev_attr.attr,\n"
+ "+\t&sensor_dev_attr_pwm3_auto_point5_pwm.dev_attr.attr,\n"
+ "+\n"
+ "+\tNULL\n"
+ "+};\n"
+ "+\n"
+ "+static struct attribute_group nct7802_auto_point_group = {\n"
+ "+\t.attrs = nct7802_auto_point_attrs,\n"
+ "+};\n"
+ "+\n"
+ " static const struct attribute_group *nct7802_groups[] = {\n"
+ " \t&nct7802_temp_group,\n"
+ " \t&nct7802_in_group,\n"
+ " \t&nct7802_fan_group,\n"
+ " \t&nct7802_pwm_group,\n"
+ "+\t&nct7802_auto_point_group,\n"
+ " \tNULL\n"
+ " };\n"
+ " \n"
+ "@@ -945,7 +1066,8 @@ static int nct7802_detect(struct i2c_client *client,\n"
+ " \n"
+ " static bool nct7802_regmap_is_volatile(struct device *dev, unsigned int reg)\n"
+ " {\n"
+ "-\treturn reg != REG_BANK && reg <= 0x20;\n"
+ "+\treturn (reg != REG_BANK && reg <= 0x20) ||\n"
+ "+\t\t(reg >= REG_PWM(0) && reg <= REG_PWM(2));\n"
+ " }\n"
+ " \n"
+ " static const struct regmap_config nct7802_regmap_config = {\n"
+ "-- \n"
+ 1.9.1
 
-3e8513a6c1b496b2089c03b78a0449d893397076ee1ed21c63a70e416c7da8bd
+34b9c1d66028b24c82e1dec28f3160339c0a2d0096f0c6e50caabb64bebe45b6

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.