mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	Bluetooth: btintel: Fix the LED is not turning off immediately
Some platforms have an issue with BT LED when the interface is down or BT radio is turned off, which takes 5 seconds to BT LED goes off. This command turns off the BT LED immediately. This patch sends the Intel vendor command to turn off the LED. Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
		
							parent
							
								
									ea7c4c0e44
								
							
						
					
					
						commit
						ffcba827c0
					
				
					 2 changed files with 24 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -1737,6 +1737,13 @@ static int btintel_setup_combined(struct hci_dev *hdev)
 | 
			
		|||
		case 0x07:	/* WP */
 | 
			
		||||
		case 0x08:	/* StP */
 | 
			
		||||
			/* Legacy ROM product */
 | 
			
		||||
 | 
			
		||||
			/* These devices have an issue with LED which doesn't
 | 
			
		||||
			 * go off immediately during shutdown. Set the flag
 | 
			
		||||
			 * here to send the LED OFF command during shutdown.
 | 
			
		||||
			 */
 | 
			
		||||
			btintel_set_flag(hdev, INTEL_BROKEN_LED);
 | 
			
		||||
 | 
			
		||||
			err = btintel_legacy_rom_setup(hdev, &ver);
 | 
			
		||||
			break;
 | 
			
		||||
		case 0x0b:      /* SfP */
 | 
			
		||||
| 
						 | 
				
			
			@ -1785,6 +1792,7 @@ static int btintel_setup_combined(struct hci_dev *hdev)
 | 
			
		|||
static int btintel_shutdown_combined(struct hci_dev *hdev)
 | 
			
		||||
{
 | 
			
		||||
	struct sk_buff *skb;
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	/* Send HCI Reset to the controller to stop any BT activity which
 | 
			
		||||
	 * were triggered. This will help to save power and maintain the
 | 
			
		||||
| 
						 | 
				
			
			@ -1797,6 +1805,21 @@ static int btintel_shutdown_combined(struct hci_dev *hdev)
 | 
			
		|||
	}
 | 
			
		||||
	kfree_skb(skb);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	/* Some platforms have an issue with BT LED when the interface is
 | 
			
		||||
	 * down or BT radio is turned off, which takes 5 seconds to BT LED
 | 
			
		||||
	 * goes off. This command turns off the BT LED immediately.
 | 
			
		||||
	 */
 | 
			
		||||
	if (btintel_test_flag(hdev, INTEL_BROKEN_LED)) {
 | 
			
		||||
		skb = __hci_cmd_sync(hdev, 0xfc3f, 0, NULL, HCI_INIT_TIMEOUT);
 | 
			
		||||
		if (IS_ERR(skb)) {
 | 
			
		||||
			ret = PTR_ERR(skb);
 | 
			
		||||
			bt_dev_err(hdev, "turning off Intel device LED failed");
 | 
			
		||||
			return ret;
 | 
			
		||||
		}
 | 
			
		||||
		kfree_skb(skb);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -145,6 +145,7 @@ enum {
 | 
			
		|||
	INTEL_FIRMWARE_FAILED,
 | 
			
		||||
	INTEL_BOOTING,
 | 
			
		||||
	INTEL_BROKEN_INITIAL_NCMD,
 | 
			
		||||
	INTEL_BROKEN_LED,
 | 
			
		||||
 | 
			
		||||
	__INTEL_NUM_FLAGS,
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue