This patch does a different aret mode handling. We will drop the max_frame_retries "-1" value and check on the ack request bit while xmit. If it's set we doing transmit in aret mode. If it's not set we doing a transmit in normal tx mode. This allows a mixed aret and non aret mode while interface is up and doesn't depends on the max_frame_retries value inside the mib. Signed-off-by: Alexander Aring <alex.aring@xxxxxxxxx> --- drivers/net/ieee802154/at86rf230.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/net/ieee802154/at86rf230.c b/drivers/net/ieee802154/at86rf230.c index f7bd9f3..3aac100 100644 --- a/drivers/net/ieee802154/at86rf230.c +++ b/drivers/net/ieee802154/at86rf230.c @@ -99,7 +99,6 @@ struct at86rf230_local { bool tx_aret; unsigned long cal_timeout; - s8 max_frame_retries; bool is_tx; bool is_tx_from_off; u8 tx_retry; @@ -900,10 +899,17 @@ at86rf230_xmit(struct ieee802154_hw *hw, struct sk_buff *skb) { struct at86rf230_local *lp = hw->priv; struct at86rf230_state_change *ctx = &lp->tx; + __le16 fc; lp->tx_skb = skb; lp->tx_retry = 0; + fc = ieee802154_get_fc_from_skb(skb); + if (ieee802154_is_ackreq(fc)) + lp->tx_aret = true; + else + lp->tx_aret = false; + /* After 5 minutes in PLL and the same frequency we run again the * calibration loops which is recommended by at86rf2xx datasheets. * @@ -1267,9 +1273,6 @@ at86rf230_set_frame_retries(struct ieee802154_hw *hw, s8 retries) struct at86rf230_local *lp = hw->priv; int rc = 0; - lp->tx_aret = retries >= 0; - lp->max_frame_retries = retries; - if (retries >= 0) rc = at86rf230_write_subreg(lp, SR_MAX_FRAME_RETRIES, retries); -- 2.4.6 -- To unsubscribe from this list: send the line "unsubscribe linux-wpan" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html