Skip to content

Commit

Permalink
i2c: rcar: refactor status bit handling
Browse files Browse the repository at this point in the history
The old macros made it harder to see what was actually happening.
Replace them with something more readable.

Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
  • Loading branch information
Wolfram Sang authored and Wolfram Sang committed Jun 1, 2014
1 parent 386babf commit 3c95de6
Showing 1 changed file with 7 additions and 13 deletions.
20 changes: 7 additions & 13 deletions drivers/i2c/busses/i2c-rcar.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,9 @@
#define RCAR_IRQ_RECV (MNRE | MALE | MSTE | MATE | MDRE)
#define RCAR_IRQ_STOP (MSTE)

#define RCAR_IRQ_ACK_SEND (~(MAT | MDE))
#define RCAR_IRQ_ACK_RECV (~(MAT | MDR))

/*
* flags
*/
Expand Down Expand Up @@ -268,27 +271,18 @@ static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv,
* status functions
*/

#define rcar_i2c_status_clear(priv) rcar_i2c_status_bit_clear(priv, 0xffffffff)
static void rcar_i2c_status_bit_clear(struct rcar_i2c_priv *priv, u32 bit)
{
rcar_i2c_write(priv, ICMSR, ~bit);
}

static int rcar_i2c_prepare_msg(struct rcar_i2c_priv *priv)
{
int read = !!rcar_i2c_is_recv(priv);

rcar_i2c_write(priv, ICMAR, (priv->msg->addr << 1) | read);
rcar_i2c_status_clear(priv);
rcar_i2c_write(priv, ICMSR, 0);
rcar_i2c_write(priv, ICMCR, RCAR_BUS_PHASE_START);
rcar_i2c_write(priv, ICMIER, read ? RCAR_IRQ_RECV : RCAR_IRQ_SEND);

return 0;
}

#define rcar_i2c_send_restart(priv) rcar_i2c_status_bit_clear(priv, (MAT | MDE))
#define rcar_i2c_recv_restart(priv) rcar_i2c_status_bit_clear(priv, (MAT | MDR))

/*
* interrupt functions
*/
Expand Down Expand Up @@ -348,7 +342,7 @@ static int rcar_i2c_irq_send(struct rcar_i2c_priv *priv, u32 msr)
return ID_DONE;
}

rcar_i2c_send_restart(priv);
rcar_i2c_write(priv, ICMSR, RCAR_IRQ_ACK_SEND);

return 0;
}
Expand Down Expand Up @@ -389,7 +383,7 @@ static int rcar_i2c_irq_recv(struct rcar_i2c_priv *priv, u32 msr)
else
rcar_i2c_write(priv, ICMCR, RCAR_BUS_PHASE_DATA);

rcar_i2c_recv_restart(priv);
rcar_i2c_write(priv, ICMSR, RCAR_IRQ_ACK_RECV);

return 0;
}
Expand Down Expand Up @@ -452,7 +446,7 @@ static irqreturn_t rcar_i2c_irq(int irq, void *ptr)
out:
if (rcar_i2c_flags_has(priv, ID_DONE)) {
rcar_i2c_write(priv, ICMIER, 0);
rcar_i2c_status_clear(priv);
rcar_i2c_write(priv, ICMSR, 0);
wake_up(&priv->wait);
}

Expand Down

0 comments on commit 3c95de6

Please sign in to comment.