All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guenter Roeck <linux@roeck-us.net>
To: Nicolin Chen <nicoleotsuka@gmail.com>
Cc: jdelvare@suse.com, robh+dt@kernel.org, mark.rutland@arm.com,
	linux-hwmon@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 2/2] hwmon: (ina3221) Implement ti,single-shot DT property
Date: Mon, 7 Jan 2019 11:35:55 -0800	[thread overview]
Message-ID: <20190107193555.GA13547@roeck-us.net> (raw)
In-Reply-To: <20190105030636.533-3-nicoleotsuka@gmail.com>

On Fri, Jan 04, 2019 at 07:06:36PM -0800, 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 <nicoleotsuka@gmail.com>
> ---
> Changelog
> v1->v2:
>  * Replaced the useless mode defines with a boolean variable.
> 
>  drivers/hwmon/ina3221.c | 20 ++++++++++++++++++++
>  1 file changed, 20 insertions(+)
> 
> diff --git a/drivers/hwmon/ina3221.c b/drivers/hwmon/ina3221.c
> index e90ccac8bebb..4258a6ebe195 100644
> --- a/drivers/hwmon/ina3221.c
> +++ b/drivers/hwmon/ina3221.c
> @@ -111,6 +111,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
> + * @single_shot: running in single-shot operating mode
>   */
>  struct ina3221_data {
>  	struct device *pm_dev;
> @@ -119,6 +120,8 @@ struct ina3221_data {
>  	struct ina3221_input inputs[INA3221_NUM_CHANNELS];
>  	struct mutex lock;
>  	u32 reg_config;
> +
> +	bool single_shot;
>  };
>  
>  static inline bool ina3221_is_enabled(struct ina3221_data *ina, int channel)
> @@ -188,6 +191,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->single_shot)
> +			regmap_write(ina->regmap, INA3221_CONFIG,
> +				     ina->reg_config);
> +
>  		ret = ina3221_wait_for_data(ina);
>  		if (ret)
>  			return ret;
> @@ -232,6 +240,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->single_shot)
> +			regmap_write(ina->regmap, INA3221_CONFIG,
> +				     ina->reg_config);
> +
>  		ret = ina3221_wait_for_data(ina);
>  		if (ret)
>  			return ret;
> @@ -617,6 +630,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->single_shot = true;
> +
	ina->single_shot = of_property_read_bool(np, "ti,single-shot");

No need to resend right now; let's wait for feedback from Rob.

Guenter

>  	for_each_child_of_node(np, child) {
>  		ret = ina3221_probe_child_from_dt(dev, child, ina);
>  		if (ret)
> @@ -666,6 +682,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->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)

  reply	other threads:[~2019-01-07 19:35 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-05  3:06 [PATCH v2 0/2] hwmon (ina3221) Add single-shot mode support Nicolin Chen
2019-01-05  3:06 ` Nicolin Chen
2019-01-05  3:07   ` Nicolin Chen
2019-01-05  3:06   ` [PATCH v2 1/2] dt-bindings: hwmon: ina3221: Add ti,single-shot property Nicolin Chen
2019-01-05  3:06     ` Nicolin Chen
2019-01-05  3:07       ` Nicolin Chen
2019-01-11 21:34       ` Rob Herring
2019-01-05  3:06   ` [PATCH v2 2/2] hwmon: (ina3221) Implement ti,single-shot DT property Nicolin Chen
2019-01-05  3:06     ` Nicolin Chen
2019-01-05  3:06       ` Nicolin Chen
2019-01-07 19:35       ` Guenter Roeck [this message]
2019-01-17 22:30         ` Nicolin Chen
2019-01-17 22:58           ` Guenter Roeck
2019-01-17 23:02             ` Nicolin Chen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190107193555.GA13547@roeck-us.net \
    --to=linux@roeck-us.net \
    --cc=devicetree@vger.kernel.org \
    --cc=jdelvare@suse.com \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=nicoleotsuka@gmail.com \
    --cc=robh+dt@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.