Message ID | 20230921130818.21247-4-jonathanh@nvidia.com |
---|---|
State | Changes Requested |
Headers | show |
Series | hwmon: ina3221: Add selective summation support | expand |
Hi Jon, kernel test robot noticed the following build warnings: [auto build test WARNING on groeck-staging/hwmon-next] [also build test WARNING on robh/for-next linus/master v6.6-rc2 next-20230921] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Jon-Hunter/dt-bindings-hwmon-ina3221-Add-ti-summation-disable/20230922-011119 base: https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-next patch link: https://lore.kernel.org/r/20230921130818.21247-4-jonathanh%40nvidia.com patch subject: [PATCH V3 3/4] hwmon: ina3221: Add support for channel summation disable config: m68k-allyesconfig (https://download.01.org/0day-ci/archive/20230922/202309220454.kCi2xD48-lkp@intel.com/config) compiler: m68k-linux-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230922/202309220454.kCi2xD48-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202309220454.kCi2xD48-lkp@intel.com/ All warnings (new ones prefixed by >>): >> drivers/hwmon/ina3221.c:109: warning: Function parameter or member 'summation_disable' not described in 'ina3221_input' >> drivers/hwmon/ina3221.c:134: warning: Function parameter or member 'debugfs' not described in 'ina3221_data' >> drivers/hwmon/ina3221.c:134: warning: Function parameter or member 'summation_channel_control' not described in 'ina3221_data' vim +109 drivers/hwmon/ina3221.c 7cb6dcff1956ec Andrew F. Davis 2016-06-10 97 a9e9dd9c6de5d8 Nicolin Chen 2018-10-01 98 /** a9e9dd9c6de5d8 Nicolin Chen 2018-10-01 99 * struct ina3221_input - channel input source specific information a9e9dd9c6de5d8 Nicolin Chen 2018-10-01 100 * @label: label of channel input source a9e9dd9c6de5d8 Nicolin Chen 2018-10-01 101 * @shunt_resistor: shunt resistor value of channel input source a9e9dd9c6de5d8 Nicolin Chen 2018-10-01 102 * @disconnected: connection status of channel input source a9e9dd9c6de5d8 Nicolin Chen 2018-10-01 103 */ a9e9dd9c6de5d8 Nicolin Chen 2018-10-01 104 struct ina3221_input { a9e9dd9c6de5d8 Nicolin Chen 2018-10-01 105 const char *label; a9e9dd9c6de5d8 Nicolin Chen 2018-10-01 106 int shunt_resistor; a9e9dd9c6de5d8 Nicolin Chen 2018-10-01 107 bool disconnected; ac0a832fd3617c Ninad Malwade 2023-09-21 108 bool summation_disable; a9e9dd9c6de5d8 Nicolin Chen 2018-10-01 @109 }; a9e9dd9c6de5d8 Nicolin Chen 2018-10-01 110 7cb6dcff1956ec Andrew F. Davis 2016-06-10 111 /** 7cb6dcff1956ec Andrew F. Davis 2016-06-10 112 * struct ina3221_data - device specific information 323aeb0eb5d9a6 Nicolin Chen 2018-11-05 113 * @pm_dev: Device pointer for pm runtime 7cb6dcff1956ec Andrew F. Davis 2016-06-10 114 * @regmap: Register map of the device 7cb6dcff1956ec Andrew F. Davis 2016-06-10 115 * @fields: Register fields of the device a9e9dd9c6de5d8 Nicolin Chen 2018-10-01 116 * @inputs: Array of channel input source specific structures 87625b24986bc2 Nicolin Chen 2018-11-05 117 * @lock: mutex lock to serialize sysfs attribute accesses 59d608e152e582 Nicolin Chen 2018-09-29 118 * @reg_config: Register value of INA3221_CONFIG 2057bdfb7184e9 Nicolin Chen 2019-10-16 119 * @summation_shunt_resistor: equivalent shunt resistor value for summation 43dece162de047 Nicolin Chen 2019-01-17 120 * @single_shot: running in single-shot operating mode 7cb6dcff1956ec Andrew F. Davis 2016-06-10 121 */ 7cb6dcff1956ec Andrew F. Davis 2016-06-10 122 struct ina3221_data { 323aeb0eb5d9a6 Nicolin Chen 2018-11-05 123 struct device *pm_dev; 7cb6dcff1956ec Andrew F. Davis 2016-06-10 124 struct regmap *regmap; 7cb6dcff1956ec Andrew F. Davis 2016-06-10 125 struct regmap_field *fields[F_MAX_FIELDS]; a9e9dd9c6de5d8 Nicolin Chen 2018-10-01 126 struct ina3221_input inputs[INA3221_NUM_CHANNELS]; 87625b24986bc2 Nicolin Chen 2018-11-05 127 struct mutex lock; ac0a832fd3617c Ninad Malwade 2023-09-21 128 struct dentry *debugfs; 59d608e152e582 Nicolin Chen 2018-09-29 129 u32 reg_config; 2057bdfb7184e9 Nicolin Chen 2019-10-16 130 int summation_shunt_resistor; ac0a832fd3617c Ninad Malwade 2023-09-21 131 u32 summation_channel_control; 43dece162de047 Nicolin Chen 2019-01-17 132 43dece162de047 Nicolin Chen 2019-01-17 133 bool single_shot; 7cb6dcff1956ec Andrew F. Davis 2016-06-10 @134 }; 7cb6dcff1956ec Andrew F. Davis 2016-06-10 135
diff --git a/drivers/hwmon/ina3221.c b/drivers/hwmon/ina3221.c index 5ab944056ec0..359b758e9f03 100644 --- a/drivers/hwmon/ina3221.c +++ b/drivers/hwmon/ina3221.c @@ -6,6 +6,7 @@ * Andrew F. Davis <afd@ti.com> */ +#include <linux/debugfs.h> #include <linux/hwmon.h> #include <linux/hwmon-sysfs.h> #include <linux/i2c.h> @@ -104,6 +105,7 @@ struct ina3221_input { const char *label; int shunt_resistor; bool disconnected; + bool summation_disable; }; /** @@ -123,8 +125,10 @@ struct ina3221_data { struct regmap_field *fields[F_MAX_FIELDS]; struct ina3221_input inputs[INA3221_NUM_CHANNELS]; struct mutex lock; + struct dentry *debugfs; u32 reg_config; int summation_shunt_resistor; + u32 summation_channel_control; bool single_shot; }; @@ -154,7 +158,8 @@ static inline int ina3221_summation_shunt_resistor(struct ina3221_data *ina) int i, shunt_resistor = 0; for (i = 0; i < INA3221_NUM_CHANNELS; i++) { - if (input[i].disconnected || !input[i].shunt_resistor) + if (input[i].disconnected || !input[i].shunt_resistor || + input[i].summation_disable) continue; if (!shunt_resistor) { /* Found the reference shunt resistor value */ @@ -786,6 +791,9 @@ static int ina3221_probe_child_from_dt(struct device *dev, /* Save the connected input label if available */ of_property_read_string(child, "label", &input->label); + /* summation channel control */ + input->summation_disable = of_property_read_bool(child, "ti,summation-disable"); + /* Overwrite default shunt resistor value optionally */ if (!of_property_read_u32(child, "shunt-resistor-micro-ohms", &val)) { if (val < 1 || val > INT_MAX) { @@ -827,6 +835,7 @@ static int ina3221_probe(struct i2c_client *client) struct device *dev = &client->dev; struct ina3221_data *ina; struct device *hwmon_dev; + char name[32]; int i, ret; ina = devm_kzalloc(dev, sizeof(*ina), GFP_KERNEL); @@ -873,6 +882,10 @@ static int ina3221_probe(struct i2c_client *client) /* Initialize summation_shunt_resistor for summation channel control */ ina->summation_shunt_resistor = ina3221_summation_shunt_resistor(ina); + for (i = 0; i < INA3221_NUM_CHANNELS; i++) { + if (!ina->inputs[i].summation_disable) + ina->summation_channel_control |= BIT(14 - i); + } ina->pm_dev = dev; mutex_init(&ina->lock); @@ -900,6 +913,15 @@ static int ina3221_probe(struct i2c_client *client) goto fail; } + scnprintf(name, sizeof(name), "%s-%s", INA3221_DRIVER_NAME, dev_name(dev)); + ina->debugfs = debugfs_create_dir(name, NULL); + + for (i = 0; i < INA3221_NUM_CHANNELS; i++) { + scnprintf(name, sizeof(name), "in%d_summation_disable", i); + debugfs_create_bool(name, 0400, ina->debugfs, + &ina->inputs[i].summation_disable); + } + return 0; fail: @@ -918,6 +940,8 @@ static void ina3221_remove(struct i2c_client *client) struct ina3221_data *ina = dev_get_drvdata(&client->dev); int i; + debugfs_remove_recursive(ina->debugfs); + pm_runtime_disable(ina->pm_dev); pm_runtime_set_suspended(ina->pm_dev); @@ -978,13 +1002,13 @@ static int ina3221_resume(struct device *dev) /* Initialize summation channel control */ if (ina->summation_shunt_resistor) { /* - * Take all three channels into summation by default + * Sum only channels that are not disabled for summation. * Shunt measurements of disconnected channels should * be 0, so it does not matter for summation. */ ret = regmap_update_bits(ina->regmap, INA3221_MASK_ENABLE, INA3221_MASK_ENABLE_SCC_MASK, - INA3221_MASK_ENABLE_SCC_MASK); + ina->summation_channel_control); if (ret) { dev_err(dev, "Unable to control summation channel\n"); return ret;