diff options
Diffstat (limited to 'drivers/bluetooth/btbcm.c')
| -rw-r--r-- | drivers/bluetooth/btbcm.c | 48 | 
1 files changed, 48 insertions, 0 deletions
| diff --git a/drivers/bluetooth/btbcm.c b/drivers/bluetooth/btbcm.c index 8e05706fe5d9..1f498f358f60 100644 --- a/drivers/bluetooth/btbcm.c +++ b/drivers/bluetooth/btbcm.c @@ -36,6 +36,7 @@ int btbcm_check_bdaddr(struct hci_dev *hdev)  			     HCI_INIT_TIMEOUT);  	if (IS_ERR(skb)) {  		int err = PTR_ERR(skb); +  		bt_dev_err(hdev, "BCM: Reading device address failed (%d)", err);  		return err;  	} @@ -107,6 +108,52 @@ int btbcm_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr)  }  EXPORT_SYMBOL_GPL(btbcm_set_bdaddr); +int btbcm_read_pcm_int_params(struct hci_dev *hdev, +			      struct bcm_set_pcm_int_params *params) +{ +	struct sk_buff *skb; +	int err = 0; + +	skb = __hci_cmd_sync(hdev, 0xfc1d, 0, NULL, HCI_INIT_TIMEOUT); +	if (IS_ERR(skb)) { +		err = PTR_ERR(skb); +		bt_dev_err(hdev, "BCM: Read PCM int params failed (%d)", err); +		return err; +	} + +	if (skb->len != 6 || skb->data[0]) { +		bt_dev_err(hdev, "BCM: Read PCM int params length mismatch"); +		kfree_skb(skb); +		return -EIO; +	} + +	if (params) +		memcpy(params, skb->data + 1, 5); + +	kfree_skb(skb); + +	return 0; +} +EXPORT_SYMBOL_GPL(btbcm_read_pcm_int_params); + +int btbcm_write_pcm_int_params(struct hci_dev *hdev, +			       const struct bcm_set_pcm_int_params *params) +{ +	struct sk_buff *skb; +	int err; + +	skb = __hci_cmd_sync(hdev, 0xfc1c, 5, params, HCI_INIT_TIMEOUT); +	if (IS_ERR(skb)) { +		err = PTR_ERR(skb); +		bt_dev_err(hdev, "BCM: Write PCM int params failed (%d)", err); +		return err; +	} +	kfree_skb(skb); + +	return 0; +} +EXPORT_SYMBOL_GPL(btbcm_write_pcm_int_params); +  int btbcm_patchram(struct hci_dev *hdev, const struct firmware *fw)  {  	const struct hci_command_hdr *cmd; @@ -177,6 +224,7 @@ static int btbcm_reset(struct hci_dev *hdev)  	skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT);  	if (IS_ERR(skb)) {  		int err = PTR_ERR(skb); +  		bt_dev_err(hdev, "BCM: Reset failed (%d)", err);  		return err;  	} | 
