diff for duplicates of <56A24278.8050909@roeck-us.net> diff --git a/a/1.txt b/N1/1.txt index 72c9de6..22bd28a 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -1,117 +1,186 @@ -T24gMDEvMjEvMjAxNiAxMTozNCBBTSwgU3TDqXBoYW4gS29jaGVuIHdyb3RlOgo+IEFsbG93IGEg -ZGV2aWNlIHRyZWUgdG8gc2V0IGluaXRpYWwgdGVtcGVyYXR1cmUgc2Vuc29yIHBhcmFtZXRlcnMu -Cj4KPiBVc2Vyc3BhY2UgY2FuIHN0aWxsIG92ZXJyaWRlIGFjdHVhbCB2YWx1ZXMgdGhyb3VnaCBz -eXNmcy4KPgo+IFNpZ25lZC1vZmYtYnk6IFN0w6lwaGFuIEtvY2hlbiA8c3RlcGhhbkBrb2NoZW4u -bmw+Cj4gLS0tCj4gICBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaHdtb24vbG05 -MC50eHQgfCA0MCArKysrKysrKysrKysrKysrKwo+ICAgZHJpdmVycy9od21vbi9sbTkwLmMgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIHwgNTUgKysrKysrKysrKysrKysrKysrKysrKy0tCj4g -ICAyIGZpbGVzIGNoYW5nZWQsIDkyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCj4KPiBk -aWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2h3bW9uL2xtOTAu -dHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2h3bW9uL2xtOTAudHh0Cj4g -aW5kZXggZTg2MzI0OC4uMDQ1ZTk0YiAxMDA2NDQKPiAtLS0gYS9Eb2N1bWVudGF0aW9uL2Rldmlj -ZXRyZWUvYmluZGluZ3MvaHdtb24vbG05MC50eHQKPiArKysgYi9Eb2N1bWVudGF0aW9uL2Rldmlj -ZXRyZWUvYmluZGluZ3MvaHdtb24vbG05MC50eHQKPiBAQCAtMzMsNiArMzMsMzggQEAgT3B0aW9u -YWwgcHJvcGVydGllczoKPiAgICAgICAgICAgICAgICAgTE05MCAiLUFMRVJUIiBwaW4gb3V0cHV0 -Lgo+ICAgICAgICAgICAgICAgICBTZWUgaW50ZXJydXB0LWNvbnRyb2xsZXIvaW50ZXJydXB0cy50 -eHQgZm9yIHRoZSBmb3JtYXQuCj4KPiArLSB1cGRhdGUtaW50ZXJ2YWw6IEludGVydmFsIGF0IHdo -aWNoIHRlbXBlcmF0dXJlcyBhcmUgc2FtcGxlZCwKPiArICBUeXBlOiB1bnNpZ25lZCAgIGluIG1p -bGxpc2Vjb25kcy4KPiArICBTaXplOiBvbmUgY2VsbAo+ICsKPiArLSBsb2NhbC1sb3c6ICAgICAg -VmFsaWQgdGVtcGVyYXR1cmUgcmFuZ2UgZm9yIHRoZSBjaGlwIGludGVybmFsIHNlbnNvciwKPiAr -ICBsb2NhbC1oaWdoOiAgICAgb3V0c2lkZSB3aGljaCB0aGUgYWxlcnQgd2lsbCBiZSBzZXQuIFZh -bHVlcyBhcmUgaW4KPiArICBsb2NhbC1jcml0aWNhbDogbWlsbGljZWxjaXVzLgo+ICsgIFR5cGU6 -IHNpZ25lZAo+ICsgIFNpemU6IG9uZSBjZWxsCj4gKwo+ICstIHJlbW90ZS1sb3c6ICAgICAgVmFs -aWQgdGVtcGVyYXR1cmUgcmFuZ2UgZm9yIHRoZSBleHRlcm5hbCBzZW5zb3IsCj4gKyAgcmVtb3Rl -LWhpZ2g6ICAgICBvdXRzaWRlIHdoaWNoIHRoZSBhbGVydCB3aWxsIGJlIHNldC4gVmFsdWVzIGFy -ZSBpbgo+ICsgIHJlbW90ZS1jcml0aWNhbDogbWlsbGljZWxjaWl1cy4KPiArICBUeXBlOiBzaWdu -ZWQKPiArICBTaXplOiBvbmUgY2VsbAo+ICsKPiArLSByZW1vdGUtb2Zmc2V0OiAgIFdoZXJlIGF2 -YWlsYWJsZSwgYW4gZXh0ZXJuYWwgc2Vuc29yIHRlbXBlcmF0dXJlIG9mZnNldC4KPiArICBUeXBl -OiBzaWduZWQKPiArICBTaXplOiBvbmUgY2VsbAo+ICsKPiArLSBsb2NhbC1lbWVyZ2VuY3k6ICBP -biBtYXg2NjU5LCBtYXg2Njk1IGFuZCBtYXg2Njk2LCBhIGNvbmZpZ3VyYWJsZQo+ICsgIHJlbW90 -ZS1lbWVyZ2VuY3k6IDNyZCB1cHBlciBib3VuZCBvbiB0ZW1wZXJhdHVyZS4KPiArICBUeXBlOiBz -aWduZWQKPiArICBTaXplOiBvbmUgY2VsbAo+ICsKPiArLSByZW1vdGUyLWxvdzogICAgICBPbiBt -YXg2Njk1IGFuZCBtYXg2Njk2LCBhIHNlY29uZCBleHRlcm5hbCBzZW5zb3IuCj4gKyAgcmVtb3Rl -Mi1oaWdoOgo+ICsgIHJlbW90ZTItY3JpdGljYWw6Cj4gKyAgcmVtb3RlMi1lbWVyZ2VuY3k6Cj4g -KyAgVHlwZTogc2lnbmVkCj4gKyAgU2l6ZTogb25lIGNlbGwKPiArCgpUaGlzIHZlcnkgbXVjaCBz -bWVsbHMgbGlrZSBjb25maWd1cmF0aW9uLCBub3QgaGFyZHdhcmUgZGVzY3JpcHRpb24uCgpIYXZp -bmcgc2FpZCB0aGF0LCB0aGUgdGhlcm1hbCBzdWJzeXN0ZW0gZG9lcyBzb21ldGhpbmcgc2ltaWxh -ci4gVGhpcyByYWlzZXMgZXZlbiBtb3JlCnF1ZXN0aW9ucywgdGhvdWdoLiBTaW5jZSBwYXRjaCAz -IG9mIHRoZSBzZXJpZXMgaW50cm9kdWNlcyByZWdpc3RyYXRpb24gd2l0aCB0aGUgdGhlcm1hbApz -dWJzeXN0ZW0sIGl0IHNlZW1zIHRvIG1lIHRoYXQgdGhlIHRoZXJtYWwgc3Vic3lzdGVtIHNob3Vs -ZCBwcm92aWRlIGFueSBsaW1pdHMgdXNlZAp0byBwcm9ncmFtIHRoZSBjaGlwcywgYW5kIHRoYXQg -dGhlcmUgc2hvdWxkIGJlIGEgbWVjaGFuaXNtIGZvciB0aGUgdGhlcm1hbCBzdWJzeXN0ZW0KdG8g -aW50ZXJhY3Qgd2l0aCB0aGUgZHJpdmVyIHRvIGJvdGggc2V0IHRoZSBsaW1pdHMgYW5kIHRvIGJl -IGluZm9ybWVkIGlmIGEgbGltaXQKaXMgZXhjZWVkZWQuCgpBbHNvLCBfaWZfIHN1Y2ggYSBzZXQg -b2YgcHJvcGVydGllcyBpcyBpbnRyb2R1Y2VkIGFuZCBhY2NlcHRlZCBieSB0aGUgZGV2aWNldHJl -ZQpyZXZpZXdlcnMsIGl0IHNob3VsZCBwcm9iYWJseSBiZSBhIHNldCBvZiBwcm9wZXJ0aWVzIHdo -aWNoIGFwcGxpZXMgdG8gX2FsbF8gaGFyZHdhcmUKbW9uaXRvcmluZyBkcml2ZXJzLCBub3QganVz -dCB0byBvbmUuIEV2ZW4gaWYgc3VwcG9ydCBpcyBub3QgaW1wbGVtZW50ZWQgaW1tZWRpYXRlbHkK -aW4gdGhlIGh3bW9uIGNvcmUsIHRoZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSB1c2FibGUgaW4gYSBn -ZW5lcmljIHdheSwgYW5kIG5vdApyZWZsZWN0IHN5c2ZzIGF0dHJpYnV0ZSBuYW1lcyB1c2VkIGJ5 -IHRoZSBod21vbiBzdWJzeXN0ZW0uCgpUaGFua3MsCkd1ZW50ZXIKCj4gICBFeGFtcGxlIExNOTAg -bm9kZToKPgo+ICAgdGVtcC1zZW5zb3Igewo+IEBAIC00MSw0ICs3MywxMiBAQCB0ZW1wLXNlbnNv -ciB7Cj4gICAJdmNjLXN1cHBseSA9IDwmcGFsbWFzX2xkbzZfcmVnPjsKPiAgIAlpbnRlcnJ1cHQt -cGFyZW50ID0gPCZncGlvPjsKPiAgIAlpbnRlcnJ1cHRzID0gPFRFR1JBX0dQSU8oTywgNCkgSVJR -X1RZUEVfTEVWRUxfTE9XPjsKPiArCXVwZGF0ZS1pbnRlcnZhbCA9IDw1MDA+Owo+ICsJbG9jYWwt -bG93ID0gPDUwMDA+Owo+ICsJbG9jYWwtaGlnaCA9IDw4MDAwMD47Cj4gKwlsb2NhbC1jcml0aWNh -bCA9IDw5MDAwMD47Cj4gKwlyZW1vdGUtbG93ID0gPDUwMDA+Owo+ICsJcmVtb3RlLWhpZ2ggPSA8 -ODAwMDA+Owo+ICsJcmVtb3RlLWNyaXRpY2FsID0gPDkwMDAwPjsKPiArCXJlbW90ZS1vZmZzZXQg -PSA8KC02MjEyNSk+Owo+ICAgfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTAuYyBi -L2RyaXZlcnMvaHdtb24vbG05MC5jCj4gaW5kZXggODhkYWY3Mi4uOGFlODc5MSAxMDA2NDQKPiAt -LS0gYS9kcml2ZXJzL2h3bW9uL2xtOTAuYwo+ICsrKyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCj4g -QEAgLTkzLDYgKzkzLDcgQEAKPiAgICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgo+ICAgI2luY2x1 -ZGUgPGxpbnV4L2Vyci5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4gKyNpbmNsdWRl -IDxsaW51eC9vZi5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Cj4gICAjaW5jbHVkZSA8 -bGludXgvaW50ZXJydXB0Lmg+Cj4gICAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVy -Lmg+Cj4gQEAgLTE1MDQsOCArMTUwNSwxNiBAQCBzdGF0aWMgdm9pZCBsbTkwX3Jlc3RvcmVfY29u -ZihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgbG05MF9kYXRhICpkYXRhKQo+ICAg -c3RhdGljIHZvaWQgbG05MF9pbml0X2NsaWVudChzdHJ1Y3QgbG05MF9kYXRhICpkYXRhKQo+ICAg -ewo+ICAgCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7Cj4gKwlzdHJ1 -Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7Cj4gICAJdTggY29uZmlnLCBjb252cmF0ZTsK -PiArCXUzMiBtczsKPiArI2lmZGVmIENPTkZJR19PRgo+ICsJczMyIHRlbXA7Cj4gKyNlbmRpZgo+ -Cj4gKwkvKgo+ICsJICogU2F2ZSBvbGQgY29udmVyc2lvbiByYXRlLgo+ICsJICovCj4gICAJaWYg -KGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX0NPTlZSQVRFLCAmY29udnJhdGUpIDwg -MCkgewo+ICAgCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJGYWlsZWQgdG8gcmVhZCBjb252cmF0 -ZSByZWdpc3RlciFcbiIpOwo+ICAgCQljb252cmF0ZSA9IExNOTBfREVGX0NPTlZSQVRFX1JWQUw7 -Cj4gQEAgLTE1MTUsMTQgKzE1MjQsMjQgQEAgc3RhdGljIHZvaWQgbG05MF9pbml0X2NsaWVudChz -dHJ1Y3QgbG05MF9kYXRhICpkYXRhKQo+ICAgCS8qCj4gICAJICogU3RhcnQgdGhlIGNvbnZlcnNp -b25zLgo+ICAgCSAqLwo+IC0JbG05MF9zZXRfY29udnJhdGVfbG9ja2VkKGRhdGEsIDUwMCk7ICAv -KiA1MDBtcyAvIDJIeiAgKi8KPiArI2lmZGVmIENPTkZJR19PRgo+ICsJaWYgKG9mX3Byb3BlcnR5 -X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgInVwZGF0ZS1pbnRlcnZhbCIsICZtcykgPCAwKQo+ICsj -ZW5kaWYKPiArCQltcyA9IDUwMDsgIC8qIGRlZmF1bHQgcmF0ZTogMkh6ICovCj4gKwlsbTkwX3Nl -dF9jb252cmF0ZV9sb2NrZWQoZGF0YSwgbXMpOwo+ICsKPiArCS8qCj4gKwkgKiBTYXZlIG9sZCBj -b25maWcKPiArCSAqLwo+ICAgCWlmIChsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9D -T05GSUcxLCAmY29uZmlnKSA8IDApIHsKPiAtCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJJbml0 -aWFsaXphdGlvbiBmYWlsZWQhXG4iKTsKPiArCQlkZXZfd2FybihkZXYsICJJbml0aWFsaXphdGlv -biBmYWlsZWQhXG4iKTsKPiAgIAkJcmV0dXJuOwo+ICAgCX0KPiAgIAlkYXRhLT5jb25maWdfb3Jp -ZyA9IGNvbmZpZzsKPgo+IC0JLyogQ2hlY2sgVGVtcGVyYXR1cmUgUmFuZ2UgU2VsZWN0ICovCj4g -KwkvKgo+ICsJICogQ2hlY2sgVGVtcGVyYXR1cmUgUmFuZ2UgU2VsZWN0Cj4gKwkgKi8KPiAgIAlp -ZiAoZGF0YS0+a2luZCA9PSBhZHQ3NDYxIHx8IGRhdGEtPmtpbmQgPT0gdG1wNDUxKSB7Cj4gICAJ -CWlmIChjb25maWcgJiAweDA0KQo+ICAgCQkJZGF0YS0+ZmxhZ3MgfD0gTE05MF9GTEFHX0FEVDc0 -NjFfRVhUOwo+IEBAIC0xNTQ1LDYgKzE1NjQsMzYgQEAgc3RhdGljIHZvaWQgbG05MF9pbml0X2Ns -aWVudChzdHJ1Y3QgbG05MF9kYXRhICpkYXRhKQo+ICAgCWNvbmZpZyAmPSAweEJGOwkvKiBydW4g -Ki8KPiAgIAlpZiAoY29uZmlnICE9IGRhdGEtPmNvbmZpZ19vcmlnKSAvKiBPbmx5IHdyaXRlIGlm -IGNoYW5nZWQgKi8KPiAgIAkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIExNOTBf -UkVHX1dfQ09ORklHMSwgY29uZmlnKTsKPiArCj4gKyNpZmRlZiBDT05GSUdfT0YKPiArCS8qCj4g -KwkgKiBTZXQgaW5pdGlhbCB2YWx1ZXMgZnJvbSBkZXZpY2V0cmVlCj4gKwkgKi8KPiArI2RlZmlu -ZSBJTklUX1JFRyhfcHJvcGVydHksIF9pbmRleCwgX2JpdHMpIHsgXAo+ICsJaWYgKG9mX3Byb3Bl -cnR5X3JlYWRfczMyKGRldi0+b2Zfbm9kZSwgX3Byb3BlcnR5LCAmdGVtcCkgPT0gMCkgXAo+ICsJ -CWxtOTBfc2V0X3RlbXAjI19iaXRzIyNfbG9ja2VkKGRhdGEsIF9pbmRleCwgdGVtcCk7IFwKPiAr -fQo+ICsJSU5JVF9SRUcoImxvY2FsLWxvdyIsIExPQ0FMX0xPVywgOCk7Cj4gKwlJTklUX1JFRygi -bG9jYWwtaGlnaCIsIExPQ0FMX0hJR0gsIDgpOwo+ICsJSU5JVF9SRUcoImxvY2FsLWNyaXRpY2Fs -IiwgTE9DQUxfQ1JJVCwgOCk7Cj4gKwlJTklUX1JFRygicmVtb3RlLWxvdyIsIFJFTU9URV9MT1cs -IDExKTsKPiArCUlOSVRfUkVHKCJyZW1vdGUtaGlnaCIsIFJFTU9URV9ISUdILCAxMSk7Cj4gKwlJ -TklUX1JFRygicmVtb3RlLWNyaXRpY2FsIiwgUkVNT1RFX0NSSVQsIDgpOwo+ICsJaWYgKGRhdGEt -PmZsYWdzICYgTE05MF9IQVZFX09GRlNFVCkgewo+ICsJCUlOSVRfUkVHKCJyZW1vdGUtb2Zmc2V0 -IiwgUkVNT1RFX09GRlNFVCwgMTEpOwo+ICsJfQo+ICsJaWYgKGRhdGEtPmZsYWdzICYgTE05MF9I -QVZFX0VNRVJHRU5DWSkgewo+ICsJCUlOSVRfUkVHKCJsb2NhbC1lbWVyZ2VuY3kiLCBMT0NBTF9F -TUVSRywgOCk7Cj4gKwkJSU5JVF9SRUcoInJlbW90ZS1lbWVyZ2VuY3kiLCBSRU1PVEVfRU1FUkcs -IDgpOwo+ICsJfQo+ICsJaWYgKGRhdGEtPmZsYWdzICYgTE05MF9IQVZFX1RFTVAzKSB7Cj4gKwkJ -SU5JVF9SRUcoInJlbW90ZTItbG93IiwgUkVNT1RFMl9MT1csIDExKTsKPiArCQlJTklUX1JFRygi -cmVtb3RlMi1oaWdoIiwgUkVNT1RFMl9ISUdILCAxMSk7Cj4gKwkJSU5JVF9SRUcoInJlbW90ZTIt -Y3JpdGljYWwiLCBSRU1PVEUyX0NSSVQsIDgpOwo+ICsJCUlOSVRfUkVHKCJyZW1vdGUyLWVtZXJn -ZW5jeSIsIFJFTU9URTJfRU1FUkcsIDgpOwo+ICsJfQo+ICsjdW5kZWYgSU5JVF9SRUcKPiArI2Vu -ZGlmCj4gICB9Cj4KPiAgIHN0YXRpYyBib29sIGxtOTBfaXNfdHJpcHBlZChzdHJ1Y3QgaTJjX2Ns -aWVudCAqY2xpZW50LCB1MTYgKnN0YXR1cykKPgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f -X19fX19fX19fX19fX19fX19fX19fCmxtLXNlbnNvcnMgbWFpbGluZyBsaXN0CmxtLXNlbnNvcnNA -bG0tc2Vuc29ycy5vcmcKaHR0cDovL2xpc3RzLmxtLXNlbnNvcnMub3JnL21haWxtYW4vbGlzdGlu -Zm8vbG0tc2Vuc29ycw= +On 01/21/2016 11:34 AM, Stéphan Kochen wrote: +> Allow a device tree to set initial temperature sensor parameters. +> +> Userspace can still override actual values through sysfs. +> +> Signed-off-by: Stéphan Kochen <stephan-j6uo2F6POYhmR6Xm/wNWPw@public.gmane.org> +> --- +> Documentation/devicetree/bindings/hwmon/lm90.txt | 40 +++++++++++++++++ +> drivers/hwmon/lm90.c | 55 ++++++++++++++++++++++-- +> 2 files changed, 92 insertions(+), 3 deletions(-) +> +> diff --git a/Documentation/devicetree/bindings/hwmon/lm90.txt b/Documentation/devicetree/bindings/hwmon/lm90.txt +> index e863248..045e94b 100644 +> --- a/Documentation/devicetree/bindings/hwmon/lm90.txt +> +++ b/Documentation/devicetree/bindings/hwmon/lm90.txt +> @@ -33,6 +33,38 @@ Optional properties: +> LM90 "-ALERT" pin output. +> See interrupt-controller/interrupts.txt for the format. +> +> +- update-interval: Interval at which temperatures are sampled, +> + Type: unsigned in milliseconds. +> + Size: one cell +> + +> +- local-low: Valid temperature range for the chip internal sensor, +> + local-high: outside which the alert will be set. Values are in +> + local-critical: millicelcius. +> + Type: signed +> + Size: one cell +> + +> +- remote-low: Valid temperature range for the external sensor, +> + remote-high: outside which the alert will be set. Values are in +> + remote-critical: millicelciius. +> + Type: signed +> + Size: one cell +> + +> +- remote-offset: Where available, an external sensor temperature offset. +> + Type: signed +> + Size: one cell +> + +> +- local-emergency: On max6659, max6695 and max6696, a configurable +> + remote-emergency: 3rd upper bound on temperature. +> + Type: signed +> + Size: one cell +> + +> +- remote2-low: On max6695 and max6696, a second external sensor. +> + remote2-high: +> + remote2-critical: +> + remote2-emergency: +> + Type: signed +> + Size: one cell +> + + +This very much smells like configuration, not hardware description. + +Having said that, the thermal subsystem does something similar. This raises even more +questions, though. Since patch 3 of the series introduces registration with the thermal +subsystem, it seems to me that the thermal subsystem should provide any limits used +to program the chips, and that there should be a mechanism for the thermal subsystem +to interact with the driver to both set the limits and to be informed if a limit +is exceeded. + +Also, _if_ such a set of properties is introduced and accepted by the devicetree +reviewers, it should probably be a set of properties which applies to _all_ hardware +monitoring drivers, not just to one. Even if support is not implemented immediately +in the hwmon core, the properties should be usable in a generic way, and not +reflect sysfs attribute names used by the hwmon subsystem. + +Thanks, +Guenter + +> Example LM90 node: +> +> temp-sensor { +> @@ -41,4 +73,12 @@ temp-sensor { +> vcc-supply = <&palmas_ldo6_reg>; +> interrupt-parent = <&gpio>; +> interrupts = <TEGRA_GPIO(O, 4) IRQ_TYPE_LEVEL_LOW>; +> + update-interval = <500>; +> + local-low = <5000>; +> + local-high = <80000>; +> + local-critical = <90000>; +> + remote-low = <5000>; +> + remote-high = <80000>; +> + remote-critical = <90000>; +> + remote-offset = <(-62125)>; +> } +> diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c +> index 88daf72..8ae8791 100644 +> --- a/drivers/hwmon/lm90.c +> +++ b/drivers/hwmon/lm90.c +> @@ -93,6 +93,7 @@ +> #include <linux/hwmon.h> +> #include <linux/err.h> +> #include <linux/mutex.h> +> +#include <linux/of.h> +> #include <linux/sysfs.h> +> #include <linux/interrupt.h> +> #include <linux/regulator/consumer.h> +> @@ -1504,8 +1505,16 @@ static void lm90_restore_conf(struct i2c_client *client, struct lm90_data *data) +> static void lm90_init_client(struct lm90_data *data) +> { +> struct i2c_client *client = data->client; +> + struct device *dev = &client->dev; +> u8 config, convrate; +> + u32 ms; +> +#ifdef CONFIG_OF +> + s32 temp; +> +#endif +> +> + /* +> + * Save old conversion rate. +> + */ +> if (lm90_read_reg(client, LM90_REG_R_CONVRATE, &convrate) < 0) { +> dev_warn(&client->dev, "Failed to read convrate register!\n"); +> convrate = LM90_DEF_CONVRATE_RVAL; +> @@ -1515,14 +1524,24 @@ static void lm90_init_client(struct lm90_data *data) +> /* +> * Start the conversions. +> */ +> - lm90_set_convrate_locked(data, 500); /* 500ms / 2Hz */ +> +#ifdef CONFIG_OF +> + if (of_property_read_u32(dev->of_node, "update-interval", &ms) < 0) +> +#endif +> + ms = 500; /* default rate: 2Hz */ +> + lm90_set_convrate_locked(data, ms); +> + +> + /* +> + * Save old config +> + */ +> if (lm90_read_reg(client, LM90_REG_R_CONFIG1, &config) < 0) { +> - dev_warn(&client->dev, "Initialization failed!\n"); +> + dev_warn(dev, "Initialization failed!\n"); +> return; +> } +> data->config_orig = config; +> +> - /* Check Temperature Range Select */ +> + /* +> + * Check Temperature Range Select +> + */ +> if (data->kind == adt7461 || data->kind == tmp451) { +> if (config & 0x04) +> data->flags |= LM90_FLAG_ADT7461_EXT; +> @@ -1545,6 +1564,36 @@ static void lm90_init_client(struct lm90_data *data) +> config &= 0xBF; /* run */ +> if (config != data->config_orig) /* Only write if changed */ +> i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1, config); +> + +> +#ifdef CONFIG_OF +> + /* +> + * Set initial values from devicetree +> + */ +> +#define INIT_REG(_property, _index, _bits) { \ +> + if (of_property_read_s32(dev->of_node, _property, &temp) == 0) \ +> + lm90_set_temp##_bits##_locked(data, _index, temp); \ +> +} +> + INIT_REG("local-low", LOCAL_LOW, 8); +> + INIT_REG("local-high", LOCAL_HIGH, 8); +> + INIT_REG("local-critical", LOCAL_CRIT, 8); +> + INIT_REG("remote-low", REMOTE_LOW, 11); +> + INIT_REG("remote-high", REMOTE_HIGH, 11); +> + INIT_REG("remote-critical", REMOTE_CRIT, 8); +> + if (data->flags & LM90_HAVE_OFFSET) { +> + INIT_REG("remote-offset", REMOTE_OFFSET, 11); +> + } +> + if (data->flags & LM90_HAVE_EMERGENCY) { +> + INIT_REG("local-emergency", LOCAL_EMERG, 8); +> + INIT_REG("remote-emergency", REMOTE_EMERG, 8); +> + } +> + if (data->flags & LM90_HAVE_TEMP3) { +> + INIT_REG("remote2-low", REMOTE2_LOW, 11); +> + INIT_REG("remote2-high", REMOTE2_HIGH, 11); +> + INIT_REG("remote2-critical", REMOTE2_CRIT, 8); +> + INIT_REG("remote2-emergency", REMOTE2_EMERG, 8); +> + } +> +#undef INIT_REG +> +#endif +> } +> +> static bool lm90_is_tripped(struct i2c_client *client, u16 *status) +> + +-- +To unsubscribe from this list: send the line "unsubscribe devicetree" in +the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org +More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/a/content_digest b/N1/content_digest index 72774e9..0320d91 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,9 +1,9 @@ "ref\01453404877-17897-1-git-send-email-stephan@kochen.nl\0" "ref\01453404877-17897-3-git-send-email-stephan@kochen.nl\0" "ref\01453404877-17897-3-git-send-email-stephan-j6uo2F6POYhmR6Xm/wNWPw@public.gmane.org\0" - "From\0Guenter Roeck <linux@roeck-us.net>\0" - "Subject\0Re: [lm-sensors] [PATCH 2/3] lm90: initialize parameters from devicetree\0" - "Date\0Fri, 22 Jan 2016 14:53:44 +0000\0" + "From\0Guenter Roeck <linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>\0" + "Subject\0Re: [PATCH 2/3] lm90: initialize parameters from devicetree\0" + "Date\0Fri, 22 Jan 2016 06:53:44 -0800\0" "To\0St\303\251phan Kochen <stephan-j6uo2F6POYhmR6Xm/wNWPw@public.gmane.org>" " Jean Delvare <jdelvare-IBi9RG/b67k@public.gmane.org>\0" "Cc\0Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>" @@ -15,122 +15,191 @@ " devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org\0" "\00:1\0" "b\0" - "T24gMDEvMjEvMjAxNiAxMTozNCBBTSwgU3TDqXBoYW4gS29jaGVuIHdyb3RlOgo+IEFsbG93IGEg\n" - "ZGV2aWNlIHRyZWUgdG8gc2V0IGluaXRpYWwgdGVtcGVyYXR1cmUgc2Vuc29yIHBhcmFtZXRlcnMu\n" - "Cj4KPiBVc2Vyc3BhY2UgY2FuIHN0aWxsIG92ZXJyaWRlIGFjdHVhbCB2YWx1ZXMgdGhyb3VnaCBz\n" - "eXNmcy4KPgo+IFNpZ25lZC1vZmYtYnk6IFN0w6lwaGFuIEtvY2hlbiA8c3RlcGhhbkBrb2NoZW4u\n" - "bmw+Cj4gLS0tCj4gICBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaHdtb24vbG05\n" - "MC50eHQgfCA0MCArKysrKysrKysrKysrKysrKwo+ICAgZHJpdmVycy9od21vbi9sbTkwLmMgICAg\n" - "ICAgICAgICAgICAgICAgICAgICAgICAgIHwgNTUgKysrKysrKysrKysrKysrKysrKysrKy0tCj4g\n" - "ICAyIGZpbGVzIGNoYW5nZWQsIDkyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCj4KPiBk\n" - "aWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2h3bW9uL2xtOTAu\n" - "dHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2h3bW9uL2xtOTAudHh0Cj4g\n" - "aW5kZXggZTg2MzI0OC4uMDQ1ZTk0YiAxMDA2NDQKPiAtLS0gYS9Eb2N1bWVudGF0aW9uL2Rldmlj\n" - "ZXRyZWUvYmluZGluZ3MvaHdtb24vbG05MC50eHQKPiArKysgYi9Eb2N1bWVudGF0aW9uL2Rldmlj\n" - "ZXRyZWUvYmluZGluZ3MvaHdtb24vbG05MC50eHQKPiBAQCAtMzMsNiArMzMsMzggQEAgT3B0aW9u\n" - "YWwgcHJvcGVydGllczoKPiAgICAgICAgICAgICAgICAgTE05MCAiLUFMRVJUIiBwaW4gb3V0cHV0\n" - "Lgo+ICAgICAgICAgICAgICAgICBTZWUgaW50ZXJydXB0LWNvbnRyb2xsZXIvaW50ZXJydXB0cy50\n" - "eHQgZm9yIHRoZSBmb3JtYXQuCj4KPiArLSB1cGRhdGUtaW50ZXJ2YWw6IEludGVydmFsIGF0IHdo\n" - "aWNoIHRlbXBlcmF0dXJlcyBhcmUgc2FtcGxlZCwKPiArICBUeXBlOiB1bnNpZ25lZCAgIGluIG1p\n" - "bGxpc2Vjb25kcy4KPiArICBTaXplOiBvbmUgY2VsbAo+ICsKPiArLSBsb2NhbC1sb3c6ICAgICAg\n" - "VmFsaWQgdGVtcGVyYXR1cmUgcmFuZ2UgZm9yIHRoZSBjaGlwIGludGVybmFsIHNlbnNvciwKPiAr\n" - "ICBsb2NhbC1oaWdoOiAgICAgb3V0c2lkZSB3aGljaCB0aGUgYWxlcnQgd2lsbCBiZSBzZXQuIFZh\n" - "bHVlcyBhcmUgaW4KPiArICBsb2NhbC1jcml0aWNhbDogbWlsbGljZWxjaXVzLgo+ICsgIFR5cGU6\n" - "IHNpZ25lZAo+ICsgIFNpemU6IG9uZSBjZWxsCj4gKwo+ICstIHJlbW90ZS1sb3c6ICAgICAgVmFs\n" - "aWQgdGVtcGVyYXR1cmUgcmFuZ2UgZm9yIHRoZSBleHRlcm5hbCBzZW5zb3IsCj4gKyAgcmVtb3Rl\n" - "LWhpZ2g6ICAgICBvdXRzaWRlIHdoaWNoIHRoZSBhbGVydCB3aWxsIGJlIHNldC4gVmFsdWVzIGFy\n" - "ZSBpbgo+ICsgIHJlbW90ZS1jcml0aWNhbDogbWlsbGljZWxjaWl1cy4KPiArICBUeXBlOiBzaWdu\n" - "ZWQKPiArICBTaXplOiBvbmUgY2VsbAo+ICsKPiArLSByZW1vdGUtb2Zmc2V0OiAgIFdoZXJlIGF2\n" - "YWlsYWJsZSwgYW4gZXh0ZXJuYWwgc2Vuc29yIHRlbXBlcmF0dXJlIG9mZnNldC4KPiArICBUeXBl\n" - "OiBzaWduZWQKPiArICBTaXplOiBvbmUgY2VsbAo+ICsKPiArLSBsb2NhbC1lbWVyZ2VuY3k6ICBP\n" - "biBtYXg2NjU5LCBtYXg2Njk1IGFuZCBtYXg2Njk2LCBhIGNvbmZpZ3VyYWJsZQo+ICsgIHJlbW90\n" - "ZS1lbWVyZ2VuY3k6IDNyZCB1cHBlciBib3VuZCBvbiB0ZW1wZXJhdHVyZS4KPiArICBUeXBlOiBz\n" - "aWduZWQKPiArICBTaXplOiBvbmUgY2VsbAo+ICsKPiArLSByZW1vdGUyLWxvdzogICAgICBPbiBt\n" - "YXg2Njk1IGFuZCBtYXg2Njk2LCBhIHNlY29uZCBleHRlcm5hbCBzZW5zb3IuCj4gKyAgcmVtb3Rl\n" - "Mi1oaWdoOgo+ICsgIHJlbW90ZTItY3JpdGljYWw6Cj4gKyAgcmVtb3RlMi1lbWVyZ2VuY3k6Cj4g\n" - "KyAgVHlwZTogc2lnbmVkCj4gKyAgU2l6ZTogb25lIGNlbGwKPiArCgpUaGlzIHZlcnkgbXVjaCBz\n" - "bWVsbHMgbGlrZSBjb25maWd1cmF0aW9uLCBub3QgaGFyZHdhcmUgZGVzY3JpcHRpb24uCgpIYXZp\n" - "bmcgc2FpZCB0aGF0LCB0aGUgdGhlcm1hbCBzdWJzeXN0ZW0gZG9lcyBzb21ldGhpbmcgc2ltaWxh\n" - "ci4gVGhpcyByYWlzZXMgZXZlbiBtb3JlCnF1ZXN0aW9ucywgdGhvdWdoLiBTaW5jZSBwYXRjaCAz\n" - "IG9mIHRoZSBzZXJpZXMgaW50cm9kdWNlcyByZWdpc3RyYXRpb24gd2l0aCB0aGUgdGhlcm1hbApz\n" - "dWJzeXN0ZW0sIGl0IHNlZW1zIHRvIG1lIHRoYXQgdGhlIHRoZXJtYWwgc3Vic3lzdGVtIHNob3Vs\n" - "ZCBwcm92aWRlIGFueSBsaW1pdHMgdXNlZAp0byBwcm9ncmFtIHRoZSBjaGlwcywgYW5kIHRoYXQg\n" - "dGhlcmUgc2hvdWxkIGJlIGEgbWVjaGFuaXNtIGZvciB0aGUgdGhlcm1hbCBzdWJzeXN0ZW0KdG8g\n" - "aW50ZXJhY3Qgd2l0aCB0aGUgZHJpdmVyIHRvIGJvdGggc2V0IHRoZSBsaW1pdHMgYW5kIHRvIGJl\n" - "IGluZm9ybWVkIGlmIGEgbGltaXQKaXMgZXhjZWVkZWQuCgpBbHNvLCBfaWZfIHN1Y2ggYSBzZXQg\n" - "b2YgcHJvcGVydGllcyBpcyBpbnRyb2R1Y2VkIGFuZCBhY2NlcHRlZCBieSB0aGUgZGV2aWNldHJl\n" - "ZQpyZXZpZXdlcnMsIGl0IHNob3VsZCBwcm9iYWJseSBiZSBhIHNldCBvZiBwcm9wZXJ0aWVzIHdo\n" - "aWNoIGFwcGxpZXMgdG8gX2FsbF8gaGFyZHdhcmUKbW9uaXRvcmluZyBkcml2ZXJzLCBub3QganVz\n" - "dCB0byBvbmUuIEV2ZW4gaWYgc3VwcG9ydCBpcyBub3QgaW1wbGVtZW50ZWQgaW1tZWRpYXRlbHkK\n" - "aW4gdGhlIGh3bW9uIGNvcmUsIHRoZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSB1c2FibGUgaW4gYSBn\n" - "ZW5lcmljIHdheSwgYW5kIG5vdApyZWZsZWN0IHN5c2ZzIGF0dHJpYnV0ZSBuYW1lcyB1c2VkIGJ5\n" - "IHRoZSBod21vbiBzdWJzeXN0ZW0uCgpUaGFua3MsCkd1ZW50ZXIKCj4gICBFeGFtcGxlIExNOTAg\n" - "bm9kZToKPgo+ICAgdGVtcC1zZW5zb3Igewo+IEBAIC00MSw0ICs3MywxMiBAQCB0ZW1wLXNlbnNv\n" - "ciB7Cj4gICAJdmNjLXN1cHBseSA9IDwmcGFsbWFzX2xkbzZfcmVnPjsKPiAgIAlpbnRlcnJ1cHQt\n" - "cGFyZW50ID0gPCZncGlvPjsKPiAgIAlpbnRlcnJ1cHRzID0gPFRFR1JBX0dQSU8oTywgNCkgSVJR\n" - "X1RZUEVfTEVWRUxfTE9XPjsKPiArCXVwZGF0ZS1pbnRlcnZhbCA9IDw1MDA+Owo+ICsJbG9jYWwt\n" - "bG93ID0gPDUwMDA+Owo+ICsJbG9jYWwtaGlnaCA9IDw4MDAwMD47Cj4gKwlsb2NhbC1jcml0aWNh\n" - "bCA9IDw5MDAwMD47Cj4gKwlyZW1vdGUtbG93ID0gPDUwMDA+Owo+ICsJcmVtb3RlLWhpZ2ggPSA8\n" - "ODAwMDA+Owo+ICsJcmVtb3RlLWNyaXRpY2FsID0gPDkwMDAwPjsKPiArCXJlbW90ZS1vZmZzZXQg\n" - "PSA8KC02MjEyNSk+Owo+ICAgfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTAuYyBi\n" - "L2RyaXZlcnMvaHdtb24vbG05MC5jCj4gaW5kZXggODhkYWY3Mi4uOGFlODc5MSAxMDA2NDQKPiAt\n" - "LS0gYS9kcml2ZXJzL2h3bW9uL2xtOTAuYwo+ICsrKyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCj4g\n" - "QEAgLTkzLDYgKzkzLDcgQEAKPiAgICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgo+ICAgI2luY2x1\n" - "ZGUgPGxpbnV4L2Vyci5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4gKyNpbmNsdWRl\n" - "IDxsaW51eC9vZi5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Cj4gICAjaW5jbHVkZSA8\n" - "bGludXgvaW50ZXJydXB0Lmg+Cj4gICAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVy\n" - "Lmg+Cj4gQEAgLTE1MDQsOCArMTUwNSwxNiBAQCBzdGF0aWMgdm9pZCBsbTkwX3Jlc3RvcmVfY29u\n" - "ZihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgbG05MF9kYXRhICpkYXRhKQo+ICAg\n" - "c3RhdGljIHZvaWQgbG05MF9pbml0X2NsaWVudChzdHJ1Y3QgbG05MF9kYXRhICpkYXRhKQo+ICAg\n" - "ewo+ICAgCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7Cj4gKwlzdHJ1\n" - "Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7Cj4gICAJdTggY29uZmlnLCBjb252cmF0ZTsK\n" - "PiArCXUzMiBtczsKPiArI2lmZGVmIENPTkZJR19PRgo+ICsJczMyIHRlbXA7Cj4gKyNlbmRpZgo+\n" - "Cj4gKwkvKgo+ICsJICogU2F2ZSBvbGQgY29udmVyc2lvbiByYXRlLgo+ICsJICovCj4gICAJaWYg\n" - "KGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX0NPTlZSQVRFLCAmY29udnJhdGUpIDwg\n" - "MCkgewo+ICAgCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJGYWlsZWQgdG8gcmVhZCBjb252cmF0\n" - "ZSByZWdpc3RlciFcbiIpOwo+ICAgCQljb252cmF0ZSA9IExNOTBfREVGX0NPTlZSQVRFX1JWQUw7\n" - "Cj4gQEAgLTE1MTUsMTQgKzE1MjQsMjQgQEAgc3RhdGljIHZvaWQgbG05MF9pbml0X2NsaWVudChz\n" - "dHJ1Y3QgbG05MF9kYXRhICpkYXRhKQo+ICAgCS8qCj4gICAJICogU3RhcnQgdGhlIGNvbnZlcnNp\n" - "b25zLgo+ICAgCSAqLwo+IC0JbG05MF9zZXRfY29udnJhdGVfbG9ja2VkKGRhdGEsIDUwMCk7ICAv\n" - "KiA1MDBtcyAvIDJIeiAgKi8KPiArI2lmZGVmIENPTkZJR19PRgo+ICsJaWYgKG9mX3Byb3BlcnR5\n" - "X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgInVwZGF0ZS1pbnRlcnZhbCIsICZtcykgPCAwKQo+ICsj\n" - "ZW5kaWYKPiArCQltcyA9IDUwMDsgIC8qIGRlZmF1bHQgcmF0ZTogMkh6ICovCj4gKwlsbTkwX3Nl\n" - "dF9jb252cmF0ZV9sb2NrZWQoZGF0YSwgbXMpOwo+ICsKPiArCS8qCj4gKwkgKiBTYXZlIG9sZCBj\n" - "b25maWcKPiArCSAqLwo+ICAgCWlmIChsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9D\n" - "T05GSUcxLCAmY29uZmlnKSA8IDApIHsKPiAtCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJJbml0\n" - "aWFsaXphdGlvbiBmYWlsZWQhXG4iKTsKPiArCQlkZXZfd2FybihkZXYsICJJbml0aWFsaXphdGlv\n" - "biBmYWlsZWQhXG4iKTsKPiAgIAkJcmV0dXJuOwo+ICAgCX0KPiAgIAlkYXRhLT5jb25maWdfb3Jp\n" - "ZyA9IGNvbmZpZzsKPgo+IC0JLyogQ2hlY2sgVGVtcGVyYXR1cmUgUmFuZ2UgU2VsZWN0ICovCj4g\n" - "KwkvKgo+ICsJICogQ2hlY2sgVGVtcGVyYXR1cmUgUmFuZ2UgU2VsZWN0Cj4gKwkgKi8KPiAgIAlp\n" - "ZiAoZGF0YS0+a2luZCA9PSBhZHQ3NDYxIHx8IGRhdGEtPmtpbmQgPT0gdG1wNDUxKSB7Cj4gICAJ\n" - "CWlmIChjb25maWcgJiAweDA0KQo+ICAgCQkJZGF0YS0+ZmxhZ3MgfD0gTE05MF9GTEFHX0FEVDc0\n" - "NjFfRVhUOwo+IEBAIC0xNTQ1LDYgKzE1NjQsMzYgQEAgc3RhdGljIHZvaWQgbG05MF9pbml0X2Ns\n" - "aWVudChzdHJ1Y3QgbG05MF9kYXRhICpkYXRhKQo+ICAgCWNvbmZpZyAmPSAweEJGOwkvKiBydW4g\n" - "Ki8KPiAgIAlpZiAoY29uZmlnICE9IGRhdGEtPmNvbmZpZ19vcmlnKSAvKiBPbmx5IHdyaXRlIGlm\n" - "IGNoYW5nZWQgKi8KPiAgIAkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIExNOTBf\n" - "UkVHX1dfQ09ORklHMSwgY29uZmlnKTsKPiArCj4gKyNpZmRlZiBDT05GSUdfT0YKPiArCS8qCj4g\n" - "KwkgKiBTZXQgaW5pdGlhbCB2YWx1ZXMgZnJvbSBkZXZpY2V0cmVlCj4gKwkgKi8KPiArI2RlZmlu\n" - "ZSBJTklUX1JFRyhfcHJvcGVydHksIF9pbmRleCwgX2JpdHMpIHsgXAo+ICsJaWYgKG9mX3Byb3Bl\n" - "cnR5X3JlYWRfczMyKGRldi0+b2Zfbm9kZSwgX3Byb3BlcnR5LCAmdGVtcCkgPT0gMCkgXAo+ICsJ\n" - "CWxtOTBfc2V0X3RlbXAjI19iaXRzIyNfbG9ja2VkKGRhdGEsIF9pbmRleCwgdGVtcCk7IFwKPiAr\n" - "fQo+ICsJSU5JVF9SRUcoImxvY2FsLWxvdyIsIExPQ0FMX0xPVywgOCk7Cj4gKwlJTklUX1JFRygi\n" - "bG9jYWwtaGlnaCIsIExPQ0FMX0hJR0gsIDgpOwo+ICsJSU5JVF9SRUcoImxvY2FsLWNyaXRpY2Fs\n" - "IiwgTE9DQUxfQ1JJVCwgOCk7Cj4gKwlJTklUX1JFRygicmVtb3RlLWxvdyIsIFJFTU9URV9MT1cs\n" - "IDExKTsKPiArCUlOSVRfUkVHKCJyZW1vdGUtaGlnaCIsIFJFTU9URV9ISUdILCAxMSk7Cj4gKwlJ\n" - "TklUX1JFRygicmVtb3RlLWNyaXRpY2FsIiwgUkVNT1RFX0NSSVQsIDgpOwo+ICsJaWYgKGRhdGEt\n" - "PmZsYWdzICYgTE05MF9IQVZFX09GRlNFVCkgewo+ICsJCUlOSVRfUkVHKCJyZW1vdGUtb2Zmc2V0\n" - "IiwgUkVNT1RFX09GRlNFVCwgMTEpOwo+ICsJfQo+ICsJaWYgKGRhdGEtPmZsYWdzICYgTE05MF9I\n" - "QVZFX0VNRVJHRU5DWSkgewo+ICsJCUlOSVRfUkVHKCJsb2NhbC1lbWVyZ2VuY3kiLCBMT0NBTF9F\n" - "TUVSRywgOCk7Cj4gKwkJSU5JVF9SRUcoInJlbW90ZS1lbWVyZ2VuY3kiLCBSRU1PVEVfRU1FUkcs\n" - "IDgpOwo+ICsJfQo+ICsJaWYgKGRhdGEtPmZsYWdzICYgTE05MF9IQVZFX1RFTVAzKSB7Cj4gKwkJ\n" - "SU5JVF9SRUcoInJlbW90ZTItbG93IiwgUkVNT1RFMl9MT1csIDExKTsKPiArCQlJTklUX1JFRygi\n" - "cmVtb3RlMi1oaWdoIiwgUkVNT1RFMl9ISUdILCAxMSk7Cj4gKwkJSU5JVF9SRUcoInJlbW90ZTIt\n" - "Y3JpdGljYWwiLCBSRU1PVEUyX0NSSVQsIDgpOwo+ICsJCUlOSVRfUkVHKCJyZW1vdGUyLWVtZXJn\n" - "ZW5jeSIsIFJFTU9URTJfRU1FUkcsIDgpOwo+ICsJfQo+ICsjdW5kZWYgSU5JVF9SRUcKPiArI2Vu\n" - "ZGlmCj4gICB9Cj4KPiAgIHN0YXRpYyBib29sIGxtOTBfaXNfdHJpcHBlZChzdHJ1Y3QgaTJjX2Ns\n" - "aWVudCAqY2xpZW50LCB1MTYgKnN0YXR1cykKPgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f\n" - "X19fX19fX19fX19fX19fX19fX19fCmxtLXNlbnNvcnMgbWFpbGluZyBsaXN0CmxtLXNlbnNvcnNA\n" - "bG0tc2Vuc29ycy5vcmcKaHR0cDovL2xpc3RzLmxtLXNlbnNvcnMub3JnL21haWxtYW4vbGlzdGlu\n" - Zm8vbG0tc2Vuc29ycw= + "On 01/21/2016 11:34 AM, St\303\251phan Kochen wrote:\n" + "> Allow a device tree to set initial temperature sensor parameters.\n" + ">\n" + "> Userspace can still override actual values through sysfs.\n" + ">\n" + "> Signed-off-by: St\303\251phan Kochen <stephan-j6uo2F6POYhmR6Xm/wNWPw@public.gmane.org>\n" + "> ---\n" + "> Documentation/devicetree/bindings/hwmon/lm90.txt | 40 +++++++++++++++++\n" + "> drivers/hwmon/lm90.c | 55 ++++++++++++++++++++++--\n" + "> 2 files changed, 92 insertions(+), 3 deletions(-)\n" + ">\n" + "> diff --git a/Documentation/devicetree/bindings/hwmon/lm90.txt b/Documentation/devicetree/bindings/hwmon/lm90.txt\n" + "> index e863248..045e94b 100644\n" + "> --- a/Documentation/devicetree/bindings/hwmon/lm90.txt\n" + "> +++ b/Documentation/devicetree/bindings/hwmon/lm90.txt\n" + "> @@ -33,6 +33,38 @@ Optional properties:\n" + "> LM90 \"-ALERT\" pin output.\n" + "> See interrupt-controller/interrupts.txt for the format.\n" + ">\n" + "> +- update-interval: Interval at which temperatures are sampled,\n" + "> + Type: unsigned in milliseconds.\n" + "> + Size: one cell\n" + "> +\n" + "> +- local-low: Valid temperature range for the chip internal sensor,\n" + "> + local-high: outside which the alert will be set. Values are in\n" + "> + local-critical: millicelcius.\n" + "> + Type: signed\n" + "> + Size: one cell\n" + "> +\n" + "> +- remote-low: Valid temperature range for the external sensor,\n" + "> + remote-high: outside which the alert will be set. Values are in\n" + "> + remote-critical: millicelciius.\n" + "> + Type: signed\n" + "> + Size: one cell\n" + "> +\n" + "> +- remote-offset: Where available, an external sensor temperature offset.\n" + "> + Type: signed\n" + "> + Size: one cell\n" + "> +\n" + "> +- local-emergency: On max6659, max6695 and max6696, a configurable\n" + "> + remote-emergency: 3rd upper bound on temperature.\n" + "> + Type: signed\n" + "> + Size: one cell\n" + "> +\n" + "> +- remote2-low: On max6695 and max6696, a second external sensor.\n" + "> + remote2-high:\n" + "> + remote2-critical:\n" + "> + remote2-emergency:\n" + "> + Type: signed\n" + "> + Size: one cell\n" + "> +\n" + "\n" + "This very much smells like configuration, not hardware description.\n" + "\n" + "Having said that, the thermal subsystem does something similar. This raises even more\n" + "questions, though. Since patch 3 of the series introduces registration with the thermal\n" + "subsystem, it seems to me that the thermal subsystem should provide any limits used\n" + "to program the chips, and that there should be a mechanism for the thermal subsystem\n" + "to interact with the driver to both set the limits and to be informed if a limit\n" + "is exceeded.\n" + "\n" + "Also, _if_ such a set of properties is introduced and accepted by the devicetree\n" + "reviewers, it should probably be a set of properties which applies to _all_ hardware\n" + "monitoring drivers, not just to one. Even if support is not implemented immediately\n" + "in the hwmon core, the properties should be usable in a generic way, and not\n" + "reflect sysfs attribute names used by the hwmon subsystem.\n" + "\n" + "Thanks,\n" + "Guenter\n" + "\n" + "> Example LM90 node:\n" + ">\n" + "> temp-sensor {\n" + "> @@ -41,4 +73,12 @@ temp-sensor {\n" + "> \tvcc-supply = <&palmas_ldo6_reg>;\n" + "> \tinterrupt-parent = <&gpio>;\n" + "> \tinterrupts = <TEGRA_GPIO(O, 4) IRQ_TYPE_LEVEL_LOW>;\n" + "> +\tupdate-interval = <500>;\n" + "> +\tlocal-low = <5000>;\n" + "> +\tlocal-high = <80000>;\n" + "> +\tlocal-critical = <90000>;\n" + "> +\tremote-low = <5000>;\n" + "> +\tremote-high = <80000>;\n" + "> +\tremote-critical = <90000>;\n" + "> +\tremote-offset = <(-62125)>;\n" + "> }\n" + "> diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c\n" + "> index 88daf72..8ae8791 100644\n" + "> --- a/drivers/hwmon/lm90.c\n" + "> +++ b/drivers/hwmon/lm90.c\n" + "> @@ -93,6 +93,7 @@\n" + "> #include <linux/hwmon.h>\n" + "> #include <linux/err.h>\n" + "> #include <linux/mutex.h>\n" + "> +#include <linux/of.h>\n" + "> #include <linux/sysfs.h>\n" + "> #include <linux/interrupt.h>\n" + "> #include <linux/regulator/consumer.h>\n" + "> @@ -1504,8 +1505,16 @@ static void lm90_restore_conf(struct i2c_client *client, struct lm90_data *data)\n" + "> static void lm90_init_client(struct lm90_data *data)\n" + "> {\n" + "> \tstruct i2c_client *client = data->client;\n" + "> +\tstruct device *dev = &client->dev;\n" + "> \tu8 config, convrate;\n" + "> +\tu32 ms;\n" + "> +#ifdef CONFIG_OF\n" + "> +\ts32 temp;\n" + "> +#endif\n" + ">\n" + "> +\t/*\n" + "> +\t * Save old conversion rate.\n" + "> +\t */\n" + "> \tif (lm90_read_reg(client, LM90_REG_R_CONVRATE, &convrate) < 0) {\n" + "> \t\tdev_warn(&client->dev, \"Failed to read convrate register!\\n\");\n" + "> \t\tconvrate = LM90_DEF_CONVRATE_RVAL;\n" + "> @@ -1515,14 +1524,24 @@ static void lm90_init_client(struct lm90_data *data)\n" + "> \t/*\n" + "> \t * Start the conversions.\n" + "> \t */\n" + "> -\tlm90_set_convrate_locked(data, 500); /* 500ms / 2Hz */\n" + "> +#ifdef CONFIG_OF\n" + "> +\tif (of_property_read_u32(dev->of_node, \"update-interval\", &ms) < 0)\n" + "> +#endif\n" + "> +\t\tms = 500; /* default rate: 2Hz */\n" + "> +\tlm90_set_convrate_locked(data, ms);\n" + "> +\n" + "> +\t/*\n" + "> +\t * Save old config\n" + "> +\t */\n" + "> \tif (lm90_read_reg(client, LM90_REG_R_CONFIG1, &config) < 0) {\n" + "> -\t\tdev_warn(&client->dev, \"Initialization failed!\\n\");\n" + "> +\t\tdev_warn(dev, \"Initialization failed!\\n\");\n" + "> \t\treturn;\n" + "> \t}\n" + "> \tdata->config_orig = config;\n" + ">\n" + "> -\t/* Check Temperature Range Select */\n" + "> +\t/*\n" + "> +\t * Check Temperature Range Select\n" + "> +\t */\n" + "> \tif (data->kind == adt7461 || data->kind == tmp451) {\n" + "> \t\tif (config & 0x04)\n" + "> \t\t\tdata->flags |= LM90_FLAG_ADT7461_EXT;\n" + "> @@ -1545,6 +1564,36 @@ static void lm90_init_client(struct lm90_data *data)\n" + "> \tconfig &= 0xBF;\t/* run */\n" + "> \tif (config != data->config_orig) /* Only write if changed */\n" + "> \t\ti2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1, config);\n" + "> +\n" + "> +#ifdef CONFIG_OF\n" + "> +\t/*\n" + "> +\t * Set initial values from devicetree\n" + "> +\t */\n" + "> +#define INIT_REG(_property, _index, _bits) { \\\n" + "> +\tif (of_property_read_s32(dev->of_node, _property, &temp) == 0) \\\n" + "> +\t\tlm90_set_temp##_bits##_locked(data, _index, temp); \\\n" + "> +}\n" + "> +\tINIT_REG(\"local-low\", LOCAL_LOW, 8);\n" + "> +\tINIT_REG(\"local-high\", LOCAL_HIGH, 8);\n" + "> +\tINIT_REG(\"local-critical\", LOCAL_CRIT, 8);\n" + "> +\tINIT_REG(\"remote-low\", REMOTE_LOW, 11);\n" + "> +\tINIT_REG(\"remote-high\", REMOTE_HIGH, 11);\n" + "> +\tINIT_REG(\"remote-critical\", REMOTE_CRIT, 8);\n" + "> +\tif (data->flags & LM90_HAVE_OFFSET) {\n" + "> +\t\tINIT_REG(\"remote-offset\", REMOTE_OFFSET, 11);\n" + "> +\t}\n" + "> +\tif (data->flags & LM90_HAVE_EMERGENCY) {\n" + "> +\t\tINIT_REG(\"local-emergency\", LOCAL_EMERG, 8);\n" + "> +\t\tINIT_REG(\"remote-emergency\", REMOTE_EMERG, 8);\n" + "> +\t}\n" + "> +\tif (data->flags & LM90_HAVE_TEMP3) {\n" + "> +\t\tINIT_REG(\"remote2-low\", REMOTE2_LOW, 11);\n" + "> +\t\tINIT_REG(\"remote2-high\", REMOTE2_HIGH, 11);\n" + "> +\t\tINIT_REG(\"remote2-critical\", REMOTE2_CRIT, 8);\n" + "> +\t\tINIT_REG(\"remote2-emergency\", REMOTE2_EMERG, 8);\n" + "> +\t}\n" + "> +#undef INIT_REG\n" + "> +#endif\n" + "> }\n" + ">\n" + "> static bool lm90_is_tripped(struct i2c_client *client, u16 *status)\n" + ">\n" + "\n" + "--\n" + "To unsubscribe from this list: send the line \"unsubscribe devicetree\" in\n" + "the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org\n" + More majordomo info at http://vger.kernel.org/majordomo-info.html -37cfc71ba56a699417fc53299b1d66113d800472b1f90822647fa612ce1432a3 +69e356bc9cbef5c9ed8eb087fbe369131d310369f87ef4bdc0164dd94ebe8510
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.