This patch fix a unexpected state change for the at86rf231 chip.
We can't change into STATE_FORCE_TX_ON while the chip is in one of
SLEEP, P_ON, RESET, TRX_OFF, and all *_NOCLK states.
In this case we are in the TRX_OFF state. See datasheet [1] page 71 for
more information.
Without this patch you will get the following message on a at86rf231 device:
[ 20.065218] unexpected state change: 8, asked for 4
[ 20.070527] ------------[ cut here ]------------
[ 20.075414] WARNING: CPU: 0 PID: 160 at net/mac802154/ieee802154_dev.c:43 mac802154_slave_open+0x70/0xb8()
[ 20.085594] Modules linked in: autofs4
[ 20.089667] CPU: 0 PID: 160 Comm: ifconfig Not tainted
3.14.0-20140108-1-00993-g905c192 #162
[ 20.098612] [<
c00127b8>] (unwind_backtrace) from [<
c0010b1c>] (show_stack+0x10/0x14)
[ 20.106819] [<
c0010b1c>] (show_stack) from [<
c0033838>] (warn_slowpath_common+0x60/0x80)
[ 20.115311] [<
c0033838>] (warn_slowpath_common) from [<
c00338e8>] (warn_slowpath_null+0x18/0x20)
[ 20.124590] [<
c00338e8>] (warn_slowpath_null) from [<
c057b7e8>] (mac802154_slave_open+0x70/0xb8)
[ 20.133880] [<
c057b7e8>] (mac802154_slave_open) from [<
c0488a58>] (__dev_open+0xa8/0x108)
[ 20.142553] [<
c0488a58>] (__dev_open) from [<
c0488cb0>] (__dev_change_flags+0x8c/0x148)
[ 20.151051] [<
c0488cb0>] (__dev_change_flags) from [<
c0488d84>] (dev_change_flags+0x18/0x48)
[ 20.159968] [<
c0488d84>] (dev_change_flags) from [<
c04e2e9c>] (devinet_ioctl+0x2b0/0x63c)
[ 20.168623] [<
c04e2e9c>] (devinet_ioctl) from [<
c04712e4>] (sock_ioctl+0x23c/0x29c)
[ 20.176727] [<
c04712e4>] (sock_ioctl) from [<
c00e3cb8>] (do_vfs_ioctl+0x4a8/0x578)
[ 20.184671] [<
c00e3cb8>] (do_vfs_ioctl) from [<
c00e3dd4>] (SyS_ioctl+0x4c/0x78)
[ 20.192402] [<
c00e3dd4>] (SyS_ioctl) from [<
c000da00>] (ret_fast_syscall+0x0/0x48)
[ 20.200392] ---[ end trace
9a34542f4ea08e47 ]---
This patch was tested on at86rf231 and at86rf212.
[1] http://www.atmel.com/images/doc8111.pdf
Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>