Bluetooth: Fix setting host feature bits for SSP
authorJohan Hedberg <johan.hedberg@intel.com>
Wed, 24 Oct 2012 21:09:51 +0000 (00:09 +0300)
committerGustavo Padovan <gustavo.padovan@collabora.co.uk>
Thu, 1 Nov 2012 22:26:59 +0000 (20:26 -0200)
When we get a successful command complete for HCI_Write_SSP_Mode we need
to update the host feature bits for the hdev struct accordingly.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
net/bluetooth/hci_event.c

index aae8053..dc60d31 100644 (file)
@@ -440,7 +440,7 @@ static void hci_cc_host_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
 static void hci_cc_write_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
 {
        __u8 status = *((__u8 *) skb->data);
-       void *sent;
+       struct hci_cp_write_ssp_mode *sent;
 
        BT_DBG("%s status 0x%2.2x", hdev->name, status);
 
@@ -448,10 +448,17 @@ static void hci_cc_write_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
        if (!sent)
                return;
 
+       if (!status) {
+               if (sent->mode)
+                       hdev->host_features[0] |= LMP_HOST_SSP;
+               else
+                       hdev->host_features[0] &= ~LMP_HOST_SSP;
+       }
+
        if (test_bit(HCI_MGMT, &hdev->dev_flags))
-               mgmt_ssp_enable_complete(hdev, *((u8 *) sent), status);
+               mgmt_ssp_enable_complete(hdev, sent->mode, status);
        else if (!status) {
-               if (*((u8 *) sent))
+               if (sent->mode)
                        set_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
                else
                        clear_bit(HCI_SSP_ENABLED, &hdev->dev_flags);