at86rf230: add support for promiscuous mode
authorAlexander Aring <alex.aring@gmail.com>
Wed, 29 Oct 2014 20:34:33 +0000 (21:34 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 29 Oct 2014 22:07:45 +0000 (23:07 +0100)
This patch adds support for promiscuous mode setting for the at86rf230
driver.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
drivers/net/ieee802154/at86rf230.c

index 622c1b6f7fec5a234caced85298453f5e03dce95..98c94374aa3553df65bcf9f457aea996b67b28e2 100644 (file)
@@ -1211,6 +1211,33 @@ at86rf230_set_frame_retries(struct ieee802154_hw *hw, s8 retries)
        return rc;
 }
 
+static int
+at86rf230_set_promiscuous_mode(struct ieee802154_hw *hw, const bool on)
+{
+       struct at86rf230_local *lp = hw->priv;
+       int rc;
+
+       if (on) {
+               rc = at86rf230_write_subreg(lp, SR_AACK_DIS_ACK, 1);
+               if (rc < 0)
+                       return rc;
+
+               rc = at86rf230_write_subreg(lp, SR_AACK_PROM_MODE, 1);
+               if (rc < 0)
+                       return rc;
+       } else {
+               rc = at86rf230_write_subreg(lp, SR_AACK_PROM_MODE, 0);
+               if (rc < 0)
+                       return rc;
+
+               rc = at86rf230_write_subreg(lp, SR_AACK_DIS_ACK, 0);
+               if (rc < 0)
+                       return rc;
+       }
+
+       return 0;
+}
+
 static const struct ieee802154_ops at86rf230_ops = {
        .owner = THIS_MODULE,
        .xmit_async = at86rf230_xmit,
@@ -1225,6 +1252,7 @@ static const struct ieee802154_ops at86rf230_ops = {
        .set_cca_ed_level = at86rf230_set_cca_ed_level,
        .set_csma_params = at86rf230_set_csma_params,
        .set_frame_retries = at86rf230_set_frame_retries,
+       .set_promiscuous_mode = at86rf230_set_promiscuous_mode,
 };
 
 static struct at86rf2xx_chip_data at86rf233_data = {
@@ -1388,7 +1416,7 @@ at86rf230_detect_device(struct at86rf230_local *lp)
        lp->hw->extra_tx_headroom = 0;
        lp->hw->flags = IEEE802154_HW_OMIT_CKSUM | IEEE802154_HW_AACK |
                        IEEE802154_HW_TXPOWER | IEEE802154_HW_ARET |
-                       IEEE802154_HW_AFILT;
+                       IEEE802154_HW_AFILT | IEEE802154_HW_PROMISCUOUS;
 
        switch (part) {
        case 2: