On 9/9/20 6:24 AM, Andrew Jeffery wrote: > Enable runtime debug control of whether the PEC byte is exchanged with > the PMBus device. > > Some manufacturers have asked for the PEC to be disabled as part of > debugging driver communication issues with devices. > > Signed-off-by: Andrew Jeffery <andrew@xxxxxxxx> > --- > drivers/hwmon/pmbus/pmbus_core.c | 39 ++++++++++++++++++++++++++++++++ > 1 file changed, 39 insertions(+) > > diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c > index 44535add3a4a..51c8502b35e9 100644 > --- a/drivers/hwmon/pmbus/pmbus_core.c > +++ b/drivers/hwmon/pmbus/pmbus_core.c > @@ -2346,6 +2346,42 @@ static int pmbus_debugfs_get_status(void *data, u64 *val) > DEFINE_DEBUGFS_ATTRIBUTE(pmbus_debugfs_ops_status, pmbus_debugfs_get_status, > NULL, "0x%04llx\n"); > > +static int pmbus_debugfs_get_pec(void *data, u64 *val) > +{ > + struct i2c_client *client = data; > + > + *val = !!(client->flags & I2C_CLIENT_PEC); > + > + return 0; > +} > + > +static int pmbus_debugfs_set_pec(void *data, u64 val) > +{ > + int rc; > + struct i2c_client *client = data; > + > + if (!val) { > + client->flags &= ~I2C_CLIENT_PEC; > + return 0; > + } > + > + if (val != 1) > + return -EINVAL; > + > + rc = i2c_smbus_read_byte_data(client, PMBUS_CAPABILITY); > + if (rc < 0) > + return rc; > + > + if (!(rc & PB_CAPABILITY_ERROR_CHECK)) > + return -ENOTSUPP; WARNING: ENOTSUPP is not a SUSV4 error code, prefer EOPNOTSUPP > + > + client->flags |= I2C_CLIENT_PEC; > + > + return 0; > +} > +DEFINE_DEBUGFS_ATTRIBUTE(pmbus_debugfs_ops_pec, pmbus_debugfs_get_pec, > + pmbus_debugfs_set_pec, "0x%1llu\n"); ERROR: Prefixing 0x with decimal output is defective (since the displayed value is a boolean, it is also quite useless). > + > static int pmbus_init_debugfs(struct i2c_client *client, > struct pmbus_data *data) > { > @@ -2374,6 +2410,9 @@ static int pmbus_init_debugfs(struct i2c_client *client, > if (!entries) > return -ENOMEM; > > + debugfs_create_file("pec", 0664, data->debugfs, client, > + &pmbus_debugfs_ops_pec); > + > for (i = 0; i < data->info->pages; ++i) { > /* Check accessibility of status register if it's not page 0 */ > if (!i || pmbus_check_status_register(client, i)) { >