mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-02 12:53:33 -04:00
can: rcar_can: CTLR bitfield conversion
Convert CAN Control Register field accesses to use the FIELD_PREP() bitfield access macro. Add a few more comments and definitions while at it. This gets rid of explicit (and sometimes confusing) shifts. Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> Link: https://patch.msgid.link/077640e31949dc3c9d128a08ade94c9e9cd25672.1755857536.git.geert+renesas@glider.be Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
committed by
Marc Kleine-Budde
parent
28f3617c39
commit
669abc4068
@@ -5,6 +5,7 @@
|
||||
* Copyright (C) 2013 Renesas Solutions Corp.
|
||||
*/
|
||||
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/bits.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
@@ -115,16 +116,19 @@ static const struct can_bittiming_const rcar_can_bittiming_const = {
|
||||
|
||||
/* Control Register bits */
|
||||
#define RCAR_CAN_CTLR_BOM GENMASK(12, 11) /* Bus-Off Recovery Mode Bits */
|
||||
#define RCAR_CAN_CTLR_BOM_ENT (1 << 11) /* Entry to halt mode */
|
||||
/* at bus-off entry */
|
||||
#define RCAR_CAN_CTLR_BOM_ENT 1 /* Entry to halt mode */
|
||||
/* at bus-off entry */
|
||||
#define RCAR_CAN_CTLR_SLPM BIT(10) /* Sleep Mode */
|
||||
#define RCAR_CAN_CTLR_CANM GENMASK(9, 8) /* Operating Mode Select Bit */
|
||||
#define RCAR_CAN_CTLR_CANM_HALT (1 << 9)
|
||||
#define RCAR_CAN_CTLR_CANM_RESET (1 << 8)
|
||||
#define RCAR_CAN_CTLR_CANM_FORCE_RESET (3 << 8)
|
||||
#define RCAR_CAN_CTLR_CANM_OPER 0 /* Operation Mode */
|
||||
#define RCAR_CAN_CTLR_CANM_RESET 1 /* Reset Mode */
|
||||
#define RCAR_CAN_CTLR_CANM_HALT 2 /* Halt Mode */
|
||||
#define RCAR_CAN_CTLR_CANM_FORCE_RESET 3 /* Reset Mode (forcible) */
|
||||
#define RCAR_CAN_CTLR_MLM BIT(3) /* Message Lost Mode Select */
|
||||
#define RCAR_CAN_CTLR_IDFM GENMASK(2, 1) /* ID Format Mode Select Bits */
|
||||
#define RCAR_CAN_CTLR_IDFM_MIXED (1 << 2) /* Mixed ID mode */
|
||||
#define RCAR_CAN_CTLR_IDFM_STD 0 /* Standard ID mode */
|
||||
#define RCAR_CAN_CTLR_IDFM_EXT 1 /* Extended ID mode */
|
||||
#define RCAR_CAN_CTLR_IDFM_MIXED 2 /* Mixed ID mode */
|
||||
#define RCAR_CAN_CTLR_MBM BIT(0) /* Mailbox Mode select */
|
||||
|
||||
/* Status Register bits */
|
||||
@@ -453,16 +457,17 @@ static void rcar_can_start(struct net_device *ndev)
|
||||
ctlr &= ~RCAR_CAN_CTLR_SLPM;
|
||||
writew(ctlr, &priv->regs->ctlr);
|
||||
/* Go to reset mode */
|
||||
ctlr |= RCAR_CAN_CTLR_CANM_FORCE_RESET;
|
||||
ctlr |= FIELD_PREP(RCAR_CAN_CTLR_CANM, RCAR_CAN_CTLR_CANM_FORCE_RESET);
|
||||
writew(ctlr, &priv->regs->ctlr);
|
||||
for (i = 0; i < MAX_STR_READS; i++) {
|
||||
if (readw(&priv->regs->str) & RCAR_CAN_STR_RSTST)
|
||||
break;
|
||||
}
|
||||
rcar_can_set_bittiming(ndev);
|
||||
ctlr |= RCAR_CAN_CTLR_IDFM_MIXED; /* Select mixed ID mode */
|
||||
ctlr |= RCAR_CAN_CTLR_BOM_ENT; /* Entry to halt mode automatically */
|
||||
/* at bus-off */
|
||||
/* Select mixed ID mode */
|
||||
ctlr |= FIELD_PREP(RCAR_CAN_CTLR_IDFM, RCAR_CAN_CTLR_IDFM_MIXED);
|
||||
/* Entry to halt mode automatically at bus-off */
|
||||
ctlr |= FIELD_PREP(RCAR_CAN_CTLR_BOM, RCAR_CAN_CTLR_BOM_ENT);
|
||||
ctlr |= RCAR_CAN_CTLR_MBM; /* Select FIFO mailbox mode */
|
||||
ctlr |= RCAR_CAN_CTLR_MLM; /* Overrun mode */
|
||||
writew(ctlr, &priv->regs->ctlr);
|
||||
@@ -492,7 +497,9 @@ static void rcar_can_start(struct net_device *ndev)
|
||||
priv->can.state = CAN_STATE_ERROR_ACTIVE;
|
||||
|
||||
/* Go to operation mode */
|
||||
writew(ctlr & ~RCAR_CAN_CTLR_CANM, &priv->regs->ctlr);
|
||||
ctlr &= ~RCAR_CAN_CTLR_CANM;
|
||||
ctlr |= FIELD_PREP(RCAR_CAN_CTLR_CANM, RCAR_CAN_CTLR_CANM_OPER);
|
||||
writew(ctlr, &priv->regs->ctlr);
|
||||
for (i = 0; i < MAX_STR_READS; i++) {
|
||||
if (!(readw(&priv->regs->str) & RCAR_CAN_STR_RSTST))
|
||||
break;
|
||||
@@ -553,7 +560,7 @@ static void rcar_can_stop(struct net_device *ndev)
|
||||
|
||||
/* Go to (force) reset mode */
|
||||
ctlr = readw(&priv->regs->ctlr);
|
||||
ctlr |= RCAR_CAN_CTLR_CANM_FORCE_RESET;
|
||||
ctlr |= FIELD_PREP(RCAR_CAN_CTLR_CANM, RCAR_CAN_CTLR_CANM_FORCE_RESET);
|
||||
writew(ctlr, &priv->regs->ctlr);
|
||||
for (i = 0; i < MAX_STR_READS; i++) {
|
||||
if (readw(&priv->regs->str) & RCAR_CAN_STR_RSTST)
|
||||
@@ -847,7 +854,7 @@ static int rcar_can_suspend(struct device *dev)
|
||||
netif_device_detach(ndev);
|
||||
|
||||
ctlr = readw(&priv->regs->ctlr);
|
||||
ctlr |= RCAR_CAN_CTLR_CANM_HALT;
|
||||
ctlr |= FIELD_PREP(RCAR_CAN_CTLR_CANM, RCAR_CAN_CTLR_CANM_HALT);
|
||||
writew(ctlr, &priv->regs->ctlr);
|
||||
ctlr |= RCAR_CAN_CTLR_SLPM;
|
||||
writew(ctlr, &priv->regs->ctlr);
|
||||
|
||||
Reference in New Issue
Block a user