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.