Commit 7d840545 authored by Alexander Aring's avatar Alexander Aring Committed by Marcel Holtmann

mrf24j40: replace magic numbers

This patch replaces some magic numbers with defines for register bits,
mask and shifts.
Signed-off-by: default avatarAlexander Aring <alex.aring@gmail.com>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent afaf7fde
...@@ -26,6 +26,11 @@ ...@@ -26,6 +26,11 @@
/* MRF24J40 Short Address Registers */ /* MRF24J40 Short Address Registers */
#define REG_RXMCR 0x00 /* Receive MAC control */ #define REG_RXMCR 0x00 /* Receive MAC control */
#define BIT_PROMI BIT(0)
#define BIT_ERRPKT BIT(1)
#define BIT_NOACKRSP BIT(5)
#define BIT_PANCOORD BIT(3)
#define REG_PANIDL 0x01 /* PAN ID (low) */ #define REG_PANIDL 0x01 /* PAN ID (low) */
#define REG_PANIDH 0x02 /* PAN ID (high) */ #define REG_PANIDH 0x02 /* PAN ID (high) */
#define REG_SADRL 0x03 /* Short address (low) */ #define REG_SADRL 0x03 /* Short address (low) */
...@@ -41,6 +46,11 @@ ...@@ -41,6 +46,11 @@
#define REG_RXFLUSH 0x0D #define REG_RXFLUSH 0x0D
#define REG_ORDER 0x10 #define REG_ORDER 0x10
#define REG_TXMCR 0x11 /* Transmit MAC control */ #define REG_TXMCR 0x11 /* Transmit MAC control */
#define TXMCR_MIN_BE_SHIFT 3
#define TXMCR_MIN_BE_MASK 0x18
#define TXMCR_CSMA_RETRIES_SHIFT 0
#define TXMCR_CSMA_RETRIES_MASK 0x07
#define REG_ACKTMOUT 0x12 #define REG_ACKTMOUT 0x12
#define REG_ESLOTG1 0x13 #define REG_ESLOTG1 0x13
#define REG_SYMTICKL 0x14 #define REG_SYMTICKL 0x14
...@@ -50,6 +60,9 @@ ...@@ -50,6 +60,9 @@
#define REG_PACON2 0x18 /* Power Amplifier Control */ #define REG_PACON2 0x18 /* Power Amplifier Control */
#define REG_TXBCON0 0x1A #define REG_TXBCON0 0x1A
#define REG_TXNCON 0x1B /* Transmit Normal FIFO Control */ #define REG_TXNCON 0x1B /* Transmit Normal FIFO Control */
#define BIT_TXNTRIG BIT(0)
#define BIT_TXNACKREQ BIT(2)
#define REG_TXG1CON 0x1C #define REG_TXG1CON 0x1C
#define REG_TXG2CON 0x1D #define REG_TXG2CON 0x1D
#define REG_ESLOTG23 0x1E #define REG_ESLOTG23 0x1E
...@@ -70,15 +83,28 @@ ...@@ -70,15 +83,28 @@
#define REG_TXSTBL 0x2E /* TX Stabilization */ #define REG_TXSTBL 0x2E /* TX Stabilization */
#define REG_RXSR 0x30 #define REG_RXSR 0x30
#define REG_INTSTAT 0x31 /* Interrupt Status */ #define REG_INTSTAT 0x31 /* Interrupt Status */
#define BIT_TXNIF BIT(0)
#define BIT_RXIF BIT(3)
#define REG_INTCON 0x32 /* Interrupt Control */ #define REG_INTCON 0x32 /* Interrupt Control */
#define BIT_TXNIE BIT(0)
#define BIT_RXIE BIT(3)
#define REG_GPIO 0x33 /* GPIO */ #define REG_GPIO 0x33 /* GPIO */
#define REG_TRISGPIO 0x34 /* GPIO direction */ #define REG_TRISGPIO 0x34 /* GPIO direction */
#define REG_SLPACK 0x35 #define REG_SLPACK 0x35
#define REG_RFCTL 0x36 /* RF Control Mode Register */ #define REG_RFCTL 0x36 /* RF Control Mode Register */
#define BIT_RFRST BIT(2)
#define REG_SECCR2 0x37 #define REG_SECCR2 0x37
#define REG_BBREG0 0x38 #define REG_BBREG0 0x38
#define REG_BBREG1 0x39 /* Baseband Registers */ #define REG_BBREG1 0x39 /* Baseband Registers */
#define BIT_RXDECINV BIT(2)
#define REG_BBREG2 0x3A /* */ #define REG_BBREG2 0x3A /* */
#define BBREG2_CCA_MODE_SHIFT 6
#define BBREG2_CCA_MODE_MASK 0xc0
#define REG_BBREG3 0x3B #define REG_BBREG3 0x3B
#define REG_BBREG4 0x3C #define REG_BBREG4 0x3C
#define REG_BBREG6 0x3E /* */ #define REG_BBREG6 0x3E /* */
...@@ -86,9 +112,32 @@ ...@@ -86,9 +112,32 @@
/* MRF24J40 Long Address Registers */ /* MRF24J40 Long Address Registers */
#define REG_RFCON0 0x200 /* RF Control Registers */ #define REG_RFCON0 0x200 /* RF Control Registers */
#define RFCON0_CH_SHIFT 4
#define RFCON0_CH_MASK 0xf0
#define RFOPT_RECOMMEND 3
#define REG_RFCON1 0x201 #define REG_RFCON1 0x201
#define REG_RFCON2 0x202 #define REG_RFCON2 0x202
#define REG_RFCON3 0x203 #define REG_RFCON3 0x203
#define TXPWRL_MASK 0xc0
#define TXPWRL_SHIFT 6
#define TXPWRL_30 0x3
#define TXPWRL_20 0x2
#define TXPWRL_10 0x1
#define TXPWRL_0 0x0
#define TXPWRS_MASK 0x38
#define TXPWRS_SHIFT 3
#define TXPWRS_6_3 0x7
#define TXPWRS_4_9 0x6
#define TXPWRS_3_7 0x5
#define TXPWRS_2_8 0x4
#define TXPWRS_1_9 0x3
#define TXPWRS_1_2 0x2
#define TXPWRS_0_5 0x1
#define TXPWRS_0 0x0
#define REG_RFCON5 0x205 #define REG_RFCON5 0x205
#define REG_RFCON6 0x206 #define REG_RFCON6 0x206
#define REG_RFCON7 0x207 #define REG_RFCON7 0x207
...@@ -99,6 +148,8 @@ ...@@ -99,6 +148,8 @@
#define REG_RFSTATE 0x20F #define REG_RFSTATE 0x20F
#define REG_RSSI 0x210 #define REG_RSSI 0x210
#define REG_SLPCON0 0x211 /* Sleep Clock Control Registers */ #define REG_SLPCON0 0x211 /* Sleep Clock Control Registers */
#define BIT_INTEDGE BIT(1)
#define REG_SLPCON1 0x220 #define REG_SLPCON1 0x220
#define REG_WAKETIMEL 0x222 /* Wake-up Time Match Value Low */ #define REG_WAKETIMEL 0x222 /* Wake-up Time Match Value Low */
#define REG_WAKETIMEH 0x223 /* Wake-up Time Match Value High */ #define REG_WAKETIMEH 0x223 /* Wake-up Time Match Value High */
...@@ -493,11 +544,11 @@ static void write_tx_buf_complete(void *context) ...@@ -493,11 +544,11 @@ static void write_tx_buf_complete(void *context)
{ {
struct mrf24j40 *devrec = context; struct mrf24j40 *devrec = context;
__le16 fc = ieee802154_get_fc_from_skb(devrec->tx_skb); __le16 fc = ieee802154_get_fc_from_skb(devrec->tx_skb);
u8 val = 0x01; u8 val = BIT_TXNTRIG;
int ret; int ret;
if (ieee802154_is_ackreq(fc)) if (ieee802154_is_ackreq(fc))
val |= 0x04; val |= BIT_TXNACKREQ;
devrec->tx_post_msg.complete = NULL; devrec->tx_post_msg.complete = NULL;
devrec->tx_post_buf[0] = MRF24J40_WRITESHORT(REG_TXNCON); devrec->tx_post_buf[0] = MRF24J40_WRITESHORT(REG_TXNCON);
...@@ -564,7 +615,7 @@ static int mrf24j40_start(struct ieee802154_hw *hw) ...@@ -564,7 +615,7 @@ static int mrf24j40_start(struct ieee802154_hw *hw)
/* Clear TXNIE and RXIE. Enable interrupts */ /* Clear TXNIE and RXIE. Enable interrupts */
return regmap_update_bits(devrec->regmap_short, REG_INTCON, return regmap_update_bits(devrec->regmap_short, REG_INTCON,
0x01 | 0x08, 0x00); BIT_TXNIE | BIT_RXIE, 0);
} }
static void mrf24j40_stop(struct ieee802154_hw *hw) static void mrf24j40_stop(struct ieee802154_hw *hw)
...@@ -574,8 +625,8 @@ static void mrf24j40_stop(struct ieee802154_hw *hw) ...@@ -574,8 +625,8 @@ static void mrf24j40_stop(struct ieee802154_hw *hw)
dev_dbg(printdev(devrec), "stop\n"); dev_dbg(printdev(devrec), "stop\n");
/* Set TXNIE and RXIE. Disable Interrupts */ /* Set TXNIE and RXIE. Disable Interrupts */
regmap_update_bits(devrec->regmap_short, REG_INTCON, 0x01 | 0x08, regmap_update_bits(devrec->regmap_short, REG_INTCON,
0x01 | 0x08); BIT_TXNIE | BIT_TXNIE, BIT_TXNIE | BIT_TXNIE);
} }
static int mrf24j40_set_channel(struct ieee802154_hw *hw, u8 page, u8 channel) static int mrf24j40_set_channel(struct ieee802154_hw *hw, u8 page, u8 channel)
...@@ -591,17 +642,19 @@ static int mrf24j40_set_channel(struct ieee802154_hw *hw, u8 page, u8 channel) ...@@ -591,17 +642,19 @@ static int mrf24j40_set_channel(struct ieee802154_hw *hw, u8 page, u8 channel)
WARN_ON(channel > MRF24J40_CHAN_MAX); WARN_ON(channel > MRF24J40_CHAN_MAX);
/* Set Channel TODO */ /* Set Channel TODO */
val = (channel-11) << 4 | 0x03; val = (channel - 11) << RFCON0_CH_SHIFT | RFOPT_RECOMMEND;
ret = regmap_update_bits(devrec->regmap_long, REG_RFCON0, 0xf0, val); ret = regmap_update_bits(devrec->regmap_long, REG_RFCON0,
RFCON0_CH_MASK, val);
if (ret) if (ret)
return ret; return ret;
/* RF Reset */ /* RF Reset */
ret = regmap_update_bits(devrec->regmap_short, REG_RFCTL, 0x04, 0x04); ret = regmap_update_bits(devrec->regmap_short, REG_RFCTL, BIT_RFRST,
BIT_RFRST);
if (ret) if (ret)
return ret; return ret;
ret = regmap_update_bits(devrec->regmap_short, REG_RFCTL, 0x04, 0x00); ret = regmap_update_bits(devrec->regmap_short, REG_RFCTL, BIT_RFRST, 0);
if (!ret) if (!ret)
udelay(SET_CHANNEL_DELAY_US); /* per datasheet */ udelay(SET_CHANNEL_DELAY_US); /* per datasheet */
...@@ -664,11 +717,11 @@ static int mrf24j40_filter(struct ieee802154_hw *hw, ...@@ -664,11 +717,11 @@ static int mrf24j40_filter(struct ieee802154_hw *hw,
int ret; int ret;
if (filt->pan_coord) if (filt->pan_coord)
val = 0x8; val = BIT_PANCOORD;
else else
val = 0x0; val = 0;
ret = regmap_update_bits(devrec->regmap_short, REG_RXMCR, 0x8, ret = regmap_update_bits(devrec->regmap_short, REG_RXMCR,
val); BIT_PANCOORD, val);
if (ret) if (ret)
return ret; return ret;
...@@ -772,7 +825,7 @@ static int mrf24j40_handle_rx(struct mrf24j40 *devrec) ...@@ -772,7 +825,7 @@ static int mrf24j40_handle_rx(struct mrf24j40 *devrec)
devrec->rx_msg.complete = mrf24j40_handle_rx_read_len; devrec->rx_msg.complete = mrf24j40_handle_rx_read_len;
devrec->rx_trx.len = 2; devrec->rx_trx.len = 2;
devrec->rx_buf[0] = MRF24J40_WRITESHORT(REG_BBREG1); devrec->rx_buf[0] = MRF24J40_WRITESHORT(REG_BBREG1);
devrec->rx_buf[1] = 0x04; /* SET RXDECINV */ devrec->rx_buf[1] = BIT_RXDECINV; /* SET RXDECINV */
return spi_async(devrec->spi, &devrec->rx_msg); return spi_async(devrec->spi, &devrec->rx_msg);
} }
...@@ -785,11 +838,13 @@ mrf24j40_csma_params(struct ieee802154_hw *hw, u8 min_be, u8 max_be, ...@@ -785,11 +838,13 @@ mrf24j40_csma_params(struct ieee802154_hw *hw, u8 min_be, u8 max_be,
u8 val; u8 val;
/* min_be */ /* min_be */
val = min_be << 3; val = min_be << TXMCR_MIN_BE_SHIFT;
/* csma backoffs */ /* csma backoffs */
val |= retries; val |= retries << TXMCR_CSMA_RETRIES_SHIFT;
return regmap_update_bits(devrec->regmap_short, REG_TXMCR, 0x1f, val); return regmap_update_bits(devrec->regmap_short, REG_TXMCR,
TXMCR_MIN_BE_MASK | TXMCR_CSMA_RETRIES_MASK,
val);
} }
static int mrf24j40_set_cca_mode(struct ieee802154_hw *hw, static int mrf24j40_set_cca_mode(struct ieee802154_hw *hw,
...@@ -819,8 +874,9 @@ static int mrf24j40_set_cca_mode(struct ieee802154_hw *hw, ...@@ -819,8 +874,9 @@ static int mrf24j40_set_cca_mode(struct ieee802154_hw *hw,
return -EINVAL; return -EINVAL;
} }
return regmap_update_bits(devrec->regmap_short, REG_BBREG2, 0xc0, return regmap_update_bits(devrec->regmap_short, REG_BBREG2,
val << 6); BBREG2_CCA_MODE_MASK,
val << BBREG2_CCA_MODE_SHIFT);
} }
/* array for representing ed levels */ /* array for representing ed levels */
...@@ -878,16 +934,16 @@ static int mrf24j40_set_txpower(struct ieee802154_hw *hw, s32 mbm) ...@@ -878,16 +934,16 @@ static int mrf24j40_set_txpower(struct ieee802154_hw *hw, s32 mbm)
u8 val; u8 val;
if (0 >= mbm && mbm > -1000) { if (0 >= mbm && mbm > -1000) {
val = 0; val = TXPWRL_0 << TXPWRL_SHIFT;
small_scale = mbm; small_scale = mbm;
} else if (-1000 >= mbm && mbm > -2000) { } else if (-1000 >= mbm && mbm > -2000) {
val = 0x40; val = TXPWRL_10 << TXPWRL_SHIFT;
small_scale = mbm + 1000; small_scale = mbm + 1000;
} else if (-2000 >= mbm && mbm > -3000) { } else if (-2000 >= mbm && mbm > -3000) {
val = 0x80; val = TXPWRL_20 << TXPWRL_SHIFT;
small_scale = mbm + 2000; small_scale = mbm + 2000;
} else if (-3000 >= mbm && mbm > -4000) { } else if (-3000 >= mbm && mbm > -4000) {
val = 0xc0; val = TXPWRL_30 << TXPWRL_SHIFT;
small_scale = mbm + 3000; small_scale = mbm + 3000;
} else { } else {
return -EINVAL; return -EINVAL;
...@@ -895,33 +951,35 @@ static int mrf24j40_set_txpower(struct ieee802154_hw *hw, s32 mbm) ...@@ -895,33 +951,35 @@ static int mrf24j40_set_txpower(struct ieee802154_hw *hw, s32 mbm)
switch (small_scale) { switch (small_scale) {
case 0: case 0:
val |= (TXPWRS_0 << TXPWRS_SHIFT);
break; break;
case -50: case -50:
val |= 0x08; val |= (TXPWRS_0_5 << TXPWRS_SHIFT);
break; break;
case -120: case -120:
val |= 0x10; val |= (TXPWRS_1_2 << TXPWRS_SHIFT);
break; break;
case -190: case -190:
val |= 0x18; val |= (TXPWRS_1_9 << TXPWRS_SHIFT);
break; break;
case -280: case -280:
val |= 0x20; val |= (TXPWRS_2_8 << TXPWRS_SHIFT);
break; break;
case -370: case -370:
val |= 0x28; val |= (TXPWRS_3_7 << TXPWRS_SHIFT);
break; break;
case -490: case -490:
val |= 0x30; val |= (TXPWRS_4_9 << TXPWRS_SHIFT);
break; break;
case -630: case -630:
val |= 0x38; val |= (TXPWRS_6_3 << TXPWRS_SHIFT);
break; break;
default: default:
return -EINVAL; return -EINVAL;
} }
return regmap_update_bits(devrec->regmap_long, REG_RFCON3, 0xf8, val); return regmap_update_bits(devrec->regmap_long, REG_RFCON3,
TXPWRL_MASK | TXPWRS_MASK, val);
} }
static int mrf24j40_set_promiscuous_mode(struct ieee802154_hw *hw, bool on) static int mrf24j40_set_promiscuous_mode(struct ieee802154_hw *hw, bool on)
...@@ -931,12 +989,14 @@ static int mrf24j40_set_promiscuous_mode(struct ieee802154_hw *hw, bool on) ...@@ -931,12 +989,14 @@ static int mrf24j40_set_promiscuous_mode(struct ieee802154_hw *hw, bool on)
if (on) { if (on) {
/* set PROMI, ERRPKT and NOACKRSP */ /* set PROMI, ERRPKT and NOACKRSP */
ret = regmap_update_bits(devrec->regmap_short, REG_RXMCR, 0x23, ret = regmap_update_bits(devrec->regmap_short, REG_RXMCR,
0x23); BIT_PROMI | BIT_ERRPKT | BIT_NOACKRSP,
BIT_PROMI | BIT_ERRPKT | BIT_NOACKRSP);
} else { } else {
/* clear PROMI, ERRPKT and NOACKRSP */ /* clear PROMI, ERRPKT and NOACKRSP */
ret = regmap_update_bits(devrec->regmap_short, REG_RXMCR, 0x23, ret = regmap_update_bits(devrec->regmap_short, REG_RXMCR,
0x00); BIT_PROMI | BIT_ERRPKT | BIT_NOACKRSP,
0);
} }
return ret; return ret;
...@@ -965,11 +1025,11 @@ static void mrf24j40_intstat_complete(void *context) ...@@ -965,11 +1025,11 @@ static void mrf24j40_intstat_complete(void *context)
enable_irq(devrec->spi->irq); enable_irq(devrec->spi->irq);
/* Check for TX complete */ /* Check for TX complete */
if (intstat & 0x1) if (intstat & BIT_TXNIF)
ieee802154_xmit_complete(devrec->hw, devrec->tx_skb, false); ieee802154_xmit_complete(devrec->hw, devrec->tx_skb, false);
/* Check for Rx */ /* Check for Rx */
if (intstat & 0x8) if (intstat & BIT_RXIF)
mrf24j40_handle_rx(devrec); mrf24j40_handle_rx(devrec);
} }
...@@ -1095,7 +1155,7 @@ static int mrf24j40_hw_init(struct mrf24j40 *devrec) ...@@ -1095,7 +1155,7 @@ static int mrf24j40_hw_init(struct mrf24j40 *devrec)
case IRQ_TYPE_LEVEL_HIGH: case IRQ_TYPE_LEVEL_HIGH:
/* set interrupt polarity to rising */ /* set interrupt polarity to rising */
ret = regmap_update_bits(devrec->regmap_long, REG_SLPCON0, ret = regmap_update_bits(devrec->regmap_long, REG_SLPCON0,
0x02, 0x02); BIT_INTEDGE, BIT_INTEDGE);
if (ret) if (ret)
goto err_ret; goto err_ret;
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment