* [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
* 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 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
* [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
* 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
* [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 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
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).