Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

at86rf230: interrupt tx with force trx_off

To abort a TX_ARET_BUSY state it's recommended to switch into TRX_OFF
state by doing STATE_TRX_FORCE_OFF. This patch will do always a TRX_OFF
state change when the transceiver stucks in any state. From TRX_OFF we
can switch to the states which are also possible by TX_ON state.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Reviewed-by: Stefan Schmidt <stefan@osg.samsung.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>

authored by

Alexander Aring and committed by
Marcel Holtmann
ed4a26b0 346ce4bb

+1 -9
+1 -9
drivers/net/ieee802154/at86rf230.c
··· 377 377 } 378 378 } 379 379 380 - static inline u8 at86rf230_state_to_force(u8 state) 381 - { 382 - if (state == STATE_TX_ON) 383 - return STATE_FORCE_TX_ON; 384 - else 385 - return STATE_FORCE_TRX_OFF; 386 - } 387 - 388 380 static void 389 381 at86rf230_async_state_assert(void *context) 390 382 { ··· 418 426 u8 state = ctx->to_state; 419 427 420 428 if (lp->tx_retry >= AT86RF2XX_MAX_TX_RETRIES) 421 - state = at86rf230_state_to_force(state); 429 + state = STATE_FORCE_TRX_OFF; 422 430 lp->tx_retry++; 423 431 424 432 at86rf230_async_state_change(lp, ctx, state,