All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] hwmon: Add UCD90320 power sequencer chip
@ 2019-11-22 22:25 Jim Wright
  2019-11-22 22:25 ` [PATCH 1/2] dt-bindings: hwmon/pmbus: Add UCD90320 power sequencer Jim Wright
  2019-11-22 22:25 ` [PATCH 2/2] hwmon: Add support for UCD90320 Power Sequencer Jim Wright
  0 siblings, 2 replies; 5+ messages in thread
From: Jim Wright @ 2019-11-22 22:25 UTC (permalink / raw)
  To: jdelvare, linux, robh+dt, mark.rutland, corbet
  Cc: linux-hwmon, devicetree, linux-doc, linux-kernel, Jim Wright

From: Jim Wright <jlwright@us.ibm.com>

Add support for TI UCD90320 power sequencer chip.

Jim Wright (2):
  dt-bindings: hwmon/pmbus: Add UCD90320 power sequencer
  hwmon: Add support for UCD90320 Power Sequencer

 .../bindings/hwmon/pmbus/ucd90320.txt         | 13 +++++++
 Documentation/hwmon/ucd9000.rst               | 12 +++++-
 drivers/hwmon/pmbus/Kconfig                   |  6 +--
 drivers/hwmon/pmbus/ucd9000.c                 | 39 +++++++++++++------
 4 files changed, 53 insertions(+), 17 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/hwmon/pmbus/ucd90320.txt

-- 
2.17.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/2] dt-bindings: hwmon/pmbus: Add UCD90320 power sequencer
  2019-11-22 22:25 [PATCH 0/2] hwmon: Add UCD90320 power sequencer chip Jim Wright
@ 2019-11-22 22:25 ` Jim Wright
  2019-12-04 22:59   ` Rob Herring
  2019-11-22 22:25 ` [PATCH 2/2] hwmon: Add support for UCD90320 Power Sequencer Jim Wright
  1 sibling, 1 reply; 5+ messages in thread
From: Jim Wright @ 2019-11-22 22:25 UTC (permalink / raw)
  To: jdelvare, linux, robh+dt, mark.rutland, corbet
  Cc: linux-hwmon, devicetree, linux-doc, linux-kernel, Jim Wright

From: Jim Wright <jlwright@us.ibm.com>

Document the UCD90320 device tree binding.

Signed-off-by: Jim Wright <jlwright@us.ibm.com>
---
 .../devicetree/bindings/hwmon/pmbus/ucd90320.txt    | 13 +++++++++++++
 1 file changed, 13 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/hwmon/pmbus/ucd90320.txt

diff --git a/Documentation/devicetree/bindings/hwmon/pmbus/ucd90320.txt b/Documentation/devicetree/bindings/hwmon/pmbus/ucd90320.txt
new file mode 100644
index 000000000000..e1c1057c6292
--- /dev/null
+++ b/Documentation/devicetree/bindings/hwmon/pmbus/ucd90320.txt
@@ -0,0 +1,13 @@
+UCD90320 power sequencer
+-------------------------
+
+Requires node properties:
+- compatible : "ti,ucd90320"
+- reg : the I2C address of the device. This is 0x11, 0x13, 0x17, 0x31, 0x33,
+        0x37, 0x71, 0x73, or 0x77.
+
+Example:
+	ucd90320@11 {
+		compatible = "ti,ucd90320";
+		reg = <0x11>;
+	};
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/2] hwmon: Add support for UCD90320 Power Sequencer
  2019-11-22 22:25 [PATCH 0/2] hwmon: Add UCD90320 power sequencer chip Jim Wright
  2019-11-22 22:25 ` [PATCH 1/2] dt-bindings: hwmon/pmbus: Add UCD90320 power sequencer Jim Wright
@ 2019-11-22 22:25 ` Jim Wright
  1 sibling, 0 replies; 5+ messages in thread
From: Jim Wright @ 2019-11-22 22:25 UTC (permalink / raw)
  To: jdelvare, linux, robh+dt, mark.rutland, corbet
  Cc: linux-hwmon, devicetree, linux-doc, linux-kernel, Jim Wright

From: Jim Wright <jlwright@us.ibm.com>

Add support for the UCD90320 chip and its expanded set of GPIO pins.

Signed-off-by: Jim Wright <jlwright@us.ibm.com>
---
 Documentation/hwmon/ucd9000.rst | 12 ++++++++--
 drivers/hwmon/pmbus/Kconfig     |  6 ++---
 drivers/hwmon/pmbus/ucd9000.c   | 39 +++++++++++++++++++++++----------
 3 files changed, 40 insertions(+), 17 deletions(-)

diff --git a/Documentation/hwmon/ucd9000.rst b/Documentation/hwmon/ucd9000.rst
index 746f21fcb48c..704f0cbd95d3 100644
--- a/Documentation/hwmon/ucd9000.rst
+++ b/Documentation/hwmon/ucd9000.rst
@@ -3,9 +3,10 @@ Kernel driver ucd9000
 
 Supported chips:
 
-  * TI UCD90120, UCD90124, UCD90160, UCD9090, and UCD90910
+  * TI UCD90120, UCD90124, UCD90160, UCD90320, UCD9090, and UCD90910
 
-    Prefixes: 'ucd90120', 'ucd90124', 'ucd90160', 'ucd9090', 'ucd90910'
+    Prefixes: 'ucd90120', 'ucd90124', 'ucd90160', 'ucd90320', 'ucd9090',
+              'ucd90910'
 
     Addresses scanned: -
 
@@ -14,6 +15,7 @@ Supported chips:
 	- http://focus.ti.com/lit/ds/symlink/ucd90120.pdf
 	- http://focus.ti.com/lit/ds/symlink/ucd90124.pdf
 	- http://focus.ti.com/lit/ds/symlink/ucd90160.pdf
+	- http://focus.ti.com/lit/ds/symlink/ucd90320.pdf
 	- http://focus.ti.com/lit/ds/symlink/ucd9090.pdf
 	- http://focus.ti.com/lit/ds/symlink/ucd90910.pdf
 
@@ -45,6 +47,12 @@ power-on reset signals, external interrupts, cascading, or other system
 functions. Twelve of these pins offer PWM functionality. Using these pins, the
 UCD90160 offers support for margining, and general-purpose PWM functions.
 
+The UCD90320 is a 32-rail PMBus/I2C addressable power-supply sequencer and
+monitor. The 24 integrated ADC channels (AMONx) monitor the power supply
+voltage, current, and temperature. Of the 84 GPIO pins, 8 can be used as
+digital monitors (DMONx), 32 to enable the power supply (ENx), 24 for margining
+(MARx), 16 for logical GPO, and 32 GPIs for cascading, and system function.
+
 The UCD9090 is a 10-rail PMBus/I2C addressable power-supply sequencer and
 monitor. The device integrates a 12-bit ADC for monitoring up to 10 power-supply
 voltage inputs. Twenty-three GPIO pins can be used for power supply enables,
diff --git a/drivers/hwmon/pmbus/Kconfig b/drivers/hwmon/pmbus/Kconfig
index d62d69bb7e49..61062632b22b 100644
--- a/drivers/hwmon/pmbus/Kconfig
+++ b/drivers/hwmon/pmbus/Kconfig
@@ -200,11 +200,11 @@ config SENSORS_TPS53679
 	  be called tps53679.
 
 config SENSORS_UCD9000
-	tristate "TI UCD90120, UCD90124, UCD90160, UCD9090, UCD90910"
+	tristate "TI UCD90120, UCD90124, UCD90160, UCD90320, UCD9090, UCD90910"
 	help
 	  If you say yes here you get hardware monitoring support for TI
-	  UCD90120, UCD90124, UCD90160, UCD9090, UCD90910, Sequencer and System
-	  Health Controllers.
+	  UCD90120, UCD90124, UCD90160, UCD90320, UCD9090, UCD90910, Sequencer
+	  and System Health Controllers.
 
 	  This driver can also be built as a module. If so, the module will
 	  be called ucd9000.
diff --git a/drivers/hwmon/pmbus/ucd9000.c b/drivers/hwmon/pmbus/ucd9000.c
index a9229c6b0e84..23ea3415f166 100644
--- a/drivers/hwmon/pmbus/ucd9000.c
+++ b/drivers/hwmon/pmbus/ucd9000.c
@@ -18,7 +18,8 @@
 #include <linux/gpio/driver.h>
 #include "pmbus.h"
 
-enum chips { ucd9000, ucd90120, ucd90124, ucd90160, ucd9090, ucd90910 };
+enum chips { ucd9000, ucd90120, ucd90124, ucd90160, ucd90320, ucd9090,
+	     ucd90910 };
 
 #define UCD9000_MONITOR_CONFIG		0xd5
 #define UCD9000_NUM_PAGES		0xd6
@@ -38,7 +39,7 @@ enum chips { ucd9000, ucd90120, ucd90124, ucd90160, ucd9090, ucd90910 };
 #define UCD9000_GPIO_OUTPUT		1
 
 #define UCD9000_MON_TYPE(x)	(((x) >> 5) & 0x07)
-#define UCD9000_MON_PAGE(x)	((x) & 0x0f)
+#define UCD9000_MON_PAGE(x)	((x) & 0x1f)
 
 #define UCD9000_MON_VOLTAGE	1
 #define UCD9000_MON_TEMPERATURE	2
@@ -50,10 +51,12 @@ enum chips { ucd9000, ucd90120, ucd90124, ucd90160, ucd9090, ucd90910 };
 #define UCD9000_GPIO_NAME_LEN	16
 #define UCD9090_NUM_GPIOS	23
 #define UCD901XX_NUM_GPIOS	26
+#define UCD90320_NUM_GPIOS	84
 #define UCD90910_NUM_GPIOS	26
 
 #define UCD9000_DEBUGFS_NAME_LEN	24
 #define UCD9000_GPI_COUNT		8
+#define UCD90320_GPI_COUNT		32
 
 struct ucd9000_data {
 	u8 fan_data[UCD9000_NUM_FAN][I2C_SMBUS_BLOCK_MAX];
@@ -131,6 +134,7 @@ static const struct i2c_device_id ucd9000_id[] = {
 	{"ucd90120", ucd90120},
 	{"ucd90124", ucd90124},
 	{"ucd90160", ucd90160},
+	{"ucd90320", ucd90320},
 	{"ucd9090", ucd9090},
 	{"ucd90910", ucd90910},
 	{}
@@ -154,6 +158,10 @@ static const struct of_device_id __maybe_unused ucd9000_of_match[] = {
 		.compatible = "ti,ucd90160",
 		.data = (void *)ucd90160
 	},
+	{
+		.compatible = "ti,ucd90320",
+		.data = (void *)ucd90320
+	},
 	{
 		.compatible = "ti,ucd9090",
 		.data = (void *)ucd9090
@@ -322,6 +330,9 @@ static void ucd9000_probe_gpio(struct i2c_client *client,
 	case ucd90160:
 		data->gpio.ngpio = UCD901XX_NUM_GPIOS;
 		break;
+	case ucd90320:
+		data->gpio.ngpio = UCD90320_NUM_GPIOS;
+		break;
 	case ucd90910:
 		data->gpio.ngpio = UCD90910_NUM_GPIOS;
 		break;
@@ -372,17 +383,18 @@ static int ucd9000_debugfs_show_mfr_status_bit(void *data, u64 *val)
 	struct ucd9000_debugfs_entry *entry = data;
 	struct i2c_client *client = entry->client;
 	u8 buffer[I2C_SMBUS_BLOCK_MAX];
-	int ret;
+	int ret, i;
 
 	ret = ucd9000_get_mfr_status(client, buffer);
 	if (ret < 0)
 		return ret;
 
 	/*
-	 * Attribute only created for devices with gpi fault bits at bits
-	 * 16-23, which is the second byte of the response.
+	 * GPI fault bits are in sets of 8, two bytes from end of response.
 	 */
-	*val = !!(buffer[1] & BIT(entry->index));
+	i = ret - 3 - entry->index / 8;
+	if (i >= 0)
+		*val = !!(buffer[i] & BIT(entry->index % 8));
 
 	return 0;
 }
@@ -422,7 +434,7 @@ static int ucd9000_init_debugfs(struct i2c_client *client,
 {
 	struct dentry *debugfs;
 	struct ucd9000_debugfs_entry *entries;
-	int i;
+	int i, gpi_count;
 	char name[UCD9000_DEBUGFS_NAME_LEN];
 
 	debugfs = pmbus_get_debugfs_dir(client);
@@ -435,18 +447,21 @@ static int ucd9000_init_debugfs(struct i2c_client *client,
 
 	/*
 	 * Of the chips this driver supports, only the UCD9090, UCD90160,
-	 * and UCD90910 report GPI faults in their MFR_STATUS register, so only
-	 * create the GPI fault debugfs attributes for those chips.
+	 * UCD90320, and UCD90910 report GPI faults in their MFR_STATUS
+	 * register, so only create the GPI fault debugfs attributes for those
+	 * chips.
 	 */
 	if (mid->driver_data == ucd9090 || mid->driver_data == ucd90160 ||
-	    mid->driver_data == ucd90910) {
+	    mid->driver_data == ucd90320 || mid->driver_data == ucd90910) {
+		gpi_count = mid->driver_data == ucd90320 ? UCD90320_GPI_COUNT
+							 : UCD9000_GPI_COUNT;
 		entries = devm_kcalloc(&client->dev,
-				       UCD9000_GPI_COUNT, sizeof(*entries),
+				       gpi_count, sizeof(*entries),
 				       GFP_KERNEL);
 		if (!entries)
 			return -ENOMEM;
 
-		for (i = 0; i < UCD9000_GPI_COUNT; i++) {
+		for (i = 0; i < gpi_count; i++) {
 			entries[i].client = client;
 			entries[i].index = i;
 			scnprintf(name, UCD9000_DEBUGFS_NAME_LEN,
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] dt-bindings: hwmon/pmbus: Add UCD90320 power sequencer
  2019-11-22 22:25 ` [PATCH 1/2] dt-bindings: hwmon/pmbus: Add UCD90320 power sequencer Jim Wright
@ 2019-12-04 22:59   ` Rob Herring
  2019-12-04 23:32     ` Jim Wright
  0 siblings, 1 reply; 5+ messages in thread
From: Rob Herring @ 2019-12-04 22:59 UTC (permalink / raw)
  To: Jim Wright
  Cc: jdelvare, linux, mark.rutland, corbet, linux-hwmon, devicetree,
	linux-doc, linux-kernel, Jim Wright

On Fri, Nov 22, 2019 at 04:25:41PM -0600, Jim Wright wrote:
> From: Jim Wright <jlwright@us.ibm.com>
> 
> Document the UCD90320 device tree binding.
> 
> Signed-off-by: Jim Wright <jlwright@us.ibm.com>
> ---
>  .../devicetree/bindings/hwmon/pmbus/ucd90320.txt    | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/hwmon/pmbus/ucd90320.txt

Can you make this a schema. See 
Documentation/devicetree/writing-schema.rst.

> 
> diff --git a/Documentation/devicetree/bindings/hwmon/pmbus/ucd90320.txt b/Documentation/devicetree/bindings/hwmon/pmbus/ucd90320.txt
> new file mode 100644
> index 000000000000..e1c1057c6292
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/hwmon/pmbus/ucd90320.txt
> @@ -0,0 +1,13 @@
> +UCD90320 power sequencer
> +-------------------------
> +
> +Requires node properties:
> +- compatible : "ti,ucd90320"
> +- reg : the I2C address of the device. This is 0x11, 0x13, 0x17, 0x31, 0x33,
> +        0x37, 0x71, 0x73, or 0x77.
> +
> +Example:
> +	ucd90320@11 {
> +		compatible = "ti,ucd90320";
> +		reg = <0x11>;
> +	};
> -- 
> 2.17.1
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] dt-bindings: hwmon/pmbus: Add UCD90320 power sequencer
  2019-12-04 22:59   ` Rob Herring
@ 2019-12-04 23:32     ` Jim Wright
  0 siblings, 0 replies; 5+ messages in thread
From: Jim Wright @ 2019-12-04 23:32 UTC (permalink / raw)
  To: Rob Herring
  Cc: jdelvare, linux, mark.rutland, corbet, linux-hwmon, devicetree,
	linux-doc, linux-kernel, Jim Wright

Hi Rob,

On 12/4/2019 4:59 PM, Rob Herring wrote:
> On Fri, Nov 22, 2019 at 04:25:41PM -0600, Jim Wright wrote:
>> From: Jim Wright <jlwright@us.ibm.com>
>>
>> Document the UCD90320 device tree binding.
>>
>> Signed-off-by: Jim Wright <jlwright@us.ibm.com>
>> ---
>>   .../devicetree/bindings/hwmon/pmbus/ucd90320.txt    | 13 +++++++++++++
>>   1 file changed, 13 insertions(+)
>>   create mode 100644 Documentation/devicetree/bindings/hwmon/pmbus/ucd90320.txt
> Can you make this a schema. See
> Documentation/devicetree/writing-schema.rst.
Ok, will do and submit patch set revision.
Thanks for the review,
Jim Wright
>
>> diff --git a/Documentation/devicetree/bindings/hwmon/pmbus/ucd90320.txt b/Documentation/devicetree/bindings/hwmon/pmbus/ucd90320.txt
>> new file mode 100644
>> index 000000000000..e1c1057c6292
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/hwmon/pmbus/ucd90320.txt
>> @@ -0,0 +1,13 @@
>> +UCD90320 power sequencer
>> +-------------------------
>> +
>> +Requires node properties:
>> +- compatible : "ti,ucd90320"
>> +- reg : the I2C address of the device. This is 0x11, 0x13, 0x17, 0x31, 0x33,
>> +        0x37, 0x71, 0x73, or 0x77.
>> +
>> +Example:
>> +	ucd90320@11 {
>> +		compatible = "ti,ucd90320";
>> +		reg = <0x11>;
>> +	};
>> -- 
>> 2.17.1
>>

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2019-12-04 23:33 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-11-22 22:25 [PATCH 0/2] hwmon: Add UCD90320 power sequencer chip Jim Wright
2019-11-22 22:25 ` [PATCH 1/2] dt-bindings: hwmon/pmbus: Add UCD90320 power sequencer Jim Wright
2019-12-04 22:59   ` Rob Herring
2019-12-04 23:32     ` Jim Wright
2019-11-22 22:25 ` [PATCH 2/2] hwmon: Add support for UCD90320 Power Sequencer Jim Wright

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.