Add dt-bindings for adp1050 digital controller for isolated power supply
with pmbus interface voltage, current and temperature monitor.
Signed-off-by: Radu Sabau <[email protected]>
---
v3:
*Remove extra line before '$id'.
*Remove 'address-cells' and 'size-cells' from adp1050 node.
*Rename adp1050 node to generic name.
*Fix typo from 'adress-cells' to 'address-cells' causing errors in the
dt-bindings build.
v2:
*Fix identation for example.
*Remove 'adi,vin-scale-monitor' and 'iin-scale-monitor' since they are not used
anymore.
*Fix typo for 'compatbile' to 'compatible'.
*Add blank line under datasheet link.
---
.../bindings/hwmon/pmbus/adi,adp1050.yaml | 49 +++++++++++++++++++
MAINTAINERS | 7 +++
2 files changed, 56 insertions(+)
create mode 100644 Documentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.yaml
diff --git a/Documentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.yaml b/Documentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.yaml
new file mode 100644
index 000000000000..42cafd8fec25
--- /dev/null
+++ b/Documentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.yaml
@@ -0,0 +1,49 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: https://devicetree.org/schemas/hwmon/pmbus/adi,adp1050.yaml#
+$schema: https://devicetree.org/meta-schemes/core.yaml#
+
+title: Analog Devices ADP1050 digital controller with PMBus interface
+
+maintainers:
+ - Radu Sabau <[email protected]>
+
+description: |
+ The ADP1050 is used to monitor system voltages, currents and temperatures.
+ Through the PMBus interface, the ADP1050 targets isolated power supplies
+ and has four individual monitors for input/output voltage, input current
+ and temperature.
+ Datasheet:
+ https://www.analog.com/en/products/adp1050.html
+
+properties:
+ compatible:
+ const: adi,adp1050
+
+ reg:
+ maxItems: 1
+
+ vcc-supply: true
+
+required:
+ - compatible
+ - reg
+ - vcc-supply
+
+additionalProperties: false
+
+examples:
+ - |
+ i2c {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ clock-frequency = <100000>;
+
+ hwmon@70 {
+ compatible = "adi,adp1050";
+ reg = <0x70>;
+ vcc-supply = <&vcc>;
+ };
+ };
+...
diff --git a/MAINTAINERS b/MAINTAINERS
index 43b39956694a..b45753e94756 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -479,6 +479,13 @@ L: [email protected]
S: Orphan
F: drivers/net/wireless/admtek/adm8211.*
+ADP1050 HARDWARE MONITOR DRIVER
+M: Radu Sabau <[email protected]>
+L: [email protected]
+S: Supported
+W: https://ez.analog.com/linux-software-drivers
+F: Dcumentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.yaml
+
ADP1653 FLASH CONTROLLER DRIVER
M: Sakari Ailus <[email protected]>
L: [email protected]
--
2.34.1
Add support for ADP1050 Digital Controller for Isolated Power Supplies
with PMBus interface Voltage, Current and Temperature Monitor.
The ADP1050 implements several features to enable a robust
system of parallel and redundant operation for customers who
require high availability. The device can measure voltage,
current and temperature that can be used in different
techniques to identify and safely shut down an erroneous
power supply in parallel operation mode.
Signed-off-by: Radu Sabau <[email protected]>
---
v3:
*No change.
v2:
*Remove mandatory chip unlocking from the probe function, as it is
a bit extreme.
*Remove iin_scale and vin_scale set in the probe function since it makes no
sense to force-override it (the user may use the chip's default or even
change it himself after the probe).
---
Documentation/hwmon/adp1050.rst | 65 +++++++++++++++++++++++++++++++++
Documentation/hwmon/index.rst | 1 +
drivers/hwmon/pmbus/Kconfig | 10 +++++
drivers/hwmon/pmbus/Makefile | 1 +
drivers/hwmon/pmbus/adp1050.c | 58 +++++++++++++++++++++++++++++
5 files changed, 135 insertions(+)
create mode 100644 Documentation/hwmon/adp1050.rst
create mode 100644 drivers/hwmon/pmbus/adp1050.c
diff --git a/Documentation/hwmon/adp1050.rst b/Documentation/hwmon/adp1050.rst
new file mode 100644
index 000000000000..3281b096a53c
--- /dev/null
+++ b/Documentation/hwmon/adp1050.rst
@@ -0,0 +1,65 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+Kernel driver adp1050
+=====================
+
+Supported chips:
+
+ * Analog Devices ADP1050
+
+ Prefix: 'adp1050'
+
+ Addresses scanned: I2C 0x70 - 0x77
+
+ Datasheet: https://www.analog.com/media/en/technical-documentation/data-
+sheets/ADP1050.pdf
+
+Authors:
+
+ - Radu Sabau <[email protected]>
+
+
+Description
+-----------
+
+This driver supprts hardware monitoring for Analog Devices ADP1050 Digital
+Controller for Isolated Power Supply with PMBus interface.
+
+The ADP1050 is an advanced digital controller with a PMBusā¢
+interface targeting high density, high efficiency dc-to-dc power
+conversion used to monitor system temperatures, voltages and currents.
+Through the PMBus interface, the device can monitor input/output voltages,
+input current and temperature.
+
+Usage Notes
+-----------
+
+This driver does not auto-detect devices. You will have to instantiate
+the devices explicitly.
+Please see Documentation/i2c/instantiating-devices.rst for details.
+
+Platform data support
+---------------------
+
+The driver supports standard PMBus driver platform data.
+
+Sysfs Attributes
+----------------
+
+================= ========================================
+in1_label "vin"
+in1_input Measured input voltage
+in1_alarm Input voltage alarm
+in2_label "vout1"
+in2_input Measured output voltage
+in2_crit Critical maximum output voltage
+in2_crit_alarm Output voltage high alarm
+in2_lcrit Critical minimum output voltage
+in2_lcrit_alarm Output voltage critical low alarm
+curr1_label "iin"
+curr1_input Measured input current.
+curr1_alarm Input current alarm
+temp1_input Measured temperature
+temp1_crit Critical high temperature
+temp1_crit_alarm Chip temperature critical high alarm
+================= ========================================
diff --git a/Documentation/hwmon/index.rst b/Documentation/hwmon/index.rst
index 1ca7a4fe1f8f..9a4fd576e6f6 100644
--- a/Documentation/hwmon/index.rst
+++ b/Documentation/hwmon/index.rst
@@ -33,6 +33,7 @@ Hardware Monitoring Kernel Drivers
adm1266
adm1275
adm9240
+ adp1050
ads7828
adt7410
adt7411
diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig
index 557ae0c414b0..38e794d83cc3 100644
--- a/drivers/hwmon/pmbus/Kconfig
+++ b/drivers/hwmon/pmbus/Kconfig
@@ -57,6 +57,16 @@ config SENSORS_ADM1275
This driver can also be built as a module. If so, the module will
be called adm1275.
+config SENSORS_ADP1050
+ tristate "Analog Devices ADP1050 digital controller for Power Supplies"
+ help
+ If you say yes here you get hardware monitoring support for Analog
+ Devices ADP1050 digital controller for isolated power supply with
+ PMBus interface.
+
+ This driver can also be built as a module. If so, the module will
+ be called adp1050.
+
config SENSORS_BEL_PFE
tristate "Bel PFE Compatible Power Supplies"
help
diff --git a/drivers/hwmon/pmbus/Makefile b/drivers/hwmon/pmbus/Makefile
index f14ecf03ad77..95a8dea5e5ed 100644
--- a/drivers/hwmon/pmbus/Makefile
+++ b/drivers/hwmon/pmbus/Makefile
@@ -8,6 +8,7 @@ obj-$(CONFIG_SENSORS_PMBUS) += pmbus.o
obj-$(CONFIG_SENSORS_ACBEL_FSG032) += acbel-fsg032.o
obj-$(CONFIG_SENSORS_ADM1266) += adm1266.o
obj-$(CONFIG_SENSORS_ADM1275) += adm1275.o
+obj-$(CONFIG_SENSORS_ADP1050) += adp1050.o
obj-$(CONFIG_SENSORS_BEL_PFE) += bel-pfe.o
obj-$(CONFIG_SENSORS_BPA_RS600) += bpa-rs600.o
obj-$(CONFIG_SENSORS_DELTA_AHE50DC_FAN) += delta-ahe50dc-fan.o
diff --git a/drivers/hwmon/pmbus/adp1050.c b/drivers/hwmon/pmbus/adp1050.c
new file mode 100644
index 000000000000..0a49bea8e13b
--- /dev/null
+++ b/drivers/hwmon/pmbus/adp1050.c
@@ -0,0 +1,58 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Hardware monitoring driver for Analog Devices ADP1050
+ *
+ * Copyright (C) 2024 Analog Devices, Inc.
+ */
+#include <linux/bits.h>
+#include <linux/err.h>
+#include <linux/i2c.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include "pmbus.h"
+
+static struct pmbus_driver_info adp1050_info = {
+ .pages = 1,
+ .format[PSC_VOLTAGE_IN] = linear,
+ .format[PSC_VOLTAGE_OUT] = linear,
+ .format[PSC_CURRENT_IN] = linear,
+ .format[PSC_TEMPERATURE] = linear,
+ .func[0] = PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT
+ | PMBUS_HAVE_VIN | PMBUS_HAVE_STATUS_INPUT
+ | PMBUS_HAVE_IIN | PMBUS_HAVE_TEMP
+ | PMBUS_HAVE_STATUS_TEMP,
+};
+
+static int adp1050_probe(struct i2c_client *client)
+{
+ return pmbus_do_probe(client, &adp1050_info);
+}
+
+static const struct i2c_device_id adp1050_id[] = {
+ {"adp1050", 0},
+ {}
+};
+MODULE_DEVICE_TABLE(i2c, adp1050_id);
+
+static const struct of_device_id adp1050_of_match[] = {
+ { .compatible = "adi,adp1050"},
+ {}
+};
+MODULE_DEVICE_TABLE(of, adp1050_of_match);
+
+static struct i2c_driver adp1050_driver = {
+ .driver = {
+ .name = "adp1050",
+ .of_match_table = adp1050_of_match,
+ },
+ .probe = adp1050_probe,
+ .id_table = adp1050_id,
+};
+module_i2c_driver(adp1050_driver);
+
+MODULE_AUTHOR("Radu Sabau <[email protected]>");
+MODULE_DESCRIPTION("Analog Devices ADP1050 HWMON PMBus Driver");
+MODULE_LICENSE("GPL");
+MODULE_IMPORT_NS(PMBUS);
--
2.34.1
> -----Original Message-----
> From: Radu Sabau <[email protected]>
> Sent: Wednesday, March 20, 2024 2:57 PM
> To: Jean Delvare <[email protected]>; Guenter Roeck <[email protected]>; Rob Herring <[email protected]>; Krzysztof Kozlowski
> <[email protected]>; Conor Dooley <[email protected]>; Jonathan Corbet <[email protected]>; Delphine CC Chiu
> <[email protected]>; Sabau, Radu bogdan <[email protected]>; [email protected];
> [email protected]; [email protected]; [email protected]; [email protected]
> Subject: [PATCH v3 1/2] dt-bindings: hwmon: pmbus: adp1050: add bindings
>
> Add dt-bindings for adp1050 digital controller for isolated power supply
> with pmbus interface voltage, current and temperature monitor.
>
> Signed-off-by: Radu Sabau <[email protected]>
> ---
> v3:
> *Remove extra line before '$id'.
> *Remove 'address-cells' and 'size-cells' from adp1050 node.
> *Rename adp1050 node to generic name.
> *Fix typo from 'adress-cells' to 'address-cells' causing errors in the
> dt-bindings build.
> v2:
> *Fix identation for example.
> *Remove 'adi,vin-scale-monitor' and 'iin-scale-monitor' since they are not used
> anymore.
> *Fix typo for 'compatbile' to 'compatible'.
> *Add blank line under datasheet link.
> ---
> .../bindings/hwmon/pmbus/adi,adp1050.yaml | 49 +++++++++++++++++++
> MAINTAINERS | 7 +++
> 2 files changed, 56 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.yaml
>
> diff --git a/Documentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.yaml
> b/Documentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.yaml
> new file mode 100644
> index 000000000000..42cafd8fec25
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.yaml
> @@ -0,0 +1,49 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: https://devicetree.org/schemas/hwmon/pmbus/adi,adp1050.yaml#
> +$schema: https://devicetree.org/meta-schemes/core.yaml#
> +
> +title: Analog Devices ADP1050 digital controller with PMBus interface
> +
> +maintainers:
> + - Radu Sabau <[email protected]>
> +
> +description: |
> + The ADP1050 is used to monitor system voltages, currents and temperatures.
> + Through the PMBus interface, the ADP1050 targets isolated power supplies
> + and has four individual monitors for input/output voltage, input current
> + and temperature.
> + Datasheet:
> + https://www.analog.com/en/products/adp1050.html
> +
> +properties:
> + compatible:
> + const: adi,adp1050
> +
> + reg:
> + maxItems: 1
> +
> + vcc-supply: true
> +
> +required:
> + - compatible
> + - reg
> + - vcc-supply
> +
> +additionalProperties: false
> +
> +examples:
> + - |
> + i2c {
> + #address-cells = <1>;
> + #size-cells = <0>;
> + clock-frequency = <100000>;
> +
> + hwmon@70 {
> + compatible = "adi,adp1050";
> + reg = <0x70>;
> + vcc-supply = <&vcc>;
> + };
> + };
> +...
Results of bindings testing :
DTEX Documentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.exampledts
LINT Documentation/devicetree/bindings
CHKDT Documentation/devicetree/bindings/processed-schema.json
Traceback (most recent call last):
File "/home/radu/.local/lib/python3.10/site-packages/jsonschema/validators.py", line 912, in resolve_from_url
document = self.resolve_remote(url)
File "/home/radu/.local/lib/python3.10/site-packages/jsonschema/validators.py", line 1015, in resolve_remote
result = requests.get(uri).json()
File "/usr/lib/python3/dist-packages/requests/models.py", line 900, in json
return complexjson.loads(self.text, **kwargs)
File "/usr/lib/python3.10/json/__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.10/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.10/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/radu/.local/bin/dt-doc-validate", line 8, in <module>
sys.exit(main())
File "/home/radu/.local/lib/python3.10/site-packages/dtschema/doc_validate.py", line 66, in main
ret |= check_doc(f)
File "/home/radu/.local/lib/python3.10/site-packages/dtschema/doc_validate.py", line 29, in check_doc
for error in sorted(dtsch.iter_errors(), key=lambda e: e.linecol):
File "/home/radu/.local/lib/python3.10/site-packages/dtschema/schema.py", line 120, in iter_errors
meta_schema = self.resolver.resolve_from_url(self['$schema'])
File "/home/radu/.local/lib/python3.10/site-packages/jsonschema/validators.py", line 914, in resolve_from_url
raise exceptions.RefResolutionError(exc)
jsonschema.exceptions.RefResolutionError: Expecting value: line 1 column 1 (char 0)
SCHEMA Documentation/devicetree/bindings/processed-schema.json
/home/radu/torvalds/linux/Documentation/devicetree/bindings/net/snps,dwmac.yaml: mac-mode: missing type definition
DTC_CHK Documentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.exampledtb
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 43b39956694a..b45753e94756 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -479,6 +479,13 @@ L: [email protected]
> S: Orphan
> F: drivers/net/wireless/admtek/adm8211.*
>
> +ADP1050 HARDWARE MONITOR DRIVER
> +M: Radu Sabau <[email protected]>
> +L: [email protected]
> +S: Supported
> +W: https://ez.analog.com/linux-software-drivers
> +F: Dcumentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.yaml
> +
> ADP1653 FLASH CONTROLLER DRIVER
> M: Sakari Ailus <[email protected]>
> L: [email protected]
> --
> 2.34.1
On 20/03/2024 14:05, Sabau, Radu bogdan wrote:
>> +examples:
>> + - |
>> + i2c {
>> + #address-cells = <1>;
>> + #size-cells = <0>;
>> + clock-frequency = <100000>;
>> +
>> + hwmon@70 {
>> + compatible = "adi,adp1050";
>> + reg = <0x70>;
>> + vcc-supply = <&vcc>;
>> + };
>> + };
>> +...
>
> Results of bindings testing :
>
Yeah... please do not send patches which contain knowingly wrong code.
Code is wrong if you perform testing and result is some sort of FAILURE,
build error, warning message, static checker/linter warning message or
error.
If something is not clear, ask via email or IRC, but sending code which
does not work could cause wasted reviewer's effort.
About your warning, please start your bindings from example-schema or
latest reviewed bindings.
Best regards,
Krzysztof
On Wed, Mar 20, 2024 at 02:57:11PM +0200, Radu Sabau wrote:
> Add dt-bindings for adp1050 digital controller for isolated power supply
> with pmbus interface voltage, current and temperature monitor.
>
> Signed-off-by: Radu Sabau <[email protected]>
> ---
> v3:
> *Remove extra line before '$id'.
> *Remove 'address-cells' and 'size-cells' from adp1050 node.
> *Rename adp1050 node to generic name.
> *Fix typo from 'adress-cells' to 'address-cells' causing errors in the
> dt-bindings build.
> v2:
> *Fix identation for example.
> *Remove 'adi,vin-scale-monitor' and 'iin-scale-monitor' since they are not used
> anymore.
> *Fix typo for 'compatbile' to 'compatible'.
> *Add blank line under datasheet link.
> ---
> .../bindings/hwmon/pmbus/adi,adp1050.yaml | 49 +++++++++++++++++++
> MAINTAINERS | 7 +++
> 2 files changed, 56 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.yaml
>
> diff --git a/Documentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.yaml b/Documentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.yaml
> new file mode 100644
> index 000000000000..42cafd8fec25
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.yaml
> @@ -0,0 +1,49 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: https://devicetree.org/schemas/hwmon/pmbus/adi,adp1050.yaml#
> +$schema: https://devicetree.org/meta-schemes/core.yaml#
Your issues are here. It's "http" and "meta-schemas". This is mostly
copy-n-paste, so how did you get it wrong I wonder...
Rob
> -----Original Message-----
> From: Rob Herring <[email protected]>
> Sent: Thursday, March 21, 2024 4:00 PM
> To: Sabau, Radu bogdan <[email protected]>
> Cc: Jean Delvare <[email protected]>; Guenter Roeck <[email protected]>; Krzysztof Kozlowski <[email protected]>;
> Conor Dooley <[email protected]>; Jonathan Corbet <[email protected]>; Delphine CC Chiu <[email protected]>; linux-
> [email protected]; [email protected]; [email protected]; [email protected]; linux-
> [email protected]
> Subject: Re: [PATCH v3 1/2] dt-bindings: hwmon: pmbus: adp1050: add bindings
>
> [External]
>
> On Wed, Mar 20, 2024 at 02:57:11PM +0200, Radu Sabau wrote:
> > Add dt-bindings for adp1050 digital controller for isolated power supply
> > with pmbus interface voltage, current and temperature monitor.
> >
> > Signed-off-by: Radu Sabau <[email protected]>
> > ---
> > v3:
> > *Remove extra line before '$id'.
> > *Remove 'address-cells' and 'size-cells' from adp1050 node.
> > *Rename adp1050 node to generic name.
> > *Fix typo from 'adress-cells' to 'address-cells' causing errors in the
> > dt-bindings build.
> > v2:
> > *Fix identation for example.
> > *Remove 'adi,vin-scale-monitor' and 'iin-scale-monitor' since they are not used
> > anymore.
> > *Fix typo for 'compatbile' to 'compatible'.
> > *Add blank line under datasheet link.
> > ---
> > .../bindings/hwmon/pmbus/adi,adp1050.yaml | 49 +++++++++++++++++++
> > MAINTAINERS | 7 +++
> > 2 files changed, 56 insertions(+)
> > create mode 100644 Documentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.yaml
> >
> > diff --git a/Documentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.yaml
> b/Documentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.yaml
> > new file mode 100644
> > index 000000000000..42cafd8fec25
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/hwmon/pmbus/adi,adp1050.yaml
> > @@ -0,0 +1,49 @@
> > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: https://urldefense.com/v3/__https://devicetree.org/schemas/hwmon/pmbus/adi,adp1050.yaml*__;Iw!!A3Ni8CS0y2Y!-
> 8d2ef4ArhRTDUHLiMXbulDz4xJmONqhQqWKLN35O7oIBsTYAjH2h1LFAT8T03nuAi97Q_kk4D5m$
> > +$schema: https://urldefense.com/v3/__https://devicetree.org/meta-schemes/core.yaml*__;Iw!!A3Ni8CS0y2Y!-
> 8d2ef4ArhRTDUHLiMXbulDz4xJmONqhQqWKLN35O7oIBsTYAjH2h1LFAT8T03nuAi97Qy7d7HZZ$
>
> Your issues are here. It's "http" and "meta-schemas". This is mostly
> copy-n-paste, so how did you get it wrong I wonder...
>
I ran the build one more time yesterday and noticed that there were typos
in the links, I guess it's because I decided for some reason to write them
by hand (don't know why because it doesn't make any sense).
> Rob