Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth

Johan Hedberg says:

====================
pull request: bluetooth 2017-01-16

Here are a couple of important 802.15.4 driver fixes for the 4.10
kernel.

Please let me know if there are any issues pulling. Thanks.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>

+45 -18
+2 -2
drivers/net/ieee802154/at86rf230.c
··· 1715 1715 /* Reset */ 1716 1716 if (gpio_is_valid(rstn)) { 1717 1717 udelay(1); 1718 - gpio_set_value(rstn, 0); 1718 + gpio_set_value_cansleep(rstn, 0); 1719 1719 udelay(1); 1720 - gpio_set_value(rstn, 1); 1720 + gpio_set_value_cansleep(rstn, 1); 1721 1721 usleep_range(120, 240); 1722 1722 } 1723 1723
+43 -16
drivers/net/ieee802154/atusb.c
··· 117 117 { 118 118 struct usb_device *usb_dev = atusb->usb_dev; 119 119 int ret; 120 + uint8_t *buffer; 120 121 uint8_t value; 122 + 123 + buffer = kmalloc(1, GFP_KERNEL); 124 + if (!buffer) 125 + return -ENOMEM; 121 126 122 127 dev_dbg(&usb_dev->dev, "atusb: reg = 0x%x\n", reg); 123 128 ret = atusb_control_msg(atusb, usb_rcvctrlpipe(usb_dev, 0), 124 129 ATUSB_REG_READ, ATUSB_REQ_FROM_DEV, 125 - 0, reg, &value, 1, 1000); 126 - return ret >= 0 ? value : ret; 130 + 0, reg, buffer, 1, 1000); 131 + 132 + if (ret >= 0) { 133 + value = buffer[0]; 134 + kfree(buffer); 135 + return value; 136 + } else { 137 + kfree(buffer); 138 + return ret; 139 + } 127 140 } 128 141 129 142 static int atusb_write_subreg(struct atusb *atusb, uint8_t reg, uint8_t mask, ··· 562 549 atusb_set_frame_retries(struct ieee802154_hw *hw, s8 retries) 563 550 { 564 551 struct atusb *atusb = hw->priv; 565 - struct device *dev = &atusb->usb_dev->dev; 566 - 567 - if (atusb->fw_ver_maj == 0 && atusb->fw_ver_min < 3) { 568 - dev_info(dev, "Automatic frame retransmission is only available from " 569 - "firmware version 0.3. Please update if you want this feature."); 570 - return -EINVAL; 571 - } 572 552 573 553 return atusb_write_subreg(atusb, SR_MAX_FRAME_RETRIES, retries); 574 554 } ··· 614 608 static int atusb_get_and_show_revision(struct atusb *atusb) 615 609 { 616 610 struct usb_device *usb_dev = atusb->usb_dev; 617 - unsigned char buffer[3]; 611 + unsigned char *buffer; 618 612 int ret; 613 + 614 + buffer = kmalloc(3, GFP_KERNEL); 615 + if (!buffer) 616 + return -ENOMEM; 619 617 620 618 /* Get a couple of the ATMega Firmware values */ 621 619 ret = atusb_control_msg(atusb, usb_rcvctrlpipe(usb_dev, 0), ··· 641 631 dev_info(&usb_dev->dev, "Please update to version 0.2 or newer"); 642 632 } 643 633 634 + kfree(buffer); 644 635 return ret; 645 636 } 646 637 647 638 static int atusb_get_and_show_build(struct atusb *atusb) 648 639 { 649 640 struct usb_device *usb_dev = atusb->usb_dev; 650 - char build[ATUSB_BUILD_SIZE + 1]; 641 + char *build; 651 642 int ret; 643 + 644 + build = kmalloc(ATUSB_BUILD_SIZE + 1, GFP_KERNEL); 645 + if (!build) 646 + return -ENOMEM; 652 647 653 648 ret = atusb_control_msg(atusb, usb_rcvctrlpipe(usb_dev, 0), 654 649 ATUSB_BUILD, ATUSB_REQ_FROM_DEV, 0, 0, ··· 663 648 dev_info(&usb_dev->dev, "Firmware: build %s\n", build); 664 649 } 665 650 651 + kfree(build); 666 652 return ret; 667 653 } 668 654 ··· 714 698 static int atusb_set_extended_addr(struct atusb *atusb) 715 699 { 716 700 struct usb_device *usb_dev = atusb->usb_dev; 717 - unsigned char buffer[IEEE802154_EXTENDED_ADDR_LEN]; 701 + unsigned char *buffer; 718 702 __le64 extended_addr; 719 703 u64 addr; 720 704 int ret; ··· 726 710 return 0; 727 711 } 728 712 713 + buffer = kmalloc(IEEE802154_EXTENDED_ADDR_LEN, GFP_KERNEL); 714 + if (!buffer) 715 + return -ENOMEM; 716 + 729 717 /* Firmware is new enough so we fetch the address from EEPROM */ 730 718 ret = atusb_control_msg(atusb, usb_rcvctrlpipe(usb_dev, 0), 731 719 ATUSB_EUI64_READ, ATUSB_REQ_FROM_DEV, 0, 0, 732 720 buffer, IEEE802154_EXTENDED_ADDR_LEN, 1000); 733 - if (ret < 0) 734 - dev_err(&usb_dev->dev, "failed to fetch extended address\n"); 721 + if (ret < 0) { 722 + dev_err(&usb_dev->dev, "failed to fetch extended address, random address set\n"); 723 + ieee802154_random_extended_addr(&atusb->hw->phy->perm_extended_addr); 724 + kfree(buffer); 725 + return ret; 726 + } 735 727 736 728 memcpy(&extended_addr, buffer, IEEE802154_EXTENDED_ADDR_LEN); 737 729 /* Check if read address is not empty and the unicast bit is set correctly */ ··· 753 729 &addr); 754 730 } 755 731 732 + kfree(buffer); 756 733 return ret; 757 734 } 758 735 ··· 795 770 796 771 hw->parent = &usb_dev->dev; 797 772 hw->flags = IEEE802154_HW_TX_OMIT_CKSUM | IEEE802154_HW_AFILT | 798 - IEEE802154_HW_PROMISCUOUS | IEEE802154_HW_CSMA_PARAMS | 799 - IEEE802154_HW_FRAME_RETRIES; 773 + IEEE802154_HW_PROMISCUOUS | IEEE802154_HW_CSMA_PARAMS; 800 774 801 775 hw->phy->flags = WPAN_PHY_FLAG_TXPOWER | WPAN_PHY_FLAG_CCA_ED_LEVEL | 802 776 WPAN_PHY_FLAG_CCA_MODE; ··· 823 799 atusb_get_and_show_revision(atusb); 824 800 atusb_get_and_show_build(atusb); 825 801 atusb_set_extended_addr(atusb); 802 + 803 + if (atusb->fw_ver_maj >= 0 && atusb->fw_ver_min >= 3) 804 + hw->flags |= IEEE802154_HW_FRAME_RETRIES; 826 805 827 806 ret = atusb_get_and_clear_error(atusb); 828 807 if (ret) {