On 28/01/14 20:06, Phoebe Buckheister wrote:
> Since the AT86RF2xy chips are mostly compatible, this is only a small
> change to the actual driver code. The at86rf230 driver already supports the
> RF212 in most places, only three small adjustments are required:
>
> * force the initial state after P_ON to FORCE_TRX_OFF to work around a
> documented erratum
> * channels_supported depends on the frequency of the transceiver, and
> thus is_rf212
> * do early detection of chip version select an appropriate _ops struct
> based on the chip version.
>
> Signed-off-by: Phoebe Buckheister <[email protected]>
> ---
> drivers/net/ieee802154/at86rf230.c | 263
> ++++++++++++++++++++++++------------
> 1 file changed, 174 insertions(+), 89 deletions(-)
>
> diff --git a/drivers/net/ieee802154/at86rf230.c
> b/drivers/net/ieee802154/at86rf230.c
> @@ -244,6 +250,52 @@ struct at86rf230_local {
> #define STATE_TRANSITION_IN_PROGRESS 0x1F
>
> static int
> +__at86rf230_detect_device(struct spi_device *spi, u16 *man_id, u8 *part,
> + u8 *version)
> +{
> + u8 data[4];
> + u8 buf[2];
Never ever put spi transfer buffer onto the stack. It is not dma safe.
Use kmalloc/kzalloc.
> + int status;
> + struct spi_message msg;
> + struct spi_transfer xfer = {
> + .len = 2,
> + .tx_buf = buf,
> + .rx_buf = buf,
> + };
> + u8 reg;
> +
> @@ -520,6 +572,29 @@ at86rf230_stop(struct ieee802154_dev *dev)
> }
>
> static int
> +rf230_channel(struct at86rf230_local *lp, int page, int channel)
at86rf230 please. Let's keep the prefix everywhere.
> +{
> + return at86rf230_write_subreg(lp, SR_CHANNEL, channel);
> +}
> +
> +static int
> +rf212_channel(struct at86rf230_local *lp, int page, int channel)
at86rf212
> +{
> + int rc;
> +
> + if (channel == 0) {
if (page == 0) ?
> + rc = at86rf230_write_subreg(lp, SR_SUB_MODE, 0);
> + } else {
> + rc = at86rf230_write_subreg(lp, SR_SUB_MODE, 1);
> + }
> +
The rest looks good.
--
With best wishes
Dmitry
------------------------------------------------------------------------------
WatchGuard Dimension instantly turns raw network data into actionable
security intelligence. It gives you real-time visual feedback on key
security issues and trends. Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
_______________________________________________
Linux-zigbee-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-zigbee-devel