Skip to content

Commit

Permalink
counter: ti-eqep: Use container_of instead of struct counter_device::…
Browse files Browse the repository at this point in the history
…priv

Using counter->priv is a memory read and so more expensive than
container_of which is only an addition. (In this case even a noop
because the offset is 0.)

So container_of is expected to be a tad faster, it's type-safe, and
produces smaller code (ARCH=arm allmodconfig):

	$ source/scripts/bloat-o-meter drivers/counter/ti-eqep.o-pre drivers/counter/ti-eqep.o
	add/remove: 0/0 grow/shrink: 0/9 up/down: 0/-108 (-108)
	Function                                     old     new   delta
	ti_eqep_position_enable_write                132     120     -12
	ti_eqep_position_enable_read                 260     248     -12
	ti_eqep_position_ceiling_write               132     120     -12
	ti_eqep_position_ceiling_read                236     224     -12
	ti_eqep_function_write                       220     208     -12
	ti_eqep_function_read                        372     360     -12
	ti_eqep_count_write                          312     300     -12
	ti_eqep_count_read                           236     224     -12
	ti_eqep_action_read                          664     652     -12
	Total: Before=4598, After=4490, chg -2.35%

Acked-by: David Lechner <david@lechnology.com>
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: William Breathitt Gray <vilhelm.gray@gmail.com>
Link: https://lore.kernel.org/r/4bde7cbd9e43a5909208102094444219d3154466.1640072891.git.vilhelm.gray@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Uwe Kleine-König authored and Greg Kroah-Hartman committed Dec 21, 2021
1 parent 0032ca5 commit 60f07e7
Showing 1 changed file with 14 additions and 9 deletions.
23 changes: 14 additions & 9 deletions drivers/counter/ti-eqep.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,10 +87,15 @@ struct ti_eqep_cnt {
struct regmap *regmap16;
};

static struct ti_eqep_cnt *ti_eqep_count_from_counter(struct counter_device *counter)
{
return container_of(counter, struct ti_eqep_cnt, counter);
}

static int ti_eqep_count_read(struct counter_device *counter,
struct counter_count *count, u64 *val)
{
struct ti_eqep_cnt *priv = counter->priv;
struct ti_eqep_cnt *priv = ti_eqep_count_from_counter(counter);
u32 cnt;

regmap_read(priv->regmap32, QPOSCNT, &cnt);
Expand All @@ -102,7 +107,7 @@ static int ti_eqep_count_read(struct counter_device *counter,
static int ti_eqep_count_write(struct counter_device *counter,
struct counter_count *count, u64 val)
{
struct ti_eqep_cnt *priv = counter->priv;
struct ti_eqep_cnt *priv = ti_eqep_count_from_counter(counter);
u32 max;

regmap_read(priv->regmap32, QPOSMAX, &max);
Expand All @@ -116,7 +121,7 @@ static int ti_eqep_function_read(struct counter_device *counter,
struct counter_count *count,
enum counter_function *function)
{
struct ti_eqep_cnt *priv = counter->priv;
struct ti_eqep_cnt *priv = ti_eqep_count_from_counter(counter);
u32 qdecctl;

regmap_read(priv->regmap16, QDECCTL, &qdecctl);
Expand All @@ -143,7 +148,7 @@ static int ti_eqep_function_write(struct counter_device *counter,
struct counter_count *count,
enum counter_function function)
{
struct ti_eqep_cnt *priv = counter->priv;
struct ti_eqep_cnt *priv = ti_eqep_count_from_counter(counter);
enum ti_eqep_count_func qsrc;

switch (function) {
Expand Down Expand Up @@ -173,7 +178,7 @@ static int ti_eqep_action_read(struct counter_device *counter,
struct counter_synapse *synapse,
enum counter_synapse_action *action)
{
struct ti_eqep_cnt *priv = counter->priv;
struct ti_eqep_cnt *priv = ti_eqep_count_from_counter(counter);
enum counter_function function;
u32 qdecctl;
int err;
Expand Down Expand Up @@ -245,7 +250,7 @@ static int ti_eqep_position_ceiling_read(struct counter_device *counter,
struct counter_count *count,
u64 *ceiling)
{
struct ti_eqep_cnt *priv = counter->priv;
struct ti_eqep_cnt *priv = ti_eqep_count_from_counter(counter);
u32 qposmax;

regmap_read(priv->regmap32, QPOSMAX, &qposmax);
Expand All @@ -259,7 +264,7 @@ static int ti_eqep_position_ceiling_write(struct counter_device *counter,
struct counter_count *count,
u64 ceiling)
{
struct ti_eqep_cnt *priv = counter->priv;
struct ti_eqep_cnt *priv = ti_eqep_count_from_counter(counter);

if (ceiling != (u32)ceiling)
return -ERANGE;
Expand All @@ -272,7 +277,7 @@ static int ti_eqep_position_ceiling_write(struct counter_device *counter,
static int ti_eqep_position_enable_read(struct counter_device *counter,
struct counter_count *count, u8 *enable)
{
struct ti_eqep_cnt *priv = counter->priv;
struct ti_eqep_cnt *priv = ti_eqep_count_from_counter(counter);
u32 qepctl;

regmap_read(priv->regmap16, QEPCTL, &qepctl);
Expand All @@ -285,7 +290,7 @@ static int ti_eqep_position_enable_read(struct counter_device *counter,
static int ti_eqep_position_enable_write(struct counter_device *counter,
struct counter_count *count, u8 enable)
{
struct ti_eqep_cnt *priv = counter->priv;
struct ti_eqep_cnt *priv = ti_eqep_count_from_counter(counter);

regmap_write_bits(priv->regmap16, QEPCTL, QEPCTL_PHEN, enable ? -1 : 0);

Expand Down

0 comments on commit 60f07e7

Please sign in to comment.