diff options
-rw-r--r-- | drivers/net/ieee802154/at86rf230.c | 52 |
1 files changed, 14 insertions, 38 deletions
diff --git a/drivers/net/ieee802154/at86rf230.c b/drivers/net/ieee802154/at86rf230.c index d0d5bf6cbb68..6422caac8d40 100644 --- a/drivers/net/ieee802154/at86rf230.c +++ b/drivers/net/ieee802154/at86rf230.c | |||
@@ -97,9 +97,7 @@ struct at86rf230_local { | |||
97 | 97 | ||
98 | struct at86rf230_state_change irq; | 98 | struct at86rf230_state_change irq; |
99 | 99 | ||
100 | bool tx_aret; | ||
101 | unsigned long cal_timeout; | 100 | unsigned long cal_timeout; |
102 | s8 max_frame_retries; | ||
103 | bool is_tx; | 101 | bool is_tx; |
104 | bool is_tx_from_off; | 102 | bool is_tx_from_off; |
105 | u8 tx_retry; | 103 | u8 tx_retry; |
@@ -651,7 +649,7 @@ at86rf230_tx_complete(void *context) | |||
651 | 649 | ||
652 | enable_irq(ctx->irq); | 650 | enable_irq(ctx->irq); |
653 | 651 | ||
654 | ieee802154_xmit_complete(lp->hw, lp->tx_skb, !lp->tx_aret); | 652 | ieee802154_xmit_complete(lp->hw, lp->tx_skb, false); |
655 | } | 653 | } |
656 | 654 | ||
657 | static void | 655 | static void |
@@ -760,17 +758,10 @@ at86rf230_irq_trx_end(struct at86rf230_local *lp) | |||
760 | { | 758 | { |
761 | if (lp->is_tx) { | 759 | if (lp->is_tx) { |
762 | lp->is_tx = 0; | 760 | lp->is_tx = 0; |
763 | 761 | at86rf230_async_state_change(lp, &lp->irq, | |
764 | if (lp->tx_aret) | 762 | STATE_FORCE_TX_ON, |
765 | at86rf230_async_state_change(lp, &lp->irq, | 763 | at86rf230_tx_trac_status, |
766 | STATE_FORCE_TX_ON, | 764 | true); |
767 | at86rf230_tx_trac_status, | ||
768 | true); | ||
769 | else | ||
770 | at86rf230_async_state_change(lp, &lp->irq, | ||
771 | STATE_RX_AACK_ON, | ||
772 | at86rf230_tx_complete, | ||
773 | true); | ||
774 | } else { | 765 | } else { |
775 | at86rf230_async_read_reg(lp, RG_TRX_STATE, &lp->irq, | 766 | at86rf230_async_read_reg(lp, RG_TRX_STATE, &lp->irq, |
776 | at86rf230_rx_trac_check, true); | 767 | at86rf230_rx_trac_check, true); |
@@ -876,24 +867,16 @@ at86rf230_xmit_start(void *context) | |||
876 | struct at86rf230_state_change *ctx = context; | 867 | struct at86rf230_state_change *ctx = context; |
877 | struct at86rf230_local *lp = ctx->lp; | 868 | struct at86rf230_local *lp = ctx->lp; |
878 | 869 | ||
879 | /* In ARET mode we need to go into STATE_TX_ARET_ON after we | 870 | /* check if we change from off state */ |
880 | * are in STATE_TX_ON. The pfad differs here, so we change | 871 | if (lp->is_tx_from_off) { |
881 | * the complete handler. | 872 | lp->is_tx_from_off = false; |
882 | */ | 873 | at86rf230_async_state_change(lp, ctx, STATE_TX_ARET_ON, |
883 | if (lp->tx_aret) { | 874 | at86rf230_write_frame, |
884 | if (lp->is_tx_from_off) { | 875 | false); |
885 | lp->is_tx_from_off = false; | ||
886 | at86rf230_async_state_change(lp, ctx, STATE_TX_ARET_ON, | ||
887 | at86rf230_write_frame, | ||
888 | false); | ||
889 | } else { | ||
890 | at86rf230_async_state_change(lp, ctx, STATE_TX_ON, | ||
891 | at86rf230_xmit_tx_on, | ||
892 | false); | ||
893 | } | ||
894 | } else { | 876 | } else { |
895 | at86rf230_async_state_change(lp, ctx, STATE_TX_ON, | 877 | at86rf230_async_state_change(lp, ctx, STATE_TX_ON, |
896 | at86rf230_write_frame, false); | 878 | at86rf230_xmit_tx_on, |
879 | false); | ||
897 | } | 880 | } |
898 | } | 881 | } |
899 | 882 | ||
@@ -1267,15 +1250,8 @@ static int | |||
1267 | at86rf230_set_frame_retries(struct ieee802154_hw *hw, s8 retries) | 1250 | at86rf230_set_frame_retries(struct ieee802154_hw *hw, s8 retries) |
1268 | { | 1251 | { |
1269 | struct at86rf230_local *lp = hw->priv; | 1252 | struct at86rf230_local *lp = hw->priv; |
1270 | int rc = 0; | ||
1271 | |||
1272 | lp->tx_aret = retries >= 0; | ||
1273 | lp->max_frame_retries = retries; | ||
1274 | 1253 | ||
1275 | if (retries >= 0) | 1254 | return at86rf230_write_subreg(lp, SR_MAX_FRAME_RETRIES, retries); |
1276 | rc = at86rf230_write_subreg(lp, SR_MAX_FRAME_RETRIES, retries); | ||
1277 | |||
1278 | return rc; | ||
1279 | } | 1255 | } |
1280 | 1256 | ||
1281 | static int | 1257 | static int |