Bluetooth: hci_uart: Fix speed selection
authorFrederic Danis <frederic.danis@linux.intel.com>
Thu, 18 Jun 2015 10:43:27 +0000 (12:43 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 18 Jun 2015 11:47:14 +0000 (13:47 +0200)
hu->proto->*speed will always be used for all device where it is set.
But hu->*speed should be used if exist, so the test should be swapped.

The equivalent change is needed in bcm_setup() of hci_bcm.c.

Signed-off-by: Frederic Danis <frederic.danis@linux.intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
drivers/bluetooth/hci_bcm.c
drivers/bluetooth/hci_ldisc.c

index aa3c9aca4cb4b6e71a247b2d26a0c24a082d71f5..23523e140a9a11ef29e08541782e3d8627dca221 100644 (file)
@@ -131,6 +131,7 @@ static int bcm_setup(struct hci_uart *hu)
 {
        char fw_name[64];
        const struct firmware *fw;
+       unsigned int speed;
        int err;
 
        BT_DBG("hu %p", hu);
@@ -153,13 +154,29 @@ static int bcm_setup(struct hci_uart *hu)
                goto finalize;
        }
 
-       if (hu->proto->init_speed)
-               hci_uart_set_baudrate(hu, hu->proto->init_speed);
-
-       if (hu->proto->oper_speed) {
-               err = bcm_set_baudrate(hu, hu->proto->oper_speed);
+       /* Init speed if any */
+       if (hu->init_speed)
+               speed = hu->init_speed;
+       else if (hu->proto->init_speed)
+               speed = hu->proto->init_speed;
+       else
+               speed = 0;
+
+       if (speed)
+               hci_uart_set_baudrate(hu, speed);
+
+       /* Operational speed if any */
+       if (hu->oper_speed)
+               speed = hu->oper_speed;
+       else if (hu->proto->oper_speed)
+               speed = hu->proto->oper_speed;
+       else
+               speed = 0;
+
+       if (speed) {
+               err = bcm_set_baudrate(hu, speed);
                if (!err)
-                       hci_uart_set_baudrate(hu, hu->proto->oper_speed);
+                       hci_uart_set_baudrate(hu, speed);
        }
 
 finalize:
index 590bd8e66bfb574fdf614dab3db46f053ba063fc..177dd69fdd954151c3742c5cf443d439ad0edc0c 100644 (file)
@@ -370,10 +370,10 @@ static int hci_uart_setup(struct hci_dev *hdev)
        int err;
 
        /* Init speed if any */
-       if (hu->proto->init_speed)
-               speed = hu->proto->init_speed;
-       else if (hu->init_speed)
+       if (hu->init_speed)
                speed = hu->init_speed;
+       else if (hu->proto->init_speed)
+               speed = hu->proto->init_speed;
        else
                speed = 0;
 
@@ -381,10 +381,10 @@ static int hci_uart_setup(struct hci_dev *hdev)
                hci_uart_set_baudrate(hu, speed);
 
        /* Operational speed if any */
-       if (hu->proto->oper_speed)
-               speed = hu->proto->oper_speed;
-       else if (hu->oper_speed)
+       if (hu->oper_speed)
                speed = hu->oper_speed;
+       else if (hu->proto->oper_speed)
+               speed = hu->proto->oper_speed;
        else
                speed = 0;