* [PATCH 0/3] hwmon: (pmbus/ibm-cffps) New debugfs entries, VMON, and LED fix
@ 2019-12-19 20:50 Eddie James
2019-12-19 20:50 ` [PATCH 1/3] hwmon: (pmbus/ibm-cffps) Add new manufacturer debugfs entries Eddie James
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Eddie James @ 2019-12-19 20:50 UTC (permalink / raw)
To: linux-hwmon; +Cc: linux-kernel, linux, jdelvare, bjwyman, Eddie James
Add a few features to the IBM PSU driver. Fix the LED behavior that I recently
changed due to misunderstanding some user requirements.
Eddie James (3):
hwmon: (pmbus/ibm-cffps) Add new manufacturer debugfs entries
hwmon: (pmbus/ibm-cffps) Add the VMON property for version 2
hwmon: (pmbus/ibm-cffps) Fix the LED behavior when turned off
drivers/hwmon/pmbus/ibm-cffps.c | 89 ++++++++++++++++++++++++++++++++++++-----
1 file changed, 79 insertions(+), 10 deletions(-)
--
1.8.3.1
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/3] hwmon: (pmbus/ibm-cffps) Add new manufacturer debugfs entries
2019-12-19 20:50 [PATCH 0/3] hwmon: (pmbus/ibm-cffps) New debugfs entries, VMON, and LED fix Eddie James
@ 2019-12-19 20:50 ` Eddie James
2020-01-04 16:26 ` Guenter Roeck
2019-12-19 20:50 ` [PATCH 2/3] hwmon: (pmbus/ibm-cffps) Add the VMON property for version 2 Eddie James
2019-12-19 20:50 ` [PATCH 3/3] hwmon: (pmbus/ibm-cffps) Fix the LED behavior when turned off Eddie James
2 siblings, 1 reply; 9+ messages in thread
From: Eddie James @ 2019-12-19 20:50 UTC (permalink / raw)
To: linux-hwmon; +Cc: linux-kernel, linux, jdelvare, bjwyman, Eddie James
Add support for a number of manufacturer-specific registers in the
debugfs entries, as well as support to read and write the
PMBUS_ON_OFF_CONFIG register through debugfs.
Signed-off-by: Eddie James <eajames@linux.ibm.com>
---
drivers/hwmon/pmbus/ibm-cffps.c | 74 ++++++++++++++++++++++++++++++++++++++---
1 file changed, 70 insertions(+), 4 deletions(-)
diff --git a/drivers/hwmon/pmbus/ibm-cffps.c b/drivers/hwmon/pmbus/ibm-cffps.c
index d359b76..a564be9 100644
--- a/drivers/hwmon/pmbus/ibm-cffps.c
+++ b/drivers/hwmon/pmbus/ibm-cffps.c
@@ -20,7 +20,9 @@
#define CFFPS_FRU_CMD 0x9A
#define CFFPS_PN_CMD 0x9B
+#define CFFPS_HEADER_CMD 0x9C
#define CFFPS_SN_CMD 0x9E
+#define CFFPS_MAX_POWER_OUT_CMD 0xA7
#define CFFPS_CCIN_CMD 0xBD
#define CFFPS_FW_CMD 0xFA
#define CFFPS1_FW_NUM_BYTES 4
@@ -57,9 +59,12 @@ enum {
CFFPS_DEBUGFS_INPUT_HISTORY = 0,
CFFPS_DEBUGFS_FRU,
CFFPS_DEBUGFS_PN,
+ CFFPS_DEBUGFS_HEADER,
CFFPS_DEBUGFS_SN,
+ CFFPS_DEBUGFS_MAX_POWER_OUT,
CFFPS_DEBUGFS_CCIN,
CFFPS_DEBUGFS_FW,
+ CFFPS_DEBUGFS_ON_OFF_CONFIG,
CFFPS_DEBUGFS_NUM_ENTRIES
};
@@ -136,15 +141,15 @@ static ssize_t ibm_cffps_read_input_history(struct ibm_cffps *psu,
psu->input_history.byte_count);
}
-static ssize_t ibm_cffps_debugfs_op(struct file *file, char __user *buf,
- size_t count, loff_t *ppos)
+static ssize_t ibm_cffps_debugfs_read(struct file *file, char __user *buf,
+ size_t count, loff_t *ppos)
{
u8 cmd;
int i, rc;
int *idxp = file->private_data;
int idx = *idxp;
struct ibm_cffps *psu = to_psu(idxp, idx);
- char data[I2C_SMBUS_BLOCK_MAX] = { 0 };
+ char data[I2C_SMBUS_BLOCK_MAX + 2] = { 0 };
pmbus_set_page(psu->client, 0);
@@ -157,9 +162,20 @@ static ssize_t ibm_cffps_debugfs_op(struct file *file, char __user *buf,
case CFFPS_DEBUGFS_PN:
cmd = CFFPS_PN_CMD;
break;
+ case CFFPS_DEBUGFS_HEADER:
+ cmd = CFFPS_HEADER_CMD;
+ break;
case CFFPS_DEBUGFS_SN:
cmd = CFFPS_SN_CMD;
break;
+ case CFFPS_DEBUGFS_MAX_POWER_OUT:
+ rc = i2c_smbus_read_word_swapped(psu->client,
+ CFFPS_MAX_POWER_OUT_CMD);
+ if (rc < 0)
+ return rc;
+
+ rc = snprintf(data, I2C_SMBUS_BLOCK_MAX, "%d", rc);
+ goto done;
case CFFPS_DEBUGFS_CCIN:
rc = i2c_smbus_read_word_swapped(psu->client, CFFPS_CCIN_CMD);
if (rc < 0)
@@ -199,6 +215,14 @@ static ssize_t ibm_cffps_debugfs_op(struct file *file, char __user *buf,
return -EOPNOTSUPP;
}
goto done;
+ case CFFPS_DEBUGFS_ON_OFF_CONFIG:
+ rc = i2c_smbus_read_byte_data(psu->client,
+ PMBUS_ON_OFF_CONFIG);
+ if (rc < 0)
+ return rc;
+
+ rc = snprintf(data, 3, "%02x", rc);
+ goto done;
default:
return -EINVAL;
}
@@ -214,9 +238,42 @@ static ssize_t ibm_cffps_debugfs_op(struct file *file, char __user *buf,
return simple_read_from_buffer(buf, count, ppos, data, rc);
}
+static ssize_t ibm_cffps_debugfs_write(struct file *file,
+ const char __user *buf, size_t count,
+ loff_t *ppos)
+{
+ u8 data;
+ ssize_t rc;
+ int *idxp = file->private_data;
+ int idx = *idxp;
+ struct ibm_cffps *psu = to_psu(idxp, idx);
+
+ switch (idx) {
+ case CFFPS_DEBUGFS_ON_OFF_CONFIG:
+ pmbus_set_page(psu->client, 0);
+
+ rc = simple_write_to_buffer(&data, 1, ppos, buf, count);
+ if (rc < 0)
+ return rc;
+
+ rc = i2c_smbus_write_byte_data(psu->client,
+ PMBUS_ON_OFF_CONFIG, data);
+ if (rc)
+ return rc;
+
+ rc = 1;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return rc;
+}
+
static const struct file_operations ibm_cffps_fops = {
.llseek = noop_llseek,
- .read = ibm_cffps_debugfs_op,
+ .read = ibm_cffps_debugfs_read,
+ .write = ibm_cffps_debugfs_write,
.open = simple_open,
};
@@ -486,15 +543,24 @@ static int ibm_cffps_probe(struct i2c_client *client,
debugfs_create_file("part_number", 0444, ibm_cffps_dir,
&psu->debugfs_entries[CFFPS_DEBUGFS_PN],
&ibm_cffps_fops);
+ debugfs_create_file("header", 0444, ibm_cffps_dir,
+ &psu->debugfs_entries[CFFPS_DEBUGFS_HEADER],
+ &ibm_cffps_fops);
debugfs_create_file("serial_number", 0444, ibm_cffps_dir,
&psu->debugfs_entries[CFFPS_DEBUGFS_SN],
&ibm_cffps_fops);
+ debugfs_create_file("max_power_out", 0444, ibm_cffps_dir,
+ &psu->debugfs_entries[CFFPS_DEBUGFS_MAX_POWER_OUT],
+ &ibm_cffps_fops);
debugfs_create_file("ccin", 0444, ibm_cffps_dir,
&psu->debugfs_entries[CFFPS_DEBUGFS_CCIN],
&ibm_cffps_fops);
debugfs_create_file("fw_version", 0444, ibm_cffps_dir,
&psu->debugfs_entries[CFFPS_DEBUGFS_FW],
&ibm_cffps_fops);
+ debugfs_create_file("on_off_config", 0644, ibm_cffps_dir,
+ &psu->debugfs_entries[CFFPS_DEBUGFS_ON_OFF_CONFIG],
+ &ibm_cffps_fops);
return 0;
}
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/3] hwmon: (pmbus/ibm-cffps) Add the VMON property for version 2
2019-12-19 20:50 [PATCH 0/3] hwmon: (pmbus/ibm-cffps) New debugfs entries, VMON, and LED fix Eddie James
2019-12-19 20:50 ` [PATCH 1/3] hwmon: (pmbus/ibm-cffps) Add new manufacturer debugfs entries Eddie James
@ 2019-12-19 20:50 ` Eddie James
2020-01-04 16:28 ` Guenter Roeck
2019-12-19 20:50 ` [PATCH 3/3] hwmon: (pmbus/ibm-cffps) Fix the LED behavior when turned off Eddie James
2 siblings, 1 reply; 9+ messages in thread
From: Eddie James @ 2019-12-19 20:50 UTC (permalink / raw)
To: linux-hwmon; +Cc: linux-kernel, linux, jdelvare, bjwyman, Eddie James
Version 2 of the PSU supports reading an auxiliary voltage. Use the
pmbus VMON property and associated virtual register to read it.
Signed-off-by: Eddie James <eajames@linux.ibm.com>
---
drivers/hwmon/pmbus/ibm-cffps.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/hwmon/pmbus/ibm-cffps.c b/drivers/hwmon/pmbus/ibm-cffps.c
index a564be9..b37faf1 100644
--- a/drivers/hwmon/pmbus/ibm-cffps.c
+++ b/drivers/hwmon/pmbus/ibm-cffps.c
@@ -28,6 +28,7 @@
#define CFFPS1_FW_NUM_BYTES 4
#define CFFPS2_FW_NUM_WORDS 3
#define CFFPS_SYS_CONFIG_CMD 0xDA
+#define CFFPS_12VCS_VOUT_CMD 0xDE
#define CFFPS_INPUT_HISTORY_CMD 0xD6
#define CFFPS_INPUT_HISTORY_SIZE 100
@@ -350,6 +351,9 @@ static int ibm_cffps_read_word_data(struct i2c_client *client, int page,
if (mfr & CFFPS_MFR_PS_KILL)
rc |= PB_STATUS_OFF;
break;
+ case PMBUS_VIRT_READ_VMON:
+ rc = pmbus_read_word_data(client, page, CFFPS_12VCS_VOUT_CMD);
+ break;
default:
rc = -ENODATA;
break;
@@ -453,7 +457,7 @@ static void ibm_cffps_create_led_class(struct ibm_cffps *psu)
PMBUS_HAVE_TEMP2 | PMBUS_HAVE_TEMP3 |
PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_STATUS_IOUT |
PMBUS_HAVE_STATUS_INPUT | PMBUS_HAVE_STATUS_TEMP |
- PMBUS_HAVE_STATUS_FAN12,
+ PMBUS_HAVE_STATUS_FAN12 | PMBUS_HAVE_VMON,
.func[1] = PMBUS_HAVE_VOUT | PMBUS_HAVE_IOUT |
PMBUS_HAVE_TEMP | PMBUS_HAVE_TEMP2 | PMBUS_HAVE_TEMP3 |
PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_STATUS_IOUT,
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 3/3] hwmon: (pmbus/ibm-cffps) Fix the LED behavior when turned off
2019-12-19 20:50 [PATCH 0/3] hwmon: (pmbus/ibm-cffps) New debugfs entries, VMON, and LED fix Eddie James
2019-12-19 20:50 ` [PATCH 1/3] hwmon: (pmbus/ibm-cffps) Add new manufacturer debugfs entries Eddie James
2019-12-19 20:50 ` [PATCH 2/3] hwmon: (pmbus/ibm-cffps) Add the VMON property for version 2 Eddie James
@ 2019-12-19 20:50 ` Eddie James
2020-01-04 16:30 ` Guenter Roeck
2 siblings, 1 reply; 9+ messages in thread
From: Eddie James @ 2019-12-19 20:50 UTC (permalink / raw)
To: linux-hwmon; +Cc: linux-kernel, linux, jdelvare, bjwyman, Eddie James
The driver should remain in control of the LED on the PSU, even while
off, not the PSU firmware as previously indicated.
Signed-off-by: Eddie James <eajames@linux.ibm.com>
---
drivers/hwmon/pmbus/ibm-cffps.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/hwmon/pmbus/ibm-cffps.c b/drivers/hwmon/pmbus/ibm-cffps.c
index b37faf1..1c91ee1 100644
--- a/drivers/hwmon/pmbus/ibm-cffps.c
+++ b/drivers/hwmon/pmbus/ibm-cffps.c
@@ -47,13 +47,9 @@
#define CFFPS_MFR_VAUX_FAULT BIT(6)
#define CFFPS_MFR_CURRENT_SHARE_WARNING BIT(7)
-/*
- * LED off state actually relinquishes LED control to PSU firmware, so it can
- * turn on the LED for faults.
- */
-#define CFFPS_LED_OFF 0
#define CFFPS_LED_BLINK BIT(0)
#define CFFPS_LED_ON BIT(1)
+#define CFFPS_LED_OFF BIT(2)
#define CFFPS_BLINK_RATE_MS 250
enum {
@@ -436,6 +432,9 @@ static void ibm_cffps_create_led_class(struct ibm_cffps *psu)
rc = devm_led_classdev_register(dev, &psu->led);
if (rc)
dev_warn(dev, "failed to register led class: %d\n", rc);
+ else
+ i2c_smbus_write_byte_data(client, CFFPS_SYS_CONFIG_CMD,
+ CFFPS_LED_OFF);
}
static struct pmbus_driver_info ibm_cffps_info[] = {
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 1/3] hwmon: (pmbus/ibm-cffps) Add new manufacturer debugfs entries
2019-12-19 20:50 ` [PATCH 1/3] hwmon: (pmbus/ibm-cffps) Add new manufacturer debugfs entries Eddie James
@ 2020-01-04 16:26 ` Guenter Roeck
2020-01-06 15:32 ` Eddie James
0 siblings, 1 reply; 9+ messages in thread
From: Guenter Roeck @ 2020-01-04 16:26 UTC (permalink / raw)
To: Eddie James; +Cc: linux-hwmon, linux-kernel, jdelvare, bjwyman
On Thu, Dec 19, 2019 at 02:50:05PM -0600, Eddie James wrote:
> Add support for a number of manufacturer-specific registers in the
> debugfs entries, as well as support to read and write the
> PMBUS_ON_OFF_CONFIG register through debugfs.
>
> Signed-off-by: Eddie James <eajames@linux.ibm.com>
I assume you know what you are doing, letting the user write anything
into on_off_config. Applied to -next.
Guenter
> ---
> drivers/hwmon/pmbus/ibm-cffps.c | 74 ++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 70 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/hwmon/pmbus/ibm-cffps.c b/drivers/hwmon/pmbus/ibm-cffps.c
> index d359b76..a564be9 100644
> --- a/drivers/hwmon/pmbus/ibm-cffps.c
> +++ b/drivers/hwmon/pmbus/ibm-cffps.c
> @@ -20,7 +20,9 @@
>
> #define CFFPS_FRU_CMD 0x9A
> #define CFFPS_PN_CMD 0x9B
> +#define CFFPS_HEADER_CMD 0x9C
> #define CFFPS_SN_CMD 0x9E
> +#define CFFPS_MAX_POWER_OUT_CMD 0xA7
> #define CFFPS_CCIN_CMD 0xBD
> #define CFFPS_FW_CMD 0xFA
> #define CFFPS1_FW_NUM_BYTES 4
> @@ -57,9 +59,12 @@ enum {
> CFFPS_DEBUGFS_INPUT_HISTORY = 0,
> CFFPS_DEBUGFS_FRU,
> CFFPS_DEBUGFS_PN,
> + CFFPS_DEBUGFS_HEADER,
> CFFPS_DEBUGFS_SN,
> + CFFPS_DEBUGFS_MAX_POWER_OUT,
> CFFPS_DEBUGFS_CCIN,
> CFFPS_DEBUGFS_FW,
> + CFFPS_DEBUGFS_ON_OFF_CONFIG,
> CFFPS_DEBUGFS_NUM_ENTRIES
> };
>
> @@ -136,15 +141,15 @@ static ssize_t ibm_cffps_read_input_history(struct ibm_cffps *psu,
> psu->input_history.byte_count);
> }
>
> -static ssize_t ibm_cffps_debugfs_op(struct file *file, char __user *buf,
> - size_t count, loff_t *ppos)
> +static ssize_t ibm_cffps_debugfs_read(struct file *file, char __user *buf,
> + size_t count, loff_t *ppos)
> {
> u8 cmd;
> int i, rc;
> int *idxp = file->private_data;
> int idx = *idxp;
> struct ibm_cffps *psu = to_psu(idxp, idx);
> - char data[I2C_SMBUS_BLOCK_MAX] = { 0 };
> + char data[I2C_SMBUS_BLOCK_MAX + 2] = { 0 };
>
> pmbus_set_page(psu->client, 0);
>
> @@ -157,9 +162,20 @@ static ssize_t ibm_cffps_debugfs_op(struct file *file, char __user *buf,
> case CFFPS_DEBUGFS_PN:
> cmd = CFFPS_PN_CMD;
> break;
> + case CFFPS_DEBUGFS_HEADER:
> + cmd = CFFPS_HEADER_CMD;
> + break;
> case CFFPS_DEBUGFS_SN:
> cmd = CFFPS_SN_CMD;
> break;
> + case CFFPS_DEBUGFS_MAX_POWER_OUT:
> + rc = i2c_smbus_read_word_swapped(psu->client,
> + CFFPS_MAX_POWER_OUT_CMD);
> + if (rc < 0)
> + return rc;
> +
> + rc = snprintf(data, I2C_SMBUS_BLOCK_MAX, "%d", rc);
> + goto done;
> case CFFPS_DEBUGFS_CCIN:
> rc = i2c_smbus_read_word_swapped(psu->client, CFFPS_CCIN_CMD);
> if (rc < 0)
> @@ -199,6 +215,14 @@ static ssize_t ibm_cffps_debugfs_op(struct file *file, char __user *buf,
> return -EOPNOTSUPP;
> }
> goto done;
> + case CFFPS_DEBUGFS_ON_OFF_CONFIG:
> + rc = i2c_smbus_read_byte_data(psu->client,
> + PMBUS_ON_OFF_CONFIG);
> + if (rc < 0)
> + return rc;
> +
> + rc = snprintf(data, 3, "%02x", rc);
> + goto done;
> default:
> return -EINVAL;
> }
> @@ -214,9 +238,42 @@ static ssize_t ibm_cffps_debugfs_op(struct file *file, char __user *buf,
> return simple_read_from_buffer(buf, count, ppos, data, rc);
> }
>
> +static ssize_t ibm_cffps_debugfs_write(struct file *file,
> + const char __user *buf, size_t count,
> + loff_t *ppos)
> +{
> + u8 data;
> + ssize_t rc;
> + int *idxp = file->private_data;
> + int idx = *idxp;
> + struct ibm_cffps *psu = to_psu(idxp, idx);
> +
> + switch (idx) {
> + case CFFPS_DEBUGFS_ON_OFF_CONFIG:
> + pmbus_set_page(psu->client, 0);
> +
> + rc = simple_write_to_buffer(&data, 1, ppos, buf, count);
> + if (rc < 0)
> + return rc;
> +
> + rc = i2c_smbus_write_byte_data(psu->client,
> + PMBUS_ON_OFF_CONFIG, data);
> + if (rc)
> + return rc;
> +
> + rc = 1;
> + break;
> + default:
> + return -EINVAL;
> + }
> +
> + return rc;
> +}
> +
> static const struct file_operations ibm_cffps_fops = {
> .llseek = noop_llseek,
> - .read = ibm_cffps_debugfs_op,
> + .read = ibm_cffps_debugfs_read,
> + .write = ibm_cffps_debugfs_write,
> .open = simple_open,
> };
>
> @@ -486,15 +543,24 @@ static int ibm_cffps_probe(struct i2c_client *client,
> debugfs_create_file("part_number", 0444, ibm_cffps_dir,
> &psu->debugfs_entries[CFFPS_DEBUGFS_PN],
> &ibm_cffps_fops);
> + debugfs_create_file("header", 0444, ibm_cffps_dir,
> + &psu->debugfs_entries[CFFPS_DEBUGFS_HEADER],
> + &ibm_cffps_fops);
> debugfs_create_file("serial_number", 0444, ibm_cffps_dir,
> &psu->debugfs_entries[CFFPS_DEBUGFS_SN],
> &ibm_cffps_fops);
> + debugfs_create_file("max_power_out", 0444, ibm_cffps_dir,
> + &psu->debugfs_entries[CFFPS_DEBUGFS_MAX_POWER_OUT],
> + &ibm_cffps_fops);
> debugfs_create_file("ccin", 0444, ibm_cffps_dir,
> &psu->debugfs_entries[CFFPS_DEBUGFS_CCIN],
> &ibm_cffps_fops);
> debugfs_create_file("fw_version", 0444, ibm_cffps_dir,
> &psu->debugfs_entries[CFFPS_DEBUGFS_FW],
> &ibm_cffps_fops);
> + debugfs_create_file("on_off_config", 0644, ibm_cffps_dir,
> + &psu->debugfs_entries[CFFPS_DEBUGFS_ON_OFF_CONFIG],
> + &ibm_cffps_fops);
>
> return 0;
> }
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] hwmon: (pmbus/ibm-cffps) Add the VMON property for version 2
2019-12-19 20:50 ` [PATCH 2/3] hwmon: (pmbus/ibm-cffps) Add the VMON property for version 2 Eddie James
@ 2020-01-04 16:28 ` Guenter Roeck
2020-01-04 16:29 ` Guenter Roeck
0 siblings, 1 reply; 9+ messages in thread
From: Guenter Roeck @ 2020-01-04 16:28 UTC (permalink / raw)
To: Eddie James; +Cc: linux-hwmon, linux-kernel, jdelvare, bjwyman
On Thu, Dec 19, 2019 at 02:50:06PM -0600, Eddie James wrote:
> Version 2 of the PSU supports reading an auxiliary voltage. Use the
> pmbus VMON property and associated virtual register to read it.
>
> Signed-off-by: Eddie James <eajames@linux.ibm.com>
I assume you are ok with v1 reading (or trying to read) this voltage.
Applied to hwmon-next.
> ---
> drivers/hwmon/pmbus/ibm-cffps.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/hwmon/pmbus/ibm-cffps.c b/drivers/hwmon/pmbus/ibm-cffps.c
> index a564be9..b37faf1 100644
> --- a/drivers/hwmon/pmbus/ibm-cffps.c
> +++ b/drivers/hwmon/pmbus/ibm-cffps.c
> @@ -28,6 +28,7 @@
> #define CFFPS1_FW_NUM_BYTES 4
> #define CFFPS2_FW_NUM_WORDS 3
> #define CFFPS_SYS_CONFIG_CMD 0xDA
> +#define CFFPS_12VCS_VOUT_CMD 0xDE
>
> #define CFFPS_INPUT_HISTORY_CMD 0xD6
> #define CFFPS_INPUT_HISTORY_SIZE 100
> @@ -350,6 +351,9 @@ static int ibm_cffps_read_word_data(struct i2c_client *client, int page,
> if (mfr & CFFPS_MFR_PS_KILL)
> rc |= PB_STATUS_OFF;
> break;
> + case PMBUS_VIRT_READ_VMON:
> + rc = pmbus_read_word_data(client, page, CFFPS_12VCS_VOUT_CMD);
> + break;
> default:
> rc = -ENODATA;
> break;
> @@ -453,7 +457,7 @@ static void ibm_cffps_create_led_class(struct ibm_cffps *psu)
> PMBUS_HAVE_TEMP2 | PMBUS_HAVE_TEMP3 |
> PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_STATUS_IOUT |
> PMBUS_HAVE_STATUS_INPUT | PMBUS_HAVE_STATUS_TEMP |
> - PMBUS_HAVE_STATUS_FAN12,
> + PMBUS_HAVE_STATUS_FAN12 | PMBUS_HAVE_VMON,
> .func[1] = PMBUS_HAVE_VOUT | PMBUS_HAVE_IOUT |
> PMBUS_HAVE_TEMP | PMBUS_HAVE_TEMP2 | PMBUS_HAVE_TEMP3 |
> PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_STATUS_IOUT,
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] hwmon: (pmbus/ibm-cffps) Add the VMON property for version 2
2020-01-04 16:28 ` Guenter Roeck
@ 2020-01-04 16:29 ` Guenter Roeck
0 siblings, 0 replies; 9+ messages in thread
From: Guenter Roeck @ 2020-01-04 16:29 UTC (permalink / raw)
To: Eddie James; +Cc: linux-hwmon, linux-kernel, jdelvare, bjwyman
On Sat, Jan 04, 2020 at 08:28:10AM -0800, Guenter Roeck wrote:
> On Thu, Dec 19, 2019 at 02:50:06PM -0600, Eddie James wrote:
> > Version 2 of the PSU supports reading an auxiliary voltage. Use the
> > pmbus VMON property and associated virtual register to read it.
> >
> > Signed-off-by: Eddie James <eajames@linux.ibm.com>
>
> I assume you are ok with v1 reading (or trying to read) this voltage.
>
Ah, never mind, you don't. Sorry for the noise.
> Applied to hwmon-next.
>
> > ---
> > drivers/hwmon/pmbus/ibm-cffps.c | 6 +++++-
> > 1 file changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/hwmon/pmbus/ibm-cffps.c b/drivers/hwmon/pmbus/ibm-cffps.c
> > index a564be9..b37faf1 100644
> > --- a/drivers/hwmon/pmbus/ibm-cffps.c
> > +++ b/drivers/hwmon/pmbus/ibm-cffps.c
> > @@ -28,6 +28,7 @@
> > #define CFFPS1_FW_NUM_BYTES 4
> > #define CFFPS2_FW_NUM_WORDS 3
> > #define CFFPS_SYS_CONFIG_CMD 0xDA
> > +#define CFFPS_12VCS_VOUT_CMD 0xDE
> >
> > #define CFFPS_INPUT_HISTORY_CMD 0xD6
> > #define CFFPS_INPUT_HISTORY_SIZE 100
> > @@ -350,6 +351,9 @@ static int ibm_cffps_read_word_data(struct i2c_client *client, int page,
> > if (mfr & CFFPS_MFR_PS_KILL)
> > rc |= PB_STATUS_OFF;
> > break;
> > + case PMBUS_VIRT_READ_VMON:
> > + rc = pmbus_read_word_data(client, page, CFFPS_12VCS_VOUT_CMD);
> > + break;
> > default:
> > rc = -ENODATA;
> > break;
> > @@ -453,7 +457,7 @@ static void ibm_cffps_create_led_class(struct ibm_cffps *psu)
> > PMBUS_HAVE_TEMP2 | PMBUS_HAVE_TEMP3 |
> > PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_STATUS_IOUT |
> > PMBUS_HAVE_STATUS_INPUT | PMBUS_HAVE_STATUS_TEMP |
> > - PMBUS_HAVE_STATUS_FAN12,
> > + PMBUS_HAVE_STATUS_FAN12 | PMBUS_HAVE_VMON,
> > .func[1] = PMBUS_HAVE_VOUT | PMBUS_HAVE_IOUT |
> > PMBUS_HAVE_TEMP | PMBUS_HAVE_TEMP2 | PMBUS_HAVE_TEMP3 |
> > PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_STATUS_IOUT,
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/3] hwmon: (pmbus/ibm-cffps) Fix the LED behavior when turned off
2019-12-19 20:50 ` [PATCH 3/3] hwmon: (pmbus/ibm-cffps) Fix the LED behavior when turned off Eddie James
@ 2020-01-04 16:30 ` Guenter Roeck
0 siblings, 0 replies; 9+ messages in thread
From: Guenter Roeck @ 2020-01-04 16:30 UTC (permalink / raw)
To: Eddie James; +Cc: linux-hwmon, linux-kernel, jdelvare, bjwyman
On Thu, Dec 19, 2019 at 02:50:07PM -0600, Eddie James wrote:
> The driver should remain in control of the LED on the PSU, even while
> off, not the PSU firmware as previously indicated.
>
> Signed-off-by: Eddie James <eajames@linux.ibm.com>
Applied to hwmon-next.
Thanks,
Guenter
> ---
> drivers/hwmon/pmbus/ibm-cffps.c | 9 ++++-----
> 1 file changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/hwmon/pmbus/ibm-cffps.c b/drivers/hwmon/pmbus/ibm-cffps.c
> index b37faf1..1c91ee1 100644
> --- a/drivers/hwmon/pmbus/ibm-cffps.c
> +++ b/drivers/hwmon/pmbus/ibm-cffps.c
> @@ -47,13 +47,9 @@
> #define CFFPS_MFR_VAUX_FAULT BIT(6)
> #define CFFPS_MFR_CURRENT_SHARE_WARNING BIT(7)
>
> -/*
> - * LED off state actually relinquishes LED control to PSU firmware, so it can
> - * turn on the LED for faults.
> - */
> -#define CFFPS_LED_OFF 0
> #define CFFPS_LED_BLINK BIT(0)
> #define CFFPS_LED_ON BIT(1)
> +#define CFFPS_LED_OFF BIT(2)
> #define CFFPS_BLINK_RATE_MS 250
>
> enum {
> @@ -436,6 +432,9 @@ static void ibm_cffps_create_led_class(struct ibm_cffps *psu)
> rc = devm_led_classdev_register(dev, &psu->led);
> if (rc)
> dev_warn(dev, "failed to register led class: %d\n", rc);
> + else
> + i2c_smbus_write_byte_data(client, CFFPS_SYS_CONFIG_CMD,
> + CFFPS_LED_OFF);
> }
>
> static struct pmbus_driver_info ibm_cffps_info[] = {
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/3] hwmon: (pmbus/ibm-cffps) Add new manufacturer debugfs entries
2020-01-04 16:26 ` Guenter Roeck
@ 2020-01-06 15:32 ` Eddie James
0 siblings, 0 replies; 9+ messages in thread
From: Eddie James @ 2020-01-06 15:32 UTC (permalink / raw)
To: Guenter Roeck; +Cc: linux-hwmon, linux-kernel, jdelvare, bjwyman
On 1/4/20 10:26 AM, Guenter Roeck wrote:
> On Thu, Dec 19, 2019 at 02:50:05PM -0600, Eddie James wrote:
>> Add support for a number of manufacturer-specific registers in the
>> debugfs entries, as well as support to read and write the
>> PMBUS_ON_OFF_CONFIG register through debugfs.
>>
>> Signed-off-by: Eddie James <eajames@linux.ibm.com>
> I assume you know what you are doing, letting the user write anything
> into on_off_config. Applied to -next.
Thanks for merging the series! Yep, that's the requirement I was given...
Cheers,
Eddie
>
> Guenter
>
>> ---
>> drivers/hwmon/pmbus/ibm-cffps.c | 74 ++++++++++++++++++++++++++++++++++++++---
>> 1 file changed, 70 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/hwmon/pmbus/ibm-cffps.c b/drivers/hwmon/pmbus/ibm-cffps.c
>> index d359b76..a564be9 100644
>> --- a/drivers/hwmon/pmbus/ibm-cffps.c
>> +++ b/drivers/hwmon/pmbus/ibm-cffps.c
>> @@ -20,7 +20,9 @@
>>
>> #define CFFPS_FRU_CMD 0x9A
>> #define CFFPS_PN_CMD 0x9B
>> +#define CFFPS_HEADER_CMD 0x9C
>> #define CFFPS_SN_CMD 0x9E
>> +#define CFFPS_MAX_POWER_OUT_CMD 0xA7
>> #define CFFPS_CCIN_CMD 0xBD
>> #define CFFPS_FW_CMD 0xFA
>> #define CFFPS1_FW_NUM_BYTES 4
>> @@ -57,9 +59,12 @@ enum {
>> CFFPS_DEBUGFS_INPUT_HISTORY = 0,
>> CFFPS_DEBUGFS_FRU,
>> CFFPS_DEBUGFS_PN,
>> + CFFPS_DEBUGFS_HEADER,
>> CFFPS_DEBUGFS_SN,
>> + CFFPS_DEBUGFS_MAX_POWER_OUT,
>> CFFPS_DEBUGFS_CCIN,
>> CFFPS_DEBUGFS_FW,
>> + CFFPS_DEBUGFS_ON_OFF_CONFIG,
>> CFFPS_DEBUGFS_NUM_ENTRIES
>> };
>>
>> @@ -136,15 +141,15 @@ static ssize_t ibm_cffps_read_input_history(struct ibm_cffps *psu,
>> psu->input_history.byte_count);
>> }
>>
>> -static ssize_t ibm_cffps_debugfs_op(struct file *file, char __user *buf,
>> - size_t count, loff_t *ppos)
>> +static ssize_t ibm_cffps_debugfs_read(struct file *file, char __user *buf,
>> + size_t count, loff_t *ppos)
>> {
>> u8 cmd;
>> int i, rc;
>> int *idxp = file->private_data;
>> int idx = *idxp;
>> struct ibm_cffps *psu = to_psu(idxp, idx);
>> - char data[I2C_SMBUS_BLOCK_MAX] = { 0 };
>> + char data[I2C_SMBUS_BLOCK_MAX + 2] = { 0 };
>>
>> pmbus_set_page(psu->client, 0);
>>
>> @@ -157,9 +162,20 @@ static ssize_t ibm_cffps_debugfs_op(struct file *file, char __user *buf,
>> case CFFPS_DEBUGFS_PN:
>> cmd = CFFPS_PN_CMD;
>> break;
>> + case CFFPS_DEBUGFS_HEADER:
>> + cmd = CFFPS_HEADER_CMD;
>> + break;
>> case CFFPS_DEBUGFS_SN:
>> cmd = CFFPS_SN_CMD;
>> break;
>> + case CFFPS_DEBUGFS_MAX_POWER_OUT:
>> + rc = i2c_smbus_read_word_swapped(psu->client,
>> + CFFPS_MAX_POWER_OUT_CMD);
>> + if (rc < 0)
>> + return rc;
>> +
>> + rc = snprintf(data, I2C_SMBUS_BLOCK_MAX, "%d", rc);
>> + goto done;
>> case CFFPS_DEBUGFS_CCIN:
>> rc = i2c_smbus_read_word_swapped(psu->client, CFFPS_CCIN_CMD);
>> if (rc < 0)
>> @@ -199,6 +215,14 @@ static ssize_t ibm_cffps_debugfs_op(struct file *file, char __user *buf,
>> return -EOPNOTSUPP;
>> }
>> goto done;
>> + case CFFPS_DEBUGFS_ON_OFF_CONFIG:
>> + rc = i2c_smbus_read_byte_data(psu->client,
>> + PMBUS_ON_OFF_CONFIG);
>> + if (rc < 0)
>> + return rc;
>> +
>> + rc = snprintf(data, 3, "%02x", rc);
>> + goto done;
>> default:
>> return -EINVAL;
>> }
>> @@ -214,9 +238,42 @@ static ssize_t ibm_cffps_debugfs_op(struct file *file, char __user *buf,
>> return simple_read_from_buffer(buf, count, ppos, data, rc);
>> }
>>
>> +static ssize_t ibm_cffps_debugfs_write(struct file *file,
>> + const char __user *buf, size_t count,
>> + loff_t *ppos)
>> +{
>> + u8 data;
>> + ssize_t rc;
>> + int *idxp = file->private_data;
>> + int idx = *idxp;
>> + struct ibm_cffps *psu = to_psu(idxp, idx);
>> +
>> + switch (idx) {
>> + case CFFPS_DEBUGFS_ON_OFF_CONFIG:
>> + pmbus_set_page(psu->client, 0);
>> +
>> + rc = simple_write_to_buffer(&data, 1, ppos, buf, count);
>> + if (rc < 0)
>> + return rc;
>> +
>> + rc = i2c_smbus_write_byte_data(psu->client,
>> + PMBUS_ON_OFF_CONFIG, data);
>> + if (rc)
>> + return rc;
>> +
>> + rc = 1;
>> + break;
>> + default:
>> + return -EINVAL;
>> + }
>> +
>> + return rc;
>> +}
>> +
>> static const struct file_operations ibm_cffps_fops = {
>> .llseek = noop_llseek,
>> - .read = ibm_cffps_debugfs_op,
>> + .read = ibm_cffps_debugfs_read,
>> + .write = ibm_cffps_debugfs_write,
>> .open = simple_open,
>> };
>>
>> @@ -486,15 +543,24 @@ static int ibm_cffps_probe(struct i2c_client *client,
>> debugfs_create_file("part_number", 0444, ibm_cffps_dir,
>> &psu->debugfs_entries[CFFPS_DEBUGFS_PN],
>> &ibm_cffps_fops);
>> + debugfs_create_file("header", 0444, ibm_cffps_dir,
>> + &psu->debugfs_entries[CFFPS_DEBUGFS_HEADER],
>> + &ibm_cffps_fops);
>> debugfs_create_file("serial_number", 0444, ibm_cffps_dir,
>> &psu->debugfs_entries[CFFPS_DEBUGFS_SN],
>> &ibm_cffps_fops);
>> + debugfs_create_file("max_power_out", 0444, ibm_cffps_dir,
>> + &psu->debugfs_entries[CFFPS_DEBUGFS_MAX_POWER_OUT],
>> + &ibm_cffps_fops);
>> debugfs_create_file("ccin", 0444, ibm_cffps_dir,
>> &psu->debugfs_entries[CFFPS_DEBUGFS_CCIN],
>> &ibm_cffps_fops);
>> debugfs_create_file("fw_version", 0444, ibm_cffps_dir,
>> &psu->debugfs_entries[CFFPS_DEBUGFS_FW],
>> &ibm_cffps_fops);
>> + debugfs_create_file("on_off_config", 0644, ibm_cffps_dir,
>> + &psu->debugfs_entries[CFFPS_DEBUGFS_ON_OFF_CONFIG],
>> + &ibm_cffps_fops);
>>
>> return 0;
>> }
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2020-01-06 15:33 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-19 20:50 [PATCH 0/3] hwmon: (pmbus/ibm-cffps) New debugfs entries, VMON, and LED fix Eddie James
2019-12-19 20:50 ` [PATCH 1/3] hwmon: (pmbus/ibm-cffps) Add new manufacturer debugfs entries Eddie James
2020-01-04 16:26 ` Guenter Roeck
2020-01-06 15:32 ` Eddie James
2019-12-19 20:50 ` [PATCH 2/3] hwmon: (pmbus/ibm-cffps) Add the VMON property for version 2 Eddie James
2020-01-04 16:28 ` Guenter Roeck
2020-01-04 16:29 ` Guenter Roeck
2019-12-19 20:50 ` [PATCH 3/3] hwmon: (pmbus/ibm-cffps) Fix the LED behavior when turned off Eddie James
2020-01-04 16:30 ` Guenter Roeck
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).