Przeglądaj źródła

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 <aar@pengutronix.de>
Acked-by: Alexander Aring <aar@pengutronix.de>
Signed-off-by: Stefan Schmidt <stefan@osg.samsung.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Stefan Schmidt 8 lat temu
rodzic
commit
8e38b7d4d7
1 zmienionych plików z 4 dodań i 9 usunięć
  1. 4 9
      drivers/net/ieee802154/atusb.c

+ 4 - 9
drivers/net/ieee802154/atusb.c

@@ -562,13 +562,6 @@ static int
 atusb_set_frame_retries(struct ieee802154_hw *hw, s8 retries)
 atusb_set_frame_retries(struct ieee802154_hw *hw, s8 retries)
 {
 {
 	struct atusb *atusb = hw->priv;
 	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);
 	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->parent = &usb_dev->dev;
 	hw->flags = IEEE802154_HW_TX_OMIT_CKSUM | IEEE802154_HW_AFILT |
 	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 |
 	hw->phy->flags = WPAN_PHY_FLAG_TXPOWER | WPAN_PHY_FLAG_CCA_ED_LEVEL |
 			 WPAN_PHY_FLAG_CCA_MODE;
 			 WPAN_PHY_FLAG_CCA_MODE;
@@ -832,6 +824,9 @@ static int atusb_probe(struct usb_interface *interface,
 	atusb_get_and_show_build(atusb);
 	atusb_get_and_show_build(atusb);
 	atusb_set_extended_addr(atusb);
 	atusb_set_extended_addr(atusb);
 
 
+	if (atusb->fw_ver_maj >= 0 && atusb->fw_ver_min >= 3)
+		hw->flags |= IEEE802154_HW_FRAME_RETRIES;
+
 	ret = atusb_get_and_clear_error(atusb);
 	ret = atusb_get_and_clear_error(atusb);
 	if (ret) {
 	if (ret) {
 		dev_err(&atusb->usb_dev->dev,
 		dev_err(&atusb->usb_dev->dev,