diff for duplicates of <c5d8771d-3274-6982-2f9f-903fd5310488@roeck-us.net>
diff --git a/a/1.txt b/N1/1.txt
index eb007b8..d430f1c 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,124 +1,111 @@
-
On 1/4/19 4:49 PM, Nicolin Chen wrote:
-
-By default, ina3221, as a hardware monitor, continuously measures
-the inputs and generates corresponding data. However, for battery
-powered devices, this mode might be power consuming.
-
-The DT binding doc is updated with a new boolean type property to
-allow changing the default operating mode from consuming mode to
-single-shot mode, which will measure input on demand and then shut
-down to save power.
-
-So this patch implements the DT property accordingly.
-
-Signed-off-by: Nicolin Chen <nicoleots...@gmail.com>
----
- drivers/hwmon/ina3221.c | 28 ++++++++++++++++++++++++++++
- 1 file changed, 28 insertions(+)
-
-diff --git a/drivers/hwmon/ina3221.c b/drivers/hwmon/ina3221.c
-index e90ccac8bebb..152735659e19 100644
---- a/drivers/hwmon/ina3221.c
-+++ b/drivers/hwmon/ina3221.c
-@@ -91,6 +91,12 @@ enum ina3221_channels {
- INA3221_NUM_CHANNELS
- };
-
-+enum ina3221_modes {
-
-+ INA3221_MODE_SINGLE_SHOT,
-+ INA3221_MODE_CONTINUOUS,
-+ INA3221_NUM_MODES,
-
+> By default, ina3221, as a hardware monitor, continuously measures
+> the inputs and generates corresponding data. However, for battery
+> powered devices, this mode might be power consuming.
+>
+> The DT binding doc is updated with a new boolean type property to
+> allow changing the default operating mode from consuming mode to
+> single-shot mode, which will measure input on demand and then shut
+> down to save power.
+>
+> So this patch implements the DT property accordingly.
+>
+> Signed-off-by: Nicolin Chen <nicoleotsuka@gmail.com>
+> ---
+> drivers/hwmon/ina3221.c | 28 ++++++++++++++++++++++++++++
+> 1 file changed, 28 insertions(+)
+>
+> diff --git a/drivers/hwmon/ina3221.c b/drivers/hwmon/ina3221.c
+> index e90ccac8bebb..152735659e19 100644
+> --- a/drivers/hwmon/ina3221.c
+> +++ b/drivers/hwmon/ina3221.c
+> @@ -91,6 +91,12 @@ enum ina3221_channels {
+> INA3221_NUM_CHANNELS
+> };
+>
+> +enum ina3221_modes {
+> + INA3221_MODE_SINGLE_SHOT,
+> + INA3221_MODE_CONTINUOUS,
+> + INA3221_NUM_MODES,
Is NUM_MODES used anywhere ? Please drop unless there is a reason to keep it.
Guenter
-
-+};
-+
- /**
- * struct ina3221_input - channel input source specific information
- * @label: label of channel input source
-@@ -111,6 +117,7 @@ struct ina3221_input {
- * @inputs: Array of channel input source specific structures
- * @lock: mutex lock to serialize sysfs attribute accesses
- * @reg_config: Register value of INA3221_CONFIG
-+ * @mode: Operating mode -- continuous or single-shot
- */
- struct ina3221_data {
- struct device *pm_dev;
-@@ -119,6 +126,7 @@ struct ina3221_data {
- struct ina3221_input inputs[INA3221_NUM_CHANNELS];
- struct mutex lock;
- u32 reg_config;
-+ enum ina3221_modes mode;
- };
-
- static inline bool ina3221_is_enabled(struct ina3221_data *ina, int channel)
-
-@@ -188,6 +196,11 @@ static int ina3221_read_in(struct device *dev, u32 attr,
-int channel, long *val)
- if (!ina3221_is_enabled(ina, channel))
- return -ENODATA;
-
-+ /* Write CONFIG register to trigger a single-shot measurement */
-
-+ if (ina->mode == INA3221_MODE_SINGLE_SHOT)
-+ regmap_write(ina->regmap, INA3221_CONFIG,
-+ ina->reg_config);
-+
- ret = ina3221_wait_for_data(ina);
- if (ret)
- return ret;
-@@ -232,6 +245,11 @@ static int ina3221_read_curr(struct device *dev, u32 attr,
- if (!ina3221_is_enabled(ina, channel))
- return -ENODATA;
-
-+ /* Write CONFIG register to trigger a single-shot measurement */
-
-+ if (ina->mode == INA3221_MODE_SINGLE_SHOT)
-+ regmap_write(ina->regmap, INA3221_CONFIG,
-+ ina->reg_config);
-+
- ret = ina3221_wait_for_data(ina);
- if (ret)
- return ret;
-@@ -617,6 +635,9 @@ static int ina3221_probe_from_dt(struct device *dev, struct
-ina3221_data *ina)
- if (!np)
- return 0;
-
-+ if (of_property_read_bool(np, "ti,single-shot"))
-
-+ ina->mode = INA3221_MODE_SINGLE_SHOT;
-+
- for_each_child_of_node(np, child) {
- ret = ina3221_probe_child_from_dt(dev, child, ina);
- if (ret)
-@@ -654,6 +675,9 @@ static int ina3221_probe(struct i2c_client *client,
- }
- }
-
-+ /* Hardware default uses the continuous mode */
-
-+ ina->mode = INA3221_MODE_CONTINUOUS;
-+
- for (i = 0; i < INA3221_NUM_CHANNELS; i++)
- ina->inputs[i].shunt_resistor = INA3221_RSHUNT_DEFAULT;
-
-@@ -666,6 +690,10 @@ static int ina3221_probe(struct i2c_client *client,
-
- /* The driver will be reset, so use reset value */
- ina->reg_config = INA3221_CONFIG_DEFAULT;
-
-+ /* Clear continuous bit to use single-shot mode */
-
-+ if (ina->mode == INA3221_MODE_SINGLE_SHOT)
-+ ina->reg_config &= ~INA3221_CONFIG_MODE_CONTINUOUS;
-+
- /* Disable channels if their inputs are disconnected */
- for (i = 0; i < INA3221_NUM_CHANNELS; i++) {
- if (ina->inputs[i].disconnected)
\ No newline at end of file
+> +};
+> +
+> /**
+> * struct ina3221_input - channel input source specific information
+> * @label: label of channel input source
+> @@ -111,6 +117,7 @@ struct ina3221_input {
+> * @inputs: Array of channel input source specific structures
+> * @lock: mutex lock to serialize sysfs attribute accesses
+> * @reg_config: Register value of INA3221_CONFIG
+> + * @mode: Operating mode -- continuous or single-shot
+> */
+> struct ina3221_data {
+> struct device *pm_dev;
+> @@ -119,6 +126,7 @@ struct ina3221_data {
+> struct ina3221_input inputs[INA3221_NUM_CHANNELS];
+> struct mutex lock;
+> u32 reg_config;
+> + enum ina3221_modes mode;
+> };
+>
+> static inline bool ina3221_is_enabled(struct ina3221_data *ina, int channel)
+> @@ -188,6 +196,11 @@ static int ina3221_read_in(struct device *dev, u32 attr, int channel, long *val)
+> if (!ina3221_is_enabled(ina, channel))
+> return -ENODATA;
+>
+> + /* Write CONFIG register to trigger a single-shot measurement */
+> + if (ina->mode == INA3221_MODE_SINGLE_SHOT)
+> + regmap_write(ina->regmap, INA3221_CONFIG,
+> + ina->reg_config);
+> +
+> ret = ina3221_wait_for_data(ina);
+> if (ret)
+> return ret;
+> @@ -232,6 +245,11 @@ static int ina3221_read_curr(struct device *dev, u32 attr,
+> if (!ina3221_is_enabled(ina, channel))
+> return -ENODATA;
+>
+> + /* Write CONFIG register to trigger a single-shot measurement */
+> + if (ina->mode == INA3221_MODE_SINGLE_SHOT)
+> + regmap_write(ina->regmap, INA3221_CONFIG,
+> + ina->reg_config);
+> +
+> ret = ina3221_wait_for_data(ina);
+> if (ret)
+> return ret;
+> @@ -617,6 +635,9 @@ static int ina3221_probe_from_dt(struct device *dev, struct ina3221_data *ina)
+> if (!np)
+> return 0;
+>
+> + if (of_property_read_bool(np, "ti,single-shot"))
+> + ina->mode = INA3221_MODE_SINGLE_SHOT;
+> +
+> for_each_child_of_node(np, child) {
+> ret = ina3221_probe_child_from_dt(dev, child, ina);
+> if (ret)
+> @@ -654,6 +675,9 @@ static int ina3221_probe(struct i2c_client *client,
+> }
+> }
+>
+> + /* Hardware default uses the continuous mode */
+> + ina->mode = INA3221_MODE_CONTINUOUS;
+> +
+> for (i = 0; i < INA3221_NUM_CHANNELS; i++)
+> ina->inputs[i].shunt_resistor = INA3221_RSHUNT_DEFAULT;
+>
+> @@ -666,6 +690,10 @@ static int ina3221_probe(struct i2c_client *client,
+> /* The driver will be reset, so use reset value */
+> ina->reg_config = INA3221_CONFIG_DEFAULT;
+>
+> + /* Clear continuous bit to use single-shot mode */
+> + if (ina->mode == INA3221_MODE_SINGLE_SHOT)
+> + ina->reg_config &= ~INA3221_CONFIG_MODE_CONTINUOUS;
+> +
+> /* Disable channels if their inputs are disconnected */
+> for (i = 0; i < INA3221_NUM_CHANNELS; i++) {
+> if (ina->inputs[i].disconnected)
+>
\ No newline at end of file
diff --git a/a/content_digest b/N1/content_digest
index 0436780..493b635 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,6 +1,9 @@
[
"ref\00020190105004904.17947-1-nicoleotsuka\@gmail.com\0"
]
+[
+ "ref\00020190105004904.17947-3-nicoleotsuka\@gmail.com\0"
+]
[
"From\0Guenter Roeck <linux\@roeck-us.net>\0"
]
@@ -8,10 +11,18 @@
"Subject\0Re: [PATCH 2/2] hwmon: (ina3221) Implement ti,single-shot DT property\0"
]
[
- "Date\0Fri, 04 Jan 2019 18:38:32 -0800\0"
+ "Date\0Fri, 4 Jan 2019 18:37:55 -0800\0"
]
[
- "To\0linux-hwmon\@vger.kernel.org\0"
+ "To\0Nicolin Chen <nicoleotsuka\@gmail.com>",
+ " jdelvare\@suse.com",
+ " robh+dt\@kernel.org",
+ " mark.rutland\@arm.com\0"
+]
+[
+ "Cc\0linux-hwmon\@vger.kernel.org",
+ " devicetree\@vger.kernel.org",
+ " linux-kernel\@vger.kernel.org\0"
]
[
"\0000:1\0"
@@ -20,130 +31,117 @@
"b\0"
]
[
- "\n",
"On 1/4/19 4:49 PM, Nicolin Chen wrote:\n",
- "\n",
- "By default, ina3221, as a hardware monitor, continuously measures\n",
- "the inputs and generates corresponding data. However, for battery\n",
- "powered devices, this mode might be power consuming.\n",
- "\n",
- "The DT binding doc is updated with a new boolean type property to\n",
- "allow changing the default operating mode from consuming mode to\n",
- "single-shot mode, which will measure input on demand and then shut\n",
- "down to save power.\n",
- "\n",
- "So this patch implements the DT property accordingly.\n",
- "\n",
- "Signed-off-by: Nicolin Chen <nicoleots...\@gmail.com>\n",
- "---\n",
- " drivers/hwmon/ina3221.c | 28 ++++++++++++++++++++++++++++\n",
- " 1 file changed, 28 insertions(+)\n",
- "\n",
- "diff --git a/drivers/hwmon/ina3221.c b/drivers/hwmon/ina3221.c\n",
- "index e90ccac8bebb..152735659e19 100644\n",
- "--- a/drivers/hwmon/ina3221.c\n",
- "+++ b/drivers/hwmon/ina3221.c\n",
- "\@\@ -91,6 +91,12 \@\@ enum ina3221_channels {\n",
- " INA3221_NUM_CHANNELS\n",
- " };\n",
- " \n",
- "+enum ina3221_modes {\n",
- "\n",
- "+ INA3221_MODE_SINGLE_SHOT,\n",
- "+ INA3221_MODE_CONTINUOUS,\n",
- "+ INA3221_NUM_MODES,\n",
- "\n",
+ "> By default, ina3221, as a hardware monitor, continuously measures\n",
+ "> the inputs and generates corresponding data. However, for battery\n",
+ "> powered devices, this mode might be power consuming.\n",
+ "> \n",
+ "> The DT binding doc is updated with a new boolean type property to\n",
+ "> allow changing the default operating mode from consuming mode to\n",
+ "> single-shot mode, which will measure input on demand and then shut\n",
+ "> down to save power.\n",
+ "> \n",
+ "> So this patch implements the DT property accordingly.\n",
+ "> \n",
+ "> Signed-off-by: Nicolin Chen <nicoleotsuka\@gmail.com>\n",
+ "> ---\n",
+ "> drivers/hwmon/ina3221.c | 28 ++++++++++++++++++++++++++++\n",
+ "> 1 file changed, 28 insertions(+)\n",
+ "> \n",
+ "> diff --git a/drivers/hwmon/ina3221.c b/drivers/hwmon/ina3221.c\n",
+ "> index e90ccac8bebb..152735659e19 100644\n",
+ "> --- a/drivers/hwmon/ina3221.c\n",
+ "> +++ b/drivers/hwmon/ina3221.c\n",
+ "> \@\@ -91,6 +91,12 \@\@ enum ina3221_channels {\n",
+ "> \tINA3221_NUM_CHANNELS\n",
+ "> };\n",
+ "> \n",
+ "> +enum ina3221_modes {\n",
+ "> +\tINA3221_MODE_SINGLE_SHOT,\n",
+ "> +\tINA3221_MODE_CONTINUOUS,\n",
+ "> +\tINA3221_NUM_MODES,\n",
"\n",
"Is NUM_MODES used anywhere ? Please drop unless there is a reason to keep it.\n",
"\n",
"Guenter\n",
"\n",
- "\n",
- "+};\n",
- "+\n",
- " /**\n",
- " * struct ina3221_input - channel input source specific information\n",
- " * \@label: label of channel input source\n",
- "\@\@ -111,6 +117,7 \@\@ struct ina3221_input {\n",
- " * \@inputs: Array of channel input source specific structures\n",
- " * \@lock: mutex lock to serialize sysfs attribute accesses\n",
- " * \@reg_config: Register value of INA3221_CONFIG\n",
- "+ * \@mode: Operating mode -- continuous or single-shot\n",
- " */\n",
- " struct ina3221_data {\n",
- " struct device *pm_dev;\n",
- "\@\@ -119,6 +126,7 \@\@ struct ina3221_data {\n",
- " struct ina3221_input inputs[INA3221_NUM_CHANNELS];\n",
- " struct mutex lock;\n",
- " u32 reg_config;\n",
- "+ enum ina3221_modes mode;\n",
- " };\n",
- " \n",
- " static inline bool ina3221_is_enabled(struct ina3221_data *ina, int channel)\n",
- "\n",
- "\@\@ -188,6 +196,11 \@\@ static int ina3221_read_in(struct device *dev, u32 attr, \n",
- "int channel, long *val)\n",
- " if (!ina3221_is_enabled(ina, channel))\n",
- " return -ENODATA;\n",
- " \n",
- "+\t\t/* Write CONFIG register to trigger a single-shot measurement */\n",
- "\n",
- "+ if (ina->mode == INA3221_MODE_SINGLE_SHOT)\n",
- "+ regmap_write(ina->regmap, INA3221_CONFIG,\n",
- "+ ina->reg_config);\n",
- "+\n",
- " ret = ina3221_wait_for_data(ina);\n",
- " if (ret)\n",
- " return ret;\n",
- "\@\@ -232,6 +245,11 \@\@ static int ina3221_read_curr(struct device *dev, u32 attr,\n",
- " if (!ina3221_is_enabled(ina, channel))\n",
- " return -ENODATA;\n",
- " \n",
- "+\t\t/* Write CONFIG register to trigger a single-shot measurement */\n",
- "\n",
- "+ if (ina->mode == INA3221_MODE_SINGLE_SHOT)\n",
- "+ regmap_write(ina->regmap, INA3221_CONFIG,\n",
- "+ ina->reg_config);\n",
- "+\n",
- " ret = ina3221_wait_for_data(ina);\n",
- " if (ret)\n",
- " return ret;\n",
- "\@\@ -617,6 +635,9 \@\@ static int ina3221_probe_from_dt(struct device *dev, struct \n",
- "ina3221_data *ina)\n",
- " if (!np)\n",
- " return 0;\n",
- " \n",
- "+\tif (of_property_read_bool(np, \"ti,single-shot\"))\n",
- "\n",
- "+ ina->mode = INA3221_MODE_SINGLE_SHOT;\n",
- "+\n",
- " for_each_child_of_node(np, child) {\n",
- " ret = ina3221_probe_child_from_dt(dev, child, ina);\n",
- " if (ret)\n",
- "\@\@ -654,6 +675,9 \@\@ static int ina3221_probe(struct i2c_client *client,\n",
- " }\n",
- " }\n",
- " \n",
- "+\t/* Hardware default uses the continuous mode */\n",
- "\n",
- "+ ina->mode = INA3221_MODE_CONTINUOUS;\n",
- "+\n",
- " for (i = 0; i < INA3221_NUM_CHANNELS; i++)\n",
- " ina->inputs[i].shunt_resistor = INA3221_RSHUNT_DEFAULT;\n",
- " \n",
- "\@\@ -666,6 +690,10 \@\@ static int ina3221_probe(struct i2c_client *client,\n",
- "\n",
- " /* The driver will be reset, so use reset value */\n",
- " ina->reg_config = INA3221_CONFIG_DEFAULT;\n",
- " \n",
- "+\t/* Clear continuous bit to use single-shot mode */\n",
- "\n",
- "+ if (ina->mode == INA3221_MODE_SINGLE_SHOT)\n",
- "+ ina->reg_config &= ~INA3221_CONFIG_MODE_CONTINUOUS;\n",
- "+\n",
- " /* Disable channels if their inputs are disconnected */\n",
- " for (i = 0; i < INA3221_NUM_CHANNELS; i++) {\n",
- " if (ina->inputs[i].disconnected)"
+ "> +};\n",
+ "> +\n",
+ "> /**\n",
+ "> * struct ina3221_input - channel input source specific information\n",
+ "> * \@label: label of channel input source\n",
+ "> \@\@ -111,6 +117,7 \@\@ struct ina3221_input {\n",
+ "> * \@inputs: Array of channel input source specific structures\n",
+ "> * \@lock: mutex lock to serialize sysfs attribute accesses\n",
+ "> * \@reg_config: Register value of INA3221_CONFIG\n",
+ "> + * \@mode: Operating mode -- continuous or single-shot\n",
+ "> */\n",
+ "> struct ina3221_data {\n",
+ "> \tstruct device *pm_dev;\n",
+ "> \@\@ -119,6 +126,7 \@\@ struct ina3221_data {\n",
+ "> \tstruct ina3221_input inputs[INA3221_NUM_CHANNELS];\n",
+ "> \tstruct mutex lock;\n",
+ "> \tu32 reg_config;\n",
+ "> +\tenum ina3221_modes mode;\n",
+ "> };\n",
+ "> \n",
+ "> static inline bool ina3221_is_enabled(struct ina3221_data *ina, int channel)\n",
+ "> \@\@ -188,6 +196,11 \@\@ static int ina3221_read_in(struct device *dev, u32 attr, int channel, long *val)\n",
+ "> \t\tif (!ina3221_is_enabled(ina, channel))\n",
+ "> \t\t\treturn -ENODATA;\n",
+ "> \n",
+ "> +\t\t/* Write CONFIG register to trigger a single-shot measurement */\n",
+ "> +\t\tif (ina->mode == INA3221_MODE_SINGLE_SHOT)\n",
+ "> +\t\t\tregmap_write(ina->regmap, INA3221_CONFIG,\n",
+ "> +\t\t\t\t ina->reg_config);\n",
+ "> +\n",
+ "> \t\tret = ina3221_wait_for_data(ina);\n",
+ "> \t\tif (ret)\n",
+ "> \t\t\treturn ret;\n",
+ "> \@\@ -232,6 +245,11 \@\@ static int ina3221_read_curr(struct device *dev, u32 attr,\n",
+ "> \t\tif (!ina3221_is_enabled(ina, channel))\n",
+ "> \t\t\treturn -ENODATA;\n",
+ "> \n",
+ "> +\t\t/* Write CONFIG register to trigger a single-shot measurement */\n",
+ "> +\t\tif (ina->mode == INA3221_MODE_SINGLE_SHOT)\n",
+ "> +\t\t\tregmap_write(ina->regmap, INA3221_CONFIG,\n",
+ "> +\t\t\t\t ina->reg_config);\n",
+ "> +\n",
+ "> \t\tret = ina3221_wait_for_data(ina);\n",
+ "> \t\tif (ret)\n",
+ "> \t\t\treturn ret;\n",
+ "> \@\@ -617,6 +635,9 \@\@ static int ina3221_probe_from_dt(struct device *dev, struct ina3221_data *ina)\n",
+ "> \tif (!np)\n",
+ "> \t\treturn 0;\n",
+ "> \n",
+ "> +\tif (of_property_read_bool(np, \"ti,single-shot\"))\n",
+ "> +\t\tina->mode = INA3221_MODE_SINGLE_SHOT;\n",
+ "> +\n",
+ "> \tfor_each_child_of_node(np, child) {\n",
+ "> \t\tret = ina3221_probe_child_from_dt(dev, child, ina);\n",
+ "> \t\tif (ret)\n",
+ "> \@\@ -654,6 +675,9 \@\@ static int ina3221_probe(struct i2c_client *client,\n",
+ "> \t\t}\n",
+ "> \t}\n",
+ "> \n",
+ "> +\t/* Hardware default uses the continuous mode */\n",
+ "> +\tina->mode = INA3221_MODE_CONTINUOUS;\n",
+ "> +\n",
+ "> \tfor (i = 0; i < INA3221_NUM_CHANNELS; i++)\n",
+ "> \t\tina->inputs[i].shunt_resistor = INA3221_RSHUNT_DEFAULT;\n",
+ "> \n",
+ "> \@\@ -666,6 +690,10 \@\@ static int ina3221_probe(struct i2c_client *client,\n",
+ "> \t/* The driver will be reset, so use reset value */\n",
+ "> \tina->reg_config = INA3221_CONFIG_DEFAULT;\n",
+ "> \n",
+ "> +\t/* Clear continuous bit to use single-shot mode */\n",
+ "> +\tif (ina->mode == INA3221_MODE_SINGLE_SHOT)\n",
+ "> +\t\tina->reg_config &= ~INA3221_CONFIG_MODE_CONTINUOUS;\n",
+ "> +\n",
+ "> \t/* Disable channels if their inputs are disconnected */\n",
+ "> \tfor (i = 0; i < INA3221_NUM_CHANNELS; i++) {\n",
+ "> \t\tif (ina->inputs[i].disconnected)\n",
+ ">"
]
-6edb5c23824c99ddd1ad7c44720d006bdc3088a269745ee04d6751b7997798eb
+62b443b6913e34d769d0a55e2b04bbc3c7b38436251a7c001f8c5d6c32ddb3bd
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).