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_TX_WAIT_VND_EVT	13
 | 
			
		||||
#define BTUSB_WAKEUP_DISABLE	14
 | 
			
		||||
#define BTUSB_USE_ALT1_FOR_WBS	15
 | 
			
		||||
 | 
			
		||||
struct btusb_data {
 | 
			
		||||
	struct hci_dev       *hdev;
 | 
			
		||||
| 
						 | 
				
			
			@ -1682,15 +1683,16 @@ static void btusb_work(struct work_struct *work)
 | 
			
		|||
				new_alts = data->sco_num;
 | 
			
		||||
			}
 | 
			
		||||
		} 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 */
 | 
			
		||||
			if (btusb_find_altsetting(data, 6))
 | 
			
		||||
			if (btusb_find_altsetting(data, 6)) {
 | 
			
		||||
				data->usb_alt6_packet_flow = true;
 | 
			
		||||
				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");
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (btusb_switch_alt_setting(hdev, new_alts) < 0)
 | 
			
		||||
			bt_dev_err(hdev, "set USB alt:(%d) failed!", new_alts);
 | 
			
		||||
| 
						 | 
				
			
			@ -4004,6 +4006,15 @@ static int btusb_probe(struct usb_interface *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) &&
 | 
			
		||||
	    (id->driver_info & BTUSB_REALTEK)) {
 | 
			
		||||
		hdev->setup = btrtl_setup_realtek;
 | 
			
		||||
| 
						 | 
				
			
			@ -4015,21 +4026,16 @@ static int btusb_probe(struct usb_interface *intf,
 | 
			
		|||
		 * (DEVICE_REMOTE_WAKEUP)
 | 
			
		||||
		 */
 | 
			
		||||
		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);
 | 
			
		||||
		if (err < 0)
 | 
			
		||||
			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)
 | 
			
		||||
		set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue