All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Shevchenko <andy.shevchenko@gmail.com>
To: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
Cc: "Mark Rutland" <mark.rutland@arm.com>,
	"Milo Kim" <milo.kim@ti.com>,
	"Andrei Stefanescu" <andrei.stefanescu@microchip.com>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	"Tony Lindgren" <tony@atomide.com>,
	"Linus Walleij" <linus.walleij@linaro.org>,
	"Brendan Higgins" <brendanhiggins@google.com>,
	"Liam Girdwood" <lgirdwood@gmail.com>,
	"Masahiro Yamada" <yamada.masahiro@socionext.com>,
	devicetree@vger.kernel.org, mikko.mutanen@fi.rohmeurope.com,
	"Vincenzo Frascino" <vincenzo.frascino@arm.com>,
	"Dan Williams" <dan.j.williams@intel.com>,
	linux-samsung-soc@vger.kernel.org, linux-omap@vger.kernel.org,
	"Herbert Xu" <herbert@gondor.apana.org.au>,
	"Bartlomiej Zolnierkiewicz" <b.zolnierkie@samsung.com>,
	"Krzysztof Kozlowski" <krzk@kernel.org>,
	"Ard Biesheuvel" <ardb@kernel.org>,
	"Bartosz Golaszewski" <bgolaszewski@baylibre.com>,
	"Chen-Yu Tsai" <wens@csie.org>, "Andy Gross" <agross@kernel.org>,
	markus.laine@fi.rohmeurope.com, linux-arm-msm@vger.kernel.org,
	"Borislav Petkov" <bp@suse.de>, "Petr Mladek" <pmladek@suse.com>,
	"Mikhail Zaslonko" <zaslonko@linux.ibm.com>,
	"Charles Keepax" <ckeepax@opensource.cirrus.com>,
	"Arnd Bergmann" <arnd@arndb.de>,
	mazziesaccount@gmail.com, "Gary Hook" <Gary.Hook@amd.com>,
	"Richard Fitzgerald" <rf@opensource.cirrus.com>,
	"Rob Herring" <robh+dt@kernel.org>,
	linux-mediatek@lists.infradead.org,
	"David Gow" <davidgow@google.com>,
	"Shuah Khan" <skhan@linuxfoundation.org>,
	"Matthias Brugger" <matthias.bgg@gmail.com>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Bjorn Andersson" <bjorn.andersson@linaro.org>,
	linux-arm-kernel@lists.infradead.org,
	"Support Opensource" <support.opensource@diasemi.com>,
	"Sangbeom Kim" <sbkim73@samsung.com>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	linux-pm@vger.kernel.org, "Randy Dunlap" <rdunlap@infradead.org>,
	"Sebastian Reichel" <sre@kernel.org>,
	linux-kernel@vger.kernel.org, "Tal Gilboa" <talgi@mellanox.com>,
	"Changbin Du" <changbin.du@intel.com>,
	"Mark Brown" <broonie@kernel.org>,
	"Uwe Kleine-König" <uwe@kleine-koenig.org>,
	"Masami Hiramatsu" <mhiramat@kernel.org>,
	patches@opensource.cirrus.com,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Vladimir Oltean" <olteanv@gmail.com>,
	"David S. Miller" <davem@davemloft.net>
Subject: Re: [PATCH v7 03/10] lib: add linear ranges helpers
Date: Tue, 31 Mar 2020 17:05:23 +0300	[thread overview]
Message-ID: <20200331140523.GJ1922688@smile.fi.intel.com> (raw)
In-Reply-To: <c4cd52979ec187c942fa5794aab11e6c7f944cbb.1585656143.git.matti.vaittinen@fi.rohmeurope.com>

On Tue, Mar 31, 2020 at 03:23:03PM +0300, Matti Vaittinen wrote:
> Many devices have control registers which control some measurable
> property. Often a register contains control field so that change in
> this field causes linear change in the controlled property. It is not
> a rare case that user wants to give 'meaningful' control values and
> driver needs to convert them to register field values. Even more
> often user wants to 'see' the currently set value - again in
> meaningful units - and driver needs to convert the values it reads
> from register to these meaningful units. Examples of this include:
> 
> - regulators, voltage/current configurations
> - power, voltage/current configurations
> - clk(?) NCOs
> 
> and maybe others I can't think of right now.
> 
> Provide a linear_range helper which can do conversion from user value
> to register value 'selector'.
> 
> The idea here is stolen from regulator framework and patches refactoring
> the regulator helpers to use this are following.

...

> +/*
> + * linear_ranges.c -- helpers to map values in a linear range to range index

File name inside file can bring an unnecessary churn in the future in case we
would like to rename it (by some reason). So, better to remove.

> + *
> + * Original idea borrowed from regulator framework
> + *

> + * It might be useful if we could support also inversely proportional ranges?

Looks like remark that should not be here, rather in commit message or even in cover letter.

> + * Copyright 2020 ROHM Semiconductors
> + */

...

> +/**
> + * linear_range_get_value - fetch a value from given range

> + *

This blank line is not needed. Can we drop them everywhere?

> + * @r:		pointer to linear range where value is looked from
> + * @selector:	selector for which the value is searched
> + * @val:	address where found value is updated
> + *
> + * Search given ranges for value which matches given selector.
> + *
> + * Return: 0 on success, -EINVAL given selector is not found from any of the
> + * ranges.
> + */

...

> +int linear_range_get_selector_low(const struct linear_range *r,
> +				  unsigned int val, unsigned int *selector,
> +				  bool *found)
> +{
> +	*found = false;
> +
> +	if (r->min > val)
> +		return -EINVAL;
> +

> +	if (linear_range_get_max_value(r) >= val)
> +		*found = true;

As far as I can see this is a bit different from _high counterpart. So, if we
even not found the range we still check r->step. Can we make them symmetrical
(to some extend)?

> +	if (!r->step)

Why not positive conditional?

> +		*selector = r->min_sel;
> +	else
> +		*selector = (val - r->min) / r->step + r->min_sel;

> +	return 0;
> +}

...

> +int linear_range_get_selector_low_array(const struct linear_range *r,
> +					int ranges, unsigned int val,
> +					unsigned int *selector, bool *found)
> +{
> +	int i;
> +	int ret = -EINVAL;
> +
> +	for (i = 0; i < ranges; i++) {
> +		int tmpret;
> +
> +		tmpret = linear_range_get_selector_low(&r[i], val, selector,
> +						       found);
> +
> +		if (!tmpret)
> +			ret = 0;
> +
> +		if (*found)
> +			break;
> +	}
> +
> +	return ret;
> +}

Can we refactor this?

	int i;
	int ret = -EINVAL;

	for (i = 0; i < ranges; i++) {
		ret = linear_range_get_selector_low(&r[i], val, selector, found);
		if (*found)
			break;
	}

	return break;

This will unshadow the error code returned by the loop body.

Or if ranges is guaranteed to be always positive number, convert this to do {} while.

...

> +int linear_range_get_selector_high(const struct linear_range *r,
> +				   unsigned int val, unsigned int *selector,
> +				   bool *found)
> +{
> +	*found = false;
> +
> +	if (linear_range_get_max_value(r) < val)
> +		return -EINVAL;
> +

> +	if (r->min <= val) {
> +		*found = true;
> +	} else {
> +		*selector = r->min_sel;
> +		return 0;
> +	}

	if (r->min > val) {
		*selector = r->min_sel;
		return 0;
	}

	...see below...

> +	if (!r->step)

Positive conditional?

> +		*selector = r->max_sel;
> +	else
> +		*selector = DIV_ROUND_UP(val - r->min, r->step) + r->min_sel;


	*found = true;

> +	return 0;
> +}

-- 
With Best Regards,
Andy Shevchenko



_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

  reply	other threads:[~2020-03-31 16:09 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-31 12:20 [PATCH v7 00/10] Support ROHM BD99954 charger IC Matti Vaittinen
2020-03-31 12:21 ` [PATCH v7 01/10] dt-bindings: battery: add new battery parameters Matti Vaittinen
2020-03-31 12:22 ` [PATCH v7 02/10] dt_bindings: ROHM BD99954 Charger Matti Vaittinen
2020-03-31 12:23 ` [PATCH v7 03/10] lib: add linear ranges helpers Matti Vaittinen
2020-03-31 14:05   ` Andy Shevchenko [this message]
2020-04-01 10:09     ` [SPF Softfail] " Vaittinen, Matti
2020-04-01 12:39       ` Andy Shevchenko
2020-04-01 13:18         ` Vaittinen, Matti
2020-04-01 14:42           ` Andy Shevchenko
2020-04-02  4:03             ` Vaittinen, Matti
2020-03-31 12:23 ` [PATCH v7 04/10] lib/test_linear_ranges: add a test for the 'linear_ranges' Matti Vaittinen
2020-03-31 18:08   ` Brendan Higgins
2020-04-01  8:45     ` Vaittinen, Matti
2020-04-01 18:48       ` Brendan Higgins
2020-04-02 15:39         ` Vaittinen, Matti
2020-03-31 12:24 ` [PATCH v7 05/10] power: supply: bd70528: rename linear_range to avoid collision Matti Vaittinen
2020-03-31 12:24 ` [PATCH v7 00/10] Support ROHM BD99954 charger IC Ard Biesheuvel
2020-03-31 14:02   ` Vaittinen, Matti
2020-03-31 14:21     ` andriy.shevchenko
2020-03-31 12:25 ` [PATCH v7 06/10] regulator: use linear_ranges helper Matti Vaittinen
2020-04-01 10:17   ` Mark Brown
2020-03-31 12:26 ` [PATCH v7 07/10] power: supply: bd70528: use linear ranges Matti Vaittinen
2020-03-31 12:26 ` [PATCH v7 08/10] power: supply: add battery parameters Matti Vaittinen
2020-03-31 12:28 ` [PATCH v7 09/10] power: supply: Support ROHM bd99954 charger Matti Vaittinen
2020-03-31 14:19   ` Andy Shevchenko
2020-04-01  8:08     ` Vaittinen, Matti
2020-03-31 12:29 ` [PATCH v7 10/10] power: supply: Fix Kconfig help text indentiation Matti Vaittinen

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=20200331140523.GJ1922688@smile.fi.intel.com \
    --to=andy.shevchenko@gmail.com \
    --cc=Gary.Hook@amd.com \
    --cc=agross@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=andrei.stefanescu@microchip.com \
    --cc=ardb@kernel.org \
    --cc=arnd@arndb.de \
    --cc=b.zolnierkie@samsung.com \
    --cc=bgolaszewski@baylibre.com \
    --cc=bjorn.andersson@linaro.org \
    --cc=bp@suse.de \
    --cc=brendanhiggins@google.com \
    --cc=broonie@kernel.org \
    --cc=changbin.du@intel.com \
    --cc=ckeepax@opensource.cirrus.com \
    --cc=dan.j.williams@intel.com \
    --cc=davem@davemloft.net \
    --cc=davidgow@google.com \
    --cc=devicetree@vger.kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=herbert@gondor.apana.org.au \
    --cc=krzk@kernel.org \
    --cc=lgirdwood@gmail.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=markus.laine@fi.rohmeurope.com \
    --cc=matthias.bgg@gmail.com \
    --cc=matti.vaittinen@fi.rohmeurope.com \
    --cc=mazziesaccount@gmail.com \
    --cc=mhiramat@kernel.org \
    --cc=mikko.mutanen@fi.rohmeurope.com \
    --cc=milo.kim@ti.com \
    --cc=olteanv@gmail.com \
    --cc=patches@opensource.cirrus.com \
    --cc=pmladek@suse.com \
    --cc=rafael@kernel.org \
    --cc=rdunlap@infradead.org \
    --cc=rf@opensource.cirrus.com \
    --cc=robh+dt@kernel.org \
    --cc=sbkim73@samsung.com \
    --cc=skhan@linuxfoundation.org \
    --cc=sre@kernel.org \
    --cc=support.opensource@diasemi.com \
    --cc=talgi@mellanox.com \
    --cc=tglx@linutronix.de \
    --cc=tony@atomide.com \
    --cc=uwe@kleine-koenig.org \
    --cc=vincenzo.frascino@arm.com \
    --cc=wens@csie.org \
    --cc=yamada.masahiro@socionext.com \
    --cc=zaslonko@linux.ibm.com \
    /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.