Commit 263be332 authored by Alexander Aring's avatar Alexander Aring Committed by Marcel Holtmann

at86rf230: restore trx len when needed

In the most cases the spi messages has a length of two. Currently we
always set the the len field to two before transmit a spi message. In
cases for read out/write in the frame buffer we need another len. This
patch use trx len two as default. For the frame buffer cases we restore
the trx len to two on success and failure. This will reduce the len
setting of two when it's already two.
Signed-off-by: default avatarAlexander Aring <alex.aring@gmail.com>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent 31fa7434
...@@ -478,7 +478,6 @@ at86rf230_async_read_reg(struct at86rf230_local *lp, const u8 reg, ...@@ -478,7 +478,6 @@ at86rf230_async_read_reg(struct at86rf230_local *lp, const u8 reg,
u8 *tx_buf = ctx->buf; u8 *tx_buf = ctx->buf;
tx_buf[0] = (reg & CMD_REG_MASK) | CMD_REG; tx_buf[0] = (reg & CMD_REG_MASK) | CMD_REG;
ctx->trx.len = 2;
ctx->msg.complete = complete; ctx->msg.complete = complete;
ctx->irq_enable = irq_enable; ctx->irq_enable = irq_enable;
rc = spi_async(lp->spi, &ctx->msg); rc = spi_async(lp->spi, &ctx->msg);
...@@ -663,7 +662,6 @@ at86rf230_async_state_change_start(void *context) ...@@ -663,7 +662,6 @@ at86rf230_async_state_change_start(void *context)
*/ */
buf[0] = (RG_TRX_STATE & CMD_REG_MASK) | CMD_REG | CMD_WRITE; buf[0] = (RG_TRX_STATE & CMD_REG_MASK) | CMD_REG | CMD_WRITE;
buf[1] = ctx->to_state; buf[1] = ctx->to_state;
ctx->trx.len = 2;
ctx->msg.complete = at86rf230_async_state_delay; ctx->msg.complete = at86rf230_async_state_delay;
rc = spi_async(lp->spi, &ctx->msg); rc = spi_async(lp->spi, &ctx->msg);
if (rc) { if (rc) {
...@@ -799,6 +797,7 @@ at86rf230_rx_read_frame_complete(void *context) ...@@ -799,6 +797,7 @@ at86rf230_rx_read_frame_complete(void *context)
lqi = buf[2 + len]; lqi = buf[2 + len];
memcpy(rx_local_buf, buf + 2, len); memcpy(rx_local_buf, buf + 2, len);
ctx->trx.len = 2;
enable_irq(ctx->irq); enable_irq(ctx->irq);
skb = dev_alloc_skb(IEEE802154_MTU); skb = dev_alloc_skb(IEEE802154_MTU);
...@@ -824,6 +823,7 @@ at86rf230_rx_read_frame(void *context) ...@@ -824,6 +823,7 @@ at86rf230_rx_read_frame(void *context)
ctx->msg.complete = at86rf230_rx_read_frame_complete; ctx->msg.complete = at86rf230_rx_read_frame_complete;
rc = spi_async(lp->spi, &ctx->msg); rc = spi_async(lp->spi, &ctx->msg);
if (rc) { if (rc) {
ctx->trx.len = 2;
enable_irq(ctx->irq); enable_irq(ctx->irq);
at86rf230_async_error(lp, ctx, rc); at86rf230_async_error(lp, ctx, rc);
} }
...@@ -893,7 +893,6 @@ static irqreturn_t at86rf230_isr(int irq, void *data) ...@@ -893,7 +893,6 @@ static irqreturn_t at86rf230_isr(int irq, void *data)
disable_irq_nosync(irq); disable_irq_nosync(irq);
buf[0] = (RG_IRQ_STATUS & CMD_REG_MASK) | CMD_REG; buf[0] = (RG_IRQ_STATUS & CMD_REG_MASK) | CMD_REG;
ctx->trx.len = 2;
ctx->msg.complete = at86rf230_irq_status; ctx->msg.complete = at86rf230_irq_status;
rc = spi_async(lp->spi, &ctx->msg); rc = spi_async(lp->spi, &ctx->msg);
if (rc) { if (rc) {
...@@ -941,8 +940,10 @@ at86rf230_write_frame(void *context) ...@@ -941,8 +940,10 @@ at86rf230_write_frame(void *context)
ctx->trx.len = skb->len + 2; ctx->trx.len = skb->len + 2;
ctx->msg.complete = at86rf230_write_frame_complete; ctx->msg.complete = at86rf230_write_frame_complete;
rc = spi_async(lp->spi, &ctx->msg); rc = spi_async(lp->spi, &ctx->msg);
if (rc) if (rc) {
ctx->trx.len = 2;
at86rf230_async_error(lp, ctx, rc); at86rf230_async_error(lp, ctx, rc);
}
} }
static void static void
...@@ -1541,6 +1542,7 @@ at86rf230_setup_spi_messages(struct at86rf230_local *lp) ...@@ -1541,6 +1542,7 @@ at86rf230_setup_spi_messages(struct at86rf230_local *lp)
lp->state.irq = lp->spi->irq; lp->state.irq = lp->spi->irq;
spi_message_init(&lp->state.msg); spi_message_init(&lp->state.msg);
lp->state.msg.context = &lp->state; lp->state.msg.context = &lp->state;
lp->state.trx.len = 2;
lp->state.trx.tx_buf = lp->state.buf; lp->state.trx.tx_buf = lp->state.buf;
lp->state.trx.rx_buf = lp->state.buf; lp->state.trx.rx_buf = lp->state.buf;
spi_message_add_tail(&lp->state.trx, &lp->state.msg); spi_message_add_tail(&lp->state.trx, &lp->state.msg);
...@@ -1549,6 +1551,7 @@ at86rf230_setup_spi_messages(struct at86rf230_local *lp) ...@@ -1549,6 +1551,7 @@ at86rf230_setup_spi_messages(struct at86rf230_local *lp)
lp->irq.irq = lp->spi->irq; lp->irq.irq = lp->spi->irq;
spi_message_init(&lp->irq.msg); spi_message_init(&lp->irq.msg);
lp->irq.msg.context = &lp->irq; lp->irq.msg.context = &lp->irq;
lp->irq.trx.len = 2;
lp->irq.trx.tx_buf = lp->irq.buf; lp->irq.trx.tx_buf = lp->irq.buf;
lp->irq.trx.rx_buf = lp->irq.buf; lp->irq.trx.rx_buf = lp->irq.buf;
spi_message_add_tail(&lp->irq.trx, &lp->irq.msg); spi_message_add_tail(&lp->irq.trx, &lp->irq.msg);
...@@ -1557,6 +1560,7 @@ at86rf230_setup_spi_messages(struct at86rf230_local *lp) ...@@ -1557,6 +1560,7 @@ at86rf230_setup_spi_messages(struct at86rf230_local *lp)
lp->tx.irq = lp->spi->irq; lp->tx.irq = lp->spi->irq;
spi_message_init(&lp->tx.msg); spi_message_init(&lp->tx.msg);
lp->tx.msg.context = &lp->tx; lp->tx.msg.context = &lp->tx;
lp->tx.trx.len = 2;
lp->tx.trx.tx_buf = lp->tx.buf; lp->tx.trx.tx_buf = lp->tx.buf;
lp->tx.trx.rx_buf = lp->tx.buf; lp->tx.trx.rx_buf = lp->tx.buf;
spi_message_add_tail(&lp->tx.trx, &lp->tx.msg); spi_message_add_tail(&lp->tx.trx, &lp->tx.msg);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment