Skip to content

Commit

Permalink
mrf24j40: add csma params support
Browse files Browse the repository at this point in the history
This patch adds supports to change the CSMA parameters. The datasheet
doesn't say anything about max_be value. Seems not configurable and we
assume the 802.15.4 default. But this value must exists because there is
a min_be value.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
  • Loading branch information
Alexander Aring authored and Marcel Holtmann committed Sep 22, 2015
1 parent 3744161 commit 2323cf3
Showing 1 changed file with 26 additions and 1 deletion.
27 changes: 26 additions & 1 deletion drivers/net/ieee802154/mrf24j40.c
Original file line number Diff line number Diff line change
Expand Up @@ -776,6 +776,21 @@ static int mrf24j40_handle_rx(struct mrf24j40 *devrec)
return spi_async(devrec->spi, &devrec->rx_msg);
}

static int
mrf24j40_csma_params(struct ieee802154_hw *hw, u8 min_be, u8 max_be,
u8 retries)
{
struct mrf24j40 *devrec = hw->priv;
u8 val;

/* min_be */
val = min_be << 3;
/* csma backoffs */
val |= retries;

return regmap_update_bits(devrec->regmap_short, REG_TXMCR, 0x1f, val);
}

static const struct ieee802154_ops mrf24j40_ops = {
.owner = THIS_MODULE,
.xmit_async = mrf24j40_tx,
Expand All @@ -784,6 +799,7 @@ static const struct ieee802154_ops mrf24j40_ops = {
.stop = mrf24j40_stop,
.set_channel = mrf24j40_set_channel,
.set_hw_addr_filt = mrf24j40_filter,
.set_csma_params = mrf24j40_csma_params,
};

static void mrf24j40_intstat_complete(void *context)
Expand Down Expand Up @@ -979,6 +995,14 @@ static void mrf24j40_phy_setup(struct mrf24j40 *devrec)
{
ieee802154_random_extended_addr(&devrec->hw->phy->perm_extended_addr);
devrec->hw->phy->current_channel = 11;

/* mrf24j40 supports max_minbe 0 - 3 */
devrec->hw->phy->supported.max_minbe = 3;
/* datasheet doesn't say anything about max_be, but we have min_be
* So we assume the max_be default.
*/
devrec->hw->phy->supported.min_maxbe = 5;
devrec->hw->phy->supported.max_maxbe = 5;
}

static int mrf24j40_probe(struct spi_device *spi)
Expand All @@ -1001,7 +1025,8 @@ static int mrf24j40_probe(struct spi_device *spi)
devrec->hw = hw;
devrec->hw->parent = &spi->dev;
devrec->hw->phy->supported.channels[0] = CHANNEL_MASK;
devrec->hw->flags = IEEE802154_HW_TX_OMIT_CKSUM | IEEE802154_HW_AFILT;
devrec->hw->flags = IEEE802154_HW_TX_OMIT_CKSUM | IEEE802154_HW_AFILT |
IEEE802154_HW_CSMA_PARAMS;

mrf24j40_setup_tx_spi_messages(devrec);
mrf24j40_setup_rx_spi_messages(devrec);
Expand Down

0 comments on commit 2323cf3

Please sign in to comment.