26
26
27
27
/* MRF24J40 Short Address Registers */
28
28
#define REG_RXMCR 0x00 /* Receive MAC control */
29
+ #define BIT_PROMI BIT(0)
30
+ #define BIT_ERRPKT BIT(1)
31
+ #define BIT_NOACKRSP BIT(5)
32
+ #define BIT_PANCOORD BIT(3)
33
+
29
34
#define REG_PANIDL 0x01 /* PAN ID (low) */
30
35
#define REG_PANIDH 0x02 /* PAN ID (high) */
31
36
#define REG_SADRL 0x03 /* Short address (low) */
41
46
#define REG_RXFLUSH 0x0D
42
47
#define REG_ORDER 0x10
43
48
#define REG_TXMCR 0x11 /* Transmit MAC control */
49
+ #define TXMCR_MIN_BE_SHIFT 3
50
+ #define TXMCR_MIN_BE_MASK 0x18
51
+ #define TXMCR_CSMA_RETRIES_SHIFT 0
52
+ #define TXMCR_CSMA_RETRIES_MASK 0x07
53
+
44
54
#define REG_ACKTMOUT 0x12
45
55
#define REG_ESLOTG1 0x13
46
56
#define REG_SYMTICKL 0x14
50
60
#define REG_PACON2 0x18 /* Power Amplifier Control */
51
61
#define REG_TXBCON0 0x1A
52
62
#define REG_TXNCON 0x1B /* Transmit Normal FIFO Control */
63
+ #define BIT_TXNTRIG BIT(0)
64
+ #define BIT_TXNACKREQ BIT(2)
65
+
53
66
#define REG_TXG1CON 0x1C
54
67
#define REG_TXG2CON 0x1D
55
68
#define REG_ESLOTG23 0x1E
70
83
#define REG_TXSTBL 0x2E /* TX Stabilization */
71
84
#define REG_RXSR 0x30
72
85
#define REG_INTSTAT 0x31 /* Interrupt Status */
86
+ #define BIT_TXNIF BIT(0)
87
+ #define BIT_RXIF BIT(3)
88
+
73
89
#define REG_INTCON 0x32 /* Interrupt Control */
90
+ #define BIT_TXNIE BIT(0)
91
+ #define BIT_RXIE BIT(3)
92
+
74
93
#define REG_GPIO 0x33 /* GPIO */
75
94
#define REG_TRISGPIO 0x34 /* GPIO direction */
76
95
#define REG_SLPACK 0x35
77
96
#define REG_RFCTL 0x36 /* RF Control Mode Register */
97
+ #define BIT_RFRST BIT(2)
98
+
78
99
#define REG_SECCR2 0x37
79
100
#define REG_BBREG0 0x38
80
101
#define REG_BBREG1 0x39 /* Baseband Registers */
102
+ #define BIT_RXDECINV BIT(2)
103
+
81
104
#define REG_BBREG2 0x3A /* */
105
+ #define BBREG2_CCA_MODE_SHIFT 6
106
+ #define BBREG2_CCA_MODE_MASK 0xc0
107
+
82
108
#define REG_BBREG3 0x3B
83
109
#define REG_BBREG4 0x3C
84
110
#define REG_BBREG6 0x3E /* */
85
111
#define REG_CCAEDTH 0x3F /* Energy Detection Threshold */
86
112
87
113
/* MRF24J40 Long Address Registers */
88
114
#define REG_RFCON0 0x200 /* RF Control Registers */
115
+ #define RFCON0_CH_SHIFT 4
116
+ #define RFCON0_CH_MASK 0xf0
117
+ #define RFOPT_RECOMMEND 3
118
+
89
119
#define REG_RFCON1 0x201
90
120
#define REG_RFCON2 0x202
91
121
#define REG_RFCON3 0x203
122
+
123
+ #define TXPWRL_MASK 0xc0
124
+ #define TXPWRL_SHIFT 6
125
+ #define TXPWRL_30 0x3
126
+ #define TXPWRL_20 0x2
127
+ #define TXPWRL_10 0x1
128
+ #define TXPWRL_0 0x0
129
+
130
+ #define TXPWRS_MASK 0x38
131
+ #define TXPWRS_SHIFT 3
132
+ #define TXPWRS_6_3 0x7
133
+ #define TXPWRS_4_9 0x6
134
+ #define TXPWRS_3_7 0x5
135
+ #define TXPWRS_2_8 0x4
136
+ #define TXPWRS_1_9 0x3
137
+ #define TXPWRS_1_2 0x2
138
+ #define TXPWRS_0_5 0x1
139
+ #define TXPWRS_0 0x0
140
+
92
141
#define REG_RFCON5 0x205
93
142
#define REG_RFCON6 0x206
94
143
#define REG_RFCON7 0x207
99
148
#define REG_RFSTATE 0x20F
100
149
#define REG_RSSI 0x210
101
150
#define REG_SLPCON0 0x211 /* Sleep Clock Control Registers */
151
+ #define BIT_INTEDGE BIT(1)
152
+
102
153
#define REG_SLPCON1 0x220
103
154
#define REG_WAKETIMEL 0x222 /* Wake-up Time Match Value Low */
104
155
#define REG_WAKETIMEH 0x223 /* Wake-up Time Match Value High */
@@ -493,11 +544,11 @@ static void write_tx_buf_complete(void *context)
493
544
{
494
545
struct mrf24j40 * devrec = context ;
495
546
__le16 fc = ieee802154_get_fc_from_skb (devrec -> tx_skb );
496
- u8 val = 0x01 ;
547
+ u8 val = BIT_TXNTRIG ;
497
548
int ret ;
498
549
499
550
if (ieee802154_is_ackreq (fc ))
500
- val |= 0x04 ;
551
+ val |= BIT_TXNACKREQ ;
501
552
502
553
devrec -> tx_post_msg .complete = NULL ;
503
554
devrec -> tx_post_buf [0 ] = MRF24J40_WRITESHORT (REG_TXNCON );
@@ -564,7 +615,7 @@ static int mrf24j40_start(struct ieee802154_hw *hw)
564
615
565
616
/* Clear TXNIE and RXIE. Enable interrupts */
566
617
return regmap_update_bits (devrec -> regmap_short , REG_INTCON ,
567
- 0x01 | 0x08 , 0x00 );
618
+ BIT_TXNIE | BIT_RXIE , 0 );
568
619
}
569
620
570
621
static void mrf24j40_stop (struct ieee802154_hw * hw )
@@ -574,8 +625,8 @@ static void mrf24j40_stop(struct ieee802154_hw *hw)
574
625
dev_dbg (printdev (devrec ), "stop\n" );
575
626
576
627
/* Set TXNIE and RXIE. Disable Interrupts */
577
- regmap_update_bits (devrec -> regmap_short , REG_INTCON , 0x01 | 0x08 ,
578
- 0x01 | 0x08 );
628
+ regmap_update_bits (devrec -> regmap_short , REG_INTCON ,
629
+ BIT_TXNIE | BIT_TXNIE , BIT_TXNIE | BIT_TXNIE );
579
630
}
580
631
581
632
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
642
WARN_ON (channel > MRF24J40_CHAN_MAX );
592
643
593
644
/* Set Channel TODO */
594
- val = (channel - 11 ) << 4 | 0x03 ;
595
- ret = regmap_update_bits (devrec -> regmap_long , REG_RFCON0 , 0xf0 , val );
645
+ val = (channel - 11 ) << RFCON0_CH_SHIFT | RFOPT_RECOMMEND ;
646
+ ret = regmap_update_bits (devrec -> regmap_long , REG_RFCON0 ,
647
+ RFCON0_CH_MASK , val );
596
648
if (ret )
597
649
return ret ;
598
650
599
651
/* RF Reset */
600
- ret = regmap_update_bits (devrec -> regmap_short , REG_RFCTL , 0x04 , 0x04 );
652
+ ret = regmap_update_bits (devrec -> regmap_short , REG_RFCTL , BIT_RFRST ,
653
+ BIT_RFRST );
601
654
if (ret )
602
655
return ret ;
603
656
604
- ret = regmap_update_bits (devrec -> regmap_short , REG_RFCTL , 0x04 , 0x00 );
657
+ ret = regmap_update_bits (devrec -> regmap_short , REG_RFCTL , BIT_RFRST , 0 );
605
658
if (!ret )
606
659
udelay (SET_CHANNEL_DELAY_US ); /* per datasheet */
607
660
@@ -664,11 +717,11 @@ static int mrf24j40_filter(struct ieee802154_hw *hw,
664
717
int ret ;
665
718
666
719
if (filt -> pan_coord )
667
- val = 0x8 ;
720
+ val = BIT_PANCOORD ;
668
721
else
669
- val = 0x0 ;
670
- ret = regmap_update_bits (devrec -> regmap_short , REG_RXMCR , 0x8 ,
671
- val );
722
+ val = 0 ;
723
+ ret = regmap_update_bits (devrec -> regmap_short , REG_RXMCR ,
724
+ BIT_PANCOORD , val );
672
725
if (ret )
673
726
return ret ;
674
727
@@ -772,7 +825,7 @@ static int mrf24j40_handle_rx(struct mrf24j40 *devrec)
772
825
devrec -> rx_msg .complete = mrf24j40_handle_rx_read_len ;
773
826
devrec -> rx_trx .len = 2 ;
774
827
devrec -> rx_buf [0 ] = MRF24J40_WRITESHORT (REG_BBREG1 );
775
- devrec -> rx_buf [1 ] = 0x04 ; /* SET RXDECINV */
828
+ devrec -> rx_buf [1 ] = BIT_RXDECINV ; /* SET RXDECINV */
776
829
777
830
return spi_async (devrec -> spi , & devrec -> rx_msg );
778
831
}
@@ -785,11 +838,13 @@ mrf24j40_csma_params(struct ieee802154_hw *hw, u8 min_be, u8 max_be,
785
838
u8 val ;
786
839
787
840
/* min_be */
788
- val = min_be << 3 ;
841
+ val = min_be << TXMCR_MIN_BE_SHIFT ;
789
842
/* csma backoffs */
790
- val |= retries ;
843
+ val |= retries << TXMCR_CSMA_RETRIES_SHIFT ;
791
844
792
- return regmap_update_bits (devrec -> regmap_short , REG_TXMCR , 0x1f , val );
845
+ return regmap_update_bits (devrec -> regmap_short , REG_TXMCR ,
846
+ TXMCR_MIN_BE_MASK | TXMCR_CSMA_RETRIES_MASK ,
847
+ val );
793
848
}
794
849
795
850
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
874
return - EINVAL ;
820
875
}
821
876
822
- return regmap_update_bits (devrec -> regmap_short , REG_BBREG2 , 0xc0 ,
823
- val << 6 );
877
+ return regmap_update_bits (devrec -> regmap_short , REG_BBREG2 ,
878
+ BBREG2_CCA_MODE_MASK ,
879
+ val << BBREG2_CCA_MODE_SHIFT );
824
880
}
825
881
826
882
/* array for representing ed levels */
@@ -878,50 +934,52 @@ static int mrf24j40_set_txpower(struct ieee802154_hw *hw, s32 mbm)
878
934
u8 val ;
879
935
880
936
if (0 >= mbm && mbm > -1000 ) {
881
- val = 0 ;
937
+ val = TXPWRL_0 << TXPWRL_SHIFT ;
882
938
small_scale = mbm ;
883
939
} else if (-1000 >= mbm && mbm > -2000 ) {
884
- val = 0x40 ;
940
+ val = TXPWRL_10 << TXPWRL_SHIFT ;
885
941
small_scale = mbm + 1000 ;
886
942
} else if (-2000 >= mbm && mbm > -3000 ) {
887
- val = 0x80 ;
943
+ val = TXPWRL_20 << TXPWRL_SHIFT ;
888
944
small_scale = mbm + 2000 ;
889
945
} else if (-3000 >= mbm && mbm > -4000 ) {
890
- val = 0xc0 ;
946
+ val = TXPWRL_30 << TXPWRL_SHIFT ;
891
947
small_scale = mbm + 3000 ;
892
948
} else {
893
949
return - EINVAL ;
894
950
}
895
951
896
952
switch (small_scale ) {
897
953
case 0 :
954
+ val |= (TXPWRS_0 << TXPWRS_SHIFT );
898
955
break ;
899
956
case -50 :
900
- val |= 0x08 ;
957
+ val |= ( TXPWRS_0_5 << TXPWRS_SHIFT ) ;
901
958
break ;
902
959
case -120 :
903
- val |= 0x10 ;
960
+ val |= ( TXPWRS_1_2 << TXPWRS_SHIFT ) ;
904
961
break ;
905
962
case -190 :
906
- val |= 0x18 ;
963
+ val |= ( TXPWRS_1_9 << TXPWRS_SHIFT ) ;
907
964
break ;
908
965
case -280 :
909
- val |= 0x20 ;
966
+ val |= ( TXPWRS_2_8 << TXPWRS_SHIFT ) ;
910
967
break ;
911
968
case -370 :
912
- val |= 0x28 ;
969
+ val |= ( TXPWRS_3_7 << TXPWRS_SHIFT ) ;
913
970
break ;
914
971
case -490 :
915
- val |= 0x30 ;
972
+ val |= ( TXPWRS_4_9 << TXPWRS_SHIFT ) ;
916
973
break ;
917
974
case -630 :
918
- val |= 0x38 ;
975
+ val |= ( TXPWRS_6_3 << TXPWRS_SHIFT ) ;
919
976
break ;
920
977
default :
921
978
return - EINVAL ;
922
979
}
923
980
924
- return regmap_update_bits (devrec -> regmap_long , REG_RFCON3 , 0xf8 , val );
981
+ return regmap_update_bits (devrec -> regmap_long , REG_RFCON3 ,
982
+ TXPWRL_MASK | TXPWRS_MASK , val );
925
983
}
926
984
927
985
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
989
932
990
if (on ) {
933
991
/* set PROMI, ERRPKT and NOACKRSP */
934
- ret = regmap_update_bits (devrec -> regmap_short , REG_RXMCR , 0x23 ,
935
- 0x23 );
992
+ ret = regmap_update_bits (devrec -> regmap_short , REG_RXMCR ,
993
+ BIT_PROMI | BIT_ERRPKT | BIT_NOACKRSP ,
994
+ BIT_PROMI | BIT_ERRPKT | BIT_NOACKRSP );
936
995
} else {
937
996
/* clear PROMI, ERRPKT and NOACKRSP */
938
- ret = regmap_update_bits (devrec -> regmap_short , REG_RXMCR , 0x23 ,
939
- 0x00 );
997
+ ret = regmap_update_bits (devrec -> regmap_short , REG_RXMCR ,
998
+ BIT_PROMI | BIT_ERRPKT | BIT_NOACKRSP ,
999
+ 0 );
940
1000
}
941
1001
942
1002
return ret ;
@@ -965,11 +1025,11 @@ static void mrf24j40_intstat_complete(void *context)
965
1025
enable_irq (devrec -> spi -> irq );
966
1026
967
1027
/* Check for TX complete */
968
- if (intstat & 0x1 )
1028
+ if (intstat & BIT_TXNIF )
969
1029
ieee802154_xmit_complete (devrec -> hw , devrec -> tx_skb , false);
970
1030
971
1031
/* Check for Rx */
972
- if (intstat & 0x8 )
1032
+ if (intstat & BIT_RXIF )
973
1033
mrf24j40_handle_rx (devrec );
974
1034
}
975
1035
@@ -1095,7 +1155,7 @@ static int mrf24j40_hw_init(struct mrf24j40 *devrec)
1095
1155
case IRQ_TYPE_LEVEL_HIGH :
1096
1156
/* set interrupt polarity to rising */
1097
1157
ret = regmap_update_bits (devrec -> regmap_long , REG_SLPCON0 ,
1098
- 0x02 , 0x02 );
1158
+ BIT_INTEDGE , BIT_INTEDGE );
1099
1159
if (ret )
1100
1160
goto err_ret ;
1101
1161
break ;
0 commit comments