| From b9d0684c79c4b9d30ce0d47d3270493dd0e76e59 Mon Sep 17 00:00:00 2001 |
| From: Wolfram Sang <wsa+renesas@sang-engineering.com> |
| Date: Thu, 19 Nov 2015 16:56:45 +0100 |
| Subject: i2c: rcar: refactor setup of a msg |
| |
| From: Wolfram Sang <wsa+renesas@sang-engineering.com> |
| |
| commit b9d0684c79c4b9d30ce0d47d3270493dd0e76e59 upstream. |
| |
| We want to reuse this function later. |
| |
| Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com> |
| Signed-off-by: Wolfram Sang <wsa@the-dreams.de> |
| Signed-off-by: Fabrizio Castro <fabrizio.castro@bp.renesas.com> |
| Reviewed-by: Chris Paterson <Chris.Paterson2@renesas.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/i2c/busses/i2c-rcar.c | 15 +++++++++------ |
| 1 file changed, 9 insertions(+), 6 deletions(-) |
| |
| --- a/drivers/i2c/busses/i2c-rcar.c |
| +++ b/drivers/i2c/busses/i2c-rcar.c |
| @@ -106,7 +106,8 @@ enum rcar_i2c_type { |
| struct rcar_i2c_priv { |
| void __iomem *io; |
| struct i2c_adapter adap; |
| - struct i2c_msg *msg; |
| + struct i2c_msg *msg; |
| + int msgs_left; |
| struct clk *clk; |
| |
| wait_queue_head_t wait; |
| @@ -255,6 +256,11 @@ static void rcar_i2c_prepare_msg(struct |
| { |
| int read = !!rcar_i2c_is_recv(priv); |
| |
| + priv->pos = 0; |
| + priv->flags = 0; |
| + if (priv->msgs_left == 1) |
| + rcar_i2c_flags_set(priv, ID_LAST_MSG); |
| + |
| rcar_i2c_write(priv, ICMAR, (priv->msg->addr << 1) | read); |
| rcar_i2c_write(priv, ICMSR, 0); |
| rcar_i2c_write(priv, ICMCR, RCAR_BUS_PHASE_START); |
| @@ -499,11 +505,8 @@ static int rcar_i2c_master_xfer(struct i |
| } |
| |
| /* init each data */ |
| - priv->msg = &msgs[i]; |
| - priv->pos = 0; |
| - priv->flags = 0; |
| - if (i == num - 1) |
| - rcar_i2c_flags_set(priv, ID_LAST_MSG); |
| + priv->msg = &msgs[i]; |
| + priv->msgs_left = num - i; |
| |
| rcar_i2c_prepare_msg(priv); |
| |