Thread (1 message) 1 message, 1 author, 2017-01-23

Re: ieee802154: atusb: fix driver to work with older firmware versions

From: Geert Uytterhoeven <geert@linux-m68k.org>
Date: 2017-01-23 08:43:04
Also in: lkml

On Tue, Jan 17, 2017 at 7:11 PM, Linux Kernel Mailing List
[off-list ref] wrote:
quoted hunk
Web:        https://git.kernel.org/torvalds/c/8e38b7d4d71479b23b77f01cf0e5071610b8f357
Commit:     8e38b7d4d71479b23b77f01cf0e5071610b8f357
Parent:     f301606934b240fb54d8edf3618a0483e36046fc
Refname:    refs/heads/master
Author:     Stefan Schmidt [off-list ref]
AuthorDate: Mon Jan 2 16:58:13 2017 +0100
Committer:  Marcel Holtmann [off-list ref]
CommitDate: Thu Jan 12 22:12:43 2017 +0100

    ieee802154: atusb: fix driver to work with older firmware versions

    After the addition of the frame_retries callback we could run into cases where
    a ATUSB device with an older firmware version would now longer be able to bring
    the interface up.

    We keep this functionality disabled now if the minimum firmware version for this
    feature is not available.

    Fixes: 5d82288b93db3bc ("ieee802154: atusb: implement .set_frame_retries
    ops callback")
    Reported-by: Alexander Aring [off-list ref]
    Acked-by: Alexander Aring [off-list ref]
    Signed-off-by: Stefan Schmidt [off-list ref]
    Signed-off-by: Marcel Holtmann [off-list ref]
---
 drivers/net/ieee802154/atusb.c | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)
diff --git a/drivers/net/ieee802154/atusb.c b/drivers/net/ieee802154/atusb.c
index 63cb679..ef68851 100644
--- a/drivers/net/ieee802154/atusb.c
+++ b/drivers/net/ieee802154/atusb.c
@@ -562,13 +562,6 @@ static int
 atusb_set_frame_retries(struct ieee802154_hw *hw, s8 retries)
 {
        struct atusb *atusb = hw->priv;
-       struct device *dev = &atusb->usb_dev->dev;
-
-       if (atusb->fw_ver_maj == 0 && atusb->fw_ver_min < 3) {
-               dev_info(dev, "Automatic frame retransmission is only available from "
-                       "firmware version 0.3. Please update if you want this feature.");
-               return -EINVAL;
-       }

        return atusb_write_subreg(atusb, SR_MAX_FRAME_RETRIES, retries);
 }
@@ -802,8 +795,7 @@ static int atusb_probe(struct usb_interface *interface,

        hw->parent = &usb_dev->dev;
        hw->flags = IEEE802154_HW_TX_OMIT_CKSUM | IEEE802154_HW_AFILT |
-                   IEEE802154_HW_PROMISCUOUS | IEEE802154_HW_CSMA_PARAMS |
-                   IEEE802154_HW_FRAME_RETRIES;
+                   IEEE802154_HW_PROMISCUOUS | IEEE802154_HW_CSMA_PARAMS;

        hw->phy->flags = WPAN_PHY_FLAG_TXPOWER | WPAN_PHY_FLAG_CCA_ED_LEVEL |
                         WPAN_PHY_FLAG_CCA_MODE;
@@ -832,6 +824,9 @@ static int atusb_probe(struct usb_interface *interface,
        atusb_get_and_show_build(atusb);
        atusb_set_extended_addr(atusb);

+       if (atusb->fw_ver_maj >= 0 && atusb->fw_ver_min >= 3)
As fw_ver_maj is unsigned char, gcc 4.1.2 complains:

warning: comparison is always true due to limited range of data type
+               hw->flags |= IEEE802154_HW_FRAME_RETRIES;
+
Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help