Introduce MEN 14F021P00 BMC driver series
Subsystems (6)
Andreas Werner
maintainerv5 cover Introduce MEN 14F021P00 BMC driver series
This patch set add support for the MEN 14F021P00 Board Management called BMC.
The BMC is a PIC Mikrocontroller which assembled on almost all of our 3U Compact PCI CPU board and a few Box PCs.
main part of the BMC is to start and monitor the board, but there are a lot more features which can be accessed using an I2C Host interface
Features supported in this Patchset:
- Watchdog
- LEDs
- HWMON
The Patchset includes a MFD Core driver, Watchdog, hwmon and LEDs driver.
Changes in v5:
- fixed I2C dependency in MFD Kconfig
- added correct error handling in update function of the hwmon slave (Use of ERR_PTR)
- add ATTRIBUTE_GROUP Macro in hwmon slave
and deleted platform_set_drvdata
Changes in v4:
- fixed some style issues
- fixed GPL license version
- added hwmon voltage monitoring slave driver
Changes in v3:
- deleted i2c_smbus wrapper functions and use native one
- some cosmentics and variable renaming to be more clear
- renamed "leave production" mode to "exit production mode"
Changes in v2:
- changed i2c_smbus_read wrapper function to return both, value and error.
- moved "leave production mode" from Watchdog driver to mfd core.
- fixed some return values in the watchdog driver to return the original error value instead of -EIO.
Andreas Werner (4):
drivers/mfd/menf21bmc: introduce MEN 14F021P00 BMC MFD Core driver drivers/watchdog/menf21bmc_wdt: introduce MEN 14F021P00 BMC Watchdog
driver
drivers/leds/leds-menf21bmc: introduce MEN 14F021P00 BMC LED driver drivers/hwmon/menf21bmc_hwmon: introduce MEN14F021P00 BMC HWMON driver
Documentation/hwmon/menf21bmc | 49 +++++++++ drivers/hwmon/Kconfig | 7 ++ drivers/hwmon/Makefile | 1 + drivers/hwmon/menf21bmc_hwmon.c | 230 +++++++++++++++++++++++++++++++++++++++ drivers/leds/Kconfig | 6 + drivers/leds/Makefile | 1 + drivers/leds/leds-menf21bmc.c | 131 ++++++++++++++++++++++ drivers/mfd/Kconfig | 12 ++ drivers/mfd/Makefile | 1 + drivers/mfd/menf21bmc.c | 132 ++++++++++++++++++++++ drivers/watchdog/Kconfig | 7 ++ drivers/watchdog/Makefile | 1 + drivers/watchdog/menf21bmc_wdt.c | 203 ++++++++++++++++++++++++++++++++++ 13 files changed, 781 insertions(+) create mode 100644 Documentation/hwmon/menf21bmc create mode 100644 drivers/hwmon/menf21bmc_hwmon.c create mode 100644 drivers/leds/leds-menf21bmc.c create mode 100644 drivers/mfd/menf21bmc.c create mode 100644 drivers/watchdog/menf21bmc_wdt.c
Signature · 1 line
2.0.4
Andreas Werner
maintainerPATCH v5 1/4 drivers/mfd/menf21bmc: introduce MEN 14F021P00 BMC MFD Core driver
The MEN 14F021P00 Board Management Controller provides an
I2C interface to the host to access the feature implemented in the BMC. The BMC is a PIC Microntroller assembled on CPCI Card from MEN Mikroelektronik and on a few Box/Display Computer.
Added MFD Core driver, supporting the I2C communication to the device.
The MFD driver currently supports the following features:
- Watchdog
- LEDs
- Hwmon (voltage monitoring)
--- drivers/mfd/Kconfig | 12 +++++ drivers/mfd/Makefile | 1 + drivers/mfd/menf21bmc.c | 132 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 145 insertions(+) create mode 100644 drivers/mfd/menf21bmc.c
drivers/mfd/Kconfig +12 -0
@@ -453,6 +453,18 @@ config MFD_MAX8998 additional drivers must be enabled in order to use the functionality of the device. +config MFD_MENF21BMC + tristate "MEN 14F021P00 Board Management Controller Support" + depends on I2C + select MFD_CORE + help + Say yes here to add support for the MEN 14F021P00 BMC + which is a Board Management Controller connected to the I2C bus. + The device supports multiple sub-devices like LED, HWMON and WDT. + This driver provides common support for accessing the devices; + additional drivers must be enabled in order to use the + functionality of the BMC device. + config EZX_PCAP bool "Motorola EZXPCAP Support" depends on SPI_MASTER
drivers/mfd/Makefile +1 -0
@@ -169,6 +169,7 @@ obj-$(CONFIG_MFD_AS3711) += as3711.o obj-$(CONFIG_MFD_AS3722) += as3722.o obj-$(CONFIG_MFD_STW481X) += stw481x.o obj-$(CONFIG_MFD_IPAQ_MICRO) += ipaq-micro.o +obj-$(CONFIG_MFD_MENF21BMC) += menf21bmc.o intel-soc-pmic-objs := intel_soc_pmic_core.o intel_soc_pmic_crc.o obj-$(CONFIG_INTEL_SOC_PMIC) += intel-soc-pmic.o
drivers/mfd/menf21bmc.c new file +132 -0
132 lines not on this page · raw message
Signature · 1 line
2.0.4
Re: [PATCH v5 1/4] drivers/mfd/menf21bmc: introduce MEN 14F021P00 BMC MFD Core driver
T24gVHVlLCAyNiBBdWcgMjAxNCwgQW5kcmVhcyBXZXJuZXIgd3JvdGU6Cj4gVGhlIE1FTiAxNEYw MjFQMDAgQm9hcmQgTWFuYWdlbWVudCBDb250cm9sbGVyIHByb3ZpZGVzIGFuCj4gSTJDIGludGVy ZmFjZSB0byB0aGUgaG9zdCB0byBhY2Nlc3MgdGhlIGZlYXR1cmUgaW1wbGVtZW50ZWQgaW4gdGhl IEJNQy4KPiBUaGUgQk1DIGlzIGEgUElDIE1pY3JvbnRyb2xsZXIgYXNzZW1ibGVkIG9uIENQQ0kg Q2FyZCBmcm9tIE1FTiBNaWtyb2VsZWt0cm9uaWsKPiBhbmQgb24gYSBmZXcgQm94L0Rpc3BsYXkg Q29tcHV0ZXIuCj4gCj4gQWRkZWQgTUZEIENvcmUgZHJpdmVyLCBzdXBwb3J0aW5nIHRoZSBJMkMg Y29tbXVuaWNhdGlvbiB0byB0aGUgZGV2aWNlLgo+IAo+IFRoZSBNRkQgZHJpdmVyIGN1cnJlbnRs eSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzOgo+ICAJLSBXYXRjaGRvZwo+ICAJLSBM RURzCj4gCS0gSHdtb24gKHZvbHRhZ2UgbW9uaXRvcmluZykKPiAKPiBTaWduZWQtb2ZmLWJ5OiBB bmRyZWFzIFdlcm5lciA8YW5kcmVhcy53ZXJuZXJAbWVuLmRlPgo+IEFja2VkLWJ5OiBMZWUgSm9u ZXMgPGxlZS5qb25lc0BsaW5hcm8ub3JnPgo+IC0tLQo+ICBkcml2ZXJzL21mZC9LY29uZmlnICAg ICB8ICAxMiArKysrKwo+ICBkcml2ZXJzL21mZC9NYWtlZmlsZSAgICB8ICAgMSArCj4gIGRyaXZl cnMvbWZkL21lbmYyMWJtYy5jIHwgMTMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+ICAzIGZpbGVzIGNoYW5nZWQsIDE0NSBpbnNlcnRpb25zKCspCj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21mZC9tZW5mMjFibWMuYwo+IAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwo+IGluZGV4IGI4 ZDljYTAuLjZhOWYxMDEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9tZmQvS2NvbmZpZwo+ICsrKyBi L2RyaXZlcnMvbWZkL0tjb25maWcKPiBAQCAtNDUzLDYgKzQ1MywxOCBAQCBjb25maWcgTUZEX01B WDg5OTgKPiAgCSAgYWRkaXRpb25hbCBkcml2ZXJzIG11c3QgYmUgZW5hYmxlZCBpbiBvcmRlciB0 byB1c2UgdGhlIGZ1bmN0aW9uYWxpdHkKPiAgCSAgb2YgdGhlIGRldmljZS4KPiAgCj4gK2NvbmZp ZyBNRkRfTUVORjIxQk1DCj4gKwl0cmlzdGF0ZSAiTUVOIDE0RjAyMVAwMCBCb2FyZCBNYW5hZ2Vt ZW50IENvbnRyb2xsZXIgU3VwcG9ydCIKPiArCWRlcGVuZHMgb24gSTJDCj4gKwlzZWxlY3QgTUZE X0NPUkUKPiArCWhlbHAKPiArCSAgU2F5IHllcyBoZXJlIHRvIGFkZCBzdXBwb3J0IGZvciB0aGUg TUVOIDE0RjAyMVAwMCBCTUMKPiArCSAgd2hpY2ggaXMgYSBCb2FyZCBNYW5hZ2VtZW50IENvbnRy b2xsZXIgY29ubmVjdGVkIHRvIHRoZSBJMkMgYnVzLgo+ICsJICBUaGUgZGV2aWNlIHN1cHBvcnRz IG11bHRpcGxlIHN1Yi1kZXZpY2VzIGxpa2UgTEVELCBIV01PTiAgYW5kIFdEVC4KCk5pdDogV2hp dGVzcGFjZSBlcnJvci4KCj4gKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGNvbW1vbiBzdXBwb3J0 IGZvciBhY2Nlc3NpbmcgdGhlIGRldmljZXM7Cj4gKwkgIGFkZGl0aW9uYWwgZHJpdmVycyBtdXN0 IGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gdXNlIHRoZQo+ICsJICBmdW5jdGlvbmFsaXR5IG9mIHRo ZSBCTUMgZGV2aWNlLgo+ICsKPiAgY29uZmlnIEVaWF9QQ0FQCj4gIAlib29sICJNb3Rvcm9sYSBF WlhQQ0FQIFN1cHBvcnQiCj4gIAlkZXBlbmRzIG9uIFNQSV9NQVNURVIKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9tZmQvTWFrZWZpbGUgYi9kcml2ZXJzL21mZC9NYWtlZmlsZQo+IGluZGV4IDRlMmJj MjUuLjM3YmYzMzYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9tZmQvTWFrZWZpbGUKPiArKysgYi9k cml2ZXJzL21mZC9NYWtlZmlsZQo+IEBAIC0xNjksNiArMTY5LDcgQEAgb2JqLSQoQ09ORklHX01G RF9BUzM3MTEpCSs9IGFzMzcxMS5vCj4gIG9iai0kKENPTkZJR19NRkRfQVMzNzIyKQkrPSBhczM3 MjIubwo+ICBvYmotJChDT05GSUdfTUZEX1NUVzQ4MVgpCSs9IHN0dzQ4MXgubwo+ICBvYmotJChD T05GSUdfTUZEX0lQQVFfTUlDUk8pCSs9IGlwYXEtbWljcm8ubwo+ICtvYmotJChDT05GSUdfTUZE X01FTkYyMUJNQykJKz0gbWVuZjIxYm1jLm8KPiAgCj4gIGludGVsLXNvYy1wbWljLW9ianMJCTo9 IGludGVsX3NvY19wbWljX2NvcmUubyBpbnRlbF9zb2NfcG1pY19jcmMubwo+ICBvYmotJChDT05G SUdfSU5URUxfU09DX1BNSUMpCSs9IGludGVsLXNvYy1wbWljLm8KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9tZmQvbWVuZjIxYm1jLmMgYi9kcml2ZXJzL21mZC9tZW5mMjFibWMuYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYTZlYjAzZgo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9kcml2ZXJzL21mZC9tZW5mMjFibWMuYwo+IEBAIC0wLDAgKzEsMTMyIEBACj4gKy8qCj4g KyAqICBNRU4gMTRGMDIxUDAwIEJvYXJkIE1hbmFnZW1lbnQgQ29udHJvbGxlciAoQk1DKSBNRkQg Q29yZSBEcml2ZXIuCj4gKyAqCj4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTQgTUVOIE1pa3JvIEVs ZWt0cm9uaWsgTnVlcm5iZXJnIEdtYkgKPiArICoKPiArICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAo+ICsg KiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkgdGhlCj4gKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRo ZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKPiArICogIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o Pgo+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KPiArI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+ICsjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUu aD4KPiArCj4gKyNkZWZpbmUgQk1DX0NNRF9XRFRfRVhJVF9QUk9ECTB4MTgKPiArI2RlZmluZSBC TUNfQ01EX1dEVF9QUk9EX1NUQVQJMHgxOQo+ICsjZGVmaW5lIEJNQ19DTURfUkVWX01BSk9SCTB4 ODAKPiArI2RlZmluZSBCTUNfQ01EX1JFVl9NSU5PUgkweDgxCj4gKyNkZWZpbmUgQk1DX0NNRF9S RVZfTUFJTgkweDgyCj4gKwo+ICtzdGF0aWMgc3RydWN0IG1mZF9jZWxsIG1lbmYyMWJtY19jZWxs W10gPSB7Cj4gKwl7IC5uYW1lID0gIm1lbmYyMWJtY193ZHQiLCB9LAo+ICsJeyAubmFtZSA9ICJt ZW5mMjFibWNfbGVkIiwgfSwKPiArCXsgLm5hbWUgPSAibWVuZjIxYm1jX2h3bW9uIiwgfQo+ICt9 Owo+ICsKPiArc3RhdGljIGludCBtZW5mMjFibWNfd2R0X2V4aXRfcHJvZF9tb2RlKHN0cnVjdCBp MmNfY2xpZW50ICpjbGllbnQpCj4gK3sKPiArCWludCB2YWwsIHJldDsKPiArCj4gKwl2YWwgPSBp MmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBCTUNfQ01EX1dEVF9QUk9EX1NUQVQpOwo+ ICsJaWYgKHZhbCA8IDApCj4gKwkJcmV0dXJuIHZhbDsKPiArCj4gKwkvKgo+ICsJICogUHJvZHVj dGlvbiBtb2RlIHNob3VsZCBiZSBub3QgYWN0aXZlIGFmdGVyIGRlbGl2ZXJ5IG9mIHRoZSBCb2Fy ZC4KPiArCSAqIFRvIGJlIHN1cmUgd2UgY2hlY2sgaXQsIGluZm9ybSB0aGUgdXNlciBhbmQgZXhp dCB0aGUgbW9kZQo+ICsJICogaWYgYWN0aXZlLgo+ICsJICovCj4gKwlpZiAodmFsID09IDB4MDAp IHsKPiArCQlkZXZfaW5mbygmY2xpZW50LT5kZXYsCj4gKwkJCSJCTUMgaW4gcHJvZHVjdGlvbiBt b2RlLiBFeGl0IHByb2R1Y3Rpb24gbW9kZVxuIik7Cj4gKwo+ICsJCXJldCA9IGkyY19zbWJ1c193 cml0ZV9ieXRlKGNsaWVudCwgQk1DX0NNRF9XRFRfRVhJVF9QUk9EKTsKPiArCQlpZiAocmV0IDwg MCkKPiArCQkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr c3RhdGljIGludAo+ICttZW5mMjFibWNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwg Y29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkcykKPiArewo+ICsJaW50IHJldDsKPiArCWlu dCByZXZfbWFqb3IsIHJldl9taW5vciwgcmV2X21haW47CgpSZWFsbHkgc21hbGwgbml0IChhcyB5 b3UgaGF2ZSB0byBmaXggdGhlIHdoaXRlc3BhY2UgZXJyIGFueXdheSk6CiAgQ2FuIHlvdSBjaGFu Z2UgdGhlIG9yZGVyIG9mIHRoZSB0d28gbGluZXMgYWJvdmUgcGxlYXNlPwoKPiArCXJldCA9IGky Y19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKPiArCQkJCSAgICAgIEkyQ19G VU5DX1NNQlVTX0JZVEVfREFUQSB8Cj4gKwkJCQkgICAgICBJMkNfRlVOQ19TTUJVU19XT1JEX0RB VEEgfAo+ICsJCQkJICAgICAgSTJDX0ZVTkNfU01CVVNfQllURSk7Cj4gKwlpZiAoIXJldCkKPiAr CQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwlyZXZfbWFqb3IgPSBpMmNfc21idXNfcmVhZF93b3Jk X2RhdGEoY2xpZW50LCBCTUNfQ01EX1JFVl9NQUpPUik7Cj4gKwlpZiAocmV2X21ham9yIDwgMCkg ewo+ICsJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIGdldCBCTUMgbWFqb3IgcmV2 aXNpb25cbiIpOwo+ICsJCXJldHVybiByZXZfbWFqb3I7Cj4gKwl9Cj4gKwo+ICsJcmV2X21pbm9y ID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwgQk1DX0NNRF9SRVZfTUlOT1IpOwo+ ICsJaWYgKHJldl9taW5vciA8IDApIHsKPiArCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxl ZCB0byBnZXQgQk1DIG1pbm9yIHJldmlzaW9uXG4iKTsKPiArCQlyZXR1cm4gcmV2X21pbm9yOwo+ ICsJfQo+ICsKPiArCXJldl9tYWluID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwg Qk1DX0NNRF9SRVZfTUFJTik7Cj4gKwlpZiAocmV2X21haW4gPCAwKSB7Cj4gKwkJZGV2X2Vycigm Y2xpZW50LT5kZXYsICJmYWlsZWQgdG8gZ2V0IEJNQyBtYWluIHJldmlzaW9uXG4iKTsKPiArCQly ZXR1cm4gcmV2X21haW47Cj4gKwl9Cj4gKwo+ICsJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiRlcg UmV2aXNpb246ICUwMmQuJTAyZC4lMDJkXG4iLAo+ICsJCQkJCXJldl9tYWpvciwgcmV2X21pbm9y LCByZXZfbWFpbik7CgpZb3UgZW5mb3JjZWQgYSAnbGluZSA+IDgwIGNoYXJzJyB3YXJuaW5nIGlu IHlvdXIgb3RoZXIgZHJpdmVyIGp1c3Qgc28KeW91IGNhbiAnZG8gdGhlIHJpZ2h0IHRoaW5nJyBh bmQgbGluZSB1cCBhZ2FpbnN0IHRoZSAnKCcuIDopCgpDYW4geW91IGRvIHRoYXQgaGVyZSBwbGVh c2U/Cgo+ICsJLyoKPiArCSAqIFdlIGhhdmUgdG8gZXhpdCB0aGUgUHJvZHVjdGlvbiBNb2RlIG9m IHRoZSBCTUMgdG8gYWN0aXZhdGUgdGhlCj4gKwkgKiBXYXRjaGRvZyBmdW5jdGlvbmFsaXR5IGFu ZCB0aGUgQklPUyBsaWZlIHNpZ24gbW9uaXRvcmluZy4KPiArCSAqLwo+ICsJcmV0ID0gbWVuZjIx Ym1jX3dkdF9leGl0X3Byb2RfbW9kZShjbGllbnQpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlk ZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byBsZWF2ZSBwcm9kdWN0aW9uIG1vZGVcbiIp Owo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKCZj bGllbnQtPmRldiwgMCwgbWVuZjIxYm1jX2NlbGwsCj4gKwkJCQlBUlJBWV9TSVpFKG1lbmYyMWJt Y19jZWxsKSwgTlVMTCwgMCwgTlVMTCk7CgpMaW5lIHVwIHRvIHRvICcoJy4KCj4gKwlpZiAocmV0 IDwgMCkgewo+ICsJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBCTUMgc3Vi LWRldmljZXNcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgbWVuZjIxYm1jX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAq Y2xpZW50KQo+ICt7Cj4gKwltZmRfcmVtb3ZlX2RldmljZXMoJmNsaWVudC0+ZGV2KTsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbWVu ZjIxYm1jX2lkX3RhYmxlW10gPSB7Cj4gKwl7ICJtZW5mMjFibWMiLCAwIH0sCgpUaGUgc2Vjb25k IGF0dHJpYnV0ZSBpcyB1bnVzZWQgaW4gdGhpcyBkcml2ZXIsIHBsZWFzZSByZW1vdmUgaXQuCgo+ ICsJeyB9Cj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBtZW5mMjFibWNfaWRfdGFi bGUpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1lbmYyMWJtY19kcml2ZXIgPSB7 Cj4gKwkuZHJpdmVyLm5hbWUJPSAibWVuZjIxYm1jIiwKPiArCS5pZF90YWJsZQk9IG1lbmYyMWJt Y19pZF90YWJsZSwKPiArCS5wcm9iZQkJPSBtZW5mMjFibWNfcHJvYmUsCj4gKwkucmVtb3ZlCQk9 IG1lbmYyMWJtY19yZW1vdmUsCj4gK307CgpObyBEVCBzdXBwb3J0PwoKPiArbW9kdWxlX2kyY19k cml2ZXIobWVuZjIxYm1jX2RyaXZlcik7Cj4gKwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIk1FTiAx NEYwMjFQMDAgQk1DIG1mZCBjb3JlIGRyaXZlciIpOwoKcy9tZmQvTUZECgo+ICtNT0RVTEVfQVVU SE9SKCJBbmRyZWFzIFdlcm5lciA8YW5kcmVhcy53ZXJuZXJAbWVuLmRlPiIpOwo+ICtNT0RVTEVf TElDRU5TRSgiR1BMIHYyIik7CgotLSAKTGVlIEpvbmVzCkxpbmFybyBTVE1pY3JvZWxlY3Ryb25p Y3MgTGFuZGluZyBUZWFtIExlYWQKTGluYXJvLm9yZyDilIIgT3BlbiBzb3VyY2Ugc29mdHdhcmUg Zm9yIEFSTSBTb0NzCkZvbGxvdyBMaW5hcm86IEZhY2Vib29rIHwgVHdpdHRlciB8IEJsb2cKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxtLXNlbnNvcnMg bWFpbGluZyBsaXN0CmxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKaHR0cDovL2xpc3RzLmxtLXNl bnNvcnMub3JnL21haWxtYW4vbGlzdGluZm8vbG0tc2Vuc29ycw=
Andreas Werner
maintainerRe: [PATCH v5 1/4] drivers/mfd/menf21bmc: introduce MEN 14F021P00 BMC MFD Core driver
Quoted 30 lines · Lee Jones
Quoted 29 lines · Andreas Werner
The MEN 14F021P00 Board Management Controller provides an
I2C interface to the host to access the feature implemented in the BMC. The BMC is a PIC Microntroller assembled on CPCI Card from MEN Mikroelektronik and on a few Box/Display Computer.Added MFD Core driver, supporting the I2C communication to the device.
The MFD driver currently supports the following features:
(quoted diff) +0
-0- Watchdog - LEDs- Hwmon (voltage monitoring)
Signed-off-by Andreas Werner <[email protected]>Acked-by Lee Jones <[email protected]>--- drivers/mfd/Kconfig | 12 +++++ drivers/mfd/Makefile | 1 + drivers/mfd/menf21bmc.c | 132 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 145 insertions(+) create mode 100644 drivers/mfd/menf21bmc.cdrivers/mfd/Kconfig +0
-0@@ -453,6 +453,18 @@ config MFD_MAX8998 additional drivers must be enabled in order to use the functionality of the device.
Quoted 11 lines
drivers/mfd/Kconfig config MFD_MAX8998 · line 463
Quoted 8 lines
drivers/mfd/Kconfig +8
-0+config MFD_MENF21BMC + tristate "MEN 14F021P00 Board Management Controller Support" + depends on I2C + select MFD_CORE + help + Say yes here to add support for the MEN 14F021P00 BMC + which is a Board Management Controller connected to the I2C bus. + The device supports multiple sub-devices like LED, HWMON and WDT.Nit: Whitespace error.
Forgot to run checkpatch on Kconfig since the last change. Will fix it.
Quoted 79 lines
Quoted 79 lines
drivers/mfd/Kconfig +4
-0+ This driver provides common support for accessing the devices; + additional drivers must be enabled in order to use the + functionality of the BMC device. + config EZX_PCAP bool "Motorola EZXPCAP Support" depends on SPI_MASTERdrivers/mfd/Makefile +1
-0@@ -169,6 +169,7 @@ obj-$(CONFIG_MFD_AS3711) += as3711.o obj-$(CONFIG_MFD_AS3722) += as3722.o obj-$(CONFIG_MFD_STW481X) += stw481x.o obj-$(CONFIG_MFD_IPAQ_MICRO) += ipaq-micro.o +obj-$(CONFIG_MFD_MENF21BMC) += menf21bmc.o intel-soc-pmic-objs := intel_soc_pmic_core.o intel_soc_pmic_crc.o obj-$(CONFIG_INTEL_SOC_PMIC) += intel-soc-pmic.odrivers/mfd/menf21bmc.c new file +54
-0@@ -0,0 +1,132 @@ +/* +* MEN 14F021P00 Board Management Controller (BMC) MFD Core Driver. +* +* Copyright (C) 2014 MEN Mikro Elektronik Nuernberg GmbH +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at your +* option) any later version. +*/ + +#include <linux/kernel.h> +#include <linux/device.h> +#include <linux/module.h> +#include <linux/i2c.h> +#include <linux/mfd/core.h> + +#define BMC_CMD_WDT_EXIT_PROD 0x18 +#define BMC_CMD_WDT_PROD_STAT 0x19 +#define BMC_CMD_REV_MAJOR 0x80 +#define BMC_CMD_REV_MINOR 0x81 +#define BMC_CMD_REV_MAIN 0x82 + +static struct mfd_cell menf21bmc_cell[] = { + { .name ="menf21bmc_wdt" , }, + { .name ="menf21bmc_led" , }, + { .name ="menf21bmc_hwmon" , } +}; + +static int menf21bmc_wdt_exit_prod_mode (struct i2c_client *client) +{ +int val, ret; + + val =i2c_smbus_read_byte_data (client,BMC_CMD_WDT_PROD_STAT ); +if (val <0 ) +return val; + +/* +* Production mode should be not active after delivery of the Board. +* To be sure we check it, inform the user and exit the mode +* if active. +*/ +if (val ==0x00 ) { +dev_info (&client->dev, +"BMC in production mode. Exit production mode\n" ); + + ret =i2c_smbus_write_byte (client,BMC_CMD_WDT_EXIT_PROD ); +if (ret <0 ) +return ret; + } + +return 0 ; +} +
Quoted 8 lines
drivers/mfd/menf21bmc.c line 59
Quoted 5 lines
drivers/mfd/menf21bmc.c new file +5
-0+static int +menf21bmc_probe (struct i2c_client *client,const struct i2c_device_id *ids) +{ +int ret; +int rev_major, rev_minor, rev_main;Really small nit (as you have to fix the whitespace err anyway):
Can you change the order of the two lines above please?
No problem.
Quoted 32 lines
Quoted 18 lines
drivers/mfd/menf21bmc.c new file +17
-0+ ret =i2c_check_functionality (client->adapter, +I2C_FUNC_SMBUS_BYTE_DATA | +I2C_FUNC_SMBUS_WORD_DATA | +I2C_FUNC_SMBUS_BYTE ); +if (!ret) +return -ENODEV ; + + rev_major =i2c_smbus_read_word_data (client,BMC_CMD_REV_MAJOR ); +if (rev_major <0 ) { +dev_err (&client->dev,"failed to get BMC major revision\n" ); +return rev_major; + } + + rev_minor =i2c_smbus_read_word_data (client,BMC_CMD_REV_MINOR ); +if (rev_minor <0 ) { +dev_err (&client->dev,"failed to get BMC minor revision\n" ); +return rev_minor;drivers/mfd/menf21bmc.c line 87
Quoted 10 lines
drivers/mfd/menf21bmc.c new file +10
-0+ } + + rev_main =i2c_smbus_read_word_data (client,BMC_CMD_REV_MAIN ); +if (rev_main <0 ) { +dev_err (&client->dev,"failed to get BMC main revision\n" ); +return rev_main; + } + +dev_info (&client->dev,"FW Revision: %02d.%02d.%02d\n" , + rev_major, rev_minor, rev_main);You enforced a 'line > 80 chars' warning in your other driver just so you can 'do the right thing' and line up against the '('. :)
Quoted 2 lines
Can you do that here please?
yes
Quoted 6 lines
Quoted 6 lines
drivers/mfd/menf21bmc.c new file +6
-0+/* +* We have to exit the Production Mode of the BMC to activate the +* Watchdog functionality and the BIOS life sign monitoring. +*/ + ret =menf21bmc_wdt_exit_prod_mode (client); +if (ret <0 ) {
Quoted 9 lines
drivers/mfd/menf21bmc.c line 100
Quoted 6 lines
drivers/mfd/menf21bmc.c new file +6
-0+dev_err (&client->dev,"failed to leave production mode\n" ); +return ret; + } + + ret =mfd_add_devices (&client->dev,0 , menf21bmc_cell, +ARRAY_SIZE (menf21bmc_cell),NULL ,0 ,NULL );Line up to to '('.
ok
Quoted 10 lines
Quoted 10 lines
drivers/mfd/menf21bmc.c new file +10
-0+if (ret <0 ) { +dev_err (&client->dev,"failed to add BMC sub-devices\n" ); +return ret; + } + +return 0 ; +} + +static int menf21bmc_remove (struct i2c_client *client) +{
Quoted 9 lines
drivers/mfd/menf21bmc.c line 116
Quoted 6 lines
drivers/mfd/menf21bmc.c new file +6
-0+mfd_remove_devices (&client->dev); +return 0 ; +} + +static const struct i2c_device_id menf21bmc_id_table[] = { + {"menf21bmc" ,0 },The second attribute is unused in this driver, please remove it.
ok
Quoted 27 lines
drivers/mfd/menf21bmc.c line 126
Quoted 10 lines
drivers/mfd/menf21bmc.c new file +10
-0+ { } +}; +MODULE_DEVICE_TABLE (i2c, menf21bmc_id_table); + +static struct i2c_driver menf21bmc_driver = { + .driver.name ="menf21bmc" , + .id_table = menf21bmc_id_table, + .probe = menf21bmc_probe, + .remove = menf21bmc_remove, +};No DT support?
drivers/mfd/menf21bmc.c line 130
Quoted 3 lines
drivers/mfd/menf21bmc.c new file +3
-0+module_i2c_driver (menf21bmc_driver); + +MODULE_DESCRIPTION ("MEN 14F021P00 BMC mfd core driver" );s/mfd/MFD
Quoted 2 lines
drivers/mfd/menf21bmc.c new file +2
-0+MODULE_AUTHOR ("Andreas Werner <[email protected]>" ); +MODULE_LICENSE ("GPL v2" );Signature · 4 lines
Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
Andreas Werner
maintainerRe: [PATCH v5 1/4] drivers/mfd/menf21bmc: introduce MEN 14F021P00 BMC MFD Core driver
In reply to Lee JonesQuoted 30 lines · Lee Jones
Quoted 29 lines · Andreas Werner
The MEN 14F021P00 Board Management Controller provides an
I2C interface to the host to access the feature implemented in the BMC. The BMC is a PIC Microntroller assembled on CPCI Card from MEN Mikroelektronik and on a few Box/Display Computer.Added MFD Core driver, supporting the I2C communication to the device.
The MFD driver currently supports the following features:
(quoted diff) +0
-0- Watchdog - LEDs- Hwmon (voltage monitoring)
Signed-off-by Andreas Werner <[email protected]>Acked-by Lee Jones <[email protected]>--- drivers/mfd/Kconfig | 12 +++++ drivers/mfd/Makefile | 1 + drivers/mfd/menf21bmc.c | 132 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 145 insertions(+) create mode 100644 drivers/mfd/menf21bmc.cdrivers/mfd/Kconfig +0
-0@@ -453,6 +453,18 @@ config MFD_MAX8998 additional drivers must be enabled in order to use the functionality of the device.
Quoted 11 lines
drivers/mfd/Kconfig config MFD_MAX8998 · line 463
Quoted 8 lines
drivers/mfd/Kconfig +8
-0+config MFD_MENF21BMC + tristate "MEN 14F021P00 Board Management Controller Support" + depends on I2C + select MFD_CORE + help + Say yes here to add support for the MEN 14F021P00 BMC + which is a Board Management Controller connected to the I2C bus. + The device supports multiple sub-devices like LED, HWMON and WDT.Nit: Whitespace error.
I run checkpatch but did not find any whitespace error. Where is it?
...
Quoted 11 lines
drivers/mfd/Kconfig config MFD_MAX8998
Quoted 8 lines
drivers/mfd/Kconfig +8
-0+MODULE_DEVICE_TABLE(i2c, menf21bmc_id_table); + +static struct i2c_driver menf21bmc_driver = { + .driver.name = "menf21bmc", + .id_table = menf21bmc_id_table, + .probe = menf21bmc_probe, + .remove = menf21bmc_remove, +};No DT support?
No not at the moment because it is used only on x86 system.
Quoted 14 lines
drivers/mfd/Kconfig
Quoted 3 lines
drivers/mfd/Kconfig +3
-0+module_i2c_driver(menf21bmc_driver); + +MODULE_DESCRIPTION("MEN 14F021P00 BMC mfd core driver");s/mfd/MFD
Quoted 2 lines
drivers/mfd/Kconfig +2
-0+MODULE_AUTHOR("Andreas Werner <[email protected]>"); +MODULE_LICENSE("GPL v2");Signature · 4 lines
Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
Re: [PATCH v5 1/4] drivers/mfd/menf21bmc: introduce MEN 14F021P00 BMC MFD Core driver
T24gV2VkLCAyNyBBdWcgMjAxNCwgQW5kcmVhcyBXZXJuZXIgd3JvdGU6Cj4gT24gV2VkLCBBdWcg MjcsIDIwMTQgYXQgMDg6MjY6MzNBTSArMDEwMCwgTGVlIEpvbmVzIHdyb3RlOgo+ID4gT24gVHVl LCAyNiBBdWcgMjAxNCwgQW5kcmVhcyBXZXJuZXIgd3JvdGU6Cj4gPiA+IFRoZSBNRU4gMTRGMDIx UDAwIEJvYXJkIE1hbmFnZW1lbnQgQ29udHJvbGxlciBwcm92aWRlcyBhbgo+ID4gPiBJMkMgaW50 ZXJmYWNlIHRvIHRoZSBob3N0IHRvIGFjY2VzcyB0aGUgZmVhdHVyZSBpbXBsZW1lbnRlZCBpbiB0 aGUgQk1DLgo+ID4gPiBUaGUgQk1DIGlzIGEgUElDIE1pY3JvbnRyb2xsZXIgYXNzZW1ibGVkIG9u IENQQ0kgQ2FyZCBmcm9tIE1FTiBNaWtyb2VsZWt0cm9uaWsKPiA+ID4gYW5kIG9uIGEgZmV3IEJv eC9EaXNwbGF5IENvbXB1dGVyLgo+ID4gPiAKPiA+ID4gQWRkZWQgTUZEIENvcmUgZHJpdmVyLCBz dXBwb3J0aW5nIHRoZSBJMkMgY29tbXVuaWNhdGlvbiB0byB0aGUgZGV2aWNlLgo+ID4gPiAKPiA+ ID4gVGhlIE1GRCBkcml2ZXIgY3VycmVudGx5IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZmVhdHVy ZXM6Cj4gPiA+ICAJLSBXYXRjaGRvZwo+ID4gPiAgCS0gTEVEcwo+ID4gPiAJLSBId21vbiAodm9s dGFnZSBtb25pdG9yaW5nKQo+ID4gPiAKPiA+ID4gU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBXZXJu ZXIgPGFuZHJlYXMud2VybmVyQG1lbi5kZT4KPiA+ID4gQWNrZWQtYnk6IExlZSBKb25lcyA8bGVl LmpvbmVzQGxpbmFyby5vcmc+Cj4gPiA+IC0tLQo+ID4gPiAgZHJpdmVycy9tZmQvS2NvbmZpZyAg ICAgfCAgMTIgKysrKysKPiA+ID4gIGRyaXZlcnMvbWZkL01ha2VmaWxlICAgIHwgICAxICsKPiA+ ID4gIGRyaXZlcnMvbWZkL21lbmYyMWJtYy5jIHwgMTMyICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gPiAgMyBmaWxlcyBjaGFuZ2VkLCAxNDUgaW5z ZXJ0aW9ucygrKQo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWZkL21lbmYyMWJt Yy5jCj4gPiA+IAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvS2NvbmZpZyBiL2RyaXZl cnMvbWZkL0tjb25maWcKPiA+ID4gaW5kZXggYjhkOWNhMC4uNmE5ZjEwMSAxMDA2NDQKPiA+ID4g LS0tIGEvZHJpdmVycy9tZmQvS2NvbmZpZwo+ID4gPiArKysgYi9kcml2ZXJzL21mZC9LY29uZmln Cj4gPiA+IEBAIC00NTMsNiArNDUzLDE4IEBAIGNvbmZpZyBNRkRfTUFYODk5OAo+ID4gPiAgCSAg YWRkaXRpb25hbCBkcml2ZXJzIG11c3QgYmUgZW5hYmxlZCBpbiBvcmRlciB0byB1c2UgdGhlIGZ1 bmN0aW9uYWxpdHkKPiA+ID4gIAkgIG9mIHRoZSBkZXZpY2UuCj4gPiA+ICAKPiA+ID4gK2NvbmZp ZyBNRkRfTUVORjIxQk1DCj4gPiA+ICsJdHJpc3RhdGUgIk1FTiAxNEYwMjFQMDAgQm9hcmQgTWFu YWdlbWVudCBDb250cm9sbGVyIFN1cHBvcnQiCj4gPiA+ICsJZGVwZW5kcyBvbiBJMkMKPiA+ID4g KwlzZWxlY3QgTUZEX0NPUkUKPiA+ID4gKwloZWxwCj4gPiA+ICsJICBTYXkgeWVzIGhlcmUgdG8g YWRkIHN1cHBvcnQgZm9yIHRoZSBNRU4gMTRGMDIxUDAwIEJNQwo+ID4gPiArCSAgd2hpY2ggaXMg YSBCb2FyZCBNYW5hZ2VtZW50IENvbnRyb2xsZXIgY29ubmVjdGVkIHRvIHRoZSBJMkMgYnVzLgo+ ID4gPiArCSAgVGhlIGRldmljZSBzdXBwb3J0cyBtdWx0aXBsZSBzdWItZGV2aWNlcyBsaWtlIExF RCwgSFdNT04gIGFuZCBXRFQuCj4gPiAKPiA+IE5pdDogV2hpdGVzcGFjZSBlcnJvci4KPiA+IAo+ IAo+IEkgcnVuIGNoZWNrcGF0Y2ggYnV0IGRpZCBub3QgZmluZCBhbnkgd2hpdGVzcGFjZSBlcnJv ci4KPiBXaGVyZSBpcyBpdD8KCkFmdGVyICdIV01PTicuCgo+ID4gPiArTU9EVUxFX0RFVklDRV9U QUJMRShpMmMsIG1lbmYyMWJtY19pZF90YWJsZSk7Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBzdHJ1 Y3QgaTJjX2RyaXZlciBtZW5mMjFibWNfZHJpdmVyID0gewo+ID4gPiArCS5kcml2ZXIubmFtZQk9 ICJtZW5mMjFibWMiLAo+ID4gPiArCS5pZF90YWJsZQk9IG1lbmYyMWJtY19pZF90YWJsZSwKPiA+ ID4gKwkucHJvYmUJCT0gbWVuZjIxYm1jX3Byb2JlLAo+ID4gPiArCS5yZW1vdmUJCT0gbWVuZjIx Ym1jX3JlbW92ZSwKPiA+ID4gK307Cj4gPiAKPiA+IE5vIERUIHN1cHBvcnQ/Cj4gPiAKPiAKPiBO byBub3QgYXQgdGhlIG1vbWVudCBiZWNhdXNlIGl0IGlzIHVzZWQgb25seSBvbiB4ODYgc3lzdGVt LgoKQWggb2theS4gIFNob3VsZG4ndCB0aGUgS2NvbmZpZyBkZXBlbmQgb24gWDg2IHRoZW4/ICBX aGF0IGFib3V0IEFDUEk/Cgo+ID4gPiArbW9kdWxlX2kyY19kcml2ZXIobWVuZjIxYm1jX2RyaXZl cik7Cj4gPiA+ICsKPiA+ID4gK01PRFVMRV9ERVNDUklQVElPTigiTUVOIDE0RjAyMVAwMCBCTUMg bWZkIGNvcmUgZHJpdmVyIik7Cj4gPiAKPiA+IHMvbWZkL01GRAo+ID4gCj4gPiA+ICtNT0RVTEVf QVVUSE9SKCJBbmRyZWFzIFdlcm5lciA8YW5kcmVhcy53ZXJuZXJAbWVuLmRlPiIpOwo+ID4gPiAr TU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+ID4gCgotLSAKTGVlIEpvbmVzCkxpbmFybyBTVE1p Y3JvZWxlY3Ryb25pY3MgTGFuZGluZyBUZWFtIExlYWQKTGluYXJvLm9yZyDilIIgT3BlbiBzb3Vy Y2Ugc29mdHdhcmUgZm9yIEFSTSBTb0NzCkZvbGxvdyBMaW5hcm86IEZhY2Vib29rIHwgVHdpdHRl ciB8IEJsb2cKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmxtLXNlbnNvcnMgbWFpbGluZyBsaXN0CmxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKaHR0cDov L2xpc3RzLmxtLXNlbnNvcnMub3JnL21haWxtYW4vbGlzdGluZm8vbG0tc2Vuc29ycw=
Andreas Werner
maintainerRe: [PATCH v5 1/4] drivers/mfd/menf21bmc: introduce MEN 14F021P00 BMC MFD Core driver
Quoted 44 lines · Lee Jones
Quoted 43 lines · Andreas Werner
Quoted 41 lines · Lee Jones
Quoted 27 lines · Andreas Werner
The MEN 14F021P00 Board Management Controller provides an
I2C interface to the host to access the feature implemented in the BMC. The BMC is a PIC Microntroller assembled on CPCI Card from MEN Mikroelektronik and on a few Box/Display Computer.Added MFD Core driver, supporting the I2C communication to the device.
The MFD driver currently supports the following features:
(quoted diff) +0
-0- Watchdog - LEDs- Hwmon (voltage monitoring)
Signed-off-by Andreas Werner <[email protected]>Acked-by Lee Jones <[email protected]>--- drivers/mfd/Kconfig | 12 +++++ drivers/mfd/Makefile | 1 + drivers/mfd/menf21bmc.c | 132 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 145 insertions(+) create mode 100644 drivers/mfd/menf21bmc.cdrivers/mfd/Kconfig +0
-0@@ -453,6 +453,18 @@ config MFD_MAX8998 additional drivers must be enabled in order to use the functionalitydrivers/mfd/Kconfig config MFD_MAX8998 · line 463
Quoted 10 lines
drivers/mfd/Kconfig +8
-0of the device. +config MFD_MENF21BMC + tristate "MEN 14F021P00 Board Management Controller Support" + depends on I2C + select MFD_CORE + help + Say yes here to add support for the MEN 14F021P00 BMC + which is a Board Management Controller connected to the I2C bus. + The device supports multiple sub-devices like LED, HWMON and WDT.Nit: Whitespace error.
Quoted 5 lines
Quoted 2 lines
I run checkpatch but did not find any whitespace error. Where is it?
After 'HWMON'.
Ah ok.
Quoted 12 lines
Quoted 12 lines
Quoted 11 lines
drivers/mfd/Kconfig config MFD_MAX8998
Quoted 8 lines
drivers/mfd/Kconfig +8
-0+MODULE_DEVICE_TABLE(i2c, menf21bmc_id_table); + +static struct i2c_driver menf21bmc_driver = { + .driver.name = "menf21bmc", + .id_table = menf21bmc_id_table, + .probe = menf21bmc_probe, + .remove = menf21bmc_remove, +};No DT support?
Quoted 3 lines
Quoted 1 line
No not at the moment because it is used only on x86 system.
Ah okay. Shouldn't the
Kconfigdepend on X86 then? What about ACPI?
Yes and no. Could be also instantiated manually withouth DT. (e.g. i2c sysfs) So for me it is better to not depend on x86 to have the possibility to use the driver without DT on another arch.
ACPI is no option because there are a lot boards out without
the BMC in ACPI Table.
I think i will implement DT support if we have on board which is not x86.
Quoted 16 lines
Quoted 10 lines
Quoted 10 lines
drivers/mfd/Kconfig
Quoted 4 lines
drivers/mfd/Kconfig +3
-0+module_i2c_driver(menf21bmc_driver); + +MODULE_DESCRIPTION("MEN 14F021P00 BMC mfd core driver");s/mfd/MFD
Quoted 2 lines
drivers/mfd/Kconfig +2
-0+MODULE_AUTHOR("Andreas Werner <[email protected]>"); +MODULE_LICENSE("GPL v2");Signature · 4 lines
Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
Re: [PATCH v5 1/4] drivers/mfd/menf21bmc: introduce MEN 14F021P00 BMC MFD Core driver
Quoted 69 lines · Andreas Werner
Quoted 44 lines · Lee Jones
Quoted 43 lines · Andreas Werner
Quoted 41 lines · Lee Jones
Quoted 27 lines · Andreas Werner
The MEN 14F021P00 Board Management Controller provides an
I2C interface to the host to access the feature implemented in the BMC. The BMC is a PIC Microntroller assembled on CPCI Card from MEN Mikroelektronik and on a few Box/Display Computer.Added MFD Core driver, supporting the I2C communication to the device.
The MFD driver currently supports the following features:
(quoted diff) +0
-0- Watchdog - LEDs- Hwmon (voltage monitoring)
Signed-off-by Andreas Werner <[email protected]>Acked-by Lee Jones <[email protected]>--- drivers/mfd/Kconfig | 12 +++++ drivers/mfd/Makefile | 1 + drivers/mfd/menf21bmc.c | 132 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 145 insertions(+) create mode 100644 drivers/mfd/menf21bmc.cdrivers/mfd/Kconfig +0
-0@@ -453,6 +453,18 @@ config MFD_MAX8998 additional drivers must be enabled in order to use the functionalitydrivers/mfd/Kconfig config MFD_MAX8998 · line 463
Quoted 10 lines
drivers/mfd/Kconfig +8
-0of the device. +config MFD_MENF21BMC + tristate "MEN 14F021P00 Board Management Controller Support" + depends on I2C + select MFD_CORE + help + Say yes here to add support for the MEN 14F021P00 BMC + which is a Board Management Controller connected to the I2C bus. + The device supports multiple sub-devices like LED, HWMON and WDT.Nit: Whitespace error.
Quoted 5 lines
Quoted 2 lines
I run checkpatch but did not find any whitespace error. Where is it?
After 'HWMON'.
Ah ok.
Quoted 12 lines
Quoted 12 lines
Quoted 11 lines
drivers/mfd/Kconfig config MFD_MAX8998
Quoted 8 lines
drivers/mfd/Kconfig +8
-0+MODULE_DEVICE_TABLE(i2c, menf21bmc_id_table); + +static struct i2c_driver menf21bmc_driver = { + .driver.name = "menf21bmc", + .id_table = menf21bmc_id_table, + .probe = menf21bmc_probe, + .remove = menf21bmc_remove, +};No DT support?
Quoted 3 lines
Quoted 1 line
No not at the moment because it is used only on x86 system.
Ah okay. Shouldn't the
Kconfigdepend on X86 then? What about ACPI?
Quoted 7 lines
Yes and no. Could be also instantiated manually withouth DT. (e.g. i2c sysfs) So for me it is better to not depend on x86 to have the possibility to use the driver without DT on another arch.
ACPI is no option because there are a lot boards out without
the BMC in ACPI Table.I think i will implement DT support if we have on board which is not x86.
Very well.
Quoted 10 lines
Quoted 10 lines
Quoted 9 lines
Quoted 9 lines
drivers/mfd/Kconfig
Quoted 3 lines
drivers/mfd/Kconfig +3
-0+module_i2c_driver(menf21bmc_driver); + +MODULE_DESCRIPTION("MEN 14F021P00 BMC mfd core driver");s/mfd/MFD
Quoted 2 lines
drivers/mfd/Kconfig +2
-0+MODULE_AUTHOR("Andreas Werner <[email protected]>"); +MODULE_LICENSE("GPL v2");
Signature · 4 lines
Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
Guenter Roeck
maintainerRe: [PATCH v5 1/4] drivers/mfd/menf21bmc: introduce MEN 14F021P00 BMC MFD Core driver
In reply to Lee JonesQuoted 14 lines · Lee Jones
Quoted 12 lines · Andreas Werner
The MEN 14F021P00 Board Management Controller provides an
I2C interface to the host to access the feature implemented in the BMC. The BMC is a PIC Microntroller assembled on CPCI Card from MEN Mikroelektronik and on a few Box/Display Computer.Added MFD Core driver, supporting the I2C communication to the device.
The MFD driver currently supports the following features:
- Watchdog
- LEDs
- Hwmon (voltage monitoring)
Quoted 13 lines
drivers/mfd/menf21bmc.c line 126
Quoted 10 lines
drivers/mfd/menf21bmc.c new file +10
-0+ { } +}; +MODULE_DEVICE_TABLE (i2c, menf21bmc_id_table); + +static struct i2c_driver menf21bmc_driver = { + .driver.name ="menf21bmc" , + .id_table = menf21bmc_id_table, + .probe = menf21bmc_probe, + .remove = menf21bmc_remove, +};No DT support?
i2c devices auto-instantiate from dt entries even if there is no explicit devicetree configuration here. The devicetree entry would have to be something like "men,menf21bmc", ie it needs to match the driver name.
Guenter
_______________________________________________
lm-sensors mailing list
[email protected]
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
Re: [PATCH v5 1/4] drivers/mfd/menf21bmc: introduce MEN 14F021P00 BMC MFD Core driver
T24gV2VkLCAyNyBBdWcgMjAxNCwgR3VlbnRlciBSb2VjayB3cm90ZToKPiBPbiAwOC8yNy8yMDE0 IDEyOjI2IEFNLCBMZWUgSm9uZXMgd3JvdGU6Cj4gPk9uIFR1ZSwgMjYgQXVnIDIwMTQsIEFuZHJl YXMgV2VybmVyIHdyb3RlOgo+ID4+VGhlIE1FTiAxNEYwMjFQMDAgQm9hcmQgTWFuYWdlbWVudCBD b250cm9sbGVyIHByb3ZpZGVzIGFuCj4gPj5JMkMgaW50ZXJmYWNlIHRvIHRoZSBob3N0IHRvIGFj Y2VzcyB0aGUgZmVhdHVyZSBpbXBsZW1lbnRlZCBpbiB0aGUgQk1DLgo+ID4+VGhlIEJNQyBpcyBh IFBJQyBNaWNyb250cm9sbGVyIGFzc2VtYmxlZCBvbiBDUENJIENhcmQgZnJvbSBNRU4gTWlrcm9l bGVrdHJvbmlrCj4gPj5hbmQgb24gYSBmZXcgQm94L0Rpc3BsYXkgQ29tcHV0ZXIuCj4gPj4KPiA+ PkFkZGVkIE1GRCBDb3JlIGRyaXZlciwgc3VwcG9ydGluZyB0aGUgSTJDIGNvbW11bmljYXRpb24g dG8gdGhlIGRldmljZS4KPiA+Pgo+ID4+VGhlIE1GRCBkcml2ZXIgY3VycmVudGx5IHN1cHBvcnRz IHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6Cj4gPj4gIAktIFdhdGNoZG9nCj4gPj4gIAktIExFRHMK PiA+PgktIEh3bW9uICh2b2x0YWdlIG1vbml0b3JpbmcpCj4gPj4KPiAKPiA+PisJeyB9Cj4gPj4r fTsKPiA+PitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbWVuZjIxYm1jX2lkX3RhYmxlKTsKPiA+ PisKPiA+PitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbWVuZjIxYm1jX2RyaXZlciA9IHsKPiA+ PisJLmRyaXZlci5uYW1lCT0gIm1lbmYyMWJtYyIsCj4gPj4rCS5pZF90YWJsZQk9IG1lbmYyMWJt Y19pZF90YWJsZSwKPiA+PisJLnByb2JlCQk9IG1lbmYyMWJtY19wcm9iZSwKPiA+PisJLnJlbW92 ZQkJPSBtZW5mMjFibWNfcmVtb3ZlLAo+ID4+K307Cj4gPgo+ID5ObyBEVCBzdXBwb3J0Pwo+ID4K PiBpMmMgZGV2aWNlcyBhdXRvLWluc3RhbnRpYXRlIGZyb20gZHQgZW50cmllcyBldmVuIGlmIHRo ZXJlIGlzIG5vCj4gZXhwbGljaXQgZGV2aWNldHJlZSBjb25maWd1cmF0aW9uIGhlcmUuIFRoZSBk ZXZpY2V0cmVlIGVudHJ5Cj4gd291bGQgaGF2ZSB0byBiZSBzb21ldGhpbmcgbGlrZSAibWVuLG1l bmYyMWJtYyIsIGllIGl0IG5lZWRzCj4gdG8gbWF0Y2ggdGhlIGRyaXZlciBuYW1lLgoKaHR0cHM6 Ly9wYXRjaHdvcmsub3psYWJzLm9yZy9wYXRjaC8zNjIxODAvCgotLSAKTGVlIEpvbmVzCkxpbmFy byBTVE1pY3JvZWxlY3Ryb25pY3MgTGFuZGluZyBUZWFtIExlYWQKTGluYXJvLm9yZyDilIIgT3Bl biBzb3VyY2Ugc29mdHdhcmUgZm9yIEFSTSBTb0NzCkZvbGxvdyBMaW5hcm86IEZhY2Vib29rIHwg VHdpdHRlciB8IEJsb2cKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmxtLXNlbnNvcnMgbWFpbGluZyBsaXN0CmxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcK aHR0cDovL2xpc3RzLmxtLXNlbnNvcnMub3JnL21haWxtYW4vbGlzdGluZm8vbG0tc2Vuc29ycw=
Andreas Werner
maintainerPATCH v5 2/4 drivers/watchdog/menf21bmc_wdt: introduce MEN 14F021P00 BMC Watchdog driver
In reply to Andreas WernerAdded driver to support the 14F021P00 BMC Watchdog.
The BMC is a Board Management Controller including watchdog functionality.
--- drivers/watchdog/Kconfig | 7 ++ drivers/watchdog/Makefile | 1 + drivers/watchdog/menf21bmc_wdt.c | 203 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 211 insertions(+) create mode 100644 drivers/watchdog/menf21bmc_wdt.c
drivers/watchdog/Kconfig +7 -0
@@ -95,6 +95,13 @@ config GPIO_WATCHDOG If you say yes here you get support for watchdog device controlled through GPIO-line. +config MENF21BMC_WATCHDOG + tristate "MEN 14F021P00 BMC Watchdog" + depends on MFD_MENF21BMC + select WATCHDOG_CORE + help + Say Y here to include support for the MEN 14F021P00 BMC Watchdog. + config WM831X_WATCHDOG tristate "WM831x watchdog" depends on MFD_WM831X
drivers/watchdog/Makefile +1 -0
@@ -178,3 +178,4 @@ obj-$(CONFIG_WM831X_WATCHDOG) += wm831x_wdt.o obj-$(CONFIG_WM8350_WATCHDOG) += wm8350_wdt.o obj-$(CONFIG_MAX63XX_WATCHDOG) += max63xx_wdt.o obj-$(CONFIG_SOFT_WATCHDOG) += softdog.o +obj-$(CONFIG_MENF21BMC_WATCHDOG) += menf21bmc_wdt.o
drivers/watchdog/menf21bmc_wdt.c new file +203 -0
203 lines not on this page · raw message
Signature · 1 line
2.0.4
Andreas Werner
maintainerPATCH v5 3/4 drivers/leds/leds-menf21bmc: introduce MEN 14F021P00 BMC LED driver
In reply to Andreas WernerAdded driver to support the 14F021P00 BMC LEDs.
The BMC is a Board Management Controller including four LEDs which can be switched on and off.
--- drivers/leds/Kconfig | 6 ++ drivers/leds/Makefile | 1 + drivers/leds/leds-menf21bmc.c | 131 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 138 insertions(+) create mode 100644 drivers/leds/leds-menf21bmc.c
drivers/leds/Kconfig +6 -0
@@ -458,6 +458,12 @@ config LEDS_OT200 This option enables support for the LEDs on the Bachmann OT200. Say Y to enable LEDs on the Bachmann OT200. +config LEDS_MENF21BMC + tristate "LED support for the MEN 14F021P00 BMC" + depends on LEDS_CLASS && MFD_MENF21BMC + help + Say Y here to include support for the MEN 14F021P00 BMC LEDs. + comment "LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM)" config LEDS_BLINKM
drivers/leds/Makefile +1 -0
@@ -53,6 +53,7 @@ obj-$(CONFIG_LEDS_MAX8997) += leds-max8997.o obj-$(CONFIG_LEDS_LM355x) += leds-lm355x.o obj-$(CONFIG_LEDS_BLINKM) += leds-blinkm.o obj-$(CONFIG_LEDS_VERSATILE) += leds-versatile.o +obj-$(CONFIG_LEDS_MENF21BMC) += leds-menf21bmc.o # LED SPI Drivers obj-$(CONFIG_LEDS_DAC124S085) += leds-dac124s085.o
drivers/leds/leds-menf21bmc.c new file +131 -0
131 lines not on this page · raw message
Signature · 1 line
2.0.4
Andreas Werner
maintainerPATCH v5 4/4 drivers/hwmon/menf21bmc_hwmon: introduce MEN14F021P00 BMC HWMON driver
In reply to Andreas WernerAdded driver to support the 14F021P00 BMC Hardware Monitoring. The BMC is a Board Management Controller including monitoring of the board voltages.
--- Documentation/hwmon/menf21bmc | 49 +++++++++ drivers/hwmon/Kconfig | 7 ++ drivers/hwmon/Makefile | 1 + drivers/hwmon/menf21bmc_hwmon.c | 230 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 287 insertions(+) create mode 100644 Documentation/hwmon/menf21bmc create mode 100644 drivers/hwmon/menf21bmc_hwmon.c
Documentation/hwmon/menf21bmc new file +49 -0
@@ -0,0 +1,49 @@ +Kernel driver menf21bmc_hwmon +============================= + +Supported chips: + * MEN 14F021P00 + Prefix: 'menf21bmc_hwmon' + Adresses scanned: - + +Author: Andreas Werner <[email protected]> + +Description +----------- + +The menf21bmc is a Board Management Controller (BMC) which provides an I2C +interface to the host to access the features implemented in the BMC. + +This driver gives access to the voltage monitoring feature of the main +voltages of the board. +The voltage sensors are connected to the ADC inputs of the BMC which is +a PIC16F917 Mikrocontroller. + +Usage Notes +----------- + +This driver does not auto-detect devices. You will have to instantiate the +devices explicitly. Please see Documentation/i2c/instantiating-devices for +details. + +Sysfs entries +------------- + +The following attributes are supported. All attributes are read only +The Limits are read once by the driver. + +in0_input +3.3V input voltage +in1_input +5.0V input voltage +in2_input +12.0V input voltage +in3_input +5V Standby input voltage +in4_input VBAT (on board battery) + +in[0-4]_min Minimum voltage limit +in[0-4]_max Maximum voltage limit + +in0_label "MON_3_3V" +in1_label "MON_5V" +in2_label "MON_12V" +in3_label "5V_STANDBY" +in4_label "VBAT" +
drivers/hwmon/Kconfig +7 -0
@@ -828,6 +828,13 @@ config SENSORS_MCP3021 This driver can also be built as a module. If so, the module will be called mcp3021. +config SENSORS_MENF21BMC_HWMON + tristate "MEN 14F021P00 BMC Hardware Monitoring" + depends on MFD_MENF21BMC + help + Say Y here to include support for the MEN 14F021P00 BMC + hardware monitoring. + config SENSORS_ADCXX tristate "National Semiconductor ADCxxxSxxx" depends on SPI_MASTER
drivers/hwmon/Makefile +1 -0
@@ -114,6 +114,7 @@ obj-$(CONFIG_SENSORS_MAX6650) += max6650.o obj-$(CONFIG_SENSORS_MAX6697) += max6697.o obj-$(CONFIG_SENSORS_MC13783_ADC)+= mc13783-adc.o obj-$(CONFIG_SENSORS_MCP3021) += mcp3021.o +obj-$(CONFIG_SENSORS_MENF21BMC_HWMON) += menf21bmc_hwmon.o obj-$(CONFIG_SENSORS_NCT6683) += nct6683.o obj-$(CONFIG_SENSORS_NCT6775) += nct6775.o obj-$(CONFIG_SENSORS_NTC_THERMISTOR) += ntc_thermistor.o
drivers/hwmon/menf21bmc_hwmon.c new file +230 -0
230 lines not on this page · raw message
Signature · 1 line
2.0.4
Guenter Roeck
maintainerRe: [PATCH v5 4/4] drivers/hwmon/menf21bmc_hwmon: introduce MEN14F021P00 BMC HWMON driver
Quoted 5 lines · Andreas Werner
Added driver to support the 14F021P00 BMC Hardware Monitoring. The BMC is a Board Management Controller including monitoring of the board voltages.
Signed-off-by Andreas Werner <[email protected]>
Hi Andreas,
Couple of additional comments below. Sorry I didn't notice earlier.
Guenter
Quoted 53 lines
--- Documentation/hwmon/menf21bmc | 49 +++++++++ drivers/hwmon/Kconfig | 7 ++ drivers/hwmon/Makefile | 1 + drivers/hwmon/menf21bmc_hwmon.c | 230 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 287 insertions(+) create mode 100644 Documentation/hwmon/menf21bmc create mode 100644 drivers/hwmon/menf21bmc_hwmon.cDocumentation/hwmon/menf21bmc new file +38
-0@@ -0,0 +1,49 @@ +Kernel driver menf21bmc_hwmon +==============> + +Supported chips: + * MEN 14F021P00 + Prefix: 'menf21bmc_hwmon' + Adresses scanned: - + +Author: Andreas Werner <[email protected]> + +Description +----------- + +The menf21bmc is a Board Management Controller (BMC) which provides an I2C +interface to the host to access the features implemented in the BMC. + +This driver gives access to the voltage monitoring feature of the main +voltages of the board. +The voltage sensors are connected to the ADC inputs of the BMC which is +a PIC16F917 Mikrocontroller. + +Usage Notes +----------- + +This driver does not auto-detect devices. You will have to instantiate the +devices explicitly. Please see Documentation/i2c/instantiating-devices for +details. + +Sysfs entries +------------- + +The following attributes are supported. All attributes are read only +The Limits are read once by the driver. + +in0_input +3.3V input voltage +in1_input +5.0V input voltage +in2_input +12.0V input voltage +in3_input +5V Standby input voltage +in4_input VBAT (on board battery)
Documentation/hwmon/menf21bmc line 48
Quoted 10 lines
Documentation/hwmon/menf21bmc new file +10
-0+ +in[0-4]_min Minimum voltage limit +in[0-4]_max Maximum voltage limit + +in0_label "MON_3_3V" +in1_label "MON_5V" +in2_label "MON_12V" +in3_label "5V_STANDBY" +in4_label "VBAT" +
The empty line adds a whitespace error when applying the patch.
Quoted 5 lines
drivers/hwmon/Kconfig +0
-0
drivers/hwmon/Kconfig config SENSORS_MCP3021 · line 837
Quoted 10 lines
drivers/hwmon/Kconfig +7
-0@@ -828,6 +828,13 @@ config SENSORS_MCP3021 This driver can also be built as a module. If so, the module will be called mcp3021. +config SENSORS_MENF21BMC_HWMON + tristate "MEN 14F021P00 BMC Hardware Monitoring" + depends on MFD_MENF21BMC + help + Say Y here to include support for the MEN 14F021P00 BMC + hardware monitoring. +
It is customary to add a note describing how the module is called if the driver is built as module.
Quoted 50 lines
drivers/hwmon/Kconfig +0
-0config SENSORS_ADCXX tristate "National Semiconductor ADCxxxSxxx" depends on SPI_MASTERdrivers/hwmon/Makefile +1
-0@@ -114,6 +114,7 @@ obj-$(CONFIG_SENSORS_MAX6650) += max6650.o obj-$(CONFIG_SENSORS_MAX6697) += max6697.o obj-$(CONFIG_SENSORS_MC13783_ADC)+= mc13783-adc.o obj-$(CONFIG_SENSORS_MCP3021) += mcp3021.o +obj-$(CONFIG_SENSORS_MENF21BMC_HWMON) += menf21bmc_hwmon.o obj-$(CONFIG_SENSORS_NCT6683) += nct6683.o obj-$(CONFIG_SENSORS_NCT6775) += nct6775.o obj-$(CONFIG_SENSORS_NTC_THERMISTOR) += ntc_thermistor.odrivers/hwmon/menf21bmc_hwmon.c new file +29
-0@@ -0,0 +1,230 @@ +/* +* MEN 14F021P00 Board Management Controller (BMC) hwmon driver. +* +* This is the core hwmon driver of the MEN 14F021P00 BMC. +* The BMC monitors the board voltages which can be access with this +* driver through sysfs. +* +* Copyright (C) 2014 MEN Mikro Elektronik Nuernberg GmbH +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at your +* option) any later version. +*/ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/platform_device.h> +#include <linux/hwmon.h> +#include <linux/hwmon-sysfs.h> +#include <linux/jiffies.h> +#include <linux/slab.h> +#include <linux/i2c.h> + +#define DRV_NAME "menf21bmc_hwmon" + +#define BMC_VOLT_COUNT 5 +#define MENF21BMC_V33 0 +#define MENF21BMC_V5 1
drivers/hwmon/menf21bmc_hwmon.c line 39
Quoted 10 lines
drivers/hwmon/menf21bmc_hwmon.c new file +10
-0+#define MENF21BMC_V12 2 +#define MENF21BMC_V5_SB 3 +#define MENF21BMC_VBAT 4 + +#define IDX_TO_VOLT_MIN_CMD (idx) (0x40 + idx) +#define IDX_TO_VOLT_MAX_CMD (idx) (0x50 + idx) +#define IDX_TO_VOLT_INP_CMD (idx) (0x60 + idx) + +struct menf21bmc_hwmon { +char valid;
Please use bool (and true / false to set it). char doesn't save anything and may actually increase code size depending on the architecture.
Quoted 9 lines
drivers/hwmon/menf21bmc_hwmon.c new file +9
-0+struct i2c_client *i2c_client; +unsigned long last_update; +u16 in_val[BMC_VOLT_COUNT ]; +u16 in_min[BMC_VOLT_COUNT ]; +u16 in_max[BMC_VOLT_COUNT ]; +}; + +static const char *const input_names[] = { + [MENF21BMC_V33 ] ="MON_3_3V" ,
drivers/hwmon/menf21bmc_hwmon.c line 58
Quoted 10 lines
drivers/hwmon/menf21bmc_hwmon.c new file +10
-0+ [MENF21BMC_V5] = "MON_5V", + [MENF21BMC_V12] = "MON_12V", + [MENF21BMC_V5_SB] = "5V_STANDBY", + [MENF21BMC_VBAT] = "VBAT" +}; + +static struct menf21bmc_hwmon *menf21bmc_hwmon_update (struct device *dev) +{ +int i; +uint16_t val;
That doesn't work well with the checks against < 0. Please compile with W=1 to find all instances of this problem (there is another one below).
drivers/hwmon/menf21bmc_hwmon.c line 62
Quoted 4 lines
drivers/hwmon/menf21bmc_hwmon.c new file +4
-0+struct menf21bmc_hwmon *drv_data =dev_get_drvdata (dev); +struct menf21bmc_hwmon *data_ret = drv_data; + +if (time_after (jiffies, drv_data->last_update +HZ ) || !drv_data->valid) {
Line over 80 characters.
Quoted 136 lines
drivers/hwmon/menf21bmc_hwmon.c new file +136
-0+for (i =0 ; i <BMC_VOLT_COUNT ; i++) { + val =i2c_smbus_read_word_data (drv_data->i2c_client, +IDX_TO_VOLT_INP_CMD (i)); +if (val <0 ) { + data_ret =ERR_PTR (val); + goto abort; + } + drv_data->in_val[i] = val; + } + drv_data->last_update = jiffies; + drv_data->valid =1 ; + } +abort: +return data_ret; +} + +static int menf21bmc_hwmon_get_volt_limits (struct menf21bmc_hwmon *drv_data) +{ +int i; +uint16_t val; + +for (i =0 ; i <BMC_VOLT_COUNT ; i++) { + val =i2c_smbus_read_word_data (drv_data->i2c_client, +IDX_TO_VOLT_MIN_CMD (i)); +if (val <0 ) +return val; + + drv_data->in_min[i] = val; + + val =i2c_smbus_read_word_data (drv_data->i2c_client, +IDX_TO_VOLT_MAX_CMD (i)); +if (val <0 ) +return val; + + drv_data->in_max[i] = val; + } +return 0 ; +} + +static ssize_t +show_label (struct device *dev,struct device_attribute *devattr,char *buf) +{ +struct sensor_device_attribute *attr =to_sensor_dev_attr (devattr); + +return sprintf (buf,"%s\n" , input_names[attr->index]); +} + +static ssize_t +show_in (struct device *dev,struct device_attribute *devattr,char *buf) +{ +struct sensor_device_attribute *attr =to_sensor_dev_attr (devattr); +struct menf21bmc_hwmon *drv_data =menf21bmc_hwmon_update (dev); + +if (IS_ERR (drv_data)) +return PTR_ERR (drv_data); + +return sprintf (buf,"%d\n" , drv_data->in_val[attr->index]); +} + +static ssize_t +show_min (struct device *dev,struct device_attribute *devattr,char *buf) +{ +struct sensor_device_attribute *attr =to_sensor_dev_attr (devattr); +struct menf21bmc_hwmon *drv_data =dev_get_drvdata (dev); + +return sprintf (buf,"%d\n" , drv_data->in_min[attr->index]); +} + +static ssize_t +show_max (struct device *dev,struct device_attribute *devattr,char *buf) +{ +struct sensor_device_attribute *attr =to_sensor_dev_attr (devattr); +struct menf21bmc_hwmon *drv_data =dev_get_drvdata (dev); + +return sprintf (buf,"%d\n" , drv_data->in_max[attr->index]); +} + +#define create_voltage_sysfs (idx) \ +static SENSOR_DEVICE_ATTR(in##idx##_input, S_IRUGO, \ + show_in, NULL, idx); \ +static SENSOR_DEVICE_ATTR(in##idx##_min, S_IRUGO, \ + show_min, NULL, idx); \ +static SENSOR_DEVICE_ATTR(in##idx##_max, S_IRUGO, \ + show_max, NULL, idx); \ +static SENSOR_DEVICE_ATTR(in##idx##_label, S_IRUGO, \ + show_label, NULL, idx); + +create_voltage_sysfs (0 ); +create_voltage_sysfs (1 ); +create_voltage_sysfs (2 ); +create_voltage_sysfs (3 ); +create_voltage_sysfs (4 ); + +static struct attribute *menf21bmc_hwmon_attrs[] = { + &sensor_dev_attr_in0_input.dev_attr.attr, + &sensor_dev_attr_in0_min.dev_attr.attr, + &sensor_dev_attr_in0_max.dev_attr.attr, + &sensor_dev_attr_in0_label.dev_attr.attr, + + &sensor_dev_attr_in1_input.dev_attr.attr, + &sensor_dev_attr_in1_min.dev_attr.attr, + &sensor_dev_attr_in1_max.dev_attr.attr, + &sensor_dev_attr_in1_label.dev_attr.attr, + + &sensor_dev_attr_in2_input.dev_attr.attr, + &sensor_dev_attr_in2_min.dev_attr.attr, + &sensor_dev_attr_in2_max.dev_attr.attr, + &sensor_dev_attr_in2_label.dev_attr.attr, + + &sensor_dev_attr_in3_input.dev_attr.attr, + &sensor_dev_attr_in3_min.dev_attr.attr, + &sensor_dev_attr_in3_max.dev_attr.attr, + &sensor_dev_attr_in3_label.dev_attr.attr, + + &sensor_dev_attr_in4_input.dev_attr.attr, + &sensor_dev_attr_in4_min.dev_attr.attr, + &sensor_dev_attr_in4_max.dev_attr.attr, + &sensor_dev_attr_in4_label.dev_attr.attr, +NULL +}; + +ATTRIBUTE_GROUPS (menf21bmc_hwmon); + +static int menf21bmc_hwmon_probe (struct platform_device *pdev) +{ +int ret; +struct menf21bmc_hwmon *drv_data; +struct i2c_client *i2c_client =to_i2c_client (pdev->dev.parent); +struct device *hwmon_dev; + + drv_data =devm_kzalloc (&pdev->dev,sizeof (struct menf21bmc_hwmon ), +GFP_KERNEL ); +if (!drv_data) +return -ENOMEM ; + + drv_data->i2c_client = i2c_client;
drivers/hwmon/menf21bmc_hwmon.c line 208
Quoted 10 lines
drivers/hwmon/menf21bmc_hwmon.c new file +10
-0+ + ret =menf21bmc_hwmon_get_volt_limits (drv_data); +if (ret) { +dev_err (&pdev->dev,"failed to read sensor limits" ); +return ret; + } + + hwmon_dev =devm_hwmon_device_register_with_groups (&pdev->dev, +"menf21bmc" , drv_data, + menf21bmc_hwmon_groups);
Line over 80 characters. Just use less indentation for the continuation lines.
Quoted 26 lines
drivers/hwmon/menf21bmc_hwmon.c new file +22
-0+if (IS_ERR (hwmon_dev)) +return PTR_ERR (hwmon_dev); + +dev_info (&pdev->dev,"MEN 14F021P00 BMC hwmon device enabled" ); + +return 0 ; +} + +static struct platform_driver menf21bmc_hwmon = { + .probe = menf21bmc_hwmon_probe, + .driver = { + .name =DRV_NAME , + .owner =THIS_MODULE , + }, +}; + +module_platform_driver (menf21bmc_hwmon); + +MODULE_AUTHOR ("Andreas Werner <[email protected]>" ); +MODULE_DESCRIPTION ("MEN 14F021P00 BMC hwmon" ); +MODULE_LICENSE ("GPL v2" ); +MODULE_ALIAS ("platform:menf21bmc_hwmon" );Signature · 1 line
2.0.4
_______________________________________________
lm-sensors mailing list
[email protected]
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
Andreas Werner
maintainerRe: [PATCH v5 4/4] drivers/hwmon/menf21bmc_hwmon: introduce MEN14F021P00 BMC HWMON driver
Quoted 71 lines · Guenter Roeck
Quoted 5 lines · Andreas Werner
Added driver to support the 14F021P00 BMC Hardware Monitoring. The BMC is a Board Management Controller including monitoring of the board voltages.
Signed-off-by Andreas Werner <[email protected]>Hi Andreas,
Couple of additional comments below. Sorry I didn't notice earlier.
Guenter
Quoted 58 lines
--- Documentation/hwmon/menf21bmc | 49 +++++++++ drivers/hwmon/Kconfig | 7 ++ drivers/hwmon/Makefile | 1 + drivers/hwmon/menf21bmc_hwmon.c | 230 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 287 insertions(+) create mode 100644 Documentation/hwmon/menf21bmc create mode 100644 drivers/hwmon/menf21bmc_hwmon.cDocumentation/hwmon/menf21bmc new file +43
-0@@ -0,0 +1,49 @@ +Kernel driver menf21bmc_hwmon +============================= + +Supported chips: + * MEN 14F021P00 + Prefix: 'menf21bmc_hwmon' + Adresses scanned: - + +Author: Andreas Werner <[email protected]> + +Description +----------- + +The menf21bmc is a Board Management Controller (BMC) which provides an I2C +interface to the host to access the features implemented in the BMC. + +This driver gives access to the voltage monitoring feature of the main +voltages of the board. +The voltage sensors are connected to the ADC inputs of the BMC which is +a PIC16F917 Mikrocontroller. + +Usage Notes +----------- + +This driver does not auto-detect devices. You will have to instantiate the +devices explicitly. Please see Documentation/i2c/instantiating-devices for +details. + +Sysfs entries +------------- + +The following attributes are supported. All attributes are read only +The Limits are read once by the driver. + +in0_input +3.3V input voltage +in1_input +5.0V input voltage +in2_input +12.0V input voltage +in3_input +5V Standby input voltage +in4_input VBAT (on board battery) + +in[0-4]_min Minimum voltage limit +in[0-4]_max Maximum voltage limit +
Quoted 9 lines
Documentation/hwmon/menf21bmc line 49
Quoted 6 lines
Documentation/hwmon/menf21bmc new file +6
-0+in0_label "MON_3_3V" +in1_label "MON_5V" +in2_label "MON_12V" +in3_label "5V_STANDBY" +in4_label "VBAT" +The empty line adds a whitespace error when applying the patch.
OK, will delete the line.
Quoted 8 lines
Quoted 8 lines
drivers/hwmon/Kconfig +0
-0@@ -828,6 +828,13 @@ config SENSORS_MCP3021 This driver can also be built as a module. If so, the module will be called mcp3021.
Quoted 10 lines
drivers/hwmon/Kconfig config SENSORS_MCP3021 · line 837
Quoted 7 lines
drivers/hwmon/Kconfig +7
-0+config SENSORS_MENF21BMC_HWMON + tristate "MEN 14F021P00 BMC Hardware Monitoring" + depends on MFD_MENF21BMC + help + Say Y here to include support for the MEN 14F021P00 BMC + hardware monitoring. +It is customary to add a note describing how the module is called if the driver is built as module.
OK i just write a line which describes the module name.
Quoted 56 lines
Quoted 56 lines
drivers/hwmon/Kconfig +0
-0config SENSORS_ADCXX tristate "National Semiconductor ADCxxxSxxx" depends on SPI_MASTERdrivers/hwmon/Makefile +1
-0@@ -114,6 +114,7 @@ obj-$(CONFIG_SENSORS_MAX6650) += max6650.o obj-$(CONFIG_SENSORS_MAX6697) += max6697.o obj-$(CONFIG_SENSORS_MC13783_ADC)+= mc13783-adc.o obj-$(CONFIG_SENSORS_MCP3021) += mcp3021.o +obj-$(CONFIG_SENSORS_MENF21BMC_HWMON) += menf21bmc_hwmon.o obj-$(CONFIG_SENSORS_NCT6683) += nct6683.o obj-$(CONFIG_SENSORS_NCT6775) += nct6775.o obj-$(CONFIG_SENSORS_NTC_THERMISTOR) += ntc_thermistor.odrivers/hwmon/menf21bmc_hwmon.c new file +35
-0@@ -0,0 +1,230 @@ +/* +* MEN 14F021P00 Board Management Controller (BMC) hwmon driver. +* +* This is the core hwmon driver of the MEN 14F021P00 BMC. +* The BMC monitors the board voltages which can be access with this +* driver through sysfs. +* +* Copyright (C) 2014 MEN Mikro Elektronik Nuernberg GmbH +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at your +* option) any later version. +*/ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/platform_device.h> +#include <linux/hwmon.h> +#include <linux/hwmon-sysfs.h> +#include <linux/jiffies.h> +#include <linux/slab.h> +#include <linux/i2c.h> + +#define DRV_NAME "menf21bmc_hwmon" + +#define BMC_VOLT_COUNT 5 +#define MENF21BMC_V33 0 +#define MENF21BMC_V5 1 +#define MENF21BMC_V12 2 +#define MENF21BMC_V5_SB 3 +#define MENF21BMC_VBAT 4 + +#define IDX_TO_VOLT_MIN_CMD (idx) (0x40 + idx) +#define IDX_TO_VOLT_MAX_CMD (idx) (0x50 + idx)
Quoted 9 lines
drivers/hwmon/menf21bmc_hwmon.c line 39
Quoted 4 lines
drivers/hwmon/menf21bmc_hwmon.c new file +4
-0+#define IDX_TO_VOLT_INP_CMD (idx) (0x60 + idx) + +struct menf21bmc_hwmon { +char valid;Please use bool (and true / false to set it). char doesn't save anything and may actually increase code size depending on the architecture.
Ok.
Quoted 15 lines
Quoted 15 lines
drivers/hwmon/menf21bmc_hwmon.c new file +15
-0+struct i2c_client *i2c_client; +unsigned long last_update; +u16 in_val[BMC_VOLT_COUNT ]; +u16 in_min[BMC_VOLT_COUNT ]; +u16 in_max[BMC_VOLT_COUNT ]; +}; + +static const char *const input_names[] = { + [MENF21BMC_V33 ] ="MON_3_3V" , + [MENF21BMC_V5 ] ="MON_5V" , + [MENF21BMC_V12 ] ="MON_12V" , + [MENF21BMC_V5_SB ] ="5V_STANDBY" , + [MENF21BMC_VBAT ] ="VBAT" +}; +
Quoted 9 lines
drivers/hwmon/menf21bmc_hwmon.c line 58
Quoted 4 lines
drivers/hwmon/menf21bmc_hwmon.c new file +4
-0+static struct menf21bmc_hwmon *menf21bmc_hwmon_update (struct device *dev) +{ +int i; +uint16_t val;That doesn't work well with the checks against < 0. Please compile with W=1 to find all instances of this problem (there is another one below).
Argh, hate myself.
Quoted 7 lines
drivers/hwmon/menf21bmc_hwmon.c line 62
Quoted 4 lines
drivers/hwmon/menf21bmc_hwmon.c new file +4
-0+struct menf21bmc_hwmon *drv_data =dev_get_drvdata (dev); +struct menf21bmc_hwmon *data_ret = drv_data; + +if (time_after (jiffies, drv_data->last_update +HZ ) || !drv_data->valid) {Line over 80 characters.
Yes, checkpatch gave me a warning, but a thought it is better so let it as it is instead of split the "if" line.
But it is no problem to change that.
Quoted 140 lines
Quoted 140 lines
drivers/hwmon/menf21bmc_hwmon.c new file +140
-0+for (i =0 ; i <BMC_VOLT_COUNT ; i++) { + val =i2c_smbus_read_word_data (drv_data->i2c_client, +IDX_TO_VOLT_INP_CMD (i)); +if (val <0 ) { + data_ret =ERR_PTR (val); + goto abort; + } + drv_data->in_val[i] = val; + } + drv_data->last_update = jiffies; + drv_data->valid =1 ; + } +abort: +return data_ret; +} + +static int menf21bmc_hwmon_get_volt_limits (struct menf21bmc_hwmon *drv_data) +{ +int i; +uint16_t val; + +for (i =0 ; i <BMC_VOLT_COUNT ; i++) { + val =i2c_smbus_read_word_data (drv_data->i2c_client, +IDX_TO_VOLT_MIN_CMD (i)); +if (val <0 ) +return val; + + drv_data->in_min[i] = val; + + val =i2c_smbus_read_word_data (drv_data->i2c_client, +IDX_TO_VOLT_MAX_CMD (i)); +if (val <0 ) +return val; + + drv_data->in_max[i] = val; + } +return 0 ; +} + +static ssize_t +show_label (struct device *dev,struct device_attribute *devattr,char *buf) +{ +struct sensor_device_attribute *attr =to_sensor_dev_attr (devattr); + +return sprintf (buf,"%s\n" , input_names[attr->index]); +} + +static ssize_t +show_in (struct device *dev,struct device_attribute *devattr,char *buf) +{ +struct sensor_device_attribute *attr =to_sensor_dev_attr (devattr); +struct menf21bmc_hwmon *drv_data =menf21bmc_hwmon_update (dev); + +if (IS_ERR (drv_data)) +return PTR_ERR (drv_data); + +return sprintf (buf,"%d\n" , drv_data->in_val[attr->index]); +} + +static ssize_t +show_min (struct device *dev,struct device_attribute *devattr,char *buf) +{ +struct sensor_device_attribute *attr =to_sensor_dev_attr (devattr); +struct menf21bmc_hwmon *drv_data =dev_get_drvdata (dev); + +return sprintf (buf,"%d\n" , drv_data->in_min[attr->index]); +} + +static ssize_t +show_max (struct device *dev,struct device_attribute *devattr,char *buf) +{ +struct sensor_device_attribute *attr =to_sensor_dev_attr (devattr); +struct menf21bmc_hwmon *drv_data =dev_get_drvdata (dev); + +return sprintf (buf,"%d\n" , drv_data->in_max[attr->index]); +} + +#define create_voltage_sysfs (idx) \ +static SENSOR_DEVICE_ATTR(in##idx##_input, S_IRUGO, \ + show_in, NULL, idx); \ +static SENSOR_DEVICE_ATTR(in##idx##_min, S_IRUGO, \ + show_min, NULL, idx); \ +static SENSOR_DEVICE_ATTR(in##idx##_max, S_IRUGO, \ + show_max, NULL, idx); \ +static SENSOR_DEVICE_ATTR(in##idx##_label, S_IRUGO, \ + show_label, NULL, idx); + +create_voltage_sysfs (0 ); +create_voltage_sysfs (1 ); +create_voltage_sysfs (2 ); +create_voltage_sysfs (3 ); +create_voltage_sysfs (4 ); + +static struct attribute *menf21bmc_hwmon_attrs[] = { + &sensor_dev_attr_in0_input.dev_attr.attr, + &sensor_dev_attr_in0_min.dev_attr.attr, + &sensor_dev_attr_in0_max.dev_attr.attr, + &sensor_dev_attr_in0_label.dev_attr.attr, + + &sensor_dev_attr_in1_input.dev_attr.attr, + &sensor_dev_attr_in1_min.dev_attr.attr, + &sensor_dev_attr_in1_max.dev_attr.attr, + &sensor_dev_attr_in1_label.dev_attr.attr, + + &sensor_dev_attr_in2_input.dev_attr.attr, + &sensor_dev_attr_in2_min.dev_attr.attr, + &sensor_dev_attr_in2_max.dev_attr.attr, + &sensor_dev_attr_in2_label.dev_attr.attr, + + &sensor_dev_attr_in3_input.dev_attr.attr, + &sensor_dev_attr_in3_min.dev_attr.attr, + &sensor_dev_attr_in3_max.dev_attr.attr, + &sensor_dev_attr_in3_label.dev_attr.attr, + + &sensor_dev_attr_in4_input.dev_attr.attr, + &sensor_dev_attr_in4_min.dev_attr.attr, + &sensor_dev_attr_in4_max.dev_attr.attr, + &sensor_dev_attr_in4_label.dev_attr.attr, +NULL +}; + +ATTRIBUTE_GROUPS (menf21bmc_hwmon); + +static int menf21bmc_hwmon_probe (struct platform_device *pdev) +{ +int ret; +struct menf21bmc_hwmon *drv_data; +struct i2c_client *i2c_client =to_i2c_client (pdev->dev.parent); +struct device *hwmon_dev; + + drv_data =devm_kzalloc (&pdev->dev,sizeof (struct menf21bmc_hwmon ), +GFP_KERNEL ); +if (!drv_data) +return -ENOMEM ; + + drv_data->i2c_client = i2c_client; + + ret =menf21bmc_hwmon_get_volt_limits (drv_data); +if (ret) { +dev_err (&pdev->dev,"failed to read sensor limits" );
Quoted 9 lines
drivers/hwmon/menf21bmc_hwmon.c line 208
Quoted 6 lines
drivers/hwmon/menf21bmc_hwmon.c new file +6
-0+return ret; + } + + hwmon_dev =devm_hwmon_device_register_with_groups (&pdev->dev, +"menf21bmc" , drv_data, + menf21bmc_hwmon_groups);Line over 80 characters. Just use less indentation for the continuation lines.
Same as above, checkpatch gave me a warning. I just wanted to align it to the "(" but no problem to change that.
Quoted 26 lines
Quoted 26 lines
drivers/hwmon/menf21bmc_hwmon.c new file +22
-0+if (IS_ERR (hwmon_dev)) +return PTR_ERR (hwmon_dev); + +dev_info (&pdev->dev,"MEN 14F021P00 BMC hwmon device enabled" ); + +return 0 ; +} + +static struct platform_driver menf21bmc_hwmon = { + .probe = menf21bmc_hwmon_probe, + .driver = { + .name =DRV_NAME , + .owner =THIS_MODULE , + }, +}; + +module_platform_driver (menf21bmc_hwmon); + +MODULE_AUTHOR ("Andreas Werner <[email protected]>" ); +MODULE_DESCRIPTION ("MEN 14F021P00 BMC hwmon" ); +MODULE_LICENSE ("GPL v2" ); +MODULE_ALIAS ("platform:menf21bmc_hwmon" );Signature · 1 line
2.0.4