]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
can: rcar_can: CTLR bitfield conversion
authorGeert Uytterhoeven <geert+renesas@glider.be>
Fri, 22 Aug 2025 10:17:07 +0000 (12:17 +0200)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Fri, 19 Sep 2025 17:25:15 +0000 (19:25 +0200)
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>
drivers/net/can/rcar/rcar_can.c

index 7b94224bbc9b36fa4adf41fab23f62f909f52999..8b4356fcd7d2fddb74c1fa9b42cee665c307b0e4 100644 (file)
@@ -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);