Re: [PATCH v7 1/6] Bluetooth: btbcm: Move request/release_firmware()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Fred,

> Move request/release_firmware() out of btbcm_patchram().
> This allows a better error management, if request_firmware() returns an
> error then the controller will be used without firmware loading and 0 is
> returned.
> This will imply to change btbcm_patchram() to accept a firmware instead
> of firmware name.
> 
> Signed-off-by: Frederic Danis <frederic.danis@xxxxxxxxxxxxxxx>
> ---
> drivers/bluetooth/btbcm.c | 26 ++++++++++++--------------
> drivers/bluetooth/btbcm.h |  6 ++++--
> 2 files changed, 16 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/bluetooth/btbcm.c b/drivers/bluetooth/btbcm.c
> index 728fce3..c7aec97 100644
> --- a/drivers/bluetooth/btbcm.c
> +++ b/drivers/bluetooth/btbcm.c
> @@ -89,21 +89,14 @@ int btbcm_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr)
> }
> EXPORT_SYMBOL_GPL(btbcm_set_bdaddr);
> 
> -int btbcm_patchram(struct hci_dev *hdev, const char *firmware)
> +int btbcm_patchram(struct hci_dev *hdev, const struct firmware *fw)
> {
> 	const struct hci_command_hdr *cmd;
> -	const struct firmware *fw;
> 	const u8 *fw_ptr;
> 	size_t fw_size;
> 	struct sk_buff *skb;
> 	u16 opcode;
> -	int err;
> -
> -	err = request_firmware(&fw, firmware, &hdev->dev);
> -	if (err < 0) {
> -		BT_INFO("%s: BCM: Patch %s not found", hdev->name, firmware);
> -		return err;
> -	}
> +	int err = 0;
> 
> 	/* Start Download */
> 	skb = __hci_cmd_sync(hdev, 0xfc2e, 0, NULL, HCI_INIT_TIMEOUT);
> @@ -129,8 +122,7 @@ int btbcm_patchram(struct hci_dev *hdev, const char *firmware)
> 		fw_size -= sizeof(*cmd);
> 
> 		if (fw_size < cmd->plen) {
> -			BT_ERR("%s: BCM: Patch %s is corrupted", hdev->name,
> -			       firmware);
> +			BT_ERR("%s: BCM: Patch is corrupted", hdev->name);
> 			err = -EINVAL;
> 			goto done;
> 		}
> @@ -156,7 +148,6 @@ int btbcm_patchram(struct hci_dev *hdev, const char *firmware)
> 	msleep(250);
> 
> done:
> -	release_firmware(fw);
> 	return err;
> }
> EXPORT_SYMBOL(btbcm_patchram);
> @@ -265,6 +256,7 @@ static const struct {
> int btbcm_setup_patchram(struct hci_dev *hdev)
> {
> 	char fw_name[64];
> +	const struct firmware *fw;
> 	u16 subver, rev, pid, vid;
> 	const char *hw_name = NULL;
> 	struct sk_buff *skb;
> @@ -335,9 +327,15 @@ int btbcm_setup_patchram(struct hci_dev *hdev)
> 		hw_name ? : "BCM", (subver & 0x7000) >> 13,
> 		(subver & 0x1f00) >> 8, (subver & 0x00ff), rev & 0x0fff);
> 
> -	err = btbcm_patchram(hdev, fw_name);
> -	if (err == -ENOENT)
> +	err = request_firmware(&fw, fw_name, &hdev->dev);
> +	if (err < 0) {
> +		BT_INFO("%s: BCM: Patch %s not found", hdev->name, fw_name);
> 		return 0;
> +	}
> +
> +	btbcm_patchram(hdev, fw);
> +
> +	release_firmware(fw);
> 
> 	/* Reset */
> 	err = btbcm_reset(hdev);
> diff --git a/drivers/bluetooth/btbcm.h b/drivers/bluetooth/btbcm.h
> index eb6ab5f..de11ace 100644
> --- a/drivers/bluetooth/btbcm.h
> +++ b/drivers/bluetooth/btbcm.h
> @@ -21,11 +21,13 @@
>  *
>  */
> 
> +#include <linux/firmware.h>
> +

I removed this include and put it into the files that reference this.

Regards

Marcel

--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux