summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ieee802154/at86rf230.c52
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
657static void 655static 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
1267at86rf230_set_frame_retries(struct ieee802154_hw *hw, s8 retries) 1250at86rf230_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
1281static int 1257static int