Add hardware monitoring support for the Flex power interface modules PIM4006, PIM4328 and PIM4820. The modules are equipped with dual feed input and has support for hotswap, holdup and various circuit protection functionality. [PATCH 1/5] The modules have no CAPABILITY or WRITE_PROTECT commands. If these commands are read, the modules return invalid data (0xFF), so in addition to the NO_CAPABILITY flag we need a NO_WRITE_PROTECT flag to tell the pmbus_core driver to not access this register. [PATCH 2/5] PIM4328 and PIM4820 use the direct mode data format so new functionality is added to the pmbus_core driver to be able to read and decode the COEFFICIENTS command. This is an implementation of core driver support for reading and decoding direct format coefficients. If the new flag PMBUS_USE_COEFFICIENTS_CMD is set, the driver will use the attribute information in the pmbus_sensor_attr structs together with the COEFFICIENTS command to read and set the relevant direct mode coefficients. [PATCH 3/5] The two inputs are modelled using virtual phases but there is a limitation in the pmbus_core that disallows monitoring of phase functions if there is no corresponding function on the page level. In this specific case the PIM4006 module allows monitoring of current on each input separately, but there is no corresponding command on the page level. Is there a specific reason for this limitation? Otherwise we suggest relaxing this criteria. [PATCH 4/5] All modules use manufacturer specific registers (mfr) for status data and only supports the CML bit in the PMBus STATUS register. The driver overrides reading the STATUS register and maps the bits in the mfr registers to the STATUS register alarm bits. PATCH 5/5] Add driver documentation This patch has been tested with PIM4406, PIM4280 and PIM4328 modules. v2 -Remove the for_reading parameter from the pmbus_read_coefficients function. -Use the correct namespace macro for the pmbus_read_coefficients function. -Fix alphabetic ordering of includes -Remove override of STATUS_WORD since it will never get called by the core driver. -Add new patch with tentative implementation of core driver support for reading direct mode coefficients using the COEFFICIENTS command. v3 -Rework and simplify the code for initialization of direct mode coefficients according to comments by Guenter. -Updated commit message for patch 2/6 v4 -Use tabs for aligning #define. -Move phase check before switch. -Return immediately on error. -Use existing PB_STATUS_ bit masks. -Add missing error checks. -Remove unnecessary !=0 check. -Move pdata allocation ahead of the switch statement. -Do not export the pmbus_read_coefficients function -Change nattr type in struct pmbus_class_attr_map to int. -Remove unnecessary initialization in pmbus_init_coefficients. -Moved function pmbus_read_coefficients to keep related code together. -Rewrite init and read coefficients functions to get rid of ugly cast. -Squashed [PATCH 2/6] & [PATCH 3/6]. -Added Acked-By maintainer. v5 -Drop MAINTAINERS update. -Remove unnecessary line split. -Substitute it's -> its. -Fixed too many 'not' in commit message. Erik Rosen (5): Add new pmbus flag NO_WRITE_PROTECT Add support for reading direct mode coefficients Allow phase function even if it does not exist not on the associated page Add PMBus driver for PIM4006, PIM4328 and PIM4820 Add documentation for the pim4328 PMBus driver Documentation/hwmon/index.rst | 1 + Documentation/hwmon/pim4328.rst | 105 ++++++++++++++ drivers/hwmon/pmbus/Kconfig | 9 ++ drivers/hwmon/pmbus/Makefile | 1 + drivers/hwmon/pmbus/pim4328.c | 233 +++++++++++++++++++++++++++++++ drivers/hwmon/pmbus/pmbus_core.c | 140 +++++++++++++++++-- include/linux/pmbus.h | 17 +++ 7 files changed, 495 insertions(+), 11 deletions(-) create mode 100644 Documentation/hwmon/pim4328.rst create mode 100644 drivers/hwmon/pmbus/pim4328.c base-commit: 6efb943b8616ec53a5e444193dccf1af9ad627b5 -- 2.20.1