The standard assigns channel 0 on page 2 to be 100kbps QPSK in the 868.3MHz band. Add support to the at86rf230 driver for this channel and page, at the moment predicated only for the RF212 chip.
Signed-off-by: Phoebe Buckheister <phoebe.buckheis...@itwm.fraunhofer.de> --- drivers/net/ieee802154/at86rf230.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/drivers/net/ieee802154/at86rf230.c b/drivers/net/ieee802154/at86rf230.c index 01aeaf9..10a4647 100644 --- a/drivers/net/ieee802154/at86rf230.c +++ b/drivers/net/ieee802154/at86rf230.c @@ -105,7 +105,10 @@ static inline int is_rf212(struct at86rf230_local *local) #define SR_SFD_VALUE 0x0b, 0xff, 0 #define RG_TRX_CTRL_2 (0x0c) #define SR_OQPSK_DATA_RATE 0x0c, 0x03, 0 -#define SR_RESERVED_0c_2 0x0c, 0x7c, 2 +#define SR_SUB_MODE 0x0c, 0x04, 2 +#define SR_BPSK_QPSK 0x0c, 0x08, 3 +#define SR_OQPSK_SUB1_RC_EN 0x0c, 0x10, 4 +#define SR_RESERVED_0c_4 0x0c, 0x60, 5 #define SR_RX_SAFE_MODE 0x0c, 0x80, 7 #define RG_ANT_DIV (0x0d) #define SR_ANT_CTRL 0x0d, 0x03, 0 @@ -532,7 +535,7 @@ at86rf230_channel(struct ieee802154_dev *dev, int page, int channel) might_sleep(); - if (page != 0 + if ((page != 0 && !(is_rf212(lp) && page == 2 && channel == 0)) || (!is_rf212(lp) && (channel < 11 || channel > 26)) || (is_rf212(lp) && (channel < 0 || channel > 10))) { WARN_ON(1); @@ -540,8 +543,26 @@ at86rf230_channel(struct ieee802154_dev *dev, int page, int channel) } rc = at86rf230_write_subreg(lp, SR_CHANNEL, channel); + if (rc) + return rc; + + if (page == 2) { + rc = at86rf230_write_subreg(lp, SR_BPSK_QPSK, 1); + if (rc) + return rc; + + rc = at86rf230_write_subreg(lp, SR_SUB_MODE, 0); + if (rc) + return rc; + + rc = at86rf230_write_subreg(lp, SR_OQPSK_DATA_RATE, 0); + if (rc) + return rc; + } + msleep(1); /* Wait for PLL */ dev->phy->current_channel = channel; + dev->phy->current_page = page; return 0; } @@ -988,6 +1009,7 @@ static int at86rf230_probe(struct spi_device *spi) if (is_rf212(lp)) { dev->phy->channels_supported[0] = 0x00007FF; + dev->phy->channels_supported[2] = 0x0000001; } else { dev->phy->channels_supported[0] = 0x7FFF800; } -- 1.7.9.5 ------------------------------------------------------------------------------ CenturyLink Cloud: The Leader in Enterprise Cloud Services. Learn Why More Businesses Are Choosing CenturyLink Cloud For Critical Workloads, Development Environments & Everything In Between. Get a Quote or Start a Free Trial Today. http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk _______________________________________________ Linux-zigbee-devel mailing list Linux-zigbee-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-zigbee-devel