mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	Bluetooth: btusb: USB alternate setting 1 for WBS
RTL8822CE supports transparent WBS to apply USB alternate setting 1. Add a flag to the device match data to apply alternate setting 1 which meet the transfer speed for WBS support. Signed-off-by: Hilda Wu <hildawu@realtek.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
		
							parent
							
								
									d4edda0f79
								
							
						
					
					
						commit
						461f95f04f
					
				
					 1 changed files with 20 additions and 14 deletions
				
			
		| 
						 | 
					@ -453,6 +453,7 @@ static const struct dmi_system_id btusb_needs_reset_resume_table[] = {
 | 
				
			||||||
#define BTUSB_HW_RESET_ACTIVE	12
 | 
					#define BTUSB_HW_RESET_ACTIVE	12
 | 
				
			||||||
#define BTUSB_TX_WAIT_VND_EVT	13
 | 
					#define BTUSB_TX_WAIT_VND_EVT	13
 | 
				
			||||||
#define BTUSB_WAKEUP_DISABLE	14
 | 
					#define BTUSB_WAKEUP_DISABLE	14
 | 
				
			||||||
 | 
					#define BTUSB_USE_ALT1_FOR_WBS	15
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct btusb_data {
 | 
					struct btusb_data {
 | 
				
			||||||
	struct hci_dev       *hdev;
 | 
						struct hci_dev       *hdev;
 | 
				
			||||||
| 
						 | 
					@ -1682,14 +1683,15 @@ static void btusb_work(struct work_struct *work)
 | 
				
			||||||
				new_alts = data->sco_num;
 | 
									new_alts = data->sco_num;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		} else if (data->air_mode == HCI_NOTIFY_ENABLE_SCO_TRANSP) {
 | 
							} else if (data->air_mode == HCI_NOTIFY_ENABLE_SCO_TRANSP) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
			data->usb_alt6_packet_flow = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			/* Check if Alt 6 is supported for Transparent audio */
 | 
								/* Check if Alt 6 is supported for Transparent audio */
 | 
				
			||||||
			if (btusb_find_altsetting(data, 6))
 | 
								if (btusb_find_altsetting(data, 6)) {
 | 
				
			||||||
 | 
									data->usb_alt6_packet_flow = true;
 | 
				
			||||||
				new_alts = 6;
 | 
									new_alts = 6;
 | 
				
			||||||
			else
 | 
								} else if (test_bit(BTUSB_USE_ALT1_FOR_WBS, &data->flags)) {
 | 
				
			||||||
 | 
									new_alts = 1;
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
				bt_dev_err(hdev, "Device does not support ALT setting 6");
 | 
									bt_dev_err(hdev, "Device does not support ALT setting 6");
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (btusb_switch_alt_setting(hdev, new_alts) < 0)
 | 
							if (btusb_switch_alt_setting(hdev, new_alts) < 0)
 | 
				
			||||||
| 
						 | 
					@ -4004,6 +4006,15 @@ static int btusb_probe(struct usb_interface *intf,
 | 
				
			||||||
		btusb_check_needs_reset_resume(intf);
 | 
							btusb_check_needs_reset_resume(intf);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (id->driver_info & BTUSB_AMP) {
 | 
				
			||||||
 | 
							/* AMP controllers do not support SCO packets */
 | 
				
			||||||
 | 
							data->isoc = NULL;
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							/* Interface orders are hardcoded in the specification */
 | 
				
			||||||
 | 
							data->isoc = usb_ifnum_to_if(data->udev, ifnum_base + 1);
 | 
				
			||||||
 | 
							data->isoc_ifnum = ifnum_base + 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (IS_ENABLED(CONFIG_BT_HCIBTUSB_RTL) &&
 | 
						if (IS_ENABLED(CONFIG_BT_HCIBTUSB_RTL) &&
 | 
				
			||||||
	    (id->driver_info & BTUSB_REALTEK)) {
 | 
						    (id->driver_info & BTUSB_REALTEK)) {
 | 
				
			||||||
		hdev->setup = btrtl_setup_realtek;
 | 
							hdev->setup = btrtl_setup_realtek;
 | 
				
			||||||
| 
						 | 
					@ -4015,21 +4026,16 @@ static int btusb_probe(struct usb_interface *intf,
 | 
				
			||||||
		 * (DEVICE_REMOTE_WAKEUP)
 | 
							 * (DEVICE_REMOTE_WAKEUP)
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		set_bit(BTUSB_WAKEUP_DISABLE, &data->flags);
 | 
							set_bit(BTUSB_WAKEUP_DISABLE, &data->flags);
 | 
				
			||||||
 | 
							if (btusb_find_altsetting(data, 1))
 | 
				
			||||||
 | 
								set_bit(BTUSB_USE_ALT1_FOR_WBS, &data->flags);
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								bt_dev_err(hdev, "Device does not support ALT setting 1");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		err = usb_autopm_get_interface(intf);
 | 
							err = usb_autopm_get_interface(intf);
 | 
				
			||||||
		if (err < 0)
 | 
							if (err < 0)
 | 
				
			||||||
			goto out_free_dev;
 | 
								goto out_free_dev;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (id->driver_info & BTUSB_AMP) {
 | 
					 | 
				
			||||||
		/* AMP controllers do not support SCO packets */
 | 
					 | 
				
			||||||
		data->isoc = NULL;
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		/* Interface orders are hardcoded in the specification */
 | 
					 | 
				
			||||||
		data->isoc = usb_ifnum_to_if(data->udev, ifnum_base + 1);
 | 
					 | 
				
			||||||
		data->isoc_ifnum = ifnum_base + 1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!reset)
 | 
						if (!reset)
 | 
				
			||||||
		set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);
 | 
							set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue